Commit 9f8144c6 authored by Nick Hudson's avatar Nick Hudson Committed by Greg Kroah-Hartman

staging: dwc2: don't issue traffic to LS devices in FS mode

I fell over the problem reported in
https://github.com/raspberrypi/linux/pull/390:

"Issuing low-speed packets when the root port is in full-speed mode
 causes the root port to stop responding. Explicitly fail when
 enqueuing URBs to a LS endpoint on a FS bus."

with my dwc2 testing in NetBSD, so I adapted the change to dwc2.
Signed-off-by: default avatarNick Hudson <skrll@netbsd.org>
[paulz: fixed up the patch to compile under Linux, and tested it]
Signed-off-by: default avatarPaul Zimmerman <paulz@synopsys.com>
Tested-by: default avatarStephen Warren <swarren@wwwdotorg.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9aaf880e
...@@ -355,6 +355,7 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg, ...@@ -355,6 +355,7 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
unsigned long flags; unsigned long flags;
u32 intr_mask; u32 intr_mask;
int retval; int retval;
int dev_speed;
if (!hsotg->flags.b.port_connect_status) { if (!hsotg->flags.b.port_connect_status) {
/* No longer connected */ /* No longer connected */
...@@ -362,6 +363,19 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg, ...@@ -362,6 +363,19 @@ static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
return -ENODEV; return -ENODEV;
} }
dev_speed = dwc2_host_get_speed(hsotg, urb->priv);
/* Some configurations cannot support LS traffic on a FS root port */
if ((dev_speed == USB_SPEED_LOW) &&
(hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) &&
(hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI)) {
u32 hprt0 = readl(hsotg->regs + HPRT0);
u32 prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
if (prtspd == HPRT0_SPD_FULL_SPEED)
return -ENODEV;
}
qtd = kzalloc(sizeof(*qtd), mem_flags); qtd = kzalloc(sizeof(*qtd), mem_flags);
if (!qtd) if (!qtd)
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment