summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorAndrew Thomas <andrew.thomas@oracle.com>2018-06-18 11:56:06 -0700
committerTom Rini <trini@konsulko.com>2018-06-27 22:21:25 -0400
commitaf15946aa081dbcd0bec7d507a2b2db4e6b6cda5 (patch)
tree959969d9e40776a9094755a8c030ea60e77fd1f0 /drivers/usb
parentde76610545f4350f8e3eac7c0c4ff6349106a9bf (diff)
dwc2 USB controller hangs with lan78xx
This bug is the combination of dwc2 USB controller and lan78xx USB ethernet controller, which is the combination in use on the Raspberry Pi Model 3 B+. When the host attempts to receive a packet, but a packet has not arrived, the lan78xx controller responds by setting BIR (Bulk-In Empty Response) to NAK. Unfortunately, this hangs the USB controller and requires the USB controller to be reset. The fix proposed is to have the lan78xx controller respond by setting BIR to ZLP. Signed-off-by: Andrew Thomas <andrew.thomas@oracle.com> Tested-by: Peter Robinson <pbrobinson@gmail.com> Reviewed-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/eth/lan78xx.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/usb/eth/lan78xx.c b/drivers/usb/eth/lan78xx.c
index c5ff3797cf..e8ee6650bc 100644
--- a/drivers/usb/eth/lan78xx.c
+++ b/drivers/usb/eth/lan78xx.c
@@ -296,7 +296,7 @@ static int lan78xx_basic_reset(struct usb_device *udev,
ret = lan7x_read_reg(udev, LAN78XX_USB_CFG0, &val);
if (ret)
return ret;
- val |= LAN78XX_USB_CFG0_BIR;
+ val &= ~LAN78XX_USB_CFG0_BIR;
return lan7x_write_reg(udev, LAN78XX_USB_CFG0, val);
}