mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
* Functional tests improvements
* Endianness improvements/clean-ups for the Microblaze machines * Remove obsolete -2.4 and -2.5 i440fx and q35 machine types and related code -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmg5mlARHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbX1eRAAjvTK4noIfzc9QQI7EyUafgdp65m44wwx vfjlLbhmEnWFF11Qhovc6o36N4zF4Pt30mbXZs0gQaDR5H9RT8wrg9kShirhZX3O 4raPHCJFBviUCktSg90eFtvuQnfVK9cBMB8PMRQix+V5wRXcCx+cc6ebnQZ+UHp4 L2d+qKRoHCPRO/dvQth4Be7a5pXqFQeu4gq7i/w9PCa7O+akSM3lc8dsJPuCiXgQ R7dkwsrRQzmiEC6aDmauNpsRRs0yptQs+9b83V4moLX07hk/R/I59EDFQqALLim7 jmSbLnulKSSCeatV54PE/K4QxT62iA2OuJ6wo/vzVBGpzLdKE4aq99OcNPDxwWi0 wc6xVDNtMyr81Ex4pZ0WgVKt57tDBIp9RijB5wTAhRPqKgnHtRGVNqX9TrsFls5L jIyKgfTxFKf9RA/a53p3uUXNmpLDVG63AhA9jWrAUtGOGJ0V+cDD2hTygXai8XTS 66aiEdMiuPFV2fApaEftcySFrMoT7RG1JHlcMjsTOpRdZF/x+rehFQKOHcdBeJ6r /zJ18MXbd5vEcglBz8joPwHu3mt2NLew+IvLPoAlwMfrniiNnUC+IY2Jzz3jYpBI WbbaesVG7J8SzJ6SwNOVuiCbiAImOkrxEz/8Jm783sZvWSzLYmwI9bBp9KXVxGty ed14fLi8g5U= =8SJJ -----END PGP SIGNATURE----- Merge tag 'pull-request-2025-05-30' of https://gitlab.com/thuth/qemu into staging * Functional tests improvements * Endianness improvements/clean-ups for the Microblaze machines * Remove obsolete -2.4 and -2.5 i440fx and q35 machine types and related code # -----BEGIN PGP SIGNATURE----- # # iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmg5mlARHHRodXRoQHJl # ZGhhdC5jb20ACgkQLtnXdP5wLbX1eRAAjvTK4noIfzc9QQI7EyUafgdp65m44wwx # vfjlLbhmEnWFF11Qhovc6o36N4zF4Pt30mbXZs0gQaDR5H9RT8wrg9kShirhZX3O # 4raPHCJFBviUCktSg90eFtvuQnfVK9cBMB8PMRQix+V5wRXcCx+cc6ebnQZ+UHp4 # L2d+qKRoHCPRO/dvQth4Be7a5pXqFQeu4gq7i/w9PCa7O+akSM3lc8dsJPuCiXgQ # R7dkwsrRQzmiEC6aDmauNpsRRs0yptQs+9b83V4moLX07hk/R/I59EDFQqALLim7 # jmSbLnulKSSCeatV54PE/K4QxT62iA2OuJ6wo/vzVBGpzLdKE4aq99OcNPDxwWi0 # wc6xVDNtMyr81Ex4pZ0WgVKt57tDBIp9RijB5wTAhRPqKgnHtRGVNqX9TrsFls5L # jIyKgfTxFKf9RA/a53p3uUXNmpLDVG63AhA9jWrAUtGOGJ0V+cDD2hTygXai8XTS # 66aiEdMiuPFV2fApaEftcySFrMoT7RG1JHlcMjsTOpRdZF/x+rehFQKOHcdBeJ6r # /zJ18MXbd5vEcglBz8joPwHu3mt2NLew+IvLPoAlwMfrniiNnUC+IY2Jzz3jYpBI # WbbaesVG7J8SzJ6SwNOVuiCbiAImOkrxEz/8Jm783sZvWSzLYmwI9bBp9KXVxGty # ed14fLi8g5U= # =8SJJ # -----END PGP SIGNATURE----- # gpg: Signature made Fri 30 May 2025 07:45:20 EDT # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * tag 'pull-request-2025-05-30' of https://gitlab.com/thuth/qemu: (25 commits) tests/unit/test-util-sockets: fix mem-leak on error object hw/net/vmxnet3: Merge DeviceRealize in InstanceInit hw/net/vmxnet3: Remove VMXNET3_COMPAT_FLAG_DISABLE_PCIE definition hw/net/vmxnet3: Remove VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS definition hw/scsi/vmw_pvscsi: Convert DeviceRealize -> InstanceInit hw/scsi/vmw_pvscsi: Remove PVSCSI_COMPAT_DISABLE_PCIE_BIT definition hw/scsi/vmw_pvscsi: Remove PVSCSI_COMPAT_OLD_PCI_CONFIGURATION definition hw/core/machine: Remove hw_compat_2_5[] array hw/nvram/fw_cfg: Remove legacy FW_CFG_ORDER_OVERRIDE hw/i386/x86: Remove X86MachineClass::save_tsc_khz field hw/i386/pc: Remove deprecated pc-q35-2.5 and pc-i440fx-2.5 machines hw/virtio/virtio-pci: Remove VIRTIO_PCI_FLAG_DISABLE_PCIE definition hw/virtio/virtio-pci: Remove VIRTIO_PCI_FLAG_MIGRATE_EXTRA definition hw/net/e1000: Remove unused E1000_FLAG_MAC flag hw/core/machine: Remove hw_compat_2_4[] array hw/i386/pc: Remove pc_compat_2_4[] array hw/i386/pc: Remove PCMachineClass::broken_reserved_end field hw/i386/pc: Remove deprecated pc-q35-2.4 and pc-i440fx-2.4 machines docs: Deprecate the qemu-system-microblazeel binary hw/microblaze: Remove the big-endian variants of ml605 and xlnx-zynqmp-pmu ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
107215089d
31 changed files with 197 additions and 510 deletions
|
@ -315,12 +315,6 @@ deprecated; use the new name ``dtb-randomness`` instead. The new name
|
|||
better reflects the way this property affects all random data within
|
||||
the device tree blob, not just the ``kaslr-seed`` node.
|
||||
|
||||
Big-Endian variants of MicroBlaze ``petalogix-ml605`` and ``xlnx-zynqmp-pmu`` machines (since 9.2)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
Both ``petalogix-ml605`` and ``xlnx-zynqmp-pmu`` were added for little endian
|
||||
CPUs. Big endian support is not tested.
|
||||
|
||||
Mips ``mipssim`` machine (since 10.0)
|
||||
'''''''''''''''''''''''''''''''''''''
|
||||
|
||||
|
@ -351,6 +345,19 @@ machine must ensure that they're setting the ``spike`` machine in the
|
|||
command line (``-M spike``).
|
||||
|
||||
|
||||
System emulator binaries
|
||||
------------------------
|
||||
|
||||
``qemu-system-microblazeel`` (since 10.1)
|
||||
'''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The ``qemu-system-microblaze`` binary can emulate little-endian machines
|
||||
now, too, so the separate binary ``qemu-system-microblazeel`` (with the
|
||||
``el`` suffix) for little-endian targets is not required anymore. The
|
||||
``petalogix-s3adsp1800`` machine can now be switched to little endian by
|
||||
setting its ``endianness`` property to ``little``.
|
||||
|
||||
|
||||
Backend options
|
||||
---------------
|
||||
|
||||
|
|
|
@ -1091,6 +1091,15 @@ This machine was removed because PPC 405 CPU have no known users,
|
|||
firmware images are not available, OpenWRT dropped support in 2019,
|
||||
U-Boot in 2017, and Linux in 2024.
|
||||
|
||||
Big-Endian variants of ``petalogix-ml605`` and ``xlnx-zynqmp-pmu`` machines (removed in 10.1)
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
Both the MicroBlaze ``petalogix-ml605`` and ``xlnx-zynqmp-pmu`` machines
|
||||
were added for little endian CPUs. Big endian support was never tested
|
||||
and likely never worked. Starting with QEMU v10.1, the machines are now
|
||||
only available as little-endian machines.
|
||||
|
||||
|
||||
linux-user mode CPUs
|
||||
--------------------
|
||||
|
||||
|
|
|
@ -1333,20 +1333,6 @@ void rom_set_fw(FWCfgState *f)
|
|||
fw_cfg = f;
|
||||
}
|
||||
|
||||
void rom_set_order_override(int order)
|
||||
{
|
||||
if (!fw_cfg)
|
||||
return;
|
||||
fw_cfg_set_order_override(fw_cfg, order);
|
||||
}
|
||||
|
||||
void rom_reset_order_override(void)
|
||||
{
|
||||
if (!fw_cfg)
|
||||
return;
|
||||
fw_cfg_reset_order_override(fw_cfg);
|
||||
}
|
||||
|
||||
void rom_transaction_begin(void)
|
||||
{
|
||||
Rom *rom;
|
||||
|
|
|
@ -285,24 +285,6 @@ GlobalProperty hw_compat_2_6[] = {
|
|||
};
|
||||
const size_t hw_compat_2_6_len = G_N_ELEMENTS(hw_compat_2_6);
|
||||
|
||||
GlobalProperty hw_compat_2_5[] = {
|
||||
{ "isa-fdc", "fallback", "144" },
|
||||
{ "pvscsi", "x-old-pci-configuration", "on" },
|
||||
{ "pvscsi", "x-disable-pcie", "on" },
|
||||
{ "vmxnet3", "x-old-msi-offsets", "on" },
|
||||
{ "vmxnet3", "x-disable-pcie", "on" },
|
||||
};
|
||||
const size_t hw_compat_2_5_len = G_N_ELEMENTS(hw_compat_2_5);
|
||||
|
||||
GlobalProperty hw_compat_2_4[] = {
|
||||
{ "e1000", "extra_mac_registers", "off" },
|
||||
{ "virtio-pci", "x-disable-pcie", "on" },
|
||||
{ "virtio-pci", "migrate-extra", "off" },
|
||||
{ "fw_cfg_mem", "dma_enabled", "off" },
|
||||
{ "fw_cfg_io", "dma_enabled", "off" }
|
||||
};
|
||||
const size_t hw_compat_2_4_len = G_N_ELEMENTS(hw_compat_2_4);
|
||||
|
||||
MachineState *current_machine;
|
||||
|
||||
static char *machine_get_kernel(Object *obj, Error **errp)
|
||||
|
|
42
hw/i386/pc.c
42
hw/i386/pc.c
|
@ -260,28 +260,6 @@ GlobalProperty pc_compat_2_6[] = {
|
|||
};
|
||||
const size_t pc_compat_2_6_len = G_N_ELEMENTS(pc_compat_2_6);
|
||||
|
||||
GlobalProperty pc_compat_2_5[] = {};
|
||||
const size_t pc_compat_2_5_len = G_N_ELEMENTS(pc_compat_2_5);
|
||||
|
||||
GlobalProperty pc_compat_2_4[] = {
|
||||
PC_CPU_MODEL_IDS("2.4.0")
|
||||
{ "Haswell-" TYPE_X86_CPU, "abm", "off" },
|
||||
{ "Haswell-noTSX-" TYPE_X86_CPU, "abm", "off" },
|
||||
{ "Broadwell-" TYPE_X86_CPU, "abm", "off" },
|
||||
{ "Broadwell-noTSX-" TYPE_X86_CPU, "abm", "off" },
|
||||
{ "host" "-" TYPE_X86_CPU, "host-cache-info", "on" },
|
||||
{ TYPE_X86_CPU, "check", "off" },
|
||||
{ "qemu64" "-" TYPE_X86_CPU, "sse4a", "on" },
|
||||
{ "qemu64" "-" TYPE_X86_CPU, "abm", "on" },
|
||||
{ "qemu64" "-" TYPE_X86_CPU, "popcnt", "on" },
|
||||
{ "qemu32" "-" TYPE_X86_CPU, "popcnt", "on" },
|
||||
{ "Opteron_G2" "-" TYPE_X86_CPU, "rdtscp", "on" },
|
||||
{ "Opteron_G3" "-" TYPE_X86_CPU, "rdtscp", "on" },
|
||||
{ "Opteron_G4" "-" TYPE_X86_CPU, "rdtscp", "on" },
|
||||
{ "Opteron_G5" "-" TYPE_X86_CPU, "rdtscp", "on", }
|
||||
};
|
||||
const size_t pc_compat_2_4_len = G_N_ELEMENTS(pc_compat_2_4);
|
||||
|
||||
/*
|
||||
* @PC_FW_DATA:
|
||||
* Size of the chunk of memory at the top of RAM for the BIOS ACPI tables
|
||||
|
@ -1002,14 +980,13 @@ void pc_memory_init(PCMachineState *pcms,
|
|||
|
||||
if (machine->device_memory) {
|
||||
uint64_t *val = g_malloc(sizeof(*val));
|
||||
uint64_t res_mem_end = machine->device_memory->base;
|
||||
|
||||
if (!pcmc->broken_reserved_end) {
|
||||
res_mem_end += memory_region_size(&machine->device_memory->mr);
|
||||
}
|
||||
uint64_t res_mem_end;
|
||||
|
||||
if (pcms->cxl_devices_state.is_enabled) {
|
||||
res_mem_end = cxl_resv_end;
|
||||
} else {
|
||||
res_mem_end = machine->device_memory->base
|
||||
+ memory_region_size(&machine->device_memory->mr);
|
||||
}
|
||||
*val = cpu_to_le64(ROUND_UP(res_mem_end, 1 * GiB));
|
||||
fw_cfg_add_file(fw_cfg, "etc/reserved-memory-end", val, sizeof(*val));
|
||||
|
@ -1047,9 +1024,7 @@ uint64_t pc_pci_hole64_start(void)
|
|||
hole64_start = pc_get_cxl_range_end(pcms);
|
||||
} else if (pcmc->has_reserved_memory && (ms->ram_size < ms->maxram_size)) {
|
||||
pc_get_device_memory_range(pcms, &hole64_start, &size);
|
||||
if (!pcmc->broken_reserved_end) {
|
||||
hole64_start += size;
|
||||
}
|
||||
hole64_start += size;
|
||||
} else {
|
||||
hole64_start = pc_above_4g_end(pcms);
|
||||
}
|
||||
|
@ -1061,7 +1036,6 @@ DeviceState *pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus)
|
|||
{
|
||||
DeviceState *dev = NULL;
|
||||
|
||||
rom_set_order_override(FW_CFG_ORDER_OVERRIDE_VGA);
|
||||
if (pci_bus) {
|
||||
PCIDevice *pcidev = pci_vga_init(pci_bus);
|
||||
dev = pcidev ? &pcidev->qdev : NULL;
|
||||
|
@ -1069,7 +1043,7 @@ DeviceState *pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus)
|
|||
ISADevice *isadev = isa_vga_init(isa_bus);
|
||||
dev = isadev ? DEVICE(isadev) : NULL;
|
||||
}
|
||||
rom_reset_order_override();
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
|
@ -1259,8 +1233,6 @@ void pc_nic_init(PCMachineClass *pcmc, ISABus *isa_bus, PCIBus *pci_bus)
|
|||
bool default_is_ne2k = g_str_equal(mc->default_nic, TYPE_ISA_NE2000);
|
||||
NICInfo *nd;
|
||||
|
||||
rom_set_order_override(FW_CFG_ORDER_OVERRIDE_NIC);
|
||||
|
||||
while ((nd = qemu_find_nic_info(TYPE_ISA_NE2000, default_is_ne2k, NULL))) {
|
||||
pc_init_ne2k_isa(isa_bus, nd, &error_fatal);
|
||||
}
|
||||
|
@ -1269,8 +1241,6 @@ void pc_nic_init(PCMachineClass *pcmc, ISABus *isa_bus, PCIBus *pci_bus)
|
|||
if (pci_bus) {
|
||||
pci_init_nic_devices(pci_bus, mc->default_nic);
|
||||
}
|
||||
|
||||
rom_reset_order_override();
|
||||
}
|
||||
|
||||
void pc_i8259_create(ISABus *isa_bus, qemu_irq *i8259_irqs)
|
||||
|
|
|
@ -778,32 +778,6 @@ static void pc_i440fx_machine_2_6_options(MachineClass *m)
|
|||
|
||||
DEFINE_I440FX_MACHINE(2, 6);
|
||||
|
||||
static void pc_i440fx_machine_2_5_options(MachineClass *m)
|
||||
{
|
||||
X86MachineClass *x86mc = X86_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_machine_2_6_options(m);
|
||||
x86mc->save_tsc_khz = false;
|
||||
m->legacy_fw_cfg_order = 1;
|
||||
compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(2, 5);
|
||||
|
||||
static void pc_i440fx_machine_2_4_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_machine_2_5_options(m);
|
||||
m->hw_version = "2.4.0";
|
||||
pcmc->broken_reserved_end = true;
|
||||
compat_props_add(m->compat_props, hw_compat_2_4, hw_compat_2_4_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_4, pc_compat_2_4_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(2, 4);
|
||||
|
||||
#ifdef CONFIG_ISAPC
|
||||
static void isapc_machine_options(MachineClass *m)
|
||||
{
|
||||
|
|
|
@ -672,29 +672,3 @@ static void pc_q35_machine_2_6_options(MachineClass *m)
|
|||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(2, 6);
|
||||
|
||||
static void pc_q35_machine_2_5_options(MachineClass *m)
|
||||
{
|
||||
X86MachineClass *x86mc = X86_MACHINE_CLASS(m);
|
||||
|
||||
pc_q35_machine_2_6_options(m);
|
||||
x86mc->save_tsc_khz = false;
|
||||
m->legacy_fw_cfg_order = 1;
|
||||
compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(2, 5);
|
||||
|
||||
static void pc_q35_machine_2_4_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_q35_machine_2_5_options(m);
|
||||
m->hw_version = "2.4.0";
|
||||
pcmc->broken_reserved_end = true;
|
||||
compat_props_add(m->compat_props, hw_compat_2_4, hw_compat_2_4_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_4, pc_compat_2_4_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(2, 4);
|
||||
|
|
|
@ -382,7 +382,6 @@ static void x86_machine_class_init(ObjectClass *oc, const void *data)
|
|||
mc->get_default_cpu_node_id = x86_get_default_cpu_node_id;
|
||||
mc->possible_cpu_arch_ids = x86_possible_cpu_arch_ids;
|
||||
mc->kvm_type = x86_kvm_type;
|
||||
x86mc->save_tsc_khz = true;
|
||||
x86mc->fwcfg_dma_enabled = true;
|
||||
nc->nmi_monitor_handler = x86_nmi;
|
||||
|
||||
|
|
|
@ -80,8 +80,6 @@ petalogix_ml605_init(MachineState *machine)
|
|||
MemoryRegion *phys_lmb_bram = g_new(MemoryRegion, 1);
|
||||
MemoryRegion *phys_ram = g_new(MemoryRegion, 1);
|
||||
qemu_irq irq[32];
|
||||
EndianMode endianness = TARGET_BIG_ENDIAN ? ENDIAN_MODE_BIG
|
||||
: ENDIAN_MODE_LITTLE;
|
||||
|
||||
/* init CPUs */
|
||||
cpu = MICROBLAZE_CPU(object_new(TYPE_MICROBLAZE_CPU));
|
||||
|
@ -113,7 +111,7 @@ petalogix_ml605_init(MachineState *machine)
|
|||
|
||||
|
||||
dev = qdev_new("xlnx.xps-intc");
|
||||
qdev_prop_set_enum(dev, "endianness", endianness);
|
||||
qdev_prop_set_enum(dev, "endianness", ENDIAN_MODE_LITTLE);
|
||||
qdev_prop_set_uint32(dev, "kind-of-intr", 1 << TIMER_IRQ);
|
||||
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, INTC_BASEADDR);
|
||||
|
@ -129,7 +127,7 @@ petalogix_ml605_init(MachineState *machine)
|
|||
|
||||
/* 2 timers at irq 2 @ 100 Mhz. */
|
||||
dev = qdev_new("xlnx.xps-timer");
|
||||
qdev_prop_set_enum(dev, "endianness", endianness);
|
||||
qdev_prop_set_enum(dev, "endianness", ENDIAN_MODE_LITTLE);
|
||||
qdev_prop_set_uint32(dev, "one-timer-only", 0);
|
||||
qdev_prop_set_uint32(dev, "clock-frequency", 100 * 1000000);
|
||||
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
|
||||
|
@ -177,7 +175,7 @@ petalogix_ml605_init(MachineState *machine)
|
|||
SSIBus *spi;
|
||||
|
||||
dev = qdev_new("xlnx.xps-spi");
|
||||
qdev_prop_set_enum(dev, "endianness", endianness);
|
||||
qdev_prop_set_enum(dev, "endianness", ENDIAN_MODE_LITTLE);
|
||||
qdev_prop_set_uint8(dev, "num-ss-bits", NUM_SPI_FLASHES);
|
||||
busdev = SYS_BUS_DEVICE(dev);
|
||||
sysbus_realize_and_unref(busdev, &error_fatal);
|
||||
|
@ -218,12 +216,7 @@ petalogix_ml605_init(MachineState *machine)
|
|||
|
||||
static void petalogix_ml605_machine_init(MachineClass *mc)
|
||||
{
|
||||
if (TARGET_BIG_ENDIAN) {
|
||||
mc->desc = "PetaLogix linux refdesign for xilinx ml605 (big endian)";
|
||||
mc->deprecation_reason = "big endian support is not tested";
|
||||
} else {
|
||||
mc->desc = "PetaLogix linux refdesign for xilinx ml605 (little endian)";
|
||||
}
|
||||
mc->desc = "PetaLogix linux refdesign for xilinx ml605 (little endian)";
|
||||
mc->init = petalogix_ml605_init;
|
||||
}
|
||||
|
||||
|
|
|
@ -58,9 +58,20 @@
|
|||
#define TYPE_PETALOGIX_S3ADSP1800_MACHINE \
|
||||
MACHINE_TYPE_NAME("petalogix-s3adsp1800")
|
||||
|
||||
struct S3Adsp1800MachineState {
|
||||
MachineState parent_class;
|
||||
|
||||
EndianMode endianness;
|
||||
};
|
||||
|
||||
OBJECT_DECLARE_TYPE(S3Adsp1800MachineState, MachineClass,
|
||||
PETALOGIX_S3ADSP1800_MACHINE)
|
||||
|
||||
|
||||
static void
|
||||
petalogix_s3adsp1800_init(MachineState *machine)
|
||||
{
|
||||
S3Adsp1800MachineState *psms = PETALOGIX_S3ADSP1800_MACHINE(machine);
|
||||
ram_addr_t ram_size = machine->ram_size;
|
||||
DeviceState *dev;
|
||||
MicroBlazeCPU *cpu;
|
||||
|
@ -71,13 +82,12 @@ petalogix_s3adsp1800_init(MachineState *machine)
|
|||
MemoryRegion *phys_ram = g_new(MemoryRegion, 1);
|
||||
qemu_irq irq[32];
|
||||
MemoryRegion *sysmem = get_system_memory();
|
||||
EndianMode endianness = TARGET_BIG_ENDIAN ? ENDIAN_MODE_BIG
|
||||
: ENDIAN_MODE_LITTLE;
|
||||
EndianMode endianness = psms->endianness;
|
||||
|
||||
cpu = MICROBLAZE_CPU(object_new(TYPE_MICROBLAZE_CPU));
|
||||
object_property_set_str(OBJECT(cpu), "version", "7.10.d", &error_abort);
|
||||
object_property_set_bool(OBJECT(cpu), "little-endian",
|
||||
!TARGET_BIG_ENDIAN, &error_abort);
|
||||
endianness == ENDIAN_MODE_LITTLE, &error_abort);
|
||||
qdev_realize(DEVICE(cpu), NULL, &error_abort);
|
||||
|
||||
/* Attach emulated BRAM through the LMB. */
|
||||
|
@ -135,20 +145,41 @@ petalogix_s3adsp1800_init(MachineState *machine)
|
|||
|
||||
create_unimplemented_device("xps_gpio", GPIO_BASEADDR, 0x10000);
|
||||
|
||||
microblaze_load_kernel(cpu, !TARGET_BIG_ENDIAN, ddr_base, ram_size,
|
||||
machine->initrd_filename,
|
||||
microblaze_load_kernel(cpu, endianness == ENDIAN_MODE_LITTLE, ddr_base,
|
||||
ram_size, machine->initrd_filename,
|
||||
BINARY_DEVICE_TREE_FILE,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static int machine_get_endianness(Object *obj, Error **errp G_GNUC_UNUSED)
|
||||
{
|
||||
S3Adsp1800MachineState *ms = PETALOGIX_S3ADSP1800_MACHINE(obj);
|
||||
return ms->endianness;
|
||||
}
|
||||
|
||||
static void machine_set_endianness(Object *obj, int endianness, Error **errp)
|
||||
{
|
||||
S3Adsp1800MachineState *ms = PETALOGIX_S3ADSP1800_MACHINE(obj);
|
||||
ms->endianness = endianness;
|
||||
}
|
||||
|
||||
static void petalogix_s3adsp1800_machine_class_init(ObjectClass *oc,
|
||||
const void *data)
|
||||
{
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
ObjectProperty *prop;
|
||||
|
||||
mc->desc = "PetaLogix linux refdesign for xilinx Spartan 3ADSP1800";
|
||||
mc->init = petalogix_s3adsp1800_init;
|
||||
mc->is_default = true;
|
||||
|
||||
prop = object_class_property_add_enum(oc, "endianness", "EndianMode",
|
||||
&EndianMode_lookup,
|
||||
machine_get_endianness,
|
||||
machine_set_endianness);
|
||||
object_property_set_default_str(prop, TARGET_BIG_ENDIAN ? "big" : "little");
|
||||
object_class_property_set_description(oc, "endianness",
|
||||
"Defines whether the machine runs in big or little endian mode");
|
||||
}
|
||||
|
||||
static const TypeInfo petalogix_s3adsp1800_machine_types[] = {
|
||||
|
@ -156,6 +187,7 @@ static const TypeInfo petalogix_s3adsp1800_machine_types[] = {
|
|||
.name = TYPE_PETALOGIX_S3ADSP1800_MACHINE,
|
||||
.parent = TYPE_MACHINE,
|
||||
.class_init = petalogix_s3adsp1800_machine_class_init,
|
||||
.instance_size = sizeof(S3Adsp1800MachineState),
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -181,12 +181,7 @@ static void xlnx_zynqmp_pmu_init(MachineState *machine)
|
|||
|
||||
static void xlnx_zynqmp_pmu_machine_init(MachineClass *mc)
|
||||
{
|
||||
if (TARGET_BIG_ENDIAN) {
|
||||
mc->desc = "Xilinx ZynqMP PMU machine (big endian)";
|
||||
mc->deprecation_reason = "big endian support is not tested";
|
||||
} else {
|
||||
mc->desc = "Xilinx ZynqMP PMU machine (little endian)";
|
||||
}
|
||||
mc->desc = "Xilinx ZynqMP PMU machine (little endian)";
|
||||
mc->init = xlnx_zynqmp_pmu_init;
|
||||
}
|
||||
|
||||
|
|
|
@ -127,10 +127,8 @@ struct E1000State_st {
|
|||
QEMUTimer *flush_queue_timer;
|
||||
|
||||
/* Compatibility flags for migration to/from qemu 1.3.0 and older */
|
||||
#define E1000_FLAG_MAC_BIT 2
|
||||
#define E1000_FLAG_TSO_BIT 3
|
||||
#define E1000_FLAG_VET_BIT 4
|
||||
#define E1000_FLAG_MAC (1 << E1000_FLAG_MAC_BIT)
|
||||
#define E1000_FLAG_TSO (1 << E1000_FLAG_TSO_BIT)
|
||||
#define E1000_FLAG_VET (1 << E1000_FLAG_VET_BIT)
|
||||
|
||||
|
@ -1212,52 +1210,51 @@ enum { NWRITEOPS = ARRAY_SIZE(macreg_writeops) };
|
|||
|
||||
enum { MAC_ACCESS_PARTIAL = 1, MAC_ACCESS_FLAG_NEEDED = 2 };
|
||||
|
||||
#define markflag(x) ((E1000_FLAG_##x << 2) | MAC_ACCESS_FLAG_NEEDED)
|
||||
/* In the array below the meaning of the bits is: [f|f|f|f|f|f|n|p]
|
||||
* f - flag bits (up to 6 possible flags)
|
||||
* n - flag needed
|
||||
* p - partially implenented */
|
||||
* p - partially implemented */
|
||||
static const uint8_t mac_reg_access[0x8000] = {
|
||||
[IPAV] = markflag(MAC), [WUC] = markflag(MAC),
|
||||
[IP6AT] = markflag(MAC), [IP4AT] = markflag(MAC),
|
||||
[FFVT] = markflag(MAC), [WUPM] = markflag(MAC),
|
||||
[ECOL] = markflag(MAC), [MCC] = markflag(MAC),
|
||||
[DC] = markflag(MAC), [TNCRS] = markflag(MAC),
|
||||
[RLEC] = markflag(MAC), [XONRXC] = markflag(MAC),
|
||||
[XOFFTXC] = markflag(MAC), [RFC] = markflag(MAC),
|
||||
[TSCTFC] = markflag(MAC), [MGTPRC] = markflag(MAC),
|
||||
[WUS] = markflag(MAC), [AIT] = markflag(MAC),
|
||||
[FFLT] = markflag(MAC), [FFMT] = markflag(MAC),
|
||||
[SCC] = markflag(MAC), [FCRUC] = markflag(MAC),
|
||||
[LATECOL] = markflag(MAC), [COLC] = markflag(MAC),
|
||||
[SEQEC] = markflag(MAC), [CEXTERR] = markflag(MAC),
|
||||
[XONTXC] = markflag(MAC), [XOFFRXC] = markflag(MAC),
|
||||
[RJC] = markflag(MAC), [RNBC] = markflag(MAC),
|
||||
[MGTPDC] = markflag(MAC), [MGTPTC] = markflag(MAC),
|
||||
[RUC] = markflag(MAC), [ROC] = markflag(MAC),
|
||||
[GORCL] = markflag(MAC), [GORCH] = markflag(MAC),
|
||||
[GOTCL] = markflag(MAC), [GOTCH] = markflag(MAC),
|
||||
[BPRC] = markflag(MAC), [MPRC] = markflag(MAC),
|
||||
[TSCTC] = markflag(MAC), [PRC64] = markflag(MAC),
|
||||
[PRC127] = markflag(MAC), [PRC255] = markflag(MAC),
|
||||
[PRC511] = markflag(MAC), [PRC1023] = markflag(MAC),
|
||||
[PRC1522] = markflag(MAC), [PTC64] = markflag(MAC),
|
||||
[PTC127] = markflag(MAC), [PTC255] = markflag(MAC),
|
||||
[PTC511] = markflag(MAC), [PTC1023] = markflag(MAC),
|
||||
[PTC1522] = markflag(MAC), [MPTC] = markflag(MAC),
|
||||
[BPTC] = markflag(MAC),
|
||||
[IPAV] = MAC_ACCESS_FLAG_NEEDED, [WUC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[IP6AT] = MAC_ACCESS_FLAG_NEEDED, [IP4AT] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[FFVT] = MAC_ACCESS_FLAG_NEEDED, [WUPM] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[ECOL] = MAC_ACCESS_FLAG_NEEDED, [MCC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[DC] = MAC_ACCESS_FLAG_NEEDED, [TNCRS] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[RLEC] = MAC_ACCESS_FLAG_NEEDED, [XONRXC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[XOFFTXC] = MAC_ACCESS_FLAG_NEEDED, [RFC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[TSCTFC] = MAC_ACCESS_FLAG_NEEDED, [MGTPRC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[WUS] = MAC_ACCESS_FLAG_NEEDED, [AIT] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[FFLT] = MAC_ACCESS_FLAG_NEEDED, [FFMT] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[SCC] = MAC_ACCESS_FLAG_NEEDED, [FCRUC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[LATECOL] = MAC_ACCESS_FLAG_NEEDED, [COLC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[SEQEC] = MAC_ACCESS_FLAG_NEEDED, [CEXTERR] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[XONTXC] = MAC_ACCESS_FLAG_NEEDED, [XOFFRXC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[RJC] = MAC_ACCESS_FLAG_NEEDED, [RNBC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[MGTPDC] = MAC_ACCESS_FLAG_NEEDED, [MGTPTC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[RUC] = MAC_ACCESS_FLAG_NEEDED, [ROC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[GORCL] = MAC_ACCESS_FLAG_NEEDED, [GORCH] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[GOTCL] = MAC_ACCESS_FLAG_NEEDED, [GOTCH] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[BPRC] = MAC_ACCESS_FLAG_NEEDED, [MPRC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[TSCTC] = MAC_ACCESS_FLAG_NEEDED, [PRC64] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[PRC127] = MAC_ACCESS_FLAG_NEEDED, [PRC255] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[PRC511] = MAC_ACCESS_FLAG_NEEDED, [PRC1023] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[PRC1522] = MAC_ACCESS_FLAG_NEEDED, [PTC64] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[PTC127] = MAC_ACCESS_FLAG_NEEDED, [PTC255] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[PTC511] = MAC_ACCESS_FLAG_NEEDED, [PTC1023] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[PTC1522] = MAC_ACCESS_FLAG_NEEDED, [MPTC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
[BPTC] = MAC_ACCESS_FLAG_NEEDED,
|
||||
|
||||
[TDFH] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[TDFT] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[TDFHS] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[TDFTS] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[TDFPC] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[RDFH] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[RDFT] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[RDFHS] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[RDFTS] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[RDFPC] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[PBM] = markflag(MAC) | MAC_ACCESS_PARTIAL,
|
||||
[TDFH] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
[TDFT] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
[TDFHS] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
[TDFTS] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
[TDFPC] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
[RDFH] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
[RDFT] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
[RDFHS] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
[RDFTS] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
[RDFPC] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
[PBM] = MAC_ACCESS_FLAG_NEEDED | MAC_ACCESS_PARTIAL,
|
||||
};
|
||||
|
||||
static void
|
||||
|
@ -1419,13 +1416,6 @@ static int e1000_tx_tso_post_load(void *opaque, int version_id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool e1000_full_mac_needed(void *opaque)
|
||||
{
|
||||
E1000State *s = opaque;
|
||||
|
||||
return chkflag(MAC);
|
||||
}
|
||||
|
||||
static bool e1000_tso_state_needed(void *opaque)
|
||||
{
|
||||
E1000State *s = opaque;
|
||||
|
@ -1451,7 +1441,6 @@ static const VMStateDescription vmstate_e1000_full_mac_state = {
|
|||
.name = "e1000/full_mac_state",
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.needed = e1000_full_mac_needed,
|
||||
.fields = (const VMStateField[]) {
|
||||
VMSTATE_UINT32_ARRAY(mac_reg, E1000State, 0x8000),
|
||||
VMSTATE_END_OF_LIST()
|
||||
|
@ -1679,8 +1668,6 @@ static void pci_e1000_realize(PCIDevice *pci_dev, Error **errp)
|
|||
|
||||
static const Property e1000_properties[] = {
|
||||
DEFINE_NIC_PROPERTIES(E1000State, conf),
|
||||
DEFINE_PROP_BIT("extra_mac_registers", E1000State,
|
||||
compat_flags, E1000_FLAG_MAC_BIT, true),
|
||||
DEFINE_PROP_BIT("migrate_tso_props", E1000State,
|
||||
compat_flags, E1000_FLAG_TSO_BIT, true),
|
||||
DEFINE_PROP_BIT("init-vet", E1000State,
|
||||
|
|
|
@ -41,19 +41,9 @@
|
|||
#define PCI_DEVICE_ID_VMWARE_VMXNET3_REVISION 0x1
|
||||
#define VMXNET3_MSIX_BAR_SIZE 0x2000
|
||||
|
||||
/* Compatibility flags for migration */
|
||||
#define VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS_BIT 0
|
||||
#define VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS \
|
||||
(1 << VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS_BIT)
|
||||
#define VMXNET3_COMPAT_FLAG_DISABLE_PCIE_BIT 1
|
||||
#define VMXNET3_COMPAT_FLAG_DISABLE_PCIE \
|
||||
(1 << VMXNET3_COMPAT_FLAG_DISABLE_PCIE_BIT)
|
||||
|
||||
#define VMXNET3_EXP_EP_OFFSET (0x48)
|
||||
#define VMXNET3_MSI_OFFSET(s) \
|
||||
((s)->compat_flags & VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS ? 0x50 : 0x84)
|
||||
#define VMXNET3_MSIX_OFFSET(s) \
|
||||
((s)->compat_flags & VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS ? 0 : 0x9c)
|
||||
#define VMXNET3_MSI_OFFSET (0x84)
|
||||
#define VMXNET3_MSIX_OFFSET (0x9c)
|
||||
#define VMXNET3_DSN_OFFSET (0x100)
|
||||
|
||||
#define VMXNET3_BAR0_IDX (0)
|
||||
|
@ -61,8 +51,7 @@
|
|||
#define VMXNET3_MSIX_BAR_IDX (2)
|
||||
|
||||
#define VMXNET3_OFF_MSIX_TABLE (0x000)
|
||||
#define VMXNET3_OFF_MSIX_PBA(s) \
|
||||
((s)->compat_flags & VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS ? 0x800 : 0x1000)
|
||||
#define VMXNET3_OFF_MSIX_PBA (0x1000)
|
||||
|
||||
/* Link speed in Mbps should be shifted by 16 */
|
||||
#define VMXNET3_LINK_SPEED (1000 << 16)
|
||||
|
@ -2122,8 +2111,8 @@ vmxnet3_init_msix(VMXNET3State *s)
|
|||
&s->msix_bar,
|
||||
VMXNET3_MSIX_BAR_IDX, VMXNET3_OFF_MSIX_TABLE,
|
||||
&s->msix_bar,
|
||||
VMXNET3_MSIX_BAR_IDX, VMXNET3_OFF_MSIX_PBA(s),
|
||||
VMXNET3_MSIX_OFFSET(s), NULL);
|
||||
VMXNET3_MSIX_BAR_IDX, VMXNET3_OFF_MSIX_PBA,
|
||||
VMXNET3_MSIX_OFFSET, NULL);
|
||||
|
||||
if (0 > res) {
|
||||
VMW_WRPRN("Failed to initialize MSI-X, error %d", res);
|
||||
|
@ -2221,7 +2210,7 @@ static void vmxnet3_pci_realize(PCIDevice *pci_dev, Error **errp)
|
|||
/* Interrupt pin A */
|
||||
pci_dev->config[PCI_INTERRUPT_PIN] = 0x01;
|
||||
|
||||
ret = msi_init(pci_dev, VMXNET3_MSI_OFFSET(s), VMXNET3_MAX_NMSIX_INTRS,
|
||||
ret = msi_init(pci_dev, VMXNET3_MSI_OFFSET, VMXNET3_MAX_NMSIX_INTRS,
|
||||
VMXNET3_USE_64BIT, VMXNET3_PER_VECTOR_MASK, NULL);
|
||||
/* Any error other than -ENOTSUP(board's MSI support is broken)
|
||||
* is a programming error. Fall back to INTx silently on -ENOTSUP */
|
||||
|
@ -2249,6 +2238,7 @@ static void vmxnet3_instance_init(Object *obj)
|
|||
device_add_bootindex_property(obj, &s->conf.bootindex,
|
||||
"bootindex", "/ethernet-phy@0",
|
||||
DEVICE(obj));
|
||||
PCI_DEVICE(obj)->cap_present |= QEMU_PCI_CAP_EXPRESS;
|
||||
}
|
||||
|
||||
static void vmxnet3_pci_uninit(PCIDevice *pci_dev)
|
||||
|
@ -2472,30 +2462,12 @@ static const VMStateDescription vmstate_vmxnet3 = {
|
|||
|
||||
static const Property vmxnet3_properties[] = {
|
||||
DEFINE_NIC_PROPERTIES(VMXNET3State, conf),
|
||||
DEFINE_PROP_BIT("x-old-msi-offsets", VMXNET3State, compat_flags,
|
||||
VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS_BIT, false),
|
||||
DEFINE_PROP_BIT("x-disable-pcie", VMXNET3State, compat_flags,
|
||||
VMXNET3_COMPAT_FLAG_DISABLE_PCIE_BIT, false),
|
||||
};
|
||||
|
||||
static void vmxnet3_realize(DeviceState *qdev, Error **errp)
|
||||
{
|
||||
VMXNET3Class *vc = VMXNET3_DEVICE_GET_CLASS(qdev);
|
||||
PCIDevice *pci_dev = PCI_DEVICE(qdev);
|
||||
VMXNET3State *s = VMXNET3(qdev);
|
||||
|
||||
if (!(s->compat_flags & VMXNET3_COMPAT_FLAG_DISABLE_PCIE)) {
|
||||
pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;
|
||||
}
|
||||
|
||||
vc->parent_dc_realize(qdev, errp);
|
||||
}
|
||||
|
||||
static void vmxnet3_class_init(ObjectClass *class, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(class);
|
||||
PCIDeviceClass *c = PCI_DEVICE_CLASS(class);
|
||||
VMXNET3Class *vc = VMXNET3_DEVICE_CLASS(class);
|
||||
|
||||
c->realize = vmxnet3_pci_realize;
|
||||
c->exit = vmxnet3_pci_uninit;
|
||||
|
@ -2506,8 +2478,6 @@ static void vmxnet3_class_init(ObjectClass *class, const void *data)
|
|||
c->class_id = PCI_CLASS_NETWORK_ETHERNET;
|
||||
c->subsystem_vendor_id = PCI_VENDOR_ID_VMWARE;
|
||||
c->subsystem_id = PCI_DEVICE_ID_VMWARE_VMXNET3;
|
||||
device_class_set_parent_realize(dc, vmxnet3_realize,
|
||||
&vc->parent_dc_realize);
|
||||
dc->desc = "VMWare Paravirtualized Ethernet v3";
|
||||
device_class_set_legacy_reset(dc, vmxnet3_qdev_reset);
|
||||
dc->vmsd = &vmstate_vmxnet3;
|
||||
|
|
|
@ -817,62 +817,6 @@ void fw_cfg_modify_i64(FWCfgState *s, uint16_t key, uint64_t value)
|
|||
g_free(old);
|
||||
}
|
||||
|
||||
void fw_cfg_set_order_override(FWCfgState *s, int order)
|
||||
{
|
||||
assert(s->fw_cfg_order_override == 0);
|
||||
s->fw_cfg_order_override = order;
|
||||
}
|
||||
|
||||
void fw_cfg_reset_order_override(FWCfgState *s)
|
||||
{
|
||||
assert(s->fw_cfg_order_override != 0);
|
||||
s->fw_cfg_order_override = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* This is the legacy order list. For legacy systems, files are in
|
||||
* the fw_cfg in the order defined below, by the "order" value. Note
|
||||
* that some entries (VGA ROMs, NIC option ROMS, etc.) go into a
|
||||
* specific area, but there may be more than one and they occur in the
|
||||
* order that the user specifies them on the command line. Those are
|
||||
* handled in a special manner, using the order override above.
|
||||
*
|
||||
* For non-legacy, the files are sorted by filename to avoid this kind
|
||||
* of complexity in the future.
|
||||
*
|
||||
* This is only for x86, other arches don't implement versioning so
|
||||
* they won't set legacy mode.
|
||||
*/
|
||||
static struct {
|
||||
const char *name;
|
||||
int order;
|
||||
} fw_cfg_order[] = {
|
||||
{ "etc/boot-menu-wait", 10 },
|
||||
{ "bootsplash.jpg", 11 },
|
||||
{ "bootsplash.bmp", 12 },
|
||||
{ "etc/boot-fail-wait", 15 },
|
||||
{ "etc/smbios/smbios-tables", 20 },
|
||||
{ "etc/smbios/smbios-anchor", 30 },
|
||||
{ "etc/e820", 40 },
|
||||
{ "etc/reserved-memory-end", 50 },
|
||||
{ "genroms/kvmvapic.bin", 55 },
|
||||
{ "genroms/linuxboot.bin", 60 },
|
||||
{ }, /* VGA ROMs from pc_vga_init come here, 70. */
|
||||
{ }, /* NIC option ROMs from pc_nic_init come here, 80. */
|
||||
{ "etc/system-states", 90 },
|
||||
{ }, /* User ROMs come here, 100. */
|
||||
{ }, /* Device FW comes here, 110. */
|
||||
{ "etc/extra-pci-roots", 120 },
|
||||
{ "etc/acpi/tables", 130 },
|
||||
{ "etc/table-loader", 140 },
|
||||
{ "etc/tpm/log", 150 },
|
||||
{ "etc/acpi/rsdp", 160 },
|
||||
{ "bootorder", 170 },
|
||||
{ "etc/msr_feature_control", 180 },
|
||||
|
||||
#define FW_CFG_ORDER_OVERRIDE_LAST 200
|
||||
};
|
||||
|
||||
/*
|
||||
* Any sub-page size update to these table MRs will be lost during migration,
|
||||
* as we use aligned size in ram_load_precopy() -> qemu_ram_resize() path.
|
||||
|
@ -890,29 +834,6 @@ static void fw_cfg_acpi_mr_save(FWCfgState *s, const char *filename, size_t len)
|
|||
}
|
||||
}
|
||||
|
||||
static int get_fw_cfg_order(FWCfgState *s, const char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (s->fw_cfg_order_override > 0) {
|
||||
return s->fw_cfg_order_override;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(fw_cfg_order); i++) {
|
||||
if (fw_cfg_order[i].name == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strcmp(name, fw_cfg_order[i].name) == 0) {
|
||||
return fw_cfg_order[i].order;
|
||||
}
|
||||
}
|
||||
|
||||
/* Stick unknown stuff at the end. */
|
||||
warn_report("Unknown firmware file in legacy mode: %s", name);
|
||||
return FW_CFG_ORDER_OVERRIDE_LAST;
|
||||
}
|
||||
|
||||
void fw_cfg_add_file_callback(FWCfgState *s, const char *filename,
|
||||
FWCfgCallback select_cb,
|
||||
FWCfgWriteCallback write_cb,
|
||||
|
@ -921,7 +842,6 @@ void fw_cfg_add_file_callback(FWCfgState *s, const char *filename,
|
|||
{
|
||||
int i, index, count;
|
||||
size_t dsize;
|
||||
MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
|
||||
int order = 0;
|
||||
|
||||
if (!s->files) {
|
||||
|
@ -933,22 +853,11 @@ void fw_cfg_add_file_callback(FWCfgState *s, const char *filename,
|
|||
count = be32_to_cpu(s->files->count);
|
||||
assert(count < fw_cfg_file_slots(s));
|
||||
|
||||
/* Find the insertion point. */
|
||||
if (mc->legacy_fw_cfg_order) {
|
||||
/*
|
||||
* Sort by order. For files with the same order, we keep them
|
||||
* in the sequence in which they were added.
|
||||
*/
|
||||
order = get_fw_cfg_order(s, filename);
|
||||
for (index = count;
|
||||
index > 0 && order < s->entry_order[index - 1];
|
||||
index--);
|
||||
} else {
|
||||
/* Sort by file name. */
|
||||
for (index = count;
|
||||
index > 0 && strcmp(filename, s->files->f[index - 1].name) < 0;
|
||||
index--);
|
||||
}
|
||||
/* Find the insertion point, sorting by file name. */
|
||||
for (index = count;
|
||||
index > 0 && strcmp(filename, s->files->f[index - 1].name) < 0;
|
||||
index--)
|
||||
;
|
||||
|
||||
/*
|
||||
* Move all the entries from the index point and after down one
|
||||
|
@ -1058,7 +967,6 @@ bool fw_cfg_add_file_from_generator(FWCfgState *s,
|
|||
|
||||
static void fw_cfg_machine_reset(void *opaque)
|
||||
{
|
||||
MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
|
||||
FWCfgState *s = opaque;
|
||||
void *ptr;
|
||||
size_t len;
|
||||
|
@ -1068,11 +976,9 @@ static void fw_cfg_machine_reset(void *opaque)
|
|||
ptr = fw_cfg_modify_file(s, "bootorder", (uint8_t *)buf, len);
|
||||
g_free(ptr);
|
||||
|
||||
if (!mc->legacy_fw_cfg_order) {
|
||||
buf = get_boot_devices_lchs_list(&len);
|
||||
ptr = fw_cfg_modify_file(s, "bios-geometry", (uint8_t *)buf, len);
|
||||
g_free(ptr);
|
||||
}
|
||||
buf = get_boot_devices_lchs_list(&len);
|
||||
ptr = fw_cfg_modify_file(s, "bios-geometry", (uint8_t *)buf, len);
|
||||
g_free(ptr);
|
||||
}
|
||||
|
||||
static void fw_cfg_machine_ready(struct Notifier *n, void *data)
|
||||
|
|
|
@ -68,18 +68,7 @@ struct PVSCSIClass {
|
|||
OBJECT_DECLARE_TYPE(PVSCSIState, PVSCSIClass, PVSCSI)
|
||||
|
||||
|
||||
/* Compatibility flags for migration */
|
||||
#define PVSCSI_COMPAT_OLD_PCI_CONFIGURATION_BIT 0
|
||||
#define PVSCSI_COMPAT_OLD_PCI_CONFIGURATION \
|
||||
(1 << PVSCSI_COMPAT_OLD_PCI_CONFIGURATION_BIT)
|
||||
#define PVSCSI_COMPAT_DISABLE_PCIE_BIT 1
|
||||
#define PVSCSI_COMPAT_DISABLE_PCIE \
|
||||
(1 << PVSCSI_COMPAT_DISABLE_PCIE_BIT)
|
||||
|
||||
#define PVSCSI_USE_OLD_PCI_CONFIGURATION(s) \
|
||||
((s)->compat_flags & PVSCSI_COMPAT_OLD_PCI_CONFIGURATION)
|
||||
#define PVSCSI_MSI_OFFSET(s) \
|
||||
(PVSCSI_USE_OLD_PCI_CONFIGURATION(s) ? 0x50 : 0x7c)
|
||||
#define PVSCSI_MSI_OFFSET (0x7c)
|
||||
#define PVSCSI_EXP_EP_OFFSET (0x40)
|
||||
|
||||
typedef struct PVSCSIRingInfo {
|
||||
|
@ -129,8 +118,6 @@ struct PVSCSIState {
|
|||
uint8_t msi_used; /* For migration compatibility */
|
||||
PVSCSIRingInfo rings; /* Data transfer rings manager */
|
||||
uint32_t resetting; /* Reset in progress */
|
||||
|
||||
uint32_t compat_flags;
|
||||
};
|
||||
|
||||
typedef struct PVSCSIRequest {
|
||||
|
@ -1110,7 +1097,7 @@ pvscsi_init_msi(PVSCSIState *s)
|
|||
int res;
|
||||
PCIDevice *d = PCI_DEVICE(s);
|
||||
|
||||
res = msi_init(d, PVSCSI_MSI_OFFSET(s), PVSCSI_MSIX_NUM_VECTORS,
|
||||
res = msi_init(d, PVSCSI_MSI_OFFSET, PVSCSI_MSIX_NUM_VECTORS,
|
||||
PVSCSI_USE_64BIT, PVSCSI_PER_VECTOR_MASK, NULL);
|
||||
if (res < 0) {
|
||||
trace_pvscsi_init_msi_fail(res);
|
||||
|
@ -1158,15 +1145,11 @@ pvscsi_realizefn(PCIDevice *pci_dev, Error **errp)
|
|||
trace_pvscsi_state("init");
|
||||
|
||||
/* PCI subsystem ID, subsystem vendor ID, revision */
|
||||
if (PVSCSI_USE_OLD_PCI_CONFIGURATION(s)) {
|
||||
pci_set_word(pci_dev->config + PCI_SUBSYSTEM_ID, 0x1000);
|
||||
} else {
|
||||
pci_set_word(pci_dev->config + PCI_SUBSYSTEM_VENDOR_ID,
|
||||
PCI_VENDOR_ID_VMWARE);
|
||||
pci_set_word(pci_dev->config + PCI_SUBSYSTEM_ID,
|
||||
PCI_DEVICE_ID_VMWARE_PVSCSI);
|
||||
pci_config_set_revision(pci_dev->config, 0x2);
|
||||
}
|
||||
pci_set_word(pci_dev->config + PCI_SUBSYSTEM_VENDOR_ID,
|
||||
PCI_VENDOR_ID_VMWARE);
|
||||
pci_set_word(pci_dev->config + PCI_SUBSYSTEM_ID,
|
||||
PCI_DEVICE_ID_VMWARE_PVSCSI);
|
||||
pci_config_set_revision(pci_dev->config, 0x2);
|
||||
|
||||
/* PCI latency timer = 255 */
|
||||
pci_dev->config[PCI_LATENCY_TIMER] = 0xff;
|
||||
|
@ -1234,21 +1217,8 @@ pvscsi_post_load(void *opaque, int version_id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool pvscsi_vmstate_need_pcie_device(void *opaque)
|
||||
{
|
||||
PVSCSIState *s = PVSCSI(opaque);
|
||||
|
||||
return !(s->compat_flags & PVSCSI_COMPAT_DISABLE_PCIE);
|
||||
}
|
||||
|
||||
static bool pvscsi_vmstate_test_pci_device(void *opaque, int version_id)
|
||||
{
|
||||
return !pvscsi_vmstate_need_pcie_device(opaque);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_pvscsi_pcie_device = {
|
||||
.name = "pvscsi/pcie",
|
||||
.needed = pvscsi_vmstate_need_pcie_device,
|
||||
.fields = (const VMStateField[]) {
|
||||
VMSTATE_PCI_DEVICE(parent_obj, PVSCSIState),
|
||||
VMSTATE_END_OF_LIST()
|
||||
|
@ -1262,9 +1232,6 @@ static const VMStateDescription vmstate_pvscsi = {
|
|||
.pre_save = pvscsi_pre_save,
|
||||
.post_load = pvscsi_post_load,
|
||||
.fields = (const VMStateField[]) {
|
||||
VMSTATE_STRUCT_TEST(parent_obj, PVSCSIState,
|
||||
pvscsi_vmstate_test_pci_device, 0,
|
||||
vmstate_pci_device, PCIDevice),
|
||||
VMSTATE_UINT8(msi_used, PVSCSIState),
|
||||
VMSTATE_UINT32(resetting, PVSCSIState),
|
||||
VMSTATE_UINT64(reg_interrupt_status, PVSCSIState),
|
||||
|
@ -1298,30 +1265,17 @@ static const VMStateDescription vmstate_pvscsi = {
|
|||
|
||||
static const Property pvscsi_properties[] = {
|
||||
DEFINE_PROP_UINT8("use_msg", PVSCSIState, use_msg, 1),
|
||||
DEFINE_PROP_BIT("x-old-pci-configuration", PVSCSIState, compat_flags,
|
||||
PVSCSI_COMPAT_OLD_PCI_CONFIGURATION_BIT, false),
|
||||
DEFINE_PROP_BIT("x-disable-pcie", PVSCSIState, compat_flags,
|
||||
PVSCSI_COMPAT_DISABLE_PCIE_BIT, false),
|
||||
};
|
||||
|
||||
static void pvscsi_realize(DeviceState *qdev, Error **errp)
|
||||
static void pvscsi_instance_init(Object *obj)
|
||||
{
|
||||
PVSCSIClass *pvs_c = PVSCSI_GET_CLASS(qdev);
|
||||
PCIDevice *pci_dev = PCI_DEVICE(qdev);
|
||||
PVSCSIState *s = PVSCSI(qdev);
|
||||
|
||||
if (!(s->compat_flags & PVSCSI_COMPAT_DISABLE_PCIE)) {
|
||||
pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;
|
||||
}
|
||||
|
||||
pvs_c->parent_dc_realize(qdev, errp);
|
||||
PCI_DEVICE(obj)->cap_present |= QEMU_PCI_CAP_EXPRESS;
|
||||
}
|
||||
|
||||
static void pvscsi_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
PVSCSIClass *pvs_k = PVSCSI_CLASS(klass);
|
||||
HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass);
|
||||
|
||||
k->realize = pvscsi_realizefn;
|
||||
|
@ -1330,8 +1284,6 @@ static void pvscsi_class_init(ObjectClass *klass, const void *data)
|
|||
k->device_id = PCI_DEVICE_ID_VMWARE_PVSCSI;
|
||||
k->class_id = PCI_CLASS_STORAGE_SCSI;
|
||||
k->subsystem_id = 0x1000;
|
||||
device_class_set_parent_realize(dc, pvscsi_realize,
|
||||
&pvs_k->parent_dc_realize);
|
||||
device_class_set_legacy_reset(dc, pvscsi_reset);
|
||||
dc->vmsd = &vmstate_pvscsi;
|
||||
device_class_set_props(dc, pvscsi_properties);
|
||||
|
@ -1346,6 +1298,7 @@ static const TypeInfo pvscsi_info = {
|
|||
.class_size = sizeof(PVSCSIClass),
|
||||
.instance_size = sizeof(PVSCSIState),
|
||||
.class_init = pvscsi_class_init,
|
||||
.instance_init = pvscsi_instance_init,
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_HOTPLUG_HANDLER },
|
||||
{ INTERFACE_PCIE_DEVICE },
|
||||
|
|
|
@ -146,9 +146,7 @@ static const VMStateDescription vmstate_virtio_pci = {
|
|||
|
||||
static bool virtio_pci_has_extra_state(DeviceState *d)
|
||||
{
|
||||
VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
|
||||
|
||||
return proxy->flags & VIRTIO_PCI_FLAG_MIGRATE_EXTRA;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void virtio_pci_save_extra_state(DeviceState *d, QEMUFile *f)
|
||||
|
@ -2363,12 +2361,8 @@ static void virtio_pci_bus_reset_hold(Object *obj, ResetType type)
|
|||
static const Property virtio_pci_properties[] = {
|
||||
DEFINE_PROP_BIT("virtio-pci-bus-master-bug-migration", VirtIOPCIProxy, flags,
|
||||
VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION_BIT, false),
|
||||
DEFINE_PROP_BIT("migrate-extra", VirtIOPCIProxy, flags,
|
||||
VIRTIO_PCI_FLAG_MIGRATE_EXTRA_BIT, true),
|
||||
DEFINE_PROP_BIT("modern-pio-notify", VirtIOPCIProxy, flags,
|
||||
VIRTIO_PCI_FLAG_MODERN_PIO_NOTIFY_BIT, false),
|
||||
DEFINE_PROP_BIT("x-disable-pcie", VirtIOPCIProxy, flags,
|
||||
VIRTIO_PCI_FLAG_DISABLE_PCIE_BIT, false),
|
||||
DEFINE_PROP_BIT("page-per-vq", VirtIOPCIProxy, flags,
|
||||
VIRTIO_PCI_FLAG_PAGE_PER_VQ_BIT, false),
|
||||
DEFINE_PROP_BOOL("x-ignore-backend-features", VirtIOPCIProxy,
|
||||
|
@ -2397,8 +2391,7 @@ static void virtio_pci_dc_realize(DeviceState *qdev, Error **errp)
|
|||
VirtIOPCIProxy *proxy = VIRTIO_PCI(qdev);
|
||||
PCIDevice *pci_dev = &proxy->pci_dev;
|
||||
|
||||
if (!(proxy->flags & VIRTIO_PCI_FLAG_DISABLE_PCIE) &&
|
||||
virtio_pci_modern(proxy)) {
|
||||
if (virtio_pci_modern(proxy)) {
|
||||
pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -286,8 +286,7 @@ struct MachineClass {
|
|||
no_parallel:1,
|
||||
no_floppy:1,
|
||||
no_cdrom:1,
|
||||
pci_allow_0_address:1,
|
||||
legacy_fw_cfg_order:1;
|
||||
pci_allow_0_address:1;
|
||||
bool auto_create_sdcard;
|
||||
bool is_default;
|
||||
const char *default_machine_opts;
|
||||
|
@ -863,10 +862,4 @@ extern const size_t hw_compat_2_7_len;
|
|||
extern GlobalProperty hw_compat_2_6[];
|
||||
extern const size_t hw_compat_2_6_len;
|
||||
|
||||
extern GlobalProperty hw_compat_2_5[];
|
||||
extern const size_t hw_compat_2_5_len;
|
||||
|
||||
extern GlobalProperty hw_compat_2_4[];
|
||||
extern const size_t hw_compat_2_4_len;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -107,7 +107,6 @@ struct PCMachineClass {
|
|||
/* RAM / address space compat: */
|
||||
bool gigabyte_align;
|
||||
bool has_reserved_memory;
|
||||
bool broken_reserved_end;
|
||||
bool enforce_amd_1tb_hole;
|
||||
bool isa_bios_alias;
|
||||
|
||||
|
@ -299,12 +298,6 @@ extern const size_t pc_compat_2_7_len;
|
|||
extern GlobalProperty pc_compat_2_6[];
|
||||
extern const size_t pc_compat_2_6_len;
|
||||
|
||||
extern GlobalProperty pc_compat_2_5[];
|
||||
extern const size_t pc_compat_2_5_len;
|
||||
|
||||
extern GlobalProperty pc_compat_2_4[];
|
||||
extern const size_t pc_compat_2_4_len;
|
||||
|
||||
#define DEFINE_PC_MACHINE(suffix, namestr, initfn, optsfn) \
|
||||
static void pc_machine_##suffix##_class_init(ObjectClass *oc, \
|
||||
const void *data) \
|
||||
|
|
|
@ -27,13 +27,8 @@
|
|||
#include "qom/object.h"
|
||||
|
||||
struct X86MachineClass {
|
||||
/*< private >*/
|
||||
MachineClass parent;
|
||||
|
||||
/*< public >*/
|
||||
|
||||
/* TSC rate migration: */
|
||||
bool save_tsc_khz;
|
||||
/* use DMA capable linuxboot option rom */
|
||||
bool fwcfg_dma_enabled;
|
||||
/* CPU and apic information: */
|
||||
|
|
|
@ -270,8 +270,6 @@ int rom_add_elf_program(const char *name, GMappedFile *mapped_file, void *data,
|
|||
AddressSpace *as);
|
||||
int rom_check_and_register_reset(void);
|
||||
void rom_set_fw(FWCfgState *f);
|
||||
void rom_set_order_override(int order);
|
||||
void rom_reset_order_override(void);
|
||||
|
||||
/**
|
||||
* rom_transaction_begin:
|
||||
|
|
|
@ -42,14 +42,6 @@ struct FWCfgDataGeneratorClass {
|
|||
|
||||
typedef struct fw_cfg_file FWCfgFile;
|
||||
|
||||
#define FW_CFG_ORDER_OVERRIDE_VGA 70
|
||||
#define FW_CFG_ORDER_OVERRIDE_NIC 80
|
||||
#define FW_CFG_ORDER_OVERRIDE_USER 100
|
||||
#define FW_CFG_ORDER_OVERRIDE_DEVICE 110
|
||||
|
||||
void fw_cfg_set_order_override(FWCfgState *fw_cfg, int order);
|
||||
void fw_cfg_reset_order_override(FWCfgState *fw_cfg);
|
||||
|
||||
typedef struct FWCfgFiles {
|
||||
uint32_t count;
|
||||
FWCfgFile f[];
|
||||
|
@ -75,8 +67,6 @@ struct FWCfgState {
|
|||
uint32_t cur_offset;
|
||||
Notifier machine_ready;
|
||||
|
||||
int fw_cfg_order_override;
|
||||
|
||||
bool dma_enabled;
|
||||
dma_addr_t dma_addr;
|
||||
AddressSpace *dma_as;
|
||||
|
|
|
@ -32,9 +32,7 @@ DECLARE_OBJ_CHECKERS(VirtioPCIBusState, VirtioPCIBusClass,
|
|||
enum {
|
||||
VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION_BIT,
|
||||
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT,
|
||||
VIRTIO_PCI_FLAG_MIGRATE_EXTRA_BIT,
|
||||
VIRTIO_PCI_FLAG_MODERN_PIO_NOTIFY_BIT,
|
||||
VIRTIO_PCI_FLAG_DISABLE_PCIE_BIT,
|
||||
VIRTIO_PCI_FLAG_PAGE_PER_VQ_BIT,
|
||||
VIRTIO_PCI_FLAG_ATS_BIT,
|
||||
VIRTIO_PCI_FLAG_INIT_DEVERR_BIT,
|
||||
|
@ -54,12 +52,6 @@ enum {
|
|||
* vcpu thread using ioeventfd for some devices. */
|
||||
#define VIRTIO_PCI_FLAG_USE_IOEVENTFD (1 << VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT)
|
||||
|
||||
/* virtio version flags */
|
||||
#define VIRTIO_PCI_FLAG_DISABLE_PCIE (1 << VIRTIO_PCI_FLAG_DISABLE_PCIE_BIT)
|
||||
|
||||
/* migrate extra state */
|
||||
#define VIRTIO_PCI_FLAG_MIGRATE_EXTRA (1 << VIRTIO_PCI_FLAG_MIGRATE_EXTRA_BIT)
|
||||
|
||||
/* have pio notification for modern device ? */
|
||||
#define VIRTIO_PCI_FLAG_MODERN_PIO_NOTIFY \
|
||||
(1 << VIRTIO_PCI_FLAG_MODERN_PIO_NOTIFY_BIT)
|
||||
|
|
|
@ -1192,10 +1192,7 @@ static int parse_fw_cfg(void *opaque, QemuOpts *opts, Error **errp)
|
|||
return -1;
|
||||
}
|
||||
}
|
||||
/* For legacy, keep user files in a specific global order. */
|
||||
fw_cfg_set_order_override(fw_cfg, FW_CFG_ORDER_OVERRIDE_USER);
|
||||
fw_cfg_add_file(fw_cfg, name, buf, size);
|
||||
fw_cfg_reset_order_override(fw_cfg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2745,7 +2742,6 @@ static void qemu_create_cli_devices(void)
|
|||
}
|
||||
|
||||
/* init generic devices */
|
||||
rom_set_order_override(FW_CFG_ORDER_OVERRIDE_DEVICE);
|
||||
qemu_opts_foreach(qemu_find_opts("device"),
|
||||
device_init_func, NULL, &error_fatal);
|
||||
QTAILQ_FOREACH(opt, &device_opts, next) {
|
||||
|
@ -2756,7 +2752,6 @@ static void qemu_create_cli_devices(void)
|
|||
assert(ret_data == NULL); /* error_fatal aborts */
|
||||
loc_pop(&opt->loc);
|
||||
}
|
||||
rom_reset_order_override();
|
||||
}
|
||||
|
||||
static bool qemu_machine_creation_done(Error **errp)
|
||||
|
|
|
@ -1060,9 +1060,8 @@ static bool tsc_khz_needed(void *opaque)
|
|||
{
|
||||
X86CPU *cpu = opaque;
|
||||
CPUX86State *env = &cpu->env;
|
||||
MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
|
||||
X86MachineClass *x86mc = X86_MACHINE_CLASS(mc);
|
||||
return env->tsc_khz && x86mc->save_tsc_khz;
|
||||
|
||||
return env->tsc_khz;
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_tsc_khz = {
|
||||
|
|
|
@ -58,8 +58,8 @@ class MemAddrCheck(QemuSystemTest):
|
|||
should start fine.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.vm.add_args('-S', '-machine', 'q35', '-m',
|
||||
'512,slots=1,maxmem=59.6G',
|
||||
self.set_machine('q35')
|
||||
self.vm.add_args('-S', '-m', '512,slots=1,maxmem=59.6G',
|
||||
'-cpu', 'pentium,pse36=on', '-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -76,8 +76,8 @@ class MemAddrCheck(QemuSystemTest):
|
|||
with pse36 above.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.vm.add_args('-S', '-machine', 'q35', '-m',
|
||||
'512,slots=1,maxmem=59.6G',
|
||||
self.set_machine('q35')
|
||||
self.vm.add_args('-S', '-m', '512,slots=1,maxmem=59.6G',
|
||||
'-cpu', 'pentium,pae=on', '-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -93,8 +93,8 @@ class MemAddrCheck(QemuSystemTest):
|
|||
same options as the failing case above with pse36 cpu feature.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.vm.add_args('-machine', 'q35', '-m',
|
||||
'512,slots=1,maxmem=59.5G',
|
||||
self.set_machine('q35')
|
||||
self.vm.add_args('-m', '512,slots=1,maxmem=59.5G',
|
||||
'-cpu', 'pentium,pse36=on', '-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -111,8 +111,8 @@ class MemAddrCheck(QemuSystemTest):
|
|||
with the same options as the case above.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.vm.add_args('-machine', 'q35', '-m',
|
||||
'512,slots=1,maxmem=59.5G',
|
||||
self.set_machine('q35')
|
||||
self.vm.add_args('-m', '512,slots=1,maxmem=59.5G',
|
||||
'-cpu', 'pentium,pae=on', '-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -128,8 +128,8 @@ class MemAddrCheck(QemuSystemTest):
|
|||
with pse36 ON.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.vm.add_args('-machine', 'q35', '-m',
|
||||
'512,slots=1,maxmem=59.5G',
|
||||
self.set_machine('q35')
|
||||
self.vm.add_args('-m', '512,slots=1,maxmem=59.5G',
|
||||
'-cpu', 'pentium2', '-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -148,8 +148,8 @@ class MemAddrCheck(QemuSystemTest):
|
|||
above 4 GiB due to the PCI hole and simplicity.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.vm.add_args('-S', '-machine', 'q35', '-m',
|
||||
'512,slots=1,maxmem=4G',
|
||||
self.set_machine('q35')
|
||||
self.vm.add_args('-S', '-m', '512,slots=1,maxmem=4G',
|
||||
'-cpu', 'pentium', '-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -176,8 +176,8 @@ class MemAddrCheck(QemuSystemTest):
|
|||
make QEMU fail with the error message.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.vm.add_args('-S', '-machine', 'pc-q35-7.0', '-m',
|
||||
'512,slots=1,maxmem=988G',
|
||||
self.set_machine('pc-q35-7.0')
|
||||
self.vm.add_args('-S', '-m', '512,slots=1,maxmem=988G',
|
||||
'-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -197,8 +197,8 @@ class MemAddrCheck(QemuSystemTest):
|
|||
than 988 GiB).
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.vm.add_args('-S', '-machine', 'pc-q35-7.1', '-m',
|
||||
'512,slots=1,maxmem=976G',
|
||||
self.set_machine('pc-q35-7.1')
|
||||
self.vm.add_args('-S', '-m', '512,slots=1,maxmem=976G',
|
||||
'-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -214,8 +214,8 @@ class MemAddrCheck(QemuSystemTest):
|
|||
successfully start when maxmem is < 988G.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.vm.add_args('-S', '-machine', 'pc-q35-7.0', '-m',
|
||||
'512,slots=1,maxmem=987.5G',
|
||||
self.set_machine('pc-q35-7.0')
|
||||
self.vm.add_args('-S', '-m', '512,slots=1,maxmem=987.5G',
|
||||
'-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -231,8 +231,8 @@ class MemAddrCheck(QemuSystemTest):
|
|||
successfully start when maxmem is < 976G.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.vm.add_args('-S', '-machine', 'pc-q35-7.1', '-m',
|
||||
'512,slots=1,maxmem=975.5G',
|
||||
self.set_machine('pc-q35-7.1')
|
||||
self.vm.add_args('-S', '-m', '512,slots=1,maxmem=975.5G',
|
||||
'-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -249,9 +249,9 @@ class MemAddrCheck(QemuSystemTest):
|
|||
"above_4G" memory starts at 4G.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.set_machine('pc-q35-7.1')
|
||||
self.vm.add_args('-S', '-cpu', 'Skylake-Server',
|
||||
'-machine', 'pc-q35-7.1', '-m',
|
||||
'512,slots=1,maxmem=976G',
|
||||
'-m', '512,slots=1,maxmem=976G',
|
||||
'-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -274,9 +274,9 @@ class MemAddrCheck(QemuSystemTest):
|
|||
fail to start.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.set_machine('pc-q35-7.1')
|
||||
self.vm.add_args('-S', '-cpu', 'EPYC-v4,phys-bits=41',
|
||||
'-machine', 'pc-q35-7.1', '-m',
|
||||
'512,slots=1,maxmem=992G',
|
||||
'-m', '512,slots=1,maxmem=992G',
|
||||
'-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -293,9 +293,9 @@ class MemAddrCheck(QemuSystemTest):
|
|||
QEMU should start fine.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.set_machine('pc-q35-7.1')
|
||||
self.vm.add_args('-S', '-cpu', 'EPYC-v4,phys-bits=41',
|
||||
'-machine', 'pc-q35-7.1', '-m',
|
||||
'512,slots=1,maxmem=990G',
|
||||
'-m', '512,slots=1,maxmem=990G',
|
||||
'-display', 'none',
|
||||
'-object', 'memory-backend-ram,id=mem1,size=1G',
|
||||
'-device', 'pc-dimm,id=vm0,memdev=mem1')
|
||||
|
@ -314,12 +314,12 @@ class MemAddrCheck(QemuSystemTest):
|
|||
alignment constraints with 40 bits (1 TiB) of processor physical bits.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.set_machine('q35')
|
||||
self.vm.add_args('-S', '-cpu', 'Skylake-Server,phys-bits=40',
|
||||
'-machine', 'q35,cxl=on', '-m',
|
||||
'512,slots=1,maxmem=987G',
|
||||
'-m', '512,slots=1,maxmem=987G',
|
||||
'-display', 'none',
|
||||
'-device', 'pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1',
|
||||
'-M', 'cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=1G')
|
||||
'-M', 'cxl=on,cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=1G')
|
||||
self.vm.set_qmp_monitor(enabled=False)
|
||||
self.vm.launch()
|
||||
self.vm.wait()
|
||||
|
@ -333,9 +333,10 @@ class MemAddrCheck(QemuSystemTest):
|
|||
with cxl enabled.
|
||||
"""
|
||||
self.ensure_64bit_binary()
|
||||
self.set_machine('q35')
|
||||
self.vm.add_args('-S', '-cpu', 'Skylake-Server,phys-bits=40',
|
||||
'-machine', 'q35,cxl=on', '-m',
|
||||
'512,slots=1,maxmem=987G',
|
||||
'-machine', 'cxl=on',
|
||||
'-m', '512,slots=1,maxmem=987G',
|
||||
'-display', 'none',
|
||||
'-device', 'pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1')
|
||||
self.vm.set_qmp_monitor(enabled=False)
|
||||
|
|
|
@ -25,12 +25,14 @@ class MicroblazeMachine(QemuSystemTest):
|
|||
('http://www.qemu-advent-calendar.org/2023/download/day13.tar.gz'),
|
||||
'b9b3d43c5dd79db88ada495cc6e0d1f591153fe41355e925d791fbf44de50c22')
|
||||
|
||||
def do_ballerina_be_test(self, machine):
|
||||
self.set_machine(machine)
|
||||
def do_ballerina_be_test(self, force_endianness=False):
|
||||
self.set_machine('petalogix-s3adsp1800')
|
||||
self.archive_extract(self.ASSET_IMAGE_BE)
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-kernel',
|
||||
self.scratch_file('day17', 'ballerina.bin'))
|
||||
if force_endianness:
|
||||
self.vm.add_args('-M', 'endianness=big')
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, 'This architecture does not have '
|
||||
'kernel memory protection')
|
||||
|
@ -39,12 +41,14 @@ class MicroblazeMachine(QemuSystemTest):
|
|||
# message, that's why we don't test for a later string here. This
|
||||
# needs some investigation by a microblaze wizard one day...
|
||||
|
||||
def do_xmaton_le_test(self, machine):
|
||||
def do_xmaton_le_test(self, force_endianness=False):
|
||||
self.require_netdev('user')
|
||||
self.set_machine(machine)
|
||||
self.set_machine('petalogix-s3adsp1800')
|
||||
self.archive_extract(self.ASSET_IMAGE_LE)
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-kernel', self.scratch_file('day13', 'xmaton.bin'))
|
||||
if force_endianness:
|
||||
self.vm.add_args('-M', 'endianness=little')
|
||||
tftproot = self.scratch_file('day13')
|
||||
self.vm.add_args('-nic', f'user,tftp={tftproot}')
|
||||
self.vm.launch()
|
||||
|
@ -59,9 +63,13 @@ class MicroblazeMachine(QemuSystemTest):
|
|||
class MicroblazeBigEndianMachine(MicroblazeMachine):
|
||||
|
||||
ASSET_IMAGE_BE = MicroblazeMachine.ASSET_IMAGE_BE
|
||||
ASSET_IMAGE_LE = MicroblazeMachine.ASSET_IMAGE_LE
|
||||
|
||||
def test_microblaze_s3adsp1800_legacy_be(self):
|
||||
self.do_ballerina_be_test('petalogix-s3adsp1800')
|
||||
self.do_ballerina_be_test()
|
||||
|
||||
def test_microblaze_s3adsp1800_legacy_le(self):
|
||||
self.do_xmaton_le_test(force_endianness=True)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -13,9 +13,13 @@ from test_microblaze_s3adsp1800 import MicroblazeMachine
|
|||
class MicroblazeLittleEndianMachine(MicroblazeMachine):
|
||||
|
||||
ASSET_IMAGE_LE = MicroblazeMachine.ASSET_IMAGE_LE
|
||||
ASSET_IMAGE_BE = MicroblazeMachine.ASSET_IMAGE_BE
|
||||
|
||||
def test_microblaze_s3adsp1800_legacy_le(self):
|
||||
self.do_xmaton_le_test('petalogix-s3adsp1800')
|
||||
self.do_xmaton_le_test()
|
||||
|
||||
def test_microblaze_s3adsp1800_legacy_be(self):
|
||||
self.do_ballerina_be_test(force_endianness=True)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -80,10 +80,8 @@ def mips_check_wheezy(test, kernel_path, image_path, kernel_command_line,
|
|||
exec_command_and_wait_for_pattern(test, 'cat /proc/devices', 'usb')
|
||||
exec_command_and_wait_for_pattern(test, 'cat /proc/ioports',
|
||||
' : piix4_smbus')
|
||||
# lspci for the host bridge does not work on big endian targets:
|
||||
# https://gitlab.com/qemu-project/qemu/-/issues/2826
|
||||
# exec_command_and_wait_for_pattern(test, 'lspci -d 11ab:4620',
|
||||
# 'GT-64120')
|
||||
exec_command_and_wait_for_pattern(test, 'lspci -d 11ab:4620',
|
||||
'GT-64120')
|
||||
exec_command_and_wait_for_pattern(test,
|
||||
'cat /sys/bus/i2c/devices/i2c-0/name',
|
||||
'SMBus PIIX4 adapter')
|
||||
|
|
|
@ -24,6 +24,7 @@ class TuxRunSparc64Test(TuxRunBaselineTest):
|
|||
'479c3dc104c82b68be55e2c0c5c38cd473d0b37ad4badccde4775bb88ce34611')
|
||||
|
||||
def test_sparc64(self):
|
||||
self.set_machine('sun4u')
|
||||
self.root='sda'
|
||||
self.wait_for_shutdown=False
|
||||
self.common_tuxrun(kernel_asset=self.ASSET_SPARC64_KERNEL,
|
||||
|
|
|
@ -365,20 +365,6 @@ int main(int argc, char **argv)
|
|||
"level", 10);
|
||||
}
|
||||
|
||||
/*
|
||||
* xlevel doesn't have any feature that triggers auto-level
|
||||
* code on old machine-types. Just check that the compat code
|
||||
* is working correctly:
|
||||
*/
|
||||
if (qtest_has_machine("pc-i440fx-2.4")) {
|
||||
add_cpuid_test("x86/cpuid/xlevel-compat/pc-i440fx-2.4/npt-off",
|
||||
"SandyBridge", NULL, "pc-i440fx-2.4",
|
||||
"xlevel", 0x80000008);
|
||||
add_cpuid_test("x86/cpuid/xlevel-compat/pc-i440fx-2.4/npt-on",
|
||||
"SandyBridge", "svm=on,npt=on", "pc-i440fx-2.4",
|
||||
"xlevel", 0x80000008);
|
||||
}
|
||||
|
||||
/* Test feature parsing */
|
||||
add_feature_test("x86/cpuid/features/plus",
|
||||
"486", "+arat",
|
||||
|
|
|
@ -341,8 +341,12 @@ static void inet_parse_test_helper(const char *str,
|
|||
int rc = inet_parse(&addr, str, &error);
|
||||
|
||||
if (success) {
|
||||
if (error) {
|
||||
error_report_err(error);
|
||||
}
|
||||
g_assert_cmpint(rc, ==, 0);
|
||||
} else {
|
||||
error_free(error);
|
||||
g_assert_cmpint(rc, <, 0);
|
||||
}
|
||||
if (exp_addr != NULL) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue