
Add LoongArch flatted device tree, adding cpu device node, firmware cfg node, pcie node into it, and create fdt rom memory region. Now fdt info is not full since only uefi bios uses fdt, linux kernel does not use fdt. Loongarch Linux kernel uses acpi table which is full in qemu virt machine. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn> Message-Id: <20220712083206.4187715-7-yangxiaojuan@loongson.cn> [rth: Set TARGET_NEED_FDT, add fdt to meson.build] Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
59 lines
1.7 KiB
C
59 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Definitions for loongarch board emulation.
|
|
*
|
|
* Copyright (C) 2021 Loongson Technology Corporation Limited
|
|
*/
|
|
|
|
#ifndef HW_LOONGARCH_H
|
|
#define HW_LOONGARCH_H
|
|
|
|
#include "target/loongarch/cpu.h"
|
|
#include "hw/boards.h"
|
|
#include "qemu/queue.h"
|
|
#include "hw/intc/loongarch_ipi.h"
|
|
|
|
#define LOONGARCH_MAX_VCPUS 4
|
|
|
|
#define LOONGARCH_ISA_IO_BASE 0x18000000UL
|
|
#define LOONGARCH_ISA_IO_SIZE 0x0004000
|
|
#define VIRT_FWCFG_BASE 0x1e020000UL
|
|
#define VIRT_BIOS_BASE 0x1c000000UL
|
|
#define VIRT_BIOS_SIZE (4 * MiB)
|
|
|
|
#define VIRT_LOWMEM_BASE 0
|
|
#define VIRT_LOWMEM_SIZE 0x10000000
|
|
#define VIRT_HIGHMEM_BASE 0x90000000
|
|
#define VIRT_GED_EVT_ADDR 0x100e0000
|
|
#define VIRT_GED_MEM_ADDR (VIRT_GED_EVT_ADDR + ACPI_GED_EVT_SEL_LEN)
|
|
#define VIRT_GED_REG_ADDR (VIRT_GED_MEM_ADDR + MEMORY_HOTPLUG_IO_LEN)
|
|
|
|
#define LA_FDT_BASE 0x1c400000
|
|
#define LA_FDT_SIZE 0x100000
|
|
|
|
struct LoongArchMachineState {
|
|
/*< private >*/
|
|
MachineState parent_obj;
|
|
|
|
IPICore ipi_core[MAX_IPI_CORE_NUM];
|
|
MemoryRegion lowmem;
|
|
MemoryRegion highmem;
|
|
MemoryRegion isa_io;
|
|
MemoryRegion bios;
|
|
bool bios_loaded;
|
|
/* State for other subsystems/APIs: */
|
|
FWCfgState *fw_cfg;
|
|
Notifier machine_done;
|
|
OnOffAuto acpi;
|
|
char *oem_id;
|
|
char *oem_table_id;
|
|
DeviceState *acpi_ged;
|
|
int fdt_size;
|
|
};
|
|
|
|
#define TYPE_LOONGARCH_MACHINE MACHINE_TYPE_NAME("virt")
|
|
OBJECT_DECLARE_SIMPLE_TYPE(LoongArchMachineState, LOONGARCH_MACHINE)
|
|
bool loongarch_is_acpi_enabled(LoongArchMachineState *lams);
|
|
void loongarch_acpi_setup(LoongArchMachineState *lams);
|
|
#endif
|