USB fixes for 5.11-rc5
Here are some small USB driver fixes for 5.11-rc5. They resolve: - xhci issues for some reported problems - ehci driver issue for one specific device - USB gadget fixes for some reported problems - cdns3 driver fixes for issues reported - MAINTAINERS file update - thunderbolt minor fix All of these have been in linux-next with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCYA1uOw8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ymsywCcCyyPu1chkE2nSBFmcB5zXn2obSoAoL8zTIVM zVlQEjG/9IzSGdQY/Dt5 =VVM1 -----END PGP SIGNATURE----- Merge tag 'usb-5.11-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb Pull USB fixes from Greg KH: "Here are some small USB driver fixes for 5.11-rc5. They resolve: - xhci issues for some reported problems - ehci driver issue for one specific device - USB gadget fixes for some reported problems - cdns3 driver fixes for issues reported - MAINTAINERS file update - thunderbolt minor fix All of these have been in linux-next with no reported issues" * tag 'usb-5.11-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: usb: bdc: Make bdc pci driver depend on BROKEN xhci: tegra: Delay for disabling LFPS detector xhci: make sure TRB is fully written before giving it to the controller usb: udc: core: Use lock when write to soft_connect USB: gadget: dummy-hcd: Fix errors in port-reset handling usb: gadget: aspeed: fix stop dma register setting. USB: ehci: fix an interrupt calltrace error ehci: fix EHCI host controller initialization sequence MAINTAINERS: update Peter Chen's email address thunderbolt: Drop duplicated 0x prefix from format string MAINTAINERS: Update address for Cadence USB3 driver usb: cdns3: imx: improve driver .remove API usb: cdns3: imx: fix can't create core device the second time issue usb: cdns3: imx: fix writing read-only memory issue
This commit is contained in:
commit
8f3bfd2181
@ -3879,7 +3879,7 @@ F: Documentation/devicetree/bindings/mtd/cadence-nand-controller.txt
|
||||
F: drivers/mtd/nand/raw/cadence-nand-controller.c
|
||||
|
||||
CADENCE USB3 DRD IP DRIVER
|
||||
M: Peter Chen <peter.chen@nxp.com>
|
||||
M: Peter Chen <peter.chen@kernel.org>
|
||||
M: Pawel Laszczak <pawell@cadence.com>
|
||||
R: Roger Quadros <rogerq@kernel.org>
|
||||
R: Aswath Govindraju <a-govindraju@ti.com>
|
||||
@ -4161,7 +4161,7 @@ S: Maintained
|
||||
F: Documentation/translations/zh_CN/
|
||||
|
||||
CHIPIDEA USB HIGH SPEED DUAL ROLE CONTROLLER
|
||||
M: Peter Chen <Peter.Chen@nxp.com>
|
||||
M: Peter Chen <peter.chen@kernel.org>
|
||||
L: linux-usb@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
|
||||
@ -18420,7 +18420,7 @@ F: Documentation/usb/ohci.rst
|
||||
F: drivers/usb/host/ohci*
|
||||
|
||||
USB OTG FSM (Finite State Machine)
|
||||
M: Peter Chen <Peter.Chen@nxp.com>
|
||||
M: Peter Chen <peter.chen@kernel.org>
|
||||
L: linux-usb@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
|
||||
|
@ -2316,7 +2316,7 @@ static int icm_usb4_switch_nvm_authenticate_status(struct tb_switch *sw,
|
||||
|
||||
if (auth && auth->reply.route_hi == sw->config.route_hi &&
|
||||
auth->reply.route_lo == sw->config.route_lo) {
|
||||
tb_dbg(tb, "NVM_AUTH found for %llx flags 0x%#x status %#x\n",
|
||||
tb_dbg(tb, "NVM_AUTH found for %llx flags %#x status %#x\n",
|
||||
tb_route(sw), auth->reply.hdr.flags, auth->reply.status);
|
||||
if (auth->reply.hdr.flags & ICM_FLAGS_ERROR)
|
||||
ret = -EIO;
|
||||
|
@ -185,7 +185,11 @@ static int cdns_imx_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
data->num_clks = ARRAY_SIZE(imx_cdns3_core_clks);
|
||||
data->clks = (struct clk_bulk_data *)imx_cdns3_core_clks;
|
||||
data->clks = devm_kmemdup(dev, imx_cdns3_core_clks,
|
||||
sizeof(imx_cdns3_core_clks), GFP_KERNEL);
|
||||
if (!data->clks)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = devm_clk_bulk_get(dev, data->num_clks, data->clks);
|
||||
if (ret)
|
||||
return ret;
|
||||
@ -214,20 +218,16 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cdns_imx_remove_core(struct device *dev, void *data)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
|
||||
platform_device_unregister(pdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cdns_imx_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct cdns_imx *data = dev_get_drvdata(dev);
|
||||
|
||||
device_for_each_child(dev, NULL, cdns_imx_remove_core);
|
||||
pm_runtime_get_sync(dev);
|
||||
of_platform_depopulate(dev);
|
||||
clk_bulk_disable_unprepare(data->num_clks, data->clks);
|
||||
pm_runtime_disable(dev);
|
||||
pm_runtime_put_noidle(dev);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
||||
return 0;
|
||||
|
@ -420,7 +420,10 @@ static void ast_vhub_stop_active_req(struct ast_vhub_ep *ep,
|
||||
u32 state, reg, loops;
|
||||
|
||||
/* Stop DMA activity */
|
||||
writel(0, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT);
|
||||
if (ep->epn.desc_mode)
|
||||
writel(VHUB_EP_DMA_CTRL_RESET, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT);
|
||||
else
|
||||
writel(0, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT);
|
||||
|
||||
/* Wait for it to complete */
|
||||
for (loops = 0; loops < 1000; loops++) {
|
||||
|
@ -17,7 +17,7 @@ if USB_BDC_UDC
|
||||
comment "Platform Support"
|
||||
config USB_BDC_PCI
|
||||
tristate "BDC support for PCIe based platforms"
|
||||
depends on USB_PCI
|
||||
depends on USB_PCI && BROKEN
|
||||
default USB_BDC_UDC
|
||||
help
|
||||
Enable support for platforms which have BDC connected through PCIe, such as Lego3 FPGA platform.
|
||||
|
@ -1529,10 +1529,13 @@ static ssize_t soft_connect_store(struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t n)
|
||||
{
|
||||
struct usb_udc *udc = container_of(dev, struct usb_udc, dev);
|
||||
ssize_t ret;
|
||||
|
||||
mutex_lock(&udc_lock);
|
||||
if (!udc->driver) {
|
||||
dev_err(dev, "soft-connect without a gadget driver\n");
|
||||
return -EOPNOTSUPP;
|
||||
ret = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (sysfs_streq(buf, "connect")) {
|
||||
@ -1543,10 +1546,14 @@ static ssize_t soft_connect_store(struct device *dev,
|
||||
usb_gadget_udc_stop(udc);
|
||||
} else {
|
||||
dev_err(dev, "unsupported command '%s'\n", buf);
|
||||
return -EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
return n;
|
||||
ret = n;
|
||||
out:
|
||||
mutex_unlock(&udc_lock);
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR_WO(soft_connect);
|
||||
|
||||
|
@ -2270,17 +2270,20 @@ static int dummy_hub_control(
|
||||
}
|
||||
fallthrough;
|
||||
case USB_PORT_FEAT_RESET:
|
||||
if (!(dum_hcd->port_status & USB_PORT_STAT_CONNECTION))
|
||||
break;
|
||||
/* if it's already enabled, disable */
|
||||
if (hcd->speed == HCD_USB3) {
|
||||
dum_hcd->port_status = 0;
|
||||
dum_hcd->port_status =
|
||||
(USB_SS_PORT_STAT_POWER |
|
||||
USB_PORT_STAT_CONNECTION |
|
||||
USB_PORT_STAT_RESET);
|
||||
} else
|
||||
} else {
|
||||
dum_hcd->port_status &= ~(USB_PORT_STAT_ENABLE
|
||||
| USB_PORT_STAT_LOW_SPEED
|
||||
| USB_PORT_STAT_HIGH_SPEED);
|
||||
dum_hcd->port_status |= USB_PORT_STAT_RESET;
|
||||
}
|
||||
/*
|
||||
* We want to reset device status. All but the
|
||||
* Self powered feature
|
||||
@ -2292,7 +2295,8 @@ static int dummy_hub_control(
|
||||
* interval? Is it still 50msec as for HS?
|
||||
*/
|
||||
dum_hcd->re_timeout = jiffies + msecs_to_jiffies(50);
|
||||
fallthrough;
|
||||
set_link_state(dum_hcd);
|
||||
break;
|
||||
case USB_PORT_FEAT_C_CONNECTION:
|
||||
case USB_PORT_FEAT_C_RESET:
|
||||
case USB_PORT_FEAT_C_ENABLE:
|
||||
|
@ -574,6 +574,7 @@ static int ehci_run (struct usb_hcd *hcd)
|
||||
struct ehci_hcd *ehci = hcd_to_ehci (hcd);
|
||||
u32 temp;
|
||||
u32 hcc_params;
|
||||
int rc;
|
||||
|
||||
hcd->uses_new_polling = 1;
|
||||
|
||||
@ -629,9 +630,20 @@ static int ehci_run (struct usb_hcd *hcd)
|
||||
down_write(&ehci_cf_port_reset_rwsem);
|
||||
ehci->rh_state = EHCI_RH_RUNNING;
|
||||
ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag);
|
||||
|
||||
/* Wait until HC become operational */
|
||||
ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */
|
||||
msleep(5);
|
||||
rc = ehci_handshake(ehci, &ehci->regs->status, STS_HALT, 0, 100 * 1000);
|
||||
|
||||
up_write(&ehci_cf_port_reset_rwsem);
|
||||
|
||||
if (rc) {
|
||||
ehci_err(ehci, "USB %x.%x, controller refused to start: %d\n",
|
||||
((ehci->sbrn & 0xf0)>>4), (ehci->sbrn & 0x0f), rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
ehci->last_periodic_enable = ktime_get_real();
|
||||
|
||||
temp = HC_VERSION(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase));
|
||||
|
@ -345,6 +345,9 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)
|
||||
|
||||
unlink_empty_async_suspended(ehci);
|
||||
|
||||
/* Some Synopsys controllers mistakenly leave IAA turned on */
|
||||
ehci_writel(ehci, STS_IAA, &ehci->regs->status);
|
||||
|
||||
/* Any IAA cycle that started before the suspend is now invalid */
|
||||
end_iaa_cycle(ehci);
|
||||
ehci_handle_start_intr_unlinks(ehci);
|
||||
|
@ -2931,6 +2931,8 @@ static void queue_trb(struct xhci_hcd *xhci, struct xhci_ring *ring,
|
||||
trb->field[0] = cpu_to_le32(field1);
|
||||
trb->field[1] = cpu_to_le32(field2);
|
||||
trb->field[2] = cpu_to_le32(field3);
|
||||
/* make sure TRB is fully written before giving it to the controller */
|
||||
wmb();
|
||||
trb->field[3] = cpu_to_le32(field4);
|
||||
|
||||
trace_xhci_queue_trb(ring, trb);
|
||||
|
@ -623,6 +623,13 @@ static void tegra_xusb_mbox_handle(struct tegra_xusb *tegra,
|
||||
enable);
|
||||
if (err < 0)
|
||||
break;
|
||||
|
||||
/*
|
||||
* wait 500us for LFPS detector to be disabled before
|
||||
* sending ACK
|
||||
*/
|
||||
if (!enable)
|
||||
usleep_range(500, 1000);
|
||||
}
|
||||
|
||||
if (err < 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user