| /* SPDX-License-Identifier: BSD-2-Clause */ |
| /* |
| * QEMU RISC-V Board Compatible with the Xiangshan Kunminghu |
| * FPGA prototype platform |
| * |
| * Copyright (c) 2025 Beijing Institute of Open Source Chip (BOSC) |
| * |
| */ |
| |
| #ifndef HW_XIANGSHAN_KMH_H |
| #define HW_XIANGSHAN_KMH_H |
| |
| #include "hw/boards.h" |
| #include "hw/riscv/riscv_hart.h" |
| |
| #define XIANGSHAN_KMH_MAX_CPUS 16 |
| |
| typedef struct XiangshanKmhSoCState { |
| /*< private >*/ |
| DeviceState parent_obj; |
| |
| /*< public >*/ |
| RISCVHartArrayState cpus; |
| DeviceState *irqchip; |
| MemoryRegion rom; |
| } XiangshanKmhSoCState; |
| |
| #define TYPE_XIANGSHAN_KMH_SOC "xiangshan.kunminghu.soc" |
| DECLARE_INSTANCE_CHECKER(XiangshanKmhSoCState, XIANGSHAN_KMH_SOC, |
| TYPE_XIANGSHAN_KMH_SOC) |
| |
| typedef struct XiangshanKmhState { |
| /*< private >*/ |
| MachineState parent_obj; |
| |
| /*< public >*/ |
| XiangshanKmhSoCState soc; |
| } XiangshanKmhState; |
| |
| #define TYPE_XIANGSHAN_KMH_MACHINE MACHINE_TYPE_NAME("xiangshan-kunminghu") |
| DECLARE_INSTANCE_CHECKER(XiangshanKmhState, XIANGSHAN_KMH_MACHINE, |
| TYPE_XIANGSHAN_KMH_MACHINE) |
| |
| enum { |
| XIANGSHAN_KMH_ROM, |
| XIANGSHAN_KMH_UART0, |
| XIANGSHAN_KMH_CLINT, |
| XIANGSHAN_KMH_APLIC_M, |
| XIANGSHAN_KMH_APLIC_S, |
| XIANGSHAN_KMH_IMSIC_M, |
| XIANGSHAN_KMH_IMSIC_S, |
| XIANGSHAN_KMH_DRAM, |
| }; |
| |
| enum { |
| XIANGSHAN_KMH_UART0_IRQ = 10, |
| }; |
| |
| /* Indicating Timebase-freq (1MHZ) */ |
| #define XIANGSHAN_KMH_CLINT_TIMEBASE_FREQ 1000000 |
| |
| #define XIANGSHAN_KMH_IMSIC_NUM_IDS 255 |
| #define XIANGSHAN_KMH_IMSIC_NUM_GUESTS 7 |
| #define XIANGSHAN_KMH_IMSIC_GUEST_BITS 3 |
| |
| #define XIANGSHAN_KMH_APLIC_NUM_SOURCES 96 |
| |
| #endif |