mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
target/riscv: Implement AIA local interrupt priorities
The AIA spec defines programmable 8-bit priority for each local interrupt at M-level, S-level and VS-level so we extend local interrupt processing to consider AIA interrupt priorities. The AIA CSRs which help software configure local interrupt priorities will be added by subsequent patches. Signed-off-by: Anup Patel <anup.patel@wdc.com> Signed-off-by: Anup Patel <anup@brainfault.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-id: 20220204174700.534953-10-anup@brainfault.org Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
69077dd687
commit
43dc93af36
4 changed files with 298 additions and 25 deletions
|
@ -192,6 +192,10 @@ struct CPURISCVState {
|
|||
target_ulong mcause;
|
||||
target_ulong mtval; /* since: priv-1.10.0 */
|
||||
|
||||
/* Machine and Supervisor interrupt priorities */
|
||||
uint8_t miprio[64];
|
||||
uint8_t siprio[64];
|
||||
|
||||
/* Hypervisor CSRs */
|
||||
target_ulong hstatus;
|
||||
target_ulong hedeleg;
|
||||
|
@ -204,6 +208,9 @@ struct CPURISCVState {
|
|||
target_ulong hgeip;
|
||||
uint64_t htimedelta;
|
||||
|
||||
/* Hypervisor controlled virtual interrupt priorities */
|
||||
uint8_t hviprio[64];
|
||||
|
||||
/* Upper 64-bits of 128-bit CSRs */
|
||||
uint64_t mscratchh;
|
||||
uint64_t sscratchh;
|
||||
|
@ -415,6 +422,11 @@ int riscv_cpu_write_elf32_note(WriteCoreDumpFunction f, CPUState *cs,
|
|||
int cpuid, void *opaque);
|
||||
int riscv_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
|
||||
int riscv_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
|
||||
int riscv_cpu_hviprio_index2irq(int index, int *out_irq, int *out_rdzero);
|
||||
uint8_t riscv_cpu_default_priority(int irq);
|
||||
int riscv_cpu_mirq_pending(CPURISCVState *env);
|
||||
int riscv_cpu_sirq_pending(CPURISCVState *env);
|
||||
int riscv_cpu_vsirq_pending(CPURISCVState *env);
|
||||
bool riscv_cpu_fp_enabled(CPURISCVState *env);
|
||||
target_ulong riscv_cpu_get_geilen(CPURISCVState *env);
|
||||
void riscv_cpu_set_geilen(CPURISCVState *env, target_ulong geilen);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue