On Wed, 20 Aug 2025 at 22:19, Bernhard Beschow <shentey@gmail.com> wrote:
>
> Fix the size of the I/O space to be 64KiB, as defined by the PCI
> specification. This fixes illegal memory access by guests in the
> imx8mp-evk machine such that the FSL_IMX8MP_PCIE1_MEM unimplemented
> region can be omitted there.
>
> Signed-off-by: Bernhard Beschow <shentey@gmail.com>
> ---
> hw/pci-host/designware.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/pci-host/designware.c b/hw/pci-host/designware.c
> index 7342207eb3..1e29b7e6be 100644
> --- a/hw/pci-host/designware.c
> +++ b/hw/pci-host/designware.c
> @@ -684,7 +684,7 @@ static void designware_pcie_host_realize(DeviceState *dev, Error **errp)
> "pcie.reg", 4 * 1024);
> sysbus_init_mmio(sbd, &s->mmio);
>
> - memory_region_init(&s->pci.io, OBJECT(s), "pcie-pio", 16);
> + memory_region_init(&s->pci.io, OBJECT(s), "pcie-pio", UINT16_MAX);
This isn't 64K, it's 1 byte less than 64K. You want
64 * KiB or something similar.
(The memory APIs have a special case for "size 2^64" where
you can pass it UINT64_MAX, but any sizes below that you
pass in the actual size: the special case is just so we
can use a uint64_t type for the argument without losing
the ability to specify a size that covers the full 64-bit
address space.)
> memory_region_init(&s->pci.memory, OBJECT(s),
> "pcie-bus-memory",
> UINT64_MAX);
(We seem to have a similar bug in xilinx-pcie.c.)
-- PMM