[PATCH 2/3] target/loongarch: Add PMU register dump support in KVM mode

Bibo Mao posted 3 patches 3 months, 2 weeks ago
Maintainers: Song Gao <gaosong@loongson.cn>
There is a newer version of this series
[PATCH 2/3] target/loongarch: Add PMU register dump support in KVM mode
Posted by Bibo Mao 3 months, 2 weeks ago
PMU is supported in KVM mode. With info registers command, PMU CSR
registers should be dumped also. And it is not necessary in TCG mode.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
 target/loongarch/cpu.c | 14 +++++++++++++-
 target/loongarch/csr.c |  8 ++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
index 86490e0f72..deb7b0bcb9 100644
--- a/target/loongarch/cpu.c
+++ b/target/loongarch/cpu.c
@@ -129,6 +129,17 @@ static void loongarch_la464_init_csr(Object *obj)
         set_csr_flag(LOONGARCH_CSR_MERRERA, CSRFL_UNUSED);
         set_csr_flag(LOONGARCH_CSR_MERRSAVE, CSRFL_UNUSED);
         set_csr_flag(LOONGARCH_CSR_CTAG, CSRFL_UNUSED);
+
+        if (cpu->pmu != ON_OFF_AUTO_ON) {
+            set_csr_flag(LOONGARCH_CSR_PERFCTRL0, CSRFL_UNUSED);
+            set_csr_flag(LOONGARCH_CSR_PERFCNTR0, CSRFL_UNUSED);
+            set_csr_flag(LOONGARCH_CSR_PERFCTRL1, CSRFL_UNUSED);
+            set_csr_flag(LOONGARCH_CSR_PERFCNTR1, CSRFL_UNUSED);
+            set_csr_flag(LOONGARCH_CSR_PERFCTRL2, CSRFL_UNUSED);
+            set_csr_flag(LOONGARCH_CSR_PERFCNTR2, CSRFL_UNUSED);
+            set_csr_flag(LOONGARCH_CSR_PERFCTRL3, CSRFL_UNUSED);
+            set_csr_flag(LOONGARCH_CSR_PERFCNTR3, CSRFL_UNUSED);
+        }
     }
 #endif
 }
@@ -346,8 +357,9 @@ static void loongarch_la464_initfn(Object *obj)
     env->CSR_PRCFG3 = FIELD_DP64(env->CSR_PRCFG3, CSR_PRCFG3, STLB_SETS, 8);
 
     cpu->msgint = ON_OFF_AUTO_OFF;
-    loongarch_la464_init_csr(obj);
     loongarch_cpu_post_init(obj);
+    /* Some features with OnOffAuto type is detected after cpu_post_init */
+    loongarch_la464_init_csr(obj);
 }
 
 static void loongarch_la132_initfn(Object *obj)
diff --git a/target/loongarch/csr.c b/target/loongarch/csr.c
index f973780bba..8574e5bc0a 100644
--- a/target/loongarch/csr.c
+++ b/target/loongarch/csr.c
@@ -94,6 +94,14 @@ static CSRInfo csr_info[] = {
     CSR_OFF_ARRAY(DMW, 1),
     CSR_OFF_ARRAY(DMW, 2),
     CSR_OFF_ARRAY(DMW, 3),
+    CSR_OFF(PERFCTRL0),
+    CSR_OFF(PERFCNTR0),
+    CSR_OFF(PERFCTRL1),
+    CSR_OFF(PERFCNTR1),
+    CSR_OFF(PERFCTRL2),
+    CSR_OFF(PERFCNTR2),
+    CSR_OFF(PERFCTRL3),
+    CSR_OFF(PERFCNTR3),
     CSR_OFF(DBG),
     CSR_OFF(DERA),
     CSR_OFF(DSAVE),
-- 
2.39.3