The latest AIA specification defines ISA extension names for AIA CSRs
so we should use these new ISA names instead of a riscv_aia_available
feature flag.
arch/riscv/cpu/generic/cpu_init.c | 11 +----------
arch/riscv/cpu/generic/cpu_vcpu_helper.c | 6 +++---
arch/riscv/cpu/generic/include/cpu_hwcap.h | 3 ---
drivers/irqchip/irq-riscv-imsic.c | 2 +-
drivers/irqchip/irq-riscv-intc.c | 8 +++++---
5 files changed, 10 insertions(+), 20 deletions(-)
diff --git a/arch/riscv/cpu/generic/cpu_init.c b/arch/riscv/cpu/generic/cpu_init.c
index a402fe14..0be32648 100644
--- a/arch/riscv/cpu/generic/cpu_init.c
+++ b/arch/riscv/cpu/generic/cpu_init.c
@@ -231,12 +231,11 @@ unsigned long riscv_stage2_vmid_bits = 0;
unsigned long riscv_stage2_vmid_nested = 0;
bool riscv_stage2_use_vmid = false;
unsigned long riscv_timer_hz = 0;
-bool riscv_aia_available = true;
int __init arch_cpu_nascent_init(void)
{
DECLARE_BITMAP(this_isa, RISCV_ISA_EXT_MAX);
- struct vmm_devtree_node *dn, *in, *cpus;
+ struct vmm_devtree_node *dn, *cpus;
const char *isa, *str;
unsigned long val, this_xlen;
int rc = VMM_OK;
@@ -298,14 +297,6 @@ int __init arch_cpu_nascent_init(void)
break;
}
- in = vmm_devtree_find_compatible(dn, NULL,
- "riscv,cpu-intc-aia");
- if (!in) {
- riscv_aia_available = false;
- } else {
- vmm_devtree_dref_node(in);
- }
-
if (riscv_xlen) {
if (riscv_xlen != this_xlen ||
riscv_xlen != __riscv_xlen) {
diff --git a/arch/riscv/cpu/generic/cpu_vcpu_helper.c b/arch/riscv/cpu/generic/cpu_vcpu_helper.c
index 60eda0fa..da8f9ecd 100644
--- a/arch/riscv/cpu/generic/cpu_vcpu_helper.c
+++ b/arch/riscv/cpu/generic/cpu_vcpu_helper.c
@@ -288,7 +288,7 @@ int arch_vcpu_init(struct vmm_vcpu *vcpu)
riscv_priv(vcpu)->isa[0] &= RISCV_ISA_ALLOWED;
/* H-extension only available when AIA CSRs are available */
- if (!riscv_aia_available) {
+ if (!riscv_isa_extension_available(NULL, SxAIA)) {
riscv_priv(vcpu)->isa[0] &=
~riscv_isa_extension_mask(h);
}
@@ -451,7 +451,7 @@ void cpu_vcpu_irq_deleg_update(struct vmm_vcpu *vcpu, bool nested_virt)
csr_write(CSR_HIDELEG, 0);
/* Enable sip/siph and sie/sieh trapping */
- if (riscv_aia_available) {
+ if (riscv_isa_extension_available(NULL, SxAIA)) {
csr_set(CSR_HVICTL, HVICTL_VTI);
}
} else {
@@ -459,7 +459,7 @@ void cpu_vcpu_irq_deleg_update(struct vmm_vcpu *vcpu, bool nested_virt)
csr_write(CSR_HIDELEG, HIDELEG_DEFAULT);
/* Disable sip/siph and sie/sieh trapping */
- if (riscv_aia_available) {
+ if (riscv_isa_extension_available(NULL, SxAIA)) {
csr_clear(CSR_HVICTL, HVICTL_VTI);
}
}
diff --git a/arch/riscv/cpu/generic/include/cpu_hwcap.h b/arch/riscv/cpu/generic/include/cpu_hwcap.h
index 2bdaed1d..3fda16ed 100644
--- a/arch/riscv/cpu/generic/include/cpu_hwcap.h
+++ b/arch/riscv/cpu/generic/include/cpu_hwcap.h
@@ -146,7 +146,4 @@ extern unsigned long riscv_stage2_vmid_nested;
/** RISC-V Time Base Frequency */
extern unsigned long riscv_timer_hz;
-/** RISC-V AIA CSRs available */
-extern bool riscv_aia_available;
-
#endif
diff --git a/drivers/irqchip/irq-riscv-imsic.c b/drivers/irqchip/irq-riscv-imsic.c
index e6d9a04b..70e8cc11 100644
--- a/drivers/irqchip/irq-riscv-imsic.c
+++ b/drivers/irqchip/irq-riscv-imsic.c
@@ -775,7 +775,7 @@ static int __init imsic_init(struct vmm_devtree_node *node)
return VMM_ENODEV;
}
- if (!riscv_aia_available) {
+ if (!riscv_isa_extension_available(NULL, SxAIA)) {
vmm_lerror(node->name, "AIA support not available\n");
return VMM_ENODEV;
}
diff --git a/drivers/irqchip/irq-riscv-intc.c b/drivers/irqchip/irq-riscv-intc.c
index 4e34f184..2cceade3 100644
--- a/drivers/irqchip/irq-riscv-intc.c
+++ b/drivers/irqchip/irq-riscv-intc.c
@@ -123,7 +123,7 @@ static int __init riscv_intc_init(struct vmm_devtree_node *node)
/* Determine number of IRQs */
nr_irqs = BITS_PER_LONG;
- if (riscv_aia_available && BITS_PER_LONG == 32)
+ if (riscv_isa_extension_available(NULL, SxAIA) && BITS_PER_LONG == 32)
nr_irqs = nr_irqs * 2;
/* Register IRQ domain */
@@ -156,7 +156,7 @@ static int __init riscv_intc_init(struct vmm_devtree_node *node)
}
/* Register active IRQ callback */
- if (riscv_aia_available) {
+ if (riscv_isa_extension_available(NULL, SxAIA)) {
vmm_host_irq_set_active_callback(riscv_intc_aia_active_irq);
} else {
vmm_host_irq_set_active_callback(riscv_intc_active_irq);
@@ -164,7 +164,9 @@ static int __init riscv_intc_init(struct vmm_devtree_node *node)
/* Announce RISC-V INTC */
vmm_init_printf("riscv-intc: registered %d local interrupts%s\n",
- nr_irqs, (riscv_aia_available) ? " with AIA" : "");
+ nr_irqs,
+ (riscv_isa_extension_available(NULL, SxAIA)) ?
+ " with AIA" : "");
return VMM_OK;
}
--
2.34.1