Part Number: AM3352
Hi,
I am trying to get the am3352 (ZCE) working working with the USB2514BT hub but the hub will not enumerate. I am using a custom board and custom yocto linux distro (kernel version 4.14.0). I have proved that the USB kernel and modules have been configured correctly.The test procedure was:
- Beagle bone black connected over USB to a custom USB hub featuring the USB2514BT
- I used the linux kernel and filesystem from the custom board and replaced the u-boot and dtb files with the pre-build beagle bone black files.
- I booted the BBB off the SD card containing the above. The USB2514BT enumerated correctly.
So I'm fairly sure the issue is the hardware.
I know that my schematic is wrong and that I should have connected VBUS and DRVVBUS like in the example:
https://e2e.ti.com/support/processors/f/processors-forum/579191/am335x-usb-hub-not-working
I think i should be able to get around this with the following patch:
diff --git a/arch/arm/mach-omap2/omap_phy_internal.c b/arch/arm/mach-omap2/omap_phy_internal.c
index 13bfef3..e41b224 100644
--- a/arch/arm/mach-omap2/omap_phy_internal.c
+++ b/arch/arm/mach-omap2/omap_phy_internal.c
@@ -288,8 +288,17 @@ void ti81xx_musb_phy_power(u8 id, u8 on , bool wkup)
TI816X_USBPHY0_NORMAL_MODE;
usbphycfg &= ~TI816X_USBPHY_REFCLK_OSC;
} else if (cpu_is_am33xx()) {
- usbphycfg &= ~(USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN);
- usbphycfg |= (USBPHY_OTGVDET_EN | USBPHY_OTGSESSEND_EN);
+ usbphycfg &= ~(USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN | USBPHY_OTGVDET_EN);
+
+ /* HACK: If USB0 port is in host-only mode, clear its
+ * USBPHY_OTGVDET_EN bit to ignore first VBUS sensing.
+ * Change 0 to 1 if USB1 port is in host-only mode.
+ */
+ if (id == 0)
+ usbphycfg |= USBPHY_OTGSESSEND_EN;
+ else
+ usbphycfg |= (USBPHY_OTGVDET_EN | USBPHY_OTGSESSEND_EN);
+
usbwkupctrl = AM33XX_USB_WKUP_CTRL_DISABLE;
}
} else {
omap_phy_internal.c in kernel 4.14.0 seems to be different, there is no ti81xx_musb_phy_power() function.
It looks to me that this patch has been implemented already but in another location: drivers/usb/phy/phy-am335x-control.c.
Please could you let me know if I am correct in thinking that the this code in phy-am335x-control.c does the same job as the patch?
I have noticed that am335x_phy_power() only gets called when the kernel is configured for dual role mode, not when USB host only mode is selected.
Relevant extract from the device tree:
Schematic:

Thank you for reading.
Regards,
Dave