linux/drivers
Damien Le Moal 2eb355346c PCI: rockchip-ep: Fix address translation unit programming
commit 64f093c4d9 upstream.

The Rockchip PCIe endpoint controller handles PCIe transfers addresses
by masking the lower bits of the programmed PCI address and using the
same number of lower bits masked from the CPU address space used for the
mapping. For a PCI mapping of <size> bytes starting from <pci_addr>,
the number of bits masked is the number of address bits changing in the
address range [pci_addr..pci_addr + size - 1].

However, rockchip_pcie_prog_ep_ob_atu() calculates num_pass_bits only
using the size of the mapping, resulting in an incorrect number of mask
bits depending on the value of the PCI address to map.

Fix this by introducing the helper function
rockchip_pcie_ep_ob_atu_num_bits() to correctly calculate the number of
mask bits to use to program the address translation unit. The number of
mask bits is calculated depending on both the PCI address and size of
the mapping, and clamped between 8 and 20 using the macros
ROCKCHIP_PCIE_AT_MIN_NUM_BITS and ROCKCHIP_PCIE_AT_MAX_NUM_BITS. As
defined in the Rockchip RK3399 TRM V1.3 Part2, Sections 17.5.5.1.1 and
17.6.8.2.1, this clamping is necessary because:

  1) The lower 8 bits of the PCI address to be mapped by the outbound
     region are ignored. So a minimum of 8 address bits are needed and
     imply that the PCI address must be aligned to 256.

  2) The outbound memory regions are 1MB in size. So while we can specify
     up to 63-bits for the PCI address (num_bits filed uses bits 0 to 5 of
     the outbound address region 0 register), we must limit the number of
     valid address bits to 20 to match the memory window maximum size (1
     << 20 = 1MB).

Fixes: cf590b0783 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
Link: https://lore.kernel.org/r/20241017015849.190271-2-dlemoal@kernel.org
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2024-12-09 10:33:08 +01:00
..
accel accel/qaic: Fix the for loop used to walk SG table 2024-11-01 01:58:21 +01:00
accessibility speakup: Fix sizeof() vs ARRAY_SIZE() bug 2024-06-12 11:11:18 +02:00
acpi ACPI: CPPC: Fix _CPC register setting issue 2024-12-09 10:31:49 +01:00
amba amba: bus: fix refcount leak 2023-08-22 15:50:57 +02:00
android binder: fix UAF caused by offsets overwrite 2024-09-12 11:11:41 +02:00
ata ata: libata: Set DID_TIME_OUT for commands that actually timed out 2024-11-01 01:58:33 +01:00
atm atm: idt77252: prevent use after free in dequeue_rx() 2024-08-29 17:33:18 +02:00
auxdisplay auxdisplay: ht16k33: Drop reference after LED registration 2024-08-03 08:54:39 +02:00
base firmware_loader: Fix possible resource leak in fw_log_firmware_info() 2024-12-09 10:32:37 +01:00
bcma bcma: Add explicit of_device.h include 2023-04-14 15:32:56 +03:00
block zram: clear IDLE flag after recompression 2024-12-09 10:33:05 +01:00
bluetooth Bluetooth: btintel: Direct exception event to bluetooth stack 2024-11-22 15:38:32 +01:00
bus bus: mhi: ep: Do not allocate memory for MHI objects from DMA zone 2024-10-17 15:24:10 +02:00
cache cache: ax45mp_cache: Align end size to cache boundary in ax45mp_dma_cache_wback() 2024-03-01 13:35:08 +01:00
cdrom cdrom: Avoid barrier_nospec() in cdrom_ioctl_media_changed() 2024-11-01 01:58:25 +01:00
cdx cdx: Explicitly include correct DT includes 2023-08-04 16:21:20 +02:00
char virtio_console: fix misc probe bugs 2024-10-17 15:24:14 +02:00
clk clk: qcom: gcc-qcs404: fix initial rate of GPLL3 2024-12-09 10:33:05 +01:00
clocksource clocksource/drivers/timer-ti-dm: Fix child node refcount handling 2024-12-09 10:31:51 +01:00
comedi comedi: Flush partial mappings in error case 2024-12-09 10:32:44 +01:00
connector connector/cn_proc: revert "connector: Fix proc_event_num_listeners count not cleared" 2024-02-23 09:25:01 +01:00
counter counter: ti-ecap-capture: Add check for clk_enable() 2024-12-09 10:32:37 +01:00
cpufreq cpufreq: mediatek-hw: Fix wrong return value in mtk_cpufreq_get_cpu_power() 2024-12-09 10:32:48 +01:00
cpuidle cpuidle: riscv-sbi: Use scoped device node handling to fix missing of_node_put 2024-10-04 16:29:56 +02:00
crypto crypto: cavium - Fix an error handling path in cpt_ucode_load_fw() 2024-12-09 10:31:50 +01:00
cxl cxl/acpi: Ensure ports ready at cxl_acpi_probe() return 2024-11-08 16:28:25 +01:00
dax dax: delete a stale directory pmem 2024-12-09 10:32:21 +01:00
dca Mainly singleton patches all over the place. Series of note are: 2023-04-27 19:57:00 -07:00
devfreq PM / devfreq: Synchronize devfreq_monitor_[start/stop] 2024-02-05 20:14:15 +00:00
dio drivers: dio: fix possible memory leak in dio_init() 2022-11-09 15:12:37 +01:00
dma dmaengine: altera-msgdma: properly free descriptor in msgdma_free_descriptor 2024-09-08 07:54:46 +02:00
dma-buf dma-buf: heaps: Fix off-by-one in CMA heap fault handler 2024-09-18 19:24:09 +02:00
edac EDAC/igen6: Avoid segmentation fault on module unload 2024-12-09 10:31:48 +01:00
eisa EISA: Replace all non-returning strlcpy with strscpy 2023-07-27 10:04:42 -07:00
extcon extcon: max8997: select IRQ_DOMAIN instead of depending on it 2024-06-12 11:12:27 +02:00
firewire firewire: core: correct range of block for case of switch statement 2024-10-04 16:29:28 +02:00
firmware efi/libstub: Free correct pointer on failure 2024-12-09 10:33:03 +01:00
fpga fpga: region: add owner module and take its refcount 2024-06-12 11:12:23 +02:00
fsi fsi: i2cr: Switch to use struct i2c_driver's .probe() 2023-08-22 15:51:33 +02:00
gnss driver core: class: remove module * from class_create() 2023-03-17 15:16:33 +01:00
gpio gpio: exar: set value when external pull-up or pull-down is present 2024-12-09 10:32:47 +01:00
gpu drm/amd/display: Add NULL pointer check for kzalloc 2024-12-09 10:32:41 +01:00
greybus greybus: Fix use-after-free bug in gb_interface_release due to race condition. 2024-06-21 14:38:48 +02:00
hid HID: wacom: Interpret tilt data from Intuos Pro BT as signed values 2024-12-09 10:32:51 +01:00
hsi hsi: omap_ssi: Explicitly include correct DT includes 2023-07-31 23:17:57 +02:00
hte hte: tegra: Fix missing error code in tegra_hte_test_probe() 2023-11-20 11:59:08 +01:00
hv Drivers: hv: vmbus: Fix rescind handling in uio_hv_generic 2024-09-12 11:11:41 +02:00
hwmon hwmon: (tps23861) Fix reporting of negative temperatures 2024-12-09 10:32:30 +01:00
hwspinlock hwspinlock: Introduce hwspin_lock_bust() 2024-09-08 07:54:43 +02:00
hwtracing coresight: tmc: sg: Do not leak sg_table 2024-10-04 16:29:40 +02:00
i2c i2c: lpi2c: Avoid calling clk_get_rate during transfer 2024-12-09 10:31:40 +01:00
i3c i3c: master: Fix miss free init_dyn_addr at i3c_master_put_i3c_addrs() 2024-12-09 10:33:07 +01:00
idle x86: Fix CPUIDLE_FLAG_IRQ_ENABLE leaking timer reprogram 2024-01-25 15:35:12 -08:00
iio ad7780: fix division by zero in ad7780_write_raw() 2024-12-09 10:33:05 +01:00
infiniband RDMA/mlx5: Move events notifier registration to be after device registration 2024-12-09 10:32:22 +01:00
input Input: edt-ft5x06 - fix regmap leak when probe fails 2024-11-08 16:28:25 +01:00
interconnect interconnect: icc-clk: Add missed num_nodes initialization 2024-10-04 16:29:40 +02:00
iommu iommu/io-pgtable-arm: Fix stage-2 map/unmap for concatenated tables 2024-12-09 10:33:05 +01:00
ipack tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
irqchip irqchip/ocelot: Fix trigger register address 2024-11-17 15:08:56 +01:00
isdn mISDN: fix MISDN_TIME_STAMP handling 2024-08-19 06:04:28 +02:00
leds leds: flash: mt6360: Fix device_for_each_child_node() refcounting in error paths 2024-12-09 10:33:08 +01:00
macintosh macintosh/therm_windtunnel: fix module unload. 2024-08-03 08:54:02 +02:00
mailbox mailbox: mtk-cmdq: Move devm_mbox_controller_register() after devm_pm_runtime_enable() 2024-12-09 10:32:39 +01:00
mcb mcb: fix error handling for different scenarios when parsing 2023-11-28 17:20:05 +00:00
md dm thin: Add missing destroy_work_on_stack() 2024-12-09 10:33:08 +01:00
media media: uvcvideo: Require entities to have a non-zero unique ID 2024-12-09 10:33:04 +01:00
memory memory: tegra186-emc: drop unused to_tegra186_emc() 2024-10-10 11:57:44 +02:00
memstick memstick r592: make memstick_debug_get_tpc_name() static 2023-06-12 15:16:19 +02:00
message scsi: fusion: Remove unused variable 'rc' 2024-12-09 10:32:18 +01:00
mfd mfd: rt5033: Fix missing regmap_del_irq_chip() 2024-12-09 10:32:18 +01:00
misc Compiler Attributes: disable __counted_by for clang < 19.1.3 2024-12-09 10:32:46 +01:00
mmc mmc: mmc_spi: drop buggy snprintf() 2024-12-09 10:31:52 +01:00
most staging: most: Replace all non-returning strlcpy with strscpy 2023-06-01 07:07:37 -07:00
mtd ubi: fastmap: Fix duplicate slab cache names while attaching 2024-12-09 10:32:55 +01:00
mux mux: Explicitly include correct DT includes 2023-08-28 13:36:24 -05:00
net wifi: brcmfmac: release 'root' node in all execution paths 2024-12-09 10:32:47 +01:00
nfc nfc: pn533: Add poll mod list filling check 2024-09-04 13:28:28 +02:00
ntb ntb: ntb_hw_switchtec: Fix use after free vulnerability in switchtec_ntb_remove due to race condition 2024-10-17 15:24:18 +02:00
nubus nubus: Don't list slot resources by default 2023-05-22 13:51:56 +02:00
nvdimm virtio_pmem: Check device status before requesting flush 2024-10-17 15:24:20 +02:00
nvme nvme/multipath: Fix RCU list traversal to use SRCU primitive 2024-12-09 10:32:56 +01:00
nvmem nvmem: u-boot-env: error if NVMEM device is too small 2024-09-18 19:24:04 +02:00
of of/fdt: add dt_phys arg to early_init_dt_scan and early_init_dt_verify 2024-12-09 10:31:56 +01:00
opp OPP: ti: Fix ti_opp_supply_probe wrong return values 2024-08-03 08:53:27 +02:00
parisc Revert "change alloc_pages name in dma_map_ops to avoid name conflicts" 2024-09-04 13:28:24 +02:00
parport parport: Proper fix for array out-of-bounds access 2024-10-22 15:46:33 +02:00
pci PCI: rockchip-ep: Fix address translation unit programming 2024-12-09 10:33:08 +01:00
pcmcia pcmcia: Use resource_size function on resource object 2024-09-12 11:11:31 +02:00
peci Update peci-next for v6.6-rc1 2023-08-08 10:53:30 +02:00
perf perf/arm-cmn: Ensure port and device id bits are set properly 2024-12-09 10:32:57 +01:00
phy phy: freescale: imx8m-pcie: Do CMN_RST just before PHY PLL lock check 2024-11-08 16:28:24 +01:00
pinctrl pinctrl: qcom: spmi: fix debugfs drive strength 2024-12-09 10:32:45 +01:00
platform platform/chrome: cros_ec_typec: fix missing fwnode reference decrement 2024-12-09 10:32:48 +01:00
pmdomain pmdomain: ti-sci: Add missing of_node_put() for args.np 2024-12-09 10:31:56 +01:00
pnp PNP: ACPI: fix fortify warning 2024-02-05 20:14:15 +00:00
power power: supply: rt9471: Use IC status regfield to report real charger status 2024-12-09 10:32:32 +01:00
powercap powercap: dtpm_devfreq: Fix error check against dev_pm_qos_add_request() 2024-11-01 01:58:31 +01:00
pps pps: add an error check in parport_attach 2024-10-04 16:29:58 +02:00
ps3 driver/ps3: Include <video/cmdline.h> for mode parsing 2023-02-20 14:56:51 +01:00
ptp ptp: fix integer overflow in max_vclocks_store 2024-06-27 13:49:07 +02:00
pwm pwm: imx27: Workaround of the pwm output bug when decrease the duty cycle 2024-12-09 10:31:54 +01:00
rapidio Mainly singleton patches all over the place. Series of note are: 2023-04-27 19:57:00 -07:00
ras ras/debugfs: Fix error checking for debugfs_create_dir() 2023-05-16 21:12:23 +02:00
regulator regulator: rk808: Restrict DVS GPIOs to the RK808 variant only 2024-12-09 10:31:54 +01:00
remoteproc remoteproc: qcom_q6v5_mss: Re-order writes to the IMEM region 2024-12-09 10:32:29 +01:00
reset reset: k210: fix OF node leak in probe() error path 2024-10-04 16:29:04 +02:00
rpmsg rpmsg: glink: use only lower 16-bits of param2 for CMD_OPEN name length 2024-12-09 10:32:29 +01:00
rtc rtc: ab-eoz9: don't fail temperature reads on undervoltage notification 2024-12-09 10:32:57 +01:00
s390 s390/cio: Do not unregister the subchannel based on DNV 2024-12-09 10:31:43 +01:00
sbus sbus: Explicitly include correct DT includes 2023-08-28 13:36:24 -05:00
scsi scsi: lpfc: Validate hdwq pointers before dereferencing in reset/errata paths 2024-12-09 10:32:39 +01:00
sh sh: intc: Fix use-after-free bug in register_intc_controller() 2024-12-09 10:33:00 +01:00
siox siox: fix possible memory leak in siox_device_add() 2022-11-09 15:40:14 +01:00
slimbus slimbus: qcom-ngd-ctrl: Add timeout for wait operation 2024-05-17 12:02:33 +02:00
soc soc: fsl: rcpm: fix missing of_node_put() in copy_ippdexpcr1_setting() 2024-12-09 10:32:51 +01:00
soundwire soundwire: cadence: re-check Peripheral status with delayed_work 2024-10-17 15:24:18 +02:00
spi spi: Fix acpi deferred irq probe 2024-12-09 10:32:47 +01:00
spmi spmi: hisi-spmi-controller: Do not override device identifier 2024-06-21 14:38:40 +02:00
ssb ssb: Fix division by zero issue in ssb_calc_clock_rate 2024-08-29 17:33:22 +02:00
staging media: atomisp: Add check for rgby_data memory allocation failure 2024-12-09 10:31:58 +01:00
target scsi: target: core: Fix null-ptr-deref in target_alloc_device() 2024-11-01 01:58:24 +01:00
tc The main MIPS changes for 5.6: 2020-01-31 11:28:31 -08:00
tee tee: optee: ffa: Fix missing-field-initializers warning 2024-07-25 09:50:53 +02:00
thermal thermal: int3400: Fix reading of current_uuid for active policy 2024-12-09 10:33:07 +01:00
thunderbolt thunderbolt: Honor TMU requirements in the domain when setting TMU mode 2024-11-08 16:28:24 +01:00
tty serial: 8250: omap: Move pm_runtime_get_sync 2024-12-09 10:32:49 +01:00
ufs scsi: ufs: exynos: Fix hibern8 notify callbacks 2024-12-09 10:33:06 +01:00
uio Drivers: hv: vmbus: Fix rescind handling in uio_hv_generic 2024-09-12 11:11:41 +02:00
usb usb: dwc3: gadget: Fix looping of queued SG entries 2024-12-09 10:32:53 +01:00
vdpa vdpa/mlx5: Fix suboptimal range on iotlb iteration 2024-12-09 10:32:30 +01:00
vfio vfio/pci: Properly hide first-in-list PCIe extended capability 2024-12-09 10:32:31 +01:00
vhost vhost/scsi: null-ptr-dereference in vhost_scsi_get_req() 2024-10-10 11:58:08 +02:00
video fbdev: sh7760fb: Fix a possible memory leak in sh7760fb_alloc_mem() 2024-12-09 10:32:21 +01:00
virt drivers/virt/acrn: fix PFNMAP PTE checks in acrn_vm_ram_map() 2024-06-12 11:12:09 +02:00
virtio virtio_ring: fix KMSAN error for premapped mode 2024-09-12 11:11:36 +02:00
vlynq bus: Make remove callback return void 2021-07-21 11:53:42 +02:00
w1 nvmem: add explicit config option to read old syntax fixed OF cells 2024-05-17 12:01:55 +02:00
watchdog watchdog: imx_sc_wdt: Don't disable WDT in suspend 2024-10-04 16:29:33 +02:00
xen xen: Fix the issue of resource not being properly released in xenbus_dev_probe() 2024-12-09 10:32:39 +01:00
zorro zorro: Include zorro.h in names.c 2023-08-21 13:27:44 +02:00
Kconfig Merge patch series "Add non-coherent DMA support for AX45MP" 2023-09-08 11:24:34 -07:00
Makefile pmdomain: Rename the genpd subsystem to pmdomain 2023-09-13 11:09:21 +02:00