From: Alex Kluver <alex.kluver@hpe.com>
To: linux-edac@vger.kernel.org, linux-efi@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: ardb@kernel.org, mchehab@kernel.org, bp@alien8.de,
russ.anderson@hpe.com, dimitri.sivanich@hpe.com,
kluveralex@gmail.com, Alex Kluver <alex.kluver@hpe.com>
Subject: [PATCH v2 2/2] cper,edac,efi: Memory Error Record: bank group/address and chip id
Date: Wed, 19 Aug 2020 09:35:44 -0500 [thread overview]
Message-ID: <20200819143544.155096-3-alex.kluver@hpe.com> (raw)
In-Reply-To: <20200819143544.155096-1-alex.kluver@hpe.com>
Updates to the UEFI 2.8 Memory Error Record allow splitting the bank field
into bank address and bank group, and using the last 3 bits of the extended
field as a chip identifier.
When needed, print correct version of bank field, bank group, and chip
identification
Based on UEFI 2.8 Table 299. Memory Error Record
Reviewed-by: Steve Wahl <steve.wahl@hpe.com>
Reviewed-by: Kyle Meyer <kyle.meyer@hpe.com>
Reviewed-by: Russ Anderson <russ.anderson@hpe.com>
Signed-off-by: Alex Kluver <alex.kluver@hpe.com>
---
v1 -> v2:
* Add static inline cper_get_mem_extension() to make it
more readable, as suggested by Borislav Petkov.
* Add second patch for bank field, bank group, and chip id.
---
drivers/edac/ghes_edac.c | 9 +++++++++
drivers/firmware/efi/cper.c | 9 +++++++++
include/linux/cper.h | 8 ++++++++
3 files changed, 26 insertions(+)
diff --git a/drivers/edac/ghes_edac.c b/drivers/edac/ghes_edac.c
index 98fcdaf72a09..31eb72b67265 100644
--- a/drivers/edac/ghes_edac.c
+++ b/drivers/edac/ghes_edac.c
@@ -337,6 +337,12 @@ void ghes_edac_report_mem_error(int sev, struct cper_sec_mem_err *mem_err)
p += sprintf(p, "rank:%d ", mem_err->rank);
if (mem_err->validation_bits & CPER_MEM_VALID_BANK)
p += sprintf(p, "bank:%d ", mem_err->bank);
+ if (mem_err->validation_bits & CPER_MEM_VALID_BANK_GROUP)
+ p += sprintf(p, "bank_group:%d ",
+ mem_err->bank >> CPER_MEM_BANK_GROUP_SHIFT);
+ if (mem_err->validation_bits & CPER_MEM_VALID_BANK_ADDRESS)
+ p += sprintf(p, "bank_address:%d ",
+ mem_err->bank & CPER_MEM_BANK_ADDRESS_MASK);
if (mem_err->validation_bits & (CPER_MEM_VALID_ROW | CPER_MEM_VALID_ROW_EXT)) {
u32 row = mem_err->row;
@@ -362,6 +368,9 @@ void ghes_edac_report_mem_error(int sev, struct cper_sec_mem_err *mem_err)
if (index >= 0)
e->top_layer = index;
}
+ if (mem_err->validation_bits & CPER_MEM_VALID_CHIP_ID)
+ p += sprintf(p, "chipID: %d ",
+ mem_err->extended >> CPER_MEM_CHIP_ID_SHIFT);
if (p > e->location)
*(p - 1) = '\0';
diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c
index a60acd17bcaa..e15d484b6a5a 100644
--- a/drivers/firmware/efi/cper.c
+++ b/drivers/firmware/efi/cper.c
@@ -232,6 +232,12 @@ static int cper_mem_err_location(struct cper_mem_err_compact *mem, char *msg)
n += scnprintf(msg + n, len - n, "rank: %d ", mem->rank);
if (mem->validation_bits & CPER_MEM_VALID_BANK)
n += scnprintf(msg + n, len - n, "bank: %d ", mem->bank);
+ if (mem->validation_bits & CPER_MEM_VALID_BANK_GROUP)
+ n += scnprintf(msg + n, len - n, "bank_group: %d ",
+ mem->bank >> CPER_MEM_BANK_GROUP_SHIFT);
+ if (mem->validation_bits & CPER_MEM_VALID_BANK_ADDRESS)
+ n += scnprintf(msg + n, len - n, "bank_address: %d ",
+ mem->bank & CPER_MEM_BANK_ADDRESS_MASK);
if (mem->validation_bits & CPER_MEM_VALID_DEVICE)
n += scnprintf(msg + n, len - n, "device: %d ", mem->device);
if (mem->validation_bits & (CPER_MEM_VALID_ROW | CPER_MEM_VALID_ROW_EXT)) {
@@ -254,6 +260,9 @@ static int cper_mem_err_location(struct cper_mem_err_compact *mem, char *msg)
if (mem->validation_bits & CPER_MEM_VALID_TARGET_ID)
scnprintf(msg + n, len - n, "target_id: 0x%016llx ",
mem->target_id);
+ if (mem->validation_bits & CPER_MEM_VALID_CHIP_ID)
+ scnprintf(msg + n, len - n, "chip_id: %d ",
+ mem->extended >> CPER_MEM_CHIP_ID_SHIFT);
msg[n] = '\0';
return n;
diff --git a/include/linux/cper.h b/include/linux/cper.h
index bd2d8a77a784..6a511a1078ca 100644
--- a/include/linux/cper.h
+++ b/include/linux/cper.h
@@ -231,10 +231,18 @@ enum {
#define CPER_MEM_VALID_CARD_HANDLE 0x10000
#define CPER_MEM_VALID_MODULE_HANDLE 0x20000
#define CPER_MEM_VALID_ROW_EXT 0x40000
+#define CPER_MEM_VALID_BANK_GROUP 0x80000
+#define CPER_MEM_VALID_BANK_ADDRESS 0x100000
+#define CPER_MEM_VALID_CHIP_ID 0x200000
#define CPER_MEM_EXT_ROW_MASK 0x3
#define CPER_MEM_EXT_ROW_SHIFT 16
+#define CPER_MEM_BANK_ADDRESS_MASK 0xff
+#define CPER_MEM_BANK_GROUP_SHIFT 8
+
+#define CPER_MEM_CHIP_ID_SHIFT 5
+
#define CPER_PCIE_VALID_PORT_TYPE 0x0001
#define CPER_PCIE_VALID_VERSION 0x0002
#define CPER_PCIE_VALID_COMMAND_STATUS 0x0004
--
2.26.2
next prev parent reply other threads:[~2020-08-19 14:37 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-19 14:35 [PATCH v2 0/2] UEFI v2.8 Memory Error Record Updates Alex Kluver
2020-08-19 14:35 ` [PATCH v2 1/2] edac,ghes,cper: Add Row Extension to Memory Error Record Alex Kluver
2020-09-15 16:33 ` Borislav Petkov
2020-09-15 17:07 ` Ard Biesheuvel
2020-09-15 17:12 ` Ard Biesheuvel
2020-09-15 17:19 ` Borislav Petkov
2020-09-16 13:09 ` Ard Biesheuvel
2020-09-16 18:10 ` Borislav Petkov
2020-09-16 18:12 ` Russ Anderson
2020-09-18 8:30 ` [tip: efi/core] " tip-bot2 for Alex Kluver
2020-09-30 5:22 ` tip-bot2 for Alex Kluver
2020-08-19 14:35 ` Alex Kluver [this message]
2020-09-15 16:36 ` [PATCH v2 2/2] cper,edac,efi: Memory Error Record: bank group/address and chip id Borislav Petkov
2020-09-18 8:30 ` [tip: efi/core] " tip-bot2 for Alex Kluver
2020-09-30 5:22 ` tip-bot2 for Alex Kluver
2020-09-14 16:44 ` [PATCH v2 0/2] UEFI v2.8 Memory Error Record Updates Russ Anderson
2020-09-15 15:07 ` Ard Biesheuvel
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=20200819143544.155096-3-alex.kluver@hpe.com \
--to=alex.kluver@hpe.com \
--cc=ardb@kernel.org \
--cc=bp@alien8.de \
--cc=dimitri.sivanich@hpe.com \
--cc=kluveralex@gmail.com \
--cc=linux-edac@vger.kernel.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=russ.anderson@hpe.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.