mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33: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
|
@ -400,6 +400,10 @@ void restore_state_to_opc(CPURISCVState *env, TranslationBlock *tb,
|
|||
|
||||
static void riscv_cpu_reset(DeviceState *dev)
|
||||
{
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
uint8_t iprio;
|
||||
int i, irq, rdzero;
|
||||
#endif
|
||||
CPUState *cs = CPU(dev);
|
||||
RISCVCPU *cpu = RISCV_CPU(cs);
|
||||
RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(cpu);
|
||||
|
@ -432,6 +436,21 @@ static void riscv_cpu_reset(DeviceState *dev)
|
|||
env->miclaim = MIP_SGEIP;
|
||||
env->pc = env->resetvec;
|
||||
env->two_stage_lookup = false;
|
||||
|
||||
/* Initialized default priorities of local interrupts. */
|
||||
for (i = 0; i < ARRAY_SIZE(env->miprio); i++) {
|
||||
iprio = riscv_cpu_default_priority(i);
|
||||
env->miprio[i] = (i == IRQ_M_EXT) ? 0 : iprio;
|
||||
env->siprio[i] = (i == IRQ_S_EXT) ? 0 : iprio;
|
||||
env->hviprio[i] = 0;
|
||||
}
|
||||
i = 0;
|
||||
while (!riscv_cpu_hviprio_index2irq(i, &irq, &rdzero)) {
|
||||
if (!rdzero) {
|
||||
env->hviprio[irq] = env->miprio[irq];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
/* mmte is supposed to have pm.current hardwired to 1 */
|
||||
env->mmte |= (PM_EXT_INITIAL | MMTE_M_PM_CURRENT);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue