drivers/usb/dwc3/core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
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
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
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.
[...]
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
© 2016 - 2025 Red Hat, Inc.