diff mbox series

[V4] perf vendor events riscv: add T-HEAD C9xx JSON file

Message ID IA1PR20MB4953DD82D0116EC291C21777BBE2A@IA1PR20MB4953.namprd20.prod.outlook.com (mailing list archive)
State Handled Elsewhere
Headers show
Series [V4] perf vendor events riscv: add T-HEAD C9xx JSON file | expand

Checks

Context Check Description
conchuod/cover_letter success Single patches do not need cover letters
conchuod/tree_selection success Guessed tree name to be for-next at HEAD 9f944d2e0ab3
conchuod/fixes_present success Fixes tag not required for -next series
conchuod/maintainers_pattern success MAINTAINERS pattern errors before the patch: 4 and now 4
conchuod/verify_signedoff success Signed-off-by tag matches author and committer
conchuod/kdoc success Errors and warnings before: 0 this patch: 0
conchuod/build_rv64_clang_allmodconfig success Errors and warnings before: 9 this patch: 9
conchuod/module_param success Was 0 now: 0
conchuod/build_rv64_gcc_allmodconfig success Errors and warnings before: 9 this patch: 9
conchuod/build_rv32_defconfig success Build OK
conchuod/dtb_warn_rv64 success Errors and warnings before: 12 this patch: 12
conchuod/header_inline success No static functions without inline keyword in header files
conchuod/checkpatch warning WARNING: 'thead' may be misspelled - perhaps 'thread'? WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
conchuod/build_rv64_nommu_k210_defconfig success Build OK
conchuod/verify_fixes success No Fixes tag
conchuod/build_rv64_nommu_virt_defconfig success Build OK

Commit Message

Inochi Amaoto Aug. 26, 2023, 8:44 a.m. UTC
Add json file of T-HEAD C9xx series events.

The event idx (raw value) is summary as following:

event id range   | support cpu
 0x01 - 0x2a     |  c906,c910,c920

The event ids are based on the public document of T-HEAD and cover
the c900 series.

These events are the max that c900 series support.
Since T-HEAD let manufacturers decide whether events are usable,
the final support of the perf events is determined by the pmu node
of the soc dtb.

Signed-off-by: Inochi Amaoto <inochiama@outlook.com>
---
Change from V3:
1. fix some typo in json file
2. correct the event id range in commit
3. rename directory to c900-legacy to identify the old T-HEAD cpus

This patch need the following patches for opensbi to function normaly:
https://lists.infradead.org/pipermail/opensbi/2023-August/005500.html

The dtb patch:
https://lists.infradead.org/pipermail/linux-riscv/2023-August/039040.html

A test result on D1 board with mainline opensbi and mainline kernel:
[root@test perf]# ./perf stat -a \
>   -e l1_icache_access \
>   -e l1_icache_miss \
>   -e itlb_miss \
>   -e dtlb_miss \
>   -e jtlb_miss \
>   -e inst_branch_mispredict \
>   -e inst_branch \
>   -e inst_store \
>   -e l1_dcache_read_access \
>   -e l1_dcache_read_miss \
>   -e l1_dcache_write_access \
>   -e l1_dcache_write_miss \
>   -- openssl speed rsa2048
Doing 2048 bits private rsa's for 10s: 100 2048 bits private RSA's in 10.06s
Doing 2048 bits public rsa's for 10s: 4051 2048 bits public RSA's in 10.00s
version: 3.1.2
built on: Sat Aug  5 14:56:47 2023 UTC
options: bn(64,64)
CPUINFO: N/A
                  sign    verify    sign/s verify/s
rsa 2048 bits 0.100600s 0.002469s      9.9    405.1

 Performance counter stats for 'system wide':

     7,120,831,110      l1_icache_access
         2,145,279      l1_icache_miss
         1,307,935      itlb_miss
         2,477,482      dtlb_miss
           402,760      jtlb_miss
         8,043,723      inst_branch_mispredict
       153,469,454      inst_branch
       537,300,381      inst_store
       947,508,099      l1_dcache_read_access
           770,550      l1_dcache_read_miss
       537,262,702      l1_dcache_write_access
           171,436      l1_dcache_write_miss

      20.315046885 seconds time elapsed

---
 tools/perf/pmu-events/arch/riscv/mapfile.csv  |  1 +
 .../arch/riscv/thead/c900-legacy/cache.json   | 67 ++++++++++++++++
 .../riscv/thead/c900-legacy/firmware.json     | 68 ++++++++++++++++
 .../riscv/thead/c900-legacy/instruction.json  | 72 +++++++++++++++++
 .../riscv/thead/c900-legacy/microarch.json    | 80 +++++++++++++++++++
 5 files changed, 288 insertions(+)
 create mode 100644 tools/perf/pmu-events/arch/riscv/thead/c900-legacy/cache.json
 create mode 100644 tools/perf/pmu-events/arch/riscv/thead/c900-legacy/firmware.json
 create mode 100644 tools/perf/pmu-events/arch/riscv/thead/c900-legacy/instruction.json
 create mode 100644 tools/perf/pmu-events/arch/riscv/thead/c900-legacy/microarch.json

--
2.41.0

Comments

Guo Ren Aug. 27, 2023, 11:01 a.m. UTC | #1
Thx for the patch.
Tested-by: Guo Ren <guoren@kernel.org>

On Sat, Aug 26, 2023 at 4:44 AM Inochi Amaoto <inochiama@outlook.com> wrote:
>
> Add json file of T-HEAD C9xx series events.
>
> The event idx (raw value) is summary as following:
>
> event id range   | support cpu
>  0x01 - 0x2a     |  c906,c910,c920
>
> The event ids are based on the public document of T-HEAD and cover
> the c900 series.
>
> These events are the max that c900 series support.
> Since T-HEAD let manufacturers decide whether events are usable,
> the final support of the perf events is determined by the pmu node
> of the soc dtb.
>
> Signed-off-by: Inochi Amaoto <inochiama@outlook.com>
> ---
> Change from V3:
> 1. fix some typo in json file
> 2. correct the event id range in commit
> 3. rename directory to c900-legacy to identify the old T-HEAD cpus
>
> This patch need the following patches for opensbi to function normaly:
> https://lists.infradead.org/pipermail/opensbi/2023-August/005500.html
>
> The dtb patch:
> https://lists.infradead.org/pipermail/linux-riscv/2023-August/039040.html
>
> A test result on D1 board with mainline opensbi and mainline kernel:
> [root@test perf]# ./perf stat -a \
> >   -e l1_icache_access \
> >   -e l1_icache_miss \
> >   -e itlb_miss \
> >   -e dtlb_miss \
> >   -e jtlb_miss \
> >   -e inst_branch_mispredict \
> >   -e inst_branch \
> >   -e inst_store \
> >   -e l1_dcache_read_access \
> >   -e l1_dcache_read_miss \
> >   -e l1_dcache_write_access \
> >   -e l1_dcache_write_miss \
> >   -- openssl speed rsa2048
> Doing 2048 bits private rsa's for 10s: 100 2048 bits private RSA's in 10.06s
> Doing 2048 bits public rsa's for 10s: 4051 2048 bits public RSA's in 10.00s
> version: 3.1.2
> built on: Sat Aug  5 14:56:47 2023 UTC
> options: bn(64,64)
> CPUINFO: N/A
>                   sign    verify    sign/s verify/s
> rsa 2048 bits 0.100600s 0.002469s      9.9    405.1
>
>  Performance counter stats for 'system wide':
>
>      7,120,831,110      l1_icache_access
>          2,145,279      l1_icache_miss
>          1,307,935      itlb_miss
>          2,477,482      dtlb_miss
>            402,760      jtlb_miss
>          8,043,723      inst_branch_mispredict
>        153,469,454      inst_branch
>        537,300,381      inst_store
>        947,508,099      l1_dcache_read_access
>            770,550      l1_dcache_read_miss
>        537,262,702      l1_dcache_write_access
>            171,436      l1_dcache_write_miss
>
>       20.315046885 seconds time elapsed
>
> ---
>  tools/perf/pmu-events/arch/riscv/mapfile.csv  |  1 +
>  .../arch/riscv/thead/c900-legacy/cache.json   | 67 ++++++++++++++++
>  .../riscv/thead/c900-legacy/firmware.json     | 68 ++++++++++++++++
>  .../riscv/thead/c900-legacy/instruction.json  | 72 +++++++++++++++++
>  .../riscv/thead/c900-legacy/microarch.json    | 80 +++++++++++++++++++
>  5 files changed, 288 insertions(+)
>  create mode 100644 tools/perf/pmu-events/arch/riscv/thead/c900-legacy/cache.json
>  create mode 100644 tools/perf/pmu-events/arch/riscv/thead/c900-legacy/firmware.json
>  create mode 100644 tools/perf/pmu-events/arch/riscv/thead/c900-legacy/instruction.json
>  create mode 100644 tools/perf/pmu-events/arch/riscv/thead/c900-legacy/microarch.json
>
> diff --git a/tools/perf/pmu-events/arch/riscv/mapfile.csv b/tools/perf/pmu-events/arch/riscv/mapfile.csv
> index c61b3d6ef616..b42b65d09c36 100644
> --- a/tools/perf/pmu-events/arch/riscv/mapfile.csv
> +++ b/tools/perf/pmu-events/arch/riscv/mapfile.csv
> @@ -15,3 +15,4 @@
>  #
>  #MVENDORID-MARCHID-MIMPID,Version,Filename,EventType
>  0x489-0x8000000000000007-0x[[:xdigit:]]+,v1,sifive/u74,core
> +0x5b7-0x0-0x0,v1,thead/c900-legacy,core
> diff --git a/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/cache.json b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/cache.json
> new file mode 100644
> index 000000000000..2b142348d635
> --- /dev/null
> +++ b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/cache.json
> @@ -0,0 +1,67 @@
> +[
> +  {
> +    "EventName": "L1_ICACHE_ACCESS",
> +    "EventCode": "0x00000001",
> +    "BriefDescription": "L1 instruction cache access"
> +  },
> +  {
> +    "EventName": "L1_ICACHE_MISS",
> +    "EventCode": "0x00000002",
> +    "BriefDescription": "L1 instruction cache miss"
> +  },
> +  {
> +    "EventName": "ITLB_MISS",
> +    "EventCode": "0x00000003",
> +    "BriefDescription": "I-UTLB miss"
> +  },
> +  {
> +    "EventName": "DTLB_MISS",
> +    "EventCode": "0x00000004",
> +    "BriefDescription": "D-UTLB miss"
> +  },
> +  {
> +    "EventName": "JTLB_MISS",
> +    "EventCode": "0x00000005",
> +    "BriefDescription": "JTLB miss"
> +  },
> +  {
> +    "EventName": "L1_DCACHE_READ_ACCESS",
> +    "EventCode": "0x0000000c",
> +    "BriefDescription": "L1 data cache read access"
> +  },
> +  {
> +    "EventName": "L1_DCACHE_READ_MISS",
> +    "EventCode": "0x0000000d",
> +    "BriefDescription": "L1 data cache read miss"
> +  },
> +  {
> +    "EventName": "L1_DCACHE_WRITE_ACCESS",
> +    "EventCode": "0x0000000e",
> +    "BriefDescription": "L1 data cache write access"
> +  },
> +  {
> +    "EventName": "L1_DCACHE_WRITE_MISS",
> +    "EventCode": "0x0000000f",
> +    "BriefDescription": "L1 data cache write miss"
> +  },
> +  {
> +    "EventName": "LL_CACHE_READ_ACCESS",
> +    "EventCode": "0x00000010",
> +    "BriefDescription": "LL Cache read access"
> +  },
> +  {
> +    "EventName": "LL_CACHE_READ_MISS",
> +    "EventCode": "0x00000011",
> +    "BriefDescription": "LL Cache read miss"
> +  },
> +  {
> +    "EventName": "LL_CACHE_WRITE_ACCESS",
> +    "EventCode": "0x00000012",
> +    "BriefDescription": "LL Cache write access"
> +  },
> +  {
> +    "EventName": "LL_CACHE_WRITE_MISS",
> +    "EventCode": "0x00000013",
> +    "BriefDescription": "LL Cache write miss"
> +  }
> +]
> diff --git a/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/firmware.json b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/firmware.json
> new file mode 100644
> index 000000000000..9b4a032186a7
> --- /dev/null
> +++ b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/firmware.json
> @@ -0,0 +1,68 @@
> +[
> +  {
> +    "ArchStdEvent": "FW_MISALIGNED_LOAD"
> +  },
> +  {
> +    "ArchStdEvent": "FW_MISALIGNED_STORE"
> +  },
> +  {
> +    "ArchStdEvent": "FW_ACCESS_LOAD"
> +  },
> +  {
> +    "ArchStdEvent": "FW_ACCESS_STORE"
> +  },
> +  {
> +    "ArchStdEvent": "FW_ILLEGAL_INSN"
> +  },
> +  {
> +    "ArchStdEvent": "FW_SET_TIMER"
> +  },
> +  {
> +    "ArchStdEvent": "FW_IPI_SENT"
> +  },
> +  {
> +    "ArchStdEvent": "FW_IPI_RECEIVED"
> +  },
> +  {
> +    "ArchStdEvent": "FW_FENCE_I_SENT"
> +  },
> +  {
> +    "ArchStdEvent": "FW_FENCE_I_RECEIVED"
> +  },
> +  {
> +    "ArchStdEvent": "FW_SFENCE_VMA_SENT"
> +  },
> +  {
> +    "ArchStdEvent": "FW_SFENCE_VMA_RECEIVED"
> +  },
> +  {
> +    "ArchStdEvent": "FW_SFENCE_VMA_RECEIVED"
> +  },
> +  {
> +    "ArchStdEvent": "FW_SFENCE_VMA_ASID_RECEIVED"
> +  },
> +  {
> +    "ArchStdEvent": "FW_HFENCE_GVMA_SENT"
> +  },
> +  {
> +    "ArchStdEvent": "FW_HFENCE_GVMA_RECEIVED"
> +  },
> +  {
> +    "ArchStdEvent": "FW_HFENCE_GVMA_VMID_SENT"
> +  },
> +  {
> +    "ArchStdEvent": "FW_HFENCE_GVMA_VMID_RECEIVED"
> +  },
> +  {
> +    "ArchStdEvent": "FW_HFENCE_VVMA_SENT"
> +  },
> +  {
> +    "ArchStdEvent": "FW_HFENCE_VVMA_RECEIVED"
> +  },
> +  {
> +    "ArchStdEvent": "FW_HFENCE_VVMA_ASID_SENT"
> +  },
> +  {
> +    "ArchStdEvent": "FW_HFENCE_VVMA_ASID_RECEIVED"
> +  }
> +]
> diff --git a/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/instruction.json b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/instruction.json
> new file mode 100644
> index 000000000000..c822b5373333
> --- /dev/null
> +++ b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/instruction.json
> @@ -0,0 +1,72 @@
> +[
> +  {
> +    "EventName": "INST_BRANCH_MISPREDICT",
> +    "EventCode": "0x00000006",
> +    "BriefDescription": "Mispredicted branch instructions"
> +  },
> +  {
> +    "EventName": "INST_BRANCH",
> +    "EventCode": "0x00000007",
> +    "BriefDescription": "Retired branch instructions"
> +  },
> +  {
> +    "EventName": "INST_JMP_MISPREDICT",
> +    "EventCode": "0x00000008",
> +    "BriefDescription": "Indirect branch mispredict"
> +  },
> +  {
> +    "EventName": "INST_JMP",
> +    "EventCode": "0x00000009",
> +    "BriefDescription": "Retired jmp instructions"
> +  },
> +  {
> +    "EventName": "INST_STORE",
> +    "EventCode": "0x0000000b",
> +    "BriefDescription": "Retired store instructions"
> +  },
> +  {
> +    "EventName": "INST_ALU",
> +    "EventCode": "0x0000001d",
> +    "BriefDescription": "Retired ALU instructions"
> +  },
> +  {
> +    "EventName": "INST_LDST",
> +    "EventCode": "0x0000001e",
> +    "BriefDescription": "Retired Load/Store instructions"
> +  },
> +  {
> +    "EventName": "INST_VECTOR",
> +    "EventCode": "0x0000001f",
> +    "BriefDescription": "Retired Vector instructions"
> +  },
> +  {
> +    "EventName": "INST_CSR",
> +    "EventCode": "0x00000020",
> +    "BriefDescription": "Retired CSR instructions"
> +  },
> +  {
> +    "EventName": "INST_SYNC",
> +    "EventCode": "0x00000021",
> +    "BriefDescription": "Retired sync instructions (AMO/LR/SC instructions)"
> +  },
> +  {
> +    "EventName": "INST_UNALIGNED_ACCESS",
> +    "EventCode": "0x00000022",
> +    "BriefDescription": "Retired Store/Load instructions with unaligned memory access"
> +  },
> +  {
> +    "EventName": "INST_ECALL",
> +    "EventCode": "0x00000025",
> +    "BriefDescription": "Retired ecall instructions"
> +  },
> +  {
> +    "EventName": "INST_LONG_JP",
> +    "EventCode": "0x00000026",
> +    "BriefDescription": "Retired long jump instructions"
> +  },
> +  {
> +    "EventName": "INST_FP",
> +    "EventCode": "0x0000002a",
> +    "BriefDescription": "Retired FPU instructions"
> +  }
> +]
> diff --git a/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/microarch.json b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/microarch.json
> new file mode 100644
> index 000000000000..0ab6f288af91
> --- /dev/null
> +++ b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/microarch.json
> @@ -0,0 +1,80 @@
> +[
> +  {
> +    "EventName": "LSU_SPEC_FAIL",
> +    "EventCode": "0x0000000a",
> +    "BriefDescription": "LSU speculation fail"
> +  },
> +  {
> +    "EventName": "IDU_RF_PIPE_FAIL",
> +    "EventCode": "0x00000014",
> +    "BriefDescription": "Instruction decode unit launch pipeline failed in RF state"
> +  },
> +  {
> +    "EventName": "IDU_RF_REG_FAIL",
> +    "EventCode": "0x00000015",
> +    "BriefDescription": "Instruction decode unit launch register file fail in RF state"
> +  },
> +  {
> +    "EventName": "IDU_RF_INSTRUCTION",
> +    "EventCode": "0x00000016",
> +    "BriefDescription": "retired instruction count of Instruction decode unit in RF (Register File) stage"
> +  },
> +  {
> +    "EventName": "LSU_4K_STALL",
> +    "EventCode": "0x00000017",
> +    "BriefDescription": "LSU stall times for long distance data access (Over 4K)",
> +    "PublicDescription": "This stall occurs when translate virtual address with page offset over 4k"
> +  },
> +  {
> +    "EventName": "LSU_OTHER_STALL",
> +    "EventCode": "0x00000018",
> +    "BriefDescription": "LSU stall times for other reasons (except the 4k stall)"
> +  },
> +  {
> +    "EventName": "LSU_SQ_OTHER_DIS",
> +    "EventCode": "0x00000019",
> +    "BriefDescription": "LSU store queue discard others"
> +  },
> +  {
> +    "EventName": "LSU_SQ_DATA_DISCARD",
> +    "EventCode": "0x0000001a",
> +    "BriefDescription": "LSU store queue discard data (uops)"
> +  },
> +  {
> +    "EventName": "BRANCH_DIRECTION_MISPREDICTION",
> +    "EventCode": "0x0000001b",
> +    "BriefDescription": "Branch misprediction in BTB"
> +  },
> +  {
> +    "EventName": "BRANCH_DIRECTION_PREDICTION",
> +    "EventCode": "0x0000001c",
> +    "BriefDescription": "All branch prediction in BTB",
> +    "PublicDescription": "This event including both successful prediction and failed prediction in BTB"
> +  },
> +  {
> +    "EventName": "INTERRUPT_ACK_COUNT",
> +    "EventCode": "0x00000023",
> +    "BriefDescription": "acknowledged interrupt count"
> +  },
> +  {
> +    "EventName": "INTERRUPT_OFF_CYCLE",
> +    "EventCode": "0x00000024",
> +    "BriefDescription": "PLIC arbitration time when the interrupt is not responded",
> +    "PublicDescription": "The arbitration time is recorded while meeting any of the following:\n- CPU is M-mode and MIE == 0\n- CPU is S-mode and delegation and SIE == 0\n"
> +  },
> +  {
> +    "EventName": "IFU_STALLED_CYCLE",
> +    "EventCode": "0x00000027",
> +    "BriefDescription": "Number of stall cycles of the instruction fetch unit (IFU)."
> +  },
> +  {
> +    "EventName": "IDU_STALLED_CYCLE",
> +    "EventCode": "0x00000028",
> +    "BriefDescription": "hpcp_backend_stall Number of stall cycles of the instruction decoding unit (IDU) and next-level pipeline unit."
> +  },
> +  {
> +    "EventName": "SYNC_STALL",
> +    "EventCode": "0x00000029",
> +    "BriefDescription": "Sync instruction stall cycle fence/fence.i/sync/sfence"
> +  }
> +]
> --
> 2.41.0
>
diff mbox series

Patch

diff --git a/tools/perf/pmu-events/arch/riscv/mapfile.csv b/tools/perf/pmu-events/arch/riscv/mapfile.csv
index c61b3d6ef616..b42b65d09c36 100644
--- a/tools/perf/pmu-events/arch/riscv/mapfile.csv
+++ b/tools/perf/pmu-events/arch/riscv/mapfile.csv
@@ -15,3 +15,4 @@ 
 #
 #MVENDORID-MARCHID-MIMPID,Version,Filename,EventType
 0x489-0x8000000000000007-0x[[:xdigit:]]+,v1,sifive/u74,core
+0x5b7-0x0-0x0,v1,thead/c900-legacy,core
diff --git a/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/cache.json b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/cache.json
new file mode 100644
index 000000000000..2b142348d635
--- /dev/null
+++ b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/cache.json
@@ -0,0 +1,67 @@ 
+[
+  {
+    "EventName": "L1_ICACHE_ACCESS",
+    "EventCode": "0x00000001",
+    "BriefDescription": "L1 instruction cache access"
+  },
+  {
+    "EventName": "L1_ICACHE_MISS",
+    "EventCode": "0x00000002",
+    "BriefDescription": "L1 instruction cache miss"
+  },
+  {
+    "EventName": "ITLB_MISS",
+    "EventCode": "0x00000003",
+    "BriefDescription": "I-UTLB miss"
+  },
+  {
+    "EventName": "DTLB_MISS",
+    "EventCode": "0x00000004",
+    "BriefDescription": "D-UTLB miss"
+  },
+  {
+    "EventName": "JTLB_MISS",
+    "EventCode": "0x00000005",
+    "BriefDescription": "JTLB miss"
+  },
+  {
+    "EventName": "L1_DCACHE_READ_ACCESS",
+    "EventCode": "0x0000000c",
+    "BriefDescription": "L1 data cache read access"
+  },
+  {
+    "EventName": "L1_DCACHE_READ_MISS",
+    "EventCode": "0x0000000d",
+    "BriefDescription": "L1 data cache read miss"
+  },
+  {
+    "EventName": "L1_DCACHE_WRITE_ACCESS",
+    "EventCode": "0x0000000e",
+    "BriefDescription": "L1 data cache write access"
+  },
+  {
+    "EventName": "L1_DCACHE_WRITE_MISS",
+    "EventCode": "0x0000000f",
+    "BriefDescription": "L1 data cache write miss"
+  },
+  {
+    "EventName": "LL_CACHE_READ_ACCESS",
+    "EventCode": "0x00000010",
+    "BriefDescription": "LL Cache read access"
+  },
+  {
+    "EventName": "LL_CACHE_READ_MISS",
+    "EventCode": "0x00000011",
+    "BriefDescription": "LL Cache read miss"
+  },
+  {
+    "EventName": "LL_CACHE_WRITE_ACCESS",
+    "EventCode": "0x00000012",
+    "BriefDescription": "LL Cache write access"
+  },
+  {
+    "EventName": "LL_CACHE_WRITE_MISS",
+    "EventCode": "0x00000013",
+    "BriefDescription": "LL Cache write miss"
+  }
+]
diff --git a/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/firmware.json b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/firmware.json
new file mode 100644
index 000000000000..9b4a032186a7
--- /dev/null
+++ b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/firmware.json
@@ -0,0 +1,68 @@ 
+[
+  {
+    "ArchStdEvent": "FW_MISALIGNED_LOAD"
+  },
+  {
+    "ArchStdEvent": "FW_MISALIGNED_STORE"
+  },
+  {
+    "ArchStdEvent": "FW_ACCESS_LOAD"
+  },
+  {
+    "ArchStdEvent": "FW_ACCESS_STORE"
+  },
+  {
+    "ArchStdEvent": "FW_ILLEGAL_INSN"
+  },
+  {
+    "ArchStdEvent": "FW_SET_TIMER"
+  },
+  {
+    "ArchStdEvent": "FW_IPI_SENT"
+  },
+  {
+    "ArchStdEvent": "FW_IPI_RECEIVED"
+  },
+  {
+    "ArchStdEvent": "FW_FENCE_I_SENT"
+  },
+  {
+    "ArchStdEvent": "FW_FENCE_I_RECEIVED"
+  },
+  {
+    "ArchStdEvent": "FW_SFENCE_VMA_SENT"
+  },
+  {
+    "ArchStdEvent": "FW_SFENCE_VMA_RECEIVED"
+  },
+  {
+    "ArchStdEvent": "FW_SFENCE_VMA_RECEIVED"
+  },
+  {
+    "ArchStdEvent": "FW_SFENCE_VMA_ASID_RECEIVED"
+  },
+  {
+    "ArchStdEvent": "FW_HFENCE_GVMA_SENT"
+  },
+  {
+    "ArchStdEvent": "FW_HFENCE_GVMA_RECEIVED"
+  },
+  {
+    "ArchStdEvent": "FW_HFENCE_GVMA_VMID_SENT"
+  },
+  {
+    "ArchStdEvent": "FW_HFENCE_GVMA_VMID_RECEIVED"
+  },
+  {
+    "ArchStdEvent": "FW_HFENCE_VVMA_SENT"
+  },
+  {
+    "ArchStdEvent": "FW_HFENCE_VVMA_RECEIVED"
+  },
+  {
+    "ArchStdEvent": "FW_HFENCE_VVMA_ASID_SENT"
+  },
+  {
+    "ArchStdEvent": "FW_HFENCE_VVMA_ASID_RECEIVED"
+  }
+]
diff --git a/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/instruction.json b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/instruction.json
new file mode 100644
index 000000000000..c822b5373333
--- /dev/null
+++ b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/instruction.json
@@ -0,0 +1,72 @@ 
+[
+  {
+    "EventName": "INST_BRANCH_MISPREDICT",
+    "EventCode": "0x00000006",
+    "BriefDescription": "Mispredicted branch instructions"
+  },
+  {
+    "EventName": "INST_BRANCH",
+    "EventCode": "0x00000007",
+    "BriefDescription": "Retired branch instructions"
+  },
+  {
+    "EventName": "INST_JMP_MISPREDICT",
+    "EventCode": "0x00000008",
+    "BriefDescription": "Indirect branch mispredict"
+  },
+  {
+    "EventName": "INST_JMP",
+    "EventCode": "0x00000009",
+    "BriefDescription": "Retired jmp instructions"
+  },
+  {
+    "EventName": "INST_STORE",
+    "EventCode": "0x0000000b",
+    "BriefDescription": "Retired store instructions"
+  },
+  {
+    "EventName": "INST_ALU",
+    "EventCode": "0x0000001d",
+    "BriefDescription": "Retired ALU instructions"
+  },
+  {
+    "EventName": "INST_LDST",
+    "EventCode": "0x0000001e",
+    "BriefDescription": "Retired Load/Store instructions"
+  },
+  {
+    "EventName": "INST_VECTOR",
+    "EventCode": "0x0000001f",
+    "BriefDescription": "Retired Vector instructions"
+  },
+  {
+    "EventName": "INST_CSR",
+    "EventCode": "0x00000020",
+    "BriefDescription": "Retired CSR instructions"
+  },
+  {
+    "EventName": "INST_SYNC",
+    "EventCode": "0x00000021",
+    "BriefDescription": "Retired sync instructions (AMO/LR/SC instructions)"
+  },
+  {
+    "EventName": "INST_UNALIGNED_ACCESS",
+    "EventCode": "0x00000022",
+    "BriefDescription": "Retired Store/Load instructions with unaligned memory access"
+  },
+  {
+    "EventName": "INST_ECALL",
+    "EventCode": "0x00000025",
+    "BriefDescription": "Retired ecall instructions"
+  },
+  {
+    "EventName": "INST_LONG_JP",
+    "EventCode": "0x00000026",
+    "BriefDescription": "Retired long jump instructions"
+  },
+  {
+    "EventName": "INST_FP",
+    "EventCode": "0x0000002a",
+    "BriefDescription": "Retired FPU instructions"
+  }
+]
diff --git a/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/microarch.json b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/microarch.json
new file mode 100644
index 000000000000..0ab6f288af91
--- /dev/null
+++ b/tools/perf/pmu-events/arch/riscv/thead/c900-legacy/microarch.json
@@ -0,0 +1,80 @@ 
+[
+  {
+    "EventName": "LSU_SPEC_FAIL",
+    "EventCode": "0x0000000a",
+    "BriefDescription": "LSU speculation fail"
+  },
+  {
+    "EventName": "IDU_RF_PIPE_FAIL",
+    "EventCode": "0x00000014",
+    "BriefDescription": "Instruction decode unit launch pipeline failed in RF state"
+  },
+  {
+    "EventName": "IDU_RF_REG_FAIL",
+    "EventCode": "0x00000015",
+    "BriefDescription": "Instruction decode unit launch register file fail in RF state"
+  },
+  {
+    "EventName": "IDU_RF_INSTRUCTION",
+    "EventCode": "0x00000016",
+    "BriefDescription": "retired instruction count of Instruction decode unit in RF (Register File) stage"
+  },
+  {
+    "EventName": "LSU_4K_STALL",
+    "EventCode": "0x00000017",
+    "BriefDescription": "LSU stall times for long distance data access (Over 4K)",
+    "PublicDescription": "This stall occurs when translate virtual address with page offset over 4k"
+  },
+  {
+    "EventName": "LSU_OTHER_STALL",
+    "EventCode": "0x00000018",
+    "BriefDescription": "LSU stall times for other reasons (except the 4k stall)"
+  },
+  {
+    "EventName": "LSU_SQ_OTHER_DIS",
+    "EventCode": "0x00000019",
+    "BriefDescription": "LSU store queue discard others"
+  },
+  {
+    "EventName": "LSU_SQ_DATA_DISCARD",
+    "EventCode": "0x0000001a",
+    "BriefDescription": "LSU store queue discard data (uops)"
+  },
+  {
+    "EventName": "BRANCH_DIRECTION_MISPREDICTION",
+    "EventCode": "0x0000001b",
+    "BriefDescription": "Branch misprediction in BTB"
+  },
+  {
+    "EventName": "BRANCH_DIRECTION_PREDICTION",
+    "EventCode": "0x0000001c",
+    "BriefDescription": "All branch prediction in BTB",
+    "PublicDescription": "This event including both successful prediction and failed prediction in BTB"
+  },
+  {
+    "EventName": "INTERRUPT_ACK_COUNT",
+    "EventCode": "0x00000023",
+    "BriefDescription": "acknowledged interrupt count"
+  },
+  {
+    "EventName": "INTERRUPT_OFF_CYCLE",
+    "EventCode": "0x00000024",
+    "BriefDescription": "PLIC arbitration time when the interrupt is not responded",
+    "PublicDescription": "The arbitration time is recorded while meeting any of the following:\n- CPU is M-mode and MIE == 0\n- CPU is S-mode and delegation and SIE == 0\n"
+  },
+  {
+    "EventName": "IFU_STALLED_CYCLE",
+    "EventCode": "0x00000027",
+    "BriefDescription": "Number of stall cycles of the instruction fetch unit (IFU)."
+  },
+  {
+    "EventName": "IDU_STALLED_CYCLE",
+    "EventCode": "0x00000028",
+    "BriefDescription": "hpcp_backend_stall Number of stall cycles of the instruction decoding unit (IDU) and next-level pipeline unit."
+  },
+  {
+    "EventName": "SYNC_STALL",
+    "EventCode": "0x00000029",
+    "BriefDescription": "Sync instruction stall cycle fence/fence.i/sync/sfence"
+  }
+]