From: Marc Zyngier <maz@misterjones.org>
To: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Tony Luck <tony.luck@intel.com>, Rob Herring <robh+dt@kernel.org>,
Robert Richter <rrichter@marvell.com>,
James Morse <james.morse@arm.com>,
kernel@pengutronix.de, Borislav Petkov <bp@alien8.de>,
York Sun <york.sun@nxp.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org
Subject: Re: [PATCH 1/1] drivers/edac: Add L1 and L2 error detection for A53 and A57
Date: Thu, 07 Jan 2021 11:05:14 +0000 [thread overview]
Message-ID: <87bfbf704e4c2f13b30fe7055b8dec40@misterjones.org> (raw)
In-Reply-To: <20210107103819.13552-2-s.hauer@pengutronix.de>
On 2021-01-07 10:38, Sascha Hauer wrote:
> The Cortex A53 and A57 cores have error detection capabilities for the
> L1/L2 Caches, this patch adds a driver for them.
>
> Unfortunately there is no robust way to inject errors into the caches,
> so this driver doesn't contain any code to actually test it. It has
> been tested though with code taken from an older version of this driver
> found here: https://lkml.org/lkml/2018/3/14/1203. For reasons stated
> in this thread the error injection code is not suitable for mainline,
> so it is removed from the driver.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> ---
> drivers/edac/Kconfig | 6 +
> drivers/edac/Makefile | 1 +
> drivers/edac/cortex_arm64_l1_l2.c | 218 ++++++++++++++++++++++++++++++
> 3 files changed, 225 insertions(+)
> create mode 100644 drivers/edac/cortex_arm64_l1_l2.c
>
> diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig
> index 81c42664f21b..116ad56534a4 100644
> --- a/drivers/edac/Kconfig
> +++ b/drivers/edac/Kconfig
> @@ -539,4 +539,10 @@ config EDAC_DMC520
> Support for error detection and correction on the
> SoCs with ARM DMC-520 DRAM controller.
>
> +config EDAC_CORTEX_ARM64_L1_L2
> + tristate "ARM Cortex A57/A53"
> + depends on ARM64
> + help
> + Support for L1/L2 cache error detection on ARM Cortex A57 and A53.
> +
> endif # EDAC
> diff --git a/drivers/edac/Makefile b/drivers/edac/Makefile
> index 464d3d8d850a..a324fbc1693e 100644
> --- a/drivers/edac/Makefile
> +++ b/drivers/edac/Makefile
> @@ -89,3 +89,4 @@ obj-$(CONFIG_EDAC_QCOM) += qcom_edac.o
> obj-$(CONFIG_EDAC_ASPEED) += aspeed_edac.o
> obj-$(CONFIG_EDAC_BLUEFIELD) += bluefield_edac.o
> obj-$(CONFIG_EDAC_DMC520) += dmc520_edac.o
> +obj-$(CONFIG_EDAC_CORTEX_ARM64_L1_L2) += cortex_arm64_l1_l2.o
> diff --git a/drivers/edac/cortex_arm64_l1_l2.c
> b/drivers/edac/cortex_arm64_l1_l2.c
> new file mode 100644
> index 000000000000..3b1e2f3ccab6
> --- /dev/null
> +++ b/drivers/edac/cortex_arm64_l1_l2.c
> @@ -0,0 +1,218 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Cortex A57 and A53 EDAC L1 and L2 cache error detection
> + *
> + * Copyright (c) 2020 Pengutronix, Sascha Hauer
> <s.hauer@pengutronix.de>
> + *
> + * Based on Code from:
> + * Copyright (c) 2018, NXP Semiconductor
> + * Author: York Sun <york.sun@nxp.com>
> + *
> + */
> +
> +#include <linux/module.h>
> +#include <linux/of_platform.h>
> +#include <linux/of_device.h>
> +#include <linux/bitfield.h>
> +#include <asm/smp_plat.h>
> +
> +#include "edac_module.h"
> +
> +#define DRVNAME "cortex-arm64-edac"
> +
> +#define CPUMERRSR_EL1_RAMID GENMASK(30, 24)
> +
> +#define CPUMERRSR_EL1_VALID BIT(31)
> +#define CPUMERRSR_EL1_FATAL BIT(63)
> +
> +#define L1_I_TAG_RAM 0x00
> +#define L1_I_DATA_RAM 0x01
> +#define L1_D_TAG_RAM 0x08
> +#define L1_D_DATA_RAM 0x09
> +#define L1_D_DIRTY_RAM 0x14
> +#define TLB_RAM 0x18
> +
> +#define L2MERRSR_EL1_VALID BIT(31)
> +#define L2MERRSR_EL1_FATAL BIT(63)
> +
> +struct merrsr {
> + u64 cpumerr;
> + u64 l2merr;
> +};
> +
> +#define MESSAGE_SIZE 64
> +
> +#define SYS_CPUMERRSR_EL1 sys_reg(3, 1, 15, 2, 2)
> +#define SYS_L2MERRSR_EL1 sys_reg(3, 1, 15, 2, 3)
Oh, IMPDEF registers...
This means that a kernel with this driver running in a virtualized
environment is likely to just take an UNDEF and die. Not great.
Also, how does it work if EL3 implements the same functionality?
M.
--
Who you jivin' with that Cosmik Debris?
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-01-07 11:08 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-07 10:38 [PATCH v3 0/1] Add L1 and L2 error detection for A53 and A57 Sascha Hauer
2021-01-07 10:38 ` [PATCH 1/1] drivers/edac: " Sascha Hauer
2021-01-07 11:05 ` Marc Zyngier [this message]
2021-01-07 11:15 ` Mark Rutland
2021-01-07 12:36 ` Sascha Hauer
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=87bfbf704e4c2f13b30fe7055b8dec40@misterjones.org \
--to=maz@misterjones.org \
--cc=bp@alien8.de \
--cc=james.morse@arm.com \
--cc=kernel@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-edac@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=robh+dt@kernel.org \
--cc=rrichter@marvell.com \
--cc=s.hauer@pengutronix.de \
--cc=tony.luck@intel.com \
--cc=york.sun@nxp.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