Lines Matching +full:- +full:- +full:disable +full:- +full:numa

19 #include "qemu/error-report.h"
24 #include "qapi/qapi-visit-common.h"
27 #include "system/numa.h"
30 #include "acpi-microvm.h"
31 #include "microvm-dt.h"
42 #include "hw/char/serial-isa.h"
47 #include "hw/virtio/virtio-mmio.h"
50 #include "hw/pci-host/gpex.h"
59 #define MICROVM_BIOS_FILENAME "bios-microvm.bin"
66 val = MIN(x86ms->below_4g_mem_size / KiB, 640); in microvm_set_rtc()
70 if (x86ms->below_4g_mem_size > 1 * MiB) { in microvm_set_rtc()
71 val = (x86ms->below_4g_mem_size - 1 * MiB) / KiB; in microvm_set_rtc()
83 if (x86ms->below_4g_mem_size > 16 * MiB) { in microvm_set_rtc()
84 val = (x86ms->below_4g_mem_size - 16 * MiB) / (64 * KiB); in microvm_set_rtc()
94 val = x86ms->above_4g_mem_size / 65536; in microvm_set_rtc()
117 memory_region_init_alias(ecam_alias, OBJECT(dev), "pcie-ecam", in create_gpex()
118 ecam_reg, 0, mms->gpex.ecam.size); in create_gpex()
120 mms->gpex.ecam.base, ecam_alias); in create_gpex()
128 if (mms->gpex.mmio32.size) { in create_gpex()
130 memory_region_init_alias(mmio32_alias, OBJECT(dev), "pcie-mmio32", mmio_reg, in create_gpex()
131 mms->gpex.mmio32.base, mms->gpex.mmio32.size); in create_gpex()
133 mms->gpex.mmio32.base, mmio32_alias); in create_gpex()
135 if (mms->gpex.mmio64.size) { in create_gpex()
137 memory_region_init_alias(mmio64_alias, OBJECT(dev), "pcie-mmio64", mmio_reg, in create_gpex()
138 mms->gpex.mmio64.base, mms->gpex.mmio64.size); in create_gpex()
140 mms->gpex.mmio64.base, mmio64_alias); in create_gpex()
145 x86ms->gsi[mms->gpex.irq + i]); in create_gpex()
154 if (mms->ioapic2 == ON_OFF_AUTO_OFF) { in microvm_ioapics()
172 x86ms->gsi = qemu_allocate_irqs(gsi_handler, gsi_state, in microvm_devices_init()
177 isa_bus_register_input_irqs(isa_bus, x86ms->gsi); in microvm_devices_init()
181 x86ms->ioapic2 = ioapic_init_secondary(gsi_state); in microvm_devices_init()
188 mms->virtio_irq_base = 5; in microvm_devices_init()
189 mms->virtio_num_transports = 8; in microvm_devices_init()
190 if (x86ms->ioapic2) { in microvm_devices_init()
191 mms->pcie_irq_base = 16; /* 16 -> 19 */ in microvm_devices_init()
192 /* use second ioapic (24 -> 47) for virtio-mmio irq lines */ in microvm_devices_init()
193 mms->virtio_irq_base = IO_APIC_SECONDARY_IRQBASE; in microvm_devices_init()
194 mms->virtio_num_transports = IOAPIC_NUM_PINS; in microvm_devices_init()
196 mms->pcie_irq_base = 12; /* 12 -> 15 */ in microvm_devices_init()
197 mms->virtio_irq_base = 16; /* 16 -> 23 */ in microvm_devices_init()
200 for (i = 0; i < mms->virtio_num_transports; i++) { in microvm_devices_init()
201 sysbus_create_simple("virtio-mmio", in microvm_devices_init()
203 x86ms->gsi[mms->virtio_irq_base + i]); in microvm_devices_init()
209 qdev_prop_set_uint32(dev, "ged-event", ACPI_GED_PWR_DOWN_EVT); in microvm_devices_init()
215 x86ms->gsi[GED_MMIO_IRQ]); in microvm_devices_init()
216 x86ms->acpi_dev = HOTPLUG_HANDLER(dev); in microvm_devices_init()
228 x86ms->gsi[MICROVM_XHCI_IRQ]); in microvm_devices_init()
231 if (x86_machine_is_acpi_enabled(x86ms) && mms->pcie == ON_OFF_AUTO_ON) { in microvm_devices_init()
233 hwaddr phys_size = (hwaddr)1 << X86_CPU(first_cpu)->phys_bits; in microvm_devices_init()
235 mms->gpex.mmio64.size = phys_size / 4; in microvm_devices_init()
236 mms->gpex.mmio64.base = phys_size - mms->gpex.mmio64.size; in microvm_devices_init()
238 mms->gpex.mmio32.base = PCIE_MMIO_BASE; in microvm_devices_init()
239 mms->gpex.mmio32.size = PCIE_MMIO_SIZE; in microvm_devices_init()
240 mms->gpex.ecam.base = PCIE_ECAM_BASE; in microvm_devices_init()
241 mms->gpex.ecam.size = PCIE_ECAM_SIZE; in microvm_devices_init()
242 mms->gpex.irq = mms->pcie_irq_base; in microvm_devices_init()
244 x86ms->pci_irq_mask = ((1 << (mms->pcie_irq_base + 0)) | in microvm_devices_init()
245 (1 << (mms->pcie_irq_base + 1)) | in microvm_devices_init()
246 (1 << (mms->pcie_irq_base + 2)) | in microvm_devices_init()
247 (1 << (mms->pcie_irq_base + 3))); in microvm_devices_init()
249 x86ms->pci_irq_mask = 0; in microvm_devices_init()
252 if (x86ms->pic == ON_OFF_AUTO_ON || x86ms->pic == ON_OFF_AUTO_AUTO) { in microvm_devices_init()
257 gsi_state->i8259_irq[i] = i8259[i]; in microvm_devices_init()
262 if (x86ms->pit == ON_OFF_AUTO_ON || x86ms->pit == ON_OFF_AUTO_AUTO) { in microvm_devices_init()
270 if (mms->rtc == ON_OFF_AUTO_ON || in microvm_devices_init()
271 (mms->rtc == ON_OFF_AUTO_AUTO && !kvm_enabled())) { in microvm_devices_init()
275 if (mms->isa_serial) { in microvm_devices_init()
296 if (machine->ram_size > lowmem) { in microvm_memory_init()
297 x86ms->above_4g_mem_size = machine->ram_size - lowmem; in microvm_memory_init()
298 x86ms->below_4g_mem_size = lowmem; in microvm_memory_init()
300 x86ms->above_4g_mem_size = 0; in microvm_memory_init()
301 x86ms->below_4g_mem_size = machine->ram_size; in microvm_memory_init()
305 memory_region_init_alias(ram_below_4g, NULL, "ram-below-4g", machine->ram, in microvm_memory_init()
306 0, x86ms->below_4g_mem_size); in microvm_memory_init()
309 e820_add_entry(0, x86ms->below_4g_mem_size, E820_RAM); in microvm_memory_init()
311 if (x86ms->above_4g_mem_size > 0) { in microvm_memory_init()
313 memory_region_init_alias(ram_above_4g, NULL, "ram-above-4g", in microvm_memory_init()
314 machine->ram, in microvm_memory_init()
315 x86ms->below_4g_mem_size, in microvm_memory_init()
316 x86ms->above_4g_mem_size); in microvm_memory_init()
319 e820_add_entry(0x100000000ULL, x86ms->above_4g_mem_size, E820_RAM); in microvm_memory_init()
325 fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, machine->smp.cpus); in microvm_memory_init()
326 fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, machine->smp.max_cpus); in microvm_memory_init()
327 fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)machine->ram_size); in microvm_memory_init()
332 if (machine->kernel_filename != NULL) { in microvm_memory_init()
333 mmc->x86_load_linux(x86ms, fw_cfg, 0, true); in microvm_memory_init()
336 if (mms->option_roms) { in microvm_memory_init()
342 x86ms->fw_cfg = fw_cfg; in microvm_memory_init()
343 x86ms->ioapic_as = &address_space_memory; in microvm_memory_init()
390 cmdline = g_strdup(machine->kernel_cmdline); in microvm_fix_kernel_cmdline()
392 QTAILQ_FOREACH(kid, &bus->children, sibling) { in microvm_fix_kernel_cmdline()
393 DeviceState *dev = kid->child; in microvm_fix_kernel_cmdline()
397 VirtioBusState *mmio_virtio_bus = &mmio->bus; in microvm_fix_kernel_cmdline()
398 BusState *mmio_bus = &mmio_virtio_bus->parent_obj; in microvm_fix_kernel_cmdline()
400 if (!QTAILQ_EMPTY(&mmio_bus->children)) { in microvm_fix_kernel_cmdline()
402 (mmio_bus->name, mms->virtio_irq_base); in microvm_fix_kernel_cmdline()
413 fw_cfg_modify_i32(x86ms->fw_cfg, FW_CFG_CMDLINE_SIZE, strlen(cmdline) + 1); in microvm_fix_kernel_cmdline()
414 fw_cfg_modify_string(x86ms->fw_cfg, FW_CFG_CMDLINE_DATA, cmdline); in microvm_fix_kernel_cmdline()
424 cpu->host_phys_bits = true; /* need reliable phys-bits */ in microvm_device_pre_plug_cb()
463 fw_cfg_add_e820(x86ms->fw_cfg); in microvm_machine_done()
472 if (x86ms->acpi_dev) { in microvm_powerdown_req()
473 Object *obj = OBJECT(x86ms->acpi_dev); in microvm_powerdown_req()
475 adevc->send_event(ACPI_DEVICE_IF(x86ms->acpi_dev), in microvm_powerdown_req()
486 mms->kernel_cmdline_fixed = false; in microvm_machine_state_init()
488 mms->machine_done.notify = microvm_machine_done; in microvm_machine_state_init()
489 qemu_add_machine_init_done_notifier(&mms->machine_done); in microvm_machine_state_init()
490 mms->powerdown_req.notify = microvm_powerdown_req; in microvm_machine_state_init()
491 qemu_register_powerdown_notifier(&mms->powerdown_req); in microvm_machine_state_init()
507 machine->kernel_filename != NULL && in microvm_machine_reset()
508 mms->auto_kernel_cmdline && !mms->kernel_cmdline_fixed) { in microvm_machine_reset()
510 mms->kernel_cmdline_fixed = true; in microvm_machine_reset()
526 OnOffAuto rtc = mms->rtc; in microvm_machine_get_rtc()
536 visit_type_OnOffAuto(v, name, &mms->rtc, errp); in microvm_machine_set_rtc()
543 OnOffAuto pcie = mms->pcie; in microvm_machine_get_pcie()
553 visit_type_OnOffAuto(v, name, &mms->pcie, errp); in microvm_machine_set_pcie()
560 OnOffAuto ioapic2 = mms->ioapic2; in microvm_machine_get_ioapic2()
570 visit_type_OnOffAuto(v, name, &mms->ioapic2, errp); in microvm_machine_set_ioapic2()
577 return mms->isa_serial; in microvm_machine_get_isa_serial()
585 mms->isa_serial = value; in microvm_machine_set_isa_serial()
592 return mms->option_roms; in microvm_machine_get_option_roms()
600 mms->option_roms = value; in microvm_machine_set_option_roms()
607 return mms->auto_kernel_cmdline; in microvm_machine_get_auto_kernel_cmdline()
615 mms->auto_kernel_cmdline = value; in microvm_machine_set_auto_kernel_cmdline()
623 mms->rtc = ON_OFF_AUTO_AUTO; in microvm_machine_initfn()
624 mms->pcie = ON_OFF_AUTO_AUTO; in microvm_machine_initfn()
625 mms->ioapic2 = ON_OFF_AUTO_AUTO; in microvm_machine_initfn()
626 mms->isa_serial = true; in microvm_machine_initfn()
627 mms->option_roms = true; in microvm_machine_initfn()
628 mms->auto_kernel_cmdline = true; in microvm_machine_initfn()
636 { "pcie-root-port", "io-reserve", "0" },
637 { TYPE_RAMFB_DEVICE, "use-legacy-x86-rom", "true" },
638 { TYPE_VFIO_PCI_NOHOTPLUG, "use-legacy-x86-rom", "true" },
648 mmc->x86_load_linux = x86_load_linux; in microvm_class_init()
650 mc->init = microvm_machine_state_init; in microvm_class_init()
652 mc->family = "microvm_i386"; in microvm_class_init()
653 mc->desc = "microvm (i386)"; in microvm_class_init()
654 mc->units_per_default_bus = 1; in microvm_class_init()
655 mc->no_floppy = 1; in microvm_class_init()
656 mc->max_cpus = 288; in microvm_class_init()
657 mc->has_hotpluggable_cpus = false; in microvm_class_init()
658 mc->auto_enable_numa_with_memhp = false; in microvm_class_init()
659 mc->auto_enable_numa_with_memdev = false; in microvm_class_init()
660 mc->default_cpu_type = TARGET_DEFAULT_CPU_TYPE; in microvm_class_init()
661 mc->nvdimm_supported = false; in microvm_class_init()
662 mc->default_ram_id = "microvm.ram"; in microvm_class_init()
665 mc->default_kernel_irqchip_split = true; in microvm_class_init()
668 mc->reset = microvm_machine_reset; in microvm_class_init()
671 mc->get_hotplug_handler = microvm_get_hotplug_handler; in microvm_class_init()
672 hc->pre_plug = microvm_device_pre_plug_cb; in microvm_class_init()
673 hc->plug = microvm_device_plug_cb; in microvm_class_init()
674 hc->unplug_request = microvm_device_unplug_request_cb; in microvm_class_init()
675 hc->unplug = microvm_device_unplug_cb; in microvm_class_init()
677 x86mc->fwcfg_dma_enabled = true; in microvm_class_init()
698 "Enable second IO-APIC"); in microvm_class_init()
704 "Set off to disable the instantiation an ISA serial port"); in microvm_class_init()
710 "Set off to disable loading option ROMs"); in microvm_class_init()
717 "Set off to disable adding virtio-mmio devices to the kernel cmdline"); in microvm_class_init()
721 compat_props_add(mc->compat_props, microvm_properties, in microvm_class_init()