Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.0/patches/2175697/?format=api
{ "id": 2175697, "url": "http://patchwork.ozlabs.org/api/1.0/patches/2175697/?format=api", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.0/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20251218183122.408690-2-sergeev0xef@gmail.com>", "date": "2025-12-18T18:31:16", "name": "[RFC,1/6] target/riscv: Refactor counter index calculation.", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "fbf8e2eac842f2faedd5e4478634be45ce4fb3e7", "submitter": { "id": 92294, "url": "http://patchwork.ozlabs.org/api/1.0/people/92294/?format=api", "name": "Aleksandr Sergeev", "email": "sergeev0xef@gmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20251218183122.408690-2-sergeev0xef@gmail.com/mbox/", "series": [ { "id": 485896, "url": "http://patchwork.ozlabs.org/api/1.0/series/485896/?format=api", "date": "2025-12-18T18:31:20", "name": "More extendable PMU subsystem.", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/485896/mbox/" } ], "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2175697/checks/", "tags": {}, "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20230601 header.b=frfUp7Cz;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4dXK7635RTz1y2F\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 19 Dec 2025 05:33:38 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vWIo3-0003wN-4T; Thu, 18 Dec 2025 13:32:55 -0500", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <sergeev0xef@gmail.com>)\n id 1vWImy-0003mR-JS\n for qemu-devel@nongnu.org; Thu, 18 Dec 2025 13:31:49 -0500", "from mail-lf1-x132.google.com ([2a00:1450:4864:20::132])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <sergeev0xef@gmail.com>)\n id 1vWImw-0007LK-Dk\n for qemu-devel@nongnu.org; Thu, 18 Dec 2025 13:31:48 -0500", "by mail-lf1-x132.google.com with SMTP id\n 2adb3069b0e04-598eaafa587so1036970e87.3\n for <qemu-devel@nongnu.org>; Thu, 18 Dec 2025 10:31:46 -0800 (PST)", "from NB-8855.Dlink ([81.201.19.27]) by smtp.gmail.com with ESMTPSA\n id\n 2adb3069b0e04-59a185dd229sm46777e87.22.2025.12.18.10.31.42\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 18 Dec 2025 10:31:43 -0800 (PST)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20230601; t=1766082704; x=1766687504; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=qY9aDXCdvQKlOQpzxCCXLCIfXFIvBpXlP4Of3TlgDT0=;\n b=frfUp7CztBhrF7bUwQhPdmIX3Zwt/YHXcqjYoMTbmFbJSnHmS1n5jpDeuqsc056G2x\n GC1JKj99e05SCfdwti1aL5CFbVU6TbLnk3wkl299PQZKoTIXHGYkVqvByFQDM2pvx2uR\n eotf6k9u/J/JNCn6OYV+2X9xcbywdMHRy8iRCzkdD9FaBSuC8eAsjSmrMzIAuWwEsCbK\n Af2o2RyuOQ4smzNXwHfeneKyvRgTOIllE1eh85wzZRm2k5ANEa7koftiSGBoFGH73ijO\n b1BL4L3HDlVjLw/neRPktDmx+mawSWVys+R88pR98V0TiX+6tVU+6eH1n5EOhBG+YByd\n XqQA==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1766082704; x=1766687504;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=qY9aDXCdvQKlOQpzxCCXLCIfXFIvBpXlP4Of3TlgDT0=;\n b=uhaxYmTsj9oeIQsrmOF5ATdkSLaQml3m6+3xCsePdgoBEhnXl8tJJIh3w0ZauKlBiJ\n QFTDhTwZxnKca3g061VtJFBLB975pme5IlzEOCey0WukFWd339I6XGwlCaDgvqRBYIIf\n kMuHKnCvSYGBLudocKuFoyGn4WvcsPd/6uZw/pd38jvANPlaw03r5oBNAgDeHor6LWvw\n S66oTwiAllJNwPt8ze5Ca1BN06DgsQEkCI3xcRuWtYpR7Z0ArLs14W3nT7hXZlm3LvsU\n PvpHSMf4yKWyxS+EuYHQdbYYq9tuamMAddr7/T0s8EPC3r+vz2Z107OhyWnRh0o7FiUA\n Bv6Q==", "X-Gm-Message-State": "AOJu0Ywo/cRQ+4xnJ2abYSLffHjPdlFKhE61KBRS7tThM6Z1kjdlwjuk\n BKA+FU8dbZ/fXoG5W8KTiRck1O9zgcHR3goPmOyVjwyJABRFKLMqefJzCp6WzCkI", "X-Gm-Gg": "AY/fxX4JoovVOafXQ79crc/1qiKl9hefV5pvbK6Et4pxoZHuJ1cpzBO1a7EdytZB50l\n j7wrMn19TPH8P3wwoaxQs3cEfJ5KlBZBY3KVixJFWQbVwJBh+M4qE2BC4Aa447DS9xJY+SU/1PG\n z2h0Asy8GAyBEatzd/fX6mCoQvTuJwKgAMDs7qeNLfN8k+Edy1kipxKCd5pqjfMw4+GQhMdTUa3\n 9CxHH3nSj6jJq3iMAnYcK/wonJckw6S+Ja+0spEYWrctcryXsL9bP5YBlhC6CDhw+aLIyXiTCdc\n vY9IQdVFBisW21YRXezUr3JM8uWmudMKv4lJUQjfo3fEV1MgHYml0km1t/9UClGxygW9AwLUm6O\n G2EJNeq1eV9khshlYPDQypy6K4t9dKspkH2NhXHHd88blzq2iI/J3VitnX1bSo7xS+g/YDrUhqT\n 1yAfwCgY6orOXIMcpQxS6oTGg=", "X-Google-Smtp-Source": "\n AGHT+IHJ6lbcS8fFShto5gll/FXeeb1NoDPVa5BWh8z711aAmKy1tNvUoNTRCTAyCbvA2jpbTAp3fA==", "X-Received": "by 2002:a05:6512:a96:b0:594:5f00:c0b7 with SMTP id\n 2adb3069b0e04-59a17d8cf43mr149974e87.15.1766082703963;\n Thu, 18 Dec 2025 10:31:43 -0800 (PST)", "From": "Aleksandr Sergeev <sergeev0xef@gmail.com>", "To": "qemu-devel@nongnu.org", "Cc": "halip0503@gmail.com,\n\tAleksandr Sergeev <sergeev0xef@gmail.com>", "Subject": "[RFC PATCH 1/6] target/riscv: Refactor counter index calculation.", "Date": "Thu, 18 Dec 2025 21:31:16 +0300", "Message-ID": "<20251218183122.408690-2-sergeev0xef@gmail.com>", "X-Mailer": "git-send-email 2.51.0", "In-Reply-To": "<20251218183122.408690-1-sergeev0xef@gmail.com>", "References": "<20251218183122.408690-1-sergeev0xef@gmail.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=2a00:1450:4864:20::132;\n envelope-from=sergeev0xef@gmail.com; helo=mail-lf1-x132.google.com", "X-Spam_score_int": "-20", "X-Spam_score": "-2.1", "X-Spam_bar": "--", "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-Mailman-Approved-At": "Thu, 18 Dec 2025 13:32:34 -0500", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "When working with hpm registers, we need to calculate counter index\nby csr number. By now it was done manually. Let's add a function --\nriscv_pmu_csrno_to_ctr_idx(), which incapsulates this action.\n\nSigned-off-by: Aleksandr Sergeev <sergeev0xef@gmail.com>\nReviewed-by: Alexei Filippov <halip0503@gmail.com>\n---\n target/riscv/cpu_bits.h | 4 +++\n target/riscv/csr.c | 73 ++++++++++++++---------------------------\n target/riscv/pmu.c | 44 +++++++++++++++++++++++++\n target/riscv/pmu.h | 1 +\n 4 files changed, 73 insertions(+), 49 deletions(-)", "diff": "diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h\nindex b62dd82fe7..5c3c1af64e 100644\n--- a/target/riscv/cpu_bits.h\n+++ b/target/riscv/cpu_bits.h\n@@ -1145,6 +1145,10 @@ typedef enum CTRType {\n /* RISC-V-specific interrupt pending bits. */\n #define CPU_INTERRUPT_RNMI CPU_INTERRUPT_TGT_EXT_0\n \n+#define HPM_MCYCLE_IDX 0\n+#define HPM_MTIME_IDX 1\n+#define HPM_MINSTRET_IDX 2\n+\n /* JVT CSR bits */\n #define JVT_MODE 0x3F\n #define JVT_BASE (~0x3F)\ndiff --git a/target/riscv/csr.c b/target/riscv/csr.c\nindex 5c91658c3d..8bdbc71160 100644\n--- a/target/riscv/csr.c\n+++ b/target/riscv/csr.c\n@@ -110,17 +110,8 @@ static RISCVException ctr(CPURISCVState *env, int csrno)\n {\n #if !defined(CONFIG_USER_ONLY)\n RISCVCPU *cpu = env_archcpu(env);\n- int ctr_index;\n- target_ulong ctr_mask;\n- int base_csrno = CSR_CYCLE;\n- bool rv32 = riscv_cpu_mxl(env) == MXL_RV32 ? true : false;\n-\n- if (rv32 && csrno >= CSR_CYCLEH) {\n- /* Offset for RV32 hpmcounternh counters */\n- base_csrno += 0x80;\n- }\n- ctr_index = csrno - base_csrno;\n- ctr_mask = BIT(ctr_index);\n+ uint32_t ctr_index = riscv_pmu_csrno_to_ctr_idx(csrno);\n+ target_ulong ctr_mask = BIT(ctr_index);\n \n if ((csrno >= CSR_CYCLE && csrno <= CSR_INSTRET) ||\n (csrno >= CSR_CYCLEH && csrno <= CSR_INSTRETH)) {\n@@ -1166,9 +1157,9 @@ static RISCVException write_minstretcfgh(CPURISCVState *env, int csrno,\n static RISCVException read_mhpmevent(CPURISCVState *env, int csrno,\n target_ulong *val)\n {\n- int evt_index = csrno - CSR_MCOUNTINHIBIT;\n+ uint32_t ctr_idx = riscv_pmu_csrno_to_ctr_idx(csrno);\n \n- *val = env->mhpmevent_val[evt_index];\n+ *val = env->mhpmevent_val[ctr_idx];\n \n return RISCV_EXCP_NONE;\n }\n@@ -1176,14 +1167,15 @@ static RISCVException read_mhpmevent(CPURISCVState *env, int csrno,\n static RISCVException write_mhpmevent(CPURISCVState *env, int csrno,\n target_ulong val, uintptr_t ra)\n {\n- int evt_index = csrno - CSR_MCOUNTINHIBIT;\n+ uint32_t ctr_idx = riscv_pmu_csrno_to_ctr_idx(csrno);\n+\n uint64_t mhpmevt_val = val;\n uint64_t inh_avail_mask;\n \n if (riscv_cpu_mxl(env) == MXL_RV32) {\n- env->mhpmevent_val[evt_index] = val;\n+ env->mhpmevent_val[ctr_idx] = val;\n mhpmevt_val = mhpmevt_val |\n- ((uint64_t)env->mhpmeventh_val[evt_index] << 32);\n+ ((uint64_t)env->mhpmeventh_val[ctr_idx] << 32);\n } else {\n inh_avail_mask = ~MHPMEVENT_FILTER_MASK | MHPMEVENT_BIT_MINH;\n inh_avail_mask |= riscv_has_ext(env, RVU) ? MHPMEVENT_BIT_UINH : 0;\n@@ -1193,10 +1185,10 @@ static RISCVException write_mhpmevent(CPURISCVState *env, int csrno,\n inh_avail_mask |= (riscv_has_ext(env, RVH) &&\n riscv_has_ext(env, RVS)) ? MHPMEVENT_BIT_VSINH : 0;\n mhpmevt_val = val & inh_avail_mask;\n- env->mhpmevent_val[evt_index] = mhpmevt_val;\n+ env->mhpmevent_val[ctr_idx] = mhpmevt_val;\n }\n \n- riscv_pmu_update_event_map(env, mhpmevt_val, evt_index);\n+ riscv_pmu_update_event_map(env, mhpmevt_val, ctr_idx);\n \n return RISCV_EXCP_NONE;\n }\n@@ -1204,9 +1196,9 @@ static RISCVException write_mhpmevent(CPURISCVState *env, int csrno,\n static RISCVException read_mhpmeventh(CPURISCVState *env, int csrno,\n target_ulong *val)\n {\n- int evt_index = csrno - CSR_MHPMEVENT3H + 3;\n+ uint32_t ctr_idx = riscv_pmu_csrno_to_ctr_idx(csrno);\n \n- *val = env->mhpmeventh_val[evt_index];\n+ *val = env->mhpmeventh_val[ctr_idx];\n \n return RISCV_EXCP_NONE;\n }\n@@ -1214,9 +1206,9 @@ static RISCVException read_mhpmeventh(CPURISCVState *env, int csrno,\n static RISCVException write_mhpmeventh(CPURISCVState *env, int csrno,\n target_ulong val, uintptr_t ra)\n {\n- int evt_index = csrno - CSR_MHPMEVENT3H + 3;\n+ uint32_t ctr_idx = riscv_pmu_csrno_to_ctr_idx(csrno);\n uint64_t mhpmevth_val;\n- uint64_t mhpmevt_val = env->mhpmevent_val[evt_index];\n+ uint64_t mhpmevt_val = env->mhpmevent_val[ctr_idx];\n target_ulong inh_avail_mask = (target_ulong)(~MHPMEVENTH_FILTER_MASK |\n MHPMEVENTH_BIT_MINH);\n \n@@ -1229,9 +1221,9 @@ static RISCVException write_mhpmeventh(CPURISCVState *env, int csrno,\n \n mhpmevth_val = val & inh_avail_mask;\n mhpmevt_val = mhpmevt_val | (mhpmevth_val << 32);\n- env->mhpmeventh_val[evt_index] = mhpmevth_val;\n+ env->mhpmeventh_val[ctr_idx] = mhpmevth_val;\n \n- riscv_pmu_update_event_map(env, mhpmevt_val, evt_index);\n+ riscv_pmu_update_event_map(env, mhpmevt_val, ctr_idx);\n \n return RISCV_EXCP_NONE;\n }\n@@ -1357,7 +1349,7 @@ static RISCVException riscv_pmu_write_ctrh(CPURISCVState *env, target_ulong val,\n static RISCVException write_mhpmcounter(CPURISCVState *env, int csrno,\n target_ulong val, uintptr_t ra)\n {\n- int ctr_idx = csrno - CSR_MCYCLE;\n+ uint32_t ctr_idx = riscv_pmu_csrno_to_ctr_idx(csrno);\n \n return riscv_pmu_write_ctr(env, val, ctr_idx);\n }\n@@ -1365,7 +1357,7 @@ static RISCVException write_mhpmcounter(CPURISCVState *env, int csrno,\n static RISCVException write_mhpmcounterh(CPURISCVState *env, int csrno,\n target_ulong val, uintptr_t ra)\n {\n- int ctr_idx = csrno - CSR_MCYCLEH;\n+ uint32_t ctr_idx = riscv_pmu_csrno_to_ctr_idx(csrno);\n \n return riscv_pmu_write_ctrh(env, val, ctr_idx);\n }\n@@ -1406,33 +1398,16 @@ RISCVException riscv_pmu_read_ctr(CPURISCVState *env, target_ulong *val,\n static RISCVException read_hpmcounter(CPURISCVState *env, int csrno,\n target_ulong *val)\n {\n- uint16_t ctr_index;\n-\n- if (csrno >= CSR_MCYCLE && csrno <= CSR_MHPMCOUNTER31) {\n- ctr_index = csrno - CSR_MCYCLE;\n- } else if (csrno >= CSR_CYCLE && csrno <= CSR_HPMCOUNTER31) {\n- ctr_index = csrno - CSR_CYCLE;\n- } else {\n- return RISCV_EXCP_ILLEGAL_INST;\n- }\n-\n- return riscv_pmu_read_ctr(env, val, false, ctr_index);\n+ uint32_t ctr_idx = riscv_pmu_csrno_to_ctr_idx(csrno);\n+ return riscv_pmu_read_ctr(env, val, false, ctr_idx);\n }\n \n static RISCVException read_hpmcounterh(CPURISCVState *env, int csrno,\n target_ulong *val)\n {\n- uint16_t ctr_index;\n \n- if (csrno >= CSR_MCYCLEH && csrno <= CSR_MHPMCOUNTER31H) {\n- ctr_index = csrno - CSR_MCYCLEH;\n- } else if (csrno >= CSR_CYCLEH && csrno <= CSR_HPMCOUNTER31H) {\n- ctr_index = csrno - CSR_CYCLEH;\n- } else {\n- return RISCV_EXCP_ILLEGAL_INST;\n- }\n-\n- return riscv_pmu_read_ctr(env, val, true, ctr_index);\n+ uint32_t ctr_idx = riscv_pmu_csrno_to_ctr_idx(csrno);\n+ return riscv_pmu_read_ctr(env, val, true, ctr_idx);\n }\n \n static int rmw_cd_mhpmcounter(CPURISCVState *env, int ctr_idx,\n@@ -1599,8 +1574,8 @@ static int rmw_cd_ctr_cfgh(CPURISCVState *env, int cfg_index, target_ulong *val,\n static RISCVException read_scountovf(CPURISCVState *env, int csrno,\n target_ulong *val)\n {\n- int mhpmevt_start = CSR_MHPMEVENT3 - CSR_MCOUNTINHIBIT;\n- int i;\n+ uint32_t mhpmevt_start = riscv_pmu_csrno_to_ctr_idx(CSR_MHPMEVENT3);\n+ uint32_t i;\n *val = 0;\n target_ulong *mhpm_evt_val;\n uint64_t of_bit_mask;\ndiff --git a/target/riscv/pmu.c b/target/riscv/pmu.c\nindex a68809eef3..b983eadd83 100644\n--- a/target/riscv/pmu.c\n+++ b/target/riscv/pmu.c\n@@ -600,3 +600,47 @@ void riscv_pmu_init(RISCVCPU *cpu, Error **errp)\n \n cpu->pmu_avail_ctrs = cpu->cfg.pmu_mask;\n }\n+\n+uint32_t riscv_pmu_csrno_to_ctr_idx(int csrno)\n+{\n+ #define CASE_RANGE(low, high, offset) { \\\n+ case (low)...(high): \\\n+ return csrno - (low) + (offset); \\\n+ }\n+ #define HPMCOUNTER_START (HPM_MINSTRET_IDX + 1)\n+\n+ switch (csrno) {\n+ CASE_RANGE(CSR_MHPMEVENT3, CSR_MHPMEVENT31, HPMCOUNTER_START)\n+ CASE_RANGE(CSR_MHPMEVENT3H, CSR_MHPMEVENT31H, HPMCOUNTER_START)\n+ CASE_RANGE(CSR_HPMCOUNTER3, CSR_HPMCOUNTER31, HPMCOUNTER_START)\n+ CASE_RANGE(CSR_HPMCOUNTER3H, CSR_HPMCOUNTER31H, HPMCOUNTER_START)\n+ CASE_RANGE(CSR_MHPMCOUNTER3, CSR_MHPMCOUNTER31, HPMCOUNTER_START)\n+ CASE_RANGE(CSR_MHPMCOUNTER3H, CSR_MHPMCOUNTER31H, HPMCOUNTER_START)\n+\n+ case CSR_MCYCLE:\n+ case CSR_MCYCLEH:\n+ case CSR_CYCLE:\n+ case CSR_CYCLEH:\n+ case CSR_MCYCLECFG:\n+ case CSR_MCYCLECFGH:\n+ return HPM_MCYCLE_IDX;\n+\n+ case CSR_MINSTRET:\n+ case CSR_MINSTRETH:\n+ case CSR_INSTRET:\n+ case CSR_INSTRETH:\n+ case CSR_MINSTRETCFG:\n+ case CSR_MINSTRETCFGH:\n+ return HPM_MINSTRET_IDX;\n+\n+ case CSR_TIME:\n+ case CSR_TIMEH:\n+ return HPM_MTIME_IDX;\n+\n+ default:\n+ g_assert_not_reached();\n+ }\n+\n+ #undef HPMCOUNTER_START\n+ #undef CASE_RANGE\n+}\ndiff --git a/target/riscv/pmu.h b/target/riscv/pmu.h\nindex 3853d0e262..8f019bea9f 100644\n--- a/target/riscv/pmu.h\n+++ b/target/riscv/pmu.h\n@@ -38,5 +38,6 @@ void riscv_pmu_update_fixed_ctrs(CPURISCVState *env, target_ulong newpriv,\n bool new_virt);\n RISCVException riscv_pmu_read_ctr(CPURISCVState *env, target_ulong *val,\n bool upper_half, uint32_t ctr_idx);\n+uint32_t riscv_pmu_csrno_to_ctr_idx(int csrno);\n \n #endif /* RISCV_PMU_H */\n", "prefixes": [ "RFC", "1/6" ] }