diff options
Diffstat (limited to 'target/linux/ipq806x/patches-4.4/096-03-usb-dwc3-Validate-the-maximum_speed-parameter.patch')
-rw-r--r-- | target/linux/ipq806x/patches-4.4/096-03-usb-dwc3-Validate-the-maximum_speed-parameter.patch | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/target/linux/ipq806x/patches-4.4/096-03-usb-dwc3-Validate-the-maximum_speed-parameter.patch b/target/linux/ipq806x/patches-4.4/096-03-usb-dwc3-Validate-the-maximum_speed-parameter.patch new file mode 100644 index 0000000000..43821266a1 --- /dev/null +++ b/target/linux/ipq806x/patches-4.4/096-03-usb-dwc3-Validate-the-maximum_speed-parameter.patch @@ -0,0 +1,74 @@ +From 77966eb85e6d988a6daaf8ac14ac33026ceb3ab7 Mon Sep 17 00:00:00 2001 +From: John Youn <John.Youn@synopsys.com> +Date: Fri, 19 Feb 2016 17:31:01 -0800 +Subject: usb: dwc3: Validate the maximum_speed parameter + +Check that dwc->maximum_speed is set to a valid value. Also add an error +when we use it later if we encounter an invalid value. + +Signed-off-by: John Youn <johnyoun@synopsys.com> +Signed-off-by: Felipe Balbi <balbi@kernel.org> +--- + drivers/usb/dwc3/core.c | 18 ++++++++++++++++-- + drivers/usb/dwc3/gadget.c | 9 ++++++--- + 2 files changed, 22 insertions(+), 5 deletions(-) + +diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c +index 001c755..17fd814 100644 +--- a/drivers/usb/dwc3/core.c ++++ b/drivers/usb/dwc3/core.c +@@ -1012,8 +1012,20 @@ static int dwc3_probe(struct platform_device *pdev) + goto err1; + } + +- /* default to superspeed if no maximum_speed passed */ +- if (dwc->maximum_speed == USB_SPEED_UNKNOWN) { ++ /* Check the maximum_speed parameter */ ++ switch (dwc->maximum_speed) { ++ case USB_SPEED_LOW: ++ case USB_SPEED_FULL: ++ case USB_SPEED_HIGH: ++ case USB_SPEED_SUPER: ++ case USB_SPEED_SUPER_PLUS: ++ break; ++ default: ++ dev_err(dev, "invalid maximum_speed parameter %d\n", ++ dwc->maximum_speed); ++ /* fall through */ ++ case USB_SPEED_UNKNOWN: ++ /* default to superspeed */ + dwc->maximum_speed = USB_SPEED_SUPER; + + /* +@@ -1023,6 +1035,8 @@ static int dwc3_probe(struct platform_device *pdev) + (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) == + DWC3_GHWPARAMS3_SSPHY_IFC_GEN2)) + dwc->maximum_speed = USB_SPEED_SUPER_PLUS; ++ ++ break; + } + + /* Adjust Frame Length */ +diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c +index 482e6a1..3ac170f 100644 +--- a/drivers/usb/dwc3/gadget.c ++++ b/drivers/usb/dwc3/gadget.c +@@ -1670,10 +1670,13 @@ static int dwc3_gadget_start(struct usb_gadget *g, + case USB_SPEED_SUPER_PLUS: + reg |= DWC3_DSTS_SUPERSPEED_PLUS; + break; +- case USB_SPEED_SUPER: /* FALLTHROUGH */ +- case USB_SPEED_UNKNOWN: /* FALTHROUGH */ + default: +- reg |= DWC3_DSTS_SUPERSPEED; ++ dev_err(dwc->dev, "invalid dwc->maximum_speed (%d)\n", ++ dwc->maximum_speed); ++ /* fall through */ ++ case USB_SPEED_SUPER: ++ reg |= DWC3_DCFG_SUPERSPEED; ++ break; + } + } + dwc3_writel(dwc->regs, DWC3_DCFG, reg); +-- +cgit v0.12 |