usb: dwc2: Pass private data into dwc_otg_core_init()
Subsystems (2)
PATCH 1/4 usb: dwc2: Pass private data into dwc_otg_core_init()
Pass the whole bulk of private data instead of just the regs, since the private data will soon contain important configuration flags.
--- drivers/usb/host/dwc2.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/usb/host/dwc2.c +3 -2
@@ -252,8 +252,9 @@ static void dwc_otg_core_host_init(struct dwc2_core_regs *regs)* * @param regs Programming view of the DWC_otg controller */ -static void dwc_otg_core_init (struct dwc2_core_regs *regs) +static void dwc_otg_core_init (struct dwc2_priv *priv) { +struct dwc2_core_regs *regs = priv->regs;uint32_t ahbcfg =0 ;uint32_t usbcfg =0 ;uint8_t brst_sz =CONFIG_DWC2_DMA_BURST_SIZE ;
@@ -1056,7 +1057,7 @@ static int dwc2_init_common(struct dwc2_priv *priv)return -ENODEV ; } -dwc_otg_core_init (regs); +dwc_otg_core_init (priv);dwc_otg_core_host_init (regs); clrsetbits_le32(®s->hprt0, DWC2_HPRT0_PRTENA |
Signature · 1 line
2.7.0
PATCH 2/4 usb: dwc2: Pull Ext VBUS macro from dwc_otg_core_init()
Introduce a boolean flag in the dwc2 controller private data and set it according to the macro (for now) instead of having this macro directly in the dwc_otg_core_init(). This will let us configure the flag from DT or such later on, if needed.
--- drivers/usb/host/dwc2.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-)
drivers/usb/host/dwc2.c +14 -7
@@ -39,6 +39,7 @@ struct dwc2_priv {u8 out_data_toggle[MAX_DEVICE ][MAX_ENDPOINT ];struct dwc2_core_regs *regs;int root_hub_devnum; +bool ext_vbus; };#ifndef CONFIG_DM_USB
@@ -263,13 +264,13 @@ static void dwc_otg_core_init(struct dwc2_priv *priv) usbcfg =readl (®s->gusbcfg);/* Program the ULPI External VBUS bit if needed */ -#ifdef CONFIG_DWC2_PHY_ULPI_EXT_VBUS - usbcfg |= (DWC2_GUSBCFG_ULPI_EXT_VBUS_DRV | -DWC2_GUSBCFG_ULPI_INT_VBUS_INDICATOR | -DWC2_GUSBCFG_INDICATOR_PASSTHROUGH ); -#else - usbcfg &= ~DWC2_GUSBCFG_ULPI_EXT_VBUS_DRV ; -#endif +if (priv->ext_vbus) { + usbcfg |= (DWC2_GUSBCFG_ULPI_EXT_VBUS_DRV | +DWC2_GUSBCFG_ULPI_INT_VBUS_INDICATOR | +DWC2_GUSBCFG_INDICATOR_PASSTHROUGH ); + }else { + usbcfg &= ~DWC2_GUSBCFG_ULPI_EXT_VBUS_DRV ; + }/* Set external TS Dline pulsing */ #ifdef CONFIG_DWC2_TS_DLINE
@@ -1057,6 +1058,12 @@ static int dwc2_init_common(struct dwc2_priv *priv)return -ENODEV ; } +#ifdef CONFIG_DWC2_PHY_ULPI_EXT_VBUS + priv->ext_vbus =1 ; +#else + priv->ext_vbus =0 ; +#endif +dwc_otg_core_init (priv);dwc_otg_core_host_init (regs);
Signature · 1 line
2.7.0
PATCH 2/4 usb: dwc2: Pull Ext VBUS macro from dwc_otg_core_init()
Quoted 8 lines · Marek Vasut
Introduce a boolean flag in the dwc2 controller private data and set it according to the macro (for now) instead of having this macro directly in the
dwc_otg_core_init(). This will let us configure the flag from DT or such later on, if needed.Signed-off-by Marek Vasut <[email protected]>Cc Stefan Roese <[email protected]>Cc Dinh Nguyen <[email protected]>
Thanks,
Stefan
PATCH 3/4 usb: dwc2: Make OC protection configurable
In reply to Marek VasutIntroduce a new flag in the controller private data, which allows selectively disabling the OC protection. Use the standard 'disable-over-current' OF prop to set this flag. This OC protection must be disabled on EBV SoCrates rev 1.
--- drivers/usb/host/dwc2.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-)
drivers/usb/host/dwc2.c +14 -3
@@ -18,6 +18,8 @@#include "dwc2.h" +DECLARE_GLOBAL_DATA_PTR ; +/* Use only HC channel 0. */ #define DWC2_HC_CHANNEL 0
@@ -40,6 +42,7 @@ struct dwc2_priv {struct dwc2_core_regs *regs;int root_hub_devnum;bool ext_vbus; +bool oc_disable; };#ifndef CONFIG_DM_USB
@@ -265,9 +268,11 @@ static void dwc_otg_core_init(struct dwc2_priv *priv)/* Program the ULPI External VBUS bit if needed */ if (priv->ext_vbus) { - usbcfg |= (DWC2_GUSBCFG_ULPI_EXT_VBUS_DRV | -DWC2_GUSBCFG_ULPI_INT_VBUS_INDICATOR | -DWC2_GUSBCFG_INDICATOR_PASSTHROUGH ); + usbcfg |=DWC2_GUSBCFG_ULPI_EXT_VBUS_DRV ; +if (!priv->oc_disable) { + usbcfg |=DWC2_GUSBCFG_ULPI_INT_VBUS_INDICATOR | +DWC2_GUSBCFG_INDICATOR_PASSTHROUGH ; + } }else { usbcfg &= ~DWC2_GUSBCFG_ULPI_EXT_VBUS_DRV ; }
@@ -1177,6 +1182,7 @@ static int dwc2_submit_int_msg(struct udevice *dev, struct usb_device *udev,static int dwc2_usb_ofdata_to_platdata (struct udevice *dev) {struct dwc2_priv *priv =dev_get_priv (dev); +const void *prop;fdt_addr_t addr; addr =dev_get_addr (dev);
@@ -1184,6 +1190,11 @@ static int dwc2_usb_ofdata_to_platdata(struct udevice *dev)return -EINVAL ; priv->regs = (struct dwc2_core_regs *)addr; + prop =fdt_getprop (gd->fdt_blob, dev->of_offset,"disable-over-current" , +NULL ); +if (prop) + priv->oc_disable = true; +return 0 ; }
Signature · 1 line
2.7.0
PATCH 3/4 usb: dwc2: Make OC protection configurable
Quoted 7 lines · Marek Vasut
Introduce a new flag in the controller private data, which allows selectively disabling the OC protection. Use the standard 'disable-over-current' OF prop to set this flag. This OC protection must be disabled on EBV SoCrates rev 1.
Signed-off-by Marek Vasut <[email protected]>Cc Stefan Roese <[email protected]>Cc Dinh Nguyen <[email protected]>
Thanks,
Stefan
PATCH 4/4 ARM: socfpga: Disable USB OC protection on SoCrates
In reply to Marek VasutThis is mandatory, otherwise the USB does not work.
--- arch/arm/dts/socfpga_cyclone5_socrates.dts | 1 + 1 file changed, 1 insertion(+)
arch/arm/dts/socfpga_cyclone5_socrates.dts +1 -0
@@ -83,5 +83,6 @@ }; &usb1 { + disable-over-current; status = "okay"; };
Signature · 1 line
2.7.0
PATCH 4/4 ARM: socfpga: Disable USB OC protection on SoCrates
Quoted 5 lines · Marek Vasut
This is mandatory, otherwise the USB does not work.
Signed-off-by Marek Vasut <[email protected]>Cc Stefan Roese <[email protected]>Cc Dinh Nguyen <[email protected]>
Thanks,
Stefan
PATCH 1/4 usb: dwc2: Pass private data into dwc_otg_core_init()
In reply to Marek VasutQuoted 7 lines · Marek Vasut
Pass the whole bulk of private data instead of just the regs, since the private data will soon contain important configuration flags.
Signed-off-by Marek Vasut <[email protected]>Cc Stefan Roese <[email protected]>Cc Dinh Nguyen <[email protected]>
Thanks,
Stefan