2022-07-12 11:32:01 +03:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/*
|
|
|
|
* QEMU fw_cfg helpers (LoongArch specific)
|
|
|
|
*
|
|
|
|
* Copyright (C) 2021 Loongson Technology Corporation Limited
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "qemu/osdep.h"
|
|
|
|
#include "hw/loongarch/fw_cfg.h"
|
|
|
|
#include "hw/loongarch/virt.h"
|
|
|
|
#include "hw/nvram/fw_cfg.h"
|
|
|
|
#include "sysemu/sysemu.h"
|
|
|
|
|
|
|
|
static void fw_cfg_boot_set(void *opaque, const char *boot_device,
|
|
|
|
Error **errp)
|
|
|
|
{
|
|
|
|
fw_cfg_modify_i16(opaque, FW_CFG_BOOT_DEVICE, boot_device[0]);
|
|
|
|
}
|
|
|
|
|
|
|
|
FWCfgState *loongarch_fw_cfg_init(ram_addr_t ram_size, MachineState *ms)
|
|
|
|
{
|
|
|
|
FWCfgState *fw_cfg;
|
|
|
|
int max_cpus = ms->smp.max_cpus;
|
|
|
|
int smp_cpus = ms->smp.cpus;
|
|
|
|
|
2022-08-10 11:53:36 +03:00
|
|
|
fw_cfg = fw_cfg_init_mem_wide(VIRT_FWCFG_BASE + 8, VIRT_FWCFG_BASE, 8,
|
|
|
|
VIRT_FWCFG_BASE + 16, &address_space_memory);
|
2022-07-12 11:32:01 +03:00
|
|
|
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_i16(fw_cfg, FW_CFG_NB_CPUS, (uint16_t)smp_cpus);
|
|
|
|
|
|
|
|
qemu_register_boot_set(fw_cfg_boot_set, fw_cfg);
|
|
|
|
return fw_cfg;
|
|
|
|
}
|