1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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(-)
- --- a/drivers/usb/dwc3/core.c
- +++ b/drivers/usb/dwc3/core.c
- @@ -1012,8 +1012,20 @@ static int dwc3_probe(struct platform_de
- 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_de
- (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) ==
- DWC3_GHWPARAMS3_SSPHY_IFC_GEN2))
- dwc->maximum_speed = USB_SPEED_SUPER_PLUS;
- +
- + break;
- }
-
- /* Adjust Frame Length */
- --- a/drivers/usb/dwc3/gadget.c
- +++ b/drivers/usb/dwc3/gadget.c
- @@ -1647,10 +1647,13 @@ static int dwc3_gadget_start(struct usb_
- case USB_SPEED_HIGH:
- reg |= DWC3_DSTS_HIGHSPEED;
- 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);
|