lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231129073521.2127403-6-muralimk@amd.com>
Date:   Wed, 29 Nov 2023 07:35:20 +0000
From:   Muralidhara M K <muralimk@....com>
To:     <linux-edac@...r.kernel.org>
CC:     <linux-kernel@...r.kernel.org>, <bp@...en8.de>,
        <mchehab@...nel.org>, Muralidhara M K <muralidhara.mk@....com>
Subject: [PATCH v2 5/6] RAS: Add fixed Physical to logical CS ID mapping table

From: Muralidhara M K <muralidhara.mk@....com>

AMD MI300A models have a single Data Fabric (DF) instance per socket.
So, only one out of 4 AIDs are software-visible using PCI Device 18h.

Add a static lookup table for converting physical CS ID to logical
CS ID for mapping of all 4 respective AIDs in a socket.

Signed-off-by: Muralidhara M K <muralidhara.mk@....com>
---
Changes:
v1 -> v2 : None

 drivers/ras/amd/atl/denormalize.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/drivers/ras/amd/atl/denormalize.c b/drivers/ras/amd/atl/denormalize.c
index b233a26f68fc..4c127347a56e 100644
--- a/drivers/ras/amd/atl/denormalize.c
+++ b/drivers/ras/amd/atl/denormalize.c
@@ -442,6 +442,20 @@ static u16 get_logical_cs_fabric_id(struct addr_ctx *ctx)
 	return (phys_cs_fabric_id & df_cfg.node_id_mask) | log_cs_fabric_id;
 }
 
+/* Physical CS to Logical CS mapping for MI300 AIDs */
+u16 phy_to_logicalcs_mapping_mi300_aid[] = { 12, 13, 14, 15, 8, 9, 10, 11,
+					4, 5, 6, 7, 0, 1, 2, 3,
+					28, 29, 30, 31, 24, 25, 26, 27,
+					20, 21, 22, 23, 16, 17, 18, 19};
+
+static u16 get_logical_cs_fabric_id_mi300_die(struct addr_ctx *ctx)
+{
+	if (ctx->inst_id >= sizeof(phy_to_logicalcs_mapping_mi300_aid))
+		return -EINVAL;
+
+	return phy_to_logicalcs_mapping_mi300_aid[ctx->inst_id];
+}
+
 static int denorm_addr_common(struct addr_ctx *ctx)
 {
 	u64 denorm_addr;
@@ -451,7 +465,11 @@ static int denorm_addr_common(struct addr_ctx *ctx)
 	 * Convert the original physical CS Fabric ID to a logical value.
 	 * This is required for non-power-of-two and other interleaving modes.
 	 */
-	ctx->cs_fabric_id = get_logical_cs_fabric_id(ctx);
+	if (df_cfg.rev == DF4p5 && df_cfg.flags.heterogeneous)
+		ctx->cs_fabric_id = (ctx->cs_fabric_id & df_cfg.node_id_mask) |
+				     get_logical_cs_fabric_id_mi300_die(ctx);
+	else
+		ctx->cs_fabric_id = get_logical_cs_fabric_id(ctx);
 
 	denorm_addr = make_space_for_cs_id(ctx);
 	cs_id = calculate_cs_id(ctx);
-- 
2.25.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ