- pci-host: designware: Limit value range of iATU viewport register - hmat acpi: Fix out of bounds access due to missing use of indirection - migration: Skip only empty block devices - aspeed/hace: Initialize g_autofree pointer - hw/net/vmxnet3: Fix guest-triggerable assert() - qxl: don't assert() if device isn't yet initialized - Avoid unaligned fetch in ladr_match() - linux-user: Fix waitid return of siginfo_t and rusage - hw/net/lan9118: Replace magic '2048' value by MIL_TXFIFO_SIZE definition - stdvga: fix screen blanking - virtio-net: drop too short packets early - ebpf: replace deprecated bpf_program__set_socket_filter - vhsot-user: only read reply of SET_LOG_BASE from vq 0 - cpu: add Tengyun S5000C cpu support - hw/virtio: Fix obtain the buffer id from the last descriptor - hw/core: ensure kernel_end never gets used undefined Signed-off-by: Jiabo Feng <fengjiabo1@huawei.com> (cherry picked from commit 1f9e476e96edb07e34e0133a312f478ddab4b6ff)
55 lines
2.1 KiB
Diff
55 lines
2.1 KiB
Diff
From 13ece9fb57c74aafdb785b80d7a09b2d90c54cfd Mon Sep 17 00:00:00 2001
|
|
From: Guenter Roeck <linux@roeck-us.net>
|
|
Date: Sun, 28 Jan 2024 22:00:55 -0800
|
|
Subject: [PATCH] pci-host: designware: Limit value range of iATU viewport
|
|
register
|
|
|
|
The latest version of qemu (v8.2.0-869-g7a1dc45af5) crashes when booting
|
|
the mcimx7d-sabre emulation with Linux v5.11 and later.
|
|
|
|
qemu-system-arm: ../system/memory.c:2750: memory_region_set_alias_offset: Assertion `mr->alias' failed.
|
|
|
|
Problem is that the Designware PCIe emulation accepts the full value range
|
|
for the iATU Viewport Register. However, both hardware and emulation only
|
|
support four inbound and four outbound viewports.
|
|
|
|
The Linux kernel determines the number of supported viewports by writing
|
|
0xff into the viewport register and reading the value back. The expected
|
|
value when reading the register is the highest supported viewport index.
|
|
Match that code by masking the supported viewport value range when the
|
|
register is written. With this change, the Linux kernel reports
|
|
|
|
imx6q-pcie 33800000.pcie: iATU: unroll F, 4 ob, 4 ib, align 0K, limit 4G
|
|
|
|
as expected and supported.
|
|
|
|
Fixes: d64e5eabc4c7 ("pci: Add support for Designware IP block")
|
|
Cc: Andrey Smirnov <andrew.smirnov@gmail.com>
|
|
Cc: Nikita Ostrenkov <n.ostrenkov@gmail.com>
|
|
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
|
Message-id: 20240129060055.2616989-1-linux@roeck-us.net
|
|
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
|
|
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
|
|
(cherry picked from commit 8a73152020337a7fbf34daf0a006d4d89ec1494e)
|
|
Signed-off-by: zhujun2 <zhujun2_yewu@cmss.chinamobile.com>
|
|
---
|
|
hw/pci-host/designware.c | 2 ++
|
|
1 file changed, 2 insertions(+)
|
|
|
|
diff --git a/hw/pci-host/designware.c b/hw/pci-host/designware.c
|
|
index bde3a343a2..c235b9daa3 100644
|
|
--- a/hw/pci-host/designware.c
|
|
+++ b/hw/pci-host/designware.c
|
|
@@ -340,6 +340,8 @@ static void designware_pcie_root_config_write(PCIDevice *d, uint32_t address,
|
|
break;
|
|
|
|
case DESIGNWARE_PCIE_ATU_VIEWPORT:
|
|
+ val &= DESIGNWARE_PCIE_ATU_REGION_INBOUND |
|
|
+ (DESIGNWARE_PCIE_NUM_VIEWPORTS - 1);
|
|
root->atu_viewport = val;
|
|
break;
|
|
|
|
--
|
|
2.41.0.windows.1
|
|
|