[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d4d25747-83d4-a8e7-7968-caf3b14a844c@quicinc.com>
Date: Mon, 27 Nov 2023 14:28:45 +0530
From: Prashanth K <quic_prashk@...cinc.com>
To: Thinh Nguyen <Thinh.Nguyen@...opsys.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Mathias Nyman <mathias.nyman@...el.com>
CC: <linux-kernel@...r.kernel.org>, <linux-usb@...r.kernel.org>,
<stable@...r.kernel.org>
Subject: Re: [PATCH] usb: dwc3: core: Add support for
XHCI_SG_TRB_CACHE_SIZE_QUIRK
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
Powered by blists - more mailing lists