Loading drivers/usb/dwc3/dwc3-msm.c +10 −1 Original line number Diff line number Diff line Loading @@ -1001,11 +1001,20 @@ static void gsi_store_ringbase_dbl_info(struct usb_ep *ep, lower_32_bits(dwc3_trb_dma_offset(dep, &dep->trb_pool[0])), upper_32_bits(dwc3_trb_dma_offset(dep, &dep->trb_pool[0]))); if (request->mapped_db_reg_phs_addr_lsb && dwc->sysdev != request->dev) { dma_unmap_resource(request->dev, request->mapped_db_reg_phs_addr_lsb, PAGE_SIZE, DMA_BIDIRECTIONAL, 0); request->mapped_db_reg_phs_addr_lsb = 0; } if (!request->mapped_db_reg_phs_addr_lsb) { request->mapped_db_reg_phs_addr_lsb = dma_map_resource(dwc->sysdev, (phys_addr_t)request->db_reg_phs_addr_lsb, PAGE_SIZE, DMA_BIDIRECTIONAL, 0); request->dev = dwc->sysdev; if (dma_mapping_error(dwc->sysdev, request->mapped_db_reg_phs_addr_lsb)) dev_err(mdwc->dev, "mapping error for db_reg_phs_addr_lsb\n"); Loading Loading @@ -3974,10 +3983,10 @@ static int dwc3_msm_remove(struct platform_device *pdev) if (mdwc->hs_phy) mdwc->hs_phy->flags &= ~PHY_HOST_MODE; dbg_event(0xFF, "Remov put", 0); platform_device_put(mdwc->dwc3); of_platform_depopulate(&pdev->dev); dbg_event(0xFF, "Remov put", 0); pm_runtime_disable(mdwc->dev); pm_runtime_barrier(mdwc->dev); pm_runtime_put_sync(mdwc->dev); Loading drivers/usb/dwc3/gadget.c +6 −1 Original line number Diff line number Diff line Loading @@ -470,7 +470,7 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd, ret = -ETIMEDOUT; dev_err(dwc->dev, "%s command timeout for %s\n", dwc3_gadget_ep_cmd_string(cmd), dep->name); if (!(cmd & DWC3_DEPCMD_ENDTRANSFER)) { if (DWC3_DEPCMD_CMD(cmd) != DWC3_DEPCMD_ENDTRANSFER) { dwc->ep_cmd_timeout_cnt++; dwc3_notify_event(dwc, DWC3_CONTROLLER_RESTART_USB_SESSION, 0); Loading Loading @@ -1450,6 +1450,11 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep) if (!dwc3_calc_trbs_left(dep)) return 0; if (dep->flags & DWC3_EP_END_TRANSFER_PENDING) { dbg_event(dep->number, "ENDXFER Pending", dep->flags); return -EBUSY; } starting = !(dep->flags & DWC3_EP_TRANSFER_STARTED); dwc3_prepare_trbs(dep); Loading drivers/usb/host/xhci.c +6 −0 Original line number Diff line number Diff line Loading @@ -1034,6 +1034,12 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup) if (xhci_handshake(&xhci->op_regs->status, STS_HALT, STS_HALT, delay)) { xhci_warn(xhci, "WARN: xHC CMD_RUN timeout\n"); /* Set the HW_ACCESSIBLE so that any pending interrupts are * served. */ set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); set_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags); xhci_hc_died(xhci); spin_unlock_irq(&xhci->lock); return -ETIMEDOUT; } Loading include/linux/usb/gadget.h +4 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,9 @@ enum gsi_ep_op { * @db_reg_phs_addr_lsb: IPA channel doorbell register's physical address LSB * @mapped_db_reg_phs_addr_lsb: doorbell LSB IOVA address mapped with IOMMU * @db_reg_phs_addr_msb: IPA channel doorbell register's physical address MSB * @sgt_trb_xfer_ring: USB TRB ring related sgtable entries * @sgt_data_buff: Data buffer related sgtable entries * @dev: pointer to the DMA-capable dwc device */ struct usb_gsi_request { void *buf_base_addr; Loading @@ -95,6 +98,7 @@ struct usb_gsi_request { u32 db_reg_phs_addr_msb; struct sg_table sgt_trb_xfer_ring; struct sg_table sgt_data_buff; struct device *dev; }; /* Loading Loading
drivers/usb/dwc3/dwc3-msm.c +10 −1 Original line number Diff line number Diff line Loading @@ -1001,11 +1001,20 @@ static void gsi_store_ringbase_dbl_info(struct usb_ep *ep, lower_32_bits(dwc3_trb_dma_offset(dep, &dep->trb_pool[0])), upper_32_bits(dwc3_trb_dma_offset(dep, &dep->trb_pool[0]))); if (request->mapped_db_reg_phs_addr_lsb && dwc->sysdev != request->dev) { dma_unmap_resource(request->dev, request->mapped_db_reg_phs_addr_lsb, PAGE_SIZE, DMA_BIDIRECTIONAL, 0); request->mapped_db_reg_phs_addr_lsb = 0; } if (!request->mapped_db_reg_phs_addr_lsb) { request->mapped_db_reg_phs_addr_lsb = dma_map_resource(dwc->sysdev, (phys_addr_t)request->db_reg_phs_addr_lsb, PAGE_SIZE, DMA_BIDIRECTIONAL, 0); request->dev = dwc->sysdev; if (dma_mapping_error(dwc->sysdev, request->mapped_db_reg_phs_addr_lsb)) dev_err(mdwc->dev, "mapping error for db_reg_phs_addr_lsb\n"); Loading Loading @@ -3974,10 +3983,10 @@ static int dwc3_msm_remove(struct platform_device *pdev) if (mdwc->hs_phy) mdwc->hs_phy->flags &= ~PHY_HOST_MODE; dbg_event(0xFF, "Remov put", 0); platform_device_put(mdwc->dwc3); of_platform_depopulate(&pdev->dev); dbg_event(0xFF, "Remov put", 0); pm_runtime_disable(mdwc->dev); pm_runtime_barrier(mdwc->dev); pm_runtime_put_sync(mdwc->dev); Loading
drivers/usb/dwc3/gadget.c +6 −1 Original line number Diff line number Diff line Loading @@ -470,7 +470,7 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd, ret = -ETIMEDOUT; dev_err(dwc->dev, "%s command timeout for %s\n", dwc3_gadget_ep_cmd_string(cmd), dep->name); if (!(cmd & DWC3_DEPCMD_ENDTRANSFER)) { if (DWC3_DEPCMD_CMD(cmd) != DWC3_DEPCMD_ENDTRANSFER) { dwc->ep_cmd_timeout_cnt++; dwc3_notify_event(dwc, DWC3_CONTROLLER_RESTART_USB_SESSION, 0); Loading Loading @@ -1450,6 +1450,11 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep) if (!dwc3_calc_trbs_left(dep)) return 0; if (dep->flags & DWC3_EP_END_TRANSFER_PENDING) { dbg_event(dep->number, "ENDXFER Pending", dep->flags); return -EBUSY; } starting = !(dep->flags & DWC3_EP_TRANSFER_STARTED); dwc3_prepare_trbs(dep); Loading
drivers/usb/host/xhci.c +6 −0 Original line number Diff line number Diff line Loading @@ -1034,6 +1034,12 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup) if (xhci_handshake(&xhci->op_regs->status, STS_HALT, STS_HALT, delay)) { xhci_warn(xhci, "WARN: xHC CMD_RUN timeout\n"); /* Set the HW_ACCESSIBLE so that any pending interrupts are * served. */ set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); set_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags); xhci_hc_died(xhci); spin_unlock_irq(&xhci->lock); return -ETIMEDOUT; } Loading
include/linux/usb/gadget.h +4 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,9 @@ enum gsi_ep_op { * @db_reg_phs_addr_lsb: IPA channel doorbell register's physical address LSB * @mapped_db_reg_phs_addr_lsb: doorbell LSB IOVA address mapped with IOMMU * @db_reg_phs_addr_msb: IPA channel doorbell register's physical address MSB * @sgt_trb_xfer_ring: USB TRB ring related sgtable entries * @sgt_data_buff: Data buffer related sgtable entries * @dev: pointer to the DMA-capable dwc device */ struct usb_gsi_request { void *buf_base_addr; Loading @@ -95,6 +98,7 @@ struct usb_gsi_request { u32 db_reg_phs_addr_msb; struct sg_table sgt_trb_xfer_ring; struct sg_table sgt_data_buff; struct device *dev; }; /* Loading