|
@@ -1072,30 +1072,59 @@ impl Iterator for CounterMask {
|
|
|
|
|
|
// TODO: If all firmware events are implemented,
|
|
|
// `PMU_FIRMWARE_EVENT_SUPPORTED` should be removed.
|
|
|
-const PMU_FIRMWARE_EVENT_SUPPORTED: [bool; 22] = [
|
|
|
- true, // SBI_PMU_FW_MISALIGNED_LOAD
|
|
|
- true, // SBI_PMU_FW_MISALIGNED_STORE
|
|
|
- false, // SBI_PMU_FW_ACCESS_LOAD
|
|
|
- false, // SBI_PMU_FW_ACCESS_STORE
|
|
|
- true, // SBI_PMU_FW_ILLEGAL_INSN
|
|
|
- true, // SBI_PMU_FW_SET_TIMER
|
|
|
- true, // SBI_PMU_FW_IPI_SENT
|
|
|
- true, // SBI_PMU_FW_IPI_RECEIVED
|
|
|
- true, // SBI_PMU_FW_FENCE_I_SENT
|
|
|
- true, // SBI_PMU_FW_FENCE_I_RECEIVED
|
|
|
- true, // SBI_PMU_FW_SFENCE_VMA_SENT
|
|
|
- true, // SBI_PMU_FW_SFENCE_VMA_RECEIVED
|
|
|
- true, // SBI_PMU_FW_SFENCE_VMA_ASID_SENT
|
|
|
- true, // SBI_PMU_FW_SFENCE_VMA_ASID_RECEIVED
|
|
|
- true, // SBI_PMU_FW_HFENCE_GVMA_SENT
|
|
|
- true, // SBI_PMU_FW_HFENCE_GVMA_RECEIVED
|
|
|
- true, // SBI_PMU_FW_HFENCE_GVMA_VMID_SENT
|
|
|
- true, // SBI_PMU_FW_HFENCE_GVMA_VMID_RECEIVED
|
|
|
- true, // SBI_PMU_FW_HFENCE_VVMA_SENT
|
|
|
- true, // SBI_PMU_FW_HFENCE_VVMA_RECEIVED
|
|
|
- true, // SBI_PMU_FW_HFENCE_VVMA_ASID_SENT
|
|
|
- true, // SBI_PMU_FW_HFENCE_VVMA_ASID_RECEIVED
|
|
|
-];
|
|
|
+cfg_if::cfg_if! {
|
|
|
+ if #[cfg(feature = "hypervisor")] {
|
|
|
+ const PMU_FIRMWARE_EVENT_SUPPORTED: [bool; 22] = [
|
|
|
+ true, // SBI_PMU_FW_MISALIGNED_LOAD
|
|
|
+ true, // SBI_PMU_FW_MISALIGNED_STORE
|
|
|
+ false, // SBI_PMU_FW_ACCESS_LOAD
|
|
|
+ false, // SBI_PMU_FW_ACCESS_STORE
|
|
|
+ true, // SBI_PMU_FW_ILLEGAL_INSN
|
|
|
+ true, // SBI_PMU_FW_SET_TIMER
|
|
|
+ true, // SBI_PMU_FW_IPI_SENT
|
|
|
+ true, // SBI_PMU_FW_IPI_RECEIVED
|
|
|
+ true, // SBI_PMU_FW_FENCE_I_SENT
|
|
|
+ true, // SBI_PMU_FW_FENCE_I_RECEIVED
|
|
|
+ true, // SBI_PMU_FW_SFENCE_VMA_SENT
|
|
|
+ true, // SBI_PMU_FW_SFENCE_VMA_RECEIVED
|
|
|
+ true, // SBI_PMU_FW_SFENCE_VMA_ASID_SENT
|
|
|
+ true, // SBI_PMU_FW_SFENCE_VMA_ASID_RECEIVED
|
|
|
+ true, // SBI_PMU_FW_HFENCE_GVMA_SENT
|
|
|
+ true, // SBI_PMU_FW_HFENCE_GVMA_RECEIVED
|
|
|
+ true, // SBI_PMU_FW_HFENCE_GVMA_VMID_SENT
|
|
|
+ true, // SBI_PMU_FW_HFENCE_GVMA_VMID_RECEIVED
|
|
|
+ true, // SBI_PMU_FW_HFENCE_VVMA_SENT
|
|
|
+ true, // SBI_PMU_FW_HFENCE_VVMA_RECEIVED
|
|
|
+ true, // SBI_PMU_FW_HFENCE_VVMA_ASID_SENT
|
|
|
+ true, // SBI_PMU_FW_HFENCE_VVMA_ASID_RECEIVED
|
|
|
+ ];
|
|
|
+ } else {
|
|
|
+ const PMU_FIRMWARE_EVENT_SUPPORTED: [bool; 22] = [
|
|
|
+ true, // SBI_PMU_FW_MISALIGNED_LOAD
|
|
|
+ true, // SBI_PMU_FW_MISALIGNED_STORE
|
|
|
+ false, // SBI_PMU_FW_ACCESS_LOAD
|
|
|
+ false, // SBI_PMU_FW_ACCESS_STORE
|
|
|
+ true, // SBI_PMU_FW_ILLEGAL_INSN
|
|
|
+ true, // SBI_PMU_FW_SET_TIMER
|
|
|
+ true, // SBI_PMU_FW_IPI_SENT
|
|
|
+ true, // SBI_PMU_FW_IPI_RECEIVED
|
|
|
+ true, // SBI_PMU_FW_FENCE_I_SENT
|
|
|
+ true, // SBI_PMU_FW_FENCE_I_RECEIVED
|
|
|
+ true, // SBI_PMU_FW_SFENCE_VMA_SENT
|
|
|
+ true, // SBI_PMU_FW_SFENCE_VMA_RECEIVED
|
|
|
+ true, // SBI_PMU_FW_SFENCE_VMA_ASID_SENT
|
|
|
+ true, // SBI_PMU_FW_SFENCE_VMA_ASID_RECEIVED
|
|
|
+ false, // SBI_PMU_FW_HFENCE_GVMA_SENT
|
|
|
+ false, // SBI_PMU_FW_HFENCE_GVMA_RECEIVED
|
|
|
+ false, // SBI_PMU_FW_HFENCE_GVMA_VMID_SENT
|
|
|
+ false, // SBI_PMU_FW_HFENCE_GVMA_VMID_RECEIVED
|
|
|
+ false, // SBI_PMU_FW_HFENCE_VVMA_SENT
|
|
|
+ false, // SBI_PMU_FW_HFENCE_VVMA_RECEIVED
|
|
|
+ false, // SBI_PMU_FW_HFENCE_VVMA_ASID_SENT
|
|
|
+ false, // SBI_PMU_FW_HFENCE_VVMA_ASID_RECEIVED
|
|
|
+ ];
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
pub fn pmu_firmware_counter_increment(firmware_event: usize) {
|
|
|
let pmu_state = &mut hart_context_mut(current_hartid()).pmu_state;
|