[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ RFC 6/6] hw/riscv: virt: DEBUG PATCH to test PMU
From: |
Atish Patra |
Subject: |
[ RFC 6/6] hw/riscv: virt: DEBUG PATCH to test PMU |
Date: |
Fri, 19 Mar 2021 12:45:34 -0700 |
** DO NOT MERGE IT **
This is just a test patch to test various kinds of PMU events. The counters
don't actually increment as virt machine doesn't support any of the PMU
events. However, it helps to test the OpenSBI/Kernel implementation.
Please ignore this patch while merging it.
Signed-off-by: Atish Patra <atish.patra@wdc.com>
---
hw/riscv/virt.c | 34 ++++++++++++++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
index 84570ad6425b..59d8325bf2a1 100644
--- a/hw/riscv/virt.c
+++ b/hw/riscv/virt.c
@@ -194,7 +194,9 @@ static void create_fdt(RISCVVirtState *s, const MemMapEntry
*memmap,
char *name, *clint_name, *plic_name, *clust_name, *pmu_name;
hwaddr flashsize = virt_memmap[VIRT_FLASH].size / 2;
hwaddr flashbase = virt_memmap[VIRT_FLASH].base;
- uint32_t pmu_event_ctr_map[6] = {};
+ uint32_t pmu_event_map[6] = {};
+ uint32_t pmu_event_ctr_map[12] = {};
+ uint32_t pmu_raw_event_ctr_map[6] = {};
if (mc->dtb) {
fdt = s->fdt = load_device_tree(mc->dtb, &s->fdt_size);
@@ -288,18 +290,46 @@ static void create_fdt(RISCVVirtState *s, const
MemMapEntry *memmap,
rc = fdt_path_offset(fdt, "/pmu");
if (rc == -FDT_ERR_NOTFOUND) {
+ pmu_event_map[0] = cpu_to_be32(0x00000009);
+ pmu_event_map[1] = cpu_to_be32(0x00000000);
+ pmu_event_map[2] = cpu_to_be32(0x00000200);
+ pmu_event_map[3] = cpu_to_be32(0x00010000);
+ pmu_event_map[4] = cpu_to_be32(0x00000100);
+ pmu_event_map[5] = cpu_to_be32(0x00000002);
pmu_name = g_strdup_printf("/pmu");
qemu_fdt_add_subnode(fdt, pmu_name);
qemu_fdt_setprop_string(fdt, pmu_name, "compatible",
"riscv,pmu");
+ qemu_fdt_setprop(fdt, pmu_name, "opensbi,event-to-mhpmevent",
+ pmu_event_map, sizeof(pmu_event_map));
+
pmu_event_ctr_map[0] = cpu_to_be32(0x00000001);
pmu_event_ctr_map[1] = cpu_to_be32(0x00000001);
pmu_event_ctr_map[2] = cpu_to_be32(0x00000001);
pmu_event_ctr_map[3] = cpu_to_be32(0x00000002);
pmu_event_ctr_map[4] = cpu_to_be32(0x00000002);
pmu_event_ctr_map[5] = cpu_to_be32(0x00000004);
+
+ pmu_event_ctr_map[6] = cpu_to_be32(0x00000003);
+ pmu_event_ctr_map[7] = cpu_to_be32(0x0000000A);
+ pmu_event_ctr_map[8] = cpu_to_be32(0x00000FF8);
+ pmu_event_ctr_map[9] = cpu_to_be32(0x00010000);
+ pmu_event_ctr_map[10] = cpu_to_be32(0x001C000);
+ pmu_event_ctr_map[11] = cpu_to_be32(0x00001F0);
+
qemu_fdt_setprop(fdt, pmu_name, "opensbi,event-to-counters",
- pmu_event_ctr_map, sizeof(pmu_event_ctr_map));
+ pmu_event_ctr_map, sizeof(pmu_event_ctr_map));
+
+ pmu_raw_event_ctr_map[0] = cpu_to_be32(0x00000000);
+ pmu_raw_event_ctr_map[1] = cpu_to_be32(0x00000002);
+ pmu_raw_event_ctr_map[2] = cpu_to_be32(0x00000F00);
+ pmu_raw_event_ctr_map[3] = cpu_to_be32(0x00000000);
+ pmu_raw_event_ctr_map[4] = cpu_to_be32(0x00000003);
+ pmu_raw_event_ctr_map[5] = cpu_to_be32(0x000000F0);
+ qemu_fdt_setprop(fdt, pmu_name,
"opensbi,raw-event-to-counters",
+ pmu_raw_event_ctr_map,
+ sizeof(pmu_raw_event_ctr_map));
+
g_free(pmu_name);
}
addr = memmap[VIRT_DRAM].base + riscv_socket_mem_offset(mc, socket);
--
2.25.1
- [ RFC 0/6] Improve PMU support, Atish Patra, 2021/03/19
- [ RFC 1/6] target/riscv: Remove privilege v1.9 specific CSR related code, Atish Patra, 2021/03/19
- [ RFC 2/6] target/riscv: Implement mcountinhibit CSR, Atish Patra, 2021/03/19
- [ RFC 5/6] hw/riscv: virt: Add PMU device tree node to support SBI PMU extension, Atish Patra, 2021/03/19
- [ RFC 6/6] hw/riscv: virt: DEBUG PATCH to test PMU,
Atish Patra <=
- [ RFC 4/6] target/riscv: Add support for hpmcounters/hpmevents, Atish Patra, 2021/03/19
- [ RFC 3/6] target/riscv: Support mcycle/minstret write operation, Atish Patra, 2021/03/19