This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TDA4VM: MCU_R5 sometimes is frozen when USB cdns3 gadget registers are accessed.

Part Number: TDA4VM

Hello Team,

This ticket's scenario is somehow relevant to the ticket https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1040149/tda4vm-dfu-boots-fail-in-mcu_rom, please check our controller's boot flow first.

The problem here we have is different from the above one. The boot failure scenarios are as follows:

  • the 2nd SOC boots from DFU OK, receiving the first bootlader <tiboot3.bin> successfully.
  • the bootloader tiboot3.bin will enumerate itself as a fastboot device, to further receive other firmwares like sysfw.itb/tispl.bin/uboot.img/qnx etc.

However the MCU_R5 sometimes is totally freezing when the USB CDNS3 gadget driver <in tiboo3.bin> readl or writel some USB registers. These register operations are normally in cdns3_gadget_udc_stop() or cdns3_ep0_config() etc functions. When it comes to this case, the MCU_R5 seems dead completely and the JTAG cannot connect it at all.

For more information, these frozen occasions that seems caused by USB register access, is not observed in A72 MAIN domain. 

Do you have any idea what the problem is? Why the USB device controller is able to hang up the MCU_R5? 

Thanks and Regards,

Raymond.

  • Hi Raymond,

    Can you try the below diff:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c
    index 83dbb5a103d2..64acd9071ba9 100644
    --- a/drivers/usb/cdns3/gadget.c
    +++ b/drivers/usb/cdns3/gadget.c
    @@ -2321,6 +2321,9 @@ static void cdns3_gadget_config(struct cdns3_device *priv_dev)
    writel(USB_IEN_INIT, &regs->usb_ien);
    writel(USB_CONF_CLK2OFFDS | USB_CONF_L1DS, &regs->usb_conf);
    + /* Set the Fast access bit */
    + writel(PUSB_PWR_FST_REG_ACCESS, &priv_dev->regs->usb_pwr);
    +
    cdns3_configure_dmult(priv_dev, NULL);
    cdns3_gadget_pullup(&priv_dev->gadget, 1);
    @@ -2378,6 +2381,7 @@ static int cdns3_gadget_udc_stop(struct usb_gadget *gadget)
    /* disable interrupt for device */
    writel(0, &priv_dev->regs->usb_ien);
    + writel(0, &priv_dev->regs->usb_pwr);
    writel(USB_CONF_DEVDS, &priv_dev->regs->usb_conf);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Best Regards,
    Keerthy

  • Hello Keerthy,

    Thanks for the patch, we applied it but it doesn't help.

    Do you have more ideas?

    Thanks and Regards,

    Raymond.

  • Hi Raymond,

    Local support updated that the issue is not seen right now. We will wait for feedback on this.

    - Keerthy

  • Yes, it's not seen right now. We can close the thread.