From nobody Thu Nov 5 05:12:52 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=117.135.210.5 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793847369; b=xIsUNkpI3HL2hce2th2zh5eLkUgTcVPtTisR3rntrn3JCQ6RVPKH4gtHt47eQnYmSiOw UM5zhrkLTp9aH70bnFdc26wxq9o3zzWI4LK2xPZNFaQ0dxsAzj1LUjhlcXcGLbpeEJmK2 s2YenTri59LsyMYmHZBOejbUvmw0Ryso239V0XLD7vgA5RuROeg2OZ5d3RuYxelQJaOjS esv9JJ1uwdRQZcvq6yQ5amf1VDPZZ9JucoyJib48wPHLDh2sIrGfJHBU7bdpNiFukfLUx aTNANpu6irGWKPpN0bUCqn2K3XpELKIHwx8fvFQufnFJ12oL3rGUxszVDP5mFQTGoFA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793847369; h=DMARC-Filter:DKIM-Signature:Received:From:To:Cc:Subject:Date: Message-Id:X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding:X-CM-TRANSID:X-Coremail-Antispam: X-CM-SenderInfo; bh=9rPGj9/XDFWmTAQ/zcD4LN1HWxIZ5LTcjlUNlSNksGQ=; b=qAFTEDCzUr7c7RoH2v3Gpn5mKSIUb0eUpMoBd/+RvroaYlXqemuDf3oeJ3IUK12qXhgE h7MeCpuPBA+U58Z4yFqfTuqMyyCwIS9OOfkfTBcQ92rMnrRIuoNsju/homuIdux/+Mgem f3zHYb+OQtyMyCrYDzOcqkMfvfdkFWMZW/91pJeTWXciV3AaXyipp18DiitBUWopUt/7V NBkB1N/5goIFBK14PM3tAjRZ/u46T1vAr2AEV96GravVoPLfBrfwOZDQu/r2ywgwVHX4O /Q5YUBPSWvdHxIPYfLxUCO4ksEtuTpHG2krnqTqe4jcejWPqjJBRmA+s7NVEFGhs1UA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass header.d=163.com header.i=@163.com header.a=rsa-sha256 header.s=s110527 header.b=E+9ankL3; arc=none smtp.remote-ip=117.135.210.5 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECE66606A32E; Thu, 5 Nov 2026 02:56:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org ECE66606A32E Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=163.com header.i=@163.com header.a=rsa-sha256 header.s=s110527 header.b=E+9ankL3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=9r PGj9/XDFWmTAQ/zcD4LN1HWxIZ5LTcjlUNlSNksGQ=; b=E+9ankL3w0xx/VHBSX /Ds5ojoHe18fnkKJgyHc1hrhMRmN9t5c2Bj43BOFZ+KroQBjA2pf5FLupmQvEAZo VzV9A1zRwCvlYl3bB0QgL2NAn/eFpts4ahOoJB3z9Wbt30qFTkAhswyFRHtYtztO hLwkEEQn873IN1j+g0XqOvYW4= Received: from localhost.localdomain (unknown []) by gzga-smtp-mtada-g0-1 (Coremail) with SMTP id _____wD3v14m8OtqcGAKFQ--.12622S3; Thu, 05 Nov 2026 10:55:39 +0800 (CST) From: Qunqin Zhao To: bp@alien8.de Cc: tony.luck@intel.com, linux-edac@vger.kernel.org, chenhuacai@kernel.org, zhaoqunqin@loongson.cn, linux-kernel@vger.kernel.org Subject: [PATCH v6 1/4] EDAC/loongson: Rename driver-local symbols Date: Thu, 5 Nov 2026 10:55:29 +0800 Message-Id: <20261105025532.2055-2-zhaoqunqin@163.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20261105025532.2055-1-zhaoqunqin@163.com> References: <20261105025532.2055-1-zhaoqunqin@163.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: _____wD3v14m8OtqcGAKFQ--.12622S3 X-Coremail-Antispam: 1Uf129KBjvJXoWxGw43uF4DCr1xXFy3JFWDurg_yoWrXF48pF 13Aw4a9r45Kr1jk393trZ8ZF1ay34Sq3srXF47A3yI93s8Cw1UXF93Ka17ArZxAr95Kr47 Z3y8Kr48CF47CrUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07UMSoAUUUUU= X-CM-SenderInfo: 52kd01pxqtx0i6rwjhhfrp/xtbC7gzcHGrr8CyDuwAA3H Content-Type: text/plain; charset="utf-8" From: Qunqin Zhao Remove the "edac_" prefix from driver-local definitions to keep the edac_ namespace reserved for EDAC core functions. Rename edac_check(), edac_probe() and edac_remove() to loongson_check(), loongson_probe() and loongson_remove(), respectively, and rename struct loongson_edac_pvt, loongson_edac_driver and loongson_edac_acpi_match to loongson_pvt, loongson_driver and loongson_acpi_match, respectively. The shorter names are unambiguous since they are all file-local. Signed-off-by: Qunqin Zhao --- drivers/edac/loongson_edac.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/drivers/edac/loongson_edac.c b/drivers/edac/loongson_edac.c index 3ed4d34a33..5dfa41e877 100644 --- a/drivers/edac/loongson_edac.c +++ b/drivers/edac/loongson_edac.c @@ -13,7 +13,7 @@ =20 #define ECC_CS_COUNT_REG 0x18 =20 -struct loongson_edac_pvt { +struct loongson_pvt { void __iomem *ecc_base; =20 /* @@ -27,7 +27,7 @@ struct loongson_edac_pvt { =20 static int read_ecc(struct mem_ctl_info *mci) { - struct loongson_edac_pvt *pvt =3D mci->pvt_info; + struct loongson_pvt *pvt =3D mci->pvt_info; u64 ecc; int cs; =20 @@ -41,9 +41,9 @@ static int read_ecc(struct mem_ctl_info *mci) return cs; } =20 -static void edac_check(struct mem_ctl_info *mci) +static void loongson_check(struct mem_ctl_info *mci) { - struct loongson_edac_pvt *pvt =3D mci->pvt_info; + struct loongson_pvt *pvt =3D mci->pvt_info; int new, add; =20 new =3D read_ecc(mci); @@ -74,13 +74,13 @@ static void dimm_config_init(struct mem_ctl_info *mci) =20 static void pvt_init(struct mem_ctl_info *mci, void __iomem *vbase) { - struct loongson_edac_pvt *pvt =3D mci->pvt_info; + struct loongson_pvt *pvt =3D mci->pvt_info; =20 pvt->ecc_base =3D vbase; pvt->last_ce_count =3D read_ecc(mci); } =20 -static int edac_probe(struct platform_device *pdev) +static int loongson_probe(struct platform_device *pdev) { struct edac_mc_layer layers[2]; struct mem_ctl_info *mci; @@ -98,7 +98,7 @@ static int edac_probe(struct platform_device *pdev) layers[1].size =3D 1; layers[1].is_virt_csrow =3D true; mci =3D edac_mc_alloc(0, ARRAY_SIZE(layers), layers, - sizeof(struct loongson_edac_pvt)); + sizeof(struct loongson_pvt)); if (mci =3D=3D NULL) return -ENOMEM; =20 @@ -112,7 +112,7 @@ static int edac_probe(struct platform_device *pdev) mci->ctl_page_to_phys =3D NULL; mci->pdev =3D &pdev->dev; mci->error_desc.grain =3D 8; - mci->edac_check =3D edac_check; + mci->edac_check =3D loongson_check; =20 pvt_init(mci, vbase); dimm_config_init(mci); @@ -128,7 +128,7 @@ static int edac_probe(struct platform_device *pdev) return 0; } =20 -static void edac_remove(struct platform_device *pdev) +static void loongson_remove(struct platform_device *pdev) { struct mem_ctl_info *mci =3D edac_mc_del_mc(&pdev->dev); =20 @@ -136,21 +136,21 @@ static void edac_remove(struct platform_device *pdev) edac_mc_free(mci); } =20 -static const struct acpi_device_id loongson_edac_acpi_match[] =3D { +static const struct acpi_device_id loongson_acpi_match[] =3D { { .id =3D "LOON0010" }, { } }; -MODULE_DEVICE_TABLE(acpi, loongson_edac_acpi_match); +MODULE_DEVICE_TABLE(acpi, loongson_acpi_match); =20 -static struct platform_driver loongson_edac_driver =3D { - .probe =3D edac_probe, - .remove =3D edac_remove, +static struct platform_driver loongson_driver =3D { + .probe =3D loongson_probe, + .remove =3D loongson_remove, .driver =3D { .name =3D "loongson-mc-edac", - .acpi_match_table =3D loongson_edac_acpi_match, + .acpi_match_table =3D loongson_acpi_match, }, }; -module_platform_driver(loongson_edac_driver); +module_platform_driver(loongson_driver); =20 MODULE_LICENSE("GPL"); MODULE_AUTHOR("Zhao Qunqin "); --=20 2.47.2 From nobody Thu Nov 5 05:12:52 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=117.135.210.5 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793847373; b=KPEjB0KdvUsm94scmx6LVHhprDszYxXPmytGnPdlr6LvO6vqkJxy7sRveSIvLak9gZeZ pjYMPMM0COipSeKSCjIe36sKfpC8rH/+D29TXEwCulsMOIAOfMzWltSRZ45oqxqQ54Ju3 wmvfv01DdTgCV6onWIQehglfoSrvzvQ1Uc8QHvmsGEVsG8I+PrOxLrNHSuLYBqXt0YJws M5HwDpoKQ3k5AF3DOm4TrHBYM9Pw4PakDmKlKq0ha1wAjhO5LF90bfSj70RZj/McqVr83 4+vc7ts2i1XmtrZhe3tjS4T89lq/ztTRytwozcyUpQ9/vymctMMOdF2ug/Av7/ETzfw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793847373; h=DMARC-Filter:DKIM-Signature:Received:From:To:Cc:Subject:Date: Message-Id:X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding:X-CM-TRANSID:X-Coremail-Antispam: X-CM-SenderInfo; bh=9RthZ381jl0Uj6Tlk31SVyRO0Pz2Il9brHLkB4+Zn5g=; b=OyIs+JiKLgLwJmCdAVwiD2mQv6mgebMPIHre8s0JiXgwL6R2yQM58uhP5lcKDq0u5o82 JU/phpjeBqPwNOKuAGxwANQM0LxoUDECZHdKNh49+3YNXScnn6Z9jE0/QIx05IZ+ctPBd PV9SmkKrKhPIKiGiws5udVWovJ1wWkWuPBhZIPgBh8KmYnJhnYUBDni/gfFqkgPnxn9SP xqtBJoX3Q8GsTjqhY0Hg1GJvYhamqZ/Wr25Y5YxSwKFUJIC/I3nwsGgRa9Alf6R+i8aF+ woo7oXg4DGDcH5S3B3rWS2tNJSmv8QpCrsjhpOLfvwqqLI6pFsDTO37W9w7Wa2M2SaA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass header.d=163.com header.i=@163.com header.a=rsa-sha256 header.s=s110527 header.b=Peu1lBzI; arc=none smtp.remote-ip=117.135.210.5 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A56A2606A33E; Thu, 5 Nov 2026 02:56:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org A56A2606A33E Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=163.com header.i=@163.com header.a=rsa-sha256 header.s=s110527 header.b=Peu1lBzI DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=9R thZ381jl0Uj6Tlk31SVyRO0Pz2Il9brHLkB4+Zn5g=; b=Peu1lBzImGy7kWG54f 43dUWtHTezpk14SexzixRIpLp/VvtsTh8f903X1XO2N+xTVFeCIeiosdkB9GrDRS 41Ekpgs0omEhw9dbuuI8XMgochYRmP04tNardxEXhuNZ7rOMDSoXFoR3Hjg65p/v txH7LT7UkDxduYQs1rPE5yz64= Received: from localhost.localdomain (unknown []) by gzga-smtp-mtada-g0-1 (Coremail) with SMTP id _____wD3v14m8OtqcGAKFQ--.12622S4; Thu, 05 Nov 2026 10:55:46 +0800 (CST) From: Qunqin Zhao To: bp@alien8.de Cc: tony.luck@intel.com, linux-edac@vger.kernel.org, chenhuacai@kernel.org, zhaoqunqin@loongson.cn, linux-kernel@vger.kernel.org, Wang Jinwei , Yulong Wang , Dongyan Qian , Chao Li , Huacai Chen Subject: [PATCH v6 2/4] EDAC/loongson: Encode node and MC info into mc_idx Date: Thu, 5 Nov 2026 10:55:30 +0800 Message-Id: <20261105025532.2055-3-zhaoqunqin@163.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20261105025532.2055-1-zhaoqunqin@163.com> References: <20261105025532.2055-1-zhaoqunqin@163.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: _____wD3v14m8OtqcGAKFQ--.12622S4 X-Coremail-Antispam: 1Uf129KBjvJXoWxGF4ftr18tr1xtFykKrWkXrb_yoWrAF48pF 4UCa1YgrWrtrnruwsayrWUA3WakF95Ka9Fq392yw409r9Fyw1DXFyfXFy2yFn7Cry8GFy5 Xas5Gr4xCFWUCF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07UROJOUUUUU= X-CM-SenderInfo: 52kd01pxqtx0i6rwjhhfrp/xtbC7hLdHWrr8DKFmwAA3h Content-Type: text/plain; charset="utf-8" From: Wang Jinwei On Loongson multi-node systems, memory controllers are distributed across multiple nodes. Encode node and MC information into mc_idx so that sysfs entries uniquely identify each controller. The driver gets mc-idx from ACPI _DSD property if firmware provides it. If not, it falls back to edac_device_alloc_index() for legacy firmware compatibility. The number of memory controllers per node (mcs-per-node) is obtained from firmware via ACPI _DSD property, with a default of 4 for backward compatibility. Validate that the firmware-provided value is non-zero to prevent division by zero. The node and MC IDs are decoded from mc_idx: node =3D mc_idx / mcs_per_node mc =3D mc_idx % mcs_per_node Cc: Yulong Wang Cc: Dongyan Qian Cc: Chao Li Signed-off-by: Wang Jinwei Signed-off-by: Qunqin Zhao Reviewed-by: Huacai Chen --- drivers/edac/loongson_edac.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/drivers/edac/loongson_edac.c b/drivers/edac/loongson_edac.c index 5dfa41e877..3c5d29941a 100644 --- a/drivers/edac/loongson_edac.c +++ b/drivers/edac/loongson_edac.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "edac_module.h" =20 #define ECC_CS_COUNT_REG 0x18 @@ -23,6 +24,8 @@ struct loongson_pvt { * register state. */ int last_ce_count; + u32 mcs_per_node; + bool mc_idx_valid; }; =20 static int read_ecc(struct mem_ctl_info *mci) @@ -44,7 +47,8 @@ static int read_ecc(struct mem_ctl_info *mci) static void loongson_check(struct mem_ctl_info *mci) { struct loongson_pvt *pvt =3D mci->pvt_info; - int new, add; + char other_detail[64] =3D {0}; + int new, add, node, mc; =20 new =3D read_ecc(mci); add =3D new - pvt->last_ce_count; @@ -52,8 +56,14 @@ static void loongson_check(struct mem_ctl_info *mci) if (add <=3D 0) return; =20 + if (pvt->mc_idx_valid) { + node =3D mci->mc_idx / pvt->mcs_per_node; + mc =3D mci->mc_idx % pvt->mcs_per_node; + snprintf(other_detail, sizeof(other_detail), "node:%d mc:%d", node, mc); + } + edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, add, - 0, 0, 0, 0, 0, -1, "error", ""); + 0, 0, 0, 0, 0, -1, "error", other_detail); } =20 static void dimm_config_init(struct mem_ctl_info *mci) @@ -72,19 +82,25 @@ static void dimm_config_init(struct mem_ctl_info *mci) dimm->grain =3D 8; } =20 -static void pvt_init(struct mem_ctl_info *mci, void __iomem *vbase) +static void pvt_init(struct mem_ctl_info *mci, void __iomem *vbase, + bool mc_idx_valid, u32 mcs_per_node) { struct loongson_pvt *pvt =3D mci->pvt_info; =20 pvt->ecc_base =3D vbase; pvt->last_ce_count =3D read_ecc(mci); + pvt->mc_idx_valid =3D mc_idx_valid; + pvt->mcs_per_node =3D mcs_per_node; } =20 static int loongson_probe(struct platform_device *pdev) { struct edac_mc_layer layers[2]; struct mem_ctl_info *mci; + struct device *dev =3D &pdev->dev; void __iomem *vbase; + u32 mcs_per_node; + bool mc_idx_valid =3D true; int ret; =20 vbase =3D devm_platform_ioremap_resource(pdev, 0); @@ -102,7 +118,6 @@ static int loongson_probe(struct platform_device *pdev) if (mci =3D=3D NULL) return -ENOMEM; =20 - mci->mc_idx =3D edac_device_alloc_index(); mci->mtype_cap =3D MEM_FLAG_RDDR4; mci->edac_ctl_cap =3D EDAC_FLAG_NONE; mci->edac_cap =3D EDAC_FLAG_NONE; @@ -114,7 +129,15 @@ static int loongson_probe(struct platform_device *pdev) mci->error_desc.grain =3D 8; mci->edac_check =3D loongson_check; =20 - pvt_init(mci, vbase); + if (device_property_read_u32(dev, "mc-idx", &mci->mc_idx)) { + mci->mc_idx =3D edac_device_alloc_index(); + mc_idx_valid =3D false; + } + + if (device_property_read_u32(dev, "mcs-per-node", &mcs_per_node) || mcs_p= er_node =3D=3D 0) + mcs_per_node =3D 4; + + pvt_init(mci, vbase, mc_idx_valid, mcs_per_node); dimm_config_init(mci); =20 ret =3D edac_mc_add_mc(mci); --=20 2.47.2 From nobody Thu Nov 5 05:12:52 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=117.135.210.2 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793847379; b=P34MLP57yHNyKnG7e82PMD3b7egpnlY0qIgZRhxmtDxFdCdqIgHY9/QaxhmcVtCfd111 IG3Dlfq0oyB738RZhGrlhufbVUUYRKWF8oTTTpXpHzuJUJB8g+hvoBflB+orvtHG4WhtR YfJk4LatdO0H8GmyKDr/OVRYPAdH6HqYkctiKgjUA1kGmFwFr5b9QBJ1SzCCbYrlMH/OA TzKRQUvwHhBrfV8MhsN/Uayp7S1/BqdVlsSXjJ0gnCayqvy1loPlW0OhtW1kZyLQrCrcH 4Es3UwDXNT075uki4KvAEWOAKI1Ou6SNYTISJE71qVIzKHZOjghkWMWiYx30Z+Y3oVQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793847379; h=DMARC-Filter:DKIM-Signature:Received:From:To:Cc:Subject:Date: Message-Id:X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding:X-CM-TRANSID:X-Coremail-Antispam: X-CM-SenderInfo; bh=O4hNRHiJ9xSt1qrjl0/38zc18uhK9gYa1qM9Zn0CEfo=; b=FRfx9AVgHHjIL7aEDF5z29igRa5Cg130X/d43wNerCU3ItASbGfFJEECYvrPcHMwT6Y5 5jj3RAGoc0HTHtlSOVJ5TqH0bI/E85dZHbtJ4GjlJCB/FgewpNDbCb281ewC6AG6JeQac jUUMm78/onihjLSui/jaVputVwKHpOuvawFbEooENnpLWEoMZEkubxYbdwAj2mZdUmPKi 2KgPS2ejP7lu7KYjl7/13kdBK7wW4YvdE9w30IhsMbLCjYAuz1nOHqsqosZy9R0JN0rQd xeMj2LPgTwzK3tQ6TyxD5xORMiduf3rjPjfwrjORjA4Ivi5pgQ9BQ5Ty2HxUirmX2BQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass header.d=163.com header.i=@163.com header.a=rsa-sha256 header.s=s110527 header.b=WJvBDNYk; arc=none smtp.remote-ip=117.135.210.2 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 175BA606A33D; Thu, 5 Nov 2026 02:56:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 175BA606A33D Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=163.com header.i=@163.com header.a=rsa-sha256 header.s=s110527 header.b=WJvBDNYk DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=O4 hNRHiJ9xSt1qrjl0/38zc18uhK9gYa1qM9Zn0CEfo=; b=WJvBDNYkJiH45Xj244 o0QamMVznKaWkMVBhaxmkN8ZywZDhmLzoSbkZBxFRv5ac+Wug3OUF6VOftsM4KXr KQZlo9aEpe9NJs6R8KHxGYm219S4WAHROn/MS0kFBmGUnES8k18gAdsq4SfOb70o My8btsHstSmQe6mjC1pnFUho4= Received: from localhost.localdomain (unknown []) by gzga-smtp-mtada-g0-1 (Coremail) with SMTP id _____wD3v14m8OtqcGAKFQ--.12622S5; Thu, 05 Nov 2026 10:55:53 +0800 (CST) From: Qunqin Zhao To: bp@alien8.de Cc: tony.luck@intel.com, linux-edac@vger.kernel.org, chenhuacai@kernel.org, zhaoqunqin@loongson.cn, linux-kernel@vger.kernel.org, Wang Jinwei , Dongyan Qian , Chao Li , Huacai Chen Subject: [PATCH v6 3/4] EDAC/loongson: Get DIMM size from ACPI _DSM method Date: Thu, 5 Nov 2026 10:55:31 +0800 Message-Id: <20261105025532.2055-4-zhaoqunqin@163.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20261105025532.2055-1-zhaoqunqin@163.com> References: <20261105025532.2055-1-zhaoqunqin@163.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: _____wD3v14m8OtqcGAKFQ--.12622S5 X-Coremail-Antispam: 1Uf129KBjvJXoW7Zr13ZryrCw4DAF1xWF4DJwb_yoW8KF48pF 45u34rKr43trnruwsIyry5CFy3u34fJF9rGFWxJ3yagw1DC345XFy5GFW3JFZ8A34rtFW7 ZFWkCws5u3WDGr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07j7SdDUUUUU= X-CM-SenderInfo: 52kd01pxqtx0i6rwjhhfrp/xtbC7RnfH2rr8DlwEgAA3e Content-Type: text/plain; charset="utf-8" From: Wang Jinwei Add support to retrieve DIMM size from ACPI _DSM method instead of using hardcoded values. 1. Add loongson_get_dimm_size_acpi() to call ACPI _DSM method to Get DIMM size in MB. 2. Update dimm_config_init() to use the size from ACPI, with fallback to default 1 MB if ACPI method fails. 3. Add ACPI UUID and DSM function definitions for EDAC. The DIMM size is passed from UEFI through ACPI OperationRegion and _DSM method, enabling correct display of memory size in /sys/devices/system/edac/mc/mc*/size_mb. Cc: Dongyan Qian Cc: Chao Li Signed-off-by: Wang Jinwei Signed-off-by: Qunqin Zhao Reviewed-by: Huacai Chen --- drivers/edac/loongson_edac.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/drivers/edac/loongson_edac.c b/drivers/edac/loongson_edac.c index 3c5d29941a..c19b025004 100644 --- a/drivers/edac/loongson_edac.c +++ b/drivers/edac/loongson_edac.c @@ -13,6 +13,8 @@ #include "edac_module.h" =20 #define ECC_CS_COUNT_REG 0x18 +#define LOONGSON_EDAC_DSM_UUID "65d0431b-7eb8-46df-b914-b7d568553140" +#define LOONGSON_EDAC_DSM_FUNC_GET_DIMM_SIZE 1 =20 struct loongson_pvt { void __iomem *ecc_base; @@ -66,13 +68,39 @@ static void loongson_check(struct mem_ctl_info *mci) 0, 0, 0, 0, 0, -1, "error", other_detail); } =20 +static u32 loongson_get_dimm_size_acpi(struct device *dev) +{ + acpi_handle handle =3D ACPI_HANDLE(dev); + union acpi_object *obj; + u32 size_mb =3D 1; + guid_t guid; + + if (!handle) + return size_mb; + + if (guid_parse(LOONGSON_EDAC_DSM_UUID, &guid)) + return size_mb; + + obj =3D acpi_evaluate_dsm(handle, &guid, 0, + LOONGSON_EDAC_DSM_FUNC_GET_DIMM_SIZE, NULL); + if (!obj) + return size_mb; + + if (obj->type =3D=3D ACPI_TYPE_INTEGER) + size_mb =3D (u32)obj->integer.value; + + ACPI_FREE(obj); + return size_mb; +} + static void dimm_config_init(struct mem_ctl_info *mci) { struct dimm_info *dimm; + struct device *dev =3D mci->pdev; u32 size, npages; =20 - /* size not used */ - size =3D -1; + size =3D loongson_get_dimm_size_acpi(dev); + npages =3D MiB_TO_PAGES(size); =20 dimm =3D edac_get_dimm(mci, 0, 0, 0); --=20 2.47.2 From nobody Thu Nov 5 05:12:52 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=117.135.210.2 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793847382; b=jgxR74x/9qzGbbH9j2tMjH2rH4qC1HD5O1W/Qel5kMJqyIMrO28Gmu/NtacCyVeAWiDf lxB6MzT0DHUpvg9/06kfLzF9S78Dxqte1W6HEyDyUxUTSdTXrvAgUI7B9tgAg3fTU2Q0g lpvlkltvdSMhBp+T3nsn7ZvDDdm7qF5QWvq/h6QjEwvRH9EtoNxZF6IeyNQvvoGzLQUVa AlCca1ipZEPvfOElM5y85xxOBl2nSTXehLgs5CucjUbUCYfp+bFu8zR1ec0DWwzz882G2 OpX7mZsCaeivPMWbaBHCxgnEOURbGZG+24DCn4OGlZg/9BuVvEGEAvFyxHyNfmIK2Pg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793847382; h=DMARC-Filter:DKIM-Signature:Received:From:To:Cc:Subject:Date: Message-Id:X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding:X-CM-TRANSID:X-Coremail-Antispam: X-CM-SenderInfo; bh=homTZI+6uxBvAHqxiM6mH0I0hG0/U8SZI8MJlOi/WMw=; b=JA4F+k8PeE4xgzHbdz/6cGSDT2jUaNEQpOgiZZks5cpUZBZdDadDFkp+53iw3UlvcqIq ydarJbY9Anq0ddyPCOkljFrKh3G5dsCx+Uf2zIfzqhTUMDN5+HXX38TDR1ae5XR15L+Fo IsHIBGY6EzgQSaE91aLczZkFLw0mgq2SJPBxt+Ndb1Y8KInAUPUe9jYb45phKgueck0iQ FD5pRC9cFuXG2/wHRkKFtI+IUsocgH/P6qQc4AcgVybP0lziTRXeB82wWHxQGPZFJLr0S HH1J4wlwgeCZ+q5/7G8As3Ou9OSffyI/QrzRt9fuaHpUcawgr/0fsnJGb3xWvTqz5dg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass header.d=163.com header.i=@163.com header.a=rsa-sha256 header.s=s110527 header.b=MrkKiyr9; arc=none smtp.remote-ip=117.135.210.2 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7DA3F606D806; Thu, 5 Nov 2026 02:56:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 7DA3F606D806 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=163.com header.i=@163.com header.a=rsa-sha256 header.s=s110527 header.b=MrkKiyr9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=ho mTZI+6uxBvAHqxiM6mH0I0hG0/U8SZI8MJlOi/WMw=; b=MrkKiyr9S9pu50iCwg V8HHdsR9R7WBV1xoDJ9Ak5biGthLPymSowRDjue5p+oKGnpuz3/t0hrd0FV/2eks X9I4lTN5wlNSjTQ/R4E3PaoV5cRva91O6Ii70HBcFkpDsZBQSj510pgPrzx8Ytdq OBI8qHk0jUe/qcae1nPP51f78= Received: from localhost.localdomain (unknown []) by gzga-smtp-mtada-g0-1 (Coremail) with SMTP id _____wD3v14m8OtqcGAKFQ--.12622S6; Thu, 05 Nov 2026 10:55:59 +0800 (CST) From: Qunqin Zhao To: bp@alien8.de Cc: tony.luck@intel.com, linux-edac@vger.kernel.org, chenhuacai@kernel.org, zhaoqunqin@loongson.cn, linux-kernel@vger.kernel.org, Wusheng , Wang Jinwei , Huacai Chen Subject: [PATCH v6 4/4] EDAC/loongson: Add CS4-7 timeout filter for cross-node access Date: Thu, 5 Nov 2026 10:55:32 +0800 Message-Id: <20261105025532.2055-5-zhaoqunqin@163.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20261105025532.2055-1-zhaoqunqin@163.com> References: <20261105025532.2055-1-zhaoqunqin@163.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: _____wD3v14m8OtqcGAKFQ--.12622S6 X-Coremail-Antispam: 1Uf129KBjvJXoWxZFy7GFyUCF45Xw18Ar1xAFb_yoW5uFWfpF 45Can8trW8Kr1q9w1ktrWUZa45CFZagFZrWFZay34rWr9Iy34DZryagr12vFn8C34Fkrn8 X3WrKr4xCF4UAa7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07j5ID7UUUUU= X-CM-SenderInfo: 52kd01pxqtx0i6rwjhhfrp/xtbC7R-gIGrr8D9xnAAA3R Content-Type: text/plain; charset="utf-8" From: Qunqin Zhao On Loongson 3C6000 multi-node systems, when the EDAC driver running on one node accesses the memory controller registers of another node, the read operation may timeout and return random values. This causes false CE error reports because the random values in CS0-3 (low 32 bits) are misinterpreted as valid ECC error counts. For cross-node accesses, check CS4-7 (high 32 bits) of the ECC count register. If the valid-cs-bits firmware property is set and the high bits are non-zero, it indicates a timeout or random value, so skip the report and return the previous count. To avoid undefined behavior on 8-CS systems where valid_cs_bits=3D64, guard the shift with a bounds check (valid_cs_bits < 64). Signed-off-by: Wusheng Signed-off-by: Wang Jinwei Signed-off-by: Qunqin Zhao Reviewed-by: Huacai Chen --- drivers/edac/loongson_edac.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/edac/loongson_edac.c b/drivers/edac/loongson_edac.c index c19b025004..4f79c74cb7 100644 --- a/drivers/edac/loongson_edac.c +++ b/drivers/edac/loongson_edac.c @@ -27,6 +27,7 @@ struct loongson_pvt { */ int last_ce_count; u32 mcs_per_node; + u32 valid_cs_bits; bool mc_idx_valid; }; =20 @@ -37,11 +38,21 @@ static int read_ecc(struct mem_ctl_info *mci) int cs; =20 ecc =3D readq(pvt->ecc_base + ECC_CS_COUNT_REG); - /* cs0 -- cs3 */ + /* Discard the read value if any invalid bit is set to 1 */ + if (pvt->valid_cs_bits < 64 && (ecc >> pvt->valid_cs_bits)) { + edac_mc_printk(mci, KERN_DEBUG, "ECC read invalid, skip: 0x%llx\n", ecc); + return pvt->last_ce_count; + } + + /* cs0 -- cs7 */ cs =3D ecc & 0xff; cs +=3D (ecc >> 8) & 0xff; cs +=3D (ecc >> 16) & 0xff; cs +=3D (ecc >> 24) & 0xff; + cs +=3D (ecc >> 32) & 0xff; + cs +=3D (ecc >> 40) & 0xff; + cs +=3D (ecc >> 48) & 0xff; + cs +=3D (ecc >> 56) & 0xff; =20 return cs; } @@ -111,14 +122,15 @@ static void dimm_config_init(struct mem_ctl_info *mci) } =20 static void pvt_init(struct mem_ctl_info *mci, void __iomem *vbase, - bool mc_idx_valid, u32 mcs_per_node) + bool mc_idx_valid, u32 mcs_per_node, u32 valid_cs_bits) { struct loongson_pvt *pvt =3D mci->pvt_info; =20 pvt->ecc_base =3D vbase; - pvt->last_ce_count =3D read_ecc(mci); pvt->mc_idx_valid =3D mc_idx_valid; pvt->mcs_per_node =3D mcs_per_node; + pvt->valid_cs_bits =3D valid_cs_bits; + pvt->last_ce_count =3D read_ecc(mci); } =20 static int loongson_probe(struct platform_device *pdev) @@ -127,7 +139,7 @@ static int loongson_probe(struct platform_device *pdev) struct mem_ctl_info *mci; struct device *dev =3D &pdev->dev; void __iomem *vbase; - u32 mcs_per_node; + u32 mcs_per_node, valid_cs_bits; bool mc_idx_valid =3D true; int ret; =20 @@ -165,7 +177,10 @@ static int loongson_probe(struct platform_device *pdev) if (device_property_read_u32(dev, "mcs-per-node", &mcs_per_node) || mcs_p= er_node =3D=3D 0) mcs_per_node =3D 4; =20 - pvt_init(mci, vbase, mc_idx_valid, mcs_per_node); + if (device_property_read_u32(dev, "valid-cs-bits", &valid_cs_bits)) + valid_cs_bits =3D 32; + + pvt_init(mci, vbase, mc_idx_valid, mcs_per_node, valid_cs_bits); dimm_config_init(mci); =20 ret =3D edac_mc_add_mc(mci); --=20 2.47.2