Skip to content

Commit 2d40060

Browse files
committed
Merge tag 'usb-5.16' 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.16 to resolve some reported problems: - mtu3 driver fixes - typec ucsi driver fix - xhci driver quirk added - usb gadget f_fs fix for reported crash All of these have been in linux-next for a while with no reported problems" * tag 'usb-5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: usb: typec: ucsi: Only check the contract if there is a connection xhci: Fresco FL1100 controller should not have BROKEN_MSI quirk set. usb: mtu3: set interval of FS intr and isoc endpoint usb: mtu3: fix list_head check warning usb: mtu3: add memory barrier before set GPD's HWO usb: mtu3: fix interval value for intr and isoc usb: gadget: f_fs: Clear ffs_eventfd in ffs_data_clear.
2 parents eec4df2 + 3f345e9 commit 2d40060

File tree

5 files changed

+29
-8
lines changed

5 files changed

+29
-8
lines changed

drivers/usb/gadget/function/f_fs.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1773,11 +1773,15 @@ static void ffs_data_clear(struct ffs_data *ffs)
17731773

17741774
BUG_ON(ffs->gadget);
17751775

1776-
if (ffs->epfiles)
1776+
if (ffs->epfiles) {
17771777
ffs_epfiles_destroy(ffs->epfiles, ffs->eps_count);
1778+
ffs->epfiles = NULL;
1779+
}
17781780

1779-
if (ffs->ffs_eventfd)
1781+
if (ffs->ffs_eventfd) {
17801782
eventfd_ctx_put(ffs->ffs_eventfd);
1783+
ffs->ffs_eventfd = NULL;
1784+
}
17811785

17821786
kfree(ffs->raw_descs_data);
17831787
kfree(ffs->raw_strings);
@@ -1790,7 +1794,6 @@ static void ffs_data_reset(struct ffs_data *ffs)
17901794

17911795
ffs_data_clear(ffs);
17921796

1793-
ffs->epfiles = NULL;
17941797
ffs->raw_descs_data = NULL;
17951798
ffs->raw_descs = NULL;
17961799
ffs->raw_strings = NULL;

drivers/usb/host/xhci-pci.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
123123
/* Look for vendor-specific quirks */
124124
if (pdev->vendor == PCI_VENDOR_ID_FRESCO_LOGIC &&
125125
(pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK ||
126-
pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1100 ||
127126
pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1400)) {
128127
if (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK &&
129128
pdev->revision == 0x0) {
@@ -158,6 +157,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
158157
pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1009)
159158
xhci->quirks |= XHCI_BROKEN_STREAMS;
160159

160+
if (pdev->vendor == PCI_VENDOR_ID_FRESCO_LOGIC &&
161+
pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1100)
162+
xhci->quirks |= XHCI_TRUST_TX_LENGTH;
163+
161164
if (pdev->vendor == PCI_VENDOR_ID_NEC)
162165
xhci->quirks |= XHCI_NEC_HOST;
163166

drivers/usb/mtu3/mtu3_gadget.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ static int mtu3_ep_enable(struct mtu3_ep *mep)
7777
if (usb_endpoint_xfer_int(desc) ||
7878
usb_endpoint_xfer_isoc(desc)) {
7979
interval = desc->bInterval;
80-
interval = clamp_val(interval, 1, 16) - 1;
80+
interval = clamp_val(interval, 1, 16);
8181
if (usb_endpoint_xfer_isoc(desc) && comp_desc)
8282
mult = comp_desc->bmAttributes;
8383
}
@@ -89,9 +89,16 @@ static int mtu3_ep_enable(struct mtu3_ep *mep)
8989
if (usb_endpoint_xfer_isoc(desc) ||
9090
usb_endpoint_xfer_int(desc)) {
9191
interval = desc->bInterval;
92-
interval = clamp_val(interval, 1, 16) - 1;
92+
interval = clamp_val(interval, 1, 16);
9393
mult = usb_endpoint_maxp_mult(desc) - 1;
9494
}
95+
break;
96+
case USB_SPEED_FULL:
97+
if (usb_endpoint_xfer_isoc(desc))
98+
interval = clamp_val(desc->bInterval, 1, 16);
99+
else if (usb_endpoint_xfer_int(desc))
100+
interval = clamp_val(desc->bInterval, 1, 255);
101+
95102
break;
96103
default:
97104
break; /*others are ignored */
@@ -235,6 +242,7 @@ struct usb_request *mtu3_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
235242
mreq->request.dma = DMA_ADDR_INVALID;
236243
mreq->epnum = mep->epnum;
237244
mreq->mep = mep;
245+
INIT_LIST_HEAD(&mreq->list);
238246
trace_mtu3_alloc_request(mreq);
239247

240248
return &mreq->request;

drivers/usb/mtu3/mtu3_qmu.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,8 @@ static int mtu3_prepare_tx_gpd(struct mtu3_ep *mep, struct mtu3_request *mreq)
273273
gpd->dw3_info |= cpu_to_le32(GPD_EXT_FLAG_ZLP);
274274
}
275275

276+
/* prevent reorder, make sure GPD's HWO is set last */
277+
mb();
276278
gpd->dw0_info |= cpu_to_le32(GPD_FLAGS_IOC | GPD_FLAGS_HWO);
277279

278280
mreq->gpd = gpd;
@@ -306,6 +308,8 @@ static int mtu3_prepare_rx_gpd(struct mtu3_ep *mep, struct mtu3_request *mreq)
306308
gpd->next_gpd = cpu_to_le32(lower_32_bits(enq_dma));
307309
ext_addr |= GPD_EXT_NGP(mtu, upper_32_bits(enq_dma));
308310
gpd->dw3_info = cpu_to_le32(ext_addr);
311+
/* prevent reorder, make sure GPD's HWO is set last */
312+
mb();
309313
gpd->dw0_info |= cpu_to_le32(GPD_FLAGS_IOC | GPD_FLAGS_HWO);
310314

311315
mreq->gpd = gpd;
@@ -445,7 +449,8 @@ static void qmu_tx_zlp_error_handler(struct mtu3 *mtu, u8 epnum)
445449
return;
446450
}
447451
mtu3_setbits(mbase, MU3D_EP_TXCR0(mep->epnum), TX_TXPKTRDY);
448-
452+
/* prevent reorder, make sure GPD's HWO is set last */
453+
mb();
449454
/* by pass the current GDP */
450455
gpd_current->dw0_info |= cpu_to_le32(GPD_FLAGS_BPS | GPD_FLAGS_HWO);
451456

drivers/usb/typec/ucsi/ucsi.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1150,7 +1150,9 @@ static int ucsi_register_port(struct ucsi *ucsi, int index)
11501150
ret = 0;
11511151
}
11521152

1153-
if (UCSI_CONSTAT_PWR_OPMODE(con->status.flags) == UCSI_CONSTAT_PWR_OPMODE_PD) {
1153+
if (con->partner &&
1154+
UCSI_CONSTAT_PWR_OPMODE(con->status.flags) ==
1155+
UCSI_CONSTAT_PWR_OPMODE_PD) {
11541156
ucsi_get_src_pdos(con);
11551157
ucsi_check_altmodes(con);
11561158
}

0 commit comments

Comments
 (0)