linux/drivers/usb/dwc2
Peng Hongchi 4f3cb0f96a usb: dwc2: gadget: Don't write invalid mapped sg entries into dma_desc with iommu enabled
[ Upstream commit 1134289b6b ]

When using dma_map_sg() to map the scatterlist with iommu enabled,
the entries in the scatterlist can be mergerd into less but longer
entries in the function __finalise_sg(). So that the number of
valid mapped entries is actually smaller than ureq->num_reqs,and
there are still some invalid entries in the scatterlist with
dma_addr=0xffffffff and len=0. Writing these invalid sg entries
into the dma_desc can cause a data transmission error.

The function dma_map_sg() returns the number of valid map entries
and the return value is assigned to usb_request::num_mapped_sgs in
function usb_gadget_map_request_by_dev(). So that just write valid
mapped entries into dma_desc according to the usb_request::num_mapped_sgs,
and set the IOC bit if it's the last valid mapped entry.

This patch poses no risk to no-iommu situation, cause
ureq->num_mapped_sgs equals ureq->num_sgs while using dma_direct_map_sg()
to map the scatterlist whith iommu disabled.

Signed-off-by: Peng Hongchi <hongchi.peng@siengine.com>
Link: https://lore.kernel.org/r/20240523100315.7226-1-hongchi.peng@siengine.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2024-12-27 13:58:41 +01:00
..
core.c usb: dwc2: Remove redundant license text 2022-09-22 15:52:29 +02:00
core.h usb: dwc2: gadget: LPM flow fix 2024-04-03 15:29:00 +02:00
core_intr.c usb: dwc2: gadget: LPM flow fix 2024-04-03 15:29:00 +02:00
debug.h USB: dwc2: Use the correct style for SPDX License Identifier 2020-05-05 10:58:50 +03:00
debugfs.c usb: dwc2: add otg_rev and otg_caps information for gadget driver 2021-10-25 09:20:26 +02:00
drd.c usb: dwc2: drd: fix clock gating on USB role switch 2024-10-04 16:29:50 +02:00
gadget.c usb: dwc2: gadget: Don't write invalid mapped sg entries into dma_desc with iommu enabled 2024-12-27 13:58:41 +01:00
hcd.c usb: dwc2: Fix HCD port connection race 2024-12-19 18:11:23 +01:00
hcd.h usb: dwc2: Remove redundant license text 2022-09-22 15:52:29 +02:00
hcd_ddma.c usb: dwc2: host: Fix dereference issue in DDMA completion flow. 2024-04-27 17:11:40 +02:00
hcd_intr.c USB: dwc2: write HCINT with INTMASK applied 2023-12-03 07:33:10 +01:00
hcd_queue.c usb: dwc2: Fix spelling mistake "schduler" -> "scheduler" 2023-03-29 09:02:14 +02:00
hw.h usb: dwc2: host: Fix ISOC flow in DDMA mode 2024-04-03 15:29:00 +02:00
Kconfig usb: dwc2: override PHY input signals with usb role switch support 2020-10-02 13:29:13 +03:00
Makefile usb: dwc2: override PHY input signals with usb role switch support 2020-10-02 13:29:13 +03:00
params.c usb: dwc2: add pci_device_id driver_data parse support 2023-08-22 14:49:12 +02:00
pci.c usb: dwc2: add pci_device_id driver_data parse support 2023-08-22 14:49:12 +02:00
platform.c usb: dwc2: Adjust the timing of USB Driver Interrupt Registration in the Crashkernel Scenario 2024-10-17 15:24:19 +02:00