From nobody Thu Sep 24 14:26:24 2026 Received: from CH5PR02CU005.outbound.protection.outlook.com (mail-northcentralusazon11012066.outbound.protection.outlook.com [40.107.200.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CBB644C9E00; Tue, 22 Sep 2026 20:23:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.200.66 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108635; cv=fail; b=pg1lojKwXFFqkdtClX3supJqp5IKyAgZ+gRojvbKJiktyJGyQdjTxOE8AgE5gnKFkZmtzo631Ni0aNDeFXo10ayZd4QJO/00/zkPuNCzVxswD6g5+/1YdzxC4vFCptNLmbmE/aoZNoYO6TeKSf/74jXRpJIKrW0GAtpl8BQRXsI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108635; c=relaxed/simple; bh=fgl8K2G2mEYm0TbM1kK6I/tcydp1shlswC5LSoC/YGs=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=M4vbtMtAKIH90LUZDLjoLMkUxkonfu0GFx61oOSwrTUQYg3Yln9VfGdDj5axbT+HBfhjAx266tj5an6FeazAXAh8DJKrzPkBHVv0LW3NdSLeNSpW4jslaetLbeTKV4gcYw2XDxiUudndWHpQ9Ou/pSM9EaY+ToKgOnVjrb5bWN4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=xcnn7PrG; arc=fail smtp.client-ip=40.107.200.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="xcnn7PrG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vl/oti7ZPKZcUH7ZlweqJyYqIqCFSRhKTWK4Ab4Dom8Cq0i+3CEG8h4geqqqhwCVuTy8p2wG9Z9iNJM+RHvqcbpx/WbrEmd3O5oFggOmA6MOwnb+jvusbmvUtyLEy9Z6mce0oUTrbehrB83vgMK727IyG4J0TDbk1tMUW4bsZymJaBwJQ/ybotj1IskpkHRb4OYa30vWc3KghL0MHcVNlbFM2mR5lsBqvdVnTBDGQ433A+j5tdQxkfJ0s4AxXTIypgTXnyoucBXD0l4L5moIBENyAH72gOvJxfMLQycMvxpqRiq6vH9LjyBIeOJwbXSNo0P21JDOlYkeGvCoa7itgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=VrD9KNDkYMxjZsmr4O9UNRTp5oJnmf7HlGCPpZu3FTo=; b=Ih++3ozpA23eVjkRBtq+ulMdhNOwQNTGO5Kk/Mh/CzPoMewyHdNn61/HoYiMglFhEf1Di9Tx4PWmLtID7CIZHM+IqLP4naSfSfUEE5ZIotmpS7Zeut6q+LkMCESbB8XtoKA+ZhS7hQME+LhtEVTTomG97KRw9/aItGGXFIkDjbZhB9dERVOBpRXl5vQeaSpFQwBQqb6MdJ93OaXhNwylVSFMDfATf4LHT8xvo5RDg5aOBpRcBQ46a6yOB9bnYBp+slOqiTiL7ObPLHyoytTDSDCLic5IWGtHrRjeO7I32mdUlHBN4oE5F9TRXEeB64OxuQz1CnpJIOh5djMwq/0uzg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=alien8.de smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VrD9KNDkYMxjZsmr4O9UNRTp5oJnmf7HlGCPpZu3FTo=; b=xcnn7PrGjcMmup9QEO3Iosf5ZM/3w+6zE//kFpWVQLGD1E/2Ujyky5h+EDUegO70PCxYfRlRJ1F/4niS79zt3qndCIJGbNInYx75M8kXeY2JJgbJ988EViXhnY1KgEdCloXRwBH/a7dCqeWs0yQh5EsiCkOHpVN11L+Ngy6qbWg= Received: from SJ0PR13CA0020.namprd13.prod.outlook.com (2603:10b6:a03:2c0::25) by SN7PR12MB8028.namprd12.prod.outlook.com (2603:10b6:806:341::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.16; Tue, 22 Sep 2026 20:23:34 +0000 Received: from SJ1PEPF000037A8.namprd03.prod.outlook.com (2603:10b6:a03:2c0:cafe::28) by SJ0PR13CA0020.outlook.office365.com (2603:10b6:a03:2c0::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.11 via Frontend Transport; Tue, 22 Sep 2026 20:23:34 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SJ1PEPF000037A8.mail.protection.outlook.com (10.167.244.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 20:23:34 +0000 Received: from quartz-7b1chost.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49; Tue, 22 Sep 2026 15:23:28 -0500 From: Yazen Ghannam To: , CC: , Yazen Ghannam Subject: [PATCH v10 1/7] RAS/AMD/ATL: Make PRM address translation support builtin Date: Tue, 22 Sep 2026 15:23:11 -0500 Message-ID: <20260922202318.4079080-2-yazen.ghannam@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260922202318.4079080-1-yazen.ghannam@amd.com> References: <20260922202318.4079080-1-yazen.ghannam@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF000037A8:EE_|SN7PR12MB8028:EE_ X-MS-Office365-Filtering-Correlation-Id: d0e65383-1e1a-4a4a-aae4-08df18e76076 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|23010399003|82310400026|36860700016|1800799024|6133799003|22082099003|18002099003|56012099006|11063799006|10067099003; X-Microsoft-Antispam-Message-Info: uWlKvpa5PR6vOrNAJ4uf29kq2SAdr2BxcEYUeeJxHHVn0WArc2fMSS1oBaI2C0tUNkFMW+oh971pecrphEOpvZybDfVYE3uCgNvrrTObdVFhk/M/tVgEHgvCKb77TLSSuA6EhNgazqGuu9JSQlea+3Clf+Zrf7YQI06Ak2nR2T5RI7wCQP91Amn3iMt79ohnZd11vrA1JLaJW47EFlNN7xDLLm4d6a+CvI1QcOlNjYxTGe9fmJ5g+wEYSnDOH41p30yqQAnychcjoRJ/Xvn1y+XsBIRWuWPTh2rN6g0RKbG9LanFl3bQPXIgNDCg7TBmXWDErV+IOay25R+Umj+JqiDxyiuy9amWOOppJrIymgts+hjfswuk4enKs1ONJXNM/wBtyckoVBJfhp2PaqnCvbiJrSQIrlR7/ah3qX6xLZ+G2Y2DeB1nZ+ChacyJFJMFx8qi1n2CMI8xIG+2gsZzkV1/xbXhgoTgqUhtzfPluvPad/W6bTZV01MambVju5KoHfLYBgrY38iOyAnxAeBKnNRS1OLts1oMgnQxuFGFVCGXyz9xC+U2aFNnTrlIOtBJ6DJFGXvia2/chCc6L0giBFLR4rXCSlFSCnOO3bgQQ073+KTEPw6ZQrbgs85rSwgIcIiuPPSlCPV0QFRzfb6jwnziEaSdhd9gkllLnH9sshZpsEp6XgT4FREylLOvwCH7U8gHLkjMoteq61aLdjeEaQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(23010399003)(82310400026)(36860700016)(1800799024)(6133799003)(22082099003)(18002099003)(56012099006)(11063799006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +2mBwRS23LjAtghx+BKe0gRRBUgSIpFUuLQNdrY3e/LbRvJZTsbi+ZLgNfI3ULOzvspqlb031r802MxJVTOl3OIGk+yEE/R9ax1wavl/rslAnk9qGe3HKekd09UcCUZWhsdAkSYE3H9AfI9hCZLdHQyw82DWHe4L/8mbP8qyg01LX5xq+8A+g5xVMzzmwg6/cUBc2CfMSeGR0g5OzFxGecyafUwnZOJ5u4wSqEf/0a5wxkmcztOn3I5uMMgxg1dJOpOjBgx6oQ25GikBApB7mAXkAwh3Upt3ZFast+PCJqVhZKIQw0AvnodovhnGcHr77NVaMyyK4vH3jIU2xFRWCu5qz0/j/V6Q2hm3WyJ0E5w+nwzc3Peon4Uyazj/jBPPuwN+BfXghYHhFA4rbwV8nN3Ckc4fAYLM/j8dG184HTN4zvHS7a7XlY1G29bROBtT X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 20:23:34.3554 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d0e65383-1e1a-4a4a-aae4-08df18e76076 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF000037A8.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB8028 Content-Type: text/plain; charset="utf-8" PRM (Platform Runtime Mechanism) is the only address translation method for current and future AMD systems. The library should therefore always include it. The PRM helpers in already provide stubs that return an error when CONFIG_ACPI_PRMT is disabled. Make prm.c builtin. The library then falls back to native translation at runtime when no PRM handler is available. Assisted-by: LLM Signed-off-by: Yazen Ghannam --- drivers/ras/amd/atl/Kconfig | 4 ---- drivers/ras/amd/atl/Makefile | 3 +-- drivers/ras/amd/atl/internal.h | 8 -------- drivers/ras/amd/atl/prm.c | 2 +- 4 files changed, 2 insertions(+), 15 deletions(-) diff --git a/drivers/ras/amd/atl/Kconfig b/drivers/ras/amd/atl/Kconfig index 44c2fd7febc5..29befaf2a1e2 100644 --- a/drivers/ras/amd/atl/Kconfig +++ b/drivers/ras/amd/atl/Kconfig @@ -19,7 +19,3 @@ config AMD_ATL =20 Enable this option if using DRAM ECC on Zen-based systems and OS-based error handling. - -config AMD_ATL_PRM - depends on AMD_ATL && ACPI_PRMT - def_bool y diff --git a/drivers/ras/amd/atl/Makefile b/drivers/ras/amd/atl/Makefile index b56892c0c0d9..ff52452b678f 100644 --- a/drivers/ras/amd/atl/Makefile +++ b/drivers/ras/amd/atl/Makefile @@ -12,9 +12,8 @@ amd_atl-y +=3D core.o amd_atl-y +=3D dehash.o amd_atl-y +=3D denormalize.o amd_atl-y +=3D map.o +amd_atl-y +=3D prm.o amd_atl-y +=3D system.o amd_atl-y +=3D umc.o =20 -amd_atl-$(CONFIG_AMD_ATL_PRM) +=3D prm.o - obj-$(CONFIG_AMD_ATL) +=3D amd_atl.o diff --git a/drivers/ras/amd/atl/internal.h b/drivers/ras/amd/atl/internal.h index 82a56d9c2be1..4fc4bc3c3500 100644 --- a/drivers/ras/amd/atl/internal.h +++ b/drivers/ras/amd/atl/internal.h @@ -287,15 +287,7 @@ u64 remove_base_and_hole(struct addr_ctx *ctx, u64 add= r); /* GUIDs for PRM handlers */ extern const guid_t norm_to_sys_guid; =20 -#ifdef CONFIG_AMD_ATL_PRM unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64 umc_bank_inst_id,= unsigned long addr); -#else -static inline unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64 umc= _bank_inst_id, - unsigned long addr) -{ - return -ENODEV; -} -#endif =20 /* * Make a gap in @data that is @num_bits long starting at @bit_num. diff --git a/drivers/ras/amd/atl/prm.c b/drivers/ras/amd/atl/prm.c index 0f9bfa96e16a..eba9d104d09e 100644 --- a/drivers/ras/amd/atl/prm.c +++ b/drivers/ras/amd/atl/prm.c @@ -44,7 +44,7 @@ unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64 = bank_id, unsigned long if (!ret) return ret_addr; =20 - if (ret =3D=3D -ENODEV) + if (ret =3D=3D -ENODEV || ret =3D=3D -EOPNOTSUPP) pr_debug("PRM module/handler not available\n"); else pr_notice_once("PRM address translation failed\n"); --=20 2.43.0 From nobody Thu Sep 24 14:26:24 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012020.outbound.protection.outlook.com [40.107.209.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC72D4C33CD; Tue, 22 Sep 2026 20:23:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.20 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108646; cv=fail; b=HL9wa3/A8zBFeyRYbLy3EvCZ8AYBMP4e8XrgFxjSy2tp9vjLg1hEooK20U4u7FZRm/lawaF4kS/MW+9b6qyZp99IGbzseFo2Gk4lXDDz0EWXQbjlmoEHIR+MxjbzXaSnp9o8mSOIlROv2xYPf7GuOHiQE4Jr33w6VqMxnwnUFOk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108646; c=relaxed/simple; bh=wcXTiJ4iKzgDwkCBXCsrGhnKj/GrMG6GBuMms7eop30=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gaKhTwljdzh3+BK+KnNWpzfx/YYrFfNQAWF4NWw1vcWtAgoikc5O9DcaTVnNnTaQ/NuVGggENeiQ+wILw1lo1dMSF40koPGDkvAGsF5eLmhroS6Y5GJAAXI5aHDpTf58UtTYtczc7BWkKHm6D1BPeZYUdHXDdL+EBkkfbGlDdjE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=yHjjklTN; arc=fail smtp.client-ip=40.107.209.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="yHjjklTN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=V2Z8TB3xwGrPFT9U5SoWK3ZmtK8J5eKohMVtIGoysb01GIPBhJGjAp2ESrDzV2eDVSOreyRQ8F4WCUo7wRjhZVxjSnBvu5agFcVf4O91QZ+PUMD8YpmL3o/dg+OAQQNRCLrx9vmYfmtXwq4TZxdDSh01Lv1lYFp75Y88by8q+Y5g4QwMszAPAtsEmT4TjVSFB+idxzeDIhcakGMLNl6INyyIj1rRmsva09487VPN035qBrF7JYbA9VwP92mgO1cvnW2sGCvNySIioJJIFm+HVBdrchsB4XM0R/yH98kOJKLHNNF0E9LMWm/e7zqveEyZHiLhKTGtlrYi9jv2rL2XpA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ROx5WcDztuEAjn6hBciXYbBkgPEq/HUz/0B6DLfOWuI=; b=Ipt9ELxIrdgpTf0T2Xe3y43SAEoyMKQlZ7xcGxMiJg++Kga6T16JHperk3WXYb6qMCcdbPbgb0cjVQxUvoDDXIbBlGlf2dsC1mbHxr03ldZDGfGrKKHYZUt9OT0W5nFAQ4JeqUGrrqTO9Sr/vOC2cWhQw9ChPAd/kmvcpFa+T1tNtEaOhsz+R1zIXgLDjOTqz4LNRy2qoYEklKFGNkuF/c2wyPPCkluEu/xj2jDAKAyqyvk7JbsL2AjLMti+wdTHjb2Mthp6z9xRhIS3lHNj2HETWvl6IGjyFA2ydAIvKucld7I5vmG1hbxDnlr0xQxGIYKGDdeDLyovtQ3ZD/Yt8A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=alien8.de smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ROx5WcDztuEAjn6hBciXYbBkgPEq/HUz/0B6DLfOWuI=; b=yHjjklTNn2sgPMNZ0/PvJw2RDLPADaFSCvInghA1ZtV9/xBjQALizNXTDjed1Sz0eGHLlVLwT2XzAVLSB+AXfP+uUTFTxR97xUcbaklHnFbNV0mOk0XRLu+Zr5SmvgrtXIiBYEiQxZVUCZNkq8iIeMnd8dAZehyjF8lCJI2kGJg= Received: from SJ0PR13CA0002.namprd13.prod.outlook.com (2603:10b6:a03:2c0::7) by IA1PR12MB7759.namprd12.prod.outlook.com (2603:10b6:208:420::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.16; Tue, 22 Sep 2026 20:23:38 +0000 Received: from SJ1PEPF000037A8.namprd03.prod.outlook.com (2603:10b6:a03:2c0:cafe::42) by SJ0PR13CA0002.outlook.office365.com (2603:10b6:a03:2c0::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.12 via Frontend Transport; Tue, 22 Sep 2026 20:23:35 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SJ1PEPF000037A8.mail.protection.outlook.com (10.167.244.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 20:23:35 +0000 Received: from quartz-7b1chost.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49; Tue, 22 Sep 2026 15:23:29 -0500 From: Yazen Ghannam To: , CC: , Yazen Ghannam Subject: [PATCH v10 2/7] RAS/AMD/ATL: Refactor PRM address translation into a common helper Date: Tue, 22 Sep 2026 15:23:12 -0500 Message-ID: <20260922202318.4079080-3-yazen.ghannam@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260922202318.4079080-1-yazen.ghannam@amd.com> References: <20260922202318.4079080-1-yazen.ghannam@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF000037A8:EE_|IA1PR12MB7759:EE_ X-MS-Office365-Filtering-Correlation-Id: 5751d30f-c1c4-40f7-19d4-08df18e76151 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|36860700016|1800799024|82310400026|23010399003|11063799006|5023799004|56012099006|3023799007|10067099003|6133799003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: Cfcs0z9hB5H5o5go1ivPWYjs/HK8AdGJN4S6kT7PBQC9XE5KX0+IZwlA9Y+9CR6Cv1X/Hzp1g+4PXlN9y1uRaECWYwmWiA9UhdRTvoh333PBfzamSGgP2ueVxeiGojveIbGtu67noeL29d77K4qP+ke5l0t3zYTeXILEr9y2kqGKk6xQsF7Wt/YJN4RItxXKdAiKDZMW1Vo8csxW0ZQAW+pJGm03gOBoy3fSy0t0btdhul66iC72DOlu12DeEGEcxFnOq+V8VyDARcYjV2vOXnShmfd+GT60fcoaE0XEF9QgR92qO1zHhzyvhbxViX/RnTCvy6aAG1oTK+XIJ9FrXNAZtWG6cWzPwziiwNzocO6mtgAsoj0tqj7E6XlphnrjQV7STs4u0ZoRjNv1XFfj/TjKu83D/JxRtGIjmTScIHandO2V2BAMG7v4WcS3gXRlmgWNyRAt4MEN8s2WOWhqWHKW26FaRUj9J54q7KlhUKoixbGEX+y6bh3LKRigBf5jcywbTGmwW24Z2wjfoi0bO9XecMfAbyF5nxh1jIEbz8hnCTVdawwOHcBTkifB7gQzD2+PJ0vnGplLvzJRzOTw3HMkE3zPmjjcXs3QI04aE6pZ9/C+c3aHhjyq5QY+Dxm0sYdVAIW4tZFDwETGpXCBLxMV50htHTaWuxgXpVMhzBNS5FaALTLCh2aFJggB5r33ZHoGxTG+N7j1ZvMhzd/Odg== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(36860700016)(1800799024)(82310400026)(23010399003)(11063799006)(5023799004)(56012099006)(3023799007)(10067099003)(6133799003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KsTtBUrfxJ93H45DJ2oPCblKzHfUMdZmKxCGzHfu8Ikcn9XpqcVarpa4UOB8dFe4jcXafKUJP48p3z8sY52CbwteJMFp7RuSaaQRevmS8sS8IczJ2Yrbh+NBO2WK+KSFKlKX7mHCIkO1oh3ldLnI0yh7NPHHol8fYtI2JYmYPWFk5J2tO/f2wZoRpteUPrCcXbXdMWw/+WCTr+Rgna7iQEEs4aOMT9KGr2WzPUia+u79j+2UdDb1UKZeD09IwBuRAyiYwItMPwMMwVamGuLXYXRU7i6uorpzKrCdZLi1t7Rd70NWRTURYrqZEN28IoPWTO1fadlYFMHSGblqg+p85J93+Axi3+YG1T1wj0/yw6Y4uVZfA+F1BLiFh93nt9JoG2LnZFwtFzMY1sT6mu7mWV4Vhlrst3Zy8dsk5IrE8Fz9zsmKcPI68Bc4T9xaFYfq X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 20:23:35.7872 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5751d30f-c1c4-40f7-19d4-08df18e76151 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF000037A8.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB7759 Content-Type: text/plain; charset="utf-8" Every PRM address translation follows the same pattern. Each fills a parameter buffer, invokes the handler, and checks the result. Only the handler GUID and the output buffer differ. Factor the common sequence into prm_umc_norm_to_addr(). Assisted-by: LLM Signed-off-by: Yazen Ghannam --- drivers/ras/amd/atl/prm.c | 42 +++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/drivers/ras/amd/atl/prm.c b/drivers/ras/amd/atl/prm.c index eba9d104d09e..b3ff33a668c2 100644 --- a/drivers/ras/amd/atl/prm.c +++ b/drivers/ras/amd/atl/prm.c @@ -18,36 +18,44 @@ =20 #include =20 -/* - * PRM parameter buffer - normalized to system physical address, as descri= bed - * in the "PRM Parameter Buffer" section of the AMD ACPI Porting Guide. - */ -struct norm_to_sys_param_buf { +/* See "PRM Parameter Buffer" in the AMD ACPI Porting Guide. */ +struct param_buf { u64 norm_addr; u8 socket; u64 bank_id; void *out_buf; } __packed; =20 -unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64 bank_id, unsigned= long addr) +static int prm_umc_norm_to_addr(guid_t guid, struct param_buf *p_buf) { - struct norm_to_sys_param_buf p_buf; - unsigned long ret_addr; int ret; =20 - p_buf.norm_addr =3D addr; - p_buf.socket =3D socket_id; - p_buf.bank_id =3D bank_id; - p_buf.out_buf =3D &ret_addr; - - ret =3D acpi_call_prm_handler(norm_to_sys_guid, &p_buf); + ret =3D acpi_call_prm_handler(guid, p_buf); if (!ret) - return ret_addr; + return 0; =20 if (ret =3D=3D -ENODEV || ret =3D=3D -EOPNOTSUPP) - pr_debug("PRM module/handler not available\n"); + pr_debug("PRM module/handler not available: %d\n", ret); else - pr_notice_once("PRM address translation failed\n"); + pr_notice_once("PRM address translation failed: %d\n", ret); =20 return ret; } + +unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64 bank_id, unsigned= long addr) +{ + unsigned long sys_addr; + struct param_buf p_buf =3D { + .norm_addr =3D addr, + .socket =3D socket_id, + .bank_id =3D bank_id, + .out_buf =3D &sys_addr, + }; + int ret; + + ret =3D prm_umc_norm_to_addr(norm_to_sys_guid, &p_buf); + if (ret) + return ret; + + return sys_addr; +} --=20 2.43.0 From nobody Thu Sep 24 14:26:24 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012059.outbound.protection.outlook.com [40.107.209.59]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C2C539E6F0; Tue, 22 Sep 2026 20:23:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.59 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108636; cv=fail; b=fbjx0D8KF/G0s5ak2CsqUAlFW37El7lpIRgU2VIz1hjJmk4weZzugr11vZHLEq7jc00WC9qcrr2JMHi7anY7ZeOdLVS5anQRQnERNWT4c05SbZoGnsQ4teeUyWIuSytcPpkCWgRf8DUMjgqJKoSixTrSf5tnyb+1XXdu+bYF8Dc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108636; c=relaxed/simple; bh=QCWiTwksrEuuOQKoRz693PfFXEMztpLDpmgdvI2a/bY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oSdgq4JqO44vNc5/IrPiSKFEoXTo5Egjy8Z80GJ3b1ywZF5f3H6WMKmfrmTcY9tf03OHndgeyzdj9aggPGCZU9jeGjedg5Ub4U2sQJDAQkj3YKNIvzovMKTjwc0sfYPJ2hn4kYtv9hFmcJhP92KkZ9Y5mDtWHGv5mH0qGPoie10= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=wGSsqwwN; arc=fail smtp.client-ip=40.107.209.59 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="wGSsqwwN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O5K4KO1yMrG3VKHOga3xvb2wlRtsVaIDqtLvLk+8FF5wcD4bVf9/FtwbAcI8h+YEC+vWgh3pxHNFGVu0XHGduQd/hDWAw/1Uc8XoLAASD1JaG7wxRUgSomTdwAJLD8c+OuT0LaC3W9uEQiLoQcZmmTPcDIweheH2+AIu4Dtwjs5hWk6PkXWh/GxcaXTba+VYAuDBow1cjrFlmLo7m9R4tmLdDnVcq7mopVZ9SfhQkZImi4CrmXdmoaNoAgSlBhzSjflJB84h9blHZKAES6Fdrnu7NfASzCS2G95s3bAT7UsLX3319aG1qccGzq255WBNMmuE8+eRS/ad8YX/fhRxsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AwE1ZCdvoL2moPHWc3C5Yv5k8ntuQFn30yVWfR64J1o=; b=ZPXg4Hcffx7hviPdOoYNvGG/A9dw+VnRsJWiRTwI+xSfSrUrbEHrTexFe15/OmIttZuZQXJBjcmVCXGztgf01dL8D0WCzprQRBNIECUdsP0uyYc7AWee+JdXrjGpRLJxG4PqUSAqOoCVWDNWwW7y/mocrcKVf8bYvTUzrA0yTX53wClMqgpLIc/7hkcrl+EvsnpkrfjKVCJirUW/ptS+KkFRp5Hvsa6P0TD2EGdmtjwmG3wd7FOpW+voYzDN6vA6aSVWea5Hu3be2uU055DiakabnLdpYjXx/9lAvxKSfl9r7I5hY/y8SC/erBNaMRg/V4scfIdojs1vSqaWRmU17Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=alien8.de smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AwE1ZCdvoL2moPHWc3C5Yv5k8ntuQFn30yVWfR64J1o=; b=wGSsqwwNcJaBAIPCJWr1cHWhqHn66jaTupGiTI1owlQxii4QV7rEJInm0p8ruswUTqOY+xV+d5rh7F3am0rWS7iZIA1139zEWs3HJY2OAM/s8H9U3w+2Mzw4BdF8oCMWs2TWwFlS2+g30M7qfn/R8N1aAc13rIHWvb+q9c8g1GU= Received: from SJ0PR13CA0002.namprd13.prod.outlook.com (2603:10b6:a03:2c0::7) by CY8PR12MB7563.namprd12.prod.outlook.com (2603:10b6:930:96::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.14; Tue, 22 Sep 2026 20:23:40 +0000 Received: from SJ1PEPF000037A8.namprd03.prod.outlook.com (2603:10b6:a03:2c0:cafe::89) by SJ0PR13CA0002.outlook.office365.com (2603:10b6:a03:2c0::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.12 via Frontend Transport; Tue, 22 Sep 2026 20:23:39 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SJ1PEPF000037A8.mail.protection.outlook.com (10.167.244.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 20:23:39 +0000 Received: from quartz-7b1chost.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49; Tue, 22 Sep 2026 15:23:29 -0500 From: Yazen Ghannam To: , CC: , Yazen Ghannam Subject: [PATCH v10 3/7] RAS/AMD/ATL: Add unified UMC address translation interface Date: Tue, 22 Sep 2026 15:23:13 -0500 Message-ID: <20260922202318.4079080-4-yazen.ghannam@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260922202318.4079080-1-yazen.ghannam@amd.com> References: <20260922202318.4079080-1-yazen.ghannam@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF000037A8:EE_|CY8PR12MB7563:EE_ X-MS-Office365-Filtering-Correlation-Id: ab5bff40-0e84-4e8e-3f94-08df18e7635e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|23010399003|82310400026|376014|36860700016|3023799007|6133799003|10067099003|5023799004|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: vQoum4ruuu7CPM7d0xGW4+oZIEqdKqvlwT/JWKggNkHb0xTJO6PLaFK+l4CHqGRtPa/B5iFDuDpOlODTJnv/BtR1DtDd+zZ4TBgeGezpHhOqgUBngjh5O7IZDHU5Rrux68CIM7OMz9zLnhy+TXxC/hJAso07OaSldsE2B8B18mHKK6nl5irTbGxs8hnvXf+HBqmZH6PNALIhr/GvywJMFfPoWAyzovBy/Vtfe3mIHsfXsCQsB85lV3vxCl2+71vvy0fORfbgaMINd54WNgVo8bZrBPdIj3LEtjYou31HriVfL8RmLsWfwiUSnW/N96UR3ifZCINor9tDCbkA++xC5SK+6lUc8prvqqbVbIRPGg5/gGCGjUJx7sP2HuUmEj1ZtbMSk6sJvbvAuNz+NiGdHRa9QCkjAlfzFGbDrCqQxis/zI7puutzpyY0ha51Is1cktI3kSYZDXENccYQCvsp8e6+6JOc3M8V1Nody3Z4CRJeQ4uq3b2y109eDpmz8KPl1XNQS2mJSusINEt+wOa3NGRywmQDNuLvmbb+hPMFY37rJ/pNgS2QzseIMIiYTV37BwgTkD8lNGiQBvKIO2oRuu3wP3HVHmPAfj2/4Cs0TPMFRymdsY1e1RjPfySxRiTLjSDIXmLL3Smca0ekW2bOoylGPsvrVKldh/kDDv19OlQxfEFdyYbx/IrfjWprAQK/HWv2yhx3t5Jo8e3e5A6Qgg== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(82310400026)(376014)(36860700016)(3023799007)(6133799003)(10067099003)(5023799004)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: J/VHFysdwX9FKuQ1uWQHzx/7L6vDWEKsbGu9+u6jNS8KvuPQdfv0ww3oThg/lA6Ujr1tw9hAcpclyy9/xHPmCEflU1tnSJBR5S0zc4CCWFj4y3UENQdBbHLcd7waZj750Xegdvn8FKX1CRLtC/1r69qDUJndCea8x6OaimlIiTJrtltvacuTGDayqpVPLvgvIsRIR6F5HEbTYjckseYIJO9b/t6Sx8wk2wVzKw4WJNgkWrjsSUyEWqn84vodhClY5VTbuqOuuJ72g8O/cezGs3bcuaYYSZbv9MEPUBhQM49t36hhLmzmCWzugq5UaDJ7CiOM8OK56nygs2rBFWZVjb1zYJi5lm8dCt0ghjyvPD88zjektSmNuM3OR5Ts9uG+eem+LEndGFJQxGH0EWjyNN/wByD21Dr+GMUfoZTJik/Gw8sJk7uNkWEQLT8QCVVo X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 20:23:39.2273 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ab5bff40-0e84-4e8e-3f94-08df18e7635e X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF000037A8.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7563 Content-Type: text/plain; charset="utf-8" The library exposes a single function for UMC address translation. Adding a new translation would mean adding and plumbing another export. Callers also have no way to request more than one representation of an address in a single call. Add a single entry point, amd_translate_umc_mca_addr(), that operates entirely through struct atl_err. Expand the struct with a pair of operation bitmaps and the per-operation output fields. The caller provides the error inputs and requests one or more operations. Each operation is attempted independently. The library sets a validation bit and fills the matching output for each operation that succeeds. The caller must check the validation bit before consuming an output value. Group the error identifiers (normalized address, socket, and UMC bank ID) into struct atl_umc_addr. Lay it out to match the PRM parameter buffer inputs that every handler shares, and embed it in the buffer. A caller can then build the buffer straight from its own struct atl_err. Move the buffer definition to internal.h so callers outside prm.c can do so. Route the interface through the always-built RAS core so the library remains optional. The core provides the entry point and a register/unregister pair. The library registers its implementation on load. The entry point does nothing (no validation bits set) when the library is absent. Start with a single operation, ATL_OP_SPA, that produces the System Physical Address. Try the PRM handler first. Fall back to the native Data Fabric translation if PRM is unavailable and the Data Fabric revision supports it. Leave the existing amd_convert_umc_mca_addr_to_sys_addr() interface in place for now. Assisted-by: LLM Signed-off-by: Yazen Ghannam --- drivers/ras/amd/atl/core.c | 2 ++ drivers/ras/amd/atl/internal.h | 8 +++++++ drivers/ras/amd/atl/prm.c | 18 +++++---------- drivers/ras/amd/atl/umc.c | 42 ++++++++++++++++++++++++++++++++++ drivers/ras/ras.c | 28 +++++++++++++++++++++++ include/linux/ras.h | 28 +++++++++++++++++++++-- 6 files changed, 112 insertions(+), 14 deletions(-) diff --git a/drivers/ras/amd/atl/core.c b/drivers/ras/amd/atl/core.c index d77dacdd4f56..b754eaef8585 100644 --- a/drivers/ras/amd/atl/core.c +++ b/drivers/ras/amd/atl/core.c @@ -210,6 +210,7 @@ static int __init amd_atl_init(void) /* Increment this module's recount so that it can't be easily unloaded. */ __module_get(THIS_MODULE); amd_atl_register_decoder(convert_umc_mca_addr_to_sys_addr); + amd_atl_register_umc_translator(amd_atl_umc_translate_addr); =20 pr_info("AMD Address Translation Library initialized\n"); return 0; @@ -222,6 +223,7 @@ static int __init amd_atl_init(void) static void __exit amd_atl_exit(void) { amd_atl_unregister_decoder(); + amd_atl_unregister_umc_translator(); } =20 module_init(amd_atl_init); diff --git a/drivers/ras/amd/atl/internal.h b/drivers/ras/amd/atl/internal.h index 4fc4bc3c3500..0c86f40a094b 100644 --- a/drivers/ras/amd/atl/internal.h +++ b/drivers/ras/amd/atl/internal.h @@ -280,6 +280,7 @@ int dehash_address(struct addr_ctx *ctx); =20 unsigned long norm_to_sys_addr(u8 socket_id, u8 die_id, u8 coh_st_inst_id,= unsigned long addr); unsigned long convert_umc_mca_addr_to_sys_addr(struct atl_err *err); +void amd_atl_umc_translate_addr(struct atl_err *err); =20 u64 add_base_and_hole(struct addr_ctx *ctx, u64 addr); u64 remove_base_and_hole(struct addr_ctx *ctx, u64 addr); @@ -287,6 +288,13 @@ u64 remove_base_and_hole(struct addr_ctx *ctx, u64 add= r); /* GUIDs for PRM handlers */ extern const guid_t norm_to_sys_guid; =20 +/* See "PRM Parameter Buffer" in the AMD ACPI Porting Guide. */ +struct param_buf { + struct atl_umc_addr addr; + void *out_buf; +} __packed; + +int prm_umc_norm_to_addr(guid_t guid, struct param_buf *p_buf); unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64 umc_bank_inst_id,= unsigned long addr); =20 /* diff --git a/drivers/ras/amd/atl/prm.c b/drivers/ras/amd/atl/prm.c index b3ff33a668c2..0635215f220a 100644 --- a/drivers/ras/amd/atl/prm.c +++ b/drivers/ras/amd/atl/prm.c @@ -18,15 +18,7 @@ =20 #include =20 -/* See "PRM Parameter Buffer" in the AMD ACPI Porting Guide. */ -struct param_buf { - u64 norm_addr; - u8 socket; - u64 bank_id; - void *out_buf; -} __packed; - -static int prm_umc_norm_to_addr(guid_t guid, struct param_buf *p_buf) +int prm_umc_norm_to_addr(guid_t guid, struct param_buf *p_buf) { int ret; =20 @@ -46,9 +38,11 @@ unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64= bank_id, unsigned long { unsigned long sys_addr; struct param_buf p_buf =3D { - .norm_addr =3D addr, - .socket =3D socket_id, - .bank_id =3D bank_id, + .addr =3D { + .addr =3D addr, + .socket_id =3D socket_id, + .ipid =3D bank_id, + }, .out_buf =3D &sys_addr, }; int ret; diff --git a/drivers/ras/amd/atl/umc.c b/drivers/ras/amd/atl/umc.c index befc616d5e8a..91c02ef5dc11 100644 --- a/drivers/ras/amd/atl/umc.c +++ b/drivers/ras/amd/atl/umc.c @@ -416,3 +416,45 @@ unsigned long convert_umc_mca_addr_to_sys_addr(struct = atl_err *err) =20 return norm_to_sys_addr(socket_id, die_id, coh_st_inst_id, addr); } + +/* + * Translate a UMC MCA error address into one or more representations as + * requested by the caller. + * + * The caller sets the input values and requests one or more operations + * through @err->requested. @err->valid is cleared on entry. Each operation + * is attempted independently. The corresponding bit in @err->valid is set + * and the related output field is filled for each operation that succeeds. + * The caller must check @err->valid before consuming an output value. + * + * The PRM handlers consume @err->umc_addr directly. Only MI300 needs its + * MCA_ADDR value converted to a normalized address first; see get_addr(). + * MI300 platforms provide no PRM handlers, so the conversion is left to t= he + * native fallback path. + * + * Registered with the RAS core as the UMC address translator; see + * amd_translate_umc_mca_addr(). + */ +void amd_atl_umc_translate_addr(struct atl_err *err) +{ + err->socket_id =3D topology_physical_package_id(err->cpu); + err->valid =3D 0; + + if (err->requested & ATL_OP_SPA) { + struct param_buf p_buf =3D { + .addr =3D err->umc_addr, + .out_buf =3D &err->spa, + }; + + if (!prm_umc_norm_to_addr(norm_to_sys_guid, &p_buf)) { + err->valid |=3D ATL_OP_SPA; + } else if (!df_cfg.flags.prm_only) { + unsigned long spa =3D convert_umc_mca_addr_to_sys_addr(err); + + if (!IS_ERR_VALUE(spa)) { + err->spa =3D spa; + err->valid |=3D ATL_OP_SPA; + } + } + } +} diff --git a/drivers/ras/ras.c b/drivers/ras/ras.c index 03df3db62334..20e23560dee5 100644 --- a/drivers/ras/ras.c +++ b/drivers/ras/ras.c @@ -39,6 +39,34 @@ unsigned long amd_convert_umc_mca_addr_to_sys_addr(struc= t atl_err *err) return amd_atl_umc_na_to_spa(err); } EXPORT_SYMBOL_GPL(amd_convert_umc_mca_addr_to_sys_addr); + +/* + * Set by the library module when it loads. Left registered while the modu= le is + * resident; consumers keep no direct dependency on the library, so transl= ation + * is simply skipped when it is not loaded. + */ +static void (*amd_atl_umc_translate)(struct atl_err *err); + +void amd_atl_register_umc_translator(void (*f)(struct atl_err *)) +{ + amd_atl_umc_translate =3D f; +} +EXPORT_SYMBOL_GPL(amd_atl_register_umc_translator); + +void amd_atl_unregister_umc_translator(void) +{ + amd_atl_umc_translate =3D NULL; +} +EXPORT_SYMBOL_GPL(amd_atl_unregister_umc_translator); + +void amd_translate_umc_mca_addr(struct atl_err *err) +{ + err->valid =3D 0; + + if (amd_atl_umc_translate) + amd_atl_umc_translate(err); +} +EXPORT_SYMBOL_GPL(amd_translate_umc_mca_addr); #endif /* CONFIG_AMD_ATL */ =20 #define CREATE_TRACE_POINTS diff --git a/include/linux/ras.h b/include/linux/ras.h index 468941bfe855..eac8cf39ddd5 100644 --- a/include/linux/ras.h +++ b/include/linux/ras.h @@ -3,6 +3,8 @@ #define __RAS_H__ =20 #include +#include +#include #include #include =20 @@ -35,10 +37,26 @@ static inline void log_arm_hw_error(struct cper_sec_proc_arm *err, const u8 sev) { return; } #endif =20 +/* Operations requested and completed through amd_translate_umc_mca_addr()= . */ +#define ATL_OP_SPA BIT(0) /* System Physical Address */ + struct atl_err { - u64 addr; - u64 ipid; + /* Identifiers; layout mirrors the PRM parameter buffer inputs */ + __struct_group(atl_umc_addr, umc_addr, __packed, + u64 addr; + u8 socket_id; /* Filled by the library from @cpu */ + u64 ipid; + ); u32 cpu; + + /* Requested operations (input) */ + u8 requested; + + /* Completed operations (output) */ + u8 valid; + + /* Outputs */ + u64 spa; /* Valid if (@valid & ATL_OP_SPA) */ }; =20 #if IS_ENABLED(CONFIG_AMD_ATL) @@ -46,10 +64,16 @@ void amd_atl_register_decoder(unsigned long (*f)(struct= atl_err *)); void amd_atl_unregister_decoder(void); void amd_retire_dram_row(struct atl_err *err); unsigned long amd_convert_umc_mca_addr_to_sys_addr(struct atl_err *err); + +void amd_atl_register_umc_translator(void (*f)(struct atl_err *)); +void amd_atl_unregister_umc_translator(void); +void amd_translate_umc_mca_addr(struct atl_err *err); #else static inline void amd_retire_dram_row(struct atl_err *err) { } static inline unsigned long amd_convert_umc_mca_addr_to_sys_addr(struct atl_err *err) { return -EINVAL= ; } +static inline void +amd_translate_umc_mca_addr(struct atl_err *err) { err->valid =3D 0; } #endif /* CONFIG_AMD_ATL */ =20 #if defined(CONFIG_ARM) || defined(CONFIG_ARM64) --=20 2.43.0 From nobody Thu Sep 24 14:26:24 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012015.outbound.protection.outlook.com [52.101.48.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8FB044BF922; Tue, 22 Sep 2026 20:23:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108642; cv=fail; b=q50Y5n5BcdOGapjnO+PU0/TnMxY3J8t0cqoroQ4CYABFawhcwyVQyu5F1oIg3MXf8bGF8CbVIiA7aw1sBJRtD1yGF15Qz0577he2R8cItP+nPCucSNkQ4QUS22jrQyBI0+H7hYUgiiA7ssrm2OKVo00Y6z4XNdd/TDd+Tlbnjys= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108642; c=relaxed/simple; bh=ghnvgX+egc6yDkl441zn+fZDgcKpMIT4TRJhR2f8+a0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=YzarpzjzMZc8lnbTPIZjQiLaCIOvL5orjh5eoiuyVg9LjXoMWZ9UFniOOwVeqT3gs8aeL2R5AFAQa6jD6m6UqKWA4GH3fmMeXQyNjmzyJCDAIvEGD9diomIt2eV4q8ftYUawRimnSxmZD1AI1jBWBgxHh9QWadEebLB16OaoDJM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=AnnV7S/X; arc=fail smtp.client-ip=52.101.48.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="AnnV7S/X" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yFJJWCLtuT2f6IR0irYOum9zde5RP4rKUDBB8y+SbyrSeGN910TTM4Oqjbw+JzUqe/pVAjUS6ZH+xmy5baYWLYCy5cXgPGdYtsB5fC9Do9tFm7nVirIEFJeJ4AIYORjWG3HIveKQISzaTvrKGlb2uTFGKtyAP22t2HglVlhNOeG3OoJiMPCk21NqNVDr9iAKNr7vuEM0Q6iSmK5nnsl6dKYd0Bic8CgznK/yozNra7B4JvYXzHPOK8ylDE2FGFgRsTcr6bdGUQ5zK/5gPDUg5xufUCxYRlj76RFpIqjVs12QDF755nNilT72tnhRFrQy+sszTLcwuUHC1qVmNHnsGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GtbjIiELL3+XFcIu9IZPd/vKTabNPZlk1otW4T+VfDE=; b=MYGp+vDir23pZqFGHgD+7Ua/KOKYTBez/TG3/UdawVjJ7v4QF0/9+hdQ5ZdCKxUIiHhYdr9FYIKUey9AwCrEwiWZVglV4Pwr53KVlk0iNDL/sD5fnbfxbvYu3Ag9n1I/f2C83RnMWJS7M132ee2Drj+XJUf0wAhsFTW3Av4QyMUEpjmDASjRzny/6UoaEQWKyyJDnggX7yePtN3bLgQnfYQz76vzEY9ZKziPHisW/N/Hs8yZHLMr1ofSsVJzfIozBzwS7gGmQgFQiqYFSgMivUicy8GsyeZmeq6prh1Zi63wrR0Fo4ogVCpJmL372ju/6Klx1oBTVCUyJzafBZgMNw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=alien8.de smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GtbjIiELL3+XFcIu9IZPd/vKTabNPZlk1otW4T+VfDE=; b=AnnV7S/X22OGUN2WcKxlwTeUJvxz+tQRoj8xM5FNg2EKSAEaXTjrP+TrGfEj74bXiersswcw3VF3ljl+LClV6W8ISfhJ1dGdSI2/64fHUSnNZerWE5L3UsZ2Tk0hFiB8pfV/bI2MPdLmEzxBxm6Jj8P4fewQoEB3+EnOm3g5lwc= Received: from SJ0PR13CA0012.namprd13.prod.outlook.com (2603:10b6:a03:2c0::17) by CY0PR12MB388677.namprd12.prod.outlook.com (2603:10b6:930:132::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.13; Tue, 22 Sep 2026 20:23:41 +0000 Received: from SJ1PEPF000037A8.namprd03.prod.outlook.com (2603:10b6:a03:2c0:cafe::53) by SJ0PR13CA0012.outlook.office365.com (2603:10b6:a03:2c0::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.13 via Frontend Transport; Tue, 22 Sep 2026 20:23:40 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SJ1PEPF000037A8.mail.protection.outlook.com (10.167.244.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 20:23:40 +0000 Received: from quartz-7b1chost.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49; Tue, 22 Sep 2026 15:23:29 -0500 From: Yazen Ghannam To: , CC: , Yazen Ghannam Subject: [PATCH v10 4/7] RAS/AMD, EDAC/amd64: Use unified interface for SPA translation Date: Tue, 22 Sep 2026 15:23:14 -0500 Message-ID: <20260922202318.4079080-5-yazen.ghannam@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260922202318.4079080-1-yazen.ghannam@amd.com> References: <20260922202318.4079080-1-yazen.ghannam@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF000037A8:EE_|CY0PR12MB388677:EE_ X-MS-Office365-Filtering-Correlation-Id: 77757c45-5bb8-4852-ac8d-08df18e76452 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|23010399003|82310400026|36860700016|10067099003|56012099006|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: eDhS034UZaeuGC9523V3hqF6TmIrtKv9XwToHVR3v9IunHw2oe8cB2hWMkQToCAMbP8Lhqc0Y83vEVlXN9NmMAwu6JMgTSF0eiejIcyg+eRiUPFCzKyofAGdMOHq8ZlmLp/CgKi2L0HiBJcWkWUvf6MdCeEu/XrkMB7gyObx/wE3TmNtWbUNqu/zew0aNB8UVX+rEZkoXGRjzIfd9L/e0aAb06QrGlJ0i2aU0k5q/CAgDfwLpIo15qiGVPU7g9CjkgCqhH1tAN5GMHe8+NwR92CWmYfDoIuIFDXL3bHwu/gUQshUp+6BLn/RbnMT3+6YHyTQ4DZml8GoGgcLmU/QjymUOlOLecb4sWBv31iFVWN8GQc6QHQUst71FFpCtQRBFaEJb1lg8B85ixmO2WCjzIjhuk9H+MldpR6wAULPgENumlIdzqHe7uzXDtnAkDBt0QEWXqppf7HDfWtaiYOClgfJlgwWa03DpOEuraO72el2FbPKm9imG/j57TRvVH/pEpQrOPQR0s9JJ1HXx3pgIy6zw773/FZAcE9YwRVv0eZs082imJg2n/4NeKIZiusPAx90TBfFGqoGv9OeX0iOUEFbldqRZj+RT5zxEpQYVnKXqHoEpgvAy/yUd/MalkWCa8zBSgO8jI+5Y2HvbbkwZzO1+93rnSIk+q7muAnjbwRfHg2vlarHOXF8OiSWWA4zDOP7DN4X4mpKJ9+nEnVy+A== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(1800799024)(23010399003)(82310400026)(36860700016)(10067099003)(56012099006)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZCoMd4Naix2ZCUuUtvf4gmnQ0zkolRvzkrf9IAn2fpqEl1U3ZjzScgeqbwhq68MGuqHP1Bruav3oy7dHnJgcROmH6tfobBkgFPSQQ1kM+ghIxPhYvs2tYyZCu9kftcOGOqxe+cj+T9CSqTZHXDYH9Tc/Aqb2TuX8s8kFkxV2sjMnrypNMw7tjAI/qrL4l8pkgdXUbn9DavAMRsEx4p3g2XPzbodylBwahp2GjQ3Ca4bmVx53zFMC/qahSAVzoFO8oYSlwFBYCW4flrs8Nk/YDzlTYmxPhMnu8XCgra/01SIIaTuYGMO5aAYL3e+trnVkdG/HSaVCYvJexuGQUHbvlqpE4HGzKPWkqDuz48ZvRC1c2lVEFedek01Z91w9F7+D7C8q4oQsLUZewX4/74bcteYTK+haIAhNnippcBehVIMk+da99QDAEz8uD4+nnhir X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 20:23:40.8310 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 77757c45-5bb8-4852-ac8d-08df18e76452 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF000037A8.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY0PR12MB388677 Content-Type: text/plain; charset="utf-8" Switch all users of the ATL SPA translation function to the new unified interface. No functional change intended. Assisted-by: LLM Signed-off-by: Yazen Ghannam --- drivers/edac/amd64_edac.c | 15 +++++++-------- drivers/edac/amd64_edac.h | 2 ++ drivers/ras/amd/atl/umc.c | 8 +++++--- drivers/ras/amd/fmpm.c | 10 +++++----- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c index 475235c402e8..f428d815bff1 100644 --- a/drivers/edac/amd64_edac.c +++ b/drivers/edac/amd64_edac.c @@ -2809,9 +2809,7 @@ static void decode_umc_error(int node_id, struct mce = *m) { u8 ecc_type =3D (m->status >> 45) & 0x3; struct mem_ctl_info *mci; - unsigned long sys_addr; struct amd64_pvt *pvt; - struct atl_err a_err; struct err_info err; =20 node_id =3D fixup_node_id(node_id, m); @@ -2843,17 +2841,18 @@ static void decode_umc_error(int node_id, struct mc= e *m) =20 pvt->ops->get_err_info(m, &err); =20 - a_err.addr =3D m->addr; - a_err.ipid =3D m->ipid; - a_err.cpu =3D m->extcpu; + err.a_err.addr =3D m->addr; + err.a_err.ipid =3D m->ipid; + err.a_err.cpu =3D m->extcpu; + err.a_err.requested =3D ATL_OP_SPA; =20 - sys_addr =3D amd_convert_umc_mca_addr_to_sys_addr(&a_err); - if (IS_ERR_VALUE(sys_addr)) { + amd_translate_umc_mca_addr(&err.a_err); + if (!(err.a_err.valid & ATL_OP_SPA)) { err.err_code =3D ERR_NORM_ADDR; goto log_error; } =20 - error_address_to_page_and_offset(sys_addr, &err); + error_address_to_page_and_offset(err.a_err.spa, &err); =20 log_error: __log_ecc_error(mci, &err, ecc_type); diff --git a/drivers/edac/amd64_edac.h b/drivers/edac/amd64_edac.h index 1757c1b99fc8..b11da6fdf0fc 100644 --- a/drivers/edac/amd64_edac.h +++ b/drivers/edac/amd64_edac.h @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include "edac_module.h" @@ -400,6 +401,7 @@ struct err_info { u16 syndrome; u32 page; u32 offset; + struct atl_err a_err; }; =20 static inline u32 get_umc_base(u8 channel) diff --git a/drivers/ras/amd/atl/umc.c b/drivers/ras/amd/atl/umc.c index 91c02ef5dc11..522378c1d9f2 100644 --- a/drivers/ras/amd/atl/umc.c +++ b/drivers/ras/amd/atl/umc.c @@ -314,15 +314,17 @@ static void _retire_row_mi300(struct atl_err *a_err) struct page *p; u8 col; =20 + a_err->requested =3D ATL_OP_SPA; + for (col =3D 0; col < MI300_NUM_COL; col++) { a_err->addr &=3D ~MI300_UMC_MCA_COL; a_err->addr |=3D FIELD_PREP(MI300_UMC_MCA_COL, col); =20 - addr =3D amd_convert_umc_mca_addr_to_sys_addr(a_err); - if (IS_ERR_VALUE(addr)) + amd_atl_umc_translate_addr(a_err); + if (!(a_err->valid & ATL_OP_SPA)) continue; =20 - addr =3D PHYS_PFN(addr); + addr =3D PHYS_PFN(a_err->spa); =20 /* * Skip invalid or already poisoned pages to avoid unnecessary diff --git a/drivers/ras/amd/fmpm.c b/drivers/ras/amd/fmpm.c index 4ccaaf7b70bf..21f645197410 100644 --- a/drivers/ras/amd/fmpm.c +++ b/drivers/ras/amd/fmpm.c @@ -302,7 +302,6 @@ static void save_spa(struct fru_rec *rec, unsigned int = entry, { unsigned int i, fru_idx, spa_entry; struct atl_err a_err; - unsigned long spa; =20 if (entry >=3D max_nr_entries) { pr_warn_once("FRU descriptor entry %d out-of-bounds (max: %d)\n", @@ -328,19 +327,20 @@ static void save_spa(struct fru_rec *rec, unsigned in= t entry, return; } =20 - memset(&a_err, 0, sizeof(struct atl_err)); + memset(&a_err, 0, sizeof(a_err)); =20 a_err.addr =3D addr; a_err.ipid =3D id; a_err.cpu =3D cpu; + a_err.requested =3D ATL_OP_SPA; =20 - spa =3D amd_convert_umc_mca_addr_to_sys_addr(&a_err); - if (IS_ERR_VALUE(spa)) { + amd_translate_umc_mca_addr(&a_err); + if (!(a_err.valid & ATL_OP_SPA)) { pr_debug("Failed to get system address\n"); return; } =20 - spa_entries[spa_entry] =3D spa; + spa_entries[spa_entry] =3D a_err.spa; pr_debug("fru_idx: %u, entry: %u, spa_entry: %u, spa: 0x%016llx\n", fru_idx, entry, spa_entry, spa_entries[spa_entry]); } --=20 2.43.0 From nobody Thu Sep 24 14:26:24 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013000.outbound.protection.outlook.com [40.93.196.0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AC8014A5C33; Tue, 22 Sep 2026 20:23:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.0 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108649; cv=fail; b=WdsJsYbpN78bZ25OlORYtcj62MZNnk0hWEL8SP627VjhGFtW93nbk++yp/zIoKaGjqdqF3t+VVjsss8u6f/BmeXuCU2pbt0YCk9YULJXODZnal6PKpKR46F6ew/VlBlWJu6xdGVs9e5sjifxNp3lgQavfkRM3s8Gr5vR5fNaQM8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108649; c=relaxed/simple; bh=oyA7YTxtyw1S4ZZMaJPja31m0/ZkGmfAM0IMOi9tNds=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pHg3LkZcxVyMP1BswTB59Pml5wxc989NO/9/YqzZlHzdepOvf64OlJI5Vw5BaXKpNsXszjMZHbxuunhg7nXbgZ4qejJxEDYaRfxd2hfMk79TpCajo2AicH0Mf4sgNeOqR+8FmoxH4C4z78Y3Kloh9sdFhFHVeCKITSrun4pk41k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=Zj2YjVI9; arc=fail smtp.client-ip=40.93.196.0 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="Zj2YjVI9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=B8ElxCf/uifCND+gsJMA+orI9jmTU6M+KU/MVL/RlILQ64HHlvZP0qU++V0M6SGkhE5jS7X9IKZiFSh3SlymWIp2Oav76bDoF+3sO58qImv4Bs9d7XcpcqQjqOucsj30yz0yFCEaN4Mz6HhAYPslBJ5EaMdiFfbvHEBxuaOdTuqji6WMbG/uW+P8oR8Lxvy1ESUg7OP4Ux+sj2qJ5o1ZbgYlo4FF084yyI0MksTBdiwefH+FIJ0zVTOsIJke+yZoQABh1UrdNCXUWA1Eg6YIpukcRBD7OzU/MfjdbRSDixFlfQah1vyV2qY7XJeD2AKF1/7LjMq71FUJjvuH/cKV5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=VBpEyrlxs4bJU3lh8NuCqwKpZJEi7V4hCvne2PNfZAw=; b=l3iQAOEte705yATW8nxEhyb7apDs9N/MKwqIclGxu9u5jtixGyo3rD2Rp3d00w9BN8xeQro2CUGo/wAPbuKHJ6UQJiJYAjzi03QJzywX6bLa9769sNxeyhUTj7VLIpud8eGfoYlLTtsJ9qJCl5kM4oaGqEsoA9asn3cQA32IOGS/brSA/nqoklrK5HYZzBC9FvjYGc5llhM9XIXn5aMAvFRElD6D4h2dDxVHMjc0VeGZocHvDstoQRGTUvMdwe1XZcRVMVlr3OdfJG2C1PPftmiQhNRCHM8op6puuNdlQ0Fc4jS1CtC6Rd3QjNE57Tu8wHpT8/LnICovhExRQgrHjQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=alien8.de smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VBpEyrlxs4bJU3lh8NuCqwKpZJEi7V4hCvne2PNfZAw=; b=Zj2YjVI9cGGjoakhgMqRVSSH0eKAo74Fj8tl/SGLOB45JzKOn8+e13iBK0XT2UH+Q9jfIxmq+couJPAwq7j56ewl8BWS/emHe/EtWg2hyz51o1OURDVUF55PvMBvXmZ5G1n0V5O2ueYBbT/iMsNj1HGIeU2jmXcXUvtFbEqtUVc= Received: from SJ0PR13CA0010.namprd13.prod.outlook.com (2603:10b6:a03:2c0::15) by PH7PR12MB6860.namprd12.prod.outlook.com (2603:10b6:510:1b6::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.14; Tue, 22 Sep 2026 20:23:41 +0000 Received: from SJ1PEPF000037A8.namprd03.prod.outlook.com (2603:10b6:a03:2c0:cafe::90) by SJ0PR13CA0010.outlook.office365.com (2603:10b6:a03:2c0::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.13 via Frontend Transport; Tue, 22 Sep 2026 20:23:41 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SJ1PEPF000037A8.mail.protection.outlook.com (10.167.244.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 20:23:41 +0000 Received: from quartz-7b1chost.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49; Tue, 22 Sep 2026 15:23:30 -0500 From: Yazen Ghannam To: , CC: , Yazen Ghannam Subject: [PATCH v10 5/7] RAS/AMD/ATL: Remove the standalone SPA translation interface Date: Tue, 22 Sep 2026 15:23:15 -0500 Message-ID: <20260922202318.4079080-6-yazen.ghannam@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260922202318.4079080-1-yazen.ghannam@amd.com> References: <20260922202318.4079080-1-yazen.ghannam@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF000037A8:EE_|PH7PR12MB6860:EE_ X-MS-Office365-Filtering-Correlation-Id: 5536bfa1-86b8-43df-3950-08df18e764a0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|82310400026|36860700016|1800799024|376014|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: PYoV1k2yohPWXsPw7EnIOm/xkP/sZcMPUWVlZGvkIc4YEUUSYT55L0kJYF26j8p6PIMlpiIolIiR/btqvByTPWi5xgOeTW8WZsbdmjJi8hmVVbD98kW4U7RxSGLyBK+RMzFXhLhXTXfkkddpn1ao3bRMUGOJe/iCtcRtQZgEVp1OMFXQEogi95pvR3cFWLeYelSTIf2GJ+RN+cjCSFGAPOBgJsSdVFWAt0MOGLI/SrIGZvw/Dsd/6/vA/1+Y7L8gmRPLtk1iZqT+zocRMhTgxyogXw/yf8uvFvDgmVytfk8wPl9kYUBgqRN2T0zoJrRirUH0SShqJKT5qTLBqxf/B0IhYQUApvs5AWK2J4BtKh7FH05XzJ9uNkGtgdT2gprW5mIth3RnsZZ2ckClADn1dGKu5a2a5tHTMLN7fyhrO3FjfoYoKQVkADDSkuxjr+navYW6l2up8rknACSaMwBxKo3Fzzrayp4OZbR7OqU4KJzhHLhJW4LtOr42pkYQNc7VhWLb0tNCbQgKhmwSWi/fmQ2Eqk5Kwrj/4FAZA1pCQVaxgqbCfSRkbsUG+q7lTl7To/veFNFj0ZSTArlF6c64eoZ0IbEJTzB9DTZfw/vsFNBEFOezC5R8+ACxAawSQP5rvpAMSNmUnLMk8/T2Rw4KwWUzprwhGFBX6XsUEzdWD6PwzyotzQ5i9CZpBjqerg/ZkBmzTYYPWq2VPaaIs9xeyQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(23010399003)(82310400026)(36860700016)(1800799024)(376014)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BJzfMbzEkdzPIR4bO44PmY2FhEQZYE8j+pYloTK2cYL4vt9wd08fjkTswCGuY/KByZT3Ua62J37XDXeAo9eRmhjLL5uw8BKdiOjwTUK66D6O04Esd6t11NBIszin4GUrCvpZ5ZNflJtKEuXrLkB+yJDfU5XwlLXIB0Ox/joY6YZWXes1CmMZzX/na0AAb2CDqSyxjC3Sc4AQstl3683tm1FdAVu067ytltMtjdFwkvtwf9RE04O/MN5VkfxBZKUIDmR8n2hEvpvEVPuUpfhhMfAvz0n43+vDr4OM0/pMvP4PNj0yvWAHxsXMOCv8D96OepowCXexNg/zC+K89I64KD77G5NJznkxZtCDrsZmXT59WRWIAKAwJURaKlDp7cJXJY72NX3/XdViQUTUim5DpJUiCw6q3vaw9ayTo3ULXFdMUzkrUvLT28VSHQlXZqNQ X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 20:23:41.3388 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5536bfa1-86b8-43df-3950-08df18e764a0 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF000037A8.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6860 Content-Type: text/plain; charset="utf-8" All consumers now use the unified amd_translate_umc_mca_addr() interface, which is routed through the RAS core in the same way. The older amd_convert_umc_mca_addr_to_sys_addr() interface and its separate register/unregister pair are no longer used. Remove amd_convert_umc_mca_addr_to_sys_addr() together with amd_atl_register_decoder()/amd_atl_unregister_decoder() and the associated function pointer. The unified interface performs the PRM translation itself, so convert_umc_mca_addr_to_sys_addr() is now only the native Data Fabric fallback. Make it static and drop its PRM attempt. Have it use the socket ID that amd_atl_umc_translate_addr() already stores in struct atl_err. The prm_umc_norm_to_sys_addr() wrapper has no remaining users. Remove it. No functional change intended. Assisted-by: LLM Signed-off-by: Yazen Ghannam --- drivers/ras/amd/atl/core.c | 2 -- drivers/ras/amd/atl/internal.h | 2 -- drivers/ras/amd/atl/prm.c | 20 -------------------- drivers/ras/amd/atl/umc.c | 9 ++------- drivers/ras/ras.c | 29 ----------------------------- include/linux/ras.h | 5 ----- 6 files changed, 2 insertions(+), 65 deletions(-) diff --git a/drivers/ras/amd/atl/core.c b/drivers/ras/amd/atl/core.c index b754eaef8585..cb944d3473ba 100644 --- a/drivers/ras/amd/atl/core.c +++ b/drivers/ras/amd/atl/core.c @@ -209,7 +209,6 @@ static int __init amd_atl_init(void) =20 /* Increment this module's recount so that it can't be easily unloaded. */ __module_get(THIS_MODULE); - amd_atl_register_decoder(convert_umc_mca_addr_to_sys_addr); amd_atl_register_umc_translator(amd_atl_umc_translate_addr); =20 pr_info("AMD Address Translation Library initialized\n"); @@ -222,7 +221,6 @@ static int __init amd_atl_init(void) */ static void __exit amd_atl_exit(void) { - amd_atl_unregister_decoder(); amd_atl_unregister_umc_translator(); } =20 diff --git a/drivers/ras/amd/atl/internal.h b/drivers/ras/amd/atl/internal.h index 0c86f40a094b..ed8d176a05e3 100644 --- a/drivers/ras/amd/atl/internal.h +++ b/drivers/ras/amd/atl/internal.h @@ -279,7 +279,6 @@ int denormalize_address(struct addr_ctx *ctx); int dehash_address(struct addr_ctx *ctx); =20 unsigned long norm_to_sys_addr(u8 socket_id, u8 die_id, u8 coh_st_inst_id,= unsigned long addr); -unsigned long convert_umc_mca_addr_to_sys_addr(struct atl_err *err); void amd_atl_umc_translate_addr(struct atl_err *err); =20 u64 add_base_and_hole(struct addr_ctx *ctx, u64 addr); @@ -295,7 +294,6 @@ struct param_buf { } __packed; =20 int prm_umc_norm_to_addr(guid_t guid, struct param_buf *p_buf); -unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64 umc_bank_inst_id,= unsigned long addr); =20 /* * Make a gap in @data that is @num_bits long starting at @bit_num. diff --git a/drivers/ras/amd/atl/prm.c b/drivers/ras/amd/atl/prm.c index 0635215f220a..ed357ae1607a 100644 --- a/drivers/ras/amd/atl/prm.c +++ b/drivers/ras/amd/atl/prm.c @@ -33,23 +33,3 @@ int prm_umc_norm_to_addr(guid_t guid, struct param_buf *= p_buf) =20 return ret; } - -unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64 bank_id, unsigned= long addr) -{ - unsigned long sys_addr; - struct param_buf p_buf =3D { - .addr =3D { - .addr =3D addr, - .socket_id =3D socket_id, - .ipid =3D bank_id, - }, - .out_buf =3D &sys_addr, - }; - int ret; - - ret =3D prm_umc_norm_to_addr(norm_to_sys_guid, &p_buf); - if (ret) - return ret; - - return sys_addr; -} diff --git a/drivers/ras/amd/atl/umc.c b/drivers/ras/amd/atl/umc.c index 522378c1d9f2..32748d47ae8d 100644 --- a/drivers/ras/amd/atl/umc.c +++ b/drivers/ras/amd/atl/umc.c @@ -401,21 +401,16 @@ static u8 get_coh_st_inst_id(struct atl_err *err) return FIELD_GET(UMC_CHANNEL_NUM, err->ipid); } =20 -unsigned long convert_umc_mca_addr_to_sys_addr(struct atl_err *err) +static unsigned long convert_umc_mca_addr_to_sys_addr(struct atl_err *err) { - u8 socket_id =3D topology_physical_package_id(err->cpu); u8 coh_st_inst_id =3D get_coh_st_inst_id(err); unsigned long addr =3D get_addr(err->addr); + u8 socket_id =3D err->socket_id; u8 die_id =3D get_die_id(err); - unsigned long ret_addr; =20 pr_debug("socket_id=3D0x%x die_id=3D0x%x coh_st_inst_id=3D0x%x addr=3D0x%= 016lx", socket_id, die_id, coh_st_inst_id, addr); =20 - ret_addr =3D prm_umc_norm_to_sys_addr(socket_id, err->ipid, addr); - if (!IS_ERR_VALUE(ret_addr) || df_cfg.flags.prm_only) - return ret_addr; - return norm_to_sys_addr(socket_id, die_id, coh_st_inst_id, addr); } =20 diff --git a/drivers/ras/ras.c b/drivers/ras/ras.c index 20e23560dee5..c92b6d599792 100644 --- a/drivers/ras/ras.c +++ b/drivers/ras/ras.c @@ -11,35 +11,6 @@ #include =20 #if IS_ENABLED(CONFIG_AMD_ATL) -/* - * Once set, this function pointer should never be unset. - * - * The library module will set this pointer if it successfully loads. The = module - * should not be unloaded except for testing and debug purposes. - */ -static unsigned long (*amd_atl_umc_na_to_spa)(struct atl_err *err); - -void amd_atl_register_decoder(unsigned long (*f)(struct atl_err *)) -{ - amd_atl_umc_na_to_spa =3D f; -} -EXPORT_SYMBOL_GPL(amd_atl_register_decoder); - -void amd_atl_unregister_decoder(void) -{ - amd_atl_umc_na_to_spa =3D NULL; -} -EXPORT_SYMBOL_GPL(amd_atl_unregister_decoder); - -unsigned long amd_convert_umc_mca_addr_to_sys_addr(struct atl_err *err) -{ - if (!amd_atl_umc_na_to_spa) - return -EINVAL; - - return amd_atl_umc_na_to_spa(err); -} -EXPORT_SYMBOL_GPL(amd_convert_umc_mca_addr_to_sys_addr); - /* * Set by the library module when it loads. Left registered while the modu= le is * resident; consumers keep no direct dependency on the library, so transl= ation diff --git a/include/linux/ras.h b/include/linux/ras.h index eac8cf39ddd5..f0afacdcebcf 100644 --- a/include/linux/ras.h +++ b/include/linux/ras.h @@ -60,18 +60,13 @@ struct atl_err { }; =20 #if IS_ENABLED(CONFIG_AMD_ATL) -void amd_atl_register_decoder(unsigned long (*f)(struct atl_err *)); -void amd_atl_unregister_decoder(void); void amd_retire_dram_row(struct atl_err *err); -unsigned long amd_convert_umc_mca_addr_to_sys_addr(struct atl_err *err); =20 void amd_atl_register_umc_translator(void (*f)(struct atl_err *)); void amd_atl_unregister_umc_translator(void); void amd_translate_umc_mca_addr(struct atl_err *err); #else static inline void amd_retire_dram_row(struct atl_err *err) { } -static inline unsigned long -amd_convert_umc_mca_addr_to_sys_addr(struct atl_err *err) { return -EINVAL= ; } static inline void amd_translate_umc_mca_addr(struct atl_err *err) { err->valid =3D 0; } #endif /* CONFIG_AMD_ATL */ --=20 2.43.0 From nobody Thu Sep 24 14:26:24 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010055.outbound.protection.outlook.com [40.93.198.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDB05417BD2; Tue, 22 Sep 2026 20:23:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108643; cv=fail; b=d36fHhggZPscNP/P0PRhQrEaIPsX98XAxeDOm+OOKdfw/FQgXd4ofJFBbGfz+8lRsT6UiSy0aCKkn6naVj1kZi3pujk4yTofD7ZW5VLSsX/3TTAmWdXViBm61IIMPlzUWTnMSjQrMKFTSZGM9zlDwGWgbvWuBTk4l3kHHYvJvhQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108643; c=relaxed/simple; bh=JsOEpML6N2kXaZNBhiEaE3rSMU6Fq5k7SDAt26s81vk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tew3VMMElNjAUXljf5TIWEJinenlVDMdKDhl6UGKMI1ZThqGyJNdYOFZfev045oaHTdIabfO1WJFQzv3rhh0xrkJZwZ+0S14aLOo6Pne7bluOCVmgKJvry5WeH0+s9c/44xayul4GlD1ZFqkphbtcj5bIUbz8qSL6Eo4J4UxG8k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=BUTkEOpc; arc=fail smtp.client-ip=40.93.198.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="BUTkEOpc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iX2IVdx2ymsodjm+tS9CiHPORg2zT/UAZUFJYVFcitFQGh0c7T97Dn8fSQ3jyOVVKpBV3ujUG+uIZ8vGwd0PHRO39I1wF2BgetRiIy/E/IF8uDYXpR0qUfbZF/sNnu+vhhGIrHilTNR7ilS0SbyUHk0wpGra27v1IfacpJ7Tq9cGf84j7KHHRFMta64e3YJQNanWErlD/N4l9xvUYkaiUwhCpp9aD8oGx6SeRTuofh7+7VaxE/Sim52xp1wWl2Nlj3HmRNqF6XWf7cH6hLdmhBKm7b89FWGkxgelmGT+W8/FooDvs9026B7Pkw2FTLOj9Jws8uaZm0q16/8SdlHnZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zgYFuHP5VFshXoqU1eDHMxWF8sLZjFcSD3f7eJcZRlE=; b=V9uPSiXbkH4cW5Bc3n3yNBoI0KLniWLXJbBwK324AqXaHfRr5I0XDj4vxgc0vz4YJZcWbICVU74GD+fKBwEjoZtHpGIkBzB0f9H1zhGZTs3ulZ3hWOhRbgwDURsIRtBeLlXJrdSY9YtnLJpQKC1igZUr2f+OY1/7ggouZ8+34pVxz7avkAoMj8dZzROlm7IzZJhcYHrKg5fXMoEAVi5Wo6vhHD0L+wDp8zYWvN2UBMx40RneCe+lJoJHoH1D+nBTpSnlX3KdHKOJA6mQ5Kg5ns+srEzQTjL9m2p2zzTvfonDxt49jZ0btzfLxYiITwTAiP/UguB4IzR826TVuEVgeQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=alien8.de smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zgYFuHP5VFshXoqU1eDHMxWF8sLZjFcSD3f7eJcZRlE=; b=BUTkEOpcxc3y007r/nRZR8mTfm0csq05rL6PmmcXi2KlR5JMTyYBTcW3/YhwklrHyHv9VR2jSUlyOY/qVM8dSXdqVziGWbIrYxr9yXx/8zyBhGd4LqqTvv7fz8Q2BBGrQrnm6VCEevhBQC5rP6CNKkGeKE7Gffea776XcdCfztA= Received: from SJ0PR13CA0007.namprd13.prod.outlook.com (2603:10b6:a03:2c0::12) by IA1PR12MB6625.namprd12.prod.outlook.com (2603:10b6:208:3a3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.14; Tue, 22 Sep 2026 20:23:42 +0000 Received: from SJ1PEPF000037A8.namprd03.prod.outlook.com (2603:10b6:a03:2c0:cafe::c) by SJ0PR13CA0007.outlook.office365.com (2603:10b6:a03:2c0::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.14 via Frontend Transport; Tue, 22 Sep 2026 20:23:41 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SJ1PEPF000037A8.mail.protection.outlook.com (10.167.244.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 20:23:41 +0000 Received: from quartz-7b1chost.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49; Tue, 22 Sep 2026 15:23:30 -0500 From: Yazen Ghannam To: , CC: , Yazen Ghannam Subject: [PATCH v10 6/7] RAS/AMD/ATL: Add DRAM address translation via PRM Date: Tue, 22 Sep 2026 15:23:16 -0500 Message-ID: <20260922202318.4079080-7-yazen.ghannam@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260922202318.4079080-1-yazen.ghannam@amd.com> References: <20260922202318.4079080-1-yazen.ghannam@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF000037A8:EE_|IA1PR12MB6625:EE_ X-MS-Office365-Filtering-Correlation-Id: 47f02ab8-e0b2-4457-8727-08df18e764f0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|23010399003|82310400026|376014|36860700016|13003099007|3023799007|6133799003|10067099003|5023799004|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: d99EuKXZnvWVEeiRc0jk/yyJB0wZZthVlxgmybG+G8hb8LUSMH3eAt2Cs2AzQojDHd6UyN8QeotLqvzLdM38JFdHsuwP36abhTIEoPdZGsHT1wDkXuaDNYcIDNoimfshlpTKY8kXdFPU2fDPRSdo6XDOC/bUeBeE/AqEHU7LfPGUH2z1c6XtJG0t8Pw6cijQAJ2h0gcWvEHwQ4jiiG0NVaAr2SHSCIMXSUwuedppJG2/SUXF1TbVKgTljPBH1sZMgUBtleR4F7clkjbYnqrvrm0nuZrYrbJtWhEGEEcKgjVFFv22ARMJIZ4ayRkOUBckE49ZbbqK6HtSfFM6kwjxUu3xagYaNluY79fsmFX5jh/wFka7Ad4anUnwfpEtExw59RgvHNpdz462l8K53bCCON5M+KdRe47pvKfawMKAg/TDSTyEf39Ubs+GfpWPCnwzTl1FJ/WJt0qIZEHczXAe0T/9281QZ/PkwzFISabU2gQ1PzmQTVmaFI4HDJrpjnCmPfjOoqIu2/Ft/IZ2v2Mt3OVpHdzHOqyJwW77vOTzuEAbBg2xRwLY+EfyBOViNSCvhk00/f69Hy9OeDpSXNmx40jODdC6bYM1a/h+zyd6aXyLB2y1Tbum8kRxaGjshFIcQf+BBcTB4693H2Y6teY6+sAS75Dqt1iuj10xTValXf193KCeuosiQw4na71REoG9qoF+a7RECvAhblxRjarsHQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(82310400026)(376014)(36860700016)(13003099007)(3023799007)(6133799003)(10067099003)(5023799004)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: UL8kyK0M22njnKj1KWCCITpPxAwk+By7Ur+o+/eXhQK20EXd6/7DdXMi0vwkL9TYwdpm8ZbbpSFIshA9hiLLjNgV/4N1U5Eqple+O7JdRb1T1zzQS6jZoRKb2XpbZ4Pbe6F2B1uq1PmnSNWLlkYtEY/9uGbWkHn68XfwKgo+wyi1O6AMGSVn41GknlnIgNSM3h3qKGAKV/0WqK6BD9DRckD1yTNFgOc9t/kGBvNhdxKIkXkv2vrGaqKVUS9WweUqI+hDFoMDUK8znM2W7mmDJAAaC5SafhrbLjxvtGuoDrSHaVUeUYDkQN+Q5WhdUp+0Z5842vaUqNhoduQfWUMgf73G48DIQtnkkN+1ElH0idybIAbWEszbFn5UmuAWc56+Fii6ejdg9waW46YeQTMEEqqRSJvPfu0Qcb41PKaPEGsIZmjrysb5ZgLrdmdxAbPI X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 20:23:41.8637 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 47f02ab8-e0b2-4457-8727-08df18e764f0 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF000037A8.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6625 Content-Type: text/plain; charset="utf-8" On AMD's Zen-based SoCs, a Unified Memory Controller (UMC) relative "normalized" address is reported through the MCA_ADDR of UMC SMCA banks on occurrence of a DRAM ECC error. This address can be converted into a DRAM address to decode additional information about the error. Add support to convert a normalized address into a DRAM address using the appropriate PRM handler. Expose it as a new operation, ATL_OP_DA, on the unified interface. Link: https://bugzilla.kernel.org/show_bug.cgi?id=3D220577 Assisted-by: LLM Originally-by: Avadhut Naik Signed-off-by: Yazen Ghannam --- drivers/ras/amd/atl/internal.h | 1 + drivers/ras/amd/atl/system.c | 4 ++++ drivers/ras/amd/atl/umc.c | 10 ++++++++++ include/linux/ras.h | 13 +++++++++++++ 4 files changed, 28 insertions(+) diff --git a/drivers/ras/amd/atl/internal.h b/drivers/ras/amd/atl/internal.h index ed8d176a05e3..bbca0cfca716 100644 --- a/drivers/ras/amd/atl/internal.h +++ b/drivers/ras/amd/atl/internal.h @@ -286,6 +286,7 @@ u64 remove_base_and_hole(struct addr_ctx *ctx, u64 addr= ); =20 /* GUIDs for PRM handlers */ extern const guid_t norm_to_sys_guid; +extern const guid_t norm_to_dram_guid; =20 /* See "PRM Parameter Buffer" in the AMD ACPI Porting Guide. */ struct param_buf { diff --git a/drivers/ras/amd/atl/system.c b/drivers/ras/amd/atl/system.c index 812a30e21d3a..1315bcc63e30 100644 --- a/drivers/ras/amd/atl/system.c +++ b/drivers/ras/amd/atl/system.c @@ -18,6 +18,10 @@ const guid_t norm_to_sys_guid =3D GUID_INIT(0xE7180659, = 0xA65D, 0x451D, 0x92, 0xCD, 0x2B, 0x56, 0xF1, 0x2B, 0xEB, 0xA6); =20 +const guid_t norm_to_dram_guid =3D GUID_INIT(0x7626C6AE, 0xF973, 0x429C, + 0xA9, 0x1C, 0x10, 0x7D, 0x7B, + 0xE2, 0x98, 0xB0); + int determine_node_id(struct addr_ctx *ctx, u8 socket_id, u8 die_id) { u16 socket_id_bits, die_id_bits; diff --git a/drivers/ras/amd/atl/umc.c b/drivers/ras/amd/atl/umc.c index 32748d47ae8d..4495dce3f21e 100644 --- a/drivers/ras/amd/atl/umc.c +++ b/drivers/ras/amd/atl/umc.c @@ -454,4 +454,14 @@ void amd_atl_umc_translate_addr(struct atl_err *err) } } } + + if (err->requested & ATL_OP_DA) { + struct param_buf p_buf =3D { + .addr =3D err->umc_addr, + .out_buf =3D &err->da, + }; + + if (!prm_umc_norm_to_addr(norm_to_dram_guid, &p_buf)) + err->valid |=3D ATL_OP_DA; + } } diff --git a/include/linux/ras.h b/include/linux/ras.h index f0afacdcebcf..6589b4e3ff0c 100644 --- a/include/linux/ras.h +++ b/include/linux/ras.h @@ -37,8 +37,20 @@ static inline void log_arm_hw_error(struct cper_sec_proc_arm *err, const u8 sev) { return; } #endif =20 +/* See "NA to DA Output Buffer" in the AMD ACPI Porting Guide. */ +struct atl_dram_addr { + u8 chip_select; + u8 bank_group; + u8 bank_addr; + u32 row_addr; + u16 col_addr; + u8 rank_mul; + u8 sub_ch; +} __packed; + /* Operations requested and completed through amd_translate_umc_mca_addr()= . */ #define ATL_OP_SPA BIT(0) /* System Physical Address */ +#define ATL_OP_DA BIT(1) /* DRAM address components */ =20 struct atl_err { /* Identifiers; layout mirrors the PRM parameter buffer inputs */ @@ -57,6 +69,7 @@ struct atl_err { =20 /* Outputs */ u64 spa; /* Valid if (@valid & ATL_OP_SPA) */ + struct atl_dram_addr da; /* Valid if (@valid & ATL_OP_DA) */ }; =20 #if IS_ENABLED(CONFIG_AMD_ATL) --=20 2.43.0 From nobody Thu Sep 24 14:26:24 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010036.outbound.protection.outlook.com [52.101.46.36]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D27204B1D10; Tue, 22 Sep 2026 20:23:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.36 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108644; cv=fail; b=SAfZ/X+tws0y27LnTQkcWz8x+1ZuLzT3hAt17DsIyzmnSQdxFguuf6i/ZIRe/hwCB0X1HwX18lY8s4649l/iF0GKwegSf7R29nq0iLrGAgqqgFGQiSPedPIyGP5wn0jC4X7tzm6eezuxQ/0g+lrkPDqbg0Qf807WwZum5//1uH4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790108644; c=relaxed/simple; bh=H8Oj3d+GtSSAm02QoyHJR+lA1oZpkBfytcnvfOMQ8Uw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=UvbG23YY/Ilt/vepPgVvRkQVAyAM8jtzs7xSnml0iyywlZshKZ4lr5F/OetdcCTsh5dv1fDlkTYnvapYe25zT6B32UuX8d0EYsTRldxK6nFHiGpM/F2QTbdNCnBiMSs7Ure7a/nAA/Q+CzC7XUq375/KWFLSfSbJsutVM/A9tTU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=s6dDcrE6; arc=fail smtp.client-ip=52.101.46.36 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="s6dDcrE6" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=s5Xv1lxzcAD8y+clj5D/k4Ypc1p3AHtD4MiPePXKloGaCW7yvQFY1LfGdezGli1mT+JNRQyYboUT6vN+cqZYuFKBgNS7UAR2y1TUbCkcYO3tFBK16617YbXoNr6Um2NW5Cthcr+3aS9lrDswygtizBzHCuA4nUYCon6FNDqCL2U6gWtY8eiKQDW9/pxNGQdHqQdBPctKoJOc5UyjbGRPiU80H0sLdD4KzFFPWdEBH+2P5mGyil1KxF+pFA/cqWyBUBlx+4OGpEnDfkRUev08L3IFlhsknJjSw+WHgyBuYTHzu8u/XAmsfvo8eaDlyK5IhveUBqYXxd3nkLXktX91OA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wSQbc0bUlazWRmIMdlWKwSoLS89tXMoeDSYhz93ligo=; b=EPEEuVMXhD5W0BbQAWgoQiz1ihAARGU4gJ6M/6/e8ExYUJUZc4hzaXF+ncq1prZ20p+uoqR/47JPADNPZIOXCHtyDC8xuvsdCSNyOK51e+9yQlnC+IZWYkm7CulUP7UwATnSLDOPpNQLwu1whOPpyLz/Azej5VePg1WEZ4s6zvd2UGc7OSarJOEeSTauYIP/8YlK6avY5TeadkxikKxkLKGSZnPtBDg++v8qK0X4GuxVncgMwMyrJ5TYaEbSdzJ1eCtBD3vXOKIYHYrFeujgOpXqO1HTWBXFI2Rdc8xg/cRdumBFHzqPaBTCjJDBqFg+qk8j2jCXAMBCJXQO2+fMNw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=alien8.de smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wSQbc0bUlazWRmIMdlWKwSoLS89tXMoeDSYhz93ligo=; b=s6dDcrE6leVWt2Fj+GciF2pDNTCD4l+MC2bFr8kG57OpanT6oFzLK8Qb7ddHNAszHVsijc5lneehMd5RQec3/4lq3XvxuSusXE0zNpu0LQDxeV5qqbx9p0lrVH7y11r7s1FVzO3MyljuQSpjL02nGAhpmEdWEvJtKMb6xIWO7+U= Received: from SJ0PR13CA0016.namprd13.prod.outlook.com (2603:10b6:a03:2c0::21) by SA1PR12MB7126.namprd12.prod.outlook.com (2603:10b6:806:2b0::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.16; Tue, 22 Sep 2026 20:23:43 +0000 Received: from SJ1PEPF000037A8.namprd03.prod.outlook.com (2603:10b6:a03:2c0:cafe::8) by SJ0PR13CA0016.outlook.office365.com (2603:10b6:a03:2c0::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.451.12 via Frontend Transport; Tue, 22 Sep 2026 20:23:43 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SJ1PEPF000037A8.mail.protection.outlook.com (10.167.244.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Tue, 22 Sep 2026 20:23:43 +0000 Received: from quartz-7b1chost.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.49; Tue, 22 Sep 2026 15:23:31 -0500 From: Yazen Ghannam To: , CC: , Yazen Ghannam Subject: [PATCH v10 7/7] EDAC/amd64: Include DRAM address in output Date: Tue, 22 Sep 2026 15:23:17 -0500 Message-ID: <20260922202318.4079080-8-yazen.ghannam@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260922202318.4079080-1-yazen.ghannam@amd.com> References: <20260922202318.4079080-1-yazen.ghannam@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF000037A8:EE_|SA1PR12MB7126:EE_ X-MS-Office365-Filtering-Correlation-Id: 47d6c32f-00d5-4d49-46ae-08df18e765cc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|376014|1800799024|23010399003|36860700016|11063799006|10067099003|56012099006|22082099003|18002099003|20046099003; X-Microsoft-Antispam-Message-Info: wTHHJr/CnK6fs3tf1Mn558yqzYKgOLLNPtm3msQc783e33Z1EPFi3+PIOfP/nqb37zGkyla+XLw4IpM7/Yorlp4hE9V9XqrPF0HJdGjwH3h1Jb466az9HeoCvETBj4nwqPmNwda3insPnNzkZpnfcqmmMz1uvrdCgB7v/LBIIyNOtTkCOr/Kw0tS7qsIYJ8Enh7Fz+1ghN09JpMeQeQ8LX5OewEEOyNp2G3kkCiu8SNwo1bhnzYtrQU3MqvPbh6893taFmOIgWg0E+ErOUYoDmjl+kwBqRHhEEQHn1qyChN+fb6gMqC68SYXDiZYgdFn/EFXTUNd/z69UT09nybRs90FYpuDjdS8kPK1YhdRUcVsHJiPF1O3WbSP6ve6azu05LO4iQlUqKMvQiMvpPntMenmnBtKAB2RSKjpLZyFC/hRusJjK42dqNH6LPhavIgr70iUPF2N/bnzEufydPl3NNSH7boEcKvZBRlKxiaWEHu3U7kHbi3SH/vJvc5NjgCdFZrbCQ/00LqTnAnPeOVyrLEf4i3GwekWvha0+meheDc+sadEli4S1rHTL2JVtK9ul7oEptfz/8vnbHLuCqRI7QUC+lR/U8mQADvmx2cntKW4SHDSld3PDoQyz5Mv22lzLexdgDGQc+sOg4rYFwcxCOMTSeVTXsjX0Qs49aSSRQUAxmkLE4DQZ12GTtuH5XJHR5X8pCWN85wU32bYL3utfg== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(376014)(1800799024)(23010399003)(36860700016)(11063799006)(10067099003)(56012099006)(22082099003)(18002099003)(20046099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: m9rci2G86HCV2cwggvPyPweAwtWwISaXB29HpJ1teDdzu5oIUrLQ/fS5U66zace+ABHZWIASfmlee2oe70oKmHo9Z7kRotB1Yqlwj6gfr+vxcZgOVOxlRbO7Zi1Sy0g/8L5a0Pui1+7vOo+jpfJVKIxF0xXeQJVO6QwhDgwpQgB4pWpG0OuV8497QpiF9MTCEFk/AQoyz57XfqlVn1HJsp2242U4lPfHNojGpFfufsFCdNb9hQCLAQCF7YtBfWrJoHwEpTRgX5RHj/pNRUnkFcbnHsLpopa7fzWauwsNhUgHNPZ8IwyL2fG2ibaj02eUUnE9RLBeuS7ABQFf+mWTgdK61TeCwuVbpunzmSOUcOpTr1P4SKNM/c5s+CnBUPTdlhXp1Z+iUYQ+Cx71+InB1h906uBeCWA490rl9WtmVPPR3gCZab/ABzxz43GqGA+l X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 20:23:43.3060 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 47d6c32f-00d5-4d49-46ae-08df18e765cc X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF000037A8.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB7126 Content-Type: text/plain; charset="utf-8" The DRAM address of an error is used by tooling to find failure patterns, e.g. for off-system analysis or to offline a page affected by a bad row. Other EDAC modules (GHES and SKX) already provide it. AMD64 could not, because the translation is system-specific. Request the DRAM address in addition to the System Physical Address when translating a UMC error. The SPA is required to log the error. The DRAM address is best-effort and only added when its translation succeeds. Add the DRAM address to the EDAC "other_detail" field, along with the socket and IPID that tooling needs to translate it back into an SPA. Assisted-by: LLM Originally-by: Avadhut Naik Signed-off-by: Yazen Ghannam --- drivers/edac/amd64_edac.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c index f428d815bff1..7d7d116dbb75 100644 --- a/drivers/edac/amd64_edac.c +++ b/drivers/edac/amd64_edac.c @@ -2704,11 +2704,15 @@ static int get_channel_from_ecc_syndrome(struct mem= _ctl_info *mci, u16 syndrome) return map_err_sym_to_channel(err_sym, pvt->ecc_sym_sz); } =20 +#define MSG_SIZE 256 static void __log_ecc_error(struct mem_ctl_info *mci, struct err_info *err, u8 ecc_type) { enum hw_event_mc_err_type err_type; const char *string; + char s[MSG_SIZE]; + + s[0] =3D '\0'; =20 if (ecc_type =3D=3D 2) err_type =3D HW_EVENT_ERR_CORRECTED; @@ -2745,10 +2749,27 @@ static void __log_ecc_error(struct mem_ctl_info *mc= i, struct err_info *err, break; } =20 + if (err->a_err.valid & ATL_OP_DA) { + struct atl_dram_addr *da =3D &err->a_err.da; + char *p =3D s, *end =3D p + sizeof(s); + + /* Include a version prefix in case the format needs to change later. */ + p +=3D scnprintf(p, end - p, "[AMDv1]"); + p +=3D scnprintf(p, end - p, " SocketId:0x%x", err->a_err.socket_id); + p +=3D scnprintf(p, end - p, " IPID:0x%llx", err->a_err.ipid); + p +=3D scnprintf(p, end - p, " ChipSelect:0x%x", da->chip_select); + p +=3D scnprintf(p, end - p, " Row:0x%x", da->row_addr); + p +=3D scnprintf(p, end - p, " Column:0x%x", da->col_addr); + p +=3D scnprintf(p, end - p, " Bank:0x%x", da->bank_addr); + p +=3D scnprintf(p, end - p, " BankGroup:0x%x", da->bank_group); + p +=3D scnprintf(p, end - p, " RankMul:0x%x", da->rank_mul); + p +=3D scnprintf(p, end - p, " SubChannel:0x%x", da->sub_ch); + } + edac_mc_handle_error(err_type, mci, 1, err->page, err->offset, err->syndrome, err->csrow, err->channel, -1, - string, ""); + string, s); } =20 static inline void decode_bus_error(int node_id, struct mce *m) @@ -2844,7 +2865,7 @@ static void decode_umc_error(int node_id, struct mce = *m) err.a_err.addr =3D m->addr; err.a_err.ipid =3D m->ipid; err.a_err.cpu =3D m->extcpu; - err.a_err.requested =3D ATL_OP_SPA; + err.a_err.requested =3D ATL_OP_SPA | ATL_OP_DA; =20 amd_translate_umc_mca_addr(&err.a_err); if (!(err.a_err.valid & ATL_OP_SPA)) { --=20 2.43.0