[U-Boot] [RFC 1/6] odroid: exynos: USB initialization on the U3/X2

Tobias Jakobi tjakobi at math.uni-bielefeld.de
Wed Apr 3 19:58:32 UTC 2019


Hello,

in case this isn't totally obvious, I want to state it here again: THIS IS A HACK!

This patch of mine was never meant for upstream submission. Note that the
original commit has a TODO included, which again makes clear: This is not the
proper way to do it. It's a quick&dirty solution because I needed booting via
tftp. Nothing more.

I have seen this plently of times now. Anand Moon takes some code, tinkers
around with it and then presents it for review. The problem is that he doesn't
even bother to understand what he's doing and when he arrives at something
semi-working, it is more by chance than anything else. I feel sorry for
Krzysztof (and others), who, with the patience of a monk to say the least, has
to deal with this time and time again.

- Tobias



Anand Moon wrote:
> From: Tobias Jakobi <tjakobi at 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 <tjakobi at math.uni-bielefeld.de>
> Signed-off-by: Anand Moon <linux.amoon at 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);
>  	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();
>  }
>  
>  static void setup_usb_phy(struct exynos_usb_phy *usb)
> 



More information about the U-Boot mailing list