lkml.org 
[lkml]   [2023]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patches in this message
/
Date
SubjectRe: [PATCH] usb: dwc3: core: Add support for XHCI_SG_TRB_CACHE_SIZE_QUIRK
From


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

\
 
 \ /
  Last update: 2023-11-27 10:00    [W:0.075 / U:0.236 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site