Messages in this thread Patches in this message | | | Date | Mon, 27 Nov 2023 14:28:45 +0530 | Subject | Re: [PATCH] usb: dwc3: core: Add support for XHCI_SG_TRB_CACHE_SIZE_QUIRK | From | Prashanth K <> |
| |
On 21-11-23 07:29 pm, Prashanth K wrote: > drivers/usb/dwc3/host.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c > index 61f57fe5bb78..ee3b667a88b2 100644 > --- a/drivers/usb/dwc3/host.c > +++ b/drivers/usb/dwc3/host.c > @@ -11,6 +11,7 @@ > #include <linux/of.h> > #include <linux/platform_device.h> > > +#include "../host/xhci-plat.h" > #include "core.h" > > static void dwc3_host_fill_xhci_irq_res(struct dwc3 *dwc, > @@ -63,6 +64,7 @@ int dwc3_host_init(struct dwc3 *dwc) > { > struct property_entry props[4]; > struct platform_device *xhci; > + struct xhci_plat_priv dwc3_xhci_plat_priv; > int ret, irq; > int prop_idx = 0; > > @@ -87,6 +89,14 @@ int dwc3_host_init(struct dwc3 *dwc) > goto err; > } > > + memset(&dwc3_xhci_plat_priv, 0, sizeof(struct xhci_plat_priv)); > + > + dwc3_xhci_plat_priv.quirks |= XHCI_SG_TRB_CACHE_SIZE_QUIRK; > + ret = platform_device_add_data(xhci, &dwc3_xhci_plat_priv, > + sizeof(dwc3_xhci_plat_priv)); > + if (ret) > + goto err; > + > memset(props, 0, sizeof(struct property_entry) * ARRAY_SIZE(props)); > > if (dwc->usb3_lpm_capable)
Is the above approach acceptable? I'm not sure if accessing xhci-plat's structure from dwc3 is a recommended way. If not, then can we go ahead with the following approach where we add a property to XHCI SW node.
--- a/drivers/usb/dwc3/host.c +++ b/drivers/usb/dwc3/host.c @@ -89,6 +89,8 @@ int dwc3_host_init(struct dwc3 *dwc)
memset(props, 0, sizeof(struct property_entry) * ARRAY_SIZE(props));
+ props[prop_idx++] = PROPERTY_ENTRY_BOOL("xhci-sg-trb-cache-size-quirk"); + if (dwc->usb3_lpm_capable) props[prop_idx++] = PROPERTY_ENTRY_BOOL("usb3-lpm-capable");
--- a/drivers/usb/host/xhci-plat.c +++ b/drivers/usb/host/xhci-plat.c @@ -323,6 +323,9 @@ static int xhci_plat_probe(struct platform_device *pdev) if (device_property_read_bool(tmpdev, "quirk-broken-port-ped")) xhci->quirks |= XHCI_BROKEN_PORT_PED;
+ if (device_property_read_bool(tmpdev, "xhci-sg-trb-cache-size-quirk")) + xhci->quirks |= XHCI_SG_TRB_CACHE_SIZE_QUIRK; + device_property_read_u32(tmpdev, "imod-interval-ns", &xhci->imod_interval); }
Regards, Prashanth K
| |