mirror of https://gitee.com/openkylin/linux.git
usb: dwc3: Update speed checks for SuperSpeedPlus
Update various places where the speed is checked so that it takes into account SuperSpeedPlus properly. Signed-off-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Felipe Balbi <balbi@kernel.org>
This commit is contained in:
parent
1f38f88a24
commit
ee5cd41c91
|
@ -356,7 +356,8 @@ static int dwc3_ep0_handle_status(struct dwc3 *dwc,
|
||||||
*/
|
*/
|
||||||
usb_status |= dwc->gadget.is_selfpowered;
|
usb_status |= dwc->gadget.is_selfpowered;
|
||||||
|
|
||||||
if (dwc->speed == DWC3_DSTS_SUPERSPEED) {
|
if ((dwc->speed == DWC3_DSTS_SUPERSPEED) ||
|
||||||
|
(dwc->speed == DWC3_DSTS_SUPERSPEED_PLUS)) {
|
||||||
reg = dwc3_readl(dwc->regs, DWC3_DCTL);
|
reg = dwc3_readl(dwc->regs, DWC3_DCTL);
|
||||||
if (reg & DWC3_DCTL_INITU1ENA)
|
if (reg & DWC3_DCTL_INITU1ENA)
|
||||||
usb_status |= 1 << USB_DEV_STAT_U1_ENABLED;
|
usb_status |= 1 << USB_DEV_STAT_U1_ENABLED;
|
||||||
|
@ -426,7 +427,8 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
|
||||||
case USB_DEVICE_U1_ENABLE:
|
case USB_DEVICE_U1_ENABLE:
|
||||||
if (state != USB_STATE_CONFIGURED)
|
if (state != USB_STATE_CONFIGURED)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (dwc->speed != DWC3_DSTS_SUPERSPEED)
|
if ((dwc->speed != DWC3_DSTS_SUPERSPEED) &&
|
||||||
|
(dwc->speed != DWC3_DSTS_SUPERSPEED_PLUS))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
reg = dwc3_readl(dwc->regs, DWC3_DCTL);
|
reg = dwc3_readl(dwc->regs, DWC3_DCTL);
|
||||||
|
@ -440,7 +442,8 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
|
||||||
case USB_DEVICE_U2_ENABLE:
|
case USB_DEVICE_U2_ENABLE:
|
||||||
if (state != USB_STATE_CONFIGURED)
|
if (state != USB_STATE_CONFIGURED)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (dwc->speed != DWC3_DSTS_SUPERSPEED)
|
if ((dwc->speed != DWC3_DSTS_SUPERSPEED) &&
|
||||||
|
(dwc->speed != DWC3_DSTS_SUPERSPEED_PLUS))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
reg = dwc3_readl(dwc->regs, DWC3_DCTL);
|
reg = dwc3_readl(dwc->regs, DWC3_DCTL);
|
||||||
|
|
|
@ -463,7 +463,7 @@ static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
|
||||||
| DWC3_DEPCFG_MAX_PACKET_SIZE(usb_endpoint_maxp(desc));
|
| DWC3_DEPCFG_MAX_PACKET_SIZE(usb_endpoint_maxp(desc));
|
||||||
|
|
||||||
/* Burst size is only needed in SuperSpeed mode */
|
/* Burst size is only needed in SuperSpeed mode */
|
||||||
if (dwc->gadget.speed == USB_SPEED_SUPER) {
|
if (dwc->gadget.speed >= USB_SPEED_SUPER) {
|
||||||
u32 burst = dep->endpoint.maxburst - 1;
|
u32 burst = dep->endpoint.maxburst - 1;
|
||||||
|
|
||||||
params.param0 |= DWC3_DEPCFG_BURST_SIZE(burst);
|
params.param0 |= DWC3_DEPCFG_BURST_SIZE(burst);
|
||||||
|
@ -1441,7 +1441,8 @@ static int dwc3_gadget_wakeup(struct usb_gadget *g)
|
||||||
reg = dwc3_readl(dwc->regs, DWC3_DSTS);
|
reg = dwc3_readl(dwc->regs, DWC3_DSTS);
|
||||||
|
|
||||||
speed = reg & DWC3_DSTS_CONNECTSPD;
|
speed = reg & DWC3_DSTS_CONNECTSPD;
|
||||||
if (speed == DWC3_DSTS_SUPERSPEED) {
|
if ((speed == DWC3_DSTS_SUPERSPEED) ||
|
||||||
|
(speed == DWC3_DSTS_SUPERSPEED_PLUS)) {
|
||||||
dwc3_trace(trace_dwc3_gadget, "no wakeup on SuperSpeed\n");
|
dwc3_trace(trace_dwc3_gadget, "no wakeup on SuperSpeed\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -2340,7 +2341,8 @@ static void dwc3_update_ram_clk_sel(struct dwc3 *dwc, u32 speed)
|
||||||
* this. Maybe it becomes part of the power saving plan.
|
* this. Maybe it becomes part of the power saving plan.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (speed != DWC3_DSTS_SUPERSPEED)
|
if ((speed != DWC3_DSTS_SUPERSPEED) &&
|
||||||
|
(speed != DWC3_DSTS_SUPERSPEED_PLUS))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2410,8 +2412,9 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
|
||||||
|
|
||||||
/* Enable USB2 LPM Capability */
|
/* Enable USB2 LPM Capability */
|
||||||
|
|
||||||
if ((dwc->revision > DWC3_REVISION_194A)
|
if ((dwc->revision > DWC3_REVISION_194A) &&
|
||||||
&& (speed != DWC3_DCFG_SUPERSPEED)) {
|
(speed != DWC3_DCFG_SUPERSPEED) &&
|
||||||
|
(speed != DWC3_DCFG_SUPERSPEED_PLUS)) {
|
||||||
reg = dwc3_readl(dwc->regs, DWC3_DCFG);
|
reg = dwc3_readl(dwc->regs, DWC3_DCFG);
|
||||||
reg |= DWC3_DCFG_LPM_CAP;
|
reg |= DWC3_DCFG_LPM_CAP;
|
||||||
dwc3_writel(dwc->regs, DWC3_DCFG, reg);
|
dwc3_writel(dwc->regs, DWC3_DCFG, reg);
|
||||||
|
|
Loading…
Reference in New Issue