From patchwork Tue Jul 9 20:23:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 13728475 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EB774C3DA42 for ; Tue, 9 Jul 2024 20:25:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Cc:To: In-Reply-To:References:Message-Id:Content-Transfer-Encoding:Content-Type: Subject:Date:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=+llaZGd3ThH3xZSiE12Yp5AZPrupVBjPLiolbmqn1fQ=; b=nVxHCrp5PZbd+PS/uxaykBBT+v 6vEk5HTb/OPBUGzOxkCQcAQolpCXAf43yCzS+jTP120Nw0FBm1Vl5WvnQ7j/Xov/M9LzDJCNczrn3 59cHywRnhvEoyDyEryc+aqt1y+MCcAnpPZqIyKrFEJwbMIehoPLLn+JtmGAhMjAyK2bqQ7W1i3h8L NFfyMLM8CikiDxt9jd6U72CeV5IbqT4PVLjvA18ZL+jTuXEaHOzUC0Oe93AvAKJgxB6xmEJR7OmGN R0e5oTRGhsnUYxOYroVaPTk+ld8qeN2BR1HvKO6o0eyvY6/u5zf7sh4Sd2Tr2oMk+csv2K+p+jHnS 0fOY3TCg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sRHOg-00000008W31-06JX; Tue, 09 Jul 2024 20:25:10 +0000 Received: from mail-am6eur05on2061d.outbound.protection.outlook.com ([2a01:111:f403:2612::61d] helo=EUR05-AM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sRHNV-00000008VTZ-0R6t for linux-arm-kernel@lists.infradead.org; Tue, 09 Jul 2024 20:23:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cGlgL9MiPPt95cwOQvk+r35JyW3+4+vVGBeZFn5G8UWiJhuCtkGGghbcOLe1phQo5Ve43hbmCVQsKSsCdrk93leFYA1KG3UOhz8v2L/CMQnVEteKqV7epc48IBzRBU+cTJ9ILurUc1tqKVEsMghqYaggbHXsCcNtJZ9dYMLpcQ8WTd5rZFwPs272V8PcdeEkl9DJf8k2YmXj3HE6GKGIM8XlitIDycNLgvXm+rl8OMUM5yeHbnUSh3s9y7FMYC6YNph9yXhyHGUfCCenrHK1tnFaHawM4ec2VDwu7abAtV2ULRiXklx0CdeeUwo8REdSsvlWwKhAxqk/3fbeNTIWIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=+llaZGd3ThH3xZSiE12Yp5AZPrupVBjPLiolbmqn1fQ=; b=kds9oSw+zuuodEBQZBRP/sQwN36059gXLKQQVmX0Fva5yvOdjBh5nTcF1dWPJBIq/1OKaIZv25l785TXgoRIMAVAl0+kXwei1fGvjI+tppZUUhOF+3BqChDL5KYKtN7jdIIcUWncJUdfmi0jXbUJqbY7fvovOTIqw+9Os4pwjTFLmfisq/i6MG6DPPN/gVVXqx4YvoWY4+fRvBDCMpvX+jh6LfuJiJCtickXk2XPieZUkpch1ZixE6qu16qt5od6AMLc82t/DYzQZ+xmhJbqw3SUut0BwWBwArHaUHCOdxw23LX/Y9HP+YtN4jYJ7g5dst8WRhFwB4sz4E/9MXdjiQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+llaZGd3ThH3xZSiE12Yp5AZPrupVBjPLiolbmqn1fQ=; b=EBcm16acfCydMBRxh/00Scer1tPv33liamNlzQZg0ScOkUFMdsnDCCzLy67jSORJMDdx6/gXaBd6BHiWk+cvRj9di7p86lBOB2QqApQzeIGk40j+9ohMIrGaGIk8uyM/kDURMkjJufs27qddX5b27mLq/EJL+4gJBHOAkovbEBE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by DB9PR04MB8267.eurprd04.prod.outlook.com (2603:10a6:10:24b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7741.35; Tue, 9 Jul 2024 20:23:52 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%2]) with mapi id 15.20.7741.033; Tue, 9 Jul 2024 20:23:52 +0000 From: Frank Li Date: Tue, 09 Jul 2024 16:23:06 -0400 Subject: [PATCH 5/6] EDAC: fsl_ddr: Add support for i.MX9 DDR controller Message-Id: <20240709-imx95_edac-v1-5-3e9c146c1b01@nxp.com> References: <20240709-imx95_edac-v1-0-3e9c146c1b01@nxp.com> In-Reply-To: <20240709-imx95_edac-v1-0-3e9c146c1b01@nxp.com> To: York Sun , Borislav Petkov , Tony Luck , James Morse , Mauro Carvalho Chehab , Robert Richter , Krzysztof Kozlowski , Rob Herring , Conor Dooley , Krzysztof Kozlowski , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org, Borislav Petkov , devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Frank Li , Ye Li , Peng Fan X-Mailer: b4 0.13-dev-e586c X-Developer-Signature: v=1; a=ed25519-sha256; t=1720556601; l=5882; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=CpSB72KuM9NooGj6fUi66TJ5cUJ4AKdkHQLj07U+ubU=; b=L0yyp80JaWeD0GEbKGknTPd4CW06DeRi37o5TJXaY2KIWlxwHNbkGFGntW35phVgM7t7X+yn6 sKnBbBqTuwRDqYTXkl/qPuJQddcEKzTlee7X0wB3DrZkRq8JIG7/4xR X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BYAPR03CA0033.namprd03.prod.outlook.com (2603:10b6:a02:a8::46) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|DB9PR04MB8267:EE_ X-MS-Office365-Filtering-Correlation-Id: eaa65157-5fb5-4466-8a5c-08dca0550cc2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|1800799024|7416014|366016|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?S7RFreaDIkIZuS925SMjvpdn4L+iV5E?= =?utf-8?q?sdbd+gaeC+zGXmOD8Prt7OpScAzsJWozC/aUTTXoj35nIDQ+auFSOmRhuDgRyKH+M?= =?utf-8?q?tIzI4GCld283x8oBYZF8pGLFtlqXnRzIhSsie2gKVKXIQe8Vruk/YJz8gUdzkOv40?= =?utf-8?q?v/j9sCthJvfbrff5BgQPSnvaNvCr93WbgjvHTIhZLZ+g2EwetnJ8QZvgFkatZwDPf?= =?utf-8?q?MmNX8//Ujo/k3W5EVutsYfcUyCv5GS6A9QvT0ejtbTCig+mtgADcvejMuYsG78RUC?= =?utf-8?q?7u0Mf1tBwXC5CnTGk6/q3XgsgIZNND8kY9kQk3EWQsHJTAJgsbOi2RzstK+vwuLQr?= =?utf-8?q?uHAnnUN7eD84hV2Fvh1RllvNSRwyVdcuSgGtUV0+qgqHrRs1p4OlRxw2W9goyhXFh?= =?utf-8?q?m/21YQVeg4p6Unmju4L6uD7ZzVfpEoCfp6Hk6YQthkvJi6o+ey2Ge4sQvDqXtfROq?= =?utf-8?q?DSzA6ge5pnM5uRzgFIAydo5v6r4/Lsr+n10w92Uhw0He3zoA5NiE8yZexCc7Tup43?= =?utf-8?q?4TH/JR421F0xRt6UrEEYqDxcD38OQUJYWCj8RvR2/egmV7a+cVFXmq7VIHJq0NQaY?= =?utf-8?q?2xdjqzaIznoddJOIjaVwb3Jc09qBWSTnjTybVxKB+sVjf5Huqam+2SCiOtM4L7ifZ?= =?utf-8?q?Nxgkc3XiZzKBRTUtXWMc/+EsumxJmhkatGn9h85C8N0Q7Zbkx2mx6O/UnDTi42/fV?= =?utf-8?q?VUOCqlS5akkVoSVMAM5EhCJP/9ejkZCPgZfcLCRPHLoIG8JMzMiNxi3VlmoZqzTQI?= =?utf-8?q?zybnZEMtEzeckzbjXy8LPC9SVJezdcSaQBiWCtMAWa/OleaVegGa8rj2aU1/I0mPK?= =?utf-8?q?bGI02zn8FHzN55gSAIsXsJoe1jl44wpbA79IFBHITETqRRl+W5hK2bFDlDrqKCbPA?= =?utf-8?q?27qEJDEGgrg6WwmQjO6XPNqEXuLqRE5Q00n89eBDI4UQQm7qLjOnbqV9IlMhczPVt?= =?utf-8?q?SqZ6ihlkid8ymboDZgw+gTyZAU9Zr1kUvak1P1LYezTwzqZvkJ31ErLedXE5oZkx+?= =?utf-8?q?gVfVi8V6QKmGbzQUubZHbqtw6slhz+KgfnSvdNIqKRdeIlXmdvMQ0STVHJHLUp0tA?= =?utf-8?q?XuR1fjw+AWlY3RxhYjUzOvlPOI0R0gWa/Mu8HooZYkEcrnPqEweN8PEngY7R6vRy2?= =?utf-8?q?xRol4NGLXwEpF0h+5F34EKsTkUSdUsPQKXm/twgdE86g2SmRCpumi25zeYTeHvLck?= =?utf-8?q?zsDRR5cFC7VAVFzHThTEsixO6KLE4jGOWZJmKTJZFFUoKgOYPM984+Yz5mN3ilDp4?= =?utf-8?q?Lc1HVDTR6TNtRzMnMLZo8hemwfPGjUg+nwYrnTKXCqrfCYXVK08S/Cb2/uQh3ijN0?= =?utf-8?q?b6+6MFTsEBUovKCrIKdvhYRJaMU360M3oa1cCdYaxowu1h/S3SV69dI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(376014)(1800799024)(7416014)(366016)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?Fm6Mc+Xcw2S85SRuc/FlgRGZNLcX?= =?utf-8?q?nt0EDo/JjZ+KqcaCMGkWuRzS3XwE7Snq5+vTIuA7UTU4O+gXaD05Chw0vvp/nmh1e?= =?utf-8?q?QTFdOqzqduWMXb3IwiG0uJRZ23cu2mj7Ad/EAcXSdHUECxJKrQk4C1GFOKQnEYTJT?= =?utf-8?q?stNo81c9rvx7drqG29arvK4LMo1RN4HFWuq+UUHrSW8D+Jy1Cw5PEshrrTkdiivXd?= =?utf-8?q?al9anZ6W23UxlhJtgAm8TMwOT4IGXS4FnX+CMezolYo4N3NtoarmJCpMX4C7EN6XH?= =?utf-8?q?JEF5ex+ISnVy+TU/M4JwrMzlF36mIYHKe9Qblf64PdrSUnpF5P/Jaq+d04goS2mwM?= =?utf-8?q?2XXZwQtmgUUoqWTDsO0TnyKt2hkuv5nn8QgB9on+Zob4bmBZY8tdw5O0/1roCV/Oq?= =?utf-8?q?x3jEVuN16V0buEFpzZKvEaY1Wc7uzQe23fi9sAaKvEgSpZeCcjPXbweEpFU4K2JTH?= =?utf-8?q?ln8vBmEyBu9tQSNtgsKfPHPgPRqrLfAjwkhAwiZ4+GB409ct43I9zURpXHUskXgj0?= =?utf-8?q?rGuu9jDh11J78gidSc3n7z/OE/w1OoH9SM38WuayLsGJQkf4dU914sOKC9RahfJZd?= =?utf-8?q?JIwqbbh8fgtsNIfx6I6yhUulB7ePVGPXixIM2I51YNg9W74InNrnJ1iVY23iji0+b?= =?utf-8?q?aem+W2DmoiGP21mIeBqGW8lSj2hzY+uO8oGl5RjG+npL9TUZj9fvbpvpq2B9zxzHS?= =?utf-8?q?W5yFAonOhK50RMGiKszjEI+Dz4uTF8mZZ89ho9atM+CZ/v8TkTegw35bA7MZG2FbM?= =?utf-8?q?MhwdcfUAXf/OUFZpAgtU+KpCNOq8xiSV8kYFvLlrvN15yQl/KLfzyGMVwpl4UoZDC?= =?utf-8?q?AlSjNF9dFHiE2ifky1cYlosbb2puJwp1uH01ftvniYfGKpLjYkm0F3FqhBBy69ck3?= =?utf-8?q?G/kut4Pjwf4di+XrcgDNf/td7Ph9W4cG6IafuNlEksBc9yTwodAYdJ2/LgSOp0eXc?= =?utf-8?q?WFUuqCRgK6aZz03GDnvkN+fSJUhTXbRujPJ42kbpeYAGjBQ6VZ/K4tzFnBtrvdSBO?= =?utf-8?q?jiUXXTiB8LyzXbfNNFbMLjlJ3dcwbceYgD+PMblfZY4Y+r1H7uMaH2zNzSAHJ0iGu?= =?utf-8?q?B9QXR+4DkYE5z5PCiKGsWtVrqvc19y1r27mKT+mL9mSB/c3Ra+IXeOsfvEBzpEjma?= =?utf-8?q?CGnhiKmoxvNZs85FqGrqmNKI9c//GDJxP8hjYVY3I+dNwaTjKrY1+Ny+IWmrfB0lO?= =?utf-8?q?/dm/wPu8grVuW+Gy3URCC3ydWadOeRSNJerE4cm7PqsNDxxbMPckQHbEHCAB8zZjm?= =?utf-8?q?F5rcxI1aM7uYp3MHmt60d3BDyI4/jqHnzifCQlK1pk1I3AWMhbINPN+xFAgVwBDxD?= =?utf-8?q?SDelKshx35UQGQa2JVdyIzu8gPWhUoalRiKwEVmrctNNTVhIc80ddcF48vvVYijhT?= =?utf-8?q?5uYc0z5sg999yXMmfGu33/LfDn9Jgby1Bm1kyykdta3mKqR885vJgXhZtN9b399q7?= =?utf-8?q?ubAA5T4w30+FWYLzIP4Dio4TS0cS2kJyX74wMxMLbW/D2DWvzP8WyGHdcbIs6P5Dj?= =?utf-8?q?bgKXh3tHXFYH?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: eaa65157-5fb5-4466-8a5c-08dca0550cc2 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2024 20:23:52.7567 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TUZ37exuyuQbl9uFcGG/cvbjh7VEIw0iyg1QGMlmELG5HIlcQ/gBnLjIwGOeTBX3KWoOu1XUgAs7oUdrdM0D3A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8267 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240709_132357_346509_4F9918DE X-CRM114-Status: GOOD ( 21.59 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Ye Li i.MX9 uses an DDR controller that has registers offset and some function changed, but the ECC and Error inject functions are almost same with fsl_ddr controller. So update and re-use the driver for i.MX9. A special type is added for i.MX9 controller only to distinguish the difference. Signed-off-by: Ye Li Reviewed-by: Peng Fan Signed-off-by: Frank Li --- drivers/edac/fsl_ddr_edac.c | 48 ++++++++++++++++++++++++++++++++++++------ drivers/edac/fsl_ddr_edac.h | 10 +++++++++ drivers/edac/layerscape_edac.c | 1 + 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/drivers/edac/fsl_ddr_edac.c b/drivers/edac/fsl_ddr_edac.c index da743cf8a95e9..438b995066f2a 100644 --- a/drivers/edac/fsl_ddr_edac.c +++ b/drivers/edac/fsl_ddr_edac.c @@ -31,16 +31,28 @@ static int edac_mc_idx; +static inline void __iomem *ddr_reg_addr(struct fsl_mc_pdata *pdata, unsigned int off) +{ + if (pdata->flag == TYPE_IMX9 && off >= FSL_MC_DATA_ERR_INJECT_HI && off <= FSL_MC_ERR_SBE) + return pdata->inject_vbase + off - FSL_MC_DATA_ERR_INJECT_HI + + IMX9_MC_DATA_ERR_INJECT_OFF; + + if (pdata->flag == TYPE_IMX9 && off >= IMX9_MC_ERR_EN) + return pdata->inject_vbase + off - IMX9_MC_ERR_EN; + + return pdata->mc_vbase + off; +} + static inline u32 ddr_in32(struct fsl_mc_pdata *pdata, unsigned int off) { - void __iomem *addr = pdata->mc_vbase + off; + void __iomem *addr = ddr_reg_addr(pdata, off); return pdata->little_endian ? ioread32(addr) : ioread32be(addr); } static inline void ddr_out32(struct fsl_mc_pdata *pdata, unsigned int off, u32 value) { - void __iomem *addr = pdata->mc_vbase + off; + void __iomem *addr = ddr_reg_addr(pdata, off); if (pdata->little_endian) iowrite32(value, addr); @@ -438,6 +450,9 @@ static void fsl_ddr_init_csrows(struct mem_ctl_info *mci) case 0x05000000: mtype = MEM_DDR4; break; + case 0x04000000: + mtype = MEM_LPDDR4; + break; default: mtype = MEM_UNKNOWN; break; @@ -471,7 +486,9 @@ static void fsl_ddr_init_csrows(struct mem_ctl_info *mci) dimm->grain = 8; dimm->mtype = mtype; dimm->dtype = DEV_UNKNOWN; - if (sdram_ctl & DSC_X32_EN) + if (pdata->flag == TYPE_IMX9) + dimm->dtype = DEV_X16; + else if (sdram_ctl & DSC_X32_EN) dimm->dtype = DEV_X32; dimm->edac_mode = EDAC_SECDED; } @@ -483,6 +500,7 @@ int fsl_mc_err_probe(struct platform_device *op) struct edac_mc_layer layers[2]; struct fsl_mc_pdata *pdata; struct resource r; + u32 ecc_en_mask; u32 sdram_ctl; int res; @@ -510,6 +528,8 @@ int fsl_mc_err_probe(struct platform_device *op) mci->ctl_name = pdata->name; mci->dev_name = pdata->name; + pdata->flag = (unsigned long)device_get_match_data(&op->dev); + /* * Get the endianness of DDR controller registers. * Default is big endian. @@ -538,8 +558,23 @@ int fsl_mc_err_probe(struct platform_device *op) goto err; } - sdram_ctl = ddr_in32(pdata, FSL_MC_DDR_SDRAM_CFG); - if (!(sdram_ctl & DSC_ECC_EN)) { + if (pdata->flag == TYPE_IMX9) { + pdata->inject_vbase = devm_platform_ioremap_resource_byname(op, "inject"); + if (IS_ERR(pdata->inject_vbase)) { + res = -ENOMEM; + goto err; + } + } + + if (pdata->flag == TYPE_IMX9) { + sdram_ctl = ddr_in32(pdata, IMX9_MC_ERR_EN); + ecc_en_mask = ERR_ECC_EN | ERR_INLINE_ECC; + } else { + sdram_ctl = ddr_in32(pdata, FSL_MC_DDR_SDRAM_CFG); + ecc_en_mask = DSC_ECC_EN; + } + + if ((sdram_ctl & ecc_en_mask) != ecc_en_mask) { /* no ECC */ pr_warn("%s: No ECC DIMMs discovered\n", __func__); res = -ENODEV; @@ -550,7 +585,8 @@ int fsl_mc_err_probe(struct platform_device *op) mci->mtype_cap = MEM_FLAG_DDR | MEM_FLAG_RDDR | MEM_FLAG_DDR2 | MEM_FLAG_RDDR2 | MEM_FLAG_DDR3 | MEM_FLAG_RDDR3 | - MEM_FLAG_DDR4 | MEM_FLAG_RDDR4; + MEM_FLAG_DDR4 | MEM_FLAG_RDDR4 | + MEM_FLAG_LPDDR4; mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED; mci->edac_cap = EDAC_FLAG_SECDED; mci->mod_name = EDAC_MOD_STR; diff --git a/drivers/edac/fsl_ddr_edac.h b/drivers/edac/fsl_ddr_edac.h index de66f9822fba1..73618f79e587f 100644 --- a/drivers/edac/fsl_ddr_edac.h +++ b/drivers/edac/fsl_ddr_edac.h @@ -39,6 +39,9 @@ #define FSL_MC_CAPTURE_EXT_ADDRESS 0x0e54 #define FSL_MC_ERR_SBE 0x0e58 +#define IMX9_MC_ERR_EN 0x1000 +#define IMX9_MC_DATA_ERR_INJECT_OFF 0x100 + #define DSC_MEM_EN 0x80000000 #define DSC_ECC_EN 0x20000000 #define DSC_RD_EN 0x10000000 @@ -46,6 +49,9 @@ #define DSC_DBW_32 0x00080000 #define DSC_DBW_64 0x00000000 +#define ERR_ECC_EN 0x80000000 +#define ERR_INLINE_ECC 0x40000000 + #define DSC_SDTYPE_MASK 0x07000000 #define DSC_X32_EN 0x00000020 @@ -65,14 +71,18 @@ #define DDR_EDI_SBED 0x4 /* single-bit ECC error disable */ #define DDR_EDI_MBED 0x8 /* multi-bit ECC error disable */ +#define TYPE_IMX9 0x1 /* MC used by iMX9 having registers changed */ + struct fsl_mc_pdata { char *name; int edac_idx; void __iomem *mc_vbase; + void __iomem *inject_vbase; int irq; u32 orig_ddr_err_disable; u32 orig_ddr_err_sbe; bool little_endian; + unsigned long flag; }; int fsl_mc_err_probe(struct platform_device *op); void fsl_mc_err_remove(struct platform_device *op); diff --git a/drivers/edac/layerscape_edac.c b/drivers/edac/layerscape_edac.c index 0d42c1238908b..9a0c92ebbc3c4 100644 --- a/drivers/edac/layerscape_edac.c +++ b/drivers/edac/layerscape_edac.c @@ -21,6 +21,7 @@ static const struct of_device_id fsl_ddr_mc_err_of_match[] = { { .compatible = "fsl,qoriq-memory-controller", }, + { .compatible = "nxp,imx9-memory-controller", .data = (void *)TYPE_IMX9, }, {}, }; MODULE_DEVICE_TABLE(of, fsl_ddr_mc_err_of_match);