Re: [PATCH 7/8] usb: dwc3: qcom: Start USB in 'host mode' on the SDM845

From: Bjorn Andersson
Date: Wed Jun 05 2019 - 15:19:02 EST


On Wed 05 Jun 01:34 PDT 2019, Lee Jones wrote:

> On Wed, 05 Jun 2019, Bjorn Andersson wrote:
>
> > On Tue 04 Jun 03:44 PDT 2019, Lee Jones wrote:
> >
> > > When booting with Device Tree, the current default boot configuration
> > > table option, the request to boot via 'host mode' comes from the
> > > "dr_mode" property.
> >
> > This has been the default on the MTP, but this is changing as this is
> > causing issues when connected downstream from a hub (the typical
> > development case for the primary USB port of a phone like device) and
> > more importantly we don't have support for the PMIC blocks that control
> > VBUS.
>
> My point is not about which mode is currently chosen. It's more about
> the capability of choosing which mode is appropriate for a given
> system via DT.
>
> > Once these issues are resolved the dr_mode would be "otg".
>
> OTG doesn't work on this H/W, so we need to specify "host" mode.
>

My objection is that when you say "this H/W" you mean a particular
product, but you're making this decision for all SDM845 based products
using ACPI.

I don't know if there is a Windows phone based on SDM845, but if there
is then I don't think forcing it to host would be correct.

> > > A property of the same name can be used inside
> > > ACPI tables too. However it is missing from the SDM845's ACPI tables
> > > so we have to supply this information using Platform Device Properites
> > > instead.
> > >
> >
> > Afaict this would install a fall-back property, so in the case that we
> > have specified dr_mode in DT (or ACPI) that would take precedence. So
>
> That's correct.
>
> > the commit message should reflect that this redefines the default choice
> > to be "host", rather than "otg".
>
> No problem.
>
> > Which is in conflict with what's described for dr_mode in
> > Documentation/devicetree/bindings/usb/generic.txt
>
> This implementation only affects ACPI based platforms. When booting
> with DT, the description in that DT related document is still
> accurate.
>

You're right, I got lost between the patches and the sprinkled if
(ACPI_HANDLE()) in the probe. This is only added for ACPI.

> > And this driver is used on a range of different Qualcomm platforms, so I
> > don't think this is SDM845 specific.
>
> ACPI based platforms?
>
> All the ones I've seen use the XHCI USB driver directly ("PNP0D10").
>

MSM8998 (835) has the same controller, so this should affect those
laptops as well.

Regards,
Bjorn

> > > Signed-off-by: Lee Jones <lee.jones@xxxxxxxxxx>
> > > ---
> > > drivers/usb/dwc3/dwc3-qcom.c | 12 ++++++++++++
> > > 1 file changed, 12 insertions(+)
> > >
> > > diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c
> > > index 349bf549ee44..f21fdd6cdd1a 100644
> > > --- a/drivers/usb/dwc3/dwc3-qcom.c
> > > +++ b/drivers/usb/dwc3/dwc3-qcom.c
> > > @@ -468,6 +468,11 @@ static const struct acpi_device_id dwc3_qcom_acpi_match[] = {
> > > };
> > > MODULE_DEVICE_TABLE(acpi, dwc3_qcom_acpi_match);
> > >
> > > +static const struct property_entry dwc3_qcom_acpi_properties[] = {
> > > + PROPERTY_ENTRY_STRING("dr_mode", "host"),
> > > + {}
> > > +};
> > > +
> > > static int dwc3_qcom_probe(struct platform_device *pdev)
> > > {
> > > struct device_node *np = pdev->dev.of_node, *dwc3_np;
> > > @@ -603,6 +608,13 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
> > > goto platform_unalloc;
> > > }
> > >
> > > + ret = platform_device_add_properties(qcom->dwc3,
> > > + dwc3_qcom_acpi_properties);
> > > + if (ret < 0) {
> > > + dev_err(&pdev->dev, "failed to add properties\n");
> > > + goto platform_unalloc;
> > > + }
> > > +
> > > ret = platform_device_add(qcom->dwc3);
> > > if (ret) {
> > > dev_err(&pdev->dev, "failed to add device\n");
>
> --
> Lee Jones [?????????]
> Linaro Services Technical Lead
> Linaro.org ??? Open source software for ARM SoCs
> Follow Linaro: Facebook | Twitter | Blog