- snps,enable_guctl1_ipd_quirk: Adding this flag sets bit 9 of GUCTL1
enabling the workaround in HW to reduce the Inter Packet Delay (IPD)
and making controller enumerate FS/LS devices connected behind VIA-LAB.
+ - snps,xhci-stream-quirk: Dwc3 host controller has a bug where it sometimes
+ fails to process the traansfer descriptors present in the BULK IN
+ stream ring. Since the controller is not processing any TD, no transfer
+ events will be triggered, resulting in a hang condition. Enabling this
+ flag in dts fixes the above said issue.
- <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be reallocated.
snps,refclk_fladj;
snps,enable_guctl1_resume_quirk;
snps,enable_guctl1_ipd_quirk;
+ snps,xhci-stream-quirk;
/* dma-coherent; */
};
};
snps,refclk_fladj;
snps,enable_guctl1_resume_quirk;
snps,enable_guctl1_ipd_quirk;
+ snps,xhci-stream-quirk;
/* dma-coherent; */
};
};
int dwc3_host_init(struct dwc3 *dwc)
{
- struct property_entry props[2];
+ struct property_entry props[3];
struct platform_device *xhci;
int ret, irq;
+ unsigned int index = 0;
struct resource *res;
struct platform_device *dwc3_pdev = to_platform_device(dwc->dev);
memset(props, 0, sizeof(struct property_entry) * ARRAY_SIZE(props));
- if (dwc->usb3_lpm_capable) {
- props[0].name = "usb3-lpm-capable";
+ if (dwc->usb3_lpm_capable)
+ props[index++].name = "usb3-lpm-capable";
+
+ if (device_property_read_bool(&dwc3_pdev->dev,
+ "snps,xhci-stream-quirk"))
+ props[index++].name = "xhci-stream-quirk";
+
+ if (index > 0) {
ret = platform_device_add_properties(xhci, props);
if (ret) {
dev_err(dwc->dev, "failed to add properties to xHCI\n");
if (device_property_read_bool(&pdev->dev, "usb3-lpm-capable"))
xhci->quirks |= XHCI_LPM_SUPPORT;
+ if (device_property_read_bool(&pdev->dev, "xhci-stream-quirk"))
+ xhci->quirks |= XHCI_STREAM_QUIRK;
hcd->usb_phy = devm_usb_get_phy_by_phandle(&pdev->dev, "usb-phy", 0);
if (IS_ERR(hcd->usb_phy)) {