[U-Boot] [PATCH 1/3] usb: ehci-mx6: implement ofdata_to_platdata

Peng Fan peng.fan at nxp.com
Thu Dec 22 02:20:13 CET 2016



> -----Original Message-----
> From: Marek Vasut [mailto:marex at denx.de]
> Sent: Wednesday, December 21, 2016 10:08 PM
> To: Peng Fan <peng.fan at nxp.com>; sbabic at denx.de
> Cc: u-boot at lists.denx.de; van.freenix at gmail.com; Simon Glass
> <sjg at chromium.org>
> Subject: Re: [PATCH 1/3] usb: ehci-mx6: implement ofdata_to_platdata
> 
> On 12/21/2016 09:14 AM, Peng Fan wrote:
> > Implement ofdata_to_platdata to set the type to host or device.
> >  - Check "dr-mode" property.
> >  - If there is no "dr-mode", check phy_ctrl for i.MX6
> >    and phy_status for i.MX7
> >
> > Signed-off-by: Peng Fan <peng.fan at nxp.com>
> > Cc: Marek Vasut <marex at denx.de>
> > Cc: Simon Glass <sjg at chromium.org>
> > Cc: Stefano Babic <sbabic at denx.de>
> > ---
> >  drivers/usb/host/ehci-mx6.c | 66
> > +++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 66 insertions(+)
> >
> > diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c
> > index 48889c1..91413c9 100644
> > --- a/drivers/usb/host/ehci-mx6.c
> > +++ b/drivers/usb/host/ehci-mx6.c
> > @@ -15,10 +15,13 @@
> >  #include <asm/arch/imx-regs.h>
> >  #include <asm/arch/clock.h>
> >  #include <asm/imx-common/iomux-v3.h>
> > +#include <asm/imx-common/sys_proto.h>
> >  #include <dm.h>
> >
> >  #include "ehci.h"
> >
> > +DECLARE_GLOBAL_DATA_PTR;
> > +
> >  #define USB_OTGREGS_OFFSET	0x000
> >  #define USB_H1REGS_OFFSET	0x200
> >  #define USB_H2REGS_OFFSET	0x400
> > @@ -48,6 +51,7 @@
> >  #define ANADIG_USB2_PLL_480_CTRL_EN_USB_CLKS	0x00000040
> >
> >  #define USBNC_OFFSET		0x200
> > +#define USBNC_PHY_STATUS_OFFSET	0x23C
> >  #define USBNC_PHYSTATUS_ID_DIG	(1 << 4) /* otg_id status */
> >  #define USBNC_PHYCFG2_ACAENB	(1 << 4) /* otg_id detection enable */
> >  #define UCTRL_PWR_POL		(1 << 9) /* OTG Polarity of Power Pin */
> > @@ -417,6 +421,67 @@ static const struct ehci_ops mx6_ehci_ops = {
> >  	.init_after_reset = mx6_init_after_reset  };
> >
> > +static int ehci_usb_ofdata_to_platdata(struct udevice *dev) {
> > +	struct usb_platdata *plat = dev_get_platdata(dev);
> > +	void *__iomem addr = (void *__iomem)dev_get_addr(dev);
> > +	void *__iomem phy_ctrl, *__iomem phy_status;
> > +	const void *blob = gd->fdt_blob;
> > +	int offset = dev->of_offset, phy_off;
> > +	const char *mode;
> > +	u32 val;
> > +
> > +	mode = fdt_getprop(blob, offset, "dr_mode", NULL);
> > +	if (mode) {
> > +		if (strcmp(mode, "peripheral") == 0)
> > +			plat->init_type = USB_INIT_DEVICE;
> > +		else if (strcmp(mode, "host") == 0)
> > +			plat->init_type = USB_INIT_HOST;
> > +		else if (strcmp(mode, "otg") == 0)
> > +			plat->init_type = USB_INIT_HOST;
> 
> Shouldn't this case check the phy status register ?

Yeah. Thanks for pointing this out. Will fix it in V2.

> 
> > +		else
> > +			return -EINVAL;
> > +	} else {
> 
> You can probably do return 0 in the if (mode) branch and then indent this
> whole else branch to the left.

Will fix this in V2.

Thanks,
Peng.


More information about the U-Boot mailing list