From: Peter Maydell <peter.maydell@linaro.org>
To: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: qemu-devel@nongnu.org, alex.bennee@linaro.org,
qemu-arm@nongnu.org, "Michael S . Tsirkin" <mst@redhat.com>,
Ben Widawsky <bwidawsk@kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>,
linux-cxl@vger.kernel.org, linuxarm@huawei.com,
Marcel Apfelbaum <marcel@redhat.com>,
Igor Mammedov <imammedo@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>,
Adam Manzanares <a.manzanares@samsung.com>,
Tong Zhang <ztong0001@gmail.com>,
Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
Subject: Re: [PATCH v11 1/2] hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances pxb-cxl
Date: Fri, 24 Jun 2022 11:48:47 +0100 [thread overview]
Message-ID: <CAFEAcA8U9oNDStfLpxOwodGm9MCTdLrt-WV+x_-rTGw9UpBGvA@mail.gmail.com> (raw)
In-Reply-To: <20220616141950.23374-2-Jonathan.Cameron@huawei.com>
On Thu, 16 Jun 2022 at 15:20, Jonathan Cameron
<Jonathan.Cameron@huawei.com> wrote:
>
> 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>
This seems to be missing code to advertise the new devices in the
device tree.
Somebody else had better review the ACPI changes :-)
> #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \
> @@ -178,6 +181,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 */
Does this reshuffle the memory layout so that all the stuff after it
moves up ? If so, that's an incompatible change and would need
versioning somehow.
More generally, should this new addition to the machine be
versioned? What did we do for the pc machine types?
> [VIRT_HIGH_PCIE_ECAM] = { 0x0, 256 * MiB },
> /* Second PCIe window */
> [VIRT_HIGH_PCIE_MMIO] = { 0x0, 512 * GiB },
> @@ -1525,6 +1529,16 @@ static void create_pcie(VirtMachineState *vms)
> }
> }
>
> +static void create_cxl_host_reg_region(VirtMachineState *vms)
> +{
> + MemoryRegion *sysmem = get_system_memory();
> + MemoryRegion *mr = &vms->cxl_devices_state.host_mr;
> +
> + memory_region_init(mr, OBJECT(vms), "cxl_host_reg",
> + vms->memmap[VIRT_CXL_HOST].size);
> + memory_region_add_subregion(sysmem, vms->memmap[VIRT_CXL_HOST].base, mr);
> +}
> @@ -1779,6 +1799,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 (vms->cxl_devices_state.fixed_windows) {
> + GList *it;
> +
> + base = ROUND_UP(base, 256 * MiB);
> + for (it = vms->cxl_devices_state.fixed_windows; it; it = it->next) {
> + CXLFixedWindow *fw = it->data;
> +
> + fw->base = base;
> + memory_region_init_io(&fw->mr, OBJECT(vms), &cfmws_ops, fw,
> + "cxl-fixed-memory-region", fw->size);
Why is board model code having to init memory regions for this
device? Shouldn't the device be creating the memory regions itself
and then exposing them for the board code to map them ?
> + base += fw->size;
> + }
> + }
> }
>
> /*
> @@ -2215,6 +2249,14 @@ static void machvirt_init(MachineState *machine)
> memory_region_add_subregion(sysmem, machine->device_memory->base,
> &machine->device_memory->mr);
> }
> + if (vms->cxl_devices_state.fixed_windows) {
> + GList *it;
> + for (it = vms->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 +2283,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);
> @@ -3070,6 +3113,7 @@ static void virt_instance_init(Object *obj)
>
> vms->oem_id = g_strndup(ACPI_BUILD_APPNAME6, 6);
> vms->oem_table_id = g_strndup(ACPI_BUILD_APPNAME8, 8);
> + cxl_machine_init(obj, &vms->cxl_devices_state);
> }
>
> static const TypeInfo virt_machine_info = {
> diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
> index 15feabac63..403c9107e5 100644
> --- a/include/hw/arm/virt.h
> +++ b/include/hw/arm/virt.h
> @@ -35,6 +35,7 @@
> #include "hw/boards.h"
> #include "hw/arm/boot.h"
> #include "hw/block/flash.h"
> +#include "hw/cxl/cxl.h"
> #include "sysemu/kvm.h"
> #include "hw/intc/arm_gicv3_common.h"
> #include "qom/object.h"
> @@ -92,6 +93,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,
> };
> @@ -176,6 +178,7 @@ struct VirtMachineState {
> PCIBus *bus;
> char *oem_id;
> char *oem_table_id;
> + CXLState cxl_devices_state;
> };
I just looked at the CXLState struct. Why isn't this a device object ?
thanks
-- PMM
next prev parent reply other threads:[~2022-06-24 10:51 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-16 14:19 [PATCH v11 0/2] arm/virt: CXL support via pxb_cxl Jonathan Cameron via
2022-06-16 14:19 ` [PATCH v11 1/2] hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances pxb-cxl Jonathan Cameron via
2022-06-24 10:48 ` Peter Maydell [this message]
2022-06-24 12:39 ` Jonathan Cameron via
2022-06-24 12:56 ` Peter Maydell
2022-06-24 14:08 ` Jonathan Cameron via
2022-06-24 14:54 ` Jonathan Cameron via
2022-06-24 15:01 ` Peter Maydell
2022-06-24 15:59 ` Jonathan Cameron via
2022-06-16 14:19 ` [PATCH v11 2/2] qtest/cxl: Add aarch64 virt test for CXL Jonathan Cameron via
2022-06-24 10:41 ` Peter Maydell
2022-06-24 16:12 ` Peter Maydell
2022-06-24 17:59 ` Jonathan Cameron via
2022-06-24 9:07 ` [PATCH v11 0/2] arm/virt: CXL support via pxb_cxl Jonathan Cameron via
-- strict thread matches above, loose matches on Subject: below --
2022-05-20 16:37 [PATCH v11 0/2] hw/arm/virt: CXL 2.0 emulation support Jonathan Cameron via
2022-05-20 16:37 ` [PATCH v11 1/2] hw/arm/virt: Basic CXL enablement on pci_expander_bridge instances pxb-cxl Jonathan Cameron via
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=CAFEAcA8U9oNDStfLpxOwodGm9MCTdLrt-WV+x_-rTGw9UpBGvA@mail.gmail.com \
--to=peter.maydell@linaro.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=a.manzanares@samsung.com \
--cc=alex.bennee@linaro.org \
--cc=armbru@redhat.com \
--cc=bwidawsk@kernel.org \
--cc=imammedo@redhat.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=marcel@redhat.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=ztong0001@gmail.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;
as well as URLs for NNTP newsgroup(s).