[PATCH] drivers/usb/dwc3: fix PCI parent check

Punit Agrawal posted 1 patch 1 month, 1 week ago
There is a newer version of this series
drivers/usb/dwc3/core.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[PATCH] drivers/usb/dwc3: fix PCI parent check
Posted by Punit Agrawal 1 month, 1 week ago
From: Jamie Iles <jamie.iles@oss.qualcomm.com>

The sysdev_is_parent check was being used to infer PCI devices that have
the DMA mask set from the PCI capabilities, but sysdev_is_parent is also
used for non-PCI ACPI devices in which case the DMA mask would be the
bus default or as set by the _DMA method.

Without this fix the DMA mask would default to 32-bits and so allocation
would fail if there was no DRAM below 4GB.

Fixes: 47ce45906ca9 ("usb: dwc3: leave default DMA for PCI devices")
Signed-off-by: Jamie Iles <jamie.iles@oss.qualcomm.com>
Signed-off-by: Punit Agrawal <punit.agrawal@oss.qualcomm.com>
---
 drivers/usb/dwc3/core.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index ae140c356295..c2ce2f5e60a1 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -25,6 +25,7 @@
 #include <linux/of.h>
 #include <linux/of_graph.h>
 #include <linux/acpi.h>
+#include <linux/pci.h>
 #include <linux/pinctrl/consumer.h>
 #include <linux/pinctrl/devinfo.h>
 #include <linux/reset.h>
@@ -2241,7 +2242,7 @@ int dwc3_core_probe(const struct dwc3_probe_data *data)
 	dev_set_drvdata(dev, dwc);
 	dwc3_cache_hwparams(dwc);
 
-	if (!dwc->sysdev_is_parent &&
+	if (!dev_is_pci(dwc->sysdev) &&
 	    DWC3_GHWPARAMS0_AWIDTH(dwc->hwparams.hwparams0) == 64) {
 		ret = dma_set_mask_and_coherent(dwc->sysdev, DMA_BIT_MASK(64));
 		if (ret)
-- 
2.34.1
Re: [PATCH] drivers/usb/dwc3: fix PCI parent check
Posted by Thinh Nguyen 1 month, 1 week ago
On Wed, Nov 05, 2025, Punit Agrawal wrote:
> From: Jamie Iles <jamie.iles@oss.qualcomm.com>
> 
> The sysdev_is_parent check was being used to infer PCI devices that have
> the DMA mask set from the PCI capabilities, but sysdev_is_parent is also
> used for non-PCI ACPI devices in which case the DMA mask would be the
> bus default or as set by the _DMA method.
> 
> Without this fix the DMA mask would default to 32-bits and so allocation
> would fail if there was no DRAM below 4GB.
> 
> Fixes: 47ce45906ca9 ("usb: dwc3: leave default DMA for PCI devices")
> Signed-off-by: Jamie Iles <jamie.iles@oss.qualcomm.com>
> Signed-off-by: Punit Agrawal <punit.agrawal@oss.qualcomm.com>

We should Cc stable also.

> ---
>  drivers/usb/dwc3/core.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index ae140c356295..c2ce2f5e60a1 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -25,6 +25,7 @@
>  #include <linux/of.h>
>  #include <linux/of_graph.h>
>  #include <linux/acpi.h>
> +#include <linux/pci.h>
>  #include <linux/pinctrl/consumer.h>
>  #include <linux/pinctrl/devinfo.h>
>  #include <linux/reset.h>
> @@ -2241,7 +2242,7 @@ int dwc3_core_probe(const struct dwc3_probe_data *data)
>  	dev_set_drvdata(dev, dwc);
>  	dwc3_cache_hwparams(dwc);
>  
> -	if (!dwc->sysdev_is_parent &&
> +	if (!dev_is_pci(dwc->sysdev) &&
>  	    DWC3_GHWPARAMS0_AWIDTH(dwc->hwparams.hwparams0) == 64) {
>  		ret = dma_set_mask_and_coherent(dwc->sysdev, DMA_BIT_MASK(64));
>  		if (ret)
> -- 
> 2.34.1
> 

Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>

BR,
Thinh
Re: [PATCH] drivers/usb/dwc3: fix PCI parent check
Posted by Punit Agrawal 1 month, 1 week ago
Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:

> On Wed, Nov 05, 2025, Punit Agrawal wrote:
>> From: Jamie Iles <jamie.iles@oss.qualcomm.com>
>> 
>> The sysdev_is_parent check was being used to infer PCI devices that have
>> the DMA mask set from the PCI capabilities, but sysdev_is_parent is also
>> used for non-PCI ACPI devices in which case the DMA mask would be the
>> bus default or as set by the _DMA method.
>> 
>> Without this fix the DMA mask would default to 32-bits and so allocation
>> would fail if there was no DRAM below 4GB.
>> 
>> Fixes: 47ce45906ca9 ("usb: dwc3: leave default DMA for PCI devices")
>> Signed-off-by: Jamie Iles <jamie.iles@oss.qualcomm.com>
>> Signed-off-by: Punit Agrawal <punit.agrawal@oss.qualcomm.com>
>
> We should Cc stable also.
>
>> ---
>>  drivers/usb/dwc3/core.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>> 
>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
>> index ae140c356295..c2ce2f5e60a1 100644
>> --- a/drivers/usb/dwc3/core.c
>> +++ b/drivers/usb/dwc3/core.c
>> @@ -25,6 +25,7 @@
>>  #include <linux/of.h>
>>  #include <linux/of_graph.h>
>>  #include <linux/acpi.h>
>> +#include <linux/pci.h>
>>  #include <linux/pinctrl/consumer.h>
>>  #include <linux/pinctrl/devinfo.h>
>>  #include <linux/reset.h>
>> @@ -2241,7 +2242,7 @@ int dwc3_core_probe(const struct dwc3_probe_data *data)
>>  	dev_set_drvdata(dev, dwc);
>>  	dwc3_cache_hwparams(dwc);
>>  
>> -	if (!dwc->sysdev_is_parent &&
>> +	if (!dev_is_pci(dwc->sysdev) &&
>>  	    DWC3_GHWPARAMS0_AWIDTH(dwc->hwparams.hwparams0) == 64) {
>>  		ret = dma_set_mask_and_coherent(dwc->sysdev, DMA_BIT_MASK(64));
>>  		if (ret)
>> -- 
>> 2.34.1
>> 
>
> Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>

Thank you for taking a look.

Not sure if Greg prefers a repost or he can add the tag and Cc: stable
while applying. I'll resend next week with updates if there's no
response.

[...]
Re: [PATCH] drivers/usb/dwc3: fix PCI parent check
Posted by Thinh Nguyen 1 month, 1 week ago
On Thu, Nov 06, 2025, Punit Agrawal wrote:
> Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
> 
> > On Wed, Nov 05, 2025, Punit Agrawal wrote:
> >> From: Jamie Iles <jamie.iles@oss.qualcomm.com>
> >> 
> >> The sysdev_is_parent check was being used to infer PCI devices that have
> >> the DMA mask set from the PCI capabilities, but sysdev_is_parent is also
> >> used for non-PCI ACPI devices in which case the DMA mask would be the
> >> bus default or as set by the _DMA method.
> >> 
> >> Without this fix the DMA mask would default to 32-bits and so allocation
> >> would fail if there was no DRAM below 4GB.
> >> 
> >> Fixes: 47ce45906ca9 ("usb: dwc3: leave default DMA for PCI devices")
> >> Signed-off-by: Jamie Iles <jamie.iles@oss.qualcomm.com>
> >> Signed-off-by: Punit Agrawal <punit.agrawal@oss.qualcomm.com>
> >
> > We should Cc stable also.
> >
> >> ---
> >>  drivers/usb/dwc3/core.c | 3 ++-
> >>  1 file changed, 2 insertions(+), 1 deletion(-)
> >> 
> >> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> >> index ae140c356295..c2ce2f5e60a1 100644
> >> --- a/drivers/usb/dwc3/core.c
> >> +++ b/drivers/usb/dwc3/core.c
> >> @@ -25,6 +25,7 @@
> >>  #include <linux/of.h>
> >>  #include <linux/of_graph.h>
> >>  #include <linux/acpi.h>
> >> +#include <linux/pci.h>
> >>  #include <linux/pinctrl/consumer.h>
> >>  #include <linux/pinctrl/devinfo.h>
> >>  #include <linux/reset.h>
> >> @@ -2241,7 +2242,7 @@ int dwc3_core_probe(const struct dwc3_probe_data *data)
> >>  	dev_set_drvdata(dev, dwc);
> >>  	dwc3_cache_hwparams(dwc);
> >>  
> >> -	if (!dwc->sysdev_is_parent &&
> >> +	if (!dev_is_pci(dwc->sysdev) &&
> >>  	    DWC3_GHWPARAMS0_AWIDTH(dwc->hwparams.hwparams0) == 64) {
> >>  		ret = dma_set_mask_and_coherent(dwc->sysdev, DMA_BIT_MASK(64));
> >>  		if (ret)
> >> -- 
> >> 2.34.1
> >> 
> >
> > Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
> 
> Thank you for taking a look.
> 
> Not sure if Greg prefers a repost or he can add the tag and Cc: stable
> while applying. I'll resend next week with updates if there's no
> response.
> 
> [...]
> 

Unless Greg specifically indicated that he'd update himself, please
submit a new version with the change.

Thanks,
Thinh