fw_cfg: move FW_CFG_NB_CPUS out of fw_cfg_init1()
PC will use this field in other way, so move it outside the common code so PC could set a different value, i.e. all CPUs regardless of where they are coming from (-smp X | -device cpu...). It's quick and dirty hack as it could be implemented in more generic way in MashineClass. But do it in simple way since only PC is affected so far. Later we can generalize it when another affected target gets support for -device cpu. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <1479212236-183810-3-git-send-email-imammedo@redhat.com> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
eabff15820
commit
5836d16812
@ -929,9 +929,11 @@ static void create_fw_cfg(const VirtBoardInfo *vbi, AddressSpace *as)
|
|||||||
{
|
{
|
||||||
hwaddr base = vbi->memmap[VIRT_FW_CFG].base;
|
hwaddr base = vbi->memmap[VIRT_FW_CFG].base;
|
||||||
hwaddr size = vbi->memmap[VIRT_FW_CFG].size;
|
hwaddr size = vbi->memmap[VIRT_FW_CFG].size;
|
||||||
|
FWCfgState *fw_cfg;
|
||||||
char *nodename;
|
char *nodename;
|
||||||
|
|
||||||
fw_cfg_init_mem_wide(base + 8, base, 8, base + 16, as);
|
fw_cfg = fw_cfg_init_mem_wide(base + 8, base, 8, base + 16, as);
|
||||||
|
fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
||||||
|
|
||||||
nodename = g_strdup_printf("/fw-cfg@%" PRIx64, base);
|
nodename = g_strdup_printf("/fw-cfg@%" PRIx64, base);
|
||||||
qemu_fdt_add_subnode(vbi->fdt, nodename);
|
qemu_fdt_add_subnode(vbi->fdt, nodename);
|
||||||
|
@ -744,6 +744,7 @@ static FWCfgState *bochs_bios_init(AddressSpace *as, PCMachineState *pcms)
|
|||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
fw_cfg = fw_cfg_init_io_dma(FW_CFG_IO_BASE, FW_CFG_IO_BASE + 4, as);
|
fw_cfg = fw_cfg_init_io_dma(FW_CFG_IO_BASE, FW_CFG_IO_BASE + 4, as);
|
||||||
|
fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
||||||
|
|
||||||
/* FW_CFG_MAX_CPUS is a bit confusing/problematic on x86:
|
/* FW_CFG_MAX_CPUS is a bit confusing/problematic on x86:
|
||||||
*
|
*
|
||||||
@ -1341,6 +1342,7 @@ void xen_load_linux(PCMachineState *pcms)
|
|||||||
assert(MACHINE(pcms)->kernel_filename != NULL);
|
assert(MACHINE(pcms)->kernel_filename != NULL);
|
||||||
|
|
||||||
fw_cfg = fw_cfg_init_io(FW_CFG_IO_BASE);
|
fw_cfg = fw_cfg_init_io(FW_CFG_IO_BASE);
|
||||||
|
fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
||||||
rom_set_fw(fw_cfg);
|
rom_set_fw(fw_cfg);
|
||||||
|
|
||||||
load_linux(pcms, fw_cfg);
|
load_linux(pcms, fw_cfg);
|
||||||
|
@ -884,7 +884,6 @@ static void fw_cfg_init1(DeviceState *dev)
|
|||||||
fw_cfg_add_bytes(s, FW_CFG_SIGNATURE, (char *)"QEMU", 4);
|
fw_cfg_add_bytes(s, FW_CFG_SIGNATURE, (char *)"QEMU", 4);
|
||||||
fw_cfg_add_bytes(s, FW_CFG_UUID, &qemu_uuid, 16);
|
fw_cfg_add_bytes(s, FW_CFG_UUID, &qemu_uuid, 16);
|
||||||
fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)!machine->enable_graphics);
|
fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)!machine->enable_graphics);
|
||||||
fw_cfg_add_i16(s, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
|
||||||
fw_cfg_add_i16(s, FW_CFG_BOOT_MENU, (uint16_t)boot_menu);
|
fw_cfg_add_i16(s, FW_CFG_BOOT_MENU, (uint16_t)boot_menu);
|
||||||
fw_cfg_bootsplash(s);
|
fw_cfg_bootsplash(s);
|
||||||
fw_cfg_reboot(s);
|
fw_cfg_reboot(s);
|
||||||
|
@ -466,6 +466,7 @@ static void ppc_core99_init(MachineState *machine)
|
|||||||
/* No PCI init: the BIOS will do it */
|
/* No PCI init: the BIOS will do it */
|
||||||
|
|
||||||
fw_cfg = fw_cfg_init_mem(CFG_ADDR, CFG_ADDR + 2);
|
fw_cfg = fw_cfg_init_mem(CFG_ADDR, CFG_ADDR + 2);
|
||||||
|
fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
||||||
fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus);
|
fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus);
|
||||||
fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
|
fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
|
||||||
fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, machine_arch);
|
fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, machine_arch);
|
||||||
|
@ -319,6 +319,7 @@ static void ppc_heathrow_init(MachineState *machine)
|
|||||||
/* No PCI init: the BIOS will do it */
|
/* No PCI init: the BIOS will do it */
|
||||||
|
|
||||||
fw_cfg = fw_cfg_init_mem(CFG_ADDR, CFG_ADDR + 2);
|
fw_cfg = fw_cfg_init_mem(CFG_ADDR, CFG_ADDR + 2);
|
||||||
|
fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
||||||
fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus);
|
fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus);
|
||||||
fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
|
fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
|
||||||
fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, ARCH_HEATHROW);
|
fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, ARCH_HEATHROW);
|
||||||
|
@ -1033,6 +1033,7 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef,
|
|||||||
hwdef->ecc_version);
|
hwdef->ecc_version);
|
||||||
|
|
||||||
fw_cfg = fw_cfg_init_mem(CFG_ADDR, CFG_ADDR + 2);
|
fw_cfg = fw_cfg_init_mem(CFG_ADDR, CFG_ADDR + 2);
|
||||||
|
fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
||||||
fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus);
|
fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus);
|
||||||
fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
|
fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
|
||||||
fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id);
|
fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id);
|
||||||
|
@ -855,6 +855,7 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
|
|||||||
(uint8_t *)&nd_table[0].macaddr);
|
(uint8_t *)&nd_table[0].macaddr);
|
||||||
|
|
||||||
fw_cfg = fw_cfg_init_io(BIOS_CFG_IOPORT);
|
fw_cfg = fw_cfg_init_io(BIOS_CFG_IOPORT);
|
||||||
|
fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
||||||
fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus);
|
fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus);
|
||||||
fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
|
fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
|
||||||
fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id);
|
fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id);
|
||||||
|
Loading…
Reference in New Issue
Block a user