From: Oliver Upton <oliver.upton@linux.dev>
To: D Scott Phillips <scott@os.amperecomputing.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
James Clark <james.clark@linaro.org>,
James Morse <james.morse@arm.com>,
Joey Gouly <joey.gouly@arm.com>,
Kevin Brodsky <kevin.brodsky@arm.com>,
Marc Zyngier <maz@kernel.org>, Mark Brown <broonie@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
"Rob Herring (Arm)" <robh@kernel.org>,
Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>,
Shiqi Liu <shiqiliu@hust.edu.cn>, Will Deacon <will@kernel.org>,
Yicong Yang <yangyicong@hisilicon.com>,
kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/2] arm64: errata: Work around AmpereOne's erratum AC04_CPU_23
Date: Tue, 15 Apr 2025 10:06:50 -0700 [thread overview]
Message-ID: <Z_6SKjdvje1Lpeo3@linux.dev> (raw)
In-Reply-To: <20250415154711.1698544-2-scott@os.amperecomputing.com>
Hi,
On Tue, Apr 15, 2025 at 08:47:11AM -0700, D Scott Phillips wrote:
> Updates to HCR_EL2 can rarely corrupt simultaneous translations from
> either earlier translations (back to the previous dsb) or later
> translations (up to the next isb). Put a dsb before and isb after writes
> to HCR_EL2.
>
> Signed-off-by: D Scott Phillips <scott@os.amperecomputing.com>
> ---
> arch/arm64/Kconfig | 13 +++++++++++++
> arch/arm64/include/asm/sysreg.h | 7 +++++++
> arch/arm64/kernel/cpu_errata.c | 14 ++++++++++++++
> arch/arm64/tools/cpucaps | 1 +
> 4 files changed, 35 insertions(+)
>
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index e5fd87446a3b8..2a2e1c8de6a16 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -481,6 +481,19 @@ config AMPERE_ERRATUM_AC03_CPU_38
>
> If unsure, say Y.
>
> +config AMPERE_ERRATUM_AC04_CPU_23
> + bool "AmpereOne: AC04_CPU_23: Failure to synchronize writes to HCR_EL2 may corrupt address translations."
> + default y
> + help
> + This option adds an alternative code sequence to work around Ampere
> + errata AC04_CPU_23 on AmpereOne.
> +
> + Updates to HCR_EL2 can rarely corrupt simultaneous translations from
> + either earlier translations (back to the previous dsb) or later
> + translations (up to the next isb).
> +
> + If unsure, say Y.
> +
> config ARM64_WORKAROUND_CLEAN_CACHE
> bool
>
> diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
> index e7781f7e7f7a7..253de5bc68834 100644
> --- a/arch/arm64/include/asm/sysreg.h
> +++ b/arch/arm64/include/asm/sysreg.h
> @@ -1142,6 +1142,10 @@
> (IS_ENABLED(CONFIG_AMPERE_ERRATUM_AC03_CPU_36) && \
> __sysreg_is_hcr_el2(r) && \
> alternative_has_cap_unlikely(ARM64_WORKAROUND_AMPERE_AC03_CPU_36))
> +#define __hcr_el2_ac04_cpu_23(r) \
> + (IS_ENABLED(CONFIG_AMPERE_ERRATUM_AC04_CPU_23) && \
> + __sysreg_is_hcr_el2(r) && \
> + alternative_has_cap_unlikely(ARM64_WORKAROUND_AMPERE_AC04_CPU_23))
>
> /*
> * The "Z" constraint normally means a zero immediate, but when combined with
> @@ -1154,6 +1158,9 @@
> asm volatile("mrs %0, daif; msr daifset, #0xf;" \
> "msr hcr_el2, %x1; msr daif, %0" \
> : "=&r"(__daif) : "rZ" (__val)); \
> + } else if (__hcr_el2_ac04_cpu_23(r)) { \
> + asm volatile("dsb nsh; msr hcr_el2, %x0; isb" \
> + : : "rZ" (__val)); \
At least from your erratum description it isn't clear to me that this
eliminates the problem and only narrows the window of opportunity.
Couldn't the implementation speculatively fetch translations with an
unsynchronized HCR up to the ISB? Do we know what translation regimes
are affected by the erratum?
Thanks,
Oliver
next prev parent reply other threads:[~2025-04-15 17:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-15 15:47 [PATCH 1/2] arm64: errata: Work around AmpereOne's erratum AC03_CPU_36 D Scott Phillips
2025-04-15 15:47 ` [PATCH 2/2] arm64: errata: Work around AmpereOne's erratum AC04_CPU_23 D Scott Phillips
2025-04-15 17:06 ` Oliver Upton [this message]
2025-04-15 22:13 ` D Scott Phillips
2025-04-16 0:29 ` Oliver Upton
2025-04-16 23:05 ` D Scott Phillips
2025-04-16 7:11 ` Marc Zyngier
2025-04-16 23:06 ` D Scott Phillips
2025-04-15 18:38 ` Marc Zyngier
2025-04-15 17:12 ` [PATCH 1/2] arm64: errata: Work around AmpereOne's erratum AC03_CPU_36 Oliver Upton
2025-04-15 17:30 ` D Scott Phillips
2025-04-15 18:12 ` Oliver Upton
2025-04-15 18:17 ` D Scott Phillips
2025-04-16 7:19 ` Marc Zyngier
2025-04-16 23:14 ` D Scott Phillips
2025-04-25 2:02 ` D Scott Phillips
2025-04-27 12:21 ` Marc Zyngier
2025-04-28 16:35 ` D Scott Phillips
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=Z_6SKjdvje1Lpeo3@linux.dev \
--to=oliver.upton@linux.dev \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=james.clark@linaro.org \
--cc=james.morse@arm.com \
--cc=joey.gouly@arm.com \
--cc=kevin.brodsky@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=robh@kernel.org \
--cc=scott@os.amperecomputing.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=shiqiliu@hust.edu.cn \
--cc=will@kernel.org \
--cc=yangyicong@hisilicon.com \
/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;
as well as URLs for NNTP newsgroup(s).