From: Tomohiro Misono <misono.tomohiro@fujitsu.com>
To: Tomohiro Misono <misono.tomohiro@fujitsu.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
Randy Dunlap <rdunlap@infradead.org>,
Marc Zyngier <maz@kernel.org>, Thomas Gleixner <tglx@kernel.org>,
Radu Rendec <radu@rendec.net>
Cc: Kohei Enju <enju.kohei@fujitsu.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
linux-perf-users@vger.kernel.org
Subject: [PATCH 3/4] perf: arm_pmu: Add workaround for FUJITSU-MONAKA Erratum E#030002
Date: Fri, 02 Oct 2026 19:26:51 +0900 [thread overview]
Message-ID: <20261002-monaka-fix-for-upstream-v1-3-4aec0b0cbe34@fujitsu.com> (raw)
In-Reply-To: <20261002-monaka-fix-for-upstream-v1-0-4aec0b0cbe34@fujitsu.com>
FUJITSU-MONAKA Erratum E#030002 affects FUJITSU-MONAKA CPU.
On affected FUJITSU-MONAKA CPUs, after a PMU event counter is
stopped at a value just before overflow, an overflow might still
be incorrectly detected, resulting interrupt storm in some case.
Work around the erratum by avoiding programming PMU event counters
with values within five counts of overflow.
Signed-off-by: Tomohiro Misono <misono.tomohiro@fujitsu.com>
---
Documentation/arch/arm64/silicon-errata.rst | 2 ++
arch/arm64/Kconfig | 17 +++++++++++++++++
arch/arm64/include/asm/cpucaps.h | 2 ++
arch/arm64/kernel/cpu_errata.c | 10 ++++++++++
arch/arm64/tools/cpucaps | 1 +
drivers/perf/arm_pmu.c | 13 +++++++++++++
6 files changed, 45 insertions(+)
diff --git a/Documentation/arch/arm64/silicon-errata.rst b/Documentation/arch/arm64/silicon-errata.rst
index 8ab6284e3d10..429bdf9a3d9d 100644
--- a/Documentation/arch/arm64/silicon-errata.rst
+++ b/Documentation/arch/arm64/silicon-errata.rst
@@ -375,6 +375,8 @@ stable kernels.
+----------------+-----------------+-----------------+-----------------------------+
| Fujitsu | MONAKA | E#030001 | FUJITSU_ERRATUM_030001 |
+----------------+-----------------+-----------------+-----------------------------+
+| Fujitsu | MONAKA | E#030002 | FUJITSU_ERRATUM_030002 |
++----------------+-----------------+-----------------+-----------------------------+
+----------------+-----------------+-----------------+-----------------------------+
| ASR | ASR8601 | #8601001 | N/A |
+----------------+-----------------+-----------------+-----------------------------+
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 38248a31d5f1..348d9836d2c2 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -1331,6 +1331,23 @@ config FUJITSU_ERRATUM_030001
If unsure, say Y.
+config FUJITSU_ERRATUM_030002
+ bool "FUJITSU-MONAKA erratum E#030002: PMU overflow may be incorrectly detected"
+ depends on ARM_PMUV3
+ default y
+ help
+ This option adds a workaround for FUJITSU-MONAKA erratum E#030002.
+ On affected FUJITSU-MONAKA CPUs, after a PMU event counter is
+ stopped at a value just before overflow, an overflow might still
+ be incorrectly detected.
+
+ Work around the erratum by avoiding programming PMU event counters
+ with values within five counts of overflow.
+
+ The workaround only affects the FUJITSU-MONAKA.
+
+ If unsure, say Y.
+
config HISILICON_ERRATUM_161600802
bool "Hip07 161600802: Erroneous redistributor VLPI base"
default y
diff --git a/arch/arm64/include/asm/cpucaps.h b/arch/arm64/include/asm/cpucaps.h
index 9220b917ec20..c0a0452daf94 100644
--- a/arch/arm64/include/asm/cpucaps.h
+++ b/arch/arm64/include/asm/cpucaps.h
@@ -68,6 +68,8 @@ cpucap_is_possible(const unsigned int cap)
return IS_ENABLED(CONFIG_ARM64_ERRATUM_4193714);
case ARM64_WORKAROUND_FUJITSU_030001:
return IS_ENABLED(CONFIG_FUJITSU_ERRATUM_030001);
+ case ARM64_WORKAROUND_FUJITSU_030002:
+ return IS_ENABLED(CONFIG_FUJITSU_ERRATUM_030002);
case ARM64_MPAM:
/*
* KVM MPAM support doesn't rely on the host kernel supporting MPAM.
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
index 5b9dea3c761d..aa1dd1ae0f92 100644
--- a/arch/arm64/kernel/cpu_errata.c
+++ b/arch/arm64/kernel/cpu_errata.c
@@ -1036,6 +1036,16 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
{}
})),
},
+#endif
+#ifdef CONFIG_FUJITSU_ERRATUM_030002
+ {
+ .desc = "FUJITSU-MONAKA Erratum E#030002",
+ .capability = ARM64_WORKAROUND_FUJITSU_030002,
+ ERRATA_MIDR_RANGE_LIST(((const struct midr_range[]) {
+ MIDR_ALL_VERSIONS(MIDR_FUJITSU_MONAKA),
+ {}
+ })),
+ },
#endif
{
.desc = "Known broken GICv3 SEIS implementation",
diff --git a/arch/arm64/tools/cpucaps b/arch/arm64/tools/cpucaps
index 50a9aa0e2bf0..6bf19fc68def 100644
--- a/arch/arm64/tools/cpucaps
+++ b/arch/arm64/tools/cpucaps
@@ -133,3 +133,4 @@ WORKAROUND_SPECULATIVE_AT
WORKAROUND_SPECULATIVE_SSBS
WORKAROUND_SPECULATIVE_UNPRIV_LOAD
WORKAROUND_FUJITSU_030001
+WORKAROUND_FUJITSU_030002
diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c
index 115069565389..c0b8580d80ba 100644
--- a/drivers/perf/arm_pmu.c
+++ b/drivers/perf/arm_pmu.c
@@ -234,6 +234,19 @@ int armpmu_event_set_period(struct perf_event *event)
if (left > (max_period >> 1))
left = (max_period >> 1);
+#if IS_ENABLED(CONFIG_ARM64)
+ if (alternative_has_cap_unlikely(ARM64_WORKAROUND_FUJITSU_030002)) {
+ /*
+ * Due to the errata, overflow might be incorrectly detected in the handler
+ * when the counter is about to overflow in a single increment, resulting
+ * interrupt storm in some case. As the counter can increase by up to
+ * 5 at a time, set 6 here to prevent the condition.
+ */
+ if (left > 0 && left < 6)
+ left = 6;
+ }
+#endif
+
local64_set(&hwc->prev_count, (u64)-left);
armpmu->write_counter(event, (u64)(-left) & max_period);
--
2.43.0
next prev parent reply other threads:[~2026-10-02 10:28 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-02 10:26 [PATCH 0/4] arm64: Add workarounds for FUJITSU-MONAKA CPU Tomohiro Misono
2026-10-02 10:26 ` [PATCH 1/4] arm64: cputype: Add FUJITSU MONAKA definition Tomohiro Misono
2026-10-02 10:26 ` [PATCH 2/4] arm64: tlb: Add tlbi workaround for FUJITSU-MONAKA Erratum E#030001 Tomohiro Misono
2026-10-02 12:43 ` Will Deacon
2026-10-06 9:48 ` Tomohiro Misono (Fujitsu)
2026-10-02 13:01 ` Mark Rutland
2026-10-06 9:45 ` Tomohiro Misono (Fujitsu)
2026-10-02 10:26 ` Tomohiro Misono [this message]
2026-10-02 12:44 ` [PATCH 3/4] perf: arm_pmu: Add workaround for FUJITSU-MONAKA Erratum E#030002 Will Deacon
2026-10-06 9:52 ` Tomohiro Misono (Fujitsu)
2026-10-02 10:26 ` [PATCH 4/4] irqchip/gicv3: Add workaround for FUJITSU-MONAKA erratum E#030003 Tomohiro Misono
2026-10-02 12:26 ` Marc Zyngier
2026-10-06 9:08 ` Kohei Enju
2026-10-06 9:42 ` Marc Zyngier
2026-10-07 8:17 ` Kohei Enju
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261002-monaka-fix-for-upstream-v1-3-4aec0b0cbe34@fujitsu.com \
--to=misono.tomohiro@fujitsu.com \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=enju.kohei@fujitsu.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=radu@rendec.net \
--cc=rdunlap@infradead.org \
--cc=skhan@linuxfoundation.org \
--cc=tglx@kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox