[{"id":3678397,"web_url":"http://patchwork.ozlabs.org/comment/3678397/","msgid":"<edb437fa-66b4-43f2-bf88-1ccf8ea5d3e9@linaro.org>","list_archive_url":null,"date":"2026-04-16T21:32:18","subject":"Re: [PATCH v5 8/9] hw/hexagon: Define hexagon \"virt\" machine","submitter":{"id":85046,"url":"http://patchwork.ozlabs.org/api/people/85046/","name":"Philippe Mathieu-Daudé","email":"philmd@linaro.org"},"content":"On 16/4/26 23:03, Brian Cain wrote:\n> From: Brian Cain <bcain@quicinc.com>\n> \n> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>\n> ---\n>   configs/devices/hexagon-softmmu/default.mak |   1 +\n>   configs/targets/hexagon-softmmu.mak         |   1 +\n>   include/hw/hexagon/virt.h                   |  43 ++\n>   hw/hexagon/virt.c                           | 456 ++++++++++++++++++++\n>   target/hexagon/cpu.c                        |   2 +\n>   hw/hexagon/Kconfig                          |  10 +\n>   hw/hexagon/meson.build                      |   2 +\n>   tests/qemu-iotests/testenv.py               |   1 +\n>   8 files changed, 516 insertions(+)\n>   create mode 100644 include/hw/hexagon/virt.h\n>   create mode 100644 hw/hexagon/virt.c\n> \n> diff --git a/configs/devices/hexagon-softmmu/default.mak b/configs/devices/hexagon-softmmu/default.mak\n> index 08e709aea72..37b4f9f3237 100644\n> --- a/configs/devices/hexagon-softmmu/default.mak\n> +++ b/configs/devices/hexagon-softmmu/default.mak\n> @@ -3,5 +3,6 @@\n>   # Uncomment the following lines to disable these optional devices:\n>   \n>   # Boards are selected by default, uncomment to keep out of the build.\n> +# CONFIG_HEX_VIRT=y\n>   # CONFIG_HEX_DSP=y\n>   # CONFIG_L2VIC=y\n> diff --git a/configs/targets/hexagon-softmmu.mak b/configs/targets/hexagon-softmmu.mak\n> index fdfa29b4f39..a77c100f0c5 100644\n> --- a/configs/targets/hexagon-softmmu.mak\n> +++ b/configs/targets/hexagon-softmmu.mak\n> @@ -5,3 +5,4 @@ TARGET_XML_FILES=hexagon-core.xml hexagon-hvx.xml\n>   TARGET_LONG_BITS=32\n>   TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y\n>   TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y\n> +TARGET_NEED_FDT=y\n> diff --git a/include/hw/hexagon/virt.h b/include/hw/hexagon/virt.h\n> new file mode 100644\n> index 00000000000..a54eac5cf00\n> --- /dev/null\n> +++ b/include/hw/hexagon/virt.h\n> @@ -0,0 +1,43 @@\n> +/*\n> + * Definitions for hexagon virt board.\n> + *\n> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.\n> + * SPDX-License-Identifier: GPL-2.0-or-later\n> + */\n> +\n> +#ifndef HW_HEXAGONVIRT_H\n> +#define HW_HEXAGONVIRT_H\n> +\n> +#include \"hw/core/boards.h\"\n> +#include \"target/hexagon/cpu.h\"\n> +\n> +struct HexagonVirtMachineState {\n> +    /*< private >*/\n\n(remove this unuseful comment)\n\n> +    MachineState parent_obj;\n> +\n> +    int fdt_size;\n> +    MemoryRegion *sys;\n> +    MemoryRegion cfgtable;\n> +    MemoryRegion ram;\n> +    MemoryRegion tcm;\n> +    MemoryRegion vtcm;\n> +    MemoryRegion bios;\n> +    DeviceState *l2vic;\n> +    Clock *apb_clk;\n> +};\n> +\n> +void hexagon_load_fdt(const struct HexagonVirtMachineState *vms);\n> +\n> +enum {\n> +    VIRT_UART0,\n> +    VIRT_QTMR0,\n> +    VIRT_QTMR1,\n> +    VIRT_GPT,\n> +    VIRT_MMIO,\n> +    VIRT_FDT,\n> +};\n\nDo we really need to expose this enum? Otherwise it could go in the source.\n\n> +\n> +#define TYPE_HEXAGON_VIRT_MACHINE MACHINE_TYPE_NAME(\"virt\")\n> +OBJECT_DECLARE_SIMPLE_TYPE(HexagonVirtMachineState, HEXAGON_VIRT_MACHINE)\n> +\n> +#endif /* HW_HEXAGONVIRT_H */\n> diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c\n> new file mode 100644\n> index 00000000000..ff93b5221ba\n> --- /dev/null\n> +++ b/hw/hexagon/virt.c\n> @@ -0,0 +1,456 @@\n> +/*\n> + * Hexagon virt emulation\n> + *\n> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.\n> + * SPDX-License-Identifier: GPL-2.0-or-later\n> + */\n> +\n> +#include \"qemu/osdep.h\"\n> +#include \"qapi/error.h\"\n> +#include \"hw/hexagon/virt.h\"\n> +#include \"elf.h\"\n> +#include \"hw/char/pl011.h\"\n> +#include \"hw/core/clock.h\"\n> +#include \"hw/core/sysbus-fdt.h\"\n> +#include \"hw/hexagon/hexagon.h\"\n> +#include \"hw/hexagon/hexagon_globalreg.h\"\n> +#include \"hw/hexagon/hexagon_tlb.h\"\n> +#include \"hw/core/loader.h\"\n> +#include \"hw/core/qdev-properties.h\"\n> +#include \"hw/core/qdev-clock.h\"\n> +#include \"hw/core/register.h\"\n> +#include \"qemu/error-report.h\"\n> +#include \"qemu/guest-random.h\"\n> +#include \"qemu/units.h\"\n> +#include \"elf.h\"\n> +#include \"machine_cfg_v68n_1024.h.inc\"\n> +#include \"system/address-spaces.h\"\n> +#include \"system/device_tree.h\"\n> +#include \"system/reset.h\"\n> +#include \"system/system.h\"\n> +#include <libfdt.h>\n> +\n> +static const int VIRTIO_DEV_COUNT = 8;\n> +\n> +static const MemMapEntry base_memmap[] = {\n> +    [VIRT_UART0] = { 0x10000000, 0x00000200 },\n> +    [VIRT_MMIO] = { 0x11000000, 0x1000000, },\n> +    [VIRT_GPT] = { 0xab000000, 0x00001000 },\n> +    [VIRT_FDT] = { 0x99800000, 0x00400000 },\n> +};\n> +\n> +static const int irqmap[] = {\n> +    [VIRT_MMIO] = 18, /* ...to 18 + VIRTIO_DEV_COUNT - 1 */\n> +    [VIRT_GPT] = 12,\n> +    [VIRT_UART0] = 15,\n> +    [VIRT_QTMR0] = 2,\n> +    [VIRT_QTMR1] = 4,\n> +};\n> +\n> +\n> +static void create_fdt(HexagonVirtMachineState *vms)\n> +{\n> +    MachineState *ms = MACHINE(vms);\n> +    void *fdt = create_device_tree(&vms->fdt_size);\n> +    uint8_t rng_seed[32];\n> +\n> +    if (!fdt) {\n> +        error_report(\"create_device_tree() failed\");\n> +        exit(1);\n> +    }\n> +\n> +    ms->fdt = fdt;\n> +\n> +    qemu_fdt_setprop_cell(fdt, \"/\", \"#address-cells\", 0x2);\n> +    qemu_fdt_setprop_cell(fdt, \"/\", \"#size-cells\", 0x1);\n> +    qemu_fdt_setprop_string(fdt, \"/\", \"model\", \"hexagon-virt,qemu\");\n> +    qemu_fdt_setprop_string(fdt, \"/\", \"compatible\", \"qcom,sm8150\");\n> +\n> +    qemu_fdt_add_subnode(fdt, \"/soc\");\n> +    qemu_fdt_setprop_cell(fdt, \"/soc\", \"#address-cells\", 0x2);\n> +    qemu_fdt_setprop_cell(fdt, \"/soc\", \"#size-cells\", 0x1);\n> +    qemu_fdt_setprop(fdt, \"/soc\", \"ranges\", NULL, 0);\n> +\n> +    qemu_fdt_add_subnode(fdt, \"/chosen\");\n> +    qemu_guest_getrandom_nofail(rng_seed, sizeof(rng_seed));\n> +    qemu_fdt_setprop(fdt, \"/chosen\", \"rng-seed\", rng_seed, sizeof(rng_seed));\n> +}\n> +\n> +static void fdt_add_hvx(HexagonVirtMachineState *vms,\n> +                        const struct hexagon_machine_config *m_cfg,\n> +                        Error **errp)\n> +{\n> +    const MachineState *ms = MACHINE(vms);\n> +    uint32_t vtcm_size_bytes = m_cfg->cfgtable.vtcm_size_kb * 1024;\n> +    if (vtcm_size_bytes > 0) {\n> +        memory_region_init_ram(&vms->vtcm, NULL, \"vtcm.ram\", vtcm_size_bytes,\n> +                               errp);\n> +        memory_region_add_subregion(vms->sys, m_cfg->cfgtable.vtcm_base << 16,\n> +                                    &vms->vtcm);\n> +\n> +        qemu_fdt_add_subnode(ms->fdt, \"/soc/vtcm\");\n> +        qemu_fdt_setprop_string(ms->fdt, \"/soc/vtcm\", \"compatible\",\n> +                                \"qcom,hexagon_vtcm\");\n> +\n> +        assert(sizeof(m_cfg->cfgtable.vtcm_base) == sizeof(uint32_t));\n> +        qemu_fdt_setprop_cells(ms->fdt, \"/soc/vtcm\", \"reg\", 0,\n> +                               m_cfg->cfgtable.vtcm_base << 16,\n> +                               vtcm_size_bytes);\n> +    }\n> +\n> +    if (m_cfg->cfgtable.ext_contexts > 0) {\n> +        qemu_fdt_add_subnode(ms->fdt, \"/soc/hvx\");\n> +        qemu_fdt_setprop_string(ms->fdt, \"/soc/hvx\", \"compatible\",\n> +                                \"qcom,hexagon-hvx\");\n> +        qemu_fdt_setprop_cells(ms->fdt, \"/soc/hvx\", \"qcom,hvx-max-ctxts\",\n> +                               m_cfg->cfgtable.ext_contexts);\n> +        qemu_fdt_setprop_cells(ms->fdt, \"/soc/hvx\", \"qcom,hvx-vlength\",\n> +                               m_cfg->cfgtable.hvx_vec_log_length);\n> +    }\n> +}\n> +\n> +static int32_t irq_hvm_ic_phandle = -1;\n\nMaybe better to pass these handles as pointer argument?\n\n> +static void fdt_add_hvm_pic_node(HexagonVirtMachineState *vms,\n> +                                 const struct hexagon_machine_config *m_cfg)\n> +{\n> +    MachineState *ms = MACHINE(vms);\n> +    irq_hvm_ic_phandle = qemu_fdt_alloc_phandle(ms->fdt);\n> +\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/soc\", \"interrupt-parent\",\n> +                          irq_hvm_ic_phandle);\n> +\n> +    qemu_fdt_add_subnode(ms->fdt, \"/soc/interrupt-controller\");\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/soc/interrupt-controller\",\n> +                          \"#address-cells\", 2);\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/soc/interrupt-controller\",\n> +                          \"#interrupt-cells\", 2);\n> +    qemu_fdt_setprop_string(ms->fdt, \"/soc/interrupt-controller\", \"compatible\",\n> +                            \"qcom,h2-pic,hvm-pic\");\n> +    qemu_fdt_setprop(ms->fdt, \"/soc/interrupt-controller\",\n> +                     \"interrupt-controller\", NULL, 0);\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/soc/interrupt-controller\", \"phandle\",\n> +                          irq_hvm_ic_phandle);\n> +\n> +    sysbus_mmio_map(SYS_BUS_DEVICE(vms->l2vic), 1,\n> +                    m_cfg->cfgtable.fastl2vic_base << 16);\n> +}\n> +\n> +\n> +static void fdt_add_gpt_node(HexagonVirtMachineState *vms)\n> +{\n> +    g_autofree char *name = NULL;\n> +    MachineState *ms = MACHINE(vms);\n> +\n> +    name = g_strdup_printf(\"/soc/gpt@%\" PRIx64,\n> +                           (int64_t)base_memmap[VIRT_GPT].base);\n> +    qemu_fdt_add_subnode(ms->fdt, name);\n> +    qemu_fdt_setprop_string(ms->fdt, name, \"compatible\",\n> +                            \"qcom,h2-timer,hvm-timer\");\n> +    qemu_fdt_setprop_cells(ms->fdt, name, \"interrupts\", irqmap[VIRT_GPT], 0);\n> +    qemu_fdt_setprop_cells(ms->fdt, name, \"reg\", 0x0,\n> +                           base_memmap[VIRT_GPT].base,\n> +                           base_memmap[VIRT_GPT].size);\n> +}\n> +\n> +static int32_t clock_phandle = -1;\n\n(ditto)\n\n> +static void fdt_add_clocks(const HexagonVirtMachineState *vms)\n> +{\n> +    MachineState *ms = MACHINE(vms);\n> +    clock_phandle = qemu_fdt_alloc_phandle(ms->fdt);\n> +    qemu_fdt_add_subnode(ms->fdt, \"/apb-pclk\");\n> +    qemu_fdt_setprop_string(ms->fdt, \"/apb-pclk\", \"compatible\", \"fixed-clock\");\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/apb-pclk\", \"#clock-cells\", 0x0);\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/apb-pclk\", \"clock-frequency\", 24000000);\n> +    qemu_fdt_setprop_string(ms->fdt, \"/apb-pclk\", \"clock-output-names\",\n> +                            \"clk24mhz\");\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/apb-pclk\", \"phandle\", clock_phandle);\n> +}\n> +\n> +static void fdt_add_uart(const HexagonVirtMachineState *vms, int uart)\n> +{\n> +    char *nodename;\n> +    hwaddr base = base_memmap[uart].base;\n> +    hwaddr size = base_memmap[uart].size;\n> +    assert(uart == 0);\n> +    int irq = irqmap[VIRT_UART0 + uart];\n> +    const char compat[] = \"arm,pl011\\0arm,primecell\";\n> +    const char clocknames[] = \"uartclk\\0apb_pclk\";\n> +    MachineState *ms = MACHINE(vms);\n> +    DeviceState *dev;\n> +    SysBusDevice *s;\n> +\n> +    dev = qdev_new(TYPE_PL011);\n> +    s = SYS_BUS_DEVICE(dev);\n> +    qdev_prop_set_chr(dev, \"chardev\", serial_hd(0));\n> +    qdev_connect_clock_in(dev, \"clk\", vms->apb_clk);\n> +    sysbus_realize_and_unref(s, &error_fatal);\n> +    sysbus_mmio_map(s, 0, base);\n> +    if (vms->l2vic) {\n> +        sysbus_connect_irq(s, 0, qdev_get_gpio_in(vms->l2vic, irq));\n> +    }\n> +\n> +    nodename = g_strdup_printf(\"/pl011@%\" PRIx64, base);\n> +    qemu_fdt_add_subnode(ms->fdt, nodename);\n> +\n> +    /* Note that we can't use setprop_string because of the embedded NUL */\n> +    qemu_fdt_setprop(ms->fdt, nodename, \"compatible\", compat, sizeof(compat));\n> +    qemu_fdt_setprop_cells(ms->fdt, nodename, \"reg\", 0, base, size);\n> +    if (vms->l2vic) {\n> +        qemu_fdt_setprop_cells(ms->fdt, nodename, \"interrupts\",\n> +                               32 + irq, 0);\n> +        qemu_fdt_setprop_cell(ms->fdt, nodename, \"interrupt-parent\",\n> +                              irq_hvm_ic_phandle);\n> +    }\n> +    qemu_fdt_setprop_cells(ms->fdt, nodename, \"clocks\", clock_phandle,\n> +                           clock_phandle);\n> +    qemu_fdt_setprop(ms->fdt, nodename, \"clock-names\", clocknames,\n> +                     sizeof(clocknames));\n> +\n> +    qemu_fdt_setprop_string(ms->fdt, \"/chosen\", \"stdout-path\", nodename);\n> +    qemu_fdt_add_subnode(ms->fdt, \"/aliases\");\n> +    qemu_fdt_setprop_string(ms->fdt, \"/aliases\", \"serial0\", nodename);\n> +\n> +    g_free(nodename);\n> +}\n> +\n> +static void fdt_add_cpu_nodes(const HexagonVirtMachineState *vms)\n> +{\n> +    MachineState *ms = MACHINE(vms);\n> +    qemu_fdt_add_subnode(ms->fdt, \"/cpus\");\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/cpus\", \"#address-cells\", 0x1);\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/cpus\", \"#size-cells\", 0x0);\n> +\n> +    /* cpu nodes */\n> +    for (int num = ms->smp.cpus - 1; num >= 0; num--) {\n> +        char *nodename = g_strdup_printf(\"/cpus/cpu@%d\", num);\n> +        qemu_fdt_add_subnode(ms->fdt, nodename);\n> +        qemu_fdt_setprop_string(ms->fdt, nodename, \"device_type\", \"cpu\");\n> +        qemu_fdt_setprop_cell(ms->fdt, nodename, \"reg\", num);\n> +        qemu_fdt_setprop_cell(ms->fdt, nodename, \"phandle\",\n> +                              qemu_fdt_alloc_phandle(ms->fdt));\n> +        g_free(nodename);\n> +    }\n> +}\n> +\n> +\n> +static void fdt_add_virtio_devices(const HexagonVirtMachineState *vms)\n> +{\n> +    MachineState *ms = MACHINE(vms);\n> +    /* VirtIO MMIO devices */\n> +    for (int i = 0; i < VIRTIO_DEV_COUNT; i++) {\n> +        char *nodename;\n> +        int irq = irqmap[VIRT_MMIO] + i;\n> +        size_t size = base_memmap[VIRT_MMIO].size;\n> +        hwaddr base = base_memmap[VIRT_MMIO].base + i * size;\n> +\n> +        nodename = g_strdup_printf(\"/virtio_mmio@%\" PRIx64, base);\n> +        qemu_fdt_add_subnode(ms->fdt, nodename);\n> +        qemu_fdt_setprop_string(ms->fdt, nodename, \"compatible\", \"virtio,mmio\");\n> +        qemu_fdt_setprop_sized_cells(ms->fdt, nodename, \"reg\", 2, base, 1,\n> +                                     size);\n> +        qemu_fdt_setprop_cells(ms->fdt, nodename, \"interrupts\", irq, 0);\n> +        qemu_fdt_setprop_cell(ms->fdt, nodename, \"interrupt-parent\",\n> +                              irq_hvm_ic_phandle);\n> +\n> +        sysbus_create_simple(\n> +            \"virtio-mmio\", base,\n> +            qdev_get_gpio_in(vms->l2vic, irqmap[VIRT_MMIO] + i));\n> +\n> +        g_free(nodename);\n> +    }\n> +}\n> +\n> +static void virt_instance_init(Object *obj)\n> +{\n> +    HexagonVirtMachineState *vms = HEXAGON_VIRT_MACHINE(obj);\n> +\n> +    create_fdt(vms);\n> +}\n> +\n> +void hexagon_load_fdt(const HexagonVirtMachineState *vms)\n> +{\n> +    MachineState *ms = MACHINE(vms);\n> +    hwaddr fdt_addr = base_memmap[VIRT_FDT].base;\n> +    uint32_t fdtsize = vms->fdt_size;\n> +\n> +    g_assert(fdtsize <= base_memmap[VIRT_FDT].size);\n> +    /* copy in the device tree */\n> +    rom_add_blob_fixed_as(\"fdt\", ms->fdt, fdtsize, fdt_addr,\n> +                          &address_space_memory);\n> +    qemu_register_reset_nosnapshotload(\n> +        qemu_fdt_randomize_seeds,\n> +        rom_ptr_for_as(&address_space_memory, fdt_addr, fdtsize));\n> +}\n> +\n> +static uint64_t load_kernel(const HexagonVirtMachineState *vms)\n> +{\n> +    MachineState *ms = MACHINE(vms);\n> +    uint64_t entry = 0;\n> +    if (load_elf_ram_sym(ms->kernel_filename, NULL, NULL, NULL, &entry, NULL,\n> +                         NULL, NULL, 0, EM_HEXAGON, 0, 0, &address_space_memory,\n> +                         false, NULL) > 0) {\n> +        return entry;\n> +    }\n> +    error_report(\"error loading '%s'\", ms->kernel_filename);\n> +    exit(1);\n> +}\n> +\n> +static uint64_t load_bios(HexagonVirtMachineState *vms)\n> +{\n> +    MachineState *ms = MACHINE(vms);\n> +    uint64_t bios_addr = 0x0;  /* Load BIOS at reset vector address 0x0 */\n> +    int bios_size;\n> +\n> +    bios_size = load_image_targphys(ms->firmware ?: \"\",\n> +                                    bios_addr, 64 * 1024, NULL);\n> +    if (bios_size < 0) {\n> +        error_report(\"Could not load BIOS '%s'\", ms->firmware ?: \"\");\n> +        exit(1);\n> +    }\n> +\n> +    return bios_addr;  /* Return entry point at address 0x0 */\n> +}\n> +\n> +static void do_cpu_reset(void *opaque)\n> +{\n> +    HexagonCPU *cpu = opaque;\n> +    CPUState *cs = CPU(cpu);\n> +    cpu_reset(cs);\n> +}\n> +\n> +static void virt_init(MachineState *ms)\n> +{\n> +    HexagonVirtMachineState *vms = HEXAGON_VIRT_MACHINE(ms);\n> +    const struct hexagon_machine_config *m_cfg = &v68n_1024;\n> +    const char *cpu_model;\n> +    DeviceState *gsregs_dev;\n> +    DeviceState *tlb_dev;\n> +    HexagonCPU *cpu_0;\n\nMaybe directly to only use a single cast:\n\n        DeviceState *cpu0;\n\n> +\n> +    qemu_fdt_setprop_string(ms->fdt, \"/chosen\", \"bootargs\", ms->kernel_cmdline);\n> +\n> +    vms->sys = get_system_memory();\n> +\n> +    /* Create APB clock for peripherals */\n> +    vms->apb_clk = clock_new(OBJECT(ms), \"apb-pclk\");\n> +    clock_set_hz(vms->apb_clk, 24000000);\n> +\n> +    memory_region_init_ram(&vms->ram, NULL, \"ddr.ram\", ms->ram_size,\n> +                           &error_fatal);\n> +    memory_region_add_subregion(vms->sys, 0x0, &vms->ram);\n> +\n> +    if (m_cfg->l2tcm_size) {\n> +        memory_region_init_ram(&vms->tcm, NULL, \"tcm.ram\", m_cfg->l2tcm_size,\n> +                               &error_fatal);\n> +        memory_region_add_subregion(vms->sys, m_cfg->cfgtable.l2tcm_base << 16,\n> +                                    &vms->tcm);\n> +    }\n> +\n> +    memory_region_init_rom(&vms->cfgtable, NULL, \"config_table.rom\",\n> +                           sizeof(m_cfg->cfgtable), &error_fatal);\n> +    memory_region_add_subregion(vms->sys, m_cfg->cfgbase, &vms->cfgtable);\n> +    fdt_add_hvx(vms, m_cfg, &error_fatal);\n> +    cpu_model = ms->cpu_type;\n> +\n> +    if (!cpu_model) {\n> +        cpu_model = HEXAGON_CPU_TYPE_NAME(\"v68\");\n\nCan that happen? There is a default defined...\n\n> +    }\n> +\n> +    gsregs_dev = qdev_new(TYPE_HEXAGON_GLOBALREG);\n> +    object_property_add_child(OBJECT(ms), \"global-regs\", OBJECT(gsregs_dev));\n> +    qdev_prop_set_uint64(gsregs_dev, \"config-table-addr\", m_cfg->cfgbase);\n> +    qdev_prop_set_uint32(gsregs_dev, \"dsp-rev\", v68_rev);\n> +    sysbus_realize_and_unref(SYS_BUS_DEVICE(gsregs_dev), &error_fatal);\n> +\n> +    tlb_dev = qdev_new(TYPE_HEXAGON_TLB);\n\nWhere is hw/hexagon/hexagon_tlb.h?\n\n> +    object_property_add_child(OBJECT(ms), \"tlb\", OBJECT(tlb_dev));\n> +    qdev_prop_set_uint32(tlb_dev, \"num-entries\",\n> +                         m_cfg->cfgtable.jtlb_size_entries);\n> +    sysbus_realize_and_unref(SYS_BUS_DEVICE(tlb_dev), &error_fatal);\n> +\n> +    cpu_0 = NULL;\n> +    for (int i = 0; i < ms->smp.cpus; i++) {\n\nI suppose they belong to a cluster. In the future we'd create\nthem within a TYPE_CPU_CLUSTER.\n\n> +        HexagonCPU *cpu = HEXAGON_CPU(object_new(ms->cpu_type));\n> +        qemu_register_reset(do_cpu_reset, cpu);\n> +\n> +        if (i == 0) {\n> +            cpu_0 = cpu;\n> +            if (ms->kernel_filename) {\n> +                uint64_t entry = load_kernel(vms);\n> +                qdev_prop_set_uint32(DEVICE(cpu_0), \"exec-start-addr\", entry);\n> +            } else if (ms->firmware) {\n> +                uint64_t entry = load_bios(vms);\n> +                qdev_prop_set_uint32(DEVICE(cpu_0), \"exec-start-addr\", entry);\n> +            }\n> +        }\n> +        qdev_prop_set_uint32(DEVICE(cpu), \"htid\", i);\n> +        qdev_prop_set_bit(DEVICE(cpu), \"start-powered-off\", (i != 0));\n> +        object_property_set_link(OBJECT(cpu), \"global-regs\",\n> +                                 OBJECT(gsregs_dev), &error_fatal);\n> +        object_property_set_link(OBJECT(cpu), \"tlb\",\n> +                                 OBJECT(tlb_dev), &error_fatal);\n> +\n> +        if (!qdev_realize_and_unref(DEVICE(cpu), NULL, &error_fatal)) {\n> +            return;\n> +        }\n> +    }\n> +    /* TODO: enable l2vic when l2vic device arrives */\n> +    if (object_class_by_name(\"l2vic\")) {\n> +        vms->l2vic = sysbus_create_varargs(\n> +            \"l2vic\", m_cfg->l2vic_base,\n> +            qdev_get_gpio_in(DEVICE(cpu_0), 0),\n> +            qdev_get_gpio_in(DEVICE(cpu_0), 1),\n> +            qdev_get_gpio_in(DEVICE(cpu_0), 2),\n> +            qdev_get_gpio_in(DEVICE(cpu_0), 3),\n> +            qdev_get_gpio_in(DEVICE(cpu_0), 4),\n> +            qdev_get_gpio_in(DEVICE(cpu_0), 5),\n> +            qdev_get_gpio_in(DEVICE(cpu_0), 6),\n> +            qdev_get_gpio_in(DEVICE(cpu_0), 7), NULL);\n> +\n> +        fdt_add_hvm_pic_node(vms, m_cfg);\n> +        fdt_add_virtio_devices(vms);\n> +        fdt_add_gpt_node(vms);\n> +    }\n> +\n> +    fdt_add_cpu_nodes(vms);\n> +    fdt_add_clocks(vms);\n> +    fdt_add_uart(vms, VIRT_UART0);\n> +\n> +    rom_add_blob_fixed_as(\"config_table.rom\", &m_cfg->cfgtable,\n> +                          sizeof(m_cfg->cfgtable), m_cfg->cfgbase,\n> +                          &address_space_memory);\n> +\n> +\n> +    hexagon_load_fdt(vms);\n> +}\n> +\n> +\n> +static void virt_class_init(ObjectClass *oc, const void *data)\n> +{\n> +    MachineClass *mc = MACHINE_CLASS(oc);\n> +\n> +    mc->desc = \"Hexagon Virtual Machine\";\n> +    mc->init = virt_init;\n> +    mc->default_cpu_type = HEXAGON_CPU_TYPE_NAME(\"v68\");\n\n(this is the default CPU type)\n\n> +    mc->default_ram_size = 4 * GiB;\n> +    mc->max_cpus = 8;\n> +    mc->default_cpus = 8;\n> +    mc->is_default = false;\n> +    mc->default_kernel_irqchip_split = false;\n> +    mc->block_default_type = IF_VIRTIO;\n> +    mc->default_boot_order = NULL;\n> +    mc->no_cdrom = 1;\n> +    mc->numa_mem_supported = false;\n> +    mc->default_nic = \"virtio-mmio-bus\";\n> +}\n> +\n> +\n> +static const TypeInfo virt_machine_types[] = { {\n> +    .name = TYPE_HEXAGON_VIRT_MACHINE,\n> +    .parent = TYPE_MACHINE,\n> +    .instance_size = sizeof(HexagonVirtMachineState),\n> +    .class_init = virt_class_init,\n> +    .instance_init = virt_instance_init,\n> +} };\n> +\n> +DEFINE_TYPES(virt_machine_types)\n> diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c\n> index 355abb4fd24..01781a76caf 100644\n> --- a/target/hexagon/cpu.c\n> +++ b/target/hexagon/cpu.c\n> @@ -68,6 +68,8 @@ static ObjectClass *hexagon_cpu_class_by_name(const char *cpu_model)\n>   \n>   static const Property hexagon_cpu_properties[] = {\n>   #if !defined(CONFIG_USER_ONLY)\n> +    DEFINE_PROP_LINK(\"tlb\", HexagonCPU, tlb, TYPE_HEXAGON_TLB,\n> +                     HexagonTLBState *),\n>       DEFINE_PROP_UINT32(\"exec-start-addr\", HexagonCPU, boot_addr, 0xffffffff),\n>       DEFINE_PROP_LINK(\"global-regs\", HexagonCPU, globalregs,\n>           TYPE_HEXAGON_GLOBALREG, HexagonGlobalRegState *),\n> diff --git a/hw/hexagon/Kconfig b/hw/hexagon/Kconfig\n> index cdf7770a305..52065ab3b22 100644\n> --- a/hw/hexagon/Kconfig\n> +++ b/hw/hexagon/Kconfig\n> @@ -2,3 +2,13 @@ config HEX_DSP\n>       bool\n>       default y\n>       depends on HEXAGON\n> +\n> +config HEX_VIRT\n> +    bool\n> +    default y\n> +    depends on HEX_DSP && FDT\n> +    select DEVICE_TREE\n> +    select VIRTIO_MMIO\n> +    select PL011\n> +    select VIRTIO_BLK\n> +    select VIRTIO_SCSI\n> diff --git a/hw/hexagon/meson.build b/hw/hexagon/meson.build\n> index f528d2bc4ab..5b6a5e11a17 100644\n> --- a/hw/hexagon/meson.build\n> +++ b/hw/hexagon/meson.build\n> @@ -4,3 +4,5 @@ hexagon_ss.add(files('hexagon_globalreg.c'))\n>   hexagon_ss.add(when: 'CONFIG_HEX_DSP', if_true: files('hexagon_dsp.c'))\n>   \n>   hw_arch += {'hexagon': hexagon_ss}\n> +\n> +hexagon_ss.add(when: 'CONFIG_HEX_VIRT', if_true: files('virt.c'))\n> diff --git a/tests/qemu-iotests/testenv.py b/tests/qemu-iotests/testenv.py\n> index c357e6ebf50..86bcdf7cfad 100644\n> --- a/tests/qemu-iotests/testenv.py\n> +++ b/tests/qemu-iotests/testenv.py\n> @@ -259,6 +259,7 @@ def __init__(self, source_dir: str, build_dir: str,\n>               ('arm', 'virt'),\n>               ('aarch64', 'virt'),\n>               ('avr', 'mega2560'),\n> +            ('hexagon', 'virt'),\n>               ('m68k', 'virt'),\n>               ('or1k', 'virt'),\n>               ('riscv32', 'virt'),","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=her7azTi;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxWTV55FQz1yD3\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 07:33:17 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wDUK3-00046X-BG; Thu, 16 Apr 2026 17:32:27 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1wDUK1-000469-EM\n for qemu-devel@nongnu.org; Thu, 16 Apr 2026 17:32:25 -0400","from mail-wm1-x330.google.com ([2a00:1450:4864:20::330])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1wDUJy-0000Oh-Ed\n for qemu-devel@nongnu.org; Thu, 16 Apr 2026 17:32:25 -0400","by mail-wm1-x330.google.com with SMTP id\n 5b1f17b1804b1-483487335c2so35075e9.2\n for <qemu-devel@nongnu.org>; Thu, 16 Apr 2026 14:32:21 -0700 (PDT)","from [192.168.69.228] (88-187-86-199.subs.proxad.net.\n [88.187.86.199]) by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43ead3d6409sm16975194f8f.23.2026.04.16.14.32.18\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 16 Apr 2026 14:32:19 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1776375141; x=1776979941; darn=nongnu.org;\n h=content-transfer-encoding:in-reply-to:from:references:cc:to\n :content-language:subject:user-agent:mime-version:date:message-id\n :from:to:cc:subject:date:message-id:reply-to;\n bh=xC4LaGfN1cnh++zqLJpM1fZQxifhsAfHwRcq3djkkAw=;\n b=her7azTi+5/kpEGvALS5oIQEycGsIn30vA2BLI8xbnrH6lV3FCEUEYE58hqdGREaED\n GflXKDYFt1WIBztCkbKw3XHYNf1MhMpsFJq5wIlQHIXWIQD1DvxpBSehL8fkQAA13TOX\n LvQb2D7L+WyiDIp2k2Qotr7OoJiG+Sgt8T46lcgX4orgx+vxmNMC9hB64RJqQxOXeqYN\n gogQsGnZjnculJ1pdWiLClq6Bqpr2YsIuPAAvzIzCaXu/WNUnbGlFFJc/xhmDRmjnyVR\n 4jSTbPZ5k2jP/zZMwovkUIYyfqz1DpjSstQUuUa7N/S0oYeH2w/dyESvDYkDm8+l1dfu\n tUDg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776375141; x=1776979941;\n h=content-transfer-encoding:in-reply-to:from:references:cc:to\n :content-language:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=xC4LaGfN1cnh++zqLJpM1fZQxifhsAfHwRcq3djkkAw=;\n b=OwYAIIf1bSunxceU+uM9U4RK8v2ez75Ow8xT2URdIzusz88qr7Mv4mw7DRKfG/2OX9\n yXhpghMVP7PXHuLp1bsRgaCHCjM9uI3/1DCzBboblzhRJYXfwzyVVi97yzG6C+1pyjbw\n oMaWoy17sNWRhelxpfRfvmvo5h3Y5AlwZfyWteaeiMexzat2HKu2eR0fKCHhcyFezUvz\n PqRKF3G1Jn1uE1B7ERPaS5fspFb05eoSIO3BPs8g0Lcn356oImwMS8uvWl9C4JNKScZp\n xhCI0kMKe7//g7EyA6zuSVsqDytFF73/v/hPYAWZMHa4A/8IlvcVUaNI1gNtXVNcP9N4\n Ufrw==","X-Forwarded-Encrypted":"i=1;\n AFNElJ977jekIx1bjWu3GX5C11GmiV6dS9NRxsyIpCxqhnTAcVWi/Yqn+dmWpG9BntzDwFQC98HbdCVnAvGd@nongnu.org","X-Gm-Message-State":"AOJu0Yzd6ssFWcrEn8GXMPH68Yvz/nnGkL1a3KDSj2jVTqqilytHumrp\n FNE2TG2pxI9UISRu6kTVtI3GPa7FV9qDhZ1FoZAdNVzMHyANSPam2lVLAOjdPNi/PFA=","X-Gm-Gg":"AeBDieuY0vXXQBeEkN2TG52wISZRj5Q9/x2m19dZlPsgxquvL73JI49VVkqSPEGT4Aq\n VSK9259BLM+cHUSN1gwbg/fo3WTiplQdjymx0AC/c7zLR/tUTDW99Wk8HQZ4viQ0HZbW/w7GmF6\n XOquFBy/MPejwu2PmaRI5kVXRVAppOT71Nx+uXQF48u9VGsSbGxRJ/j9kkO//4LSkfiDuXIVFPV\n BWm7KAlbHvMzyYvZOAcLB1Q2eDxmLojc95RxljDQlRmhQDesRNM5NF+hW6THVXYS0tt7bOstnQ6\n 3RBUk7EX3xuBelhn/sfdnVIYNWrC98zBjA4kV8G5evHWJDVXADZjqRR8hib9ZUgnRId7ba3G055\n t2Pp9qIxhnQuK3I0P7TiCXVhxC4cU3EWE9gHMQUuYGRfBjTwNrb4eaeguKa85cj+en0feJqdGCF\n HCwrsS3yIjE2gUqvk0D70K18NItUaLoePIRQGewWoCbevEE82z/HuGDr82YMFs2kVYFKa2KcuHQ\n l4YjFL1Crazt1w=","X-Received":"by 2002:a05:600c:c118:b0:488:7a24:9ddf with SMTP id\n 5b1f17b1804b1-488fb79ca52mr2147335e9.28.1776375140392;\n Thu, 16 Apr 2026 14:32:20 -0700 (PDT)","Message-ID":"<edb437fa-66b4-43f2-bf88-1ccf8ea5d3e9@linaro.org>","Date":"Thu, 16 Apr 2026 23:32:18 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v5 8/9] hw/hexagon: Define hexagon \"virt\" machine","Content-Language":"en-US","To":"Brian Cain <brian.cain@oss.qualcomm.com>, qemu-devel@nongnu.org","Cc":"ltaylorsimpson@gmail.com, matheus.bernardino@oss.qualcomm.com,\n marco.liebel@oss.qualcomm.com, quic_mburton@quicinc.com,\n sid.manning@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng,\n pierrick.bouvier@oss.qualcomm.com, Brian Cain <bcain@quicinc.com>,\n Paolo Bonzini <pbonzini@redhat.com>, Kevin Wolf <kwolf@redhat.com>,\n Hanna Reitz <hreitz@redhat.com>,\n \"open list:Block layer core\" <qemu-block@nongnu.org>","References":"<20260416210305.2255579-1-brian.cain@oss.qualcomm.com>\n <20260416210305.2255579-9-brian.cain@oss.qualcomm.com>","From":"=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","In-Reply-To":"<20260416210305.2255579-9-brian.cain@oss.qualcomm.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::330;\n envelope-from=philmd@linaro.org; helo=mail-wm1-x330.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}},{"id":3678487,"web_url":"http://patchwork.ozlabs.org/comment/3678487/","msgid":"<649073ae-7135-47df-a3d7-fd032b1a5fc1@linaro.org>","list_archive_url":null,"date":"2026-04-17T05:47:55","subject":"Re: [PATCH v5 8/9] hw/hexagon: Define hexagon \"virt\" machine","submitter":{"id":85046,"url":"http://patchwork.ozlabs.org/api/people/85046/","name":"Philippe Mathieu-Daudé","email":"philmd@linaro.org"},"content":"On 16/4/26 23:32, Philippe Mathieu-Daudé wrote:\n> On 16/4/26 23:03, Brian Cain wrote:\n>> From: Brian Cain <bcain@quicinc.com>\n>>\n>> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>\n>> ---\n>>   configs/devices/hexagon-softmmu/default.mak |   1 +\n>>   configs/targets/hexagon-softmmu.mak         |   1 +\n>>   include/hw/hexagon/virt.h                   |  43 ++\n>>   hw/hexagon/virt.c                           | 456 ++++++++++++++++++++\n>>   target/hexagon/cpu.c                        |   2 +\n>>   hw/hexagon/Kconfig                          |  10 +\n>>   hw/hexagon/meson.build                      |   2 +\n>>   tests/qemu-iotests/testenv.py               |   1 +\n>>   8 files changed, 516 insertions(+)\n>>   create mode 100644 include/hw/hexagon/virt.h\n>>   create mode 100644 hw/hexagon/virt.c\n\n\n>> +    gsregs_dev = qdev_new(TYPE_HEXAGON_GLOBALREG);\n>> +    object_property_add_child(OBJECT(ms), \"global-regs\", \n>> OBJECT(gsregs_dev));\n>> +    qdev_prop_set_uint64(gsregs_dev, \"config-table-addr\", m_cfg- \n>> >cfgbase);\n>> +    qdev_prop_set_uint32(gsregs_dev, \"dsp-rev\", v68_rev);\n>> +    sysbus_realize_and_unref(SYS_BUS_DEVICE(gsregs_dev), &error_fatal);\n>> +\n>> +    tlb_dev = qdev_new(TYPE_HEXAGON_TLB);\n> \n> Where is hw/hexagon/hexagon_tlb.h?\n\nFound it in \"part 1/3\":\n\nhttps://lore.kernel.org/qemu-devel/20260401152657.314902-35-brian.cain@oss.qualcomm.com/\n\n> \n>> +    object_property_add_child(OBJECT(ms), \"tlb\", OBJECT(tlb_dev));\n>> +    qdev_prop_set_uint32(tlb_dev, \"num-entries\",\n>> +                         m_cfg->cfgtable.jtlb_size_entries);\n>> +    sysbus_realize_and_unref(SYS_BUS_DEVICE(tlb_dev), &error_fatal);","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=k+2doz6d;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxkT46fqDz1yD3\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 15:48:39 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wDc3f-00062T-Py; Fri, 17 Apr 2026 01:48:03 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1wDc3d-00061e-GX\n for qemu-devel@nongnu.org; Fri, 17 Apr 2026 01:48:01 -0400","from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1wDc3b-0008TL-HR\n for qemu-devel@nongnu.org; Fri, 17 Apr 2026 01:48:01 -0400","by mail-wr1-x42b.google.com with SMTP id\n ffacd0b85a97d-43fe3e22e33so146391f8f.0\n for <qemu-devel@nongnu.org>; Thu, 16 Apr 2026 22:47:58 -0700 (PDT)","from [192.168.69.228] (88-187-86-199.subs.proxad.net.\n [88.187.86.199]) by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43fe4e3a7b4sm1690546f8f.22.2026.04.16.22.47.56\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 16 Apr 2026 22:47:57 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1776404878; x=1777009678; darn=nongnu.org;\n h=content-transfer-encoding:in-reply-to:references:cc:to:from\n :content-language:subject:user-agent:mime-version:date:message-id\n :from:to:cc:subject:date:message-id:reply-to;\n bh=XXjq9ejdu5k6sUuk7LPq/RN7D4LkGE+7//qIR7WGWBU=;\n b=k+2doz6d1v5h5kHfCOy8emHWz6Gj+32B1/XuSCjC0FLc4W9Nwn3RibuBVIx7OtIKAw\n qnL++OavxdbWcWtMfTG3/6kjOabGz/mK9++pLj4sg+l6ZL/lnHIAMLVGzgqBgwaGzjTw\n kfMkvDKjJBifROxU3kwGdi1TmT5eD+t8FO/RVtXYIZI6UG+teFrUHy54+3ZNQU41pqwV\n HGbql9nG9sikkpbx+PFLwj0MFPEeJrypcs3zmWqnsc0ATveBb/BMfLs2YxCArAJlHgX6\n NFoH9FFU3yeWkjGg3adgEmbRmlWqi49swaRrba0Fw2aiA1CzvbeFePRv2oyD4UfxudUV\n UAMA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776404878; x=1777009678;\n h=content-transfer-encoding:in-reply-to:references:cc:to:from\n :content-language:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=XXjq9ejdu5k6sUuk7LPq/RN7D4LkGE+7//qIR7WGWBU=;\n b=qym+D4fMNVAc36Yp54RGYEqQeie0ByFspKPwDjSqiBum0Z0SG5uTWVuTBOD7fWOzsk\n +t1LH9ZGYbW5iz3BetFazPQGR80Z8UVzNdMr5nRqW8I884vcYfPtgQCqDM6dM6/o74kh\n iPG313v6jRlssYzW1oanjxdIoe+3YRW87/QWt2IvFP6t3pzUSX0VYvu06vVmTztACcn2\n wXNRbpuOFPSWqyIm4Rtyri7eRkjOC3jbiyWI+CZy2qg5dpRbGgMa0eKLJHUxM0RkFB78\n rjmNH9BL9ZMo/iV3EA72tPYZW1Cik28KhkEJ9ksQ6qjhkrFg4/+Jx4e51RCT4u8CEPnK\n DcyQ==","X-Forwarded-Encrypted":"i=1;\n AFNElJ8vM4SeJ6hRR2stzJhvLy087AcG9Cvauc1EBJNz4KVxZIEaDDa+HxR16oCoPO4ueMbhmo8k9EfDPaR5@nongnu.org","X-Gm-Message-State":"AOJu0YyLS1viQ/aAV+lknH+DX8iAFBZahfGZfaGnb7NoI9iiQmmLdQKS\n OdvdF9QOZP7XzOJeJ5aEmgFvJk0eae/+XbLqNmZX0bCFEmcVAAjuIYwE6Ztl521icDU=","X-Gm-Gg":"AeBDiev3wVZbE1k0df7CQQ+aXLglsmFmoOBJPDdOUyL81py3tTf+uJE+i/s+bPLhAxf\n N9TZsPxv44xDCctZMlHlf3nemuWtwnJCzNBFuUjYaa9KRzLGMRPvy8ErBhI+E8S/2PSJa5BCAOD\n 6e/8wFQnVgFnxQTsb+Cbn4AAMAm07hSDM2H1ix9fIeMAc12ocxK6KBy2NPauD00QoM5jfdvuBVS\n hFLMmzZjq/zgRzX9UvGOVu/QyD1M5gp/R5MFt+qAhCmBPR23QRADkFKsEiNMNvbUfxTbGlgNhGj\n TMNt1KazNlaC1g75BKe0ALZ1EVs1TKOSNUXD9enYh6jvraQWlIUCjLLe9YIdIAli0itgzjChs5o\n yMXNuN33l8FL6uU/l1anK+y4wJOedq1/FwOVhWGfOU/M4nejO5fQO/sYKgovbACVGf4ajRncQyE\n 4NcOqHs9Yfo94yUOrrcyivHCyGA4kfLzkmtmf0CYDAwS6vkSjuNVmBvD7BZ3NsL1R2hIXr/P10e\n 5lo","X-Received":"by 2002:a05:6000:2307:b0:43b:3e40:2223 with SMTP id\n ffacd0b85a97d-43fe3dcc52cmr1822448f8f.19.1776404877625;\n Thu, 16 Apr 2026 22:47:57 -0700 (PDT)","Message-ID":"<649073ae-7135-47df-a3d7-fd032b1a5fc1@linaro.org>","Date":"Fri, 17 Apr 2026 07:47:55 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v5 8/9] hw/hexagon: Define hexagon \"virt\" machine","Content-Language":"en-US","From":"=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","To":"Brian Cain <brian.cain@oss.qualcomm.com>, qemu-devel@nongnu.org","Cc":"ltaylorsimpson@gmail.com, matheus.bernardino@oss.qualcomm.com,\n marco.liebel@oss.qualcomm.com, quic_mburton@quicinc.com,\n sid.manning@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng,\n pierrick.bouvier@oss.qualcomm.com, Brian Cain <bcain@quicinc.com>,\n Paolo Bonzini <pbonzini@redhat.com>, Kevin Wolf <kwolf@redhat.com>,\n Hanna Reitz <hreitz@redhat.com>,\n \"open list:Block layer core\" <qemu-block@nongnu.org>","References":"<20260416210305.2255579-1-brian.cain@oss.qualcomm.com>\n <20260416210305.2255579-9-brian.cain@oss.qualcomm.com>\n <edb437fa-66b4-43f2-bf88-1ccf8ea5d3e9@linaro.org>","In-Reply-To":"<edb437fa-66b4-43f2-bf88-1ccf8ea5d3e9@linaro.org>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::42b;\n envelope-from=philmd@linaro.org; helo=mail-wr1-x42b.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}},{"id":3679432,"web_url":"http://patchwork.ozlabs.org/comment/3679432/","msgid":"<20260420145536.1198387-1-matheus.bernardino@oss.qualcomm.com>","list_archive_url":null,"date":"2026-04-20T14:55:36","subject":"Re: [PATCH v5 8/9] hw/hexagon: Define hexagon \"virt\" machine","submitter":{"id":90606,"url":"http://patchwork.ozlabs.org/api/people/90606/","name":"Matheus Tavares Bernardino","email":"matheus.bernardino@oss.qualcomm.com"},"content":"On Thu, 16 Apr 2026 14:03:04 -0700 Brian Cain <brian.cain@oss.qualcomm.com> wrote:\n>\n> diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c\n> new file mode 100644\n> index 00000000000..ff93b5221ba\n> --- /dev/null\n> +++ b/hw/hexagon/virt.c\n> @@ -0,0 +1,456 @@\n> +/*\n> + * Hexagon virt emulation\n> + *\n> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.\n> + * SPDX-License-Identifier: GPL-2.0-or-later\n> + */\n> +\n> +#include \"qemu/osdep.h\"\n> +#include \"qapi/error.h\"\n> +#include \"hw/hexagon/virt.h\"\n> +#include \"elf.h\"\n> +#include \"hw/char/pl011.h\"\n> +#include \"hw/core/clock.h\"\n> +#include \"hw/core/sysbus-fdt.h\"\n> +#include \"hw/hexagon/hexagon.h\"\n> +#include \"hw/hexagon/hexagon_globalreg.h\"\n> +#include \"hw/hexagon/hexagon_tlb.h\"\n> +#include \"hw/core/loader.h\"\n> +#include \"hw/core/qdev-properties.h\"\n> +#include \"hw/core/qdev-clock.h\"\n> +#include \"hw/core/register.h\"\n> +#include \"qemu/error-report.h\"\n> +#include \"qemu/guest-random.h\"\n> +#include \"qemu/units.h\"\n> +#include \"elf.h\"\n\nnit: elf.h was already included above\n\n> +#include \"machine_cfg_v68n_1024.h.inc\"\n> +#include \"system/address-spaces.h\"\n> +#include \"system/device_tree.h\"\n> +#include \"system/reset.h\"\n> +#include \"system/system.h\"\n> +#include <libfdt.h>\n> +\n[...]\n> +static void fdt_add_hvx(HexagonVirtMachineState *vms,\n> +                        const struct hexagon_machine_config *m_cfg,\n> +                        Error **errp)\n> +{\n> +    const MachineState *ms = MACHINE(vms);\n> +    uint32_t vtcm_size_bytes = m_cfg->cfgtable.vtcm_size_kb * 1024;\n> +    if (vtcm_size_bytes > 0) {\n> +        memory_region_init_ram(&vms->vtcm, NULL, \"vtcm.ram\", vtcm_size_bytes,\n> +                               errp);\n\nI was going to ask whether we should handle errp here and abort earlier, but\nfdt_add_hvx is always called with error_fatal, so that's fine. (I wonder, though,\nshould we remove \"Error **errp\" from the function signature and use error_abort\nhere directly, for clarity and future-proof?)\n\n> +        memory_region_add_subregion(vms->sys, m_cfg->cfgtable.vtcm_base << 16,\n> +                                    &vms->vtcm);\n> +\n> +        qemu_fdt_add_subnode(ms->fdt, \"/soc/vtcm\");\n> +        qemu_fdt_setprop_string(ms->fdt, \"/soc/vtcm\", \"compatible\",\n> +                                \"qcom,hexagon_vtcm\");\n> +\n> +        assert(sizeof(m_cfg->cfgtable.vtcm_base) == sizeof(uint32_t));\n> +        qemu_fdt_setprop_cells(ms->fdt, \"/soc/vtcm\", \"reg\", 0,\n> +                               m_cfg->cfgtable.vtcm_base << 16,\n> +                               vtcm_size_bytes);\n> +    }\n> +\n> +    if (m_cfg->cfgtable.ext_contexts > 0) {\n> +        qemu_fdt_add_subnode(ms->fdt, \"/soc/hvx\");\n> +        qemu_fdt_setprop_string(ms->fdt, \"/soc/hvx\", \"compatible\",\n> +                                \"qcom,hexagon-hvx\");\n> +        qemu_fdt_setprop_cells(ms->fdt, \"/soc/hvx\", \"qcom,hvx-max-ctxts\",\n> +                               m_cfg->cfgtable.ext_contexts);\n> +        qemu_fdt_setprop_cells(ms->fdt, \"/soc/hvx\", \"qcom,hvx-vlength\",\n> +                               m_cfg->cfgtable.hvx_vec_log_length);\n> +    }\n> +}","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=HLaQiydq;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=hd8vTXzV;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fzpTr5KF8z1yD4\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 00:56:31 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wEq2S-0001vy-ME; Mon, 20 Apr 2026 10:55:52 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <matheus.bernardino@oss.qualcomm.com>)\n id 1wEq2M-0001uB-Fg\n for qemu-devel@nongnu.org; Mon, 20 Apr 2026 10:55:46 -0400","from mx0a-0031df01.pphosted.com ([205.220.168.131])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <matheus.bernardino@oss.qualcomm.com>)\n id 1wEq2I-0006dR-US\n for qemu-devel@nongnu.org; Mon, 20 Apr 2026 10:55:46 -0400","from pps.filterd (m0279862.ppops.net [127.0.0.1])\n by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63K9mWuJ3925734\n for <qemu-devel@nongnu.org>; Mon, 20 Apr 2026 14:55:40 GMT","from mail-dy1-f197.google.com (mail-dy1-f197.google.com\n [74.125.82.197])\n by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dnhu9s28m-1\n (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n for <qemu-devel@nongnu.org>; Mon, 20 Apr 2026 14:55:40 +0000 (GMT)","by mail-dy1-f197.google.com with SMTP id\n 5a478bee46e88-2b81ff82e3cso2487682eec.0\n for <qemu-devel@nongnu.org>; Mon, 20 Apr 2026 07:55:40 -0700 (PDT)","from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com.\n [129.46.96.20]) by smtp.gmail.com with ESMTPSA id\n a92af1059eb24-12c837f7feasm12104230c88.0.2026.04.20.07.55.38\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 20 Apr 2026 07:55:38 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n cc:content-transfer-encoding:date:from:in-reply-to:message-id\n :mime-version:references:subject:to; s=qcppdkim1; bh=3JeLdlwhjC5\n 4DxCiFm7fx3vjy7wODhTTKXC3lfwFwiQ=; b=HLaQiydqj6Jlh3DNeHC13H3dK9p\n ex4iQ5FIAg/4Ym/bnEV96tVg7sOfpCzC8iEp3iEgvpgRiNW4m64Hr92UwzoyJv/e\n KtOcnaG1/seQmi46HMHNCIoUsSUWrII1QEYqkkxU6VMBZn+DG0sbKqNgmSVmi5E9\n RGqsoI+honBIR+nRySCMqDUmgiDqjbQ3rcW828/DhiLuVnx7Xwwt61rhMHIvvBBP\n r5l+/8ooPw+uFrkV1An0+X66PX7GgEwh3IO+fWuNWg1yiqcyaF0WYNTZuq2PCDmk\n bHRbRURmeqall6heF4VIAICOm3xEky5wXEyXhIZHGLAJiZBTXHOA7B7dIJA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1776696940; x=1777301740; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=3JeLdlwhjC54DxCiFm7fx3vjy7wODhTTKXC3lfwFwiQ=;\n b=hd8vTXzVNMC6ja/dI44yQEG3spvHHXTsUMAB7mWx4QGPIHb74qWaUzCcxFz/BzWu0J\n SuXzP6skrjNnJ60Jy7O4S04m2IrWImDd+uPhDN4CCmL664N5heJ+u9Ohke0JD8QV6lqG\n HFOAjqUV/VPp4hnymx+zsW0PAzTl3s9HzZWFIkGGZ96YVcYRXa0vpdbQCBvkkNFOTsAv\n P1dbNJHArs5HiDoTNUC8vTOAqHNPa2NHSyVSremxxyBV3NLBd8snef9ddGlOqkKxbpQi\n iCn8OHc+J9Jh7LIDGiuCjXLB+dYRC4j7i8TVOi2w3QLwL9gGWvKi1jn3iEB1kUqfiR1x\n S/Rg=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776696940; x=1777301740;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=3JeLdlwhjC54DxCiFm7fx3vjy7wODhTTKXC3lfwFwiQ=;\n b=dL4GGSYyhySYhyvaEFfce6//VvD7fZ3As0xIyW+80SoRmLwqostjP6msQ6PCJp4ujw\n qYLf3kyzJT6dJ8+bdEcXxrERYKeYI1vfjROP4vMIZ4SrB1Rt/bCC2StT0klQO4I8kpoD\n H36z8zawv+m9fAF1W2DHda0WAKUKse3yOcHY3yI0GqSSNvZKdXXpx6dW0qEzPYuzGjrS\n WWDkbq8x5n+XP8+Q9Tb32UjEkQzfSZoryP512T5vjBD7lKseX6TfL1xkUeEkmCjDAITZ\n mAU7fFOFpbL/yFg2QvipMtp/wYJAnZtDoua7CkNoaiVMp1NL3JNwxo/UxxEGOUGZ0gft\n F/kg==","X-Gm-Message-State":"AOJu0YyGGnSWtQCjkSVmb2icISi37Ix1X92SZZtv949iZ9ojVh5Hd8pz\n 93X0VZ9BFFEmI7lv9akkB8N2R07uvSLBD0Xh41FndaLADMkBmjpuxK4HENFn75uC9GSZ3+d7XWq\n 3u30aRRb9aNq9pHj9XylwpMmeNf4d63bcE0q/NKpM8S8MeIeGHRfIFmkPww==","X-Gm-Gg":"AeBDieuadbDTmfDtkdhaug6MM//wrbq33Exg+FlleUCaviVjH2O/PjU74qWR/l6I4Yu\n 68X3UuQULXpEhxEDHqvmnOpKDtck8EJ2Xh0xCzqfveFO7GP6whXUbvy2ldwsBJOo+zpZAIMMH9D\n t0Iqk/ztsJr3zzY1gyVd8yQFTplizexNl9cIJtr0ksoemoRGp5HD6b7lBBFRGXTOIeFojKEa54Y\n woUsJgNlQUsEV67d5wZ+WZHBV4NphO2AoDR9DRR5ddvgwXpNQn5zIA459BTqWHAchLTmaGZ9R1w\n OkruXMwhJ7mK5lhWiSEsIDwHGSPmLrc/rjgF20HKzyiLIqjuMX83RxYEHZhZ0qPc7qPW8S5Miix\n UXh1c/3WUdVREChWEzt7M4216sA+fywaL+hJ3ufS9jcIjfhxfTNLWVFfefA3gsuxZC3Km2xeQyJ\n +dwWnG2Vd6jTo04kw/P9o=","X-Received":["by 2002:a05:7022:48f:b0:11b:2a5:3b9b with SMTP id\n a92af1059eb24-12c73afd10bmr6121963c88.8.1776696939597;\n Mon, 20 Apr 2026 07:55:39 -0700 (PDT)","by 2002:a05:7022:48f:b0:11b:2a5:3b9b with SMTP id\n a92af1059eb24-12c73afd10bmr6121934c88.8.1776696939021;\n Mon, 20 Apr 2026 07:55:39 -0700 (PDT)"],"From":"Matheus Tavares Bernardino <matheus.bernardino@oss.qualcomm.com>","To":"brian.cain@oss.qualcomm.com","Cc":"qemu-devel@nongnu.org, philmd@linaro.org, ltaylorsimpson@gmail.com,\n matheus.bernardino@oss.qualcomm.com, marco.liebel@oss.qualcomm.com,\n quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com, ale@rev.ng,\n anjo@rev.ng, pierrick.bouvier@oss.qualcomm.com, bcain@quicinc.com,\n pbonzini@redhat.com, kwolf@redhat.com, hreitz@redhat.com,\n qemu-block@nongnu.org","Subject":"Re: [PATCH v5 8/9] hw/hexagon: Define hexagon \"virt\" machine","Date":"Mon, 20 Apr 2026 07:55:36 -0700","Message-Id":"<20260420145536.1198387-1-matheus.bernardino@oss.qualcomm.com>","X-Mailer":"git-send-email 2.37.2","In-Reply-To":"<20260416210305.2255579-9-brian.cain@oss.qualcomm.com>","References":"<20260416210305.2255579-9-brian.cain@oss.qualcomm.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDIwMDE0NCBTYWx0ZWRfX6fbJ79+UusPQ\n YlhwqxbY7Fazjvb4B/5hsZkJ21Taz5Gnuv88doP6lxVaMsoZSps8d8Dizc2dw9/qd6Ip32zwBkf\n 37Xc86er9E2uoz7SBrWJG3rxPmd7xQvEmjV1G9wp5t4wGhonKbnJlv4RNTN/XItfYSmAkGqPQ0w\n wBqdxD67hZ89R9T1pMI05G8mJA/d8zLE0uDKH9ToVSZhUkeOLkR0vySK/UlLJodqV0/iHTvwyI6\n is8lANZ/o9B5LQfYUK45Nvjqwvi7s3t071p+M5eO6izfppPQZbENqM8b5bTtuRzJwyQfndzxP8R\n 3KvckltO7KwLwuaFMWrHvW09MFnFutnwUkbN/0y3mMt+SAAHcqWVdygyrSGO7rNJH6M2nluQsBG\n 5oWWqe7M5hdjBFoDSkLhYQ9DsXdew2K8LJrLS/kyxpS/FNgi6E/2Y+k7q4n5ruksfmRaaZXeBNE\n K45k7BJ32WC4fYdkb6w==","X-Authority-Analysis":"v=2.4 cv=IIoyzAvG c=1 sm=1 tr=0 ts=69e63e6c cx=c_pps\n a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17\n a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8\n a=4QKhv830yg8YpbWl3Z8A:9 a=PxkB5W3o20Ba91AHUih5:22","X-Proofpoint-GUID":"TKyOlQRXbD1q7AmQNKHs4tX0f8JQlGRC","X-Proofpoint-ORIG-GUID":"TKyOlQRXbD1q7AmQNKHs4tX0f8JQlGRC","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-20_03,2026-04-20_02,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n adultscore=0 spamscore=0 bulkscore=0 phishscore=0 lowpriorityscore=0\n malwarescore=0 clxscore=1015 priorityscore=1501 impostorscore=0\n suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604070000\n definitions=main-2604200144","Received-SPF":"pass client-ip=205.220.168.131;\n envelope-from=matheus.bernardino@oss.qualcomm.com;\n helo=mx0a-0031df01.pphosted.com","X-Spam_score_int":"-27","X-Spam_score":"-2.8","X-Spam_bar":"--","X-Spam_report":"(-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}},{"id":3680082,"web_url":"http://patchwork.ozlabs.org/comment/3680082/","msgid":"<3a88f4f4-01c5-4db4-ac0e-0d9b76fa86b9@linaro.org>","list_archive_url":null,"date":"2026-04-21T22:05:29","subject":"Re: [PATCH v5 8/9] hw/hexagon: Define hexagon \"virt\" machine","submitter":{"id":85046,"url":"http://patchwork.ozlabs.org/api/people/85046/","name":"Philippe Mathieu-Daudé","email":"philmd@linaro.org"},"content":"On 20/4/26 16:55, Matheus Tavares Bernardino wrote:\n> On Thu, 16 Apr 2026 14:03:04 -0700 Brian Cain <brian.cain@oss.qualcomm.com> wrote:\n>>\n>> diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c\n>> new file mode 100644\n>> index 00000000000..ff93b5221ba\n>> --- /dev/null\n>> +++ b/hw/hexagon/virt.c\n>> @@ -0,0 +1,456 @@\n>> +/*\n>> + * Hexagon virt emulation\n>> + *\n>> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.\n>> + * SPDX-License-Identifier: GPL-2.0-or-later\n>> + */\n>> +\n>> +#include \"qemu/osdep.h\"\n>> +#include \"qapi/error.h\"\n>> +#include \"hw/hexagon/virt.h\"\n>> +#include \"elf.h\"\n>> +#include \"hw/char/pl011.h\"\n>> +#include \"hw/core/clock.h\"\n>> +#include \"hw/core/sysbus-fdt.h\"\n>> +#include \"hw/hexagon/hexagon.h\"\n>> +#include \"hw/hexagon/hexagon_globalreg.h\"\n>> +#include \"hw/hexagon/hexagon_tlb.h\"\n>> +#include \"hw/core/loader.h\"\n>> +#include \"hw/core/qdev-properties.h\"\n>> +#include \"hw/core/qdev-clock.h\"\n>> +#include \"hw/core/register.h\"\n>> +#include \"qemu/error-report.h\"\n>> +#include \"qemu/guest-random.h\"\n>> +#include \"qemu/units.h\"\n>> +#include \"elf.h\"\n> \n> nit: elf.h was already included above\n> \n>> +#include \"machine_cfg_v68n_1024.h.inc\"\n>> +#include \"system/address-spaces.h\"\n>> +#include \"system/device_tree.h\"\n>> +#include \"system/reset.h\"\n>> +#include \"system/system.h\"\n>> +#include <libfdt.h>\n>> +\n> [...]\n>> +static void fdt_add_hvx(HexagonVirtMachineState *vms,\n>> +                        const struct hexagon_machine_config *m_cfg,\n>> +                        Error **errp)\n>> +{\n>> +    const MachineState *ms = MACHINE(vms);\n>> +    uint32_t vtcm_size_bytes = m_cfg->cfgtable.vtcm_size_kb * 1024;\n>> +    if (vtcm_size_bytes > 0) {\n>> +        memory_region_init_ram(&vms->vtcm, NULL, \"vtcm.ram\", vtcm_size_bytes,\n>> +                               errp);\n> \n> I was going to ask whether we should handle errp here and abort earlier, but\n> fdt_add_hvx is always called with error_fatal, so that's fine. (I wonder, though,\n> should we remove \"Error **errp\" from the function signature and use error_abort\n> here directly, for clarity and future-proof?)\n\nThe current \"unchecked &errp because single use in function\" isn't\ngreat because we could easily add a 2nd use (like another\nmemory_region_init_ram call) and overwrite the first &errp, ignoring\nerrors. So with that in mind your suggestion is better IMO.\n\n> \n>> +        memory_region_add_subregion(vms->sys, m_cfg->cfgtable.vtcm_base << 16,\n>> +                                    &vms->vtcm);\n>> +\n>> +        qemu_fdt_add_subnode(ms->fdt, \"/soc/vtcm\");\n>> +        qemu_fdt_setprop_string(ms->fdt, \"/soc/vtcm\", \"compatible\",\n>> +                                \"qcom,hexagon_vtcm\");\n>> +\n>> +        assert(sizeof(m_cfg->cfgtable.vtcm_base) == sizeof(uint32_t));\n>> +        qemu_fdt_setprop_cells(ms->fdt, \"/soc/vtcm\", \"reg\", 0,\n>> +                               m_cfg->cfgtable.vtcm_base << 16,\n>> +                               vtcm_size_bytes);\n>> +    }\n>> +\n>> +    if (m_cfg->cfgtable.ext_contexts > 0) {\n>> +        qemu_fdt_add_subnode(ms->fdt, \"/soc/hvx\");\n>> +        qemu_fdt_setprop_string(ms->fdt, \"/soc/hvx\", \"compatible\",\n>> +                                \"qcom,hexagon-hvx\");\n>> +        qemu_fdt_setprop_cells(ms->fdt, \"/soc/hvx\", \"qcom,hvx-max-ctxts\",\n>> +                               m_cfg->cfgtable.ext_contexts);\n>> +        qemu_fdt_setprop_cells(ms->fdt, \"/soc/hvx\", \"qcom,hvx-vlength\",\n>> +                               m_cfg->cfgtable.hvx_vec_log_length);\n>> +    }\n>> +}","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=TiQxZYl8;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0bz73BDlz1yHB\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 08:06:11 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wFJDx-0000GB-1M; Tue, 21 Apr 2026 18:05:41 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1wFJDt-0000Fv-Cq\n for qemu-devel@nongnu.org; Tue, 21 Apr 2026 18:05:39 -0400","from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1wFJDq-0003Vl-4d\n for qemu-devel@nongnu.org; Tue, 21 Apr 2026 18:05:37 -0400","by mail-wr1-x42d.google.com with SMTP id\n ffacd0b85a97d-43d73352cf2so3951943f8f.1\n for <qemu-devel@nongnu.org>; Tue, 21 Apr 2026 15:05:33 -0700 (PDT)","from [192.168.69.210] (88-187-86-199.subs.proxad.net.\n [88.187.86.199]) by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43fe4e59f97sm45074923f8f.37.2026.04.21.15.05.29\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Tue, 21 Apr 2026 15:05:30 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1776809132; x=1777413932; darn=nongnu.org;\n h=content-transfer-encoding:in-reply-to:from:references:cc:to\n :content-language:subject:user-agent:mime-version:date:message-id\n :from:to:cc:subject:date:message-id:reply-to;\n bh=gkpsAIulqbgPPMzrQyDI5fyUTTUwuUJAvACIgetKr9M=;\n b=TiQxZYl8sAKyMrW5AO2PntOFNVeBp6hcud0htBHCWUaVNddLRU8w/Uei944L4TC83h\n +aKCaXColRJIhpsgpyrIVdCAf4cSDwaE+EeFTJopsCO4un7uWGGfEv/0Sm+YDPYMnGJN\n sf9CbttSZrjfn7j0FXWL0e16+WxtKWtp36sfTqKGrdducThcKPhXtjtqTthpPuwkfd6q\n QID6eeOdJujksIU5nJ4V1Gdb4MRyqwbMRF1eclj8jf/DVzpM2tylBVxFLqbzfpsEbh7D\n 30CM5oc8JdgH8k2UawHp2tl3WVCeIkignzSACZDh+2MvtzD7abElKbcOO6qnQhzpyTc4\n S2eQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776809132; x=1777413932;\n h=content-transfer-encoding:in-reply-to:from:references:cc:to\n :content-language:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=gkpsAIulqbgPPMzrQyDI5fyUTTUwuUJAvACIgetKr9M=;\n b=TVPlecVYbEG5+AzTI/Wjkw++hEk7cy6SZQpeN+T4BEgreuj8FqWLhiPZjHBQw4tly/\n bBJDhsQY2QauSdWqhg9DxgDlRrjUacuxb9b1zJRzS8AuMz+lCA/H8zizvbeRk2ghwRhl\n Ixz5PMy0JnK6qdP+98DF4QRGG8dlxDf1X0u4U3FYf7c/hZYCqv4xPobrH7filS4jI13Y\n ri/Izg+/AN0L5w6qX0JSFxjvh/hoAWgPBNb3UAYl9y0jpZTqgYTqSE25bqu8VgWO9EXx\n iYr6kQOLFCOovMRRV3n3xioX66D6S/PPhjVqJzooXRCnEgvLCUzV+JEKPiTHPP3C8Zwy\n AnYQ==","X-Gm-Message-State":"AOJu0Yw47Hv5XiVKstY4r7YG8wmf700CebLkM7fGIxwKIvAKvk3dMzY0\n FbmnZ0UXpSaaP2F6jNif9yGc1DhJj5Es1voJXHuyrmWQJMZywMMNgS1juZEnH0EwxE0=","X-Gm-Gg":"AeBDies2y5a0crowOMHNyAQ0yefIsFwOvjtxBn5+Y+p7Dq5OZ3Wj3xSu+pTbBYcuk7l\n 5iaU8FGNZ7aEHggf+T+yHg8PxQ1b+DqEt045ZF+tcxBACqg/p8DM/PpQKfieypzV1QXBuMi/dKA\n V8HZ82nkYqe20j3Im5wO3A+oeCL0IkoAr3PEUoUuGwRIbbordZajw0v5Lq1wNV7fBC36WTBbGHA\n RwrBIR29Q/CActNg3QVywhrorR067YyIXE3dfEfFvT2Ffov3jnLjLKH0AcYGzszC1x8j3pGqjK/\n NfZaCB4r7PKzWyohHLrpnlte8VKrDTloPyxE4HeaESjEBuftaK1/GGRaTJA3qCFb1GpWnOAnysC\n cOfBLA14eHUe6JDW1nak+oAfzQSHh7QMsXJsFsmnfRMZlFqxeUXdnGE+baJu8s7XvB4RTCkISy/\n DYS0GfSQ2EWpS49mbMLLUjg0LuZ2IIs1Ct6Khwgk0/25nL1cBUCiRjPtum4R6Msi++N021csiLg\n bfhKWyMR8WM6cA=","X-Received":"by 2002:a05:6000:1a8d:b0:43c:f28b:8863 with SMTP id\n ffacd0b85a97d-43fe3dc7998mr31156349f8f.13.1776809131505;\n Tue, 21 Apr 2026 15:05:31 -0700 (PDT)","Message-ID":"<3a88f4f4-01c5-4db4-ac0e-0d9b76fa86b9@linaro.org>","Date":"Wed, 22 Apr 2026 00:05:29 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v5 8/9] hw/hexagon: Define hexagon \"virt\" machine","Content-Language":"en-US","To":"Matheus Tavares Bernardino <matheus.bernardino@oss.qualcomm.com>,\n brian.cain@oss.qualcomm.com","Cc":"qemu-devel@nongnu.org, ltaylorsimpson@gmail.com,\n marco.liebel@oss.qualcomm.com, quic_mburton@quicinc.com,\n sid.manning@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng,\n pierrick.bouvier@oss.qualcomm.com, bcain@quicinc.com, pbonzini@redhat.com,\n kwolf@redhat.com, hreitz@redhat.com, qemu-block@nongnu.org","References":"<20260416210305.2255579-9-brian.cain@oss.qualcomm.com>\n <20260420145536.1198387-1-matheus.bernardino@oss.qualcomm.com>","From":"=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","In-Reply-To":"<20260420145536.1198387-1-matheus.bernardino@oss.qualcomm.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::42d;\n envelope-from=philmd@linaro.org; helo=mail-wr1-x42d.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}},{"id":3680085,"web_url":"http://patchwork.ozlabs.org/comment/3680085/","msgid":"<62ff0065-b504-4f2c-93ef-745d00326e52@linaro.org>","list_archive_url":null,"date":"2026-04-21T22:10:27","subject":"Re: [PATCH v5 8/9] hw/hexagon: Define hexagon \"virt\" machine","submitter":{"id":85046,"url":"http://patchwork.ozlabs.org/api/people/85046/","name":"Philippe Mathieu-Daudé","email":"philmd@linaro.org"},"content":"On 16/4/26 23:03, Brian Cain wrote:\n> From: Brian Cain <bcain@quicinc.com>\n> \n> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>\n> ---\n>   configs/devices/hexagon-softmmu/default.mak |   1 +\n>   configs/targets/hexagon-softmmu.mak         |   1 +\n>   include/hw/hexagon/virt.h                   |  43 ++\n>   hw/hexagon/virt.c                           | 456 ++++++++++++++++++++\n>   target/hexagon/cpu.c                        |   2 +\n>   hw/hexagon/Kconfig                          |  10 +\n>   hw/hexagon/meson.build                      |   2 +\n>   tests/qemu-iotests/testenv.py               |   1 +\n>   8 files changed, 516 insertions(+)\n>   create mode 100644 include/hw/hexagon/virt.h\n>   create mode 100644 hw/hexagon/virt.c\n\n\n> diff --git a/include/hw/hexagon/virt.h b/include/hw/hexagon/virt.h\n> new file mode 100644\n> index 00000000000..a54eac5cf00\n> --- /dev/null\n> +++ b/include/hw/hexagon/virt.h\n> @@ -0,0 +1,43 @@\n> +/*\n> + * Definitions for hexagon virt board.\n> + *\n> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.\n> + * SPDX-License-Identifier: GPL-2.0-or-later\n> + */\n> +\n> +#ifndef HW_HEXAGONVIRT_H\n> +#define HW_HEXAGONVIRT_H\n> +\n> +#include \"hw/core/boards.h\"\n> +#include \"target/hexagon/cpu.h\"\n> +\n> +struct HexagonVirtMachineState {\n> +    /*< private >*/\n> +    MachineState parent_obj;\n> +\n> +    int fdt_size;\n> +    MemoryRegion *sys;\n> +    MemoryRegion cfgtable;\n> +    MemoryRegion ram;\n> +    MemoryRegion tcm;\n> +    MemoryRegion vtcm;\n> +    MemoryRegion bios;\n> +    DeviceState *l2vic;\n> +    Clock *apb_clk;\n> +};\n\n\n> +#define TYPE_HEXAGON_VIRT_MACHINE MACHINE_TYPE_NAME(\"virt\")\n> +OBJECT_DECLARE_SIMPLE_TYPE(HexagonVirtMachineState, HEXAGON_VIRT_MACHINE)\n> +\n> +#endif /* HW_HEXAGONVIRT_H */\n> diff --git a/hw/hexagon/virt.c b/hw/hexagon/virt.c\n> new file mode 100644\n> index 00000000000..ff93b5221ba\n> --- /dev/null\n> +++ b/hw/hexagon/virt.c\n\n\n> +static int32_t irq_hvm_ic_phandle = -1;\n\nWhy not store in HexagonVirtMachineState?\n\n> +static void fdt_add_hvm_pic_node(HexagonVirtMachineState *vms,\n> +                                 const struct hexagon_machine_config *m_cfg)\n> +{\n> +    MachineState *ms = MACHINE(vms);\n> +    irq_hvm_ic_phandle = qemu_fdt_alloc_phandle(ms->fdt);\n> +\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/soc\", \"interrupt-parent\",\n> +                          irq_hvm_ic_phandle);\n> +\n> +    qemu_fdt_add_subnode(ms->fdt, \"/soc/interrupt-controller\");\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/soc/interrupt-controller\",\n> +                          \"#address-cells\", 2);\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/soc/interrupt-controller\",\n> +                          \"#interrupt-cells\", 2);\n> +    qemu_fdt_setprop_string(ms->fdt, \"/soc/interrupt-controller\", \"compatible\",\n> +                            \"qcom,h2-pic,hvm-pic\");\n> +    qemu_fdt_setprop(ms->fdt, \"/soc/interrupt-controller\",\n> +                     \"interrupt-controller\", NULL, 0);\n> +    qemu_fdt_setprop_cell(ms->fdt, \"/soc/interrupt-controller\", \"phandle\",\n> +                          irq_hvm_ic_phandle);\n> +\n> +    sysbus_mmio_map(SYS_BUS_DEVICE(vms->l2vic), 1,\n> +                    m_cfg->cfgtable.fastl2vic_base << 16);\n> +}","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=TEXpB1mS;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0c4Z3g86z1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 08:10:54 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wFJIg-0001pu-OW; Tue, 21 Apr 2026 18:10:34 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1wFJIe-0001pd-Uj\n for qemu-devel@nongnu.org; Tue, 21 Apr 2026 18:10:32 -0400","from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1wFJId-0004o5-3P\n for qemu-devel@nongnu.org; Tue, 21 Apr 2026 18:10:32 -0400","by mail-wr1-x42c.google.com with SMTP id\n ffacd0b85a97d-43d734223e4so3259519f8f.0\n for <qemu-devel@nongnu.org>; Tue, 21 Apr 2026 15:10:30 -0700 (PDT)","from [192.168.69.210] (88-187-86-199.subs.proxad.net.\n [88.187.86.199]) by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-4411c9f4f03sm11321010f8f.1.2026.04.21.15.10.28\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Tue, 21 Apr 2026 15:10:28 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1776809429; x=1777414229; darn=nongnu.org;\n h=content-transfer-encoding:in-reply-to:from:references:cc:to\n :content-language:subject:user-agent:mime-version:date:message-id\n :from:to:cc:subject:date:message-id:reply-to;\n bh=hBfp111kzpsEJBN7X1qv7RTDfkwE+yPkYWE/nlf8OXs=;\n b=TEXpB1mSHcxFghajkC3v/YXA6OOskzOGtgWkET76AXYpqSxBCQ+2SNzYveK/iLQCDR\n Fi6SbpIEi4+mvgIM/5UI4+SOpPU2njcIvAxSlLkPTyEtY0xfAhdL+Caj0IhoM5DeJueP\n CS1a4TgTW9e4EZgXvkG8pW/CNrkTUskYxD3bfyl0kC2mLtYlSU9etghik8hFaYKYOlI3\n 97o2Fy1ZWlqDl+4OL19mm4cV88VUz0UDjyKxSFuLVNEZ27X/AFvoUQUk/7/lXPO0UFTo\n sr9+Zk2xkTzujYkaIZ0JvRSk30lyPmYfwiImxXkXpD3PQSyEJUv3fKn8GTLLg6dny7FS\n qJmg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776809429; x=1777414229;\n h=content-transfer-encoding:in-reply-to:from:references:cc:to\n :content-language:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=hBfp111kzpsEJBN7X1qv7RTDfkwE+yPkYWE/nlf8OXs=;\n b=smQFHf5jeDp4zCQMxDbaUeuMkjd8uxfp2oSePqO3C1nKrNz+5DVbj/xaefjpxjwV6F\n EmiVxM4wnubAt7qJfOJp8uVsybmKaRNKPHbZ7HlPDARhYTJilawAow67/ULbZIyRBQqB\n HzdzF8Xy2Zz/FHq8XsN4tFnCLd1HPTeY1BsOlngzD9Qf55dm/ZguTs+XDPy9UsNQU+DB\n lutNtNyj0AfOJuceSGDzu4zo4hqxb7vRqBgLI69MmkZy2I6bFLbpAO0BzQAf0NfA7viP\n hBGJjgY2TkFaKl5wj9tIEI0JrW6LDBr9xez6dBLYB4S98tIjNdk6QnEFTv4JRI/+9c4T\n AncQ==","X-Forwarded-Encrypted":"i=1;\n AFNElJ+MXDmNv1GpzKHUS79rbO9imjPCqO1Ps+FodZAQW6h04tOSO2Xi0W9va9QXjHrqwyalyYSL0qNLOeQA@nongnu.org","X-Gm-Message-State":"AOJu0YyQTqqcYHu0LxIWJ7j+A9WHGhWNMSCeKeBGhj63C70OqL2MQNGL\n xIze4HwHRR9FJeJvg3sIU9z5e9m3lTsk/p0p1MMJzxdD35G7wDPnDhNYi3EALR26W4M=","X-Gm-Gg":"AeBDiesdkLtrLxFb2QRwJDJdDJVRbLAProvP4PU7LK6U5538nAEJyPyJZ7ZH057idR3\n s/Ith7v8mIJKOOtOqcdR8c61gcqCkqEmkjAeOQSzXkPyrI09YPqPmUKh4bQ6vjpI30elYZBZmI8\n TJoBwBzjbX9d2CNeM5fCym8tdK2YYlZlc9LOiGMJAmtefgjuFEJD2yUSKEX85bbfaNEJOxOOjJ/\n fmrG32/NSyTqMO+KRaoB7DQDuWsPsw1X+HIPhA5Rsyc0eY6ULXgD7N/0nLjmuss0ZyEQx5Oua9h\n wS/2CUmyeh+SHTZfJWjo9cti2b6ecepPpT9MnNmYtBpIxkEH1xlpC2xrZvQXtt5tPNDoieuV6Z9\n wHbWU6Lm7KLRgsXg0zALAoVKBMuw8eCZiFBjuz/pF6qT7Ca+3lvKwmzd5Ojg/SwB6ft0Z8ufIXv\n fnIHh98Hspuul5BpEWbfLl2h0oIse0212emjILE6ALUlgX3wwiBvmvh3hjIaC9l4Pyw+sht9bTM\n P1Z","X-Received":"by 2002:a05:6000:2883:b0:441:23d2:5aa9 with SMTP id\n ffacd0b85a97d-44123d25b20mr2174169f8f.8.1776809429303;\n Tue, 21 Apr 2026 15:10:29 -0700 (PDT)","Message-ID":"<62ff0065-b504-4f2c-93ef-745d00326e52@linaro.org>","Date":"Wed, 22 Apr 2026 00:10:27 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v5 8/9] hw/hexagon: Define hexagon \"virt\" machine","Content-Language":"en-US","To":"Brian Cain <brian.cain@oss.qualcomm.com>, qemu-devel@nongnu.org","Cc":"ltaylorsimpson@gmail.com, matheus.bernardino@oss.qualcomm.com,\n marco.liebel@oss.qualcomm.com, quic_mburton@quicinc.com,\n sid.manning@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng,\n pierrick.bouvier@oss.qualcomm.com, Brian Cain <bcain@quicinc.com>,\n Paolo Bonzini <pbonzini@redhat.com>, Kevin Wolf <kwolf@redhat.com>,\n Hanna Reitz <hreitz@redhat.com>,\n \"open list:Block layer core\" <qemu-block@nongnu.org>","References":"<20260416210305.2255579-1-brian.cain@oss.qualcomm.com>\n <20260416210305.2255579-9-brian.cain@oss.qualcomm.com>","From":"=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","In-Reply-To":"<20260416210305.2255579-9-brian.cain@oss.qualcomm.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::42c;\n envelope-from=philmd@linaro.org; helo=mail-wr1-x42c.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]