From: "Michael S. Tsirkin" <mst@redhat.com>
To: Chen Pei <cp0613@linux.alibaba.com>
Cc: palmer@dabbelt.com, alistair.francis@wdc.com,
imammedo@redhat.com, sunilvl@ventanamicro.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,
junjie.cao@intel.com, guoren@kernel.org, qemu-riscv@nongnu.org,
qemu-devel@nongnu.org, linux-cxl@vger.kernel.org
Subject: Re: [PATCH v6 0/6] hw/riscv/virt: Add CXL support to the RISC-V virt machine
Date: Wed, 9 Sep 2026 16:49:25 -0400 [thread overview]
Message-ID: <20260909164855-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20260907093735.2753-1-cp0613@linux.alibaba.com>
On Mon, Sep 07, 2026 at 05:37:27PM +0800, Chen Pei wrote:
> This series adds CXL support to the RISC-V virt machine, following the
> approach used by the ARM virt machine: CXL host bridges (pxb-cxl) are
> described as ACPI0016 devices, an ACPI0017 (CXLM) device is added to the
> DSDT with a _DEP on the CXL host bridges, and a CEDT table is built. A
> bios-tables test is added to pin down the generated ACPI tables.
ACPI things:
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
pls merge in riscv tree.
> Changes since v5
> ----------------
> - Rebased onto current master, over the gpex_pcie_init() move to
> device-common.c: s->pci_bus is now assigned at the
> riscv_gpex_pcie_init() call site in virt_machine_init().
> - tests/qtest: switched to the renamed in-tree firmware blobs
> pc-bios/edk2-riscv64-{code,vars}.fd (Junjie). The goldens are
> unchanged and still match with the updated edk2-stable202608 blob;
> all riscv64 ACPI cases pass.
> - hw/riscv/virt-acpi-build: the _DEP commit message now cites the
> companion kernel commit bf5418a5fe63 ("ACPI: scan: Honor _DEP for
> ACPI0016 PCI/CXL host bridge") alongside 3a59c3b772e5, both in
> v7.2 (Junjie).
> - Collected review tags: Junjie Cao's Reviewed-by/Tested-by on
> patches 1, 2 and 6. Michael S. Tsirkin acked the ACPI parts on
> the v5 cover letter thread.
>
> Changes since v4
> ----------------
> - tests/qtest: DSDT.cxl regenerated against the in-tree
> edk2-riscv-code.fd blob that the test boots (Junjie): the v4 golden
> carried the window allocation of my local edk2-stable202602 build.
> The 64-bit window is now 0x400100000..0x40010FFFF with the matching
> PCI0 range shift; the AML fragment in the commit message is updated
> accordingly. CEDT.cxl is unchanged.
> - hw/riscv/virt: pci_bus_add_fw_cfg_extra_pci_roots() moved out of
> the cxl block (Junjie), so plain pxb-pcie expander bridges are also
> advertised to firmware with cxl=off, in line with arm/virt, pc and
> hppa.
> - Collected review tags.
>
> Changes since v3
> ----------------
> - The CXL host bridge resource handling is reworked, following Junjie
> Cao's suggestion (and Igor Mammedov's earlier "fix UEFI" direction):
> instead of reserving a fixed 256 MiB carve-out and simulating the
> firmware PCI initialization in QEMU, the machine now advertises the
> pxb-cxl expander root buses to firmware via the etc/extra-pci-roots
> fw_cfg file (pci_bus_add_fw_cfg_extra_pci_roots(), as arm/virt and
> x86 do). EDK2's PciBusDxe then enumerates behind the CXL host
> bridge and assigns the root-port window and bus numbers, and
> build_crs() emits a correct _CRS for the ACPI0016 host bridge.
> This keeps the machine code minimal (a single call, no carve-out),
> scales to multiple pxb-cxl host bridges, and lets firmware size the
> window to what is actually behind the bridge.
> - The bios-tables test is split into the staged flow documented in
> bios-tables-test.c, and ordered the same way the riscv64 goldens were
> originally added upstream (Sunil V L's commit cc3ba2422554 et al.):
> the feature code comes first, then three consecutive commits -- empty
> golden files + allowed-diff.h, the test code, and the populated golden
> master binaries with an emptied allowed-diff.h.
>
> Changes since v2
> ----------------
> - hw/riscv/virt: The MMIO-window patch no longer touches the common
> gpex code (Igor). The gpex_cfg.cxl_mmio32 field and the is_cxl
> static _CRS branch are dropped; the ACPI0016 _CRS now comes from the
> generic build_crs() path. Since EDK2 does not enumerate the pxb-cxl
> expander bridge, riscv simulates the firmware PCI initialization
> (reserved window + depth-first bridge bus numbers) and re-applies it
> via a reset handler.
> - hw/riscv/virt: Drops the machine-global window/bus-range synthesis
> that did not scale past one pxb-cxl (Junjie). The series targets a
> single CXL host bridge for now, documented in the commit message and
> a TODO.
> - hw/riscv/virt: CXL host register region and FMW setup folded into a
> single cxl_host_state_init() helper; redundant braces removed in
> create_fdt_pcie() (Daniel).
> - hw/riscv/virt-acpi-build: the _DEP commit message documents the
> kernel-compatibility behaviour (Alistair).
> - Carried review tags: Sunil V L's Reviewed-by on the _DEP patch and
> Alistair Francis's Acked-by on the test.
>
> Changes since v1
> ----------------
> - hw/riscv/virt: PCIBus *bus renamed to PCIBus *pci_bus (Jonathan).
> - hw/riscv/virt: Dropped outer if (s->pci_bus) guard around
> cxl_hook_up_pxb_registers(); the function already handles a NULL
> bus internally (Jonathan).
> - hw/riscv/virt-acpi-build: All s->bus references updated to
> s->pci_bus; iasl -d decompiled DSDT fragment added to commit
> message.
> - hw/riscv/virt,gpex: Commit message expanded with PCI-to-PCI Bridge
> Spec §3.2.5.8/9/10 citations (Jonathan).
> - Original patch 4 ("Map committed HDM decoder ranges as RAM for
> direct DMA") dropped; superseded by Alireza Sanaee's v8 series [1],
> which is now merged upstream and thus no longer a prerequisite.
> - New patch 4: RISC-V ACPI bios-tables test for CXL, with golden AML
> files generated and included.
>
> [1] https://lore.kernel.org/qemu-devel/20260318171918.146-1-alireza.sanaee@huawei.com/
>
> Test
> ----
> Built riscv64-softmmu and ran the new bios-tables test together with the
> existing riscv64 ACPI tests; all pass.
>
> Also booted an RVA22 guest with EDK2 firmware, using pxb-cxl + cxl-rp +
> cxl-type3 + a CFMW: EDK2's PciBusDxe enumerates behind the CXL host
> bridge (advertised via etc/extra-pci-roots), the root port and Type3
> device show up (0000:0c:00.0 / 0000:0d:00.0), and 'cxl list' reports
> the memdev (4 GiB) and the CFMWS root decoder.
>
> QEMU invocation (CXL-relevant options shown):
>
> qemu-system-riscv64 \
> -M virt,aia=aplic-imsic,acpi=on,cxl=on \
> -cpu rva22s64 -smp 2 -m 4G \
> -object memory-backend-ram,id=vmem0,share=on,size=4G \
> -device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
> -device cxl-rp,port=0,bus=cxl.1,id=rp0,chassis=0,slot=2 \
> -device cxl-type3,bus=rp0,volatile-memdev=vmem0 \
> -M cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=4G \
> ...
>
> Verification (total system memory grows by 4 GiB after onlining):
>
> # cxl list
> # cxl enable-memdev mem0
> # cxl create-region -m -t ram -d decoder0.0 -w 1 mem0 -s 4G
> # daxctl online-memory dax0.0
> # free -h
>
> Chen Pei (6):
> hw/riscv/virt: Add CXL support to the RISC-V virt machine
> hw/riscv/virt-acpi-build: Add _DEP to ACPI0017 for CXL host bridge
> dependency
> hw/riscv/virt: Advertise the CXL host bridge to firmware via
> extra-pci-roots
> tests/qtest: Prepare golden files for the RISC-V CXL ACPI test
> tests/qtest: Add RISC-V ACPI bios tables test for CXL
> tests/qtest: Update RISC-V CXL ACPI golden master binaries
>
> hw/riscv/Kconfig | 2 +
> hw/riscv/virt-acpi-build.c | 52 +++++++++++++++++++++++++
> hw/riscv/virt.c | 56 +++++++++++++++++++++++++++++++---
> include/hw/riscv/virt.h | 3 ++
> tests/data/acpi/riscv64/virt/CEDT.cxl | Bin 0 -> 108 bytes
> tests/data/acpi/riscv64/virt/DSDT.cxl | Bin 0 -> 6331 bytes
> tests/qtest/bios-tables-test.c | 54 ++++++++++++++++++++++++++
> 7 files changed, 163 insertions(+), 4 deletions(-)
> create mode 100644 tests/data/acpi/riscv64/virt/CEDT.cxl
> create mode 100644 tests/data/acpi/riscv64/virt/DSDT.cxl
>
> --
> 2.50.1
>
prev parent reply other threads:[~2026-09-09 20:49 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-07 9:37 [PATCH v6 0/6] hw/riscv/virt: Add CXL support to the RISC-V virt machine Chen Pei
2026-09-07 9:37 ` [PATCH v6 1/6] " Chen Pei
2026-09-08 2:25 ` Chao Liu
2026-09-07 9:37 ` [PATCH v6 2/6] hw/riscv/virt-acpi-build: Add _DEP to ACPI0017 for CXL host bridge dependency Chen Pei
2026-09-07 9:37 ` [PATCH v6 3/6] hw/riscv/virt: Advertise the CXL host bridge to firmware via extra-pci-roots Chen Pei
2026-09-07 9:37 ` [PATCH v6 4/6] tests/qtest: Prepare golden files for the RISC-V CXL ACPI test Chen Pei
2026-09-07 9:37 ` [PATCH v6 5/6] tests/qtest: Add RISC-V ACPI bios tables test for CXL Chen Pei
2026-09-07 9:37 ` [PATCH v6 6/6] tests/qtest: Update RISC-V CXL ACPI golden master binaries Chen Pei
2026-09-08 2:49 ` [PATCH v6 0/6] hw/riscv/virt: Add CXL support to the RISC-V virt machine Junjie Cao
2026-09-09 20:49 ` Michael S. Tsirkin [this message]
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=20260909164855-mutt-send-email-mst@kernel.org \
--to=mst@redhat.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=junjie.cao@intel.com \
--cc=linux-cxl@vger.kernel.org \
--cc=liwei1518@gmail.com \
--cc=palmer@dabbelt.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.