* [PATCH v4 00/13] Support Andes PMU extension
@ 2023-11-22 12:12 Yu Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 01/13] riscv: errata: Rename defines for Andes Yu Chien Peter Lin
` (12 more replies)
0 siblings, 13 replies; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
Hi All,
This patch series introduces the Andes PMU extension, which serves
the same purpose as Sscofpmf. To use FDT-based probing the hardware
support of the PMU extension, instead of adding another CPU errata,
we have converted T-Head's PMU alternative along with this series.
Its non-standard local interrupt is assigned to bit 18 in the
custom S-mode local interrupt enable/pending registers (slie/slip),
while the interrupt cause is (256 + 18).
The feature needs the PMU device registered in OpenSBI.
The OpenSBI and Linux patches can be found on Andes Technology GitHub
- https://github.com/andestech/opensbi/commits/andes-pmu-support-v3
- https://github.com/andestech/linux/commits/andes-pmu-support-v4
The PMU device tree node used on AX45MP:
- https://github.com/andestech/opensbi/blob/andes-pmu-support-v3/docs/pmu_support.md#example-3
Tested hardware:
- ASUS Tinker-V (RZ/Five, AX45MP single core)
- Andes AE350 (AX45MP quad core)
Locus Wei-Han Chen (1):
riscv: andes: Support symbolic FW and HW raw events
Yu Chien Peter Lin (12):
riscv: errata: Rename defines for Andes
irqchip/riscv-intc: Allow large non-standard interrupt number
irqchip/riscv-intc: Introduce Andes hart-level interrupt controller
dt-bindings: riscv: Add Andes interrupt controller compatible string
riscv: dts: renesas: r9a07g043f: Update compatible string to use Andes
INTC
perf: RISC-V: Eliminate redundant interrupt enable/disable operations
RISC-V: Move T-Head PMU to CPU feature alternative framework
perf: RISC-V: Introduce Andes PMU for perf event sampling
dt-bindings: riscv: Add T-Head PMU extension description
dt-bindings: riscv: Add Andes PMU extension description
riscv: dts: allwinner: Add T-Head PMU extension
riscv: dts: renesas: Add Andes PMU extension
.../devicetree/bindings/riscv/cpus.yaml | 6 +-
.../devicetree/bindings/riscv/extensions.yaml | 13 ++
arch/riscv/Kconfig.errata | 13 --
arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi | 2 +-
arch/riscv/boot/dts/renesas/r9a07g043f.dtsi | 4 +-
arch/riscv/errata/andes/errata.c | 10 +-
arch/riscv/errata/thead/errata.c | 19 ---
arch/riscv/include/asm/errata_list.h | 19 +--
arch/riscv/include/asm/hwcap.h | 2 +
arch/riscv/include/asm/vendorid_list.h | 2 +-
arch/riscv/kernel/alternative.c | 2 +-
arch/riscv/kernel/cpufeature.c | 2 +
drivers/irqchip/irq-riscv-intc.c | 61 +++++++--
drivers/perf/Kconfig | 27 ++++
drivers/perf/riscv_pmu_sbi.c | 47 +++++--
include/linux/soc/andes/irq.h | 17 +++
.../arch/riscv/andes/ax45/firmware.json | 68 ++++++++++
.../arch/riscv/andes/ax45/instructions.json | 127 ++++++++++++++++++
.../arch/riscv/andes/ax45/memory.json | 57 ++++++++
.../arch/riscv/andes/ax45/microarch.json | 77 +++++++++++
tools/perf/pmu-events/arch/riscv/mapfile.csv | 1 +
21 files changed, 495 insertions(+), 81 deletions(-)
create mode 100644 include/linux/soc/andes/irq.h
create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/firmware.json
create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/instructions.json
create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/memory.json
create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/microarch.json
--
2.34.1
^ permalink raw reply [flat|nested] 49+ messages in thread
* [PATCH v4 01/13] riscv: errata: Rename defines for Andes
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-24 14:57 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 02/13] irqchip/riscv-intc: Allow large non-standard interrupt number Yu Chien Peter Lin
` (11 subsequent siblings)
12 siblings, 1 reply; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
Using "ANDES" rather than "ANDESTECH" to unify the naming
convention with directory, file names, Kconfig options
and other definitions.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Reviewed-by: Charles Ci-Jyun Wu <dminus@andestech.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
---
Changes v1 -> v2:
- No change
Changes v2 -> v3:
- Rewrote commit message (suggested by Conor)
Changes v3 -> v4:
- Include Conor's Acked-by tag
---
arch/riscv/errata/andes/errata.c | 10 +++++-----
arch/riscv/include/asm/errata_list.h | 4 ++--
arch/riscv/include/asm/vendorid_list.h | 2 +-
arch/riscv/kernel/alternative.c | 2 +-
4 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/arch/riscv/errata/andes/errata.c b/arch/riscv/errata/andes/errata.c
index 197db68cc8da..d2e1abcac967 100644
--- a/arch/riscv/errata/andes/errata.c
+++ b/arch/riscv/errata/andes/errata.c
@@ -18,9 +18,9 @@
#include <asm/sbi.h>
#include <asm/vendorid_list.h>
-#define ANDESTECH_AX45MP_MARCHID 0x8000000000008a45UL
-#define ANDESTECH_AX45MP_MIMPID 0x500UL
-#define ANDESTECH_SBI_EXT_ANDES 0x0900031E
+#define ANDES_AX45MP_MARCHID 0x8000000000008a45UL
+#define ANDES_AX45MP_MIMPID 0x500UL
+#define ANDES_SBI_EXT_ANDES 0x0900031E
#define ANDES_SBI_EXT_IOCP_SW_WORKAROUND 1
@@ -32,7 +32,7 @@ static long ax45mp_iocp_sw_workaround(void)
* ANDES_SBI_EXT_IOCP_SW_WORKAROUND SBI EXT checks if the IOCP is missing and
* cache is controllable only then CMO will be applied to the platform.
*/
- ret = sbi_ecall(ANDESTECH_SBI_EXT_ANDES, ANDES_SBI_EXT_IOCP_SW_WORKAROUND,
+ ret = sbi_ecall(ANDES_SBI_EXT_ANDES, ANDES_SBI_EXT_IOCP_SW_WORKAROUND,
0, 0, 0, 0, 0, 0);
return ret.error ? 0 : ret.value;
@@ -43,7 +43,7 @@ static bool errata_probe_iocp(unsigned int stage, unsigned long arch_id, unsigne
if (!IS_ENABLED(CONFIG_ERRATA_ANDES_CMO))
return false;
- if (arch_id != ANDESTECH_AX45MP_MARCHID || impid != ANDESTECH_AX45MP_MIMPID)
+ if (arch_id != ANDES_AX45MP_MARCHID || impid != ANDES_AX45MP_MIMPID)
return false;
if (!ax45mp_iocp_sw_workaround())
diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h
index 83ed25e43553..4ed21a62158c 100644
--- a/arch/riscv/include/asm/errata_list.h
+++ b/arch/riscv/include/asm/errata_list.h
@@ -12,8 +12,8 @@
#include <asm/vendorid_list.h>
#ifdef CONFIG_ERRATA_ANDES
-#define ERRATA_ANDESTECH_NO_IOCP 0
-#define ERRATA_ANDESTECH_NUMBER 1
+#define ERRATA_ANDES_NO_IOCP 0
+#define ERRATA_ANDES_NUMBER 1
#endif
#ifdef CONFIG_ERRATA_SIFIVE
diff --git a/arch/riscv/include/asm/vendorid_list.h b/arch/riscv/include/asm/vendorid_list.h
index e55407ace0c3..2f2bb0c84f9a 100644
--- a/arch/riscv/include/asm/vendorid_list.h
+++ b/arch/riscv/include/asm/vendorid_list.h
@@ -5,7 +5,7 @@
#ifndef ASM_VENDOR_LIST_H
#define ASM_VENDOR_LIST_H
-#define ANDESTECH_VENDOR_ID 0x31e
+#define ANDES_VENDOR_ID 0x31e
#define SIFIVE_VENDOR_ID 0x489
#define THEAD_VENDOR_ID 0x5b7
diff --git a/arch/riscv/kernel/alternative.c b/arch/riscv/kernel/alternative.c
index 319a1da0358b..0128b161bfda 100644
--- a/arch/riscv/kernel/alternative.c
+++ b/arch/riscv/kernel/alternative.c
@@ -43,7 +43,7 @@ static void riscv_fill_cpu_mfr_info(struct cpu_manufacturer_info_t *cpu_mfr_info
switch (cpu_mfr_info->vendor_id) {
#ifdef CONFIG_ERRATA_ANDES
- case ANDESTECH_VENDOR_ID:
+ case ANDES_VENDOR_ID:
cpu_mfr_info->patch_func = andes_errata_patch_func;
break;
#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 02/13] irqchip/riscv-intc: Allow large non-standard interrupt number
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 01/13] riscv: errata: Rename defines for Andes Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-12-08 15:54 ` Thomas Gleixner
2023-11-22 12:12 ` [PATCH v4 03/13] irqchip/riscv-intc: Introduce Andes hart-level interrupt controller Yu Chien Peter Lin
` (10 subsequent siblings)
12 siblings, 1 reply; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
Currently, the implementation of the RISC-V INTC driver uses the
interrupt cause as hwirq and has a limitation of supporting a
maximum of 64 hwirqs. However, according to the privileged spec,
interrupt causes >= 16 are defined for platform use.
This limitation prevents us from fully utilizing the available
local interrupt sources. Additionally, the hwirqs used on RISC-V
are sparse, with only interrupt numbers 1, 5 and 9 (plus Sscofpmf
or T-Head's PMU irq) being currently used for supervisor mode.
Switch to using irq_domain_create_tree() to create the radix tree
map, so a larger number of hardware interrupts can be handled.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Reviewed-by: Charles Ci-Jyun Wu <dminus@andestech.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
---
Changes v1 -> v2:
- Fixed irq mapping failure checking (suggested by Clément and Anup)
Changes v2 -> v3:
- No change
Changes v3 -> v4: (Suggested by Thomas [1])
- Use pr_warn_ratelimited instead
- Fix coding style and commit message
[1] https://patchwork.kernel.org/project/linux-riscv/patch/20231023004100.2663486-3-peterlin@andestech.com/#25573085
---
drivers/irqchip/irq-riscv-intc.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/drivers/irqchip/irq-riscv-intc.c b/drivers/irqchip/irq-riscv-intc.c
index e8d01b14ccdd..2fdd40f2a791 100644
--- a/drivers/irqchip/irq-riscv-intc.c
+++ b/drivers/irqchip/irq-riscv-intc.c
@@ -24,10 +24,9 @@ static asmlinkage void riscv_intc_irq(struct pt_regs *regs)
{
unsigned long cause = regs->cause & ~CAUSE_IRQ_FLAG;
- if (unlikely(cause >= BITS_PER_LONG))
- panic("unexpected interrupt cause");
-
- generic_handle_domain_irq(intc_domain, cause);
+ if (generic_handle_domain_irq(intc_domain, cause))
+ pr_warn_ratelimited("Failed to handle interrupt (cause: %ld)\n",
+ cause);
}
/*
@@ -117,8 +116,7 @@ static int __init riscv_intc_init_common(struct fwnode_handle *fn)
{
int rc;
- intc_domain = irq_domain_create_linear(fn, BITS_PER_LONG,
- &riscv_intc_domain_ops, NULL);
+ intc_domain = irq_domain_create_tree(fn, &riscv_intc_domain_ops, NULL);
if (!intc_domain) {
pr_err("unable to add IRQ domain\n");
return -ENXIO;
@@ -132,8 +130,6 @@ static int __init riscv_intc_init_common(struct fwnode_handle *fn)
riscv_set_intc_hwnode_fn(riscv_intc_hwnode);
- pr_info("%d local interrupts mapped\n", BITS_PER_LONG);
-
return 0;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 03/13] irqchip/riscv-intc: Introduce Andes hart-level interrupt controller
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 01/13] riscv: errata: Rename defines for Andes Yu Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 02/13] irqchip/riscv-intc: Allow large non-standard interrupt number Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-12-08 16:01 ` Thomas Gleixner
2023-11-22 12:12 ` [PATCH v4 04/13] dt-bindings: riscv: Add Andes interrupt controller compatible string Yu Chien Peter Lin
` (9 subsequent siblings)
12 siblings, 1 reply; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
Add support for the Andes hart-level interrupt controller. This
controller provides interrupt mask/unmask functions to access the
custom register (SLIE) where the non-standard S-mode local interrupt
enable bits are located.
To share the riscv_intc_domain_map() with the generic RISC-V INTC and
ACPI, we add a chip parameter to riscv_intc_init_common(), so it can be
passed to the irq_domain_set_info() as private data.
Andes hart-level interrupt controller requires the "andestech,cpu-intc"
compatible string to be present in interrupt-controller of cpu node.
e.g.,
cpu0: cpu@0 {
compatible = "andestech,ax45mp", "riscv";
...
cpu0-intc: interrupt-controller {
#interrupt-cells = <0x01>;
compatible = "andestech,cpu-intc", "riscv,cpu-intc";
interrupt-controller;
};
};
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Reviewed-by: Charles Ci-Jyun Wu <dminus@andestech.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
---
Changes v1 -> v2:
- New patch
Changes v2 -> v3:
- Return -ENXIO if no valid compatible INTC found
- Allow falling back to generic RISC-V INTC
Changes v3 -> v4: (Suggested by Thomas [1])
- Add comment to andes irq chip function
- Refine code flow to share with generic RISC-V INTC and ACPI
- Move Andes specific definitions to include/linux/soc/andes/irq.h
[1] https://patchwork.kernel.org/project/linux-riscv/patch/20231019135723.3657156-1-peterlin@andestech.com/
---
drivers/irqchip/irq-riscv-intc.c | 51 ++++++++++++++++++++++++++++----
include/linux/soc/andes/irq.h | 17 +++++++++++
2 files changed, 63 insertions(+), 5 deletions(-)
create mode 100644 include/linux/soc/andes/irq.h
diff --git a/drivers/irqchip/irq-riscv-intc.c b/drivers/irqchip/irq-riscv-intc.c
index 2fdd40f2a791..30f0036c8978 100644
--- a/drivers/irqchip/irq-riscv-intc.c
+++ b/drivers/irqchip/irq-riscv-intc.c
@@ -17,6 +17,7 @@
#include <linux/module.h>
#include <linux/of.h>
#include <linux/smp.h>
+#include <linux/soc/andes/irq.h>
static struct irq_domain *intc_domain;
@@ -46,6 +47,31 @@ static void riscv_intc_irq_unmask(struct irq_data *d)
csr_set(CSR_IE, BIT(d->hwirq));
}
+static void andes_intc_irq_mask(struct irq_data *d)
+{
+ /*
+ * Andes specific S-mode local interrupt causes (hwirq)
+ * are defined as (256 + n) and controlled by n-th bit
+ * of SLIE.
+ */
+ unsigned int mask = BIT(d->hwirq % BITS_PER_LONG);
+
+ if (d->hwirq < ANDES_SLI_CAUSE_BASE)
+ csr_clear(CSR_IE, mask);
+ else
+ csr_clear(ANDES_CSR_SLIE, mask);
+}
+
+static void andes_intc_irq_unmask(struct irq_data *d)
+{
+ unsigned int mask = BIT(d->hwirq % BITS_PER_LONG);
+
+ if (d->hwirq < ANDES_SLI_CAUSE_BASE)
+ csr_set(CSR_IE, mask);
+ else
+ csr_set(ANDES_CSR_SLIE, mask);
+}
+
static void riscv_intc_irq_eoi(struct irq_data *d)
{
/*
@@ -69,11 +95,20 @@ static struct irq_chip riscv_intc_chip = {
.irq_eoi = riscv_intc_irq_eoi,
};
+static struct irq_chip andes_intc_chip = {
+ .name = "RISC-V INTC",
+ .irq_mask = andes_intc_irq_mask,
+ .irq_unmask = andes_intc_irq_unmask,
+ .irq_eoi = riscv_intc_irq_eoi,
+};
+
static int riscv_intc_domain_map(struct irq_domain *d, unsigned int irq,
irq_hw_number_t hwirq)
{
+ struct irq_chip *chip = d->host_data;
+
irq_set_percpu_devid(irq);
- irq_domain_set_info(d, irq, hwirq, &riscv_intc_chip, d->host_data,
+ irq_domain_set_info(d, irq, hwirq, chip, d->host_data,
handle_percpu_devid_irq, NULL, NULL);
return 0;
@@ -112,11 +147,12 @@ static struct fwnode_handle *riscv_intc_hwnode(void)
return intc_domain->fwnode;
}
-static int __init riscv_intc_init_common(struct fwnode_handle *fn)
+static int __init riscv_intc_init_common(struct fwnode_handle *fn,
+ struct irq_chip *chip)
{
int rc;
- intc_domain = irq_domain_create_tree(fn, &riscv_intc_domain_ops, NULL);
+ intc_domain = irq_domain_create_tree(fn, &riscv_intc_domain_ops, chip);
if (!intc_domain) {
pr_err("unable to add IRQ domain\n");
return -ENXIO;
@@ -138,6 +174,7 @@ static int __init riscv_intc_init(struct device_node *node,
{
int rc;
unsigned long hartid;
+ struct irq_chip *chip = &riscv_intc_chip;
rc = riscv_of_parent_hartid(node, &hartid);
if (rc < 0) {
@@ -162,10 +199,14 @@ static int __init riscv_intc_init(struct device_node *node,
return 0;
}
- return riscv_intc_init_common(of_node_to_fwnode(node));
+ if (of_device_is_compatible(node, "andestech,cpu-intc"))
+ chip = &andes_intc_chip;
+
+ return riscv_intc_init_common(of_node_to_fwnode(node), chip);
}
IRQCHIP_DECLARE(riscv, "riscv,cpu-intc", riscv_intc_init);
+IRQCHIP_DECLARE(andes, "andestech,cpu-intc", riscv_intc_init);
#ifdef CONFIG_ACPI
@@ -192,7 +233,7 @@ static int __init riscv_intc_acpi_init(union acpi_subtable_headers *header,
return -ENOMEM;
}
- return riscv_intc_init_common(fn);
+ return riscv_intc_init_common(fn, &riscv_intc_chip);
}
IRQCHIP_ACPI_DECLARE(riscv_intc, ACPI_MADT_TYPE_RINTC, NULL,
diff --git a/include/linux/soc/andes/irq.h b/include/linux/soc/andes/irq.h
new file mode 100644
index 000000000000..f03e68fea261
--- /dev/null
+++ b/include/linux/soc/andes/irq.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2023 Andes Technology Corporation
+ */
+#ifndef __ANDES_IRQ_H
+#define __ANDES_IRQ_H
+
+/* Andes PMU irq number */
+#define ANDES_RV_IRQ_PMU 18
+#define ANDES_SLI_CAUSE_BASE 256
+
+/* Andes PMU related registers */
+#define ANDES_CSR_SLIE 0x9c4
+#define ANDES_CSR_SLIP 0x9c5
+#define ANDES_CSR_SCOUNTEROF 0x9d4
+
+#endif /* __ANDES_IRQ_H */
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 04/13] dt-bindings: riscv: Add Andes interrupt controller compatible string
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
` (2 preceding siblings ...)
2023-11-22 12:12 ` [PATCH v4 03/13] irqchip/riscv-intc: Introduce Andes hart-level interrupt controller Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-23 14:38 ` Conor Dooley
2023-11-24 15:03 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 05/13] riscv: dts: renesas: r9a07g043f: Update compatible string to use Andes INTC Yu Chien Peter Lin
` (8 subsequent siblings)
12 siblings, 2 replies; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
Add "andestech,cpu-intc" compatible string to indicate that
Andes specific local interrupt is supported on the core,
e.g. AX45MP cores have 3 types of non-standard local interrupt
can be handled in supervisor mode:
- Slave port ECC error interrupt
- Bus write transaction error interrupt
- Performance monitor overflow interrupt
These interrupts are enabled/disabled via a custom register
SLIE instead of the standard interrupt enable register SIE.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
---
Changes v1 -> v2:
- New patch
Changes v2 -> v3:
- Updated commit message
- Fixed possible compatibles for Andes INTC
Changes v3 -> v4:
- Add const entry instead of enum (Suggested by Conor)
---
Documentation/devicetree/bindings/riscv/cpus.yaml | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/riscv/cpus.yaml b/Documentation/devicetree/bindings/riscv/cpus.yaml
index f392e367d673..50307554478f 100644
--- a/Documentation/devicetree/bindings/riscv/cpus.yaml
+++ b/Documentation/devicetree/bindings/riscv/cpus.yaml
@@ -100,7 +100,11 @@ properties:
const: 1
compatible:
- const: riscv,cpu-intc
+ oneOf:
+ - items:
+ - const: andestech,cpu-intc
+ - const: riscv,cpu-intc
+ - const: riscv,cpu-intc
interrupt-controller: true
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 05/13] riscv: dts: renesas: r9a07g043f: Update compatible string to use Andes INTC
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
` (3 preceding siblings ...)
2023-11-22 12:12 ` [PATCH v4 04/13] dt-bindings: riscv: Add Andes interrupt controller compatible string Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-22 16:36 ` Geert Uytterhoeven
2023-11-24 15:04 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 06/13] perf: RISC-V: Eliminate redundant interrupt enable/disable operations Yu Chien Peter Lin
` (7 subsequent siblings)
12 siblings, 2 replies; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
The Andes hart-level interrupt controller (Andes INTC) allows AX45MP
cores to handle custom local interrupts, such as the performance
counter overflow interrupt.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
---
Changes v1 -> v2:
- New patch
Changes v2 -> v3:
- Fixed possible compatibles for Andes INTC
Changes v3 -> v4:
- No change
---
arch/riscv/boot/dts/renesas/r9a07g043f.dtsi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi b/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
index eb301d8eb2b0..78072e80793d 100644
--- a/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
+++ b/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
@@ -38,7 +38,7 @@ cpu0: cpu@0 {
cpu0_intc: interrupt-controller {
#interrupt-cells = <1>;
- compatible = "riscv,cpu-intc";
+ compatible = "andestech,cpu-intc", "riscv,cpu-intc";
interrupt-controller;
};
};
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 06/13] perf: RISC-V: Eliminate redundant interrupt enable/disable operations
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
` (4 preceding siblings ...)
2023-11-22 12:12 ` [PATCH v4 05/13] riscv: dts: renesas: r9a07g043f: Update compatible string to use Andes INTC Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 07/13] RISC-V: Move T-Head PMU to CPU feature alternative framework Yu Chien Peter Lin
` (6 subsequent siblings)
12 siblings, 0 replies; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
The interrupt enable/disable operations are already performed by the
IRQ chip functions riscv_intc_irq_unmask()/riscv_intc_irq_mask() during
enable_percpu_irq()/disable_percpu_irq(). We can just do it once.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
---
This patch allows us to drop unnecessary ALT_SBI_PMU_OVF_{DISABLE,ENABLE}
in the last PATCH3 [1].
[1] https://patchwork.kernel.org/project/linux-riscv/patch/20230907021635.1002738-4-peterlin@andestech.com/
Changes v1 -> v2:
- New patch
Changes v2 -> v3:
- No change
Changes v3 -> v4:
- No change
---
drivers/perf/riscv_pmu_sbi.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c
index 16acd4dcdb96..2edbc37abadf 100644
--- a/drivers/perf/riscv_pmu_sbi.c
+++ b/drivers/perf/riscv_pmu_sbi.c
@@ -781,7 +781,6 @@ static int pmu_sbi_starting_cpu(unsigned int cpu, struct hlist_node *node)
if (riscv_pmu_use_irq) {
cpu_hw_evt->irq = riscv_pmu_irq;
csr_clear(CSR_IP, BIT(riscv_pmu_irq_num));
- csr_set(CSR_IE, BIT(riscv_pmu_irq_num));
enable_percpu_irq(riscv_pmu_irq, IRQ_TYPE_NONE);
}
@@ -792,7 +791,6 @@ static int pmu_sbi_dying_cpu(unsigned int cpu, struct hlist_node *node)
{
if (riscv_pmu_use_irq) {
disable_percpu_irq(riscv_pmu_irq);
- csr_clear(CSR_IE, BIT(riscv_pmu_irq_num));
}
/* Disable all counters access for user mode now */
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 07/13] RISC-V: Move T-Head PMU to CPU feature alternative framework
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
` (5 preceding siblings ...)
2023-11-22 12:12 ` [PATCH v4 06/13] perf: RISC-V: Eliminate redundant interrupt enable/disable operations Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-22 21:16 ` Guo Ren
2023-11-23 14:45 ` Conor Dooley
2023-11-22 12:12 ` [PATCH v4 08/13] perf: RISC-V: Introduce Andes PMU for perf event sampling Yu Chien Peter Lin
` (5 subsequent siblings)
12 siblings, 2 replies; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
The custom PMU extension aims to support perf event sampling prior
to the ratification of Sscofpmf. Instead of diverting the bits and
register reserved for future standard, a set of custom registers is
added. Hence, we may consider it as a CPU feature rather than an
erratum.
T-Head cores need to append "xtheadpmu" to the riscv,isa-extensions
for each cpu node in device tree, and enable CONFIG_THEAD_CUSTOM_PMU
for proper functioning as of this commit.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
---
Hi All,
This is in preparation for introducing other PMU alternative.
We follow Conor's suggestion [1][2] to use cpu feature alternative
framework rather than errata, I'm happy to drop the patch if someone
is willing to take care of this for T-Head's platforms (or sticking
with CPU errata alternative?)
[1] https://patchwork.kernel.org/project/linux-riscv/patch/20230907021635.1002738-4-peterlin@andestech.com/#25503860
[2] https://patchwork.kernel.org/project/linux-riscv/patch/20231023004100.2663486-8-peterlin@andestech.com/#25565650
Changes v1 -> v2:
- New patch
Changes v2 -> v3:
- Removed m{vendor/arch/imp}id checks in pmu_sbi_setup_irqs()
Changes v3 -> v4:
- No change
---
arch/riscv/Kconfig.errata | 13 -------------
arch/riscv/errata/thead/errata.c | 19 -------------------
arch/riscv/include/asm/errata_list.h | 15 +--------------
arch/riscv/include/asm/hwcap.h | 1 +
arch/riscv/kernel/cpufeature.c | 1 +
drivers/perf/Kconfig | 13 +++++++++++++
drivers/perf/riscv_pmu_sbi.c | 19 ++++++++++++++-----
7 files changed, 30 insertions(+), 51 deletions(-)
diff --git a/arch/riscv/Kconfig.errata b/arch/riscv/Kconfig.errata
index e2c731cfed8c..0d19f47d1018 100644
--- a/arch/riscv/Kconfig.errata
+++ b/arch/riscv/Kconfig.errata
@@ -86,17 +86,4 @@ config ERRATA_THEAD_CMO
If you don't know what to do here, say "Y".
-config ERRATA_THEAD_PMU
- bool "Apply T-Head PMU errata"
- depends on ERRATA_THEAD && RISCV_PMU_SBI
- default y
- help
- The T-Head C9xx cores implement a PMU overflow extension very
- similar to the core SSCOFPMF extension.
-
- This will apply the overflow errata to handle the non-standard
- behaviour via the regular SBI PMU driver and interface.
-
- If you don't know what to do here, say "Y".
-
endmenu # "CPU errata selection"
diff --git a/arch/riscv/errata/thead/errata.c b/arch/riscv/errata/thead/errata.c
index 0554ed4bf087..5de5f7209132 100644
--- a/arch/riscv/errata/thead/errata.c
+++ b/arch/riscv/errata/thead/errata.c
@@ -53,22 +53,6 @@ static bool errata_probe_cmo(unsigned int stage,
return true;
}
-static bool errata_probe_pmu(unsigned int stage,
- unsigned long arch_id, unsigned long impid)
-{
- if (!IS_ENABLED(CONFIG_ERRATA_THEAD_PMU))
- return false;
-
- /* target-c9xx cores report arch_id and impid as 0 */
- if (arch_id != 0 || impid != 0)
- return false;
-
- if (stage == RISCV_ALTERNATIVES_EARLY_BOOT)
- return false;
-
- return true;
-}
-
static u32 thead_errata_probe(unsigned int stage,
unsigned long archid, unsigned long impid)
{
@@ -80,9 +64,6 @@ static u32 thead_errata_probe(unsigned int stage,
if (errata_probe_cmo(stage, archid, impid))
cpu_req_errata |= BIT(ERRATA_THEAD_CMO);
- if (errata_probe_pmu(stage, archid, impid))
- cpu_req_errata |= BIT(ERRATA_THEAD_PMU);
-
return cpu_req_errata;
}
diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h
index 4ed21a62158c..9bccc2ba0eb5 100644
--- a/arch/riscv/include/asm/errata_list.h
+++ b/arch/riscv/include/asm/errata_list.h
@@ -25,8 +25,7 @@
#ifdef CONFIG_ERRATA_THEAD
#define ERRATA_THEAD_PBMT 0
#define ERRATA_THEAD_CMO 1
-#define ERRATA_THEAD_PMU 2
-#define ERRATA_THEAD_NUMBER 3
+#define ERRATA_THEAD_NUMBER 2
#endif
#ifdef __ASSEMBLY__
@@ -147,18 +146,6 @@ asm volatile(ALTERNATIVE_2( \
"r"((unsigned long)(_start) + (_size)) \
: "a0")
-#define THEAD_C9XX_RV_IRQ_PMU 17
-#define THEAD_C9XX_CSR_SCOUNTEROF 0x5c5
-
-#define ALT_SBI_PMU_OVERFLOW(__ovl) \
-asm volatile(ALTERNATIVE( \
- "csrr %0, " __stringify(CSR_SSCOUNTOVF), \
- "csrr %0, " __stringify(THEAD_C9XX_CSR_SCOUNTEROF), \
- THEAD_VENDOR_ID, ERRATA_THEAD_PMU, \
- CONFIG_ERRATA_THEAD_PMU) \
- : "=r" (__ovl) : \
- : "memory")
-
#endif /* __ASSEMBLY__ */
#endif
diff --git a/arch/riscv/include/asm/hwcap.h b/arch/riscv/include/asm/hwcap.h
index 06d30526ef3b..c85ee34c78d9 100644
--- a/arch/riscv/include/asm/hwcap.h
+++ b/arch/riscv/include/asm/hwcap.h
@@ -57,6 +57,7 @@
#define RISCV_ISA_EXT_ZIHPM 42
#define RISCV_ISA_EXT_SMSTATEEN 43
#define RISCV_ISA_EXT_ZICOND 44
+#define RISCV_ISA_EXT_XTHEADPMU 45
#define RISCV_ISA_EXT_MAX 64
diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
index b3785ffc1570..e606f588d366 100644
--- a/arch/riscv/kernel/cpufeature.c
+++ b/arch/riscv/kernel/cpufeature.c
@@ -185,6 +185,7 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
__RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL),
__RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT),
__RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT),
+ __RISCV_ISA_EXT_DATA(xtheadpmu, RISCV_ISA_EXT_XTHEADPMU),
};
const size_t riscv_isa_ext_count = ARRAY_SIZE(riscv_isa_ext);
diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig
index 273d67ecf6d2..c71b6f16bdfa 100644
--- a/drivers/perf/Kconfig
+++ b/drivers/perf/Kconfig
@@ -86,6 +86,19 @@ config RISCV_PMU_SBI
full perf feature support i.e. counter overflow, privilege mode
filtering, counter configuration.
+config THEAD_CUSTOM_PMU
+ bool "T-Head custom PMU support"
+ depends on RISCV_ALTERNATIVE && RISCV_PMU_SBI
+ default y
+ help
+ The T-Head C9xx cores implement a PMU overflow extension very
+ similar to the core SSCOFPMF extension.
+
+ This will patch the overflow CSR and handle the non-standard
+ behaviour via the regular SBI PMU driver and interface.
+
+ If you don't know what to do here, say "Y".
+
config ARM_PMU_ACPI
depends on ARM_PMU && ACPI
def_bool y
diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c
index 2edbc37abadf..31ca79846399 100644
--- a/drivers/perf/riscv_pmu_sbi.c
+++ b/drivers/perf/riscv_pmu_sbi.c
@@ -20,10 +20,21 @@
#include <linux/cpu_pm.h>
#include <linux/sched/clock.h>
-#include <asm/errata_list.h>
#include <asm/sbi.h>
#include <asm/cpufeature.h>
+#define THEAD_C9XX_RV_IRQ_PMU 17
+#define THEAD_C9XX_CSR_SCOUNTEROF 0x5c5
+
+#define ALT_SBI_PMU_OVERFLOW(__ovl) \
+asm volatile(ALTERNATIVE( \
+ "csrr %0, " __stringify(CSR_SSCOUNTOVF), \
+ "csrr %0, " __stringify(THEAD_C9XX_CSR_SCOUNTEROF), \
+ 0, RISCV_ISA_EXT_XTHEADPMU, \
+ CONFIG_THEAD_CUSTOM_PMU) \
+ : "=r" (__ovl) : \
+ : "memory")
+
#define SYSCTL_NO_USER_ACCESS 0
#define SYSCTL_USER_ACCESS 1
#define SYSCTL_LEGACY 2
@@ -808,10 +819,8 @@ static int pmu_sbi_setup_irqs(struct riscv_pmu *pmu, struct platform_device *pde
if (riscv_isa_extension_available(NULL, SSCOFPMF)) {
riscv_pmu_irq_num = RV_IRQ_PMU;
riscv_pmu_use_irq = true;
- } else if (IS_ENABLED(CONFIG_ERRATA_THEAD_PMU) &&
- riscv_cached_mvendorid(0) == THEAD_VENDOR_ID &&
- riscv_cached_marchid(0) == 0 &&
- riscv_cached_mimpid(0) == 0) {
+ } else if (riscv_isa_extension_available(NULL, XTHEADPMU) &&
+ IS_ENABLED(CONFIG_THEAD_CUSTOM_PMU)) {
riscv_pmu_irq_num = THEAD_C9XX_RV_IRQ_PMU;
riscv_pmu_use_irq = true;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 08/13] perf: RISC-V: Introduce Andes PMU for perf event sampling
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
` (6 preceding siblings ...)
2023-11-22 12:12 ` [PATCH v4 07/13] RISC-V: Move T-Head PMU to CPU feature alternative framework Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-24 15:06 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description Yu Chien Peter Lin
` (4 subsequent siblings)
12 siblings, 1 reply; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
The Andes PMU extension provides the same mechanism as Sscofpmf,
allowing us to reuse the SBI PMU driver to support event sampling
and mode filtering.
To make use of this custom PMU extension, "xandespmu" needs
to be appended to the riscv,isa-extensions for each cpu node
in device-tree, and enable CONFIG_ANDES_CUSTOM_PMU.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Reviewed-by: Charles Ci-Jyun Wu <dminus@andestech.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
Co-developed-by: Locus Wei-Han Chen <locus84@andestech.com>
Signed-off-by: Locus Wei-Han Chen <locus84@andestech.com>
---
Changes v1 -> v2:
- New patch
Changes v2 -> v3:
- Reordered list in riscv_isa_ext[]
- Removed mvendorid check in pmu_sbi_setup_irqs()
Changes v3 -> v4:
- No change
---
arch/riscv/include/asm/hwcap.h | 1 +
arch/riscv/kernel/cpufeature.c | 1 +
drivers/perf/Kconfig | 14 ++++++++++++++
drivers/perf/riscv_pmu_sbi.c | 30 +++++++++++++++++++++++++-----
4 files changed, 41 insertions(+), 5 deletions(-)
diff --git a/arch/riscv/include/asm/hwcap.h b/arch/riscv/include/asm/hwcap.h
index c85ee34c78d9..cbfbc3505d2c 100644
--- a/arch/riscv/include/asm/hwcap.h
+++ b/arch/riscv/include/asm/hwcap.h
@@ -58,6 +58,7 @@
#define RISCV_ISA_EXT_SMSTATEEN 43
#define RISCV_ISA_EXT_ZICOND 44
#define RISCV_ISA_EXT_XTHEADPMU 45
+#define RISCV_ISA_EXT_XANDESPMU 46
#define RISCV_ISA_EXT_MAX 64
diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
index e606f588d366..42fda134c4a3 100644
--- a/arch/riscv/kernel/cpufeature.c
+++ b/arch/riscv/kernel/cpufeature.c
@@ -185,6 +185,7 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
__RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL),
__RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT),
__RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT),
+ __RISCV_ISA_EXT_DATA(xandespmu, RISCV_ISA_EXT_XANDESPMU),
__RISCV_ISA_EXT_DATA(xtheadpmu, RISCV_ISA_EXT_XTHEADPMU),
};
diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig
index c71b6f16bdfa..c1a490829d15 100644
--- a/drivers/perf/Kconfig
+++ b/drivers/perf/Kconfig
@@ -86,6 +86,20 @@ config RISCV_PMU_SBI
full perf feature support i.e. counter overflow, privilege mode
filtering, counter configuration.
+config ANDES_CUSTOM_PMU
+ bool "Andes custom PMU support"
+ depends on RISCV_ALTERNATIVE && RISCV_PMU_SBI
+ default y
+ help
+ The Andes cores implement a PMU overflow extension very
+ similar to the core SSCOFPMF extension.
+
+ This will patch the overflow/pending CSR and handle the
+ non-standard behaviour via the regular SBI PMU driver and
+ interface.
+
+ If you don't know what to do here, say "Y".
+
config THEAD_CUSTOM_PMU
bool "T-Head custom PMU support"
depends on RISCV_ALTERNATIVE && RISCV_PMU_SBI
diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c
index 31ca79846399..1e0c709efbfc 100644
--- a/drivers/perf/riscv_pmu_sbi.c
+++ b/drivers/perf/riscv_pmu_sbi.c
@@ -19,6 +19,7 @@
#include <linux/of.h>
#include <linux/cpu_pm.h>
#include <linux/sched/clock.h>
+#include <linux/soc/andes/irq.h>
#include <asm/sbi.h>
#include <asm/cpufeature.h>
@@ -27,14 +28,26 @@
#define THEAD_C9XX_CSR_SCOUNTEROF 0x5c5
#define ALT_SBI_PMU_OVERFLOW(__ovl) \
-asm volatile(ALTERNATIVE( \
+asm volatile(ALTERNATIVE_2( \
"csrr %0, " __stringify(CSR_SSCOUNTOVF), \
"csrr %0, " __stringify(THEAD_C9XX_CSR_SCOUNTEROF), \
0, RISCV_ISA_EXT_XTHEADPMU, \
- CONFIG_THEAD_CUSTOM_PMU) \
+ CONFIG_THEAD_CUSTOM_PMU, \
+ "csrr %0, " __stringify(ANDES_CSR_SCOUNTEROF), \
+ 0, RISCV_ISA_EXT_XANDESPMU, \
+ CONFIG_ANDES_CUSTOM_PMU) \
: "=r" (__ovl) : \
: "memory")
+#define ALT_SBI_PMU_OVF_CLEAR_PENDING(__irq_mask) \
+asm volatile(ALTERNATIVE( \
+ "csrc " __stringify(CSR_IP) ", %0\n\t", \
+ "csrc " __stringify(ANDES_CSR_SLIP) ", %0\n\t", \
+ 0, RISCV_ISA_EXT_XANDESPMU, \
+ CONFIG_ANDES_CUSTOM_PMU) \
+ : : "r"(__irq_mask) \
+ : "memory")
+
#define SYSCTL_NO_USER_ACCESS 0
#define SYSCTL_USER_ACCESS 1
#define SYSCTL_LEGACY 2
@@ -72,6 +85,7 @@ static int sysctl_perf_user_access __read_mostly = SYSCTL_USER_ACCESS;
static union sbi_pmu_ctr_info *pmu_ctr_list;
static bool riscv_pmu_use_irq;
static unsigned int riscv_pmu_irq_num;
+static unsigned int riscv_pmu_irq_mask;
static unsigned int riscv_pmu_irq;
/* Cache the available counters in a bitmask */
@@ -705,7 +719,7 @@ static irqreturn_t pmu_sbi_ovf_handler(int irq, void *dev)
event = cpu_hw_evt->events[fidx];
if (!event) {
- csr_clear(CSR_SIP, BIT(riscv_pmu_irq_num));
+ ALT_SBI_PMU_OVF_CLEAR_PENDING(riscv_pmu_irq_mask);
return IRQ_NONE;
}
@@ -719,7 +733,7 @@ static irqreturn_t pmu_sbi_ovf_handler(int irq, void *dev)
* Overflow interrupt pending bit should only be cleared after stopping
* all the counters to avoid any race condition.
*/
- csr_clear(CSR_SIP, BIT(riscv_pmu_irq_num));
+ ALT_SBI_PMU_OVF_CLEAR_PENDING(riscv_pmu_irq_mask);
/* No overflow bit is set */
if (!overflow)
@@ -791,7 +805,7 @@ static int pmu_sbi_starting_cpu(unsigned int cpu, struct hlist_node *node)
if (riscv_pmu_use_irq) {
cpu_hw_evt->irq = riscv_pmu_irq;
- csr_clear(CSR_IP, BIT(riscv_pmu_irq_num));
+ ALT_SBI_PMU_OVF_CLEAR_PENDING(riscv_pmu_irq_mask);
enable_percpu_irq(riscv_pmu_irq, IRQ_TYPE_NONE);
}
@@ -823,8 +837,14 @@ static int pmu_sbi_setup_irqs(struct riscv_pmu *pmu, struct platform_device *pde
IS_ENABLED(CONFIG_THEAD_CUSTOM_PMU)) {
riscv_pmu_irq_num = THEAD_C9XX_RV_IRQ_PMU;
riscv_pmu_use_irq = true;
+ } else if (riscv_isa_extension_available(NULL, XANDESPMU) &&
+ IS_ENABLED(CONFIG_ANDES_CUSTOM_PMU)) {
+ riscv_pmu_irq_num = ANDES_SLI_CAUSE_BASE + ANDES_RV_IRQ_PMU;
+ riscv_pmu_use_irq = true;
}
+ riscv_pmu_irq_mask = BIT(riscv_pmu_irq_num % BITS_PER_LONG);
+
if (!riscv_pmu_use_irq)
return -EOPNOTSUPP;
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
` (7 preceding siblings ...)
2023-11-22 12:12 ` [PATCH v4 08/13] perf: RISC-V: Introduce Andes PMU for perf event sampling Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-22 21:14 ` Guo Ren
2023-11-23 14:48 ` Conor Dooley
2023-11-22 12:12 ` [PATCH v4 10/13] dt-bindings: riscv: Add Andes " Yu Chien Peter Lin
` (3 subsequent siblings)
12 siblings, 2 replies; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
Document the ISA string for T-Head performance monitor extension
which provides counter overflow interrupt mechanism.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
---
Changes v2 -> v3:
- New patch
Changes v3 -> v4:
- No change
---
Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
index c91ab0e46648..694efaea8fce 100644
--- a/Documentation/devicetree/bindings/riscv/extensions.yaml
+++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
@@ -258,5 +258,11 @@ properties:
in commit 2e5236 ("Ztso is now ratified.") of the
riscv-isa-manual.
+ - const: xtheadpmu
+ description:
+ The T-Head performance monitor extension for counter overflow. For more
+ details, see the chapter 12 in the Xuantie C906 user manual.
+ https://github.com/T-head-Semi/openc906/tree/main/doc
+
additionalProperties: true
...
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 10/13] dt-bindings: riscv: Add Andes PMU extension description
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
` (8 preceding siblings ...)
2023-11-22 12:12 ` [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-24 15:07 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 11/13] riscv: dts: allwinner: Add T-Head PMU extension Yu Chien Peter Lin
` (2 subsequent siblings)
12 siblings, 1 reply; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
Document the ISA string for Andes Technology performance monitor
extension which provides counter overflow interrupt and mode
filtering mechanisms.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
---
Changes v2 -> v3:
- New patch
Changes v3 -> v4:
- Include Conor's Acked-by
---
Documentation/devicetree/bindings/riscv/extensions.yaml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
index 694efaea8fce..4e0066afc848 100644
--- a/Documentation/devicetree/bindings/riscv/extensions.yaml
+++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
@@ -258,6 +258,13 @@ properties:
in commit 2e5236 ("Ztso is now ratified.") of the
riscv-isa-manual.
+ - const: xandespmu
+ description:
+ The Andes Technology performance monitor extension for counter overflow
+ and privilege mode filtering. For more details, see Counter Related
+ Registers in the AX45MP datasheet.
+ https://www.andestech.com/wp-content/uploads/AX45MP-1C-Rev.-5.0.0-Datasheet.pdf
+
- const: xtheadpmu
description:
The T-Head performance monitor extension for counter overflow. For more
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 11/13] riscv: dts: allwinner: Add T-Head PMU extension
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
` (9 preceding siblings ...)
2023-11-22 12:12 ` [PATCH v4 10/13] dt-bindings: riscv: Add Andes " Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-22 21:12 ` Guo Ren
2023-11-23 14:58 ` Conor Dooley
2023-11-22 12:12 ` [PATCH v4 12/13] riscv: dts: renesas: Add Andes " Yu Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 13/13] riscv: andes: Support symbolic FW and HW raw events Yu Chien Peter Lin
12 siblings, 2 replies; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
xtheadpmu stands for T-Head Performance Monitor Unit extension.
Based on the added T-Head PMU ISA string, the SBI PMU driver
will make use of the non-standard irq source.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
---
Changes v2 -> v3:
- New patch
Changes v3 -> v4:
- No change
---
arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi b/arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi
index 64c3c2e6cbe0..7dcba86cfdd0 100644
--- a/arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi
+++ b/arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi
@@ -27,7 +27,7 @@ cpu0: cpu@0 {
riscv,isa = "rv64imafdc";
riscv,isa-base = "rv64i";
riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "zicntr", "zicsr",
- "zifencei", "zihpm";
+ "zifencei", "zihpm", "xtheadpmu";
#cooling-cells = <2>;
cpu0_intc: interrupt-controller {
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 12/13] riscv: dts: renesas: Add Andes PMU extension
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
` (10 preceding siblings ...)
2023-11-22 12:12 ` [PATCH v4 11/13] riscv: dts: allwinner: Add T-Head PMU extension Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-22 16:34 ` Geert Uytterhoeven
2023-11-24 15:07 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 13/13] riscv: andes: Support symbolic FW and HW raw events Yu Chien Peter Lin
12 siblings, 2 replies; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
xandespmu stands for Andes Performance Monitor Unit extension.
Based on the added Andes PMU ISA string, the SBI PMU driver
will make use of the non-standard irq source.
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
---
Changes v1 -> v2:
- New patch
Changes v2 -> v3:
- No change
Changes v3 -> v4:
- No change
---
arch/riscv/boot/dts/renesas/r9a07g043f.dtsi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi b/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
index 78072e80793d..5f2f2181638a 100644
--- a/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
+++ b/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
@@ -26,7 +26,7 @@ cpu0: cpu@0 {
riscv,isa = "rv64imafdc";
riscv,isa-base = "rv64i";
riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "zicntr", "zicsr",
- "zifencei", "zihpm";
+ "zifencei", "zihpm", "xandespmu";
mmu-type = "riscv,sv39";
i-cache-size = <0x8000>;
i-cache-line-size = <0x40>;
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v4 13/13] riscv: andes: Support symbolic FW and HW raw events
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
` (11 preceding siblings ...)
2023-11-22 12:12 ` [PATCH v4 12/13] riscv: dts: renesas: Add Andes " Yu Chien Peter Lin
@ 2023-11-22 12:12 ` Yu Chien Peter Lin
2023-11-24 15:08 ` Lad, Prabhakar
12 siblings, 1 reply; 49+ messages in thread
From: Yu Chien Peter Lin @ 2023-11-22 12:12 UTC (permalink / raw)
To: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterlin, peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt,
samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
From: Locus Wei-Han Chen <locus84@andestech.com>
This patch adds the Andes AX45 JSON files in the perf tool,
allowing perf to be used with symbolic event names.
Signed-off-by: Locus Wei-Han Chen <locus84@andestech.com>
Reviewed-by: Yu Chien Peter Lin <peterlin@andestech.com>
Reviewed-by: Charles Ci-Jyun Wu <dminus@andestech.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
---
Changes v1 -> v2:
- No change
Changes v2 -> v3:
- No change
Changes v3 -> v4:
- No change
---
.../arch/riscv/andes/ax45/firmware.json | 68 ++++++++++
.../arch/riscv/andes/ax45/instructions.json | 127 ++++++++++++++++++
.../arch/riscv/andes/ax45/memory.json | 57 ++++++++
.../arch/riscv/andes/ax45/microarch.json | 77 +++++++++++
tools/perf/pmu-events/arch/riscv/mapfile.csv | 1 +
5 files changed, 330 insertions(+)
create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/firmware.json
create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/instructions.json
create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/memory.json
create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/microarch.json
diff --git a/tools/perf/pmu-events/arch/riscv/andes/ax45/firmware.json b/tools/perf/pmu-events/arch/riscv/andes/ax45/firmware.json
new file mode 100644
index 000000000000..9b4a032186a7
--- /dev/null
+++ b/tools/perf/pmu-events/arch/riscv/andes/ax45/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/andes/ax45/instructions.json b/tools/perf/pmu-events/arch/riscv/andes/ax45/instructions.json
new file mode 100644
index 000000000000..713a08c1a40f
--- /dev/null
+++ b/tools/perf/pmu-events/arch/riscv/andes/ax45/instructions.json
@@ -0,0 +1,127 @@
+[
+ {
+ "EventCode": "0x10",
+ "EventName": "cycle_count",
+ "BriefDescription": "Cycle count"
+ },
+ {
+ "EventCode": "0x20",
+ "EventName": "inst_count",
+ "BriefDescription": "Retired instruction count"
+ },
+ {
+ "EventCode": "0x30",
+ "EventName": "int_load_inst",
+ "BriefDescription": "Integer load instruction count"
+ },
+ {
+ "EventCode": "0x40",
+ "EventName": "int_store_inst",
+ "BriefDescription": "Integer store instruction count"
+ },
+ {
+ "EventCode": "0x50",
+ "EventName": "atomic_inst",
+ "BriefDescription": "Atomic instruction count"
+ },
+ {
+ "EventCode": "0x60",
+ "EventName": "sys_inst",
+ "BriefDescription": "System instruction count"
+ },
+ {
+ "EventCode": "0x70",
+ "EventName": "int_compute_inst",
+ "BriefDescription": "Integer computational instruction count"
+ },
+ {
+ "EventCode": "0x80",
+ "EventName": "condition_br",
+ "BriefDescription": "Conditional branch instruction count"
+ },
+ {
+ "EventCode": "0x90",
+ "EventName": "taken_condition_br",
+ "BriefDescription": "Taken conditional branch instruction count"
+ },
+ {
+ "EventCode": "0xA0",
+ "EventName": "jal_inst",
+ "BriefDescription": "JAL instruction count"
+ },
+ {
+ "EventCode": "0xB0",
+ "EventName": "jalr_inst",
+ "BriefDescription": "JALR instruction count"
+ },
+ {
+ "EventCode": "0xC0",
+ "EventName": "ret_inst",
+ "BriefDescription": "Return instruction count"
+ },
+ {
+ "EventCode": "0xD0",
+ "EventName": "control_trans_inst",
+ "BriefDescription": "Control transfer instruction count"
+ },
+ {
+ "EventCode": "0xE0",
+ "EventName": "ex9_inst",
+ "BriefDescription": "EXEC.IT instruction count"
+ },
+ {
+ "EventCode": "0xF0",
+ "EventName": "int_mul_inst",
+ "BriefDescription": "Integer multiplication instruction count"
+ },
+ {
+ "EventCode": "0x100",
+ "EventName": "int_div_rem_inst",
+ "BriefDescription": "Integer division/remainder instruction count"
+ },
+ {
+ "EventCode": "0x110",
+ "EventName": "float_load_inst",
+ "BriefDescription": "Floating-point load instruction count"
+ },
+ {
+ "EventCode": "0x120",
+ "EventName": "float_store_inst",
+ "BriefDescription": "Floating-point store instruction count"
+ },
+ {
+ "EventCode": "0x130",
+ "EventName": "float_add_sub_inst",
+ "BriefDescription": "Floating-point addition/subtraction instruction count"
+ },
+ {
+ "EventCode": "0x140",
+ "EventName": "float_mul_inst",
+ "BriefDescription": "Floating-point multiplication instruction count"
+ },
+ {
+ "EventCode": "0x150",
+ "EventName": "float_fused_muladd_inst",
+ "BriefDescription": "Floating-point fused multiply-add instruction count"
+ },
+ {
+ "EventCode": "0x160",
+ "EventName": "float_div_sqrt_inst",
+ "BriefDescription": "Floating-point division or square-root instruction count"
+ },
+ {
+ "EventCode": "0x170",
+ "EventName": "other_float_inst",
+ "BriefDescription": "Other floating-point instruction count"
+ },
+ {
+ "EventCode": "0x180",
+ "EventName": "int_mul_add_sub_inst",
+ "BriefDescription": "Integer multiplication and add/sub instruction count"
+ },
+ {
+ "EventCode": "0x190",
+ "EventName": "retired_ops",
+ "BriefDescription": "Retired operation count"
+ }
+]
diff --git a/tools/perf/pmu-events/arch/riscv/andes/ax45/memory.json b/tools/perf/pmu-events/arch/riscv/andes/ax45/memory.json
new file mode 100644
index 000000000000..c7401b526c77
--- /dev/null
+++ b/tools/perf/pmu-events/arch/riscv/andes/ax45/memory.json
@@ -0,0 +1,57 @@
+[
+ {
+ "EventCode": "0x01",
+ "EventName": "ilm_access",
+ "BriefDescription": "ILM access"
+ },
+ {
+ "EventCode": "0x11",
+ "EventName": "dlm_access",
+ "BriefDescription": "DLM access"
+ },
+ {
+ "EventCode": "0x21",
+ "EventName": "icache_access",
+ "BriefDescription": "ICACHE access"
+ },
+ {
+ "EventCode": "0x31",
+ "EventName": "icache_miss",
+ "BriefDescription": "ICACHE miss"
+ },
+ {
+ "EventCode": "0x41",
+ "EventName": "dcache_access",
+ "BriefDescription": "DCACHE access"
+ },
+ {
+ "EventCode": "0x51",
+ "EventName": "dcache_miss",
+ "BriefDescription": "DCACHE miss"
+ },
+ {
+ "EventCode": "0x61",
+ "EventName": "dcache_load_access",
+ "BriefDescription": "DCACHE load access"
+ },
+ {
+ "EventCode": "0x71",
+ "EventName": "dcache_load_miss",
+ "BriefDescription": "DCACHE load miss"
+ },
+ {
+ "EventCode": "0x81",
+ "EventName": "dcache_store_access",
+ "BriefDescription": "DCACHE store access"
+ },
+ {
+ "EventCode": "0x91",
+ "EventName": "dcache_store_miss",
+ "BriefDescription": "DCACHE store miss"
+ },
+ {
+ "EventCode": "0xA1",
+ "EventName": "dcache_wb",
+ "BriefDescription": "DCACHE writeback"
+ }
+]
diff --git a/tools/perf/pmu-events/arch/riscv/andes/ax45/microarch.json b/tools/perf/pmu-events/arch/riscv/andes/ax45/microarch.json
new file mode 100644
index 000000000000..a6d378cbaa74
--- /dev/null
+++ b/tools/perf/pmu-events/arch/riscv/andes/ax45/microarch.json
@@ -0,0 +1,77 @@
+[
+ {
+ "EventCode": "0xB1",
+ "EventName": "cycle_wait_icache_fill",
+ "BriefDescription": "Cycles waiting for ICACHE fill data"
+ },
+ {
+ "EventCode": "0xC1",
+ "EventName": "cycle_wait_dcache_fill",
+ "BriefDescription": "Cycles waiting for DCACHE fill data"
+ },
+ {
+ "EventCode": "0xD1",
+ "EventName": "uncached_ifetch_from_bus",
+ "BriefDescription": "Uncached ifetch data access from bus"
+ },
+ {
+ "EventCode": "0xE1",
+ "EventName": "uncached_load_from_bus",
+ "BriefDescription": "Uncached load data access from bus"
+ },
+ {
+ "EventCode": "0xF1",
+ "EventName": "cycle_wait_uncached_ifetch",
+ "BriefDescription": "Cycles waiting for uncached ifetch data from bus"
+ },
+ {
+ "EventCode": "0x101",
+ "EventName": "cycle_wait_uncached_load",
+ "BriefDescription": "Cycles waiting for uncached load data from bus"
+ },
+ {
+ "EventCode": "0x111",
+ "EventName": "main_itlb_access",
+ "BriefDescription": "Main ITLB access"
+ },
+ {
+ "EventCode": "0x121",
+ "EventName": "main_itlb_miss",
+ "BriefDescription": "Main ITLB miss"
+ },
+ {
+ "EventCode": "0x131",
+ "EventName": "main_dtlb_access",
+ "BriefDescription": "Main DTLB access"
+ },
+ {
+ "EventCode": "0x141",
+ "EventName": "main_dtlb_miss",
+ "BriefDescription": "Main DTLB miss"
+ },
+ {
+ "EventCode": "0x151",
+ "EventName": "cycle_wait_itlb_fill",
+ "BriefDescription": "Cycles waiting for Main ITLB fill data"
+ },
+ {
+ "EventCode": "0x161",
+ "EventName": "pipe_stall_cycle_dtlb_miss",
+ "BriefDescription": "Pipeline stall cycles caused by Main DTLB miss"
+ },
+ {
+ "EventCode": "0x02",
+ "EventName": "mispredict_condition_br",
+ "BriefDescription": "Misprediction of conditional branches"
+ },
+ {
+ "EventCode": "0x12",
+ "EventName": "mispredict_take_condition_br",
+ "BriefDescription": "Misprediction of taken conditional branches"
+ },
+ {
+ "EventCode": "0x22",
+ "EventName": "mispredict_target_ret_inst",
+ "BriefDescription": "Misprediction of targets of Return instructions"
+ }
+]
diff --git a/tools/perf/pmu-events/arch/riscv/mapfile.csv b/tools/perf/pmu-events/arch/riscv/mapfile.csv
index c61b3d6ef616..5bf09af14c1b 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
+0x31e-0x8000000000008a45-0x[[:xdigit:]]+,v1,andes/ax45,core
--
2.34.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* Re: [PATCH v4 12/13] riscv: dts: renesas: Add Andes PMU extension
2023-11-22 12:12 ` [PATCH v4 12/13] riscv: dts: renesas: Add Andes " Yu Chien Peter Lin
@ 2023-11-22 16:34 ` Geert Uytterhoeven
2023-11-24 15:07 ` Lad, Prabhakar
1 sibling, 0 replies; 49+ messages in thread
From: Geert Uytterhoeven @ 2023-11-22 16:34 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang, inochiama
On Wed, Nov 22, 2023 at 1:17 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
> xandespmu stands for Andes Performance Monitor Unit extension.
> Based on the added Andes PMU ISA string, the SBI PMU driver
> will make use of the non-standard irq source.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 05/13] riscv: dts: renesas: r9a07g043f: Update compatible string to use Andes INTC
2023-11-22 12:12 ` [PATCH v4 05/13] riscv: dts: renesas: r9a07g043f: Update compatible string to use Andes INTC Yu Chien Peter Lin
@ 2023-11-22 16:36 ` Geert Uytterhoeven
2023-11-24 15:04 ` Lad, Prabhakar
1 sibling, 0 replies; 49+ messages in thread
From: Geert Uytterhoeven @ 2023-11-22 16:36 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, guoren, heiko, irogers, jernej.skrabec, jolsa,
jszhang, krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
On Wed, Nov 22, 2023 at 1:16 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
> The Andes hart-level interrupt controller (Andes INTC) allows AX45MP
> cores to handle custom local interrupts, such as the performance
> counter overflow interrupt.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 11/13] riscv: dts: allwinner: Add T-Head PMU extension
2023-11-22 12:12 ` [PATCH v4 11/13] riscv: dts: allwinner: Add T-Head PMU extension Yu Chien Peter Lin
@ 2023-11-22 21:12 ` Guo Ren
2023-11-23 14:58 ` Conor Dooley
1 sibling, 0 replies; 49+ messages in thread
From: Guo Ren @ 2023-11-22 21:12 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, heiko, irogers, jernej.skrabec,
jolsa, jszhang, krzysztof.kozlowski+dt, linux-arm-kernel,
linux-kernel, linux-perf-users, linux-renesas-soc, linux-riscv,
linux-sunxi, locus84, magnus.damm, mark.rutland, mingo, n.shubin,
namhyung, palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj,
rdunlap, robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will,
ycliang, inochiama
On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
>
> xtheadpmu stands for T-Head Performance Monitor Unit extension.
> Based on the added T-Head PMU ISA string, the SBI PMU driver
> will make use of the non-standard irq source.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> ---
> Changes v2 -> v3:
> - New patch
> Changes v3 -> v4:
> - No change
> ---
> arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi b/arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi
> index 64c3c2e6cbe0..7dcba86cfdd0 100644
> --- a/arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi
> +++ b/arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi
> @@ -27,7 +27,7 @@ cpu0: cpu@0 {
> riscv,isa = "rv64imafdc";
> riscv,isa-base = "rv64i";
> riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "zicntr", "zicsr",
> - "zifencei", "zihpm";
> + "zifencei", "zihpm", "xtheadpmu";
Reviewed-by: Guo Ren <guoren@kernel.org>
> #cooling-cells = <2>;
>
> cpu0_intc: interrupt-controller {
> --
> 2.34.1
>
--
Best Regards
Guo Ren
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-22 12:12 ` [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description Yu Chien Peter Lin
@ 2023-11-22 21:14 ` Guo Ren
2023-11-29 8:48 ` Yu-Chien Peter Lin
2023-11-23 14:48 ` Conor Dooley
1 sibling, 1 reply; 49+ messages in thread
From: Guo Ren @ 2023-11-22 21:14 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, heiko, irogers, jernej.skrabec,
jolsa, jszhang, krzysztof.kozlowski+dt, linux-arm-kernel,
linux-kernel, linux-perf-users, linux-renesas-soc, linux-riscv,
linux-sunxi, locus84, magnus.damm, mark.rutland, mingo, n.shubin,
namhyung, palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj,
rdunlap, robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will,
ycliang, inochiama
On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
>
> Document the ISA string for T-Head performance monitor extension
> which provides counter overflow interrupt mechanism.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> ---
> Changes v2 -> v3:
> - New patch
> Changes v3 -> v4:
> - No change
> ---
> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> index c91ab0e46648..694efaea8fce 100644
> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> @@ -258,5 +258,11 @@ properties:
> in commit 2e5236 ("Ztso is now ratified.") of the
> riscv-isa-manual.
>
> + - const: xtheadpmu
> + description:
> + The T-Head performance monitor extension for counter overflow. For more
> + details, see the chapter 12 in the Xuantie C906 user manual.
> + https://github.com/T-head-Semi/openc906/tree/main/doc
> +
> additionalProperties: true
> ...
> --
> 2.34.1
>
Reviewed-by: Guo Ren <guoren@kernel.org>
--
Best Regards
Guo Ren
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 07/13] RISC-V: Move T-Head PMU to CPU feature alternative framework
2023-11-22 12:12 ` [PATCH v4 07/13] RISC-V: Move T-Head PMU to CPU feature alternative framework Yu Chien Peter Lin
@ 2023-11-22 21:16 ` Guo Ren
2023-11-23 14:45 ` Conor Dooley
1 sibling, 0 replies; 49+ messages in thread
From: Guo Ren @ 2023-11-22 21:16 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, heiko, irogers, jernej.skrabec,
jolsa, jszhang, krzysztof.kozlowski+dt, linux-arm-kernel,
linux-kernel, linux-perf-users, linux-renesas-soc, linux-riscv,
linux-sunxi, locus84, magnus.damm, mark.rutland, mingo, n.shubin,
namhyung, palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj,
rdunlap, robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will,
ycliang, inochiama
On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
>
> The custom PMU extension aims to support perf event sampling prior
> to the ratification of Sscofpmf. Instead of diverting the bits and
> register reserved for future standard, a set of custom registers is
> added. Hence, we may consider it as a CPU feature rather than an
> erratum.
>
> T-Head cores need to append "xtheadpmu" to the riscv,isa-extensions
> for each cpu node in device tree, and enable CONFIG_THEAD_CUSTOM_PMU
> for proper functioning as of this commit.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> ---
> Hi All,
>
> This is in preparation for introducing other PMU alternative.
> We follow Conor's suggestion [1][2] to use cpu feature alternative
> framework rather than errata, I'm happy to drop the patch if someone
> is willing to take care of this for T-Head's platforms (or sticking
> with CPU errata alternative?)
>
> [1] https://patchwork.kernel.org/project/linux-riscv/patch/20230907021635.1002738-4-peterlin@andestech.com/#25503860
> [2] https://patchwork.kernel.org/project/linux-riscv/patch/20231023004100.2663486-8-peterlin@andestech.com/#25565650
>
> Changes v1 -> v2:
> - New patch
> Changes v2 -> v3:
> - Removed m{vendor/arch/imp}id checks in pmu_sbi_setup_irqs()
> Changes v3 -> v4:
> - No change
> ---
> arch/riscv/Kconfig.errata | 13 -------------
> arch/riscv/errata/thead/errata.c | 19 -------------------
> arch/riscv/include/asm/errata_list.h | 15 +--------------
> arch/riscv/include/asm/hwcap.h | 1 +
> arch/riscv/kernel/cpufeature.c | 1 +
> drivers/perf/Kconfig | 13 +++++++++++++
> drivers/perf/riscv_pmu_sbi.c | 19 ++++++++++++++-----
> 7 files changed, 30 insertions(+), 51 deletions(-)
>
> diff --git a/arch/riscv/Kconfig.errata b/arch/riscv/Kconfig.errata
> index e2c731cfed8c..0d19f47d1018 100644
> --- a/arch/riscv/Kconfig.errata
> +++ b/arch/riscv/Kconfig.errata
> @@ -86,17 +86,4 @@ config ERRATA_THEAD_CMO
>
> If you don't know what to do here, say "Y".
>
> -config ERRATA_THEAD_PMU
> - bool "Apply T-Head PMU errata"
> - depends on ERRATA_THEAD && RISCV_PMU_SBI
> - default y
> - help
> - The T-Head C9xx cores implement a PMU overflow extension very
> - similar to the core SSCOFPMF extension.
> -
> - This will apply the overflow errata to handle the non-standard
> - behaviour via the regular SBI PMU driver and interface.
> -
> - If you don't know what to do here, say "Y".
> -
> endmenu # "CPU errata selection"
> diff --git a/arch/riscv/errata/thead/errata.c b/arch/riscv/errata/thead/errata.c
> index 0554ed4bf087..5de5f7209132 100644
> --- a/arch/riscv/errata/thead/errata.c
> +++ b/arch/riscv/errata/thead/errata.c
> @@ -53,22 +53,6 @@ static bool errata_probe_cmo(unsigned int stage,
> return true;
> }
>
> -static bool errata_probe_pmu(unsigned int stage,
> - unsigned long arch_id, unsigned long impid)
> -{
> - if (!IS_ENABLED(CONFIG_ERRATA_THEAD_PMU))
> - return false;
> -
> - /* target-c9xx cores report arch_id and impid as 0 */
> - if (arch_id != 0 || impid != 0)
> - return false;
> -
> - if (stage == RISCV_ALTERNATIVES_EARLY_BOOT)
> - return false;
> -
> - return true;
> -}
> -
> static u32 thead_errata_probe(unsigned int stage,
> unsigned long archid, unsigned long impid)
> {
> @@ -80,9 +64,6 @@ static u32 thead_errata_probe(unsigned int stage,
> if (errata_probe_cmo(stage, archid, impid))
> cpu_req_errata |= BIT(ERRATA_THEAD_CMO);
>
> - if (errata_probe_pmu(stage, archid, impid))
> - cpu_req_errata |= BIT(ERRATA_THEAD_PMU);
> -
> return cpu_req_errata;
> }
>
> diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h
> index 4ed21a62158c..9bccc2ba0eb5 100644
> --- a/arch/riscv/include/asm/errata_list.h
> +++ b/arch/riscv/include/asm/errata_list.h
> @@ -25,8 +25,7 @@
> #ifdef CONFIG_ERRATA_THEAD
> #define ERRATA_THEAD_PBMT 0
> #define ERRATA_THEAD_CMO 1
> -#define ERRATA_THEAD_PMU 2
> -#define ERRATA_THEAD_NUMBER 3
> +#define ERRATA_THEAD_NUMBER 2
> #endif
>
> #ifdef __ASSEMBLY__
> @@ -147,18 +146,6 @@ asm volatile(ALTERNATIVE_2( \
> "r"((unsigned long)(_start) + (_size)) \
> : "a0")
>
> -#define THEAD_C9XX_RV_IRQ_PMU 17
> -#define THEAD_C9XX_CSR_SCOUNTEROF 0x5c5
> -
> -#define ALT_SBI_PMU_OVERFLOW(__ovl) \
> -asm volatile(ALTERNATIVE( \
> - "csrr %0, " __stringify(CSR_SSCOUNTOVF), \
> - "csrr %0, " __stringify(THEAD_C9XX_CSR_SCOUNTEROF), \
> - THEAD_VENDOR_ID, ERRATA_THEAD_PMU, \
> - CONFIG_ERRATA_THEAD_PMU) \
> - : "=r" (__ovl) : \
> - : "memory")
> -
> #endif /* __ASSEMBLY__ */
>
> #endif
> diff --git a/arch/riscv/include/asm/hwcap.h b/arch/riscv/include/asm/hwcap.h
> index 06d30526ef3b..c85ee34c78d9 100644
> --- a/arch/riscv/include/asm/hwcap.h
> +++ b/arch/riscv/include/asm/hwcap.h
> @@ -57,6 +57,7 @@
> #define RISCV_ISA_EXT_ZIHPM 42
> #define RISCV_ISA_EXT_SMSTATEEN 43
> #define RISCV_ISA_EXT_ZICOND 44
> +#define RISCV_ISA_EXT_XTHEADPMU 45
>
> #define RISCV_ISA_EXT_MAX 64
>
> diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
> index b3785ffc1570..e606f588d366 100644
> --- a/arch/riscv/kernel/cpufeature.c
> +++ b/arch/riscv/kernel/cpufeature.c
> @@ -185,6 +185,7 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
> __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL),
> __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT),
> __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT),
> + __RISCV_ISA_EXT_DATA(xtheadpmu, RISCV_ISA_EXT_XTHEADPMU),
> };
>
> const size_t riscv_isa_ext_count = ARRAY_SIZE(riscv_isa_ext);
> diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig
> index 273d67ecf6d2..c71b6f16bdfa 100644
> --- a/drivers/perf/Kconfig
> +++ b/drivers/perf/Kconfig
> @@ -86,6 +86,19 @@ config RISCV_PMU_SBI
> full perf feature support i.e. counter overflow, privilege mode
> filtering, counter configuration.
>
> +config THEAD_CUSTOM_PMU
> + bool "T-Head custom PMU support"
> + depends on RISCV_ALTERNATIVE && RISCV_PMU_SBI
> + default y
> + help
> + The T-Head C9xx cores implement a PMU overflow extension very
> + similar to the core SSCOFPMF extension.
> +
> + This will patch the overflow CSR and handle the non-standard
> + behaviour via the regular SBI PMU driver and interface.
> +
> + If you don't know what to do here, say "Y".
> +
> config ARM_PMU_ACPI
> depends on ARM_PMU && ACPI
> def_bool y
> diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c
> index 2edbc37abadf..31ca79846399 100644
> --- a/drivers/perf/riscv_pmu_sbi.c
> +++ b/drivers/perf/riscv_pmu_sbi.c
> @@ -20,10 +20,21 @@
> #include <linux/cpu_pm.h>
> #include <linux/sched/clock.h>
>
> -#include <asm/errata_list.h>
> #include <asm/sbi.h>
> #include <asm/cpufeature.h>
>
> +#define THEAD_C9XX_RV_IRQ_PMU 17
> +#define THEAD_C9XX_CSR_SCOUNTEROF 0x5c5
> +
> +#define ALT_SBI_PMU_OVERFLOW(__ovl) \
> +asm volatile(ALTERNATIVE( \
> + "csrr %0, " __stringify(CSR_SSCOUNTOVF), \
> + "csrr %0, " __stringify(THEAD_C9XX_CSR_SCOUNTEROF), \
> + 0, RISCV_ISA_EXT_XTHEADPMU, \
> + CONFIG_THEAD_CUSTOM_PMU) \
> + : "=r" (__ovl) : \
> + : "memory")
> +
> #define SYSCTL_NO_USER_ACCESS 0
> #define SYSCTL_USER_ACCESS 1
> #define SYSCTL_LEGACY 2
> @@ -808,10 +819,8 @@ static int pmu_sbi_setup_irqs(struct riscv_pmu *pmu, struct platform_device *pde
> if (riscv_isa_extension_available(NULL, SSCOFPMF)) {
> riscv_pmu_irq_num = RV_IRQ_PMU;
> riscv_pmu_use_irq = true;
> - } else if (IS_ENABLED(CONFIG_ERRATA_THEAD_PMU) &&
> - riscv_cached_mvendorid(0) == THEAD_VENDOR_ID &&
> - riscv_cached_marchid(0) == 0 &&
> - riscv_cached_mimpid(0) == 0) {
> + } else if (riscv_isa_extension_available(NULL, XTHEADPMU) &&
> + IS_ENABLED(CONFIG_THEAD_CUSTOM_PMU)) {
> riscv_pmu_irq_num = THEAD_C9XX_RV_IRQ_PMU;
> riscv_pmu_use_irq = true;
> }
> --
> 2.34.1
>
Reviewed-by: Guo Ren <guoren@kernel.org>
--
Best Regards
Guo Ren
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 04/13] dt-bindings: riscv: Add Andes interrupt controller compatible string
2023-11-22 12:12 ` [PATCH v4 04/13] dt-bindings: riscv: Add Andes interrupt controller compatible string Yu Chien Peter Lin
@ 2023-11-23 14:38 ` Conor Dooley
2023-11-24 15:03 ` Lad, Prabhakar
1 sibling, 0 replies; 49+ messages in thread
From: Conor Dooley @ 2023-11-23 14:38 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor, devicetree, dminus, evan,
geert+renesas, guoren, heiko, irogers, jernej.skrabec, jolsa,
jszhang, krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
[-- Attachment #1: Type: text/plain, Size: 1681 bytes --]
On Wed, Nov 22, 2023 at 08:12:26PM +0800, Yu Chien Peter Lin wrote:
> Add "andestech,cpu-intc" compatible string to indicate that
> Andes specific local interrupt is supported on the core,
> e.g. AX45MP cores have 3 types of non-standard local interrupt
> can be handled in supervisor mode:
>
> - Slave port ECC error interrupt
> - Bus write transaction error interrupt
> - Performance monitor overflow interrupt
>
> These interrupts are enabled/disabled via a custom register
> SLIE instead of the standard interrupt enable register SIE.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Cheers,
Conor.
> ---
> Changes v1 -> v2:
> - New patch
> Changes v2 -> v3:
> - Updated commit message
> - Fixed possible compatibles for Andes INTC
> Changes v3 -> v4:
> - Add const entry instead of enum (Suggested by Conor)
> ---
> Documentation/devicetree/bindings/riscv/cpus.yaml | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/riscv/cpus.yaml b/Documentation/devicetree/bindings/riscv/cpus.yaml
> index f392e367d673..50307554478f 100644
> --- a/Documentation/devicetree/bindings/riscv/cpus.yaml
> +++ b/Documentation/devicetree/bindings/riscv/cpus.yaml
> @@ -100,7 +100,11 @@ properties:
> const: 1
>
> compatible:
> - const: riscv,cpu-intc
> + oneOf:
> + - items:
> + - const: andestech,cpu-intc
> + - const: riscv,cpu-intc
> + - const: riscv,cpu-intc
>
> interrupt-controller: true
>
> --
> 2.34.1
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 07/13] RISC-V: Move T-Head PMU to CPU feature alternative framework
2023-11-22 12:12 ` [PATCH v4 07/13] RISC-V: Move T-Head PMU to CPU feature alternative framework Yu Chien Peter Lin
2023-11-22 21:16 ` Guo Ren
@ 2023-11-23 14:45 ` Conor Dooley
1 sibling, 0 replies; 49+ messages in thread
From: Conor Dooley @ 2023-11-23 14:45 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor, devicetree, dminus, evan,
geert+renesas, guoren, heiko, irogers, jernej.skrabec, jolsa,
jszhang, krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
[-- Attachment #1: Type: text/plain, Size: 646 bytes --]
> drivers/perf/riscv_pmu_sbi.c | 19 ++++++++++++++-----
> +config THEAD_CUSTOM_PMU
> + bool "T-Head custom PMU support"
> + depends on RISCV_ALTERNATIVE && RISCV_PMU_SBI
> + default y
> + help
> + The T-Head C9xx cores implement a PMU overflow extension very
> + similar to the core SSCOFPMF extension.
> +
> + This will patch the overflow CSR and handle the non-standard
> + behaviour via the regular SBI PMU driver and interface.
> +
> + If you don't know what to do here, say "Y".
This is a < 20 line diff to the pmu driver, is it really worth adding
having config options for these two non standard PMU implementations?
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-22 12:12 ` [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description Yu Chien Peter Lin
2023-11-22 21:14 ` Guo Ren
@ 2023-11-23 14:48 ` Conor Dooley
2023-11-29 8:47 ` Yu-Chien Peter Lin
1 sibling, 1 reply; 49+ messages in thread
From: Conor Dooley @ 2023-11-23 14:48 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor, devicetree, dminus, evan,
geert+renesas, guoren, heiko, irogers, jernej.skrabec, jolsa,
jszhang, krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
[-- Attachment #1: Type: text/plain, Size: 1332 bytes --]
On Wed, Nov 22, 2023 at 08:12:31PM +0800, Yu Chien Peter Lin wrote:
> Document the ISA string for T-Head performance monitor extension
> which provides counter overflow interrupt mechanism.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> ---
> Changes v2 -> v3:
> - New patch
> Changes v3 -> v4:
> - No change
> ---
> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> index c91ab0e46648..694efaea8fce 100644
> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> @@ -258,5 +258,11 @@ properties:
> in commit 2e5236 ("Ztso is now ratified.") of the
> riscv-isa-manual.
>
> + - const: xtheadpmu
> + description:
> + The T-Head performance monitor extension for counter overflow. For more
> + details, see the chapter 12 in the Xuantie C906 user manual.
> + https://github.com/T-head-Semi/openc906/tree/main/doc
I'm pretty sure that I asked on the previous revision for you to
identify a specific revision of this document.
Cheers,
Conor.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 11/13] riscv: dts: allwinner: Add T-Head PMU extension
2023-11-22 12:12 ` [PATCH v4 11/13] riscv: dts: allwinner: Add T-Head PMU extension Yu Chien Peter Lin
2023-11-22 21:12 ` Guo Ren
@ 2023-11-23 14:58 ` Conor Dooley
2023-11-29 9:34 ` Yu-Chien Peter Lin
1 sibling, 1 reply; 49+ messages in thread
From: Conor Dooley @ 2023-11-23 14:58 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor, devicetree, dminus, evan,
geert+renesas, guoren, heiko, irogers, jernej.skrabec, jolsa,
jszhang, krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
[-- Attachment #1: Type: text/plain, Size: 660 bytes --]
On Wed, Nov 22, 2023 at 08:12:33PM +0800, Yu Chien Peter Lin wrote:
> xtheadpmu stands for T-Head Performance Monitor Unit extension.
> Based on the added T-Head PMU ISA string, the SBI PMU driver
> will make use of the non-standard irq source.
Allwinner aren't the only ones using T-Head CPUs that the previous
m*id pmu detection code would have matched on. I think the first three
files below will also need to be updated:
rg -l "thead,c[0-9]*\b[^-]" arch/riscv/boot/dts/
arch/riscv/boot/dts/sophgo/sg2042-cpus.dtsi
arch/riscv/boot/dts/sophgo/cv1800b.dtsi
arch/riscv/boot/dts/thead/th1520.dtsi
arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi
Cheers,
Conor.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 01/13] riscv: errata: Rename defines for Andes
2023-11-22 12:12 ` [PATCH v4 01/13] riscv: errata: Rename defines for Andes Yu Chien Peter Lin
@ 2023-11-24 14:57 ` Lad, Prabhakar
0 siblings, 0 replies; 49+ messages in thread
From: Lad, Prabhakar @ 2023-11-24 14:57 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang, inochiama
On Wed, Nov 22, 2023 at 12:18 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
>
> Using "ANDES" rather than "ANDESTECH" to unify the naming
> convention with directory, file names, Kconfig options
> and other definitions.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> Reviewed-by: Charles Ci-Jyun Wu <dminus@andestech.com>
> Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
> Acked-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> Changes v1 -> v2:
> - No change
> Changes v2 -> v3:
> - Rewrote commit message (suggested by Conor)
> Changes v3 -> v4:
> - Include Conor's Acked-by tag
> ---
> arch/riscv/errata/andes/errata.c | 10 +++++-----
> arch/riscv/include/asm/errata_list.h | 4 ++--
> arch/riscv/include/asm/vendorid_list.h | 2 +-
> arch/riscv/kernel/alternative.c | 2 +-
> 4 files changed, 9 insertions(+), 9 deletions(-)
>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cheers,
Prabhakar
> diff --git a/arch/riscv/errata/andes/errata.c b/arch/riscv/errata/andes/errata.c
> index 197db68cc8da..d2e1abcac967 100644
> --- a/arch/riscv/errata/andes/errata.c
> +++ b/arch/riscv/errata/andes/errata.c
> @@ -18,9 +18,9 @@
> #include <asm/sbi.h>
> #include <asm/vendorid_list.h>
>
> -#define ANDESTECH_AX45MP_MARCHID 0x8000000000008a45UL
> -#define ANDESTECH_AX45MP_MIMPID 0x500UL
> -#define ANDESTECH_SBI_EXT_ANDES 0x0900031E
> +#define ANDES_AX45MP_MARCHID 0x8000000000008a45UL
> +#define ANDES_AX45MP_MIMPID 0x500UL
> +#define ANDES_SBI_EXT_ANDES 0x0900031E
>
> #define ANDES_SBI_EXT_IOCP_SW_WORKAROUND 1
>
> @@ -32,7 +32,7 @@ static long ax45mp_iocp_sw_workaround(void)
> * ANDES_SBI_EXT_IOCP_SW_WORKAROUND SBI EXT checks if the IOCP is missing and
> * cache is controllable only then CMO will be applied to the platform.
> */
> - ret = sbi_ecall(ANDESTECH_SBI_EXT_ANDES, ANDES_SBI_EXT_IOCP_SW_WORKAROUND,
> + ret = sbi_ecall(ANDES_SBI_EXT_ANDES, ANDES_SBI_EXT_IOCP_SW_WORKAROUND,
> 0, 0, 0, 0, 0, 0);
>
> return ret.error ? 0 : ret.value;
> @@ -43,7 +43,7 @@ static bool errata_probe_iocp(unsigned int stage, unsigned long arch_id, unsigne
> if (!IS_ENABLED(CONFIG_ERRATA_ANDES_CMO))
> return false;
>
> - if (arch_id != ANDESTECH_AX45MP_MARCHID || impid != ANDESTECH_AX45MP_MIMPID)
> + if (arch_id != ANDES_AX45MP_MARCHID || impid != ANDES_AX45MP_MIMPID)
> return false;
>
> if (!ax45mp_iocp_sw_workaround())
> diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h
> index 83ed25e43553..4ed21a62158c 100644
> --- a/arch/riscv/include/asm/errata_list.h
> +++ b/arch/riscv/include/asm/errata_list.h
> @@ -12,8 +12,8 @@
> #include <asm/vendorid_list.h>
>
> #ifdef CONFIG_ERRATA_ANDES
> -#define ERRATA_ANDESTECH_NO_IOCP 0
> -#define ERRATA_ANDESTECH_NUMBER 1
> +#define ERRATA_ANDES_NO_IOCP 0
> +#define ERRATA_ANDES_NUMBER 1
> #endif
>
> #ifdef CONFIG_ERRATA_SIFIVE
> diff --git a/arch/riscv/include/asm/vendorid_list.h b/arch/riscv/include/asm/vendorid_list.h
> index e55407ace0c3..2f2bb0c84f9a 100644
> --- a/arch/riscv/include/asm/vendorid_list.h
> +++ b/arch/riscv/include/asm/vendorid_list.h
> @@ -5,7 +5,7 @@
> #ifndef ASM_VENDOR_LIST_H
> #define ASM_VENDOR_LIST_H
>
> -#define ANDESTECH_VENDOR_ID 0x31e
> +#define ANDES_VENDOR_ID 0x31e
> #define SIFIVE_VENDOR_ID 0x489
> #define THEAD_VENDOR_ID 0x5b7
>
> diff --git a/arch/riscv/kernel/alternative.c b/arch/riscv/kernel/alternative.c
> index 319a1da0358b..0128b161bfda 100644
> --- a/arch/riscv/kernel/alternative.c
> +++ b/arch/riscv/kernel/alternative.c
> @@ -43,7 +43,7 @@ static void riscv_fill_cpu_mfr_info(struct cpu_manufacturer_info_t *cpu_mfr_info
>
> switch (cpu_mfr_info->vendor_id) {
> #ifdef CONFIG_ERRATA_ANDES
> - case ANDESTECH_VENDOR_ID:
> + case ANDES_VENDOR_ID:
> cpu_mfr_info->patch_func = andes_errata_patch_func;
> break;
> #endif
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 04/13] dt-bindings: riscv: Add Andes interrupt controller compatible string
2023-11-22 12:12 ` [PATCH v4 04/13] dt-bindings: riscv: Add Andes interrupt controller compatible string Yu Chien Peter Lin
2023-11-23 14:38 ` Conor Dooley
@ 2023-11-24 15:03 ` Lad, Prabhakar
2023-11-24 15:05 ` Conor Dooley
2023-11-29 6:43 ` Yu-Chien Peter Lin
1 sibling, 2 replies; 49+ messages in thread
From: Lad, Prabhakar @ 2023-11-24 15:03 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang, inochiama
On Wed, Nov 22, 2023 at 12:18 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
>
> Add "andestech,cpu-intc" compatible string to indicate that
> Andes specific local interrupt is supported on the core,
> e.g. AX45MP cores have 3 types of non-standard local interrupt
> can be handled in supervisor mode:
>
> - Slave port ECC error interrupt
> - Bus write transaction error interrupt
> - Performance monitor overflow interrupt
>
> These interrupts are enabled/disabled via a custom register
> SLIE instead of the standard interrupt enable register SIE.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> ---
> Changes v1 -> v2:
> - New patch
> Changes v2 -> v3:
> - Updated commit message
> - Fixed possible compatibles for Andes INTC
> Changes v3 -> v4:
> - Add const entry instead of enum (Suggested by Conor)
> ---
> Documentation/devicetree/bindings/riscv/cpus.yaml | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/riscv/cpus.yaml b/Documentation/devicetree/bindings/riscv/cpus.yaml
> index f392e367d673..50307554478f 100644
> --- a/Documentation/devicetree/bindings/riscv/cpus.yaml
> +++ b/Documentation/devicetree/bindings/riscv/cpus.yaml
> @@ -100,7 +100,11 @@ properties:
> const: 1
>
> compatible:
> - const: riscv,cpu-intc
> + oneOf:
> + - items:
> + - const: andestech,cpu-intc
given that the first patch renames andestech -> andes, do you want to
follow the same here?
> + - const: riscv,cpu-intc
> + - const: riscv,cpu-intc
>
> interrupt-controller: true
>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cheers,
Prabhakar
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 05/13] riscv: dts: renesas: r9a07g043f: Update compatible string to use Andes INTC
2023-11-22 12:12 ` [PATCH v4 05/13] riscv: dts: renesas: r9a07g043f: Update compatible string to use Andes INTC Yu Chien Peter Lin
2023-11-22 16:36 ` Geert Uytterhoeven
@ 2023-11-24 15:04 ` Lad, Prabhakar
1 sibling, 0 replies; 49+ messages in thread
From: Lad, Prabhakar @ 2023-11-24 15:04 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang, inochiama
On Wed, Nov 22, 2023 at 12:18 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
>
> The Andes hart-level interrupt controller (Andes INTC) allows AX45MP
> cores to handle custom local interrupts, such as the performance
> counter overflow interrupt.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> ---
> Changes v1 -> v2:
> - New patch
> Changes v2 -> v3:
> - Fixed possible compatibles for Andes INTC
> Changes v3 -> v4:
> - No change
> ---
> arch/riscv/boot/dts/renesas/r9a07g043f.dtsi | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cheers,
Prabhakar
> diff --git a/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi b/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
> index eb301d8eb2b0..78072e80793d 100644
> --- a/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
> +++ b/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
> @@ -38,7 +38,7 @@ cpu0: cpu@0 {
>
> cpu0_intc: interrupt-controller {
> #interrupt-cells = <1>;
> - compatible = "riscv,cpu-intc";
> + compatible = "andestech,cpu-intc", "riscv,cpu-intc";
> interrupt-controller;
> };
> };
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 04/13] dt-bindings: riscv: Add Andes interrupt controller compatible string
2023-11-24 15:03 ` Lad, Prabhakar
@ 2023-11-24 15:05 ` Conor Dooley
2023-11-29 6:43 ` Yu-Chien Peter Lin
1 sibling, 0 replies; 49+ messages in thread
From: Conor Dooley @ 2023-11-24 15:05 UTC (permalink / raw)
To: Lad, Prabhakar
Cc: Yu Chien Peter Lin, acme, adrian.hunter, ajones,
alexander.shishkin, andre.przywara, anup, aou, atishp, conor+dt,
conor.dooley, devicetree, dminus, evan, geert+renesas, guoren,
heiko, irogers, jernej.skrabec, jolsa, jszhang,
krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
[-- Attachment #1: Type: text/plain, Size: 1774 bytes --]
On Fri, Nov 24, 2023 at 03:03:51PM +0000, Lad, Prabhakar wrote:
> On Wed, Nov 22, 2023 at 12:18 PM Yu Chien Peter Lin
> <peterlin@andestech.com> wrote:
> >
> > Add "andestech,cpu-intc" compatible string to indicate that
> > Andes specific local interrupt is supported on the core,
> > e.g. AX45MP cores have 3 types of non-standard local interrupt
> > can be handled in supervisor mode:
> >
> > - Slave port ECC error interrupt
> > - Bus write transaction error interrupt
> > - Performance monitor overflow interrupt
> >
> > These interrupts are enabled/disabled via a custom register
> > SLIE instead of the standard interrupt enable register SIE.
> >
> > Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> > ---
> > Changes v1 -> v2:
> > - New patch
> > Changes v2 -> v3:
> > - Updated commit message
> > - Fixed possible compatibles for Andes INTC
> > Changes v3 -> v4:
> > - Add const entry instead of enum (Suggested by Conor)
> > ---
> > Documentation/devicetree/bindings/riscv/cpus.yaml | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/Documentation/devicetree/bindings/riscv/cpus.yaml b/Documentation/devicetree/bindings/riscv/cpus.yaml
> > index f392e367d673..50307554478f 100644
> > --- a/Documentation/devicetree/bindings/riscv/cpus.yaml
> > +++ b/Documentation/devicetree/bindings/riscv/cpus.yaml
> > @@ -100,7 +100,11 @@ properties:
> > const: 1
> >
> > compatible:
> > - const: riscv,cpu-intc
> > + oneOf:
> > + - items:
> > + - const: andestech,cpu-intc
> given that the first patch renames andestech -> andes, do you want to
> follow the same here?
No, that's their vendor prefix, they're stuck with it.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 08/13] perf: RISC-V: Introduce Andes PMU for perf event sampling
2023-11-22 12:12 ` [PATCH v4 08/13] perf: RISC-V: Introduce Andes PMU for perf event sampling Yu Chien Peter Lin
@ 2023-11-24 15:06 ` Lad, Prabhakar
0 siblings, 0 replies; 49+ messages in thread
From: Lad, Prabhakar @ 2023-11-24 15:06 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang, inochiama
On Wed, Nov 22, 2023 at 12:18 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
>
> The Andes PMU extension provides the same mechanism as Sscofpmf,
> allowing us to reuse the SBI PMU driver to support event sampling
> and mode filtering.
>
> To make use of this custom PMU extension, "xandespmu" needs
> to be appended to the riscv,isa-extensions for each cpu node
> in device-tree, and enable CONFIG_ANDES_CUSTOM_PMU.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> Reviewed-by: Charles Ci-Jyun Wu <dminus@andestech.com>
> Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
> Co-developed-by: Locus Wei-Han Chen <locus84@andestech.com>
> Signed-off-by: Locus Wei-Han Chen <locus84@andestech.com>
> ---
> Changes v1 -> v2:
> - New patch
> Changes v2 -> v3:
> - Reordered list in riscv_isa_ext[]
> - Removed mvendorid check in pmu_sbi_setup_irqs()
> Changes v3 -> v4:
> - No change
> ---
> arch/riscv/include/asm/hwcap.h | 1 +
> arch/riscv/kernel/cpufeature.c | 1 +
> drivers/perf/Kconfig | 14 ++++++++++++++
> drivers/perf/riscv_pmu_sbi.c | 30 +++++++++++++++++++++++++-----
> 4 files changed, 41 insertions(+), 5 deletions(-)
>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cheers,
Prabhakar
> diff --git a/arch/riscv/include/asm/hwcap.h b/arch/riscv/include/asm/hwcap.h
> index c85ee34c78d9..cbfbc3505d2c 100644
> --- a/arch/riscv/include/asm/hwcap.h
> +++ b/arch/riscv/include/asm/hwcap.h
> @@ -58,6 +58,7 @@
> #define RISCV_ISA_EXT_SMSTATEEN 43
> #define RISCV_ISA_EXT_ZICOND 44
> #define RISCV_ISA_EXT_XTHEADPMU 45
> +#define RISCV_ISA_EXT_XANDESPMU 46
>
> #define RISCV_ISA_EXT_MAX 64
>
> diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
> index e606f588d366..42fda134c4a3 100644
> --- a/arch/riscv/kernel/cpufeature.c
> +++ b/arch/riscv/kernel/cpufeature.c
> @@ -185,6 +185,7 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
> __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL),
> __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT),
> __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT),
> + __RISCV_ISA_EXT_DATA(xandespmu, RISCV_ISA_EXT_XANDESPMU),
> __RISCV_ISA_EXT_DATA(xtheadpmu, RISCV_ISA_EXT_XTHEADPMU),
> };
>
> diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig
> index c71b6f16bdfa..c1a490829d15 100644
> --- a/drivers/perf/Kconfig
> +++ b/drivers/perf/Kconfig
> @@ -86,6 +86,20 @@ config RISCV_PMU_SBI
> full perf feature support i.e. counter overflow, privilege mode
> filtering, counter configuration.
>
> +config ANDES_CUSTOM_PMU
> + bool "Andes custom PMU support"
> + depends on RISCV_ALTERNATIVE && RISCV_PMU_SBI
> + default y
> + help
> + The Andes cores implement a PMU overflow extension very
> + similar to the core SSCOFPMF extension.
> +
> + This will patch the overflow/pending CSR and handle the
> + non-standard behaviour via the regular SBI PMU driver and
> + interface.
> +
> + If you don't know what to do here, say "Y".
> +
> config THEAD_CUSTOM_PMU
> bool "T-Head custom PMU support"
> depends on RISCV_ALTERNATIVE && RISCV_PMU_SBI
> diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c
> index 31ca79846399..1e0c709efbfc 100644
> --- a/drivers/perf/riscv_pmu_sbi.c
> +++ b/drivers/perf/riscv_pmu_sbi.c
> @@ -19,6 +19,7 @@
> #include <linux/of.h>
> #include <linux/cpu_pm.h>
> #include <linux/sched/clock.h>
> +#include <linux/soc/andes/irq.h>
>
> #include <asm/sbi.h>
> #include <asm/cpufeature.h>
> @@ -27,14 +28,26 @@
> #define THEAD_C9XX_CSR_SCOUNTEROF 0x5c5
>
> #define ALT_SBI_PMU_OVERFLOW(__ovl) \
> -asm volatile(ALTERNATIVE( \
> +asm volatile(ALTERNATIVE_2( \
> "csrr %0, " __stringify(CSR_SSCOUNTOVF), \
> "csrr %0, " __stringify(THEAD_C9XX_CSR_SCOUNTEROF), \
> 0, RISCV_ISA_EXT_XTHEADPMU, \
> - CONFIG_THEAD_CUSTOM_PMU) \
> + CONFIG_THEAD_CUSTOM_PMU, \
> + "csrr %0, " __stringify(ANDES_CSR_SCOUNTEROF), \
> + 0, RISCV_ISA_EXT_XANDESPMU, \
> + CONFIG_ANDES_CUSTOM_PMU) \
> : "=r" (__ovl) : \
> : "memory")
>
> +#define ALT_SBI_PMU_OVF_CLEAR_PENDING(__irq_mask) \
> +asm volatile(ALTERNATIVE( \
> + "csrc " __stringify(CSR_IP) ", %0\n\t", \
> + "csrc " __stringify(ANDES_CSR_SLIP) ", %0\n\t", \
> + 0, RISCV_ISA_EXT_XANDESPMU, \
> + CONFIG_ANDES_CUSTOM_PMU) \
> + : : "r"(__irq_mask) \
> + : "memory")
> +
> #define SYSCTL_NO_USER_ACCESS 0
> #define SYSCTL_USER_ACCESS 1
> #define SYSCTL_LEGACY 2
> @@ -72,6 +85,7 @@ static int sysctl_perf_user_access __read_mostly = SYSCTL_USER_ACCESS;
> static union sbi_pmu_ctr_info *pmu_ctr_list;
> static bool riscv_pmu_use_irq;
> static unsigned int riscv_pmu_irq_num;
> +static unsigned int riscv_pmu_irq_mask;
> static unsigned int riscv_pmu_irq;
>
> /* Cache the available counters in a bitmask */
> @@ -705,7 +719,7 @@ static irqreturn_t pmu_sbi_ovf_handler(int irq, void *dev)
>
> event = cpu_hw_evt->events[fidx];
> if (!event) {
> - csr_clear(CSR_SIP, BIT(riscv_pmu_irq_num));
> + ALT_SBI_PMU_OVF_CLEAR_PENDING(riscv_pmu_irq_mask);
> return IRQ_NONE;
> }
>
> @@ -719,7 +733,7 @@ static irqreturn_t pmu_sbi_ovf_handler(int irq, void *dev)
> * Overflow interrupt pending bit should only be cleared after stopping
> * all the counters to avoid any race condition.
> */
> - csr_clear(CSR_SIP, BIT(riscv_pmu_irq_num));
> + ALT_SBI_PMU_OVF_CLEAR_PENDING(riscv_pmu_irq_mask);
>
> /* No overflow bit is set */
> if (!overflow)
> @@ -791,7 +805,7 @@ static int pmu_sbi_starting_cpu(unsigned int cpu, struct hlist_node *node)
>
> if (riscv_pmu_use_irq) {
> cpu_hw_evt->irq = riscv_pmu_irq;
> - csr_clear(CSR_IP, BIT(riscv_pmu_irq_num));
> + ALT_SBI_PMU_OVF_CLEAR_PENDING(riscv_pmu_irq_mask);
> enable_percpu_irq(riscv_pmu_irq, IRQ_TYPE_NONE);
> }
>
> @@ -823,8 +837,14 @@ static int pmu_sbi_setup_irqs(struct riscv_pmu *pmu, struct platform_device *pde
> IS_ENABLED(CONFIG_THEAD_CUSTOM_PMU)) {
> riscv_pmu_irq_num = THEAD_C9XX_RV_IRQ_PMU;
> riscv_pmu_use_irq = true;
> + } else if (riscv_isa_extension_available(NULL, XANDESPMU) &&
> + IS_ENABLED(CONFIG_ANDES_CUSTOM_PMU)) {
> + riscv_pmu_irq_num = ANDES_SLI_CAUSE_BASE + ANDES_RV_IRQ_PMU;
> + riscv_pmu_use_irq = true;
> }
>
> + riscv_pmu_irq_mask = BIT(riscv_pmu_irq_num % BITS_PER_LONG);
> +
> if (!riscv_pmu_use_irq)
> return -EOPNOTSUPP;
>
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 10/13] dt-bindings: riscv: Add Andes PMU extension description
2023-11-22 12:12 ` [PATCH v4 10/13] dt-bindings: riscv: Add Andes " Yu Chien Peter Lin
@ 2023-11-24 15:07 ` Lad, Prabhakar
0 siblings, 0 replies; 49+ messages in thread
From: Lad, Prabhakar @ 2023-11-24 15:07 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang, inochiama
On Wed, Nov 22, 2023 at 12:18 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
>
> Document the ISA string for Andes Technology performance monitor
> extension which provides counter overflow interrupt and mode
> filtering mechanisms.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> Acked-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> Changes v2 -> v3:
> - New patch
> Changes v3 -> v4:
> - Include Conor's Acked-by
> ---
> Documentation/devicetree/bindings/riscv/extensions.yaml | 7 +++++++
> 1 file changed, 7 insertions(+)
>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cheers,
Prabhakar
> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> index 694efaea8fce..4e0066afc848 100644
> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> @@ -258,6 +258,13 @@ properties:
> in commit 2e5236 ("Ztso is now ratified.") of the
> riscv-isa-manual.
>
> + - const: xandespmu
> + description:
> + The Andes Technology performance monitor extension for counter overflow
> + and privilege mode filtering. For more details, see Counter Related
> + Registers in the AX45MP datasheet.
> + https://www.andestech.com/wp-content/uploads/AX45MP-1C-Rev.-5.0.0-Datasheet.pdf
> +
> - const: xtheadpmu
> description:
> The T-Head performance monitor extension for counter overflow. For more
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 12/13] riscv: dts: renesas: Add Andes PMU extension
2023-11-22 12:12 ` [PATCH v4 12/13] riscv: dts: renesas: Add Andes " Yu Chien Peter Lin
2023-11-22 16:34 ` Geert Uytterhoeven
@ 2023-11-24 15:07 ` Lad, Prabhakar
1 sibling, 0 replies; 49+ messages in thread
From: Lad, Prabhakar @ 2023-11-24 15:07 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang, inochiama
On Wed, Nov 22, 2023 at 12:19 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
>
> xandespmu stands for Andes Performance Monitor Unit extension.
> Based on the added Andes PMU ISA string, the SBI PMU driver
> will make use of the non-standard irq source.
>
> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> ---
> Changes v1 -> v2:
> - New patch
> Changes v2 -> v3:
> - No change
> Changes v3 -> v4:
> - No change
> ---
> arch/riscv/boot/dts/renesas/r9a07g043f.dtsi | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cheers,
Prabhakar
> diff --git a/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi b/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
> index 78072e80793d..5f2f2181638a 100644
> --- a/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
> +++ b/arch/riscv/boot/dts/renesas/r9a07g043f.dtsi
> @@ -26,7 +26,7 @@ cpu0: cpu@0 {
> riscv,isa = "rv64imafdc";
> riscv,isa-base = "rv64i";
> riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "zicntr", "zicsr",
> - "zifencei", "zihpm";
> + "zifencei", "zihpm", "xandespmu";
> mmu-type = "riscv,sv39";
> i-cache-size = <0x8000>;
> i-cache-line-size = <0x40>;
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 13/13] riscv: andes: Support symbolic FW and HW raw events
2023-11-22 12:12 ` [PATCH v4 13/13] riscv: andes: Support symbolic FW and HW raw events Yu Chien Peter Lin
@ 2023-11-24 15:08 ` Lad, Prabhakar
0 siblings, 0 replies; 49+ messages in thread
From: Lad, Prabhakar @ 2023-11-24 15:08 UTC (permalink / raw)
To: Yu Chien Peter Lin
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang, inochiama
On Wed, Nov 22, 2023 at 12:19 PM Yu Chien Peter Lin
<peterlin@andestech.com> wrote:
>
> From: Locus Wei-Han Chen <locus84@andestech.com>
>
> This patch adds the Andes AX45 JSON files in the perf tool,
> allowing perf to be used with symbolic event names.
>
> Signed-off-by: Locus Wei-Han Chen <locus84@andestech.com>
> Reviewed-by: Yu Chien Peter Lin <peterlin@andestech.com>
> Reviewed-by: Charles Ci-Jyun Wu <dminus@andestech.com>
> Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
> ---
> Changes v1 -> v2:
> - No change
> Changes v2 -> v3:
> - No change
> Changes v3 -> v4:
> - No change
> ---
> .../arch/riscv/andes/ax45/firmware.json | 68 ++++++++++
> .../arch/riscv/andes/ax45/instructions.json | 127 ++++++++++++++++++
> .../arch/riscv/andes/ax45/memory.json | 57 ++++++++
> .../arch/riscv/andes/ax45/microarch.json | 77 +++++++++++
> tools/perf/pmu-events/arch/riscv/mapfile.csv | 1 +
> 5 files changed, 330 insertions(+)
> create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/firmware.json
> create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/instructions.json
> create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/memory.json
> create mode 100644 tools/perf/pmu-events/arch/riscv/andes/ax45/microarch.json
>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cheers,
Prabhakar
> diff --git a/tools/perf/pmu-events/arch/riscv/andes/ax45/firmware.json b/tools/perf/pmu-events/arch/riscv/andes/ax45/firmware.json
> new file mode 100644
> index 000000000000..9b4a032186a7
> --- /dev/null
> +++ b/tools/perf/pmu-events/arch/riscv/andes/ax45/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/andes/ax45/instructions.json b/tools/perf/pmu-events/arch/riscv/andes/ax45/instructions.json
> new file mode 100644
> index 000000000000..713a08c1a40f
> --- /dev/null
> +++ b/tools/perf/pmu-events/arch/riscv/andes/ax45/instructions.json
> @@ -0,0 +1,127 @@
> +[
> + {
> + "EventCode": "0x10",
> + "EventName": "cycle_count",
> + "BriefDescription": "Cycle count"
> + },
> + {
> + "EventCode": "0x20",
> + "EventName": "inst_count",
> + "BriefDescription": "Retired instruction count"
> + },
> + {
> + "EventCode": "0x30",
> + "EventName": "int_load_inst",
> + "BriefDescription": "Integer load instruction count"
> + },
> + {
> + "EventCode": "0x40",
> + "EventName": "int_store_inst",
> + "BriefDescription": "Integer store instruction count"
> + },
> + {
> + "EventCode": "0x50",
> + "EventName": "atomic_inst",
> + "BriefDescription": "Atomic instruction count"
> + },
> + {
> + "EventCode": "0x60",
> + "EventName": "sys_inst",
> + "BriefDescription": "System instruction count"
> + },
> + {
> + "EventCode": "0x70",
> + "EventName": "int_compute_inst",
> + "BriefDescription": "Integer computational instruction count"
> + },
> + {
> + "EventCode": "0x80",
> + "EventName": "condition_br",
> + "BriefDescription": "Conditional branch instruction count"
> + },
> + {
> + "EventCode": "0x90",
> + "EventName": "taken_condition_br",
> + "BriefDescription": "Taken conditional branch instruction count"
> + },
> + {
> + "EventCode": "0xA0",
> + "EventName": "jal_inst",
> + "BriefDescription": "JAL instruction count"
> + },
> + {
> + "EventCode": "0xB0",
> + "EventName": "jalr_inst",
> + "BriefDescription": "JALR instruction count"
> + },
> + {
> + "EventCode": "0xC0",
> + "EventName": "ret_inst",
> + "BriefDescription": "Return instruction count"
> + },
> + {
> + "EventCode": "0xD0",
> + "EventName": "control_trans_inst",
> + "BriefDescription": "Control transfer instruction count"
> + },
> + {
> + "EventCode": "0xE0",
> + "EventName": "ex9_inst",
> + "BriefDescription": "EXEC.IT instruction count"
> + },
> + {
> + "EventCode": "0xF0",
> + "EventName": "int_mul_inst",
> + "BriefDescription": "Integer multiplication instruction count"
> + },
> + {
> + "EventCode": "0x100",
> + "EventName": "int_div_rem_inst",
> + "BriefDescription": "Integer division/remainder instruction count"
> + },
> + {
> + "EventCode": "0x110",
> + "EventName": "float_load_inst",
> + "BriefDescription": "Floating-point load instruction count"
> + },
> + {
> + "EventCode": "0x120",
> + "EventName": "float_store_inst",
> + "BriefDescription": "Floating-point store instruction count"
> + },
> + {
> + "EventCode": "0x130",
> + "EventName": "float_add_sub_inst",
> + "BriefDescription": "Floating-point addition/subtraction instruction count"
> + },
> + {
> + "EventCode": "0x140",
> + "EventName": "float_mul_inst",
> + "BriefDescription": "Floating-point multiplication instruction count"
> + },
> + {
> + "EventCode": "0x150",
> + "EventName": "float_fused_muladd_inst",
> + "BriefDescription": "Floating-point fused multiply-add instruction count"
> + },
> + {
> + "EventCode": "0x160",
> + "EventName": "float_div_sqrt_inst",
> + "BriefDescription": "Floating-point division or square-root instruction count"
> + },
> + {
> + "EventCode": "0x170",
> + "EventName": "other_float_inst",
> + "BriefDescription": "Other floating-point instruction count"
> + },
> + {
> + "EventCode": "0x180",
> + "EventName": "int_mul_add_sub_inst",
> + "BriefDescription": "Integer multiplication and add/sub instruction count"
> + },
> + {
> + "EventCode": "0x190",
> + "EventName": "retired_ops",
> + "BriefDescription": "Retired operation count"
> + }
> +]
> diff --git a/tools/perf/pmu-events/arch/riscv/andes/ax45/memory.json b/tools/perf/pmu-events/arch/riscv/andes/ax45/memory.json
> new file mode 100644
> index 000000000000..c7401b526c77
> --- /dev/null
> +++ b/tools/perf/pmu-events/arch/riscv/andes/ax45/memory.json
> @@ -0,0 +1,57 @@
> +[
> + {
> + "EventCode": "0x01",
> + "EventName": "ilm_access",
> + "BriefDescription": "ILM access"
> + },
> + {
> + "EventCode": "0x11",
> + "EventName": "dlm_access",
> + "BriefDescription": "DLM access"
> + },
> + {
> + "EventCode": "0x21",
> + "EventName": "icache_access",
> + "BriefDescription": "ICACHE access"
> + },
> + {
> + "EventCode": "0x31",
> + "EventName": "icache_miss",
> + "BriefDescription": "ICACHE miss"
> + },
> + {
> + "EventCode": "0x41",
> + "EventName": "dcache_access",
> + "BriefDescription": "DCACHE access"
> + },
> + {
> + "EventCode": "0x51",
> + "EventName": "dcache_miss",
> + "BriefDescription": "DCACHE miss"
> + },
> + {
> + "EventCode": "0x61",
> + "EventName": "dcache_load_access",
> + "BriefDescription": "DCACHE load access"
> + },
> + {
> + "EventCode": "0x71",
> + "EventName": "dcache_load_miss",
> + "BriefDescription": "DCACHE load miss"
> + },
> + {
> + "EventCode": "0x81",
> + "EventName": "dcache_store_access",
> + "BriefDescription": "DCACHE store access"
> + },
> + {
> + "EventCode": "0x91",
> + "EventName": "dcache_store_miss",
> + "BriefDescription": "DCACHE store miss"
> + },
> + {
> + "EventCode": "0xA1",
> + "EventName": "dcache_wb",
> + "BriefDescription": "DCACHE writeback"
> + }
> +]
> diff --git a/tools/perf/pmu-events/arch/riscv/andes/ax45/microarch.json b/tools/perf/pmu-events/arch/riscv/andes/ax45/microarch.json
> new file mode 100644
> index 000000000000..a6d378cbaa74
> --- /dev/null
> +++ b/tools/perf/pmu-events/arch/riscv/andes/ax45/microarch.json
> @@ -0,0 +1,77 @@
> +[
> + {
> + "EventCode": "0xB1",
> + "EventName": "cycle_wait_icache_fill",
> + "BriefDescription": "Cycles waiting for ICACHE fill data"
> + },
> + {
> + "EventCode": "0xC1",
> + "EventName": "cycle_wait_dcache_fill",
> + "BriefDescription": "Cycles waiting for DCACHE fill data"
> + },
> + {
> + "EventCode": "0xD1",
> + "EventName": "uncached_ifetch_from_bus",
> + "BriefDescription": "Uncached ifetch data access from bus"
> + },
> + {
> + "EventCode": "0xE1",
> + "EventName": "uncached_load_from_bus",
> + "BriefDescription": "Uncached load data access from bus"
> + },
> + {
> + "EventCode": "0xF1",
> + "EventName": "cycle_wait_uncached_ifetch",
> + "BriefDescription": "Cycles waiting for uncached ifetch data from bus"
> + },
> + {
> + "EventCode": "0x101",
> + "EventName": "cycle_wait_uncached_load",
> + "BriefDescription": "Cycles waiting for uncached load data from bus"
> + },
> + {
> + "EventCode": "0x111",
> + "EventName": "main_itlb_access",
> + "BriefDescription": "Main ITLB access"
> + },
> + {
> + "EventCode": "0x121",
> + "EventName": "main_itlb_miss",
> + "BriefDescription": "Main ITLB miss"
> + },
> + {
> + "EventCode": "0x131",
> + "EventName": "main_dtlb_access",
> + "BriefDescription": "Main DTLB access"
> + },
> + {
> + "EventCode": "0x141",
> + "EventName": "main_dtlb_miss",
> + "BriefDescription": "Main DTLB miss"
> + },
> + {
> + "EventCode": "0x151",
> + "EventName": "cycle_wait_itlb_fill",
> + "BriefDescription": "Cycles waiting for Main ITLB fill data"
> + },
> + {
> + "EventCode": "0x161",
> + "EventName": "pipe_stall_cycle_dtlb_miss",
> + "BriefDescription": "Pipeline stall cycles caused by Main DTLB miss"
> + },
> + {
> + "EventCode": "0x02",
> + "EventName": "mispredict_condition_br",
> + "BriefDescription": "Misprediction of conditional branches"
> + },
> + {
> + "EventCode": "0x12",
> + "EventName": "mispredict_take_condition_br",
> + "BriefDescription": "Misprediction of taken conditional branches"
> + },
> + {
> + "EventCode": "0x22",
> + "EventName": "mispredict_target_ret_inst",
> + "BriefDescription": "Misprediction of targets of Return instructions"
> + }
> +]
> diff --git a/tools/perf/pmu-events/arch/riscv/mapfile.csv b/tools/perf/pmu-events/arch/riscv/mapfile.csv
> index c61b3d6ef616..5bf09af14c1b 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
> +0x31e-0x8000000000008a45-0x[[:xdigit:]]+,v1,andes/ax45,core
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 04/13] dt-bindings: riscv: Add Andes interrupt controller compatible string
2023-11-24 15:03 ` Lad, Prabhakar
2023-11-24 15:05 ` Conor Dooley
@ 2023-11-29 6:43 ` Yu-Chien Peter Lin
1 sibling, 0 replies; 49+ messages in thread
From: Yu-Chien Peter Lin @ 2023-11-29 6:43 UTC (permalink / raw)
To: Lad, Prabhakar
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang
Hi Prabhakar,
On Fri, Nov 24, 2023 at 03:03:51PM +0000, Lad, Prabhakar wrote:
> On Wed, Nov 22, 2023 at 12:18 PM Yu Chien Peter Lin
> <peterlin@andestech.com> wrote:
> >
> > Add "andestech,cpu-intc" compatible string to indicate that
> > Andes specific local interrupt is supported on the core,
> > e.g. AX45MP cores have 3 types of non-standard local interrupt
> > can be handled in supervisor mode:
> >
> > - Slave port ECC error interrupt
> > - Bus write transaction error interrupt
> > - Performance monitor overflow interrupt
> >
> > These interrupts are enabled/disabled via a custom register
> > SLIE instead of the standard interrupt enable register SIE.
> >
> > Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> > ---
> > Changes v1 -> v2:
> > - New patch
> > Changes v2 -> v3:
> > - Updated commit message
> > - Fixed possible compatibles for Andes INTC
> > Changes v3 -> v4:
> > - Add const entry instead of enum (Suggested by Conor)
> > ---
> > Documentation/devicetree/bindings/riscv/cpus.yaml | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/Documentation/devicetree/bindings/riscv/cpus.yaml b/Documentation/devicetree/bindings/riscv/cpus.yaml
> > index f392e367d673..50307554478f 100644
> > --- a/Documentation/devicetree/bindings/riscv/cpus.yaml
> > +++ b/Documentation/devicetree/bindings/riscv/cpus.yaml
> > @@ -100,7 +100,11 @@ properties:
> > const: 1
> >
> > compatible:
> > - const: riscv,cpu-intc
> > + oneOf:
> > + - items:
> > + - const: andestech,cpu-intc
> given that the first patch renames andestech -> andes, do you want to
> follow the same here?
Thanks for pointing this out.
We would like to use "andestech" for compatible string.
Documentation/devicetree/bindings/vendor-prefixes.yaml
118: "^andestech,.*":
119- description: Andes Technology Corporation
> > + - const: riscv,cpu-intc
> > + - const: riscv,cpu-intc
> >
> > interrupt-controller: true
> >
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Thanks for the review!
Best regards,
Peter Lin
> Cheers,
> Prabhakar
>
> > --
> > 2.34.1
> >
> >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-23 14:48 ` Conor Dooley
@ 2023-11-29 8:47 ` Yu-Chien Peter Lin
2023-11-29 12:33 ` Conor Dooley
0 siblings, 1 reply; 49+ messages in thread
From: Yu-Chien Peter Lin @ 2023-11-29 8:47 UTC (permalink / raw)
To: Conor Dooley
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor, devicetree, dminus, evan,
geert+renesas, guoren, heiko, irogers, jernej.skrabec, jolsa,
jszhang, krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
Hi Conor,
On Thu, Nov 23, 2023 at 02:48:20PM +0000, Conor Dooley wrote:
> On Wed, Nov 22, 2023 at 08:12:31PM +0800, Yu Chien Peter Lin wrote:
> > Document the ISA string for T-Head performance monitor extension
> > which provides counter overflow interrupt mechanism.
> >
> > Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> > ---
> > Changes v2 -> v3:
> > - New patch
> > Changes v3 -> v4:
> > - No change
> > ---
> > Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
> > 1 file changed, 6 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> > index c91ab0e46648..694efaea8fce 100644
> > --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> > +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> > @@ -258,5 +258,11 @@ properties:
> > in commit 2e5236 ("Ztso is now ratified.") of the
> > riscv-isa-manual.
> >
> > + - const: xtheadpmu
> > + description:
> > + The T-Head performance monitor extension for counter overflow. For more
> > + details, see the chapter 12 in the Xuantie C906 user manual.
> > + https://github.com/T-head-Semi/openc906/tree/main/doc
>
> I'm pretty sure that I asked on the previous revision for you to
> identify a specific revision of this document.
Sorry, I'm still searching for it.
Regards,
Peter Lin
> Cheers,
> Conor.
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-22 21:14 ` Guo Ren
@ 2023-11-29 8:48 ` Yu-Chien Peter Lin
2023-11-30 8:29 ` Inochi Amaoto
0 siblings, 1 reply; 49+ messages in thread
From: Yu-Chien Peter Lin @ 2023-11-29 8:48 UTC (permalink / raw)
To: Guo Ren
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, heiko, irogers, jernej.skrabec,
jolsa, jszhang, krzysztof.kozlowski+dt, linux-arm-kernel,
linux-kernel, linux-perf-users, linux-renesas-soc, linux-riscv,
linux-sunxi, locus84, magnus.damm, mark.rutland, mingo, n.shubin,
namhyung, palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj,
rdunlap, robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will,
ycliang, inochiama
Hi Guo Ren,
On Thu, Nov 23, 2023 at 05:14:30AM +0800, Guo Ren wrote:
> On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
> <peterlin@andestech.com> wrote:
> >
> > Document the ISA string for T-Head performance monitor extension
> > which provides counter overflow interrupt mechanism.
> >
> > Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> > ---
> > Changes v2 -> v3:
> > - New patch
> > Changes v3 -> v4:
> > - No change
> > ---
> > Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
> > 1 file changed, 6 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> > index c91ab0e46648..694efaea8fce 100644
> > --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> > +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> > @@ -258,5 +258,11 @@ properties:
> > in commit 2e5236 ("Ztso is now ratified.") of the
> > riscv-isa-manual.
> >
> > + - const: xtheadpmu
> > + description:
> > + The T-Head performance monitor extension for counter overflow. For more
> > + details, see the chapter 12 in the Xuantie C906 user manual.
> > + https://github.com/T-head-Semi/openc906/tree/main/doc
> > +
> > additionalProperties: true
> > ...
> > --
> > 2.34.1
> >
> Reviewed-by: Guo Ren <guoren@kernel.org>
Thanks for the review.
Would you share document about T-Head PMU?
Best regards,
Peter Lin
> --
> Best Regards
> Guo Ren
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 11/13] riscv: dts: allwinner: Add T-Head PMU extension
2023-11-23 14:58 ` Conor Dooley
@ 2023-11-29 9:34 ` Yu-Chien Peter Lin
0 siblings, 0 replies; 49+ messages in thread
From: Yu-Chien Peter Lin @ 2023-11-29 9:34 UTC (permalink / raw)
To: Conor Dooley
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor, devicetree, dminus, evan,
geert+renesas, guoren, heiko, irogers, jernej.skrabec, jolsa,
jszhang, krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang,
inochiama
Hi Conor,
On Thu, Nov 23, 2023 at 02:58:55PM +0000, Conor Dooley wrote:
> On Wed, Nov 22, 2023 at 08:12:33PM +0800, Yu Chien Peter Lin wrote:
> > xtheadpmu stands for T-Head Performance Monitor Unit extension.
> > Based on the added T-Head PMU ISA string, the SBI PMU driver
> > will make use of the non-standard irq source.
>
> Allwinner aren't the only ones using T-Head CPUs that the previous
> m*id pmu detection code would have matched on. I think the first three
> files below will also need to be updated:
>
> rg -l "thead,c[0-9]*\b[^-]" arch/riscv/boot/dts/
> arch/riscv/boot/dts/sophgo/sg2042-cpus.dtsi
> arch/riscv/boot/dts/sophgo/cv1800b.dtsi
> arch/riscv/boot/dts/thead/th1520.dtsi
> arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi
That's really helpful, I'll add these .dtsi files in the patchset v5.
Thanks,
Peter Lin
> Cheers,
> Conor.
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-29 8:47 ` Yu-Chien Peter Lin
@ 2023-11-29 12:33 ` Conor Dooley
0 siblings, 0 replies; 49+ messages in thread
From: Conor Dooley @ 2023-11-29 12:33 UTC (permalink / raw)
To: Yu-Chien Peter Lin
Cc: Conor Dooley, acme, adrian.hunter, ajones, alexander.shishkin,
andre.przywara, anup, aou, atishp, conor+dt, devicetree, dminus,
evan, geert+renesas, guoren, heiko, irogers, jernej.skrabec,
jolsa, jszhang, krzysztof.kozlowski+dt, linux-arm-kernel,
linux-kernel, linux-perf-users, linux-renesas-soc, linux-riscv,
linux-sunxi, locus84, magnus.damm, mark.rutland, mingo, n.shubin,
namhyung, palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj,
rdunlap, robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will,
ycliang, inochiama
[-- Attachment #1: Type: text/plain, Size: 1787 bytes --]
On Wed, Nov 29, 2023 at 04:47:38PM +0800, Yu-Chien Peter Lin wrote:
> Hi Conor,
>
> On Thu, Nov 23, 2023 at 02:48:20PM +0000, Conor Dooley wrote:
> > On Wed, Nov 22, 2023 at 08:12:31PM +0800, Yu Chien Peter Lin wrote:
> > > Document the ISA string for T-Head performance monitor extension
> > > which provides counter overflow interrupt mechanism.
> > >
> > > Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> > > ---
> > > Changes v2 -> v3:
> > > - New patch
> > > Changes v3 -> v4:
> > > - No change
> > > ---
> > > Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
> > > 1 file changed, 6 insertions(+)
> > >
> > > diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> > > index c91ab0e46648..694efaea8fce 100644
> > > --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> > > +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> > > @@ -258,5 +258,11 @@ properties:
> > > in commit 2e5236 ("Ztso is now ratified.") of the
> > > riscv-isa-manual.
> > >
> > > + - const: xtheadpmu
> > > + description:
> > > + The T-Head performance monitor extension for counter overflow. For more
> > > + details, see the chapter 12 in the Xuantie C906 user manual.
> > > + https://github.com/T-head-Semi/openc906/tree/main/doc
> >
> > I'm pretty sure that I asked on the previous revision for you to
> > identify a specific revision of this document.
>
> Sorry, I'm still searching for it.
Identifying a specific commit from that repo as the revision would be
okay. Follow the format used elsewhere for the standard extensions.
Cheers,
Conor.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-29 8:48 ` Yu-Chien Peter Lin
@ 2023-11-30 8:29 ` Inochi Amaoto
2023-11-30 9:21 ` Yu-Chien Peter Lin
0 siblings, 1 reply; 49+ messages in thread
From: Inochi Amaoto @ 2023-11-30 8:29 UTC (permalink / raw)
To: Yu-Chien Peter Lin
Cc: Inochi Amaoto, Guo Ren, acme, adrian.hunter, ajones,
alexander.shishkin, andre.przywara, anup, aou, atishp, conor+dt,
conor.dooley, conor, devicetree, dminus, evan, geert+renesas,
heiko, irogers, jernej.skrabec, jolsa, jszhang,
krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang
>
>Hi Guo Ren,
>
>On Thu, Nov 23, 2023 at 05:14:30AM +0800, Guo Ren wrote:
>> On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
>> <peterlin@andestech.com> wrote:
>>>
>>> Document the ISA string for T-Head performance monitor extension
>>> which provides counter overflow interrupt mechanism.
>>>
>>> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
>>> ---
>>> Changes v2 -> v3:
>>> - New patch
>>> Changes v3 -> v4:
>>> - No change
>>> ---
>>> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
>>> 1 file changed, 6 insertions(+)
>>>
>>> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>> index c91ab0e46648..694efaea8fce 100644
>>> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
>>> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>> @@ -258,5 +258,11 @@ properties:
>>> in commit 2e5236 ("Ztso is now ratified.") of the
>>> riscv-isa-manual.
>>>
>>> + - const: xtheadpmu
>>> + description:
>>> + The T-Head performance monitor extension for counter overflow. For more
>>> + details, see the chapter 12 in the Xuantie C906 user manual.
>>> + https://github.com/T-head-Semi/openc906/tree/main/doc
>>> +
>>> additionalProperties: true
>>> ...
>>> --
>>> 2.34.1
>>>
>> Reviewed-by: Guo Ren <guoren@kernel.org>
>
>Thanks for the review.
>Would you share document about T-Head PMU?
>
Hi, Peter Lin:
You can use the following two document to get all events:
https://github.com/T-head-Semi/openc906/tree/main/doc
https://github.com/T-head-Semi/openc910/tree/main/doc
There are also some RTL code can describe these events:
https://github.com/T-head-Semi/openc910/blob/e0c4ad8ec7f8c70f649d826ebd6c949086453272/C910_RTL_FACTORY/gen_rtl/pmu/rtl/ct_hpcp_top.v#L1123
https://github.com/T-head-Semi/openc906/blob/af5614d72de7e5a4b8609c427d2e20af1deb21c4/C906_RTL_FACTORY/gen_rtl/pmu/rtl/aq_hpcp_top.v#L543
The perf events json can also be used as document, this is already
applied (with more detailed explanation):
https://lore.kernel.org/all/IA1PR20MB495325FCF603BAA841E29281BBBAA@IA1PR20MB4953.namprd20.prod.outlook.com/
Best regards,
Inochi
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-30 8:29 ` Inochi Amaoto
@ 2023-11-30 9:21 ` Yu-Chien Peter Lin
2023-11-30 12:16 ` Inochi Amaoto
2023-12-01 1:14 ` Inochi Amaoto
0 siblings, 2 replies; 49+ messages in thread
From: Yu-Chien Peter Lin @ 2023-11-30 9:21 UTC (permalink / raw)
To: Inochi Amaoto
Cc: Guo Ren, acme, adrian.hunter, ajones, alexander.shishkin,
andre.przywara, anup, aou, atishp, conor+dt, conor.dooley, conor,
devicetree, dminus, evan, geert+renesas, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang
Hi Inochi,
On Thu, Nov 30, 2023 at 04:29:22PM +0800, Inochi Amaoto wrote:
> >
> >Hi Guo Ren,
> >
> >On Thu, Nov 23, 2023 at 05:14:30AM +0800, Guo Ren wrote:
> >> On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
> >> <peterlin@andestech.com> wrote:
> >>>
> >>> Document the ISA string for T-Head performance monitor extension
> >>> which provides counter overflow interrupt mechanism.
> >>>
> >>> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> >>> ---
> >>> Changes v2 -> v3:
> >>> - New patch
> >>> Changes v3 -> v4:
> >>> - No change
> >>> ---
> >>> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
> >>> 1 file changed, 6 insertions(+)
> >>>
> >>> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> >>> index c91ab0e46648..694efaea8fce 100644
> >>> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> >>> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> >>> @@ -258,5 +258,11 @@ properties:
> >>> in commit 2e5236 ("Ztso is now ratified.") of the
> >>> riscv-isa-manual.
> >>>
> >>> + - const: xtheadpmu
> >>> + description:
> >>> + The T-Head performance monitor extension for counter overflow. For more
> >>> + details, see the chapter 12 in the Xuantie C906 user manual.
> >>> + https://github.com/T-head-Semi/openc906/tree/main/doc
> >>> +
> >>> additionalProperties: true
> >>> ...
> >>> --
> >>> 2.34.1
> >>>
> >> Reviewed-by: Guo Ren <guoren@kernel.org>
> >
> >Thanks for the review.
> >Would you share document about T-Head PMU?
> >
>
> Hi, Peter Lin:
>
> You can use the following two document to get all events:
> https://github.com/T-head-Semi/openc906/tree/main/doc
> https://github.com/T-head-Semi/openc910/tree/main/doc
>
> There are also some RTL code can describe these events:
> https://github.com/T-head-Semi/openc910/blob/e0c4ad8ec7f8c70f649d826ebd6c949086453272/C910_RTL_FACTORY/gen_rtl/pmu/rtl/ct_hpcp_top.v#L1123
> https://github.com/T-head-Semi/openc906/blob/af5614d72de7e5a4b8609c427d2e20af1deb21c4/C906_RTL_FACTORY/gen_rtl/pmu/rtl/aq_hpcp_top.v#L543
>
> The perf events json can also be used as document, this is already
> applied (with more detailed explanation):
> https://lore.kernel.org/all/IA1PR20MB495325FCF603BAA841E29281BBBAA@IA1PR20MB4953.namprd20.prod.outlook.com/
Thanks for reaching out!
The updated description will be:
- const: xtheadpmu
description:
The T-Head performance monitor extension for counter overflow, as ratified
in commit bd9206 ("Initial commit") of Xuantie C906 user manual.
https://github.com/T-head-Semi/openc906/tree/main/doc
Is it OK with you?
Best regards,
Peter Lin
> Best regards,
> Inochi
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-30 9:21 ` Yu-Chien Peter Lin
@ 2023-11-30 12:16 ` Inochi Amaoto
2023-11-30 12:58 ` Conor Dooley
2023-12-01 1:14 ` Inochi Amaoto
1 sibling, 1 reply; 49+ messages in thread
From: Inochi Amaoto @ 2023-11-30 12:16 UTC (permalink / raw)
To: Yu-Chien Peter Lin
Cc: Inochi Amaoto, Guo Ren, acme, adrian.hunter, ajones,
alexander.shishkin, andre.przywara, anup, aou, atishp, conor+dt,
conor.dooley, conor, devicetree, dminus, evan, geert+renesas,
heiko, irogers, jernej.skrabec, jolsa, jszhang,
krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang
>
>Hi Inochi,
>
>On Thu, Nov 30, 2023 at 04:29:22PM +0800, Inochi Amaoto wrote:
>>>
>>> Hi Guo Ren,
>>>
>>> On Thu, Nov 23, 2023 at 05:14:30AM +0800, Guo Ren wrote:
>>>> On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
>>>> <peterlin@andestech.com> wrote:
>>>>>
>>>>> Document the ISA string for T-Head performance monitor extension
>>>>> which provides counter overflow interrupt mechanism.
>>>>>
>>>>> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
>>>>> ---
>>>>> Changes v2 -> v3:
>>>>> - New patch
>>>>> Changes v3 -> v4:
>>>>> - No change
>>>>> ---
>>>>> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
>>>>> 1 file changed, 6 insertions(+)
>>>>>
>>>>> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>> index c91ab0e46648..694efaea8fce 100644
>>>>> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>> @@ -258,5 +258,11 @@ properties:
>>>>> in commit 2e5236 ("Ztso is now ratified.") of the
>>>>> riscv-isa-manual.
>>>>>
>>>>> + - const: xtheadpmu
>>>>> + description:
>>>>> + The T-Head performance monitor extension for counter overflow. For more
>>>>> + details, see the chapter 12 in the Xuantie C906 user manual.
>>>>> + https://github.com/T-head-Semi/openc906/tree/main/doc
>>>>> +
>>>>> additionalProperties: true
>>>>> ...
>>>>> --
>>>>> 2.34.1
>>>>>
>>>> Reviewed-by: Guo Ren <guoren@kernel.org>
>>>
>>> Thanks for the review.
>>> Would you share document about T-Head PMU?
>>>
>>
>> Hi, Peter Lin:
>>
>> You can use the following two document to get all events:
>> https://github.com/T-head-Semi/openc906/tree/main/doc
>> https://github.com/T-head-Semi/openc910/tree/main/doc
>>
>> There are also some RTL code can describe these events:
>> https://github.com/T-head-Semi/openc910/blob/e0c4ad8ec7f8c70f649d826ebd6c949086453272/C910_RTL_FACTORY/gen_rtl/pmu/rtl/ct_hpcp_top.v#L1123
>> https://github.com/T-head-Semi/openc906/blob/af5614d72de7e5a4b8609c427d2e20af1deb21c4/C906_RTL_FACTORY/gen_rtl/pmu/rtl/aq_hpcp_top.v#L543
>>
>> The perf events json can also be used as document, this is already
>> applied (with more detailed explanation):
>> https://lore.kernel.org/all/IA1PR20MB495325FCF603BAA841E29281BBBAA@IA1PR20MB4953.namprd20.prod.outlook.com/
>
>Thanks for reaching out!
>The updated description will be:
>
>- const: xtheadpmu
> description:
> The T-Head performance monitor extension for counter overflow, as ratified
> in commit bd9206 ("Initial commit") of Xuantie C906 user manual.
> https://github.com/T-head-Semi/openc906/tree/main/doc
>
>Is it OK with you?
>
I suggest using perf event json as event description. The jsons provide
more detailed explanation for these events than the user manual.
>Best regards,
>Peter Lin
>
>> Best regards,
>> Inochi
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-30 12:16 ` Inochi Amaoto
@ 2023-11-30 12:58 ` Conor Dooley
2023-11-30 23:11 ` Inochi Amaoto
0 siblings, 1 reply; 49+ messages in thread
From: Conor Dooley @ 2023-11-30 12:58 UTC (permalink / raw)
To: Inochi Amaoto
Cc: Yu-Chien Peter Lin, Guo Ren, acme, adrian.hunter, ajones,
alexander.shishkin, andre.przywara, anup, aou, atishp, conor+dt,
conor.dooley, devicetree, dminus, evan, geert+renesas, heiko,
irogers, jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang
[-- Attachment #1: Type: text/plain, Size: 3294 bytes --]
On Thu, Nov 30, 2023 at 08:16:38PM +0800, Inochi Amaoto wrote:
> >
> >Hi Inochi,
> >
> >On Thu, Nov 30, 2023 at 04:29:22PM +0800, Inochi Amaoto wrote:
> >>>
> >>> Hi Guo Ren,
> >>>
> >>> On Thu, Nov 23, 2023 at 05:14:30AM +0800, Guo Ren wrote:
> >>>> On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
> >>>> <peterlin@andestech.com> wrote:
> >>>>>
> >>>>> Document the ISA string for T-Head performance monitor extension
> >>>>> which provides counter overflow interrupt mechanism.
> >>>>>
> >>>>> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> >>>>> ---
> >>>>> Changes v2 -> v3:
> >>>>> - New patch
> >>>>> Changes v3 -> v4:
> >>>>> - No change
> >>>>> ---
> >>>>> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
> >>>>> 1 file changed, 6 insertions(+)
> >>>>>
> >>>>> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> >>>>> index c91ab0e46648..694efaea8fce 100644
> >>>>> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> >>>>> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> >>>>> @@ -258,5 +258,11 @@ properties:
> >>>>> in commit 2e5236 ("Ztso is now ratified.") of the
> >>>>> riscv-isa-manual.
> >>>>>
> >>>>> + - const: xtheadpmu
> >>>>> + description:
> >>>>> + The T-Head performance monitor extension for counter overflow. For more
> >>>>> + details, see the chapter 12 in the Xuantie C906 user manual.
> >>>>> + https://github.com/T-head-Semi/openc906/tree/main/doc
> >>>>> +
> >>>>> additionalProperties: true
> >>>>> ...
> >>>>> --
> >>>>> 2.34.1
> >>>>>
> >>>> Reviewed-by: Guo Ren <guoren@kernel.org>
> >>>
> >>> Thanks for the review.
> >>> Would you share document about T-Head PMU?
> >>>
> >>
> >> Hi, Peter Lin:
> >>
> >> You can use the following two document to get all events:
> >> https://github.com/T-head-Semi/openc906/tree/main/doc
> >> https://github.com/T-head-Semi/openc910/tree/main/doc
> >>
> >> There are also some RTL code can describe these events:
> >> https://github.com/T-head-Semi/openc910/blob/e0c4ad8ec7f8c70f649d826ebd6c949086453272/C910_RTL_FACTORY/gen_rtl/pmu/rtl/ct_hpcp_top.v#L1123
> >> https://github.com/T-head-Semi/openc906/blob/af5614d72de7e5a4b8609c427d2e20af1deb21c4/C906_RTL_FACTORY/gen_rtl/pmu/rtl/aq_hpcp_top.v#L543
> >>
> >> The perf events json can also be used as document, this is already
> >> applied (with more detailed explanation):
> >> https://lore.kernel.org/all/IA1PR20MB495325FCF603BAA841E29281BBBAA@IA1PR20MB4953.namprd20.prod.outlook.com/
> >
> >Thanks for reaching out!
> >The updated description will be:
> >
> >- const: xtheadpmu
> > description:
> > The T-Head performance monitor extension for counter overflow, as ratified
> > in commit bd9206 ("Initial commit") of Xuantie C906 user manual.
> > https://github.com/T-head-Semi/openc906/tree/main/doc
> >
> >Is it OK with you?
> >
>
> I suggest using perf event json as event description. The jsons provide
> more detailed explanation for these events than the user manual.
Does the "perf event json" describe the registers and interrupt behaviour?
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-30 12:58 ` Conor Dooley
@ 2023-11-30 23:11 ` Inochi Amaoto
2023-12-01 0:40 ` Conor Dooley
0 siblings, 1 reply; 49+ messages in thread
From: Inochi Amaoto @ 2023-11-30 23:11 UTC (permalink / raw)
To: Conor Dooley
Cc: Inochi Amaoto, Yu-Chien Peter Lin, Guo Ren, acme, adrian.hunter,
ajones, alexander.shishkin, andre.przywara, anup, aou, atishp,
conor+dt, conor.dooley, devicetree, dminus, evan, geert+renesas,
heiko, irogers, jernej.skrabec, jolsa, jszhang,
krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang
>
>On Thu, Nov 30, 2023 at 08:16:38PM +0800, Inochi Amaoto wrote:
>>>
>>> Hi Inochi,
>>>
>>> On Thu, Nov 30, 2023 at 04:29:22PM +0800, Inochi Amaoto wrote:
>>>>>
>>>>> Hi Guo Ren,
>>>>>
>>>>> On Thu, Nov 23, 2023 at 05:14:30AM +0800, Guo Ren wrote:
>>>>>> On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
>>>>>> <peterlin@andestech.com> wrote:
>>>>>>>
>>>>>>> Document the ISA string for T-Head performance monitor extension
>>>>>>> which provides counter overflow interrupt mechanism.
>>>>>>>
>>>>>>> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
>>>>>>> ---
>>>>>>> Changes v2 -> v3:
>>>>>>> - New patch
>>>>>>> Changes v3 -> v4:
>>>>>>> - No change
>>>>>>> ---
>>>>>>> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
>>>>>>> 1 file changed, 6 insertions(+)
>>>>>>>
>>>>>>> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>>>> index c91ab0e46648..694efaea8fce 100644
>>>>>>> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>>>> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>>>> @@ -258,5 +258,11 @@ properties:
>>>>>>> in commit 2e5236 ("Ztso is now ratified.") of the
>>>>>>> riscv-isa-manual.
>>>>>>>
>>>>>>> + - const: xtheadpmu
>>>>>>> + description:
>>>>>>> + The T-Head performance monitor extension for counter overflow. For more
>>>>>>> + details, see the chapter 12 in the Xuantie C906 user manual.
>>>>>>> + https://github.com/T-head-Semi/openc906/tree/main/doc
>>>>>>> +
>>>>>>> additionalProperties: true
>>>>>>> ...
>>>>>>> --
>>>>>>> 2.34.1
>>>>>>>
>>>>>> Reviewed-by: Guo Ren <guoren@kernel.org>
>>>>>
>>>>> Thanks for the review.
>>>>> Would you share document about T-Head PMU?
>>>>>
>>>>
>>>> Hi, Peter Lin:
>>>>
>>>> You can use the following two document to get all events:
>>>> https://github.com/T-head-Semi/openc906/tree/main/doc
>>>> https://github.com/T-head-Semi/openc910/tree/main/doc
>>>>
>>>> There are also some RTL code can describe these events:
>>>> https://github.com/T-head-Semi/openc910/blob/e0c4ad8ec7f8c70f649d826ebd6c949086453272/C910_RTL_FACTORY/gen_rtl/pmu/rtl/ct_hpcp_top.v#L1123
>>>> https://github.com/T-head-Semi/openc906/blob/af5614d72de7e5a4b8609c427d2e20af1deb21c4/C906_RTL_FACTORY/gen_rtl/pmu/rtl/aq_hpcp_top.v#L543
>>>>
>>>> The perf events json can also be used as document, this is already
>>>> applied (with more detailed explanation):
>>>> https://lore.kernel.org/all/IA1PR20MB495325FCF603BAA841E29281BBBAA@IA1PR20MB4953.namprd20.prod.outlook.com/
>>>
>>> Thanks for reaching out!
>>> The updated description will be:
>>>
>>> - const: xtheadpmu
>>> description:
>>> The T-Head performance monitor extension for counter overflow, as ratified
>>> in commit bd9206 ("Initial commit") of Xuantie C906 user manual.
>>> https://github.com/T-head-Semi/openc906/tree/main/doc
>>>
>>> Is it OK with you?
>>>
>>
>> I suggest using perf event json as event description. The jsons provide
>> more detailed explanation for these events than the user manual.
>
>Does the "perf event json" describe the registers and interrupt behaviour?
>
It does not. IIRC, the linux just uses SBI as perf driver backend. So
the registers and interrupt behaviour is primarily for SBI developer.
For registers and interrup detail, just reference the openc910 doc url
(https://github.com/T-head-Semi/openc910/tree/main/doc) and the T-HEAD
PMU driver in OpenSBI.
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-30 23:11 ` Inochi Amaoto
@ 2023-12-01 0:40 ` Conor Dooley
2023-12-01 0:57 ` Inochi Amaoto
0 siblings, 1 reply; 49+ messages in thread
From: Conor Dooley @ 2023-12-01 0:40 UTC (permalink / raw)
To: Inochi Amaoto
Cc: Yu-Chien Peter Lin, Guo Ren, acme, adrian.hunter, ajones,
alexander.shishkin, andre.przywara, anup, aou, atishp, conor+dt,
conor.dooley, devicetree, dminus, evan, geert+renesas, heiko,
irogers, jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang
[-- Attachment #1: Type: text/plain, Size: 4086 bytes --]
On Fri, Dec 01, 2023 at 07:11:31AM +0800, Inochi Amaoto wrote:
> >
> >On Thu, Nov 30, 2023 at 08:16:38PM +0800, Inochi Amaoto wrote:
> >>>
> >>> Hi Inochi,
> >>>
> >>> On Thu, Nov 30, 2023 at 04:29:22PM +0800, Inochi Amaoto wrote:
> >>>>>
> >>>>> Hi Guo Ren,
> >>>>>
> >>>>> On Thu, Nov 23, 2023 at 05:14:30AM +0800, Guo Ren wrote:
> >>>>>> On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
> >>>>>> <peterlin@andestech.com> wrote:
> >>>>>>>
> >>>>>>> Document the ISA string for T-Head performance monitor extension
> >>>>>>> which provides counter overflow interrupt mechanism.
> >>>>>>>
> >>>>>>> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
> >>>>>>> ---
> >>>>>>> Changes v2 -> v3:
> >>>>>>> - New patch
> >>>>>>> Changes v3 -> v4:
> >>>>>>> - No change
> >>>>>>> ---
> >>>>>>> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
> >>>>>>> 1 file changed, 6 insertions(+)
> >>>>>>>
> >>>>>>> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> >>>>>>> index c91ab0e46648..694efaea8fce 100644
> >>>>>>> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> >>>>>>> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> >>>>>>> @@ -258,5 +258,11 @@ properties:
> >>>>>>> in commit 2e5236 ("Ztso is now ratified.") of the
> >>>>>>> riscv-isa-manual.
> >>>>>>>
> >>>>>>> + - const: xtheadpmu
> >>>>>>> + description:
> >>>>>>> + The T-Head performance monitor extension for counter overflow. For more
> >>>>>>> + details, see the chapter 12 in the Xuantie C906 user manual.
> >>>>>>> + https://github.com/T-head-Semi/openc906/tree/main/doc
> >>>>>>> +
> >>>>>>> additionalProperties: true
> >>>>>>> ...
> >>>>>>> --
> >>>>>>> 2.34.1
> >>>>>>>
> >>>>>> Reviewed-by: Guo Ren <guoren@kernel.org>
> >>>>>
> >>>>> Thanks for the review.
> >>>>> Would you share document about T-Head PMU?
> >>>>>
> >>>>
> >>>> Hi, Peter Lin:
> >>>>
> >>>> You can use the following two document to get all events:
> >>>> https://github.com/T-head-Semi/openc906/tree/main/doc
> >>>> https://github.com/T-head-Semi/openc910/tree/main/doc
> >>>>
> >>>> There are also some RTL code can describe these events:
> >>>> https://github.com/T-head-Semi/openc910/blob/e0c4ad8ec7f8c70f649d826ebd6c949086453272/C910_RTL_FACTORY/gen_rtl/pmu/rtl/ct_hpcp_top.v#L1123
> >>>> https://github.com/T-head-Semi/openc906/blob/af5614d72de7e5a4b8609c427d2e20af1deb21c4/C906_RTL_FACTORY/gen_rtl/pmu/rtl/aq_hpcp_top.v#L543
> >>>>
> >>>> The perf events json can also be used as document, this is already
> >>>> applied (with more detailed explanation):
> >>>> https://lore.kernel.org/all/IA1PR20MB495325FCF603BAA841E29281BBBAA@IA1PR20MB4953.namprd20.prod.outlook.com/
> >>>
> >>> Thanks for reaching out!
> >>> The updated description will be:
> >>>
> >>> - const: xtheadpmu
> >>> description:
> >>> The T-Head performance monitor extension for counter overflow, as ratified
> >>> in commit bd9206 ("Initial commit") of Xuantie C906 user manual.
> >>> https://github.com/T-head-Semi/openc906/tree/main/doc
> >>>
> >>> Is it OK with you?
> >>>
> >>
> >> I suggest using perf event json as event description. The jsons provide
> >> more detailed explanation for these events than the user manual.
> >
> >Does the "perf event json" describe the registers and interrupt behaviour?
> >
>
> It does not. IIRC, the linux just uses SBI as perf driver backend. So
> the registers and interrupt behaviour is primarily for SBI developer.
Interrupts and registers are the reason that this patch (and the rest of
the patchset) exists :)
> For registers and interrup detail, just reference the openc910 doc url
> (https://github.com/T-head-Semi/openc910/tree/main/doc) and the T-HEAD
> PMU driver in OpenSBI.
The former, sure. But I will not accept driver implementations as the
reference in this context.
Thanks,
Conor.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-12-01 0:40 ` Conor Dooley
@ 2023-12-01 0:57 ` Inochi Amaoto
0 siblings, 0 replies; 49+ messages in thread
From: Inochi Amaoto @ 2023-12-01 0:57 UTC (permalink / raw)
To: Conor Dooley
Cc: Inochi Amaoto, Yu-Chien Peter Lin, Guo Ren, acme, adrian.hunter,
ajones, alexander.shishkin, andre.przywara, anup, aou, atishp,
conor+dt, conor.dooley, devicetree, dminus, evan, geert+renesas,
heiko, irogers, jernej.skrabec, jolsa, jszhang,
krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=y, Size: 4105 bytes --]
>
>On Fri, Dec 01, 2023 at 07:11:31AM +0800, Inochi Amaoto wrote:
>>>
>>> On Thu, Nov 30, 2023 at 08:16:38PM +0800, Inochi Amaoto wrote:
>>>>>
>>>>> Hi Inochi,
>>>>>
>>>>> On Thu, Nov 30, 2023 at 04:29:22PM +0800, Inochi Amaoto wrote:
>>>>>>>
>>>>>>> Hi Guo Ren,
>>>>>>>
>>>>>>> On Thu, Nov 23, 2023 at 05:14:30AM +0800, Guo Ren wrote:
>>>>>>>> On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
>>>>>>>> <peterlin@andestech.com> wrote:
>>>>>>>>>
>>>>>>>>> Document the ISA string for T-Head performance monitor extension
>>>>>>>>> which provides counter overflow interrupt mechanism.
>>>>>>>>>
>>>>>>>>> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
>>>>>>>>> ---
>>>>>>>>> Changes v2 -> v3:
>>>>>>>>> - New patch
>>>>>>>>> Changes v3 -> v4:
>>>>>>>>> - No change
>>>>>>>>> ---
>>>>>>>>> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
>>>>>>>>> 1 file changed, 6 insertions(+)
>>>>>>>>>
>>>>>>>>> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>>>>>> index c91ab0e46648..694efaea8fce 100644
>>>>>>>>> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>>>>>> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>>>>>> @@ -258,5 +258,11 @@ properties:
>>>>>>>>> in commit 2e5236 ("Ztso is now ratified.") of the
>>>>>>>>> riscv-isa-manual.
>>>>>>>>>
>>>>>>>>> + - const: xtheadpmu
>>>>>>>>> + description:
>>>>>>>>> + The T-Head performance monitor extension for counter overflow. For more
>>>>>>>>> + details, see the chapter 12 in the Xuantie C906 user manual.
>>>>>>>>> + https://github.com/T-head-Semi/openc906/tree/main/doc
>>>>>>>>> +
>>>>>>>>> additionalProperties: true
>>>>>>>>> ...
>>>>>>>>> --
>>>>>>>>> 2.34.1
>>>>>>>>>
>>>>>>>> Reviewed-by: Guo Ren <guoren@kernel.org>
>>>>>>>
>>>>>>> Thanks for the review.
>>>>>>> Would you share document about T-Head PMU?
>>>>>>>
>>>>>>
>>>>>> Hi, Peter Lin:
>>>>>>
>>>>>> You can use the following two document to get all events:
>>>>>> https://github.com/T-head-Semi/openc906/tree/main/doc
>>>>>> https://github.com/T-head-Semi/openc910/tree/main/doc
>>>>>>
>>>>>> There are also some RTL code can describe these events:
>>>>>> https://github.com/T-head-Semi/openc910/blob/e0c4ad8ec7f8c70f649d826ebd6c949086453272/C910_RTL_FACTORY/gen_rtl/pmu/rtl/ct_hpcp_top.v#L1123
>>>>>> https://github.com/T-head-Semi/openc906/blob/af5614d72de7e5a4b8609c427d2e20af1deb21c4/C906_RTL_FACTORY/gen_rtl/pmu/rtl/aq_hpcp_top.v#L543
>>>>>>
>>>>>> The perf events json can also be used as document, this is already
>>>>>> applied (with more detailed explanation):
>>>>>> https://lore.kernel.org/all/IA1PR20MB495325FCF603BAA841E29281BBBAA@IA1PR20MB4953.namprd20.prod.outlook.com/
>>>>>
>>>>> Thanks for reaching out!
>>>>> The updated description will be:
>>>>>
>>>>> - const: xtheadpmu
>>>>> description:
>>>>> The T-Head performance monitor extension for counter overflow, as ratified
>>>>> in commit bd9206 ("Initial commit") of Xuantie C906 user manual.
>>>>> https://github.com/T-head-Semi/openc906/tree/main/doc
>>>>>
>>>>> Is it OK with you?
>>>>>
>>>>
>>>> I suggest using perf event json as event description. The jsons provide
>>>> more detailed explanation for these events than the user manual.
>>>
>>> Does the "perf event json" describe the registers and interrupt behaviour?
>>>
>>
>> It does not. IIRC, the linux just uses SBI as perf driver backend. So
>> the registers and interrupt behaviour is primarily for SBI developer.
>
>Interrupts and registers are the reason that this patch (and the rest of
>the patchset) exists :)
>
Thanks, it seems I misunderstood something.
>> For registers and interrup detail, just reference the openc910 doc url
>> (https://github.com/T-head-Semi/openc910/tree/main/doc) and the T-HEAD
>> PMU driver in OpenSBI.
>
>The former, sure. But I will not accept driver implementations as the
>reference in this context.
>
OK, Let's drop it and left the document only.
>Thanks,
>Conor.
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-11-30 9:21 ` Yu-Chien Peter Lin
2023-11-30 12:16 ` Inochi Amaoto
@ 2023-12-01 1:14 ` Inochi Amaoto
2023-12-06 3:14 ` Yu-Chien Peter Lin
1 sibling, 1 reply; 49+ messages in thread
From: Inochi Amaoto @ 2023-12-01 1:14 UTC (permalink / raw)
To: Yu-Chien Peter Lin
Cc: Inochi Amaoto, Guo Ren, acme, adrian.hunter, ajones,
alexander.shishkin, andre.przywara, anup, aou, atishp, conor+dt,
conor.dooley, conor, devicetree, dminus, evan, geert+renesas,
heiko, irogers, jernej.skrabec, jolsa, jszhang,
krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterz, prabhakar.mahadev-lad.rj, rdunlap,
robh+dt, samuel, sunilvl, tglx, tim609, uwu, wens, will, ycliang
>
>Hi Inochi,
>
>On Thu, Nov 30, 2023 at 04:29:22PM +0800, Inochi Amaoto wrote:
>>>
>>> Hi Guo Ren,
>>>
>>> On Thu, Nov 23, 2023 at 05:14:30AM +0800, Guo Ren wrote:
>>>> On Wed, Nov 22, 2023 at 8:17 PM Yu Chien Peter Lin
>>>> <peterlin@andestech.com> wrote:
>>>>>
>>>>> Document the ISA string for T-Head performance monitor extension
>>>>> which provides counter overflow interrupt mechanism.
>>>>>
>>>>> Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
>>>>> ---
>>>>> Changes v2 -> v3:
>>>>> - New patch
>>>>> Changes v3 -> v4:
>>>>> - No change
>>>>> ---
>>>>> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
>>>>> 1 file changed, 6 insertions(+)
>>>>>
>>>>> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>> index c91ab0e46648..694efaea8fce 100644
>>>>> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>>>> @@ -258,5 +258,11 @@ properties:
>>>>> in commit 2e5236 ("Ztso is now ratified.") of the
>>>>> riscv-isa-manual.
>>>>>
>>>>> + - const: xtheadpmu
>>>>> + description:
>>>>> + The T-Head performance monitor extension for counter overflow. For more
>>>>> + details, see the chapter 12 in the Xuantie C906 user manual.
>>>>> + https://github.com/T-head-Semi/openc906/tree/main/doc
>>>>> +
>>>>> additionalProperties: true
>>>>> ...
>>>>> --
>>>>> 2.34.1
>>>>>
>>>> Reviewed-by: Guo Ren <guoren@kernel.org>
>>>
>>> Thanks for the review.
>>> Would you share document about T-Head PMU?
>>>
>>
>> Hi, Peter Lin:
>>
>> You can use the following two document to get all events:
>> https://github.com/T-head-Semi/openc906/tree/main/doc
>> https://github.com/T-head-Semi/openc910/tree/main/doc
>>
>> There are also some RTL code can describe these events:
>> https://github.com/T-head-Semi/openc910/blob/e0c4ad8ec7f8c70f649d826ebd6c949086453272/C910_RTL_FACTORY/gen_rtl/pmu/rtl/ct_hpcp_top.v#L1123
>> https://github.com/T-head-Semi/openc906/blob/af5614d72de7e5a4b8609c427d2e20af1deb21c4/C906_RTL_FACTORY/gen_rtl/pmu/rtl/aq_hpcp_top.v#L543
>>
>> The perf events json can also be used as document, this is already
>> applied (with more detailed explanation):
>> https://lore.kernel.org/all/IA1PR20MB495325FCF603BAA841E29281BBBAA@IA1PR20MB4953.namprd20.prod.outlook.com/
>
>Thanks for reaching out!
>The updated description will be:
>
>- const: xtheadpmu
> description:
> The T-Head performance monitor extension for counter overflow, as ratified
> in commit bd9206 ("Initial commit") of Xuantie C906 user manual.
> https://github.com/T-head-Semi/openc906/tree/main/doc
>
>Is it OK with you?
>
Please indicate chapter 12 and chapter 13.5 of the manual related to
the PMU. And changed openc906 manual to openc910 manual because it is
more updated.
If modified:
Reviewed-by: Inochi Amaoto <inochiama@outlook.com>
>Best regards,
>Peter Lin
>
>> Best regards,
>> Inochi
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description
2023-12-01 1:14 ` Inochi Amaoto
@ 2023-12-06 3:14 ` Yu-Chien Peter Lin
0 siblings, 0 replies; 49+ messages in thread
From: Yu-Chien Peter Lin @ 2023-12-06 3:14 UTC (permalink / raw)
To: Inochi Amaoto
Cc: Guo Ren, acme, adrian.hunter, ajones, alexander.shishkin,
andre.przywara, anup, aou, atishp, conor+dt, conor.dooley, conor,
devicetree, dminus, evan, geert+renesas, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tglx, tim609, uwu, wens, will, ycliang
On Fri, Dec 01, 2023 at 09:14:00AM +0800, Inochi Amaoto wrote:
<...>
> >>
> >> Hi, Peter Lin:
> >>
> >> You can use the following two document to get all events:
> >> https://github.com/T-head-Semi/openc906/tree/main/doc
> >> https://github.com/T-head-Semi/openc910/tree/main/doc
> >>
> >> There are also some RTL code can describe these events:
> >> https://github.com/T-head-Semi/openc910/blob/e0c4ad8ec7f8c70f649d826ebd6c949086453272/C910_RTL_FACTORY/gen_rtl/pmu/rtl/ct_hpcp_top.v#L1123
> >> https://github.com/T-head-Semi/openc906/blob/af5614d72de7e5a4b8609c427d2e20af1deb21c4/C906_RTL_FACTORY/gen_rtl/pmu/rtl/aq_hpcp_top.v#L543
> >>
> >> The perf events json can also be used as document, this is already
> >> applied (with more detailed explanation):
> >> https://lore.kernel.org/all/IA1PR20MB495325FCF603BAA841E29281BBBAA@IA1PR20MB4953.namprd20.prod.outlook.com/
> >
> >Thanks for reaching out!
> >The updated description will be:
> >
> >- const: xtheadpmu
> > description:
> > The T-Head performance monitor extension for counter overflow, as ratified
> > in commit bd9206 ("Initial commit") of Xuantie C906 user manual.
> > https://github.com/T-head-Semi/openc906/tree/main/doc
> >
> >Is it OK with you?
> >
>
> Please indicate chapter 12 and chapter 13.5 of the manual related to
> the PMU. And changed openc906 manual to openc910 manual because it is
> more updated.
>
> If modified:
>
> Reviewed-by: Inochi Amaoto <inochiama@outlook.com>
Got it! Thanks for the information.
Regards,
Peter Lin
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 02/13] irqchip/riscv-intc: Allow large non-standard interrupt number
2023-11-22 12:12 ` [PATCH v4 02/13] irqchip/riscv-intc: Allow large non-standard interrupt number Yu Chien Peter Lin
@ 2023-12-08 15:54 ` Thomas Gleixner
2023-12-12 10:17 ` Yu-Chien Peter Lin
0 siblings, 1 reply; 49+ messages in thread
From: Thomas Gleixner @ 2023-12-08 15:54 UTC (permalink / raw)
To: Yu Chien Peter Lin, acme, adrian.hunter, ajones,
alexander.shishkin, andre.przywara, anup, aou, atishp, conor+dt,
conor.dooley, conor, devicetree, dminus, evan, geert+renesas,
guoren, heiko, irogers, jernej.skrabec, jolsa, jszhang,
krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterlin, peterz, prabhakar.mahadev-lad.rj,
rdunlap, robh+dt, samuel, sunilvl, tim609, uwu, wens, will,
ycliang, inochiama
On Wed, Nov 22 2023 at 20:12, Yu Chien Peter Lin wrote:
> Currently, the implementation of the RISC-V INTC driver uses the
> interrupt cause as hwirq and has a limitation of supporting a
s/hwirq/hardware interrupt/
Please spell things out. We are not on Xitter here.
> maximum of 64 hwirqs. However, according to the privileged spec,
> interrupt causes >= 16 are defined for platform use.
>
> This limitation prevents us from fully utilizing the available
This limitation prevents to fully utilize the ...
> local interrupt sources. Additionally, the hwirqs used on RISC-V
> are sparse, with only interrupt numbers 1, 5 and 9 (plus Sscofpmf
> or T-Head's PMU irq) being currently used for supervisor mode.
>
> Switch to using irq_domain_create_tree() to create the radix tree
> map, so a larger number of hardware interrupts can be handled.
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 03/13] irqchip/riscv-intc: Introduce Andes hart-level interrupt controller
2023-11-22 12:12 ` [PATCH v4 03/13] irqchip/riscv-intc: Introduce Andes hart-level interrupt controller Yu Chien Peter Lin
@ 2023-12-08 16:01 ` Thomas Gleixner
2023-12-12 10:28 ` Yu-Chien Peter Lin
0 siblings, 1 reply; 49+ messages in thread
From: Thomas Gleixner @ 2023-12-08 16:01 UTC (permalink / raw)
To: Yu Chien Peter Lin, acme, adrian.hunter, ajones,
alexander.shishkin, andre.przywara, anup, aou, atishp, conor+dt,
conor.dooley, conor, devicetree, dminus, evan, geert+renesas,
guoren, heiko, irogers, jernej.skrabec, jolsa, jszhang,
krzysztof.kozlowski+dt, linux-arm-kernel, linux-kernel,
linux-perf-users, linux-renesas-soc, linux-riscv, linux-sunxi,
locus84, magnus.damm, mark.rutland, mingo, n.shubin, namhyung,
palmer, paul.walmsley, peterlin, peterz, prabhakar.mahadev-lad.rj,
rdunlap, robh+dt, samuel, sunilvl, tim609, uwu, wens, will,
ycliang, inochiama
On Wed, Nov 22 2023 at 20:12, Yu Chien Peter Lin wrote:
> To share the riscv_intc_domain_map() with the generic RISC-V INTC and
> ACPI, we add a chip parameter to riscv_intc_init_common(), so it can be
s/we//
See: Documentation/process/
> passed to the irq_domain_set_info() as private data.
> diff --git a/drivers/irqchip/irq-riscv-intc.c b/drivers/irqchip/irq-riscv-intc.c
> index 2fdd40f2a791..30f0036c8978 100644
> --- a/drivers/irqchip/irq-riscv-intc.c
> +++ b/drivers/irqchip/irq-riscv-intc.c
> @@ -17,6 +17,7 @@
> #include <linux/module.h>
> #include <linux/of.h>
> #include <linux/smp.h>
> +#include <linux/soc/andes/irq.h>
>
> static struct irq_domain *intc_domain;
>
> @@ -46,6 +47,31 @@ static void riscv_intc_irq_unmask(struct irq_data *d)
> csr_set(CSR_IE, BIT(d->hwirq));
> }
>
> +static void andes_intc_irq_mask(struct irq_data *d)
> +{
> + /*
> + * Andes specific S-mode local interrupt causes (hwirq)
> + * are defined as (256 + n) and controlled by n-th bit
> + * of SLIE.
> + */
> + unsigned int mask = BIT(d->hwirq % BITS_PER_LONG);
How is this supposed to be correct with BITS_PER_LONG == 64?
> +
> + if (d->hwirq < ANDES_SLI_CAUSE_BASE)
> + csr_clear(CSR_IE, mask);
> + else
> + csr_clear(ANDES_CSR_SLIE, mask);
> +}
> +
> +static void andes_intc_irq_unmask(struct irq_data *d)
> +{
> + unsigned int mask = BIT(d->hwirq % BITS_PER_LONG);
Ditto.
> + if (d->hwirq < ANDES_SLI_CAUSE_BASE)
> + csr_set(CSR_IE, mask);
> + else
> + csr_set(ANDES_CSR_SLIE, mask);
> +}
> static int riscv_intc_domain_map(struct irq_domain *d, unsigned int irq,
> irq_hw_number_t hwirq)
> {
> + struct irq_chip *chip = d->host_data;
> +
> irq_set_percpu_devid(irq);
> - irq_domain_set_info(d, irq, hwirq, &riscv_intc_chip, d->host_data,
> + irq_domain_set_info(d, irq, hwirq, chip, d->host_data,
So this sets 'chip_data' to the chip itself. What's the point? Just set
it to NULL as the chip obviously does not need chip_data at all.
> handle_percpu_devid_irq, NULL, NULL);
>
> return 0;
> @@ -112,11 +147,12 @@ static struct fwnode_handle *riscv_intc_hwnode(void)
> return intc_domain->fwnode;
> }
>
> -static int __init riscv_intc_init_common(struct fwnode_handle *fn)
> +static int __init riscv_intc_init_common(struct fwnode_handle *fn,
> + struct irq_chip *chip)
> {
> int rc;
>
> - intc_domain = irq_domain_create_tree(fn, &riscv_intc_domain_ops, NULL);
> + intc_domain = irq_domain_create_tree(fn, &riscv_intc_domain_ops, chip);
> if (!intc_domain) {
> pr_err("unable to add IRQ domain\n");
> return -ENXIO;
> @@ -138,6 +174,7 @@ static int __init riscv_intc_init(struct device_node *node,
> {
> int rc;
> unsigned long hartid;
> + struct irq_chip *chip = &riscv_intc_chip;
https://www.kernel.org/doc/html/latest/process/maintainer-tip.html#variable-declarations
Thanks
tglx
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 02/13] irqchip/riscv-intc: Allow large non-standard interrupt number
2023-12-08 15:54 ` Thomas Gleixner
@ 2023-12-12 10:17 ` Yu-Chien Peter Lin
0 siblings, 0 replies; 49+ messages in thread
From: Yu-Chien Peter Lin @ 2023-12-12 10:17 UTC (permalink / raw)
To: Thomas Gleixner
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tim609, uwu, wens, will, ycliang, inochiama
Hi Thomas,
On Fri, Dec 08, 2023 at 04:54:34PM +0100, Thomas Gleixner wrote:
> On Wed, Nov 22 2023 at 20:12, Yu Chien Peter Lin wrote:
> > Currently, the implementation of the RISC-V INTC driver uses the
> > interrupt cause as hwirq and has a limitation of supporting a
>
> s/hwirq/hardware interrupt/
>
> Please spell things out. We are not on Xitter here.
>
> > maximum of 64 hwirqs. However, according to the privileged spec,
> > interrupt causes >= 16 are defined for platform use.
> >
> > This limitation prevents us from fully utilizing the available
>
> This limitation prevents to fully utilize the ...
Okay, will fix.
Thanks,
Peter Lin
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v4 03/13] irqchip/riscv-intc: Introduce Andes hart-level interrupt controller
2023-12-08 16:01 ` Thomas Gleixner
@ 2023-12-12 10:28 ` Yu-Chien Peter Lin
0 siblings, 0 replies; 49+ messages in thread
From: Yu-Chien Peter Lin @ 2023-12-12 10:28 UTC (permalink / raw)
To: Thomas Gleixner
Cc: acme, adrian.hunter, ajones, alexander.shishkin, andre.przywara,
anup, aou, atishp, conor+dt, conor.dooley, conor, devicetree,
dminus, evan, geert+renesas, guoren, heiko, irogers,
jernej.skrabec, jolsa, jszhang, krzysztof.kozlowski+dt,
linux-arm-kernel, linux-kernel, linux-perf-users,
linux-renesas-soc, linux-riscv, linux-sunxi, locus84, magnus.damm,
mark.rutland, mingo, n.shubin, namhyung, palmer, paul.walmsley,
peterz, prabhakar.mahadev-lad.rj, rdunlap, robh+dt, samuel,
sunilvl, tim609, uwu, wens, will, ycliang, inochiama
Hi Thomas,
On Fri, Dec 08, 2023 at 05:01:36PM +0100, Thomas Gleixner wrote:
> On Wed, Nov 22 2023 at 20:12, Yu Chien Peter Lin wrote:
> > To share the riscv_intc_domain_map() with the generic RISC-V INTC and
> > ACPI, we add a chip parameter to riscv_intc_init_common(), so it can be
>
> s/we//
>
> See: Documentation/process/
>
> > passed to the irq_domain_set_info() as private data.
> > diff --git a/drivers/irqchip/irq-riscv-intc.c b/drivers/irqchip/irq-riscv-intc.c
> > index 2fdd40f2a791..30f0036c8978 100644
> > --- a/drivers/irqchip/irq-riscv-intc.c
> > +++ b/drivers/irqchip/irq-riscv-intc.c
> > @@ -17,6 +17,7 @@
> > #include <linux/module.h>
> > #include <linux/of.h>
> > #include <linux/smp.h>
> > +#include <linux/soc/andes/irq.h>
> >
> > static struct irq_domain *intc_domain;
> >
> > @@ -46,6 +47,31 @@ static void riscv_intc_irq_unmask(struct irq_data *d)
> > csr_set(CSR_IE, BIT(d->hwirq));
> > }
> >
> > +static void andes_intc_irq_mask(struct irq_data *d)
> > +{
> > + /*
> > + * Andes specific S-mode local interrupt causes (hwirq)
> > + * are defined as (256 + n) and controlled by n-th bit
> > + * of SLIE.
> > + */
> > + unsigned int mask = BIT(d->hwirq % BITS_PER_LONG);
>
> How is this supposed to be correct with BITS_PER_LONG == 64?
Yes, I should subtract ANDES_SLI_CAUSE_BASE directly here.
> > +
> > + if (d->hwirq < ANDES_SLI_CAUSE_BASE)
> > + csr_clear(CSR_IE, mask);
> > + else
> > + csr_clear(ANDES_CSR_SLIE, mask);
> > +}
> > +
> > +static void andes_intc_irq_unmask(struct irq_data *d)
> > +{
> > + unsigned int mask = BIT(d->hwirq % BITS_PER_LONG);
>
> Ditto.
>
> > + if (d->hwirq < ANDES_SLI_CAUSE_BASE)
> > + csr_set(CSR_IE, mask);
> > + else
> > + csr_set(ANDES_CSR_SLIE, mask);
> > +}
>
> > static int riscv_intc_domain_map(struct irq_domain *d, unsigned int irq,
> > irq_hw_number_t hwirq)
> > {
> > + struct irq_chip *chip = d->host_data;
> > +
> > irq_set_percpu_devid(irq);
> > - irq_domain_set_info(d, irq, hwirq, &riscv_intc_chip, d->host_data,
> > + irq_domain_set_info(d, irq, hwirq, chip, d->host_data,
>
> So this sets 'chip_data' to the chip itself. What's the point? Just set
> it to NULL as the chip obviously does not need chip_data at all.
Will fix. Thanks.
Best regards,
Peter Lin
> > handle_percpu_devid_irq, NULL, NULL);
> >
> > return 0;
> > @@ -112,11 +147,12 @@ static struct fwnode_handle *riscv_intc_hwnode(void)
> > return intc_domain->fwnode;
> > }
> >
> > -static int __init riscv_intc_init_common(struct fwnode_handle *fn)
> > +static int __init riscv_intc_init_common(struct fwnode_handle *fn,
> > + struct irq_chip *chip)
> > {
> > int rc;
> >
> > - intc_domain = irq_domain_create_tree(fn, &riscv_intc_domain_ops, NULL);
> > + intc_domain = irq_domain_create_tree(fn, &riscv_intc_domain_ops, chip);
> > if (!intc_domain) {
> > pr_err("unable to add IRQ domain\n");
> > return -ENXIO;
> > @@ -138,6 +174,7 @@ static int __init riscv_intc_init(struct device_node *node,
> > {
> > int rc;
> > unsigned long hartid;
> > + struct irq_chip *chip = &riscv_intc_chip;
>
> https://www.kernel.org/doc/html/latest/process/maintainer-tip.html#variable-declarations
>
> Thanks
>
> tglx
^ permalink raw reply [flat|nested] 49+ messages in thread
end of thread, other threads:[~2023-12-12 10:30 UTC | newest]
Thread overview: 49+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-22 12:12 [PATCH v4 00/13] Support Andes PMU extension Yu Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 01/13] riscv: errata: Rename defines for Andes Yu Chien Peter Lin
2023-11-24 14:57 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 02/13] irqchip/riscv-intc: Allow large non-standard interrupt number Yu Chien Peter Lin
2023-12-08 15:54 ` Thomas Gleixner
2023-12-12 10:17 ` Yu-Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 03/13] irqchip/riscv-intc: Introduce Andes hart-level interrupt controller Yu Chien Peter Lin
2023-12-08 16:01 ` Thomas Gleixner
2023-12-12 10:28 ` Yu-Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 04/13] dt-bindings: riscv: Add Andes interrupt controller compatible string Yu Chien Peter Lin
2023-11-23 14:38 ` Conor Dooley
2023-11-24 15:03 ` Lad, Prabhakar
2023-11-24 15:05 ` Conor Dooley
2023-11-29 6:43 ` Yu-Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 05/13] riscv: dts: renesas: r9a07g043f: Update compatible string to use Andes INTC Yu Chien Peter Lin
2023-11-22 16:36 ` Geert Uytterhoeven
2023-11-24 15:04 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 06/13] perf: RISC-V: Eliminate redundant interrupt enable/disable operations Yu Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 07/13] RISC-V: Move T-Head PMU to CPU feature alternative framework Yu Chien Peter Lin
2023-11-22 21:16 ` Guo Ren
2023-11-23 14:45 ` Conor Dooley
2023-11-22 12:12 ` [PATCH v4 08/13] perf: RISC-V: Introduce Andes PMU for perf event sampling Yu Chien Peter Lin
2023-11-24 15:06 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 09/13] dt-bindings: riscv: Add T-Head PMU extension description Yu Chien Peter Lin
2023-11-22 21:14 ` Guo Ren
2023-11-29 8:48 ` Yu-Chien Peter Lin
2023-11-30 8:29 ` Inochi Amaoto
2023-11-30 9:21 ` Yu-Chien Peter Lin
2023-11-30 12:16 ` Inochi Amaoto
2023-11-30 12:58 ` Conor Dooley
2023-11-30 23:11 ` Inochi Amaoto
2023-12-01 0:40 ` Conor Dooley
2023-12-01 0:57 ` Inochi Amaoto
2023-12-01 1:14 ` Inochi Amaoto
2023-12-06 3:14 ` Yu-Chien Peter Lin
2023-11-23 14:48 ` Conor Dooley
2023-11-29 8:47 ` Yu-Chien Peter Lin
2023-11-29 12:33 ` Conor Dooley
2023-11-22 12:12 ` [PATCH v4 10/13] dt-bindings: riscv: Add Andes " Yu Chien Peter Lin
2023-11-24 15:07 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 11/13] riscv: dts: allwinner: Add T-Head PMU extension Yu Chien Peter Lin
2023-11-22 21:12 ` Guo Ren
2023-11-23 14:58 ` Conor Dooley
2023-11-29 9:34 ` Yu-Chien Peter Lin
2023-11-22 12:12 ` [PATCH v4 12/13] riscv: dts: renesas: Add Andes " Yu Chien Peter Lin
2023-11-22 16:34 ` Geert Uytterhoeven
2023-11-24 15:07 ` Lad, Prabhakar
2023-11-22 12:12 ` [PATCH v4 13/13] riscv: andes: Support symbolic FW and HW raw events Yu Chien Peter Lin
2023-11-24 15:08 ` Lad, Prabhakar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).