diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 734532abde8c..bb59787d803a 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1323,6 +1323,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) dwc->dis_metastability_quirk = device_property_read_bool(dev, "snps,dis_metastability_quirk"); + device_property_read_u32(dev, "snps,xhci-imod-value", + &dwc->xhci_imod_value); + dwc->lpm_nyet_threshold = lpm_nyet_threshold; dwc->tx_de_emphasis = tx_de_emphasis; diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index 43053b3922d0..916497bfeba4 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -1032,6 +1032,7 @@ struct dwc3_scratchpad_array { * @dis_metastability_quirk: set to disable metastability quirk. * @imod_interval: set the interrupt moderation interval in 250ns * increments or 0 to disable. + * @xhci_imod_value: imod value to use with xhci */ struct dwc3 { struct work_struct drd_work; @@ -1221,6 +1222,7 @@ struct dwc3 { unsigned dis_metastability_quirk:1; u16 imod_interval; + u32 xhci_imod_value; }; #define INCRX_BURST_MODE 0 diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c index 5567ed2cddbe..bae1bdccea1c 100644 --- a/drivers/usb/dwc3/host.c +++ b/drivers/usb/dwc3/host.c @@ -43,12 +43,13 @@ out: int dwc3_host_init(struct dwc3 *dwc) { - struct property_entry props[4]; + struct property_entry props[5]; struct platform_device *xhci; int ret, irq; struct resource *res; struct platform_device *dwc3_pdev = to_platform_device(dwc->dev); int prop_idx = 0; + struct property_entry imod_prop; irq = dwc3_host_get_irq(dwc); if (irq < 0) @@ -93,6 +94,15 @@ int dwc3_host_init(struct dwc3 *dwc) if (dwc->usb2_lpm_disable) props[prop_idx++].name = "usb2-lpm-disable"; + if (dwc->xhci_imod_value) { + imod_prop.name = "imod-interval-ns"; + imod_prop.length = sizeof(u32); + imod_prop.is_array = false; + imod_prop.type = DEV_PROP_U32; + imod_prop.value.u32_data = dwc->xhci_imod_value; + props[prop_idx++] = imod_prop; + } + /** * WORKAROUND: dwc3 revisions <=3.00a have a limitation * where Port Disable command doesn't work.