Re: [PATCH] usb: dwc2: add "u-boot,force-vbus-detection" for stm32
On 12/9/20 6:04 PM, Patrick DELAUNAY wrote: Hi, [...] I add a new property to be backward compatible (even it the combinaison is less clear) I protect regulator function call to avoid compilation issue for other platform. PS: after reading the refmanual, I also split VALOEN and VALOVAL bit update as it is required. So yes I think it is needed but I can split the patch to simplify the review. I presume you don't feel like implementing proper OTG support, right ? Yes, I am afraid of this task. Can you take a look ? I will pick this patch into next for now. I check this topic, I think I don't need to support OTG in dwc2 but I need to support USB port and connector as it is done in linux kernel. and I think that I can propose a plan (6 month-1 year) - Add a new u-class for USB connector based on linux/drivers/usb/typec/class.c => Allow to detect cable connection and USB mode (device / host) - Add a new driver for USB type C connector (compatible "usb-c-connector") - Migrate stusb1600 driver to use this new driver - Update driver (dwc2 or usbphyc or directly in uclass ?) to use connector when present in device tree (devicetree/bindings/connector/usb-connector.yaml) With these modifcations, I hope to have the same hooks than Linux. And for future - Add a USB typeC connector driver based on UCSI (linux/drivers/usb/typec/ucsi) https://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/usb-type-c-ucsi-spec.pdf - Adapt other driver to use USB connector. (as DWC3 for example to manage dual role with type-c) Sounds good, thanks :)
Re: [PATCH] usb: dwc2: add "u-boot,force-vbus-detection" for stm32
Hi Marek, On 12/9/20 5:22 PM, Patrick DELAUNAY wrote: -Original Message- From: Marek Vasut Sent: mardi 20 octobre 2020 12:21 On 10/16/20 6:32 PM, Patrick DELAUNAY wrote: Hi Marek, Hi, [...] On 10/15/20 2:49 PM, Patrick Delaunay wrote: On some board, the ID pin is not connected so the B session must be overridden with "u-boot,force_b_session_valid" but the VBus sensing must continue to be handle. To managed it, this patch adds a new DT field "u-boot,force-vbus-detection" to use with "u-boot,force_b_session_valid" How is this solved in Linux ? It is managed by Linux DWC2 driver: it is a real OTG driver, with dual mode support and by usb framework Throught the properties _hs { usb-role-switch; }; a glue treat the session and the sensing management see linux/drivers/usb/dwc2/drd.c in linux-next PS: activate_stm_id_vb_detection is also used in driver = hsotg->params. As ID pin / vbus is completly managed by the USB TYPE driver C (STUSB1600 for STMicroelectronics board) and DWC2 driver with dual role stack (host/gadget). I don't found a better solution than device tree property for this task in U-Boot as DWC2 driver don't support dual role and U-Boot don't have framework for USB type C controller. btw can you do something about that huge change in indent ? Is it necessary ? I move all this code under activate_stm_id_vb_detection (linked to compatible "st,stm32mp1-hsotg") to avoid impact on other platform as this "sensing" properties are only support for STM32MP15X (it is linked to USB block detection integrated in SOC) And after I need to check the 1/ The usb33d-supply is required of vbus or IDPIN sensing 2/ manage Vbus sensing or override (according dt) 3/ manage IDPIN or override (according dt) I add a new property to be backward compatible (even it the combinaison is less clear) I protect regulator function call to avoid compilation issue for other platform. PS: after reading the refmanual, I also split VALOEN and VALOVAL bit update as it is required. So yes I think it is needed but I can split the patch to simplify the review. I presume you don't feel like implementing proper OTG support, right ? Yes, I am afraid of this task. Can you take a look ? I will pick this patch into next for now. I check this topic, I think I don't need to support OTG in dwc2 but I need to support USB port and connector as it is done in linux kernel. and I think that I can propose a plan (6 month-1 year) - Add a new u-class for USB connector based on linux/drivers/usb/typec/class.c => Allow to detect cable connection and USB mode (device / host) - Add a new driver for USB type C connector (compatible "usb-c-connector") - Migrate stusb1600 driver to use this new driver - Update driver (dwc2 or usbphyc or directly in uclass ?) to use connector when present in device tree (devicetree/bindings/connector/usb-connector.yaml) With these modifcations, I hope to have the same hooks than Linux. And for future - Add a USB typeC connector driver based on UCSI (linux/drivers/usb/typec/ucsi) https://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/usb-type-c-ucsi-spec.pdf - Adapt other driver to use USB connector. (as DWC3 for example to manage dual role with type-c) Patrick
Re: [PATCH] usb: dwc2: add "u-boot,force-vbus-detection" for stm32
Hi Patrick On 10/15/20 2:49 PM, Patrick Delaunay wrote: > On some board, the ID pin is not connected so the B session must be > overridden with "u-boot,force_b_session_valid" but the VBus sensing > must continue to be handle. > > To managed it, this patch adds a new DT field > "u-boot,force-vbus-detection" to use with "u-boot,force_b_session_valid" > > Signed-off-by: Patrick Delaunay > --- > > drivers/usb/gadget/dwc2_udc_otg.c | 59 +- > drivers/usb/gadget/dwc2_udc_otg_regs.h | 2 + > include/usb/dwc2_udc.h | 1 + > 3 files changed, 41 insertions(+), 21 deletions(-) > > diff --git a/drivers/usb/gadget/dwc2_udc_otg.c > b/drivers/usb/gadget/dwc2_udc_otg.c > index eaa5dcb9b1..d20ce6147e 100644 > --- a/drivers/usb/gadget/dwc2_udc_otg.c > +++ b/drivers/usb/gadget/dwc2_udc_otg.c > @@ -1014,6 +1014,9 @@ static int dwc2_udc_otg_ofdata_to_platdata(struct > udevice *dev) > platdata->force_b_session_valid = > dev_read_bool(dev, "u-boot,force-b-session-valid"); > > + platdata->force_vbus_detection = > + dev_read_bool(dev, "u-boot,force-vbus-detection"); > + > /* force platdata according compatible */ > drvdata = dev_get_driver_data(dev); > if (drvdata) { > @@ -1106,31 +1109,45 @@ static int dwc2_udc_otg_probe(struct udevice *dev) > if (ret) > return ret; > > - if (CONFIG_IS_ENABLED(DM_REGULATOR) && > - platdata->activate_stm_id_vb_detection && > - !platdata->force_b_session_valid) { > - ret = device_get_supply_regulator(dev, "usb33d-supply", > - >usb33d_supply); > - if (ret) { > - dev_err(dev, "can't get voltage level detector > supply\n"); > - return ret; > + if (platdata->activate_stm_id_vb_detection) { > + if (CONFIG_IS_ENABLED(DM_REGULATOR) && > + (!platdata->force_b_session_valid || > + platdata->force_vbus_detection)) { > + ret = device_get_supply_regulator(dev, "usb33d-supply", > + >usb33d_supply); > + if (ret) { > + dev_err(dev, "can't get voltage level detector > supply\n"); > + return ret; > + } > + ret = regulator_set_enable(priv->usb33d_supply, true); > + if (ret) { > + dev_err(dev, "can't enable voltage level > detector supply\n"); > + return ret; > + } > } > - ret = regulator_set_enable(priv->usb33d_supply, true); > - if (ret) { > - dev_err(dev, "can't enable voltage level detector > supply\n"); > - return ret; > + > + if (platdata->force_b_session_valid && > + !platdata->force_vbus_detection) { > + /* Override VBUS detection: enable then value*/ > + setbits_le32(_reg->gotgctl, VB_VALOEN); > + setbits_le32(_reg->gotgctl, VB_VALOVAL); > + } else { > + /* Enable VBUS sensing */ > + setbits_le32(_reg->ggpio, > + GGPIO_STM32_OTG_GCCFG_VBDEN); > + } > + if (platdata->force_b_session_valid) { > + /* Override B session bits: enable then value */ > + setbits_le32(_reg->gotgctl, A_VALOEN | B_VALOEN); > + setbits_le32(_reg->gotgctl, > + A_VALOVAL | B_VALOVAL); > + } else { > + /* Enable ID detection */ > + setbits_le32(_reg->ggpio, > + GGPIO_STM32_OTG_GCCFG_IDEN); > } > - /* Enable vbus sensing */ > - setbits_le32(_reg->ggpio, > - GGPIO_STM32_OTG_GCCFG_VBDEN | > - GGPIO_STM32_OTG_GCCFG_IDEN); > } > > - if (platdata->force_b_session_valid) > - /* Override B session bits : value and enable */ > - setbits_le32(_reg->gotgctl, > - A_VALOEN | A_VALOVAL | B_VALOEN | B_VALOVAL); > - > ret = dwc2_udc_probe(platdata); > if (ret) > return ret; > diff --git a/drivers/usb/gadget/dwc2_udc_otg_regs.h > b/drivers/usb/gadget/dwc2_udc_otg_regs.h > index 2eda5c3720..9ca6f42375 100644 > --- a/drivers/usb/gadget/dwc2_udc_otg_regs.h > +++ b/drivers/usb/gadget/dwc2_udc_otg_regs.h > @@ -94,6 +94,8 @@ struct dwc2_usbotg_reg { > #define B_VALOEN BIT(6) > #define A_VALOVALBIT(5) > #define A_VALOEN BIT(4) > +#define VB_VALOVAL BIT(3) > +#define VB_VALOEN
Re: [PATCH] usb: dwc2: add "u-boot,force-vbus-detection" for stm32
On 10/16/20 6:32 PM, Patrick DELAUNAY wrote: > Hi Marek, Hi, [...] On 10/15/20 2:49 PM, Patrick Delaunay wrote: > On some board, the ID pin is not connected so the B session must be > overridden with "u-boot,force_b_session_valid" but the VBus sensing > must continue to be handle. > > To managed it, this patch adds a new DT field > "u-boot,force-vbus-detection" to use with "u-boot,force_b_session_valid" How is this solved in Linux ? >>> >>> It is managed by Linux DWC2 driver: it is a real OTG driver, with dual >>> mode support and by usb framework >>> >>> Throught the properties >>> _hs { >>> usb-role-switch; >>> }; >>> >>> a glue treat the session and the sensing management see >>> linux/drivers/usb/dwc2/drd.c in linux-next >>> >>> PS: activate_stm_id_vb_detection is also used in driver = hsotg->params. >>> >>> As ID pin / vbus is completly managed by the USB TYPE driver C >>> (STUSB1600 for STMicroelectronics board) and DWC2 driver with dual >>> role stack (host/gadget). >>> >>> I don't found a better solution than device tree property for this >>> task in U-Boot as DWC2 driver don't support dual role and U-Boot don't have >> framework for USB type C controller. >>> btw can you do something about that huge change in indent ? Is it necessary ? >>> >>> I move all this code under activate_stm_id_vb_detection (linked to >>> compatible "st,stm32mp1-hsotg") to avoid impact on other platform as >>> this "sensing" properties are only support for STM32MP15X (it is >>> linked to USB block detection integrated in SOC) >>> >>> And after I need to check the >>> 1/ The usb33d-supply is required of vbus or IDPIN sensing 2/ manage >>> Vbus sensing or override (according dt) 3/ manage IDPIN or override >>> (according dt) >>> >>> I add a new property to be backward compatible (even it the >>> combinaison is less clear) I protect regulator function call to avoid >>> compilation >> issue for other platform. >>> >>> PS: after reading the refmanual, I also split VALOEN and VALOVAL bit update >> as it is required. >>> >>> So yes I think it is needed but I can split the patch to simplify the >>> review. >> >> I presume you don't feel like implementing proper OTG support, right ? > > Yes, I am afraid of this task. Can you take a look ? I will pick this patch into next for now.
RE: [PATCH] usb: dwc2: add "u-boot,force-vbus-detection" for stm32
Hi Marek, > From: Marek Vasut > Sent: jeudi 15 octobre 2020 19:39 > > On 10/15/20 6:52 PM, Patrick DELAUNAY wrote: > > Hi, > > [...] > > >> On 10/15/20 2:49 PM, Patrick Delaunay wrote: > >>> On some board, the ID pin is not connected so the B session must be > >>> overridden with "u-boot,force_b_session_valid" but the VBus sensing > >>> must continue to be handle. > >>> > >>> To managed it, this patch adds a new DT field > >>> "u-boot,force-vbus-detection" to use with "u-boot,force_b_session_valid" > >> > >> How is this solved in Linux ? > > > > It is managed by Linux DWC2 driver: it is a real OTG driver, with dual > > mode support and by usb framework > > > > Throught the properties > > _hs { > > usb-role-switch; > > }; > > > > a glue treat the session and the sensing management see > > linux/drivers/usb/dwc2/drd.c in linux-next > > > > PS: activate_stm_id_vb_detection is also used in driver = hsotg->params. > > > > As ID pin / vbus is completly managed by the USB TYPE driver C > > (STUSB1600 for STMicroelectronics board) and DWC2 driver with dual > > role stack (host/gadget). > > > > I don't found a better solution than device tree property for this > > task in U-Boot as DWC2 driver don't support dual role and U-Boot don't have > framework for USB type C controller. > > > >> > >> btw can you do something about that huge change in indent ? Is it > >> necessary ? > > > > I move all this code under activate_stm_id_vb_detection (linked to > > compatible "st,stm32mp1-hsotg") to avoid impact on other platform as > > this "sensing" properties are only support for STM32MP15X (it is > > linked to USB block detection integrated in SOC) > > > > And after I need to check the > > 1/ The usb33d-supply is required of vbus or IDPIN sensing 2/ manage > > Vbus sensing or override (according dt) 3/ manage IDPIN or override > > (according dt) > > > > I add a new property to be backward compatible (even it the > > combinaison is less clear) I protect regulator function call to avoid > > compilation > issue for other platform. > > > > PS: after reading the refmanual, I also split VALOEN and VALOVAL bit update > as it is required. > > > > So yes I think it is needed but I can split the patch to simplify the > > review. > > I presume you don't feel like implementing proper OTG support, right ? Yes, I am afraid of this task. Patrick
Re: [PATCH] usb: dwc2: add "u-boot,force-vbus-detection" for stm32
On 10/15/20 6:52 PM, Patrick DELAUNAY wrote: Hi, [...] >> On 10/15/20 2:49 PM, Patrick Delaunay wrote: >>> On some board, the ID pin is not connected so the B session must be >>> overridden with "u-boot,force_b_session_valid" but the VBus sensing >>> must continue to be handle. >>> >>> To managed it, this patch adds a new DT field >>> "u-boot,force-vbus-detection" to use with "u-boot,force_b_session_valid" >> >> How is this solved in Linux ? > > It is managed by Linux DWC2 driver: it is a real OTG driver, with dual mode > support and by usb framework > > Throught the properties > _hs { > usb-role-switch; > }; > > a glue treat the session and the sensing management > see linux/drivers/usb/dwc2/drd.c in linux-next > > PS: activate_stm_id_vb_detection is also used in driver = hsotg->params. > > As ID pin / vbus is completly managed by the USB TYPE driver C > (STUSB1600 for STMicroelectronics board) and DWC2 driver with dual role > stack (host/gadget). > > I don't found a better solution than device tree property for this task in > U-Boot as DWC2 > driver don't support dual role and U-Boot don't have framework for USB type C > controller. > >> >> btw can you do something about that huge change in indent ? Is it necessary ? > > I move all this code under activate_stm_id_vb_detection (linked to compatible > "st,stm32mp1-hsotg") > to avoid impact on other platform as this "sensing" properties are only > support for STM32MP15X > (it is linked to USB block detection integrated in SOC) > > And after I need to check the > 1/ The usb33d-supply is required of vbus or IDPIN sensing > 2/ manage Vbus sensing or override (according dt) > 3/ manage IDPIN or override (according dt) > > I add a new property to be backward compatible (even it the combinaison is > less clear) > I protect regulator function call to avoid compilation issue for other > platform. > > PS: after reading the refmanual, I also split VALOEN and VALOVAL bit update > as it is required. > > So yes I think it is needed but I can split the patch to simplify the review. I presume you don't feel like implementing proper OTG support, right ?
RE: [PATCH] usb: dwc2: add "u-boot,force-vbus-detection" for stm32
Hi Marek, > From: Marek Vasut > Sent: jeudi 15 octobre 2020 15:08 > > On 10/15/20 2:49 PM, Patrick Delaunay wrote: > > On some board, the ID pin is not connected so the B session must be > > overridden with "u-boot,force_b_session_valid" but the VBus sensing > > must continue to be handle. > > > > To managed it, this patch adds a new DT field > > "u-boot,force-vbus-detection" to use with "u-boot,force_b_session_valid" > > How is this solved in Linux ? It is managed by Linux DWC2 driver: it is a real OTG driver, with dual mode support and by usb framework Throught the properties _hs { usb-role-switch; }; a glue treat the session and the sensing management see linux/drivers/usb/dwc2/drd.c in linux-next PS: activate_stm_id_vb_detection is also used in driver = hsotg->params. As ID pin / vbus is completly managed by the USB TYPE driver C (STUSB1600 for STMicroelectronics board) and DWC2 driver with dual role stack (host/gadget). I don't found a better solution than device tree property for this task in U-Boot as DWC2 driver don't support dual role and U-Boot don't have framework for USB type C controller. > > btw can you do something about that huge change in indent ? Is it necessary ? I move all this code under activate_stm_id_vb_detection (linked to compatible "st,stm32mp1-hsotg") to avoid impact on other platform as this "sensing" properties are only support for STM32MP15X (it is linked to USB block detection integrated in SOC) And after I need to check the 1/ The usb33d-supply is required of vbus or IDPIN sensing 2/ manage Vbus sensing or override (according dt) 3/ manage IDPIN or override (according dt) I add a new property to be backward compatible (even it the combinaison is less clear) I protect regulator function call to avoid compilation issue for other platform. PS: after reading the refmanual, I also split VALOEN and VALOVAL bit update as it is required. So yes I think it is needed but I can split the patch to simplify the review. Patrick
Re: [PATCH] usb: dwc2: add "u-boot,force-vbus-detection" for stm32
On 10/15/20 2:49 PM, Patrick Delaunay wrote: > On some board, the ID pin is not connected so the B session must be > overridden with "u-boot,force_b_session_valid" but the VBus sensing > must continue to be handle. > > To managed it, this patch adds a new DT field > "u-boot,force-vbus-detection" to use with "u-boot,force_b_session_valid" How is this solved in Linux ? btw can you do something about that huge change in indent ? Is it necessary ?