From: Junjie Cao <junjie.cao@intel.com>
To: Chen Pei <cp0613@linux.alibaba.com>
Cc: palmer@dabbelt.com, alistair.francis@wdc.com, mst@redhat.com,
imammedo@redhat.com, sunilvl@ventanamicro.com,
sunilvl@oss.qualcomm.com, jic23@kernel.org, pbonzini@redhat.com,
liwei1518@gmail.com, daniel.barboza@oss.qualcomm.com,
zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com,
anisinha@redhat.com, dave.jiang@intel.com,
alison.schofield@intel.com, guoren@kernel.org,
qemu-riscv@nongnu.org, qemu-devel@nongnu.org,
linux-cxl@vger.kernel.org
Subject: Re: [PATCH 3/4] hw/riscv/virt: Provide a 32-bit MMIO window for CXL host bridges
Date: Wed, 26 Aug 2026 21:37:53 +0800 [thread overview]
Message-ID: <20260826133754.355453-1-junjie.cao@intel.com> (raw)
In-Reply-To: <20260821081954.1171-4-cp0613@linux.alibaba.com>
Hi Chen Pei,
On Fri, 21 Aug 2026 16:19:53 +0800, Chen Pei wrote:
> - The CXL host bridge _CRS is produced by the generic build_crs()
> path. EDK2's PciBusDxe only recurses into PCI-to-PCI bridges, while
> the pxb-cxl expander bridge presents as a class 0x0600 host bridge
> with a type-0 header, so firmware never enumerates behind it and
> leaves the CXL root port's window and bus-number registers unset;
> build_crs() would therefore return an empty _CRS. Simulate the
I see the same empty _CRS you traced for Igor on v2, but the cause
sits one level up: riscv virt never tells the firmware that the
expander bus is there.
etc/extra-pci-roots is how the other machines advertise expander root
buses. hw/arm/virt.c, hw/i386/pc.c and hw/hppa/machine.c all call
pci_bus_add_fw_cfg_extra_pci_roots(); arm got it in 09fad16744 as
part of the pxb enablement there. hw/riscv/virt.c has no such call,
and since PXB is default y only for Q35 and ARM_VIRT, this series is
what first brings pxb to riscv at all -- so nothing has needed that
fw_cfg entry until now.
Same binary, in-tree edk2-riscv, only difference on the command line
being -fw_cfg name=etc/extra-pci-roots,file=<le64 1>:
PciHostBridgeUtilityGetRootBridgesBusScan: 1 extra root buses ...
PciHostBridgeUtilityInitRootBridge: populated root bus 12, ...
PciBus: Resource Map for Bridge [0C|00|00]
Type = Mem32; Base = 0x40400000; Length = 0x200000; ...
Base = 0x40400000; Length = 0x10000; ... Owner = PCI [0D|00|00:10]
so PciBusDxe does go behind the pxb-cxl once it knows the root bus
exists, and it assigns the root port window and the Type3 BARs itself.
With this patch dropped and pci_bus_add_fw_cfg_extra_pci_roots()
called from virt_machine_done() instead, next to
cxl_fmws_link_targets(), the regenerated DSDT has PC0C as
DWordMemory (ResourceProducer, ...)
0x40400000, // Range Minimum
0x405FFFFF, // Range Maximum
QWordMemory (ResourceProducer, ...)
0x0000000400100000, // Range Minimum
0x000000040010FFFF, // Range Maximum
WordBusNumber (...)
0x000C, // Range Minimum
0x000D, // Range Maximum
with PCI0 keeping the rest of the 32-bit aperture
(0x40000000-0x403FFFFF and 0x40600000-0x7FFFFFFF). Firmware
partitions the aperture itself, sizes the window to what is actually
behind the bridge, and the 64-bit window comes along too. With a
second pxb-cxl added (bus_nr 12 and 200), the two bridges get
0x40400000-0x405FFFFF and 0x40600000-0x407FFFFF, so the
single-bridge limitation in the TODO would not arise either.
I have only looked at firmware enumeration and the generated tables
here, not at a booting CXL guest, so your RVA22 run may well turn up
something this misses. But if it holds, it drops the 256 MiB carve-out,
virt_cxl_init_bridge_windows() and the reset handler, and it is the
"fix UEFI to perform required initialization" option Igor raised on
v2, with the UEFI side already in place.
Many thanks,
Junjie
next prev parent reply other threads:[~2026-08-26 13:38 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-21 8:19 [PATCH 0/4] hw/riscv/virt: Add CXL support to the RISC-V virt machine Chen Pei
2026-08-21 8:19 ` [PATCH 1/4] " Chen Pei
2026-08-21 8:19 ` [PATCH 2/4] hw/riscv/virt-acpi-build: Add _DEP to ACPI0017 for CXL host bridge dependency Chen Pei
2026-08-21 8:19 ` [PATCH 3/4] hw/riscv/virt: Provide a 32-bit MMIO window for CXL host bridges Chen Pei
2026-08-26 13:37 ` Junjie Cao [this message]
2026-08-21 8:19 ` [PATCH 4/4] tests/qtest: Add RISC-V ACPI bios tables test for CXL Chen Pei
2026-08-26 13:38 ` Junjie Cao
2026-08-21 8:43 ` [PATCH 0/4] hw/riscv/virt: Add CXL support to the RISC-V virt machine Chen Pei
2026-08-26 13:37 ` Junjie Cao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260826133754.355453-1-junjie.cao@intel.com \
--to=junjie.cao@intel.com \
--cc=alison.schofield@intel.com \
--cc=alistair.francis@wdc.com \
--cc=anisinha@redhat.com \
--cc=chao.liu@processmission.com \
--cc=cp0613@linux.alibaba.com \
--cc=daniel.barboza@oss.qualcomm.com \
--cc=dave.jiang@intel.com \
--cc=guoren@kernel.org \
--cc=imammedo@redhat.com \
--cc=jic23@kernel.org \
--cc=linux-cxl@vger.kernel.org \
--cc=liwei1518@gmail.com \
--cc=mst@redhat.com \
--cc=palmer@dabbelt.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=sunilvl@oss.qualcomm.com \
--cc=sunilvl@ventanamicro.com \
--cc=zhiwei_liu@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox