aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq806x/patches-4.4/096-03-usb-dwc3-Validate-the-maximum_speed-parameter.patch
diff options
context:
space:
mode:
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.patch74
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