Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+61 -23
+3 -3
MAINTAINERS
··· 3879 3879 F: drivers/mtd/nand/raw/cadence-nand-controller.c 3880 3880 3881 3881 CADENCE USB3 DRD IP DRIVER 3882 - M: Peter Chen <peter.chen@nxp.com> 3882 + M: Peter Chen <peter.chen@kernel.org> 3883 3883 M: Pawel Laszczak <pawell@cadence.com> 3884 3884 R: Roger Quadros <rogerq@kernel.org> 3885 3885 R: Aswath Govindraju <a-govindraju@ti.com> ··· 4161 4161 F: Documentation/translations/zh_CN/ 4162 4162 4163 4163 CHIPIDEA USB HIGH SPEED DUAL ROLE CONTROLLER 4164 - M: Peter Chen <Peter.Chen@nxp.com> 4164 + M: Peter Chen <peter.chen@kernel.org> 4165 4165 L: linux-usb@vger.kernel.org 4166 4166 S: Maintained 4167 4167 T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git ··· 18420 18420 F: drivers/usb/host/ohci* 18421 18421 18422 18422 USB OTG FSM (Finite State Machine) 18423 - M: Peter Chen <Peter.Chen@nxp.com> 18423 + M: Peter Chen <peter.chen@kernel.org> 18424 18424 L: linux-usb@vger.kernel.org 18425 18425 S: Maintained 18426 18426 T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
+1 -1
drivers/thunderbolt/icm.c
··· 2316 2316 2317 2317 if (auth && auth->reply.route_hi == sw->config.route_hi && 2318 2318 auth->reply.route_lo == sw->config.route_lo) { 2319 - tb_dbg(tb, "NVM_AUTH found for %llx flags 0x%#x status %#x\n", 2319 + tb_dbg(tb, "NVM_AUTH found for %llx flags %#x status %#x\n", 2320 2320 tb_route(sw), auth->reply.hdr.flags, auth->reply.status); 2321 2321 if (auth->reply.hdr.flags & ICM_FLAGS_ERROR) 2322 2322 ret = -EIO;
+11 -11
drivers/usb/cdns3/cdns3-imx.c
··· 185 185 } 186 186 187 187 data->num_clks = ARRAY_SIZE(imx_cdns3_core_clks); 188 - data->clks = (struct clk_bulk_data *)imx_cdns3_core_clks; 188 + data->clks = devm_kmemdup(dev, imx_cdns3_core_clks, 189 + sizeof(imx_cdns3_core_clks), GFP_KERNEL); 190 + if (!data->clks) 191 + return -ENOMEM; 192 + 189 193 ret = devm_clk_bulk_get(dev, data->num_clks, data->clks); 190 194 if (ret) 191 195 return ret; ··· 218 214 return ret; 219 215 } 220 216 221 - static int cdns_imx_remove_core(struct device *dev, void *data) 222 - { 223 - struct platform_device *pdev = to_platform_device(dev); 224 - 225 - platform_device_unregister(pdev); 226 - 227 - return 0; 228 - } 229 - 230 217 static int cdns_imx_remove(struct platform_device *pdev) 231 218 { 232 219 struct device *dev = &pdev->dev; 220 + struct cdns_imx *data = dev_get_drvdata(dev); 233 221 234 - device_for_each_child(dev, NULL, cdns_imx_remove_core); 222 + pm_runtime_get_sync(dev); 223 + of_platform_depopulate(dev); 224 + clk_bulk_disable_unprepare(data->num_clks, data->clks); 225 + pm_runtime_disable(dev); 226 + pm_runtime_put_noidle(dev); 235 227 platform_set_drvdata(pdev, NULL); 236 228 237 229 return 0;
+4 -1
drivers/usb/gadget/udc/aspeed-vhub/epn.c
··· 420 420 u32 state, reg, loops; 421 421 422 422 /* Stop DMA activity */ 423 - writel(0, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT); 423 + if (ep->epn.desc_mode) 424 + writel(VHUB_EP_DMA_CTRL_RESET, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT); 425 + else 426 + writel(0, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT); 424 427 425 428 /* Wait for it to complete */ 426 429 for (loops = 0; loops < 1000; loops++) {
+1 -1
drivers/usb/gadget/udc/bdc/Kconfig
··· 17 17 comment "Platform Support" 18 18 config USB_BDC_PCI 19 19 tristate "BDC support for PCIe based platforms" 20 - depends on USB_PCI 20 + depends on USB_PCI && BROKEN 21 21 default USB_BDC_UDC 22 22 help 23 23 Enable support for platforms which have BDC connected through PCIe, such as Lego3 FPGA platform.
+10 -3
drivers/usb/gadget/udc/core.c
··· 1529 1529 struct device_attribute *attr, const char *buf, size_t n) 1530 1530 { 1531 1531 struct usb_udc *udc = container_of(dev, struct usb_udc, dev); 1532 + ssize_t ret; 1532 1533 1534 + mutex_lock(&udc_lock); 1533 1535 if (!udc->driver) { 1534 1536 dev_err(dev, "soft-connect without a gadget driver\n"); 1535 - return -EOPNOTSUPP; 1537 + ret = -EOPNOTSUPP; 1538 + goto out; 1536 1539 } 1537 1540 1538 1541 if (sysfs_streq(buf, "connect")) { ··· 1546 1543 usb_gadget_udc_stop(udc); 1547 1544 } else { 1548 1545 dev_err(dev, "unsupported command '%s'\n", buf); 1549 - return -EINVAL; 1546 + ret = -EINVAL; 1547 + goto out; 1550 1548 } 1551 1549 1552 - return n; 1550 + ret = n; 1551 + out: 1552 + mutex_unlock(&udc_lock); 1553 + return ret; 1553 1554 } 1554 1555 static DEVICE_ATTR_WO(soft_connect); 1555 1556
+7 -3
drivers/usb/gadget/udc/dummy_hcd.c
··· 2270 2270 } 2271 2271 fallthrough; 2272 2272 case USB_PORT_FEAT_RESET: 2273 + if (!(dum_hcd->port_status & USB_PORT_STAT_CONNECTION)) 2274 + break; 2273 2275 /* if it's already enabled, disable */ 2274 2276 if (hcd->speed == HCD_USB3) { 2275 - dum_hcd->port_status = 0; 2276 2277 dum_hcd->port_status = 2277 2278 (USB_SS_PORT_STAT_POWER | 2278 2279 USB_PORT_STAT_CONNECTION | 2279 2280 USB_PORT_STAT_RESET); 2280 - } else 2281 + } else { 2281 2282 dum_hcd->port_status &= ~(USB_PORT_STAT_ENABLE 2282 2283 | USB_PORT_STAT_LOW_SPEED 2283 2284 | USB_PORT_STAT_HIGH_SPEED); 2285 + dum_hcd->port_status |= USB_PORT_STAT_RESET; 2286 + } 2284 2287 /* 2285 2288 * We want to reset device status. All but the 2286 2289 * Self powered feature ··· 2295 2292 * interval? Is it still 50msec as for HS? 2296 2293 */ 2297 2294 dum_hcd->re_timeout = jiffies + msecs_to_jiffies(50); 2298 - fallthrough; 2295 + set_link_state(dum_hcd); 2296 + break; 2299 2297 case USB_PORT_FEAT_C_CONNECTION: 2300 2298 case USB_PORT_FEAT_C_RESET: 2301 2299 case USB_PORT_FEAT_C_ENABLE:
+12
drivers/usb/host/ehci-hcd.c
··· 574 574 struct ehci_hcd *ehci = hcd_to_ehci (hcd); 575 575 u32 temp; 576 576 u32 hcc_params; 577 + int rc; 577 578 578 579 hcd->uses_new_polling = 1; 579 580 ··· 630 629 down_write(&ehci_cf_port_reset_rwsem); 631 630 ehci->rh_state = EHCI_RH_RUNNING; 632 631 ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag); 632 + 633 + /* Wait until HC become operational */ 633 634 ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */ 634 635 msleep(5); 636 + rc = ehci_handshake(ehci, &ehci->regs->status, STS_HALT, 0, 100 * 1000); 637 + 635 638 up_write(&ehci_cf_port_reset_rwsem); 639 + 640 + if (rc) { 641 + ehci_err(ehci, "USB %x.%x, controller refused to start: %d\n", 642 + ((ehci->sbrn & 0xf0)>>4), (ehci->sbrn & 0x0f), rc); 643 + return rc; 644 + } 645 + 636 646 ehci->last_periodic_enable = ktime_get_real(); 637 647 638 648 temp = HC_VERSION(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase));
+3
drivers/usb/host/ehci-hub.c
··· 345 345 346 346 unlink_empty_async_suspended(ehci); 347 347 348 + /* Some Synopsys controllers mistakenly leave IAA turned on */ 349 + ehci_writel(ehci, STS_IAA, &ehci->regs->status); 350 + 348 351 /* Any IAA cycle that started before the suspend is now invalid */ 349 352 end_iaa_cycle(ehci); 350 353 ehci_handle_start_intr_unlinks(ehci);
+2
drivers/usb/host/xhci-ring.c
··· 2931 2931 trb->field[0] = cpu_to_le32(field1); 2932 2932 trb->field[1] = cpu_to_le32(field2); 2933 2933 trb->field[2] = cpu_to_le32(field3); 2934 + /* make sure TRB is fully written before giving it to the controller */ 2935 + wmb(); 2934 2936 trb->field[3] = cpu_to_le32(field4); 2935 2937 2936 2938 trace_xhci_queue_trb(ring, trb);
+7
drivers/usb/host/xhci-tegra.c
··· 623 623 enable); 624 624 if (err < 0) 625 625 break; 626 + 627 + /* 628 + * wait 500us for LFPS detector to be disabled before 629 + * sending ACK 630 + */ 631 + if (!enable) 632 + usleep_range(500, 1000); 626 633 } 627 634 628 635 if (err < 0) {