* [PATCH v11 0/2] hw/arm/virt: CXL 2.0 emulation support
@ 2022-05-20 16:37 Jonathan Cameron
2022-05-20 16:37 ` [PATCH v11 1/2] hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances pxb-cxl Jonathan Cameron
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Jonathan Cameron @ 2022-05-20 16:37 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: Michael S . Tsirkin, Ben Widawsky, linux-cxl, Alex Bennée,
linuxarm
The initial CXL support including support on x86/pc has now merged
(thanks Michael!).
This is the first of the two remaining parts of that series, unchanged
since v10. The second is CXL switch support which can be applied
separately to this series and will be sent shortly.
CXL support requires two types of memory regions and this hooks them
up in arm/virt.
1) CXL host bridge control register regions. This allows for up to
16 host bridges which should keep anyone happy. The CEDT ACPI table
is used by system software to find these regions.
2) CXL Fixed Memory Windows. CFMWs are regions of PA space that are
configured to perform interleaved accesses over multiple host bridges.
They are fixed, but the OS may select between multiple CFMWs to find
one suitable for the interleave it desires. All interleave in the
host bridges and switches is programmable and discoverable - only
these top level regions are static and described to system software
via another structure in CEDT.
A simple test cases is added to existing cxl-test qtest.
Jonathan Cameron (2):
hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances
pxb-cxl
qtest/cxl: Add aarch64 virt test for CXL
hw/arm/virt-acpi-build.c | 33 +++++++++++++++++++++++++++
hw/arm/virt.c | 40 ++++++++++++++++++++++++++++++++-
include/hw/arm/virt.h | 1 +
tests/qtest/cxl-test.c | 48 ++++++++++++++++++++++++++++++++--------
tests/qtest/meson.build | 1 +
5 files changed, 113 insertions(+), 10 deletions(-)
--
2.32.0
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v11 1/2] hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances pxb-cxl 2022-05-20 16:37 [PATCH v11 0/2] hw/arm/virt: CXL 2.0 emulation support Jonathan Cameron @ 2022-05-20 16:37 ` Jonathan Cameron 2022-05-20 16:37 ` [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL Jonathan Cameron 2022-05-26 12:10 ` [PATCH v11 0/2] hw/arm/virt: CXL 2.0 emulation support Jonathan Cameron 2 siblings, 0 replies; 8+ messages in thread From: Jonathan Cameron @ 2022-05-20 16:37 UTC (permalink / raw) To: qemu-devel, Peter Maydell Cc: Michael S . Tsirkin, Ben Widawsky, linux-cxl, Alex Bennée, linuxarm Code based on i386/pc enablement. The memory layout places space for 16 host bridge register regions after the GIC_REDIST2 in the extended memmap. The CFMWs are placed above the extended memmap. Only create the CEDT table if cxl=on set for the machine. Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Ben Widawsky <ben.widawsky@intel.com> --- hw/arm/virt-acpi-build.c | 33 +++++++++++++++++++++++++++++++++ hw/arm/virt.c | 40 +++++++++++++++++++++++++++++++++++++++- include/hw/arm/virt.h | 1 + 3 files changed, 73 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 449fab0080..86a2f40437 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -39,9 +39,11 @@ #include "hw/acpi/aml-build.h" #include "hw/acpi/utils.h" #include "hw/acpi/pci.h" +#include "hw/acpi/cxl.h" #include "hw/acpi/memory_hotplug.h" #include "hw/acpi/generic_event_device.h" #include "hw/acpi/tpm.h" +#include "hw/cxl/cxl.h" #include "hw/pci/pcie_host.h" #include "hw/pci/pci.h" #include "hw/pci/pci_bus.h" @@ -157,10 +159,29 @@ static void acpi_dsdt_add_virtio(Aml *scope, } } +/* Uses local definition of AcpiBuildState so can't easily be common code */ +static void build_acpi0017(Aml *table) +{ + Aml *dev, *scope, *method; + + scope = aml_scope("_SB"); + dev = aml_device("CXLM"); + aml_append(dev, aml_name_decl("_HID", aml_string("ACPI0017"))); + + method = aml_method("_STA", 0, AML_NOTSERIALIZED); + aml_append(method, aml_return(aml_int(0x01))); + aml_append(dev, method); + + aml_append(scope, dev); + aml_append(table, scope); +} + static void acpi_dsdt_add_pci(Aml *scope, const MemMapEntry *memmap, uint32_t irq, VirtMachineState *vms) { int ecam_id = VIRT_ECAM_ID(vms->highmem_ecam); + bool cxl_present = false; + PCIBus *bus = vms->bus; struct GPEXConfig cfg = { .mmio32 = memmap[VIRT_PCIE_MMIO], .pio = memmap[VIRT_PCIE_PIO], @@ -174,6 +195,14 @@ static void acpi_dsdt_add_pci(Aml *scope, const MemMapEntry *memmap, } acpi_dsdt_add_gpex(scope, &cfg); + QLIST_FOREACH(bus, &vms->bus->child, sibling) { + if (pci_bus_is_cxl(bus)) { + cxl_present = true; + } + } + if (cxl_present) { + build_acpi0017(scope); + } } static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap, @@ -991,6 +1020,10 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables) vms->oem_table_id); } } + if (ms->cxl_devices_state->is_enabled) { + cxl_build_cedt(ms, table_offsets, tables_blob, tables->linker, + vms->oem_id, vms->oem_table_id); + } if (ms->nvdimms_state->is_enabled) { nvdimm_build_acpi(table_offsets, tables_blob, tables->linker, diff --git a/hw/arm/virt.c b/hw/arm/virt.c index e762655fc6..d818131b57 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -78,6 +78,7 @@ #include "hw/virtio/virtio-mem-pci.h" #include "hw/virtio/virtio-iommu.h" #include "hw/char/pl011.h" +#include "hw/cxl/cxl.h" #include "qemu/guest-random.h" #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ @@ -178,6 +179,7 @@ static const MemMapEntry base_memmap[] = { static MemMapEntry extended_memmap[] = { /* Additional 64 MB redist region (can contain up to 512 redistributors) */ [VIRT_HIGH_GIC_REDIST2] = { 0x0, 64 * MiB }, + [VIRT_CXL_HOST] = { 0x0, 64 * KiB * 16 }, /* 16 UID */ [VIRT_HIGH_PCIE_ECAM] = { 0x0, 256 * MiB }, /* Second PCIe window */ [VIRT_HIGH_PCIE_MMIO] = { 0x0, 512 * GiB }, @@ -1525,6 +1527,17 @@ static void create_pcie(VirtMachineState *vms) } } +static void create_cxl_host_reg_region(VirtMachineState *vms) +{ + MemoryRegion *sysmem = get_system_memory(); + MachineState *ms = MACHINE(vms); + MemoryRegion *mr = &ms->cxl_devices_state->host_mr; + + memory_region_init(mr, OBJECT(ms), "cxl_host_reg", + vms->memmap[VIRT_CXL_HOST].size); + memory_region_add_subregion(sysmem, vms->memmap[VIRT_CXL_HOST].base, mr); +} + static void create_platform_bus(VirtMachineState *vms) { DeviceState *dev; @@ -1687,7 +1700,7 @@ static uint64_t virt_cpu_mp_affinity(VirtMachineState *vms, int idx) static void virt_set_memmap(VirtMachineState *vms, int pa_bits) { MachineState *ms = MACHINE(vms); - hwaddr base, device_memory_base, device_memory_size, memtop; + hwaddr base, device_memory_base, device_memory_size, memtop, cxl_fmw_base; int i; vms->memmap = extended_memmap; @@ -1779,6 +1792,20 @@ static void virt_set_memmap(VirtMachineState *vms, int pa_bits) memory_region_init(&ms->device_memory->mr, OBJECT(vms), "device-memory", device_memory_size); } + + if (ms->cxl_devices_state->fixed_windows) { + GList *it; + + cxl_fmw_base = ROUND_UP(base, 256 * MiB); + for (it = ms->cxl_devices_state->fixed_windows; it; it = it->next) { + CXLFixedWindow *fw = it->data; + + fw->base = cxl_fmw_base; + memory_region_init_io(&fw->mr, OBJECT(vms), &cfmws_ops, fw, + "cxl-fixed-memory-region", fw->size); + cxl_fmw_base += fw->size; + } + } } /* @@ -2215,6 +2242,15 @@ static void machvirt_init(MachineState *machine) memory_region_add_subregion(sysmem, machine->device_memory->base, &machine->device_memory->mr); } + if (machine->cxl_devices_state->fixed_windows) { + GList *it; + for (it = machine->cxl_devices_state->fixed_windows; it; + it = it->next) { + CXLFixedWindow *fw = it->data; + + memory_region_add_subregion(sysmem, fw->base, &fw->mr); + } + } virt_flash_fdt(vms, sysmem, secure_sysmem ?: sysmem); @@ -2241,6 +2277,7 @@ static void machvirt_init(MachineState *machine) create_rtc(vms); create_pcie(vms); + create_cxl_host_reg_region(vms); if (has_ged && aarch64 && firmware_loaded && virt_is_acpi_enabled(vms)) { vms->acpi_dev = create_acpi_ged(vms); @@ -2924,6 +2961,7 @@ static void virt_machine_class_init(ObjectClass *oc, void *data) hc->unplug = virt_machine_device_unplug_cb; mc->nvdimm_supported = true; mc->smp_props.clusters_supported = true; + mc->cxl_supported = true; mc->auto_enable_numa_with_memhp = true; mc->auto_enable_numa_with_memdev = true; mc->default_ram_id = "mach-virt.ram"; diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 15feabac63..67c08a62af 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -92,6 +92,7 @@ enum { /* indices of IO regions located after the RAM */ enum { VIRT_HIGH_GIC_REDIST2 = VIRT_LOWMEMMAP_LAST, + VIRT_CXL_HOST, VIRT_HIGH_PCIE_ECAM, VIRT_HIGH_PCIE_MMIO, }; -- 2.32.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL 2022-05-20 16:37 [PATCH v11 0/2] hw/arm/virt: CXL 2.0 emulation support Jonathan Cameron 2022-05-20 16:37 ` [PATCH v11 1/2] hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances pxb-cxl Jonathan Cameron @ 2022-05-20 16:37 ` Jonathan Cameron 2022-05-26 12:10 ` [PATCH v11 0/2] hw/arm/virt: CXL 2.0 emulation support Jonathan Cameron 2 siblings, 0 replies; 8+ messages in thread From: Jonathan Cameron @ 2022-05-20 16:37 UTC (permalink / raw) To: qemu-devel, Peter Maydell Cc: Michael S . Tsirkin, Ben Widawsky, linux-cxl, Alex Bennée, linuxarm Add a single complex case for aarch64 virt machine. Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> --- tests/qtest/cxl-test.c | 48 +++++++++++++++++++++++++++++++++-------- tests/qtest/meson.build | 1 + 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/tests/qtest/cxl-test.c b/tests/qtest/cxl-test.c index 079011af6a..ac7d71fd74 100644 --- a/tests/qtest/cxl-test.c +++ b/tests/qtest/cxl-test.c @@ -17,6 +17,11 @@ "-device pxb-cxl,id=cxl.1,bus=pcie.0,bus_nr=53 " \ "-cxl-fixed-memory-window targets.0=cxl.0,targets.1=cxl.1,size=4G " +#define QEMU_VIRT_2PXB_CMD "-machine virt,cxl=on " \ + "-device pxb-cxl,id=cxl.0,bus=pcie.0,bus_nr=52 " \ + "-device pxb-cxl,id=cxl.1,bus=pcie.0,bus_nr=53 " \ + "-cxl-fixed-memory-window targets.0=cxl.0,targets.1=cxl.1,size=4G " + #define QEMU_RP "-device cxl-rp,id=rp0,bus=cxl.0,chassis=0,slot=0 " /* Dual ports on first pxb */ @@ -134,18 +139,43 @@ static void cxl_2pxb_4rp_4t3d(void) qtest_end(); } +static void cxl_virt_2pxb_4rp_4t3d(void) +{ + g_autoptr(GString) cmdline = g_string_new(NULL); + char template[] = "/tmp/cxl-test-XXXXXX"; + const char *tmpfs; + + tmpfs = mkdtemp(template); + + g_string_printf(cmdline, QEMU_VIRT_2PXB_CMD QEMU_4RP QEMU_4T3D, + tmpfs, tmpfs, tmpfs, tmpfs, tmpfs, tmpfs, + tmpfs, tmpfs); + + qtest_start(cmdline->str); + qtest_end(); +} + int main(int argc, char **argv) { + const char *arch = qtest_get_arch(); + g_test_init(&argc, &argv, NULL); - qtest_add_func("/pci/cxl/basic_hostbridge", cxl_basic_hb); - qtest_add_func("/pci/cxl/basic_pxb", cxl_basic_pxb); - qtest_add_func("/pci/cxl/pxb_with_window", cxl_pxb_with_window); - qtest_add_func("/pci/cxl/pxb_x2_with_window", cxl_2pxb_with_window); - qtest_add_func("/pci/cxl/rp", cxl_root_port); - qtest_add_func("/pci/cxl/rp_x2", cxl_2root_port); - qtest_add_func("/pci/cxl/type3_device", cxl_t3d); - qtest_add_func("/pci/cxl/rp_x2_type3_x2", cxl_1pxb_2rp_2t3d); - qtest_add_func("/pci/cxl/pxb_x2_root_port_x4_type3_x4", cxl_2pxb_4rp_4t3d); + if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) { + qtest_add_func("/pci/cxl/basic_hostbridge", cxl_basic_hb); + qtest_add_func("/pci/cxl/basic_pxb", cxl_basic_pxb); + qtest_add_func("/pci/cxl/pxb_with_window", cxl_pxb_with_window); + qtest_add_func("/pci/cxl/pxb_x2_with_window", cxl_2pxb_with_window); + qtest_add_func("/pci/cxl/rp", cxl_root_port); + qtest_add_func("/pci/cxl/rp_x2", cxl_2root_port); + qtest_add_func("/pci/cxl/type3_device", cxl_t3d); + qtest_add_func("/pci/cxl/rp_x2_type3_x2", cxl_1pxb_2rp_2t3d); + qtest_add_func("/pci/cxl/pxb_x2_root_port_x4_type3_x4", + cxl_2pxb_4rp_4t3d); + } else if (strcmp(arch, "aarch64") == 0) { + qtest_add_func("/pci/cxl/virt/pxb_x2_root_port_x4_type3_x4", + cxl_virt_2pxb_4rp_4t3d); + } + return g_test_run(); } diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 31287a9173..0fa93da13a 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -215,6 +215,7 @@ qtests_aarch64 = \ (config_all_devices.has_key('CONFIG_TPM_TIS_SYSBUS') ? ['tpm-tis-device-test'] : []) + \ (config_all_devices.has_key('CONFIG_TPM_TIS_SYSBUS') ? ['tpm-tis-device-swtpm-test'] : []) + \ (config_all_devices.has_key('CONFIG_XLNX_ZYNQMP_ARM') ? ['xlnx-can-test', 'fuzz-xlnx-dp-test'] : []) + \ + qtests_cxl + \ ['arm-cpu-features', 'numa-test', 'boot-serial-test', -- 2.32.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v11 0/2] hw/arm/virt: CXL 2.0 emulation support 2022-05-20 16:37 [PATCH v11 0/2] hw/arm/virt: CXL 2.0 emulation support Jonathan Cameron 2022-05-20 16:37 ` [PATCH v11 1/2] hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances pxb-cxl Jonathan Cameron 2022-05-20 16:37 ` [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL Jonathan Cameron @ 2022-05-26 12:10 ` Jonathan Cameron 2 siblings, 0 replies; 8+ messages in thread From: Jonathan Cameron @ 2022-05-26 12:10 UTC (permalink / raw) To: qemu-devel, Peter Maydell Cc: Michael S . Tsirkin, Ben Widawsky, linux-cxl, Alex Bennée, linuxarm On Fri, 20 May 2022 17:37:30 +0100 Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote: > The initial CXL support including support on x86/pc has now merged > (thanks Michael!). > > This is the first of the two remaining parts of that series, unchanged > since v10. The second is CXL switch support which can be applied > separately to this series and will be sent shortly. > > CXL support requires two types of memory regions and this hooks them > up in arm/virt. > > 1) CXL host bridge control register regions. This allows for up to > 16 host bridges which should keep anyone happy. The CEDT ACPI table > is used by system software to find these regions. > 2) CXL Fixed Memory Windows. CFMWs are regions of PA space that are > configured to perform interleaved accesses over multiple host bridges. > They are fixed, but the OS may select between multiple CFMWs to find > one suitable for the interleave it desires. All interleave in the > host bridges and switches is programmable and discoverable - only > these top level regions are static and described to system software > via another structure in CEDT. > > A simple test cases is added to existing cxl-test qtest. > > Jonathan Cameron (2): > hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances > pxb-cxl > qtest/cxl: Add aarch64 virt test for CXL > > hw/arm/virt-acpi-build.c | 33 +++++++++++++++++++++++++++ > hw/arm/virt.c | 40 ++++++++++++++++++++++++++++++++- > include/hw/arm/virt.h | 1 + > tests/qtest/cxl-test.c | 48 ++++++++++++++++++++++++++++++++-------- > tests/qtest/meson.build | 1 + > 5 files changed, 113 insertions(+), 10 deletions(-) > Note I'll send out a v12 of this series after resolving Paolo's feedback on the main CXL series that proceeded this. Principal impacts on this series will be updated tests for the new command line and a move of CXLState into the virt machine specific state structure. Thanks, Jonathan ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v11 0/2] arm/virt: CXL support via pxb_cxl
@ 2022-06-16 14:19 Jonathan Cameron
2022-06-16 14:19 ` [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL Jonathan Cameron
0 siblings, 1 reply; 8+ messages in thread
From: Jonathan Cameron @ 2022-06-16 14:19 UTC (permalink / raw)
To: qemu-devel, alex.bennee, Peter Maydell, qemu-arm,
Michael S . Tsirkin, Ben Widawsky
Cc: Paolo Bonzini, linux-cxl, linuxarm, Marcel Apfelbaum,
Igor Mammedov, Markus Armbruster, Mark Cave-Ayland,
Adam Manzanares, Tong Zhang, Shameerali Kolothum Thodi
Previously patches 40 and 41 of
[PATCH v10 00/45] CXl 2.0 emulation Support
https://lore.kernel.org/qemu-devel/20220429144110.25167-45-Jonathan.Cameron@huawei.com/#r
Now the base CXL support including for x86/pc is upstream (patches 1-39)
there are no dependencies between the next few CXL elements in my queue
so they can be reviewed / merged in parallel. Hence I'll be sending switch
support (43-45) separately and hopefully DOE / CDAT support in a few days.
I'm assuming this particular series should go through the arm tree if
the maintainers are happy?
Changes since v10:
- CXL machine setup is now entirely from the supporting machines rather
than via code in machine.c and vl.c. Change made for x86 in:
https://lore.kernel.org/qemu-devel/20220608145440.26106-1-Jonathan.Cameron@huawei.com/
- Dropped Ben's sign off from patch 1 which resulted from him carrying
these patches of mine for a while. It isn't a useful bit of history
to carry now they are back to me.
This short series adds support for CXL host bridges and CXL fixed memory
windows on arm/virt. Two types of memory region are needed:
1. Register space for CXL host bridges (static allowance for 16)
2. CXL fixed memory windows: Ranges of host PA space which
are statically mapped to an interleave across 1 or more CXL host
bridges.
Both of these types of region are described via appropriate ACPI tables.
As the CEDT table is created with the same code as for x86 I don't think
there is much value in duplicating the existing CXL bios-tables test.
The second patch adds a single complex test. We test a lot more configurations
on x86 but it does not seem useful to duplicate them all on ARM and this single
test should act as a smoke test for any problems that occur.
Run through CI at:
https://gitlab.com/jic23/qemu/-/pipelines/564934276
Intermittent (unrelated I assume) failure in msys64 aio-test resolved
with a retry.
Thanks,
Jonathan
Jonathan Cameron (2):
hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances
pxb-cxl
qtest/cxl: Add aarch64 virt test for CXL
hw/arm/virt-acpi-build.c | 34 ++++++++++++++++++++++++++++
hw/arm/virt.c | 44 ++++++++++++++++++++++++++++++++++++
include/hw/arm/virt.h | 3 +++
tests/qtest/cxl-test.c | 48 ++++++++++++++++++++++++++++++++--------
tests/qtest/meson.build | 1 +
5 files changed, 121 insertions(+), 9 deletions(-)
--
2.32.0
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL 2022-06-16 14:19 [PATCH v11 0/2] arm/virt: CXL support via pxb_cxl Jonathan Cameron @ 2022-06-16 14:19 ` Jonathan Cameron 2022-06-24 10:41 ` Peter Maydell 2022-06-24 16:12 ` Peter Maydell 0 siblings, 2 replies; 8+ messages in thread From: Jonathan Cameron @ 2022-06-16 14:19 UTC (permalink / raw) To: qemu-devel, alex.bennee, Peter Maydell, qemu-arm, Michael S . Tsirkin, Ben Widawsky Cc: Paolo Bonzini, linux-cxl, linuxarm, Marcel Apfelbaum, Igor Mammedov, Markus Armbruster, Mark Cave-Ayland, Adam Manzanares, Tong Zhang, Shameerali Kolothum Thodi Add a single complex case for aarch64 virt machine. Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> --- tests/qtest/cxl-test.c | 48 +++++++++++++++++++++++++++++++++-------- tests/qtest/meson.build | 1 + 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/tests/qtest/cxl-test.c b/tests/qtest/cxl-test.c index 2133e973f4..1015d0e7c2 100644 --- a/tests/qtest/cxl-test.c +++ b/tests/qtest/cxl-test.c @@ -17,6 +17,11 @@ "-device pxb-cxl,id=cxl.1,bus=pcie.0,bus_nr=53 " \ "-M cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=4G " +#define QEMU_VIRT_2PXB_CMD "-machine virt,cxl=on " \ + "-device pxb-cxl,id=cxl.0,bus=pcie.0,bus_nr=52 " \ + "-device pxb-cxl,id=cxl.1,bus=pcie.0,bus_nr=53 " \ + "-M cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=4G " + #define QEMU_RP "-device cxl-rp,id=rp0,bus=cxl.0,chassis=0,slot=0 " /* Dual ports on first pxb */ @@ -134,18 +139,43 @@ static void cxl_2pxb_4rp_4t3d(void) qtest_end(); } +static void cxl_virt_2pxb_4rp_4t3d(void) +{ + g_autoptr(GString) cmdline = g_string_new(NULL); + char template[] = "/tmp/cxl-test-XXXXXX"; + const char *tmpfs; + + tmpfs = mkdtemp(template); + + g_string_printf(cmdline, QEMU_VIRT_2PXB_CMD QEMU_4RP QEMU_4T3D, + tmpfs, tmpfs, tmpfs, tmpfs, tmpfs, tmpfs, + tmpfs, tmpfs); + + qtest_start(cmdline->str); + qtest_end(); +} + int main(int argc, char **argv) { + const char *arch = qtest_get_arch(); + g_test_init(&argc, &argv, NULL); - qtest_add_func("/pci/cxl/basic_hostbridge", cxl_basic_hb); - qtest_add_func("/pci/cxl/basic_pxb", cxl_basic_pxb); - qtest_add_func("/pci/cxl/pxb_with_window", cxl_pxb_with_window); - qtest_add_func("/pci/cxl/pxb_x2_with_window", cxl_2pxb_with_window); - qtest_add_func("/pci/cxl/rp", cxl_root_port); - qtest_add_func("/pci/cxl/rp_x2", cxl_2root_port); - qtest_add_func("/pci/cxl/type3_device", cxl_t3d); - qtest_add_func("/pci/cxl/rp_x2_type3_x2", cxl_1pxb_2rp_2t3d); - qtest_add_func("/pci/cxl/pxb_x2_root_port_x4_type3_x4", cxl_2pxb_4rp_4t3d); + if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) { + qtest_add_func("/pci/cxl/basic_hostbridge", cxl_basic_hb); + qtest_add_func("/pci/cxl/basic_pxb", cxl_basic_pxb); + qtest_add_func("/pci/cxl/pxb_with_window", cxl_pxb_with_window); + qtest_add_func("/pci/cxl/pxb_x2_with_window", cxl_2pxb_with_window); + qtest_add_func("/pci/cxl/rp", cxl_root_port); + qtest_add_func("/pci/cxl/rp_x2", cxl_2root_port); + qtest_add_func("/pci/cxl/type3_device", cxl_t3d); + qtest_add_func("/pci/cxl/rp_x2_type3_x2", cxl_1pxb_2rp_2t3d); + qtest_add_func("/pci/cxl/pxb_x2_root_port_x4_type3_x4", + cxl_2pxb_4rp_4t3d); + } else if (strcmp(arch, "aarch64") == 0) { + qtest_add_func("/pci/cxl/virt/pxb_x2_root_port_x4_type3_x4", + cxl_virt_2pxb_4rp_4t3d); + } + return g_test_run(); } diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 31287a9173..0fa93da13a 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -215,6 +215,7 @@ qtests_aarch64 = \ (config_all_devices.has_key('CONFIG_TPM_TIS_SYSBUS') ? ['tpm-tis-device-test'] : []) + \ (config_all_devices.has_key('CONFIG_TPM_TIS_SYSBUS') ? ['tpm-tis-device-swtpm-test'] : []) + \ (config_all_devices.has_key('CONFIG_XLNX_ZYNQMP_ARM') ? ['xlnx-can-test', 'fuzz-xlnx-dp-test'] : []) + \ + qtests_cxl + \ ['arm-cpu-features', 'numa-test', 'boot-serial-test', -- 2.32.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL 2022-06-16 14:19 ` [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL Jonathan Cameron @ 2022-06-24 10:41 ` Peter Maydell 2022-06-24 16:12 ` Peter Maydell 1 sibling, 0 replies; 8+ messages in thread From: Peter Maydell @ 2022-06-24 10:41 UTC (permalink / raw) To: Jonathan Cameron Cc: qemu-devel, alex.bennee, qemu-arm, Michael S . Tsirkin, Ben Widawsky, Paolo Bonzini, linux-cxl, linuxarm, Marcel Apfelbaum, Igor Mammedov, Markus Armbruster, Mark Cave-Ayland, Adam Manzanares, Tong Zhang, Shameerali Kolothum Thodi On Thu, 16 Jun 2022 at 15:20, Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote: > > Add a single complex case for aarch64 virt machine. > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > tests/qtest/cxl-test.c | 48 +++++++++++++++++++++++++++++++++-------- > tests/qtest/meson.build | 1 + > 2 files changed, 40 insertions(+), 9 deletions(-) > Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL 2022-06-16 14:19 ` [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL Jonathan Cameron 2022-06-24 10:41 ` Peter Maydell @ 2022-06-24 16:12 ` Peter Maydell 2022-06-24 17:59 ` Jonathan Cameron 1 sibling, 1 reply; 8+ messages in thread From: Peter Maydell @ 2022-06-24 16:12 UTC (permalink / raw) To: Jonathan Cameron Cc: qemu-devel, alex.bennee, qemu-arm, Michael S . Tsirkin, Ben Widawsky, Paolo Bonzini, linux-cxl, linuxarm, Marcel Apfelbaum, Igor Mammedov, Markus Armbruster, Mark Cave-Ayland, Adam Manzanares, Tong Zhang, Shameerali Kolothum Thodi On Thu, 16 Jun 2022 at 15:20, Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote: > > Add a single complex case for aarch64 virt machine. > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > tests/qtest/cxl-test.c | 48 +++++++++++++++++++++++++++++++++-------- > tests/qtest/meson.build | 1 + > 2 files changed, 40 insertions(+), 9 deletions(-) > > diff --git a/tests/qtest/cxl-test.c b/tests/qtest/cxl-test.c > index 2133e973f4..1015d0e7c2 100644 > --- a/tests/qtest/cxl-test.c > +++ b/tests/qtest/cxl-test.c > @@ -17,6 +17,11 @@ > "-device pxb-cxl,id=cxl.1,bus=pcie.0,bus_nr=53 " \ > "-M cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=4G " > > +#define QEMU_VIRT_2PXB_CMD "-machine virt,cxl=on " \ > + "-device pxb-cxl,id=cxl.0,bus=pcie.0,bus_nr=52 " \ > + "-device pxb-cxl,id=cxl.1,bus=pcie.0,bus_nr=53 " \ > + "-M cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=4G " > + If CXL requires booting via UEFI, what does this test case do? It doesn't seem to be passing in a BIOS image. thanks -- PMM ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL 2022-06-24 16:12 ` Peter Maydell @ 2022-06-24 17:59 ` Jonathan Cameron 0 siblings, 0 replies; 8+ messages in thread From: Jonathan Cameron @ 2022-06-24 17:59 UTC (permalink / raw) To: Peter Maydell Cc: qemu-devel, alex.bennee, qemu-arm, Michael S . Tsirkin, Ben Widawsky, Paolo Bonzini, linux-cxl, linuxarm, Marcel Apfelbaum, Igor Mammedov, Markus Armbruster, Mark Cave-Ayland, Adam Manzanares, Tong Zhang, Shameerali Kolothum Thodi On Fri, 24 Jun 2022 17:12:25 +0100 Peter Maydell <peter.maydell@linaro.org> wrote: > On Thu, 16 Jun 2022 at 15:20, Jonathan Cameron > <Jonathan.Cameron@huawei.com> wrote: > > > > Add a single complex case for aarch64 virt machine. > > > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > > --- > > tests/qtest/cxl-test.c | 48 +++++++++++++++++++++++++++++++++-------- > > tests/qtest/meson.build | 1 + > > 2 files changed, 40 insertions(+), 9 deletions(-) > > > > diff --git a/tests/qtest/cxl-test.c b/tests/qtest/cxl-test.c > > index 2133e973f4..1015d0e7c2 100644 > > --- a/tests/qtest/cxl-test.c > > +++ b/tests/qtest/cxl-test.c > > @@ -17,6 +17,11 @@ > > "-device pxb-cxl,id=cxl.1,bus=pcie.0,bus_nr=53 " \ > > "-M cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=4G " > > > > +#define QEMU_VIRT_2PXB_CMD "-machine virt,cxl=on " \ > > + "-device pxb-cxl,id=cxl.0,bus=pcie.0,bus_nr=52 " \ > > + "-device pxb-cxl,id=cxl.1,bus=pcie.0,bus_nr=53 " \ > > + "-M cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=4G " > > + > > If CXL requires booting via UEFI, what does this test case do? > It doesn't seem to be passing in a BIOS image. Not a lot beyond checking device creation is valid etc and the machine boots. There is a bios tables test that checks we pass the right tables to the BIOS image. I didn't duplicate that for ARM on the basis it's more or less identical, but perhaps that is worth adding. To do any useful functional testing will require a mass of complex OS handling after booting. That testing is definitely something I'd like to add, but the userspace tooling isn't all in place yet. Final kernel series that's needed to get to the point where you can use the non volatile memory had a new version posted yesterday. Jonathan > > thanks > -- PMM ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-06-24 17:59 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-05-20 16:37 [PATCH v11 0/2] hw/arm/virt: CXL 2.0 emulation support Jonathan Cameron 2022-05-20 16:37 ` [PATCH v11 1/2] hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances pxb-cxl Jonathan Cameron 2022-05-20 16:37 ` [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL Jonathan Cameron 2022-05-26 12:10 ` [PATCH v11 0/2] hw/arm/virt: CXL 2.0 emulation support Jonathan Cameron -- strict thread matches above, loose matches on Subject: below -- 2022-06-16 14:19 [PATCH v11 0/2] arm/virt: CXL support via pxb_cxl Jonathan Cameron 2022-06-16 14:19 ` [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL Jonathan Cameron 2022-06-24 10:41 ` Peter Maydell 2022-06-24 16:12 ` Peter Maydell 2022-06-24 17:59 ` Jonathan Cameron
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox