主题中讨论的其他器件:TDA4VM、 TDA4VH
尊敬的 TI:
我们使用 Linux SDK 0805版本来测试 uboot fastboot 功能、buf 发现了问题:
在 uboot 运行"Fastboot_handle_command:download:00008600 "后、USB DMA 索引无法自动增加数字"1"
我们发现 USB DMA 索引来自函数:
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;
}
n‘t 找到了 usb priv_dev->regs->ep_traddr 无法 自动增大,
TDA4VM 中的 log printf,它是正常的 log,
在第2行: cdns3_get_dma_pos ruijie:ep_traddr:0xf7ec269c、readl (EP_traddr):0xf7ec269c trb_pool_dma:0xf7ec2600
在第57行:cdns3_get_dma_pos ruijie:ep_traddr:0xf7ec26a8、readl (EP_traddr):0xf7ec26a8 trb_pool_dma:0xf7ec2600
但 TDA4VH EP_traddr 值不能增加
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
我们在 TDA4VM 中发现 USB 的版本是 DEV_VER_TI_V1,但在 TDA4VH 中,USB 版本是 DEV_VER_V3,
将 TDA4VH 使用版本修改为 DEV_VER_TI_V1、问题得到解决、您能提供帮助吗? 谢谢
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);