iMX6Q USB Host HSIC will hang on 4 minutes when USB hub reset over HW reset pin.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

iMX6Q USB Host HSIC will hang on 4 minutes when USB hub reset over HW reset pin.

Jump to solution
2,242 Views
seanchen
Contributor III

Dear All,

I'm using iMX6Q for development product.

Problem Status:

1, We use Host 3 to connect USB HUB(SMSC USB4604), And HUB of USB4604 have a HW reset pin.

2, When I force USB4604 over HW reset pin, USB Host 3 will hang on 4 minutes.

That hang on 4 minute look like define by code.

We want to decrease USB hang on 4 minutes period,

Does any one know where can modify that 4 minutes value?

Labels (1)
1 Solution
1,076 Views
XiaoPong
NXP Employee
NXP Employee

Hi, Sean,

    The HSIC interface does not have a bus state for disconnect. The hardware signaling on HSIC is totally different from normal USB and not all bus states are supported. Besides, there is no 4-minute or 240-second clearly defined in USB driver, so the 4-minute is probably the sum of delays between attempts to access a device on the hub, or the hub, but that consistently fails because the hub is not re-initialized after hardware reset assertion. Attach HSIC spec for you reference.

     In addition, there is an alternate solution to reset USB devices by software published on "Ask Ubuntu, and its url is

http://askubuntu.com/questions/645/how-do-you-reset-a-usb-device-from-the-command-line

With it, I am able to reset each USB device successfully.

Best Regards,

Wilson Hung

View solution in original post

0 Kudos
4 Replies
1,077 Views
XiaoPong
NXP Employee
NXP Employee

Hi, Sean,

    The HSIC interface does not have a bus state for disconnect. The hardware signaling on HSIC is totally different from normal USB and not all bus states are supported. Besides, there is no 4-minute or 240-second clearly defined in USB driver, so the 4-minute is probably the sum of delays between attempts to access a device on the hub, or the hub, but that consistently fails because the hub is not re-initialized after hardware reset assertion. Attach HSIC spec for you reference.

     In addition, there is an alternate solution to reset USB devices by software published on "Ask Ubuntu, and its url is

http://askubuntu.com/questions/645/how-do-you-reset-a-usb-device-from-the-command-line

With it, I am able to reset each USB device successfully.

Best Regards,

Wilson Hung

0 Kudos
1,076 Views
aven_tsao
NXP Employee
NXP Employee

It seems you only reset the external USB HUB, and the HSIC still keep in previous state.

Suggest reset both USB HSIC module and external USB HUB to prevent this phenomenon.

Best regards

Aven

0 Kudos
1,076 Views
seanchen
Contributor III

Dear Aven,

We tried build in usb host module, And test failed on usb host 3.

Our procedure:

1, unmount usb host module.

2, External HUB reset over HW reset pin.

3, mount usb host module.

=====================================================================================

We changed USB host driver from built-in to module, then stop controller by unloading USB host driver and restart controller by loading USB host driver. This way works for HOST1, but does not work for HOST3. While checking with usb_h1.c and usb_h3.c, found that usb_h3.c seems not to support phy disconnected detection.

static struct fsl_usb2_platform_data usbh1_config = {

.name = "Host 1",

.init = fsl_usb_host_init_ext ,

.exit = fsl_usb_host_uninit_ext ,

. operating_mode = FSL_USB2_MPH_HOST,

. phy_mode = FSL_USB2_PHY_UTMI_WIDE,

. power_budget = 500, /* 500 mA max power */

. wake_up_enable = _ wake_up_enable ,

. usb_clock_for_pm = usbh1_clock_gate,

. platform_set_disconnect_det = fsl_platform_h1_set_usb_phy_dis,

. phy_lowpower_suspend = _ phy_lowpower_suspend ,

. is_wakeup_event = _is_usbh1_wakeup,

. wakeup_handler = h1_wakeup_handler,

. platform_phy_power_on = usbh1_platform_phy_power_on,

.transceiver = " utmi ",

. phy_regs = USB_PHY1_BASE_ADDR,

};

static struct fsl_usb2_platform_data usbh3_config = {

.name = "Host 3",

.init = fsl_usb_host_init_ext ,

.exit = fsl_usb_host_uninit_ext ,

. operating_mode = FSL_USB2_MPH_HOST,

. phy_mode = FSL_USB2_PHY_HSIC,

. power_budget = 500, /* 500 mA max power */

. wake_up_enable = _ wake_up_enable ,

. usb_clock_for_pm = usbh3_clock_gate,

. phy_lowpower_suspend = _ phy_lowpower_suspend ,

. is_wakeup_event = _is_usbh3_wakeup,

. wakeup_handler = usbh3_wakeup_handler,

.transceiver = " hsic_xcvr ",

. hsic_post_ops = hsic_start ,

. hsic_device_connected = hsic_device_connected ,

};

  Therefore, this way seems does not work for HSIC. Could you give us any suggestion?

0 Kudos
1,076 Views
JayTu
NXP Employee
NXP Employee

Does "USB Host 3 hang" mean HSIC didn't detect usb hub connect?

When external usb hub is reset, does Strobe and Data follow HSIC spec to generate RESET signal for HSIC?

After usb hub resets, does Strobe and Data generate CONNECT signal to notify HSIC?

cheers,

Jay