Other Parts Discussed in Thread: TDA4VM, TDA4VH
Dear ti,
we use the linux SDK 0805 version to test uboot fastboot function, buf found the issue:
after the uboot run "fastboot_handle_command : download:00008600", the usb dma index can't automatic increase the number “1”
we found the usb dma index is from the function:
static int cdns3_get_dma_pos(struct cdns3_device *priv_dev,
struct cdns3_endpoint *priv_ep)
{
int dma_index;
printf("%s ruijie :ep_traddr: 0x%x, readl(ep_traddr):0x%x trb_pool_dma:0x%x\n", __func__, priv_dev->regs->ep_traddr, readl(&priv_dev->regs->ep_traddr), priv_ep->trb_pool_dma);
dma_index = readl(&priv_dev->regs->ep_traddr) - priv_ep->trb_pool_dma;
return dma_index / TRB_SIZE;
}
we found the usb priv_dev->regs->ep_traddr can‘t automatic increase,
the log printf in TDA4VM ,it is normal log,
in line 2: cdns3_get_dma_pos ruijie :ep_traddr: 0xf7ec269c, readl(ep_traddr):0xf7ec269c trb_pool_dma:0xf7ec2600
in line 57:cdns3_get_dma_pos ruijie :ep_traddr: 0xf7ec26a8, readl(ep_traddr):0xf7ec26a8 trb_pool_dma:0xf7ec2600
but TDA4VH the ep_traddr value can't increase
cdns3_select_ep return cdns3_get_dma_pos ruijie :ep_traddr: 0xf7ec269c, readl(ep_traddr):0xf7ec269c trb_pool_dma:0xf7ec2600 cdns3_request_handled trb->control & TRB_CYCLE: 0x1 priv_ep->ccs:0x1 cdns3_request_handled current_index: 13, priv_ep->dequeue:12 cdns3_request_handled:===enter===trb[00000000f7ec2690] doorbell[1] ep_cmd[53824] cdns3_request_handled: ep->dequeue[12] ep->enqueue[13] req->start_trb[12] req->end_trb[12] current_index[13],trb_pool_dma[00000000f7ec2600] free_trbs[38] num_trbs[40] flags[0x141] dir[0] num[1], priv_req->request.complete[00000000fff45130] cdns3_request_handled ruijie 3 cdns3_transfer_completed call cdns3_gadget_giveback 17 4096 cdns3_gadget_giveback enter 00000000fff45130 cdns3_gadget_giveback usb_gadget_giveback_request 00000000fff45130 actual:17 length:4096 fastboot_handle_command : download:00008600 Starting download of 34304 bytes rx_handler_command DATA ruijie cdns3_select_ep writel(ep, &priv_dev->regs->ep_sel); cdns3_gadget_ep_dequeue goto pending_req_list found cdns3_gadget_ep_dequeue call cdns3_gadget_giveback cdns3_gadget_giveback enter 00000000fff4498c cdns3_gadget_giveback usb_gadget_giveback_request 00000000fff4498c status: -104 ep 'ep1in' trans: 0 cdns3_gadget_ep_queue enter ep_cmd: 0xea00 __cdns3_gadget_ep_queue ep_cmd: 0xea00 cdns3_start_all_request start cdns3_start_all_request call cdns3_ep_run_transfer cdns3_ep_run_transfer start ep_cmd:0xea00 cdns3_select_ep return cdns3_ep_run_transfer start 2222 ep_cmd:0xea00 cdns3_ep_run_transfer call cdns3_wa1_update_guard cdns3_wa1_update_guard ruijie doorbell: 0 regs->ep_cmd: 0xea00 cdns3_ep_run_transfer start 333 ep_cmd:0xea00 cdns3_get_dma_pos ruijie :ep_traddr: 0xf7ec39c4, readl(ep_traddr):0xf7ec39c4 trb_pool_dma:0xf7ec3940 cdns3_ep_run_transfer strat_trb: 11 , addr: 0xf7ec39c4, ep_traddr: 0xf7ec39c4 cdns3_ep_run_transfer start 4444 ep_cmd:0xea00 cdns3_ep_run_transfer priv_ep->wa1_set: 0 priv_ep->flags: 0x141 cdns3_ep_run_transfer EP_CMD_DRDY __cdns3_gadget_ep_queue end ep_cmd: 0xea40 cdns3_gadget_ep_queue end ep_cmd: 0xe800 cdns3_gadget_ep_queue enter ep_cmd: 0xe800 __cdns3_gadget_ep_queue ep_cmd: 0xe800 cdns3_start_all_request start cdns3_start_all_request call cdns3_ep_run_transfer cdns3_ep_run_transfer start ep_cmd:0xe800 cdns3_select_ep writel(ep, &priv_dev->regs->ep_sel); cdns3_ep_run_transfer start 2222 ep_cmd:0xce00 cdns3_ep_run_transfer call cdns3_wa1_update_guard cdns3_wa1_update_guard ruijie doorbell: 0 regs->ep_cmd: 0xce00 cdns3_ep_run_transfer start 333 ep_cmd:0xce00 cdns3_get_dma_pos ruijie :ep_traddr: 0xf7ec269c, readl(ep_traddr):0xf7ec269c trb_pool_dma:0xf7ec2600 cdns3_ep_run_transfer start 4444 ep_cmd:0xce00 cdns3_ep_run_transfer priv_ep->wa1_set: 0 priv_ep->flags: 0x141 cdns3_ep_run_transfer EP_CMD_DRDY __cdns3_gadget_ep_queue end ep_cmd: 0xce40 cdns3_gadget_ep_queue end ep_cmd: 0xbe00 cdns3_select_ep return cdns3_get_dma_pos ruijie :ep_traddr: 0xf7ec26a8, readl(ep_traddr):0xf7ec26a8 trb_pool_dma:0xf7ec2600 cdns3_request_handled trb->control & TRB_CYCLE: 0x1 priv_ep->ccs:0x1 cdns3_request_handled current_index: 14, priv_ep->dequeue:13 cdns3_request_handled:===enter===trb[00000000f7ec269c] doorbell[0] ep_cmd[48640] cdns3_request_handled: ep->dequeue[13] ep->enqueue[14] req->start_trb[13] req->end_trb[13] current_index[14],trb_pool_dma[00000000f7ec2600] free_trbs[38] num_trbs[40] flags[0x141] dir[0] num[1], priv_req->request.complete[00000000fff4504c] cdns3_request_handled ruijie 3 cdns3_transfer_completed call cdns3_gadget_giveback 4096 4096 cdns3_gadget_giveback enter 00000000fff4504c cdns3_gadget_giveback usb_gadget_giveback_request 00000000fff4504c cdns3_gadget_ep_queue enter ep_cmd: 0xbe00 __cdns3_gadget_ep_queue ep_cmd: 0xbe00 cdns3_start_all_request start cdns3_start_all_request call cdns3_ep_run_transfer cdns3_ep_run_transfer start ep_cmd:0xbe00 cdns3_select_ep return cdns3_ep_run_transfer start 2222 ep_cmd:0xbe00 cdns3_ep_run_transfer call cdns3_wa1_update_guard cdns3_wa1_update_guard ruijie doorbell: 0 regs->ep_cmd: 0xbe00 cdns3_ep_run_transfer start 333 ep_cmd:0xbe00 cdns3_get_dma_pos ruijie :ep_traddr: 0xf7ec26a8, readl(ep_traddr):0xf7ec26a8 trb_pool_dma:0xf7ec2600 cdns3_ep_run_transfer start 4444 ep_cmd:0xbe00 cdns3_ep_run_transfer priv_ep->wa1_set: 0 priv_ep->flags: 0x141 cdns3_ep_run_transfer EP_CMD_DRDY __cdns3_gadget_ep_queue end ep_cmd: 0xbe40 cdns3_gadget_ep_queue end ep_cmd: 0xae00 cdns3_select_ep return cdns3_get_dma_pos ruijie :ep_traddr: 0xf7ec26b4, readl(ep_traddr):0xf7ec26b4 trb_pool_dma:0xf7ec2600 cdns3_request_handled trb->control & TRB_CYCLE: 0x1 priv_ep->ccs:0x1 cdns3_request_handled current_index: 15, priv_ep->dequeue:14 cdns3_request_handled:===enter===trb[00000000f7ec26a8] doorbell[0] ep_cmd[44544] cdns3_request_handled: ep->dequeue[14] ep->enqueue[15] req->start_trb[14] req->end_trb[14] current_index[15],trb_pool_dma[00000000f7ec2600] free_trbs[38] num_trbs[40] flags[0x141] dir[0] num[1], priv_req->request.complete[00000000fff4504c] cdns3_request_handled ruijie 3 cdns3_transfer_completed call cdns3_gadget_giveback 4096 4096 cdns3_gadget_giveback enter 00000000fff4504c cdns3_gadget_giveback usb_gadget_giveback_request 00000000fff4504c cdns3_gadget_ep_queue enter ep_cmd: 0xae00 __cdns3_gadget_ep_queue ep_cmd: 0xae00 cdns3_start_all_request start cdns3_start_all_request call cdns3_ep_run_transfer cdns3_ep_run_transfer start ep_cmd:0xae00 cdns3_select_ep return cdns3_ep_run_transfer start 2222 ep_cmd:0xae00 cdns3_ep_run_transfer call cdns3_wa1_update_guard cdns3_wa1_update_guard ruijie doorbell: 0 regs->ep_cmd: 0xae00 cdns3_ep_run_transfer start 333 ep_cmd:0xae00 cdns3_get_dma_pos ruijie :ep_traddr: 0xf7ec26b4, readl(ep_traddr):0xf7ec26b4 trb_pool_dma:0xf7ec2600 cdns3_ep_run_transfer start 4444 ep_cmd:0xae00 cdns3_ep_run_transfer priv_ep->wa1_set: 0 priv_ep->flags: 0x141 cdns3_ep_run_transfer EP_CMD_DRDY __cdns3_gadget_ep_queue end ep_cmd: 0xae40 cdns3_gadget_ep_queue end ep_cmd: 0x9e00
we found the USB dev revision in TDA4VM is DEV_VER_TI_V1 , but in TDA4VH the usb version is DEV_VER_V3,
modify the TDA4VH use version to DEV_VER_TI_V1, the issue is fixed, can you help this? thanks
priv_dev->dev_ver = readl(&priv_dev->regs->usb_cap6); dev_dbg(priv_dev->dev, "Device Controller version: %08x\n", readl(&priv_dev->regs->usb_cap6)); dev_dbg(priv_dev->dev, "USB Capabilities:: %08x\n", readl(&priv_dev->regs->usb_cap1)); dev_dbg(priv_dev->dev, "On-Chip memory cnfiguration: %08x\n", readl(&priv_dev->regs->usb_cap2)); priv_dev->dev_ver = GET_DEV_BASE_VERSION(priv_dev->dev_ver);