[U-Boot] [PATCH v1] usb: ehci-mx6: Fix bus enumeration for iMX7 SoCs

Marek Vasut marex at denx.de
Thu Oct 10 11:47:52 UTC 2019


On 10/10/19 1:25 PM, Igor Opaniuk wrote:
[...]
>  	 * from which it derives offsets in the PHY and ANATOP register sets.
>  	 *
>  	 * Here we attempt to calculate these indexes from DT information as
> -	 * well as we can. The USB controllers on all existing iMX6/iMX7 SoCs
> -	 * are placed next to each other, at addresses incremented by 0x200.
> -	 * Thus, the index is derived from the multiple of 0x200 offset from
> -	 * the first controller address.
> +	 * well as we can. The USB controllers on all existing iMX6 SoCs
> +	 * are placed next to each other, at addresses incremented by 0x200,
> +	 * and iMX7 their addresses are shifted by 0x1000.
> +	 * Thus, the index is derived from the multiple of 0x200 (0x1000 for
> +	 * iMX7) offset from the first controller address.
>  	 *
>  	 * However, to complete conversion of this driver to DT probing, the
>  	 * following has to be done:
> @@ -531,10 +532,14 @@ static int ehci_usb_bind(struct udevice *dev)
>  	 * With these changes in place, the ad-hoc indexing goes away and
>  	 * the driver is fully converted to DT probing.
>  	 */
> -	fdt_size_t size;
> -	fdt_addr_t addr = devfdt_get_addr_size_index(dev, 0, &size);
> +#if defined(CONFIG_MX6)
> +	u32 controller_spacing = 0x200;
> +#elif defined(CONFIG_MX7)
> +	u32 controller_spacing = 0x10000;
> +#endif
> +	fdt_addr_t addr = devfdt_get_addr_size_index(dev, 0, NULL);

This won't work with U-Boot that's compiled for both platforms, so you
need some other way to discern those two things. Either something like
cpu_is_...() or some DT match.


More information about the U-Boot mailing list