Hi Krzysztof, On Mon, 1 Apr 2019 at 18:18, Krzysztof Kozlowski <k...@kernel.org> wrote: > > On Mon, 1 Apr 2019 at 13:52, Anand Moon <linux.am...@gmail.com> wrote: > > > > From: Tobias Jakobi <tjak...@math.uni-bielefeld.de> > > > > Rename board_usb_init() to exynos_usb_init() and call it > > early in the Exynos EHCI driver when probing. > > > > This kind of works. After a 'usb start; usb stop; usb start' > > cycle the attached devices are recognized. > > > > Add small delay between gpio_direction_output to stable > > initialization of usb gpio pins. > > > > Signed-off-by: Tobias Jakobi <tjak...@math.uni-bielefeld.de> > > Signed-off-by: Anand Moon <linux.am...@gmail.com> > > --- > > Reoder the exynos_usb_init so that "usb start" command initialization > > correcly. > > --- > > --- > > board/samsung/odroid/odroid.c | 14 +++++++++----- > > drivers/usb/host/ehci-exynos.c | 7 +++++++ > > 2 files changed, 16 insertions(+), 5 deletions(-) > > > > diff --git a/board/samsung/odroid/odroid.c b/board/samsung/odroid/odroid.c > > index 3e594fd850..79d14ead01 100644 > > --- a/board/samsung/odroid/odroid.c > > +++ b/board/samsung/odroid/odroid.c > > @@ -468,8 +468,6 @@ struct dwc2_plat_otg_data s5pc210_otg_data = { > > }; > > #endif > > > > -#if defined(CONFIG_USB_GADGET) || defined(CONFIG_CMD_USB) > > - > > static void set_usb3503_ref_clk(void) > > { > > #ifdef CONFIG_BOARD_TYPES > > @@ -490,9 +488,8 @@ static void set_usb3503_ref_clk(void) > > #endif /* CONFIG_BOARD_TYPES */ > > } > > > > -int board_usb_init(int index, enum usb_init_type init) > > +int exynos_usb_init(void) > > { > > -#ifdef CONFIG_CMD_USB > > struct udevice *dev; > > int ret; > > > > @@ -501,6 +498,7 @@ int board_usb_init(int index, enum usb_init_type init) > > /* Disconnect, Reset, Connect */ > > gpio_direction_output(EXYNOS4X12_GPIO_X34, 0); > > gpio_direction_output(EXYNOS4X12_GPIO_X35, 0); > > + sdelay(200000); > > This should be a separate patch with its own explanation. > > > gpio_direction_output(EXYNOS4X12_GPIO_X35, 1); > > gpio_direction_output(EXYNOS4X12_GPIO_X34, 1); > > > > @@ -530,7 +528,13 @@ int board_usb_init(int index, enum usb_init_type init) > > pr_err("Regulator %s value setting error: %d\n", dev->name, > > ret); > > return ret; > > } > > -#endif > > + > > + return 0; > > +} > > + > > +#ifdef CONFIG_USB_GADGET > > +int board_usb_init(int index, enum usb_init_type init) > > +{ > > debug("USB_udc_probe\n"); > > return dwc2_udc_probe(&s5pc210_otg_data); > > } > > diff --git a/drivers/usb/host/ehci-exynos.c b/drivers/usb/host/ehci-exynos.c > > index fabc662eb6..b0f7bd4936 100644 > > --- a/drivers/usb/host/ehci-exynos.c > > +++ b/drivers/usb/host/ehci-exynos.c > > @@ -31,6 +31,8 @@ struct exynos_ehci_platdata { > > struct gpio_desc vbus_gpio; > > }; > > > > +extern int exynos_usb_init(void); > > + > > /** > > * Contains pointers to register base addresses > > * for the usb controller. > > @@ -152,6 +154,11 @@ static void exynos4412_setup_usb_phy(struct > > exynos4412_usb_phy *usb) > > setbits_le32(&usb->usbphyrstcon, (RSTCON_HOSTPHY_SWRST | > > RSTCON_SWRST)); > > udelay(10); > > clrbits_le32(&usb->usbphyrstcon, (RSTCON_HOSTPHY_SWRST | > > RSTCON_SWRST)); > > + > > + /* > > + * "usb start" initialize the usb driver > > + */ > > + exynos_usb_init(); > > It should be something more generic like > CONFIG_SYS_USB_OHCI_BOARD_INIT which calls board_usb_init()... but it > still will be calling board code from the driver. Why do you need this > in the first place?
Ideally usb start should be invoked while loading of the u-boot. but some how this is missing I could not figure out this. I have tried following in odroid.c but still no sign of usb to get initialize usb, int board_eth_init(bd_t *bis) { printf("Registered USB_ETHER\n"); exynos_usb_init(); return 0; } Here is the debugging I tried to under stand before I tried to modify the code. Before usb start is called. Odroid # dm help dm - Driver model low level access ... gpio 44 [ ] gpio_exynos | |-- gpv3 gpio 45 [ ] gpio_exynos | `-- gpv4 usb 0 [ ] ehci_exynos `-- ehci@12580000 After usb start Odroid # usb start starting USB... USB0: USB EHCI 1.00 scanning bus 0 for devices... 4 USB Device(s) found scanning usb for storage devices... 1 Storage Device(s) found scanning usb for ethernet devices... 1 Ethernet Device(s) found Odroid # dm tree gpio 45 [ ] gpio_exynos | `-- gpv4 usb 0 [ + ] ehci_exynos `-- ehci@12580000 usb_hub 0 [ + ] usb_hub `-- usb_hub usb_dev_ge 0 [ + ] usb_dev_generic_drv |-- generic_bus_0_dev_2 usb_hub 1 [ + ] usb_hub `-- usb_hub usb_mass_s 0 [ + ] usb_mass_storage `-- usb_mass_storage blk 2 [ ] usb_storage_blk `-- usb_mass_storage.lun0 After the dm node register we can perform usb and ethernet operation on u-boot. Any other input's I can try this out. Best Regards -Anand _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot