mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
RISC-V PR for 10.0
* Correct the validness check of iova * Fix APLIC in_clrip and clripnum write emulation * Support riscv-iommu-sys device * Add Tenstorrent Ascalon CPU * Add AIA userspace irqchip_split support * Add Microblaze V generic board * Upgrade ACPI SPCR table to support SPCR table revision 4 format * Remove tswap64() calls from HTIF * Support 64-bit address of initrd * Introduce svukte ISA extension * Support ssstateen extension * Support for RV64 Xiangshan Nanhu CPU -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEaukCtqfKh31tZZKWr3yVEwxTgBMFAmdkzjgACgkQr3yVEwxT gBOcyA//e0XhAQciQglCZZCfINdOyI8qSh+P2K0qtrXZ4VERHEMp7UoD5CQr2cZv h8ij1EkatXCwukVELx0rNckxG33bEFgG1oESnQSrwGE0Iu4csNW24nK5WlUS0/r+ A5oD2wtzEF+cbhTKrVSDBN/PvlnWTKGEoJRkuXWfz5d4uR9eyQhfED0S2j36lNEC X1x/OZoKM89XuXtOFe9g55Z5UNzAatcdTISozL0FydiPh7QeVjTLHh28/tt559MX 7v5aJFlQuZ78z1mIHkZmPSorSrJ0zqhkP6NWe1ae06oMgzwRQQhYLppDILV4ZgUF 3mSDRoXmBycQXiYNPcHep3LdXfvxr+PpWHSevx8gH1jwm93On7Y/H7Uol6TDXzfC mrFjalfV5tzrD90ZvB+s5bCMF1q5Z8Dlj0pYF9aN9P1ILoWy3dndFAPJB6uKKDP7 Qd4qOQ3dVyHAX9jLmVkB6QvAV/vTDrYTsAxaF/EaoLOy0IoKhjTvgda3XzE1MFKA gVafLluADIfSEdqa2QR2ExL8d1SZVoiObCp5TMLRer0HIpg/vQZwjfdbo4BgQKL3 7Q6wBxcZUNqrFgspXjm5WFIrdk2rfS/79OmvpNM6SZaK6BnklntdJHJHtAWujGsm EM310AUFpHMp2h6Nqnemb3qr5l4d20KSt8DhoPAUq1IE59Kb8XY= =0iQW -----END PGP SIGNATURE----- Merge tag 'pull-riscv-to-apply-20241220' of https://github.com/alistair23/qemu into staging RISC-V PR for 10.0 * Correct the validness check of iova * Fix APLIC in_clrip and clripnum write emulation * Support riscv-iommu-sys device * Add Tenstorrent Ascalon CPU * Add AIA userspace irqchip_split support * Add Microblaze V generic board * Upgrade ACPI SPCR table to support SPCR table revision 4 format * Remove tswap64() calls from HTIF * Support 64-bit address of initrd * Introduce svukte ISA extension * Support ssstateen extension * Support for RV64 Xiangshan Nanhu CPU # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEEaukCtqfKh31tZZKWr3yVEwxTgBMFAmdkzjgACgkQr3yVEwxT # gBOcyA//e0XhAQciQglCZZCfINdOyI8qSh+P2K0qtrXZ4VERHEMp7UoD5CQr2cZv # h8ij1EkatXCwukVELx0rNckxG33bEFgG1oESnQSrwGE0Iu4csNW24nK5WlUS0/r+ # A5oD2wtzEF+cbhTKrVSDBN/PvlnWTKGEoJRkuXWfz5d4uR9eyQhfED0S2j36lNEC # X1x/OZoKM89XuXtOFe9g55Z5UNzAatcdTISozL0FydiPh7QeVjTLHh28/tt559MX # 7v5aJFlQuZ78z1mIHkZmPSorSrJ0zqhkP6NWe1ae06oMgzwRQQhYLppDILV4ZgUF # 3mSDRoXmBycQXiYNPcHep3LdXfvxr+PpWHSevx8gH1jwm93On7Y/H7Uol6TDXzfC # mrFjalfV5tzrD90ZvB+s5bCMF1q5Z8Dlj0pYF9aN9P1ILoWy3dndFAPJB6uKKDP7 # Qd4qOQ3dVyHAX9jLmVkB6QvAV/vTDrYTsAxaF/EaoLOy0IoKhjTvgda3XzE1MFKA # gVafLluADIfSEdqa2QR2ExL8d1SZVoiObCp5TMLRer0HIpg/vQZwjfdbo4BgQKL3 # 7Q6wBxcZUNqrFgspXjm5WFIrdk2rfS/79OmvpNM6SZaK6BnklntdJHJHtAWujGsm # EM310AUFpHMp2h6Nqnemb3qr5l4d20KSt8DhoPAUq1IE59Kb8XY= # =0iQW # -----END PGP SIGNATURE----- # gpg: Signature made Thu 19 Dec 2024 20:54:00 EST # gpg: using RSA key 6AE902B6A7CA877D6D659296AF7C95130C538013 # gpg: Good signature from "Alistair Francis <alistair@alistair23.me>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6AE9 02B6 A7CA 877D 6D65 9296 AF7C 9513 0C53 8013 * tag 'pull-riscv-to-apply-20241220' of https://github.com/alistair23/qemu: (39 commits) target/riscv: add support for RV64 Xiangshan Nanhu CPU target/riscv: add ssstateen target/riscv/tcg: hide warn for named feats when disabling via priv_ver target/riscv: Include missing headers in 'internals.h' target/riscv: Include missing headers in 'vector_internals.h' target/riscv: Check svukte is not enabled in RV32 target/riscv: Expose svukte ISA extension target/riscv: Check memory access to meet svukte rule target/riscv: Support hstatus[HUKTE] bit when svukte extension is enabled target/riscv: Support senvcfg[UKTE] bit when svukte extension is enabled target/riscv: Add svukte extension capability variable hw/riscv: Add the checking if DTB overlaps to kernel or initrd hw/riscv: Add a new struct RISCVBootInfo hw/riscv: Support to load DTB after 3GB memory on 64-bit system. hw/char/riscv_htif: Clarify MemoryRegionOps expect 32-bit accesses hw/char/riscv_htif: Explicit little-endian implementation MAINTAINERS: Cover RISC-V HTIF interface tests/qtest/bios-tables-test: Update virt SPCR golden reference for RISC-V hw/acpi: Upgrade ACPI SPCR table to support SPCR table revision 4 format qtest: allow SPCR acpi table changes ... Conflicts: target/riscv/cpu.c Merge conflict with DEFINE_PROP_END_OF_LIST() removal. No Property array terminator is needed anymore. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
60a07d4a6e
46 changed files with 1381 additions and 178 deletions
|
@ -112,7 +112,6 @@ typedef struct AcpiSpcrData {
|
|||
uint8_t flow_control;
|
||||
uint8_t terminal_type;
|
||||
uint8_t language;
|
||||
uint8_t reserved1;
|
||||
uint16_t pci_device_id; /* Must be 0xffff if not PCI device */
|
||||
uint16_t pci_vendor_id; /* Must be 0xffff if not PCI device */
|
||||
uint8_t pci_bus;
|
||||
|
@ -120,7 +119,11 @@ typedef struct AcpiSpcrData {
|
|||
uint8_t pci_function;
|
||||
uint32_t pci_flags;
|
||||
uint8_t pci_segment;
|
||||
uint32_t reserved2;
|
||||
uint32_t uart_clk_freq;
|
||||
uint32_t precise_baudrate;
|
||||
uint32_t namespace_string_length;
|
||||
uint32_t namespace_string_offset;
|
||||
char namespace_string[];
|
||||
} AcpiSpcrData;
|
||||
|
||||
#define ACPI_FADT_ARM_PSCI_COMPLIANT (1 << 0)
|
||||
|
|
|
@ -507,5 +507,5 @@ void build_tpm2(GArray *table_data, BIOSLinker *linker, GArray *tcpalog,
|
|||
|
||||
void build_spcr(GArray *table_data, BIOSLinker *linker,
|
||||
const AcpiSpcrData *f, const uint8_t rev,
|
||||
const char *oem_id, const char *oem_table_id);
|
||||
const char *oem_id, const char *oem_table_id, const char *name);
|
||||
#endif
|
||||
|
|
|
@ -68,9 +68,17 @@ struct RISCVAPLICState {
|
|||
uint32_t num_irqs;
|
||||
bool msimode;
|
||||
bool mmode;
|
||||
|
||||
/* To support KVM aia=aplic-imsic with irqchip split mode */
|
||||
bool kvm_splitmode;
|
||||
uint32_t kvm_msicfgaddr;
|
||||
uint32_t kvm_msicfgaddrH;
|
||||
};
|
||||
|
||||
void riscv_aplic_add_child(DeviceState *parent, DeviceState *child);
|
||||
bool riscv_is_kvm_aia_aplic_imsic(bool msimode);
|
||||
bool riscv_use_emulated_aplic(bool msimode);
|
||||
void riscv_aplic_set_kvm_msicfgaddr(RISCVAPLICState *aplic, hwaddr addr);
|
||||
|
||||
DeviceState *riscv_aplic_create(hwaddr addr, hwaddr size,
|
||||
uint32_t hartid_base, uint32_t num_harts, uint32_t num_sources,
|
||||
|
|
|
@ -27,11 +27,23 @@
|
|||
#define RISCV32_BIOS_BIN "opensbi-riscv32-generic-fw_dynamic.bin"
|
||||
#define RISCV64_BIOS_BIN "opensbi-riscv64-generic-fw_dynamic.bin"
|
||||
|
||||
typedef struct RISCVBootInfo {
|
||||
ssize_t kernel_size;
|
||||
hwaddr image_low_addr;
|
||||
hwaddr image_high_addr;
|
||||
|
||||
hwaddr initrd_start;
|
||||
ssize_t initrd_size;
|
||||
|
||||
bool is_32bit;
|
||||
} RISCVBootInfo;
|
||||
|
||||
bool riscv_is_32bit(RISCVHartArrayState *harts);
|
||||
|
||||
char *riscv_plic_hart_config_string(int hart_count);
|
||||
|
||||
target_ulong riscv_calc_kernel_start_addr(RISCVHartArrayState *harts,
|
||||
void riscv_boot_info_init(RISCVBootInfo *info, RISCVHartArrayState *harts);
|
||||
target_ulong riscv_calc_kernel_start_addr(RISCVBootInfo *info,
|
||||
target_ulong firmware_end_addr);
|
||||
target_ulong riscv_find_and_load_firmware(MachineState *machine,
|
||||
const char *default_machine_firmware,
|
||||
|
@ -43,13 +55,13 @@ char *riscv_find_firmware(const char *firmware_filename,
|
|||
target_ulong riscv_load_firmware(const char *firmware_filename,
|
||||
hwaddr *firmware_load_addr,
|
||||
symbol_fn_t sym_cb);
|
||||
target_ulong riscv_load_kernel(MachineState *machine,
|
||||
RISCVHartArrayState *harts,
|
||||
target_ulong firmware_end_addr,
|
||||
bool load_initrd,
|
||||
symbol_fn_t sym_cb);
|
||||
uint64_t riscv_compute_fdt_addr(hwaddr dram_start, uint64_t dram_size,
|
||||
MachineState *ms);
|
||||
void riscv_load_kernel(MachineState *machine,
|
||||
RISCVBootInfo *info,
|
||||
target_ulong kernel_start_addr,
|
||||
bool load_initrd,
|
||||
symbol_fn_t sym_cb);
|
||||
uint64_t riscv_compute_fdt_addr(hwaddr dram_base, hwaddr dram_size,
|
||||
MachineState *ms, RISCVBootInfo *info);
|
||||
void riscv_load_fdt(hwaddr fdt_addr, void *fdt);
|
||||
void riscv_setup_rom_reset_vec(MachineState *machine, RISCVHartArrayState *harts,
|
||||
hwaddr saddr,
|
||||
|
|
|
@ -30,7 +30,15 @@ typedef struct RISCVIOMMUState RISCVIOMMUState;
|
|||
typedef struct RISCVIOMMUSpace RISCVIOMMUSpace;
|
||||
|
||||
#define TYPE_RISCV_IOMMU_PCI "riscv-iommu-pci"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(RISCVIOMMUStatePci, RISCV_IOMMU_PCI)
|
||||
OBJECT_DECLARE_TYPE(RISCVIOMMUStatePci, RISCVIOMMUPciClass, RISCV_IOMMU_PCI)
|
||||
typedef struct RISCVIOMMUStatePci RISCVIOMMUStatePci;
|
||||
typedef struct RISCVIOMMUPciClass RISCVIOMMUPciClass;
|
||||
|
||||
#define TYPE_RISCV_IOMMU_SYS "riscv-iommu-device"
|
||||
OBJECT_DECLARE_TYPE(RISCVIOMMUStateSys, RISCVIOMMUSysClass, RISCV_IOMMU_SYS)
|
||||
typedef struct RISCVIOMMUStateSys RISCVIOMMUStateSys;
|
||||
typedef struct RISCVIOMMUSysClass RISCVIOMMUSysClass;
|
||||
|
||||
#define FDT_IRQ_TYPE_EDGE_LOW 1
|
||||
|
||||
#endif
|
||||
|
|
|
@ -62,6 +62,7 @@ struct RISCVVirtState {
|
|||
OnOffAuto acpi;
|
||||
const MemMapEntry *memmap;
|
||||
struct GPEXHost *gpex_host;
|
||||
OnOffAuto iommu_sys;
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -84,7 +85,8 @@ enum {
|
|||
VIRT_PCIE_MMIO,
|
||||
VIRT_PCIE_PIO,
|
||||
VIRT_PLATFORM_BUS,
|
||||
VIRT_PCIE_ECAM
|
||||
VIRT_PCIE_ECAM,
|
||||
VIRT_IOMMU_SYS,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -93,6 +95,7 @@ enum {
|
|||
VIRTIO_IRQ = 1, /* 1 to 8 */
|
||||
VIRTIO_COUNT = 8,
|
||||
PCIE_IRQ = 0x20, /* 32 to 35 */
|
||||
IOMMU_SYS_IRQ = 0x24, /* 36-39 */
|
||||
VIRT_PLATFORM_BUS_IRQ = 64, /* 64 to 95 */
|
||||
};
|
||||
|
||||
|
@ -129,6 +132,7 @@ enum {
|
|||
1 + FDT_APLIC_INT_CELLS)
|
||||
|
||||
bool virt_is_acpi_enabled(RISCVVirtState *s);
|
||||
bool virt_is_iommu_sys_enabled(RISCVVirtState *s);
|
||||
void virt_acpi_setup(RISCVVirtState *vms);
|
||||
uint32_t imsic_num_bits(uint32_t count);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue