From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932698AbcHIV5m (ORCPT ); Tue, 9 Aug 2016 17:57:42 -0400 Received: from mail-cys01nam02on0067.outbound.protection.outlook.com ([104.47.37.67]:13216 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932619AbcHIV5i (ORCPT ); Tue, 9 Aug 2016 17:57:38 -0400 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=fail action=none header.from=nxp.com; From: York Sun To: CC: , , , , York Sun , Catalin Marinas , Will Deacon , Doug Thompson , , , Subject: [Patch v4 8/9] driver/edac/layerscape_edac: Add Layerscape EDAC support Date: Tue, 9 Aug 2016 14:55:45 -0700 Message-ID: <1470779760-16483-9-git-send-email-york.sun@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1470779760-16483-1-git-send-email-york.sun@nxp.com> References: <1470779760-16483-1-git-send-email-york.sun@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131152534538741366;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.158.2;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(189002)(54534003)(199003)(7416002)(2906002)(7846002)(8666005)(305945005)(8676002)(356003)(68736007)(11100500001)(110136002)(86362001)(77096005)(97736004)(76176999)(189998001)(104016004)(4326007)(2950100001)(50986999)(47776003)(50466002)(48376002)(87936001)(2351001)(586003)(36756003)(19580395003)(19580405001)(92566002)(229853001)(69596002)(85426001)(33646002)(106466001)(8936002)(81156014)(81166006)(50226002)(5003940100001)(105606002)(7059030);DIR:OUT;SFP:1101;SCL:1;SRVR:BN1PR0301MB0594;H:az84smr01.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD054;1:ozu/bHC+PiQYBbZNJV9njWGO0gJQGy6WJuHMqcvqY6TjQQRMKoWs7IOsBgGEEh5iYtXUUmJq7Psn8SoTeaYnid0stgPjpdkKzzWefEebgVUzVeUUcKaBn9U1Lz8iC86shdIVfP/1oATGwjIK1UTFJecnkSXPagYGxu7cQJxBfGvjvbrsk9QS4nCWRz6QWXrtHG8itXmLJPTIdhchql+sVSAO+NKm5BqXRA3HiJncOiSx92s19/y7uh2f5iV8nibI8cr3rPhAy7sl3K8KUxdHT2uvdkjYB3mYJ+yUEcpnZ66Zzdxosrg2l/MLCPv4fsRmuH78GyKJnB99bYBtYN70hfxkWgcq7j66Nrazi3xGNI5YwFQ8F83fxA6JPZBOCUoEMWXyDupSx26Y7y2V9xC7VnN6Fh3RgumqufYIoKo+ySFmDo3PElrCyVHrkLPRyib4gggnOSuJKakPDuQTKhm/4XTpsyUua9JNNxiPWx9LFWqgPSQtyfL72hbWE9+BsD/3ySd/vhHNfZcOVQwPEF2hyp8dr9FKglgD3k3lLg944puMBfUFy6xzYJbdSSBskeFnRh7eo0MutoK56N+M540G8FpV6QxI9B1g47IFKMs9KJA= MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 8cc83331-cee5-455e-7a28-08d3c0a02af4 X-Microsoft-Exchange-Diagnostics: 1;BN1PR0301MB0594;2:2PRuqL+c9OWiUQq8J7op7kxF+/Uyzp8VzyJYu2hEdGO1QRlUEi9IpViFyvdPQNJTxd+/+RfqUj4NEKg8k4yse//XECm71MzWviyDvhYC58189jzw1blPb5D2x6F3Lr8DbaY0iPKp4jfwBx1w9nRoZm6lv4ks04oNSjdQ0ZaZ1MSVBRKudcp6fJw40YDPziGV;3:NUUq7dPxaoj6NRYQGJvmo0fjtnnVLxd0prFHZlQkGMQjIJFrdIGEAlpuLJSgc0UtIK4laNOj8gBkA4158S+RaK1o2b2wXVsY5iL7m6mU3neEAJqi5GBd6OZUNAe9Tqa0Vsee2zZzTMSHdrgG2XjXCSuy5rT7/IHRQUhkocg4+boDLl1Di9FT8anLOl+u4kBF7Mp1S/DfltNKsXQrgbBmlVx1+2r48e2ZrzJMUf5xN+M=;25:rlRyliAqzEfMdgQW0x2/TX/6VsgzyValLgDTL/7VhIsMgClPw8qzTKLntZtJpDNvABHGs+tL5L/UI4fWzgHX/WF/jbprg5RQLwwYoNQX/SBBahsho4Ynrli6gTFGIx36ATZrldwhg16/alnWYGui1YCfGTkt8gmTh0tL1hvMX5rFCLyu+AJe8X4abzk2G9mNUuVeKUNthCLn0E3qiM03YMTuOoWfLaWhkm+8MKh/AW3Oypbwky0IKFYc12nDYmXWy6iu+ejv3u4mMw9nGdgcBATlZWeIBK9nGxbw7qZcSVoIBP0tco+knPfP+L01I6GdV+oCTelYjM7wUfOYoFXSuUQU2pPQ+8cFpXP8+YnpWWsavQlJtE+gmCXwatRtGmLj0VNiEC3/kc0IKN5m4QlEsZNeRXX/f1CHIMggtqpaAUs= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN1PR0301MB0594; X-Microsoft-Exchange-Diagnostics: 1;BN1PR0301MB0594;31:jXWSLz6MCG76Fn+gRHd2ah2Mtc+5RXQVptxJ+U8NIFum+j6mDtQIbdiOkouT4aITgaZ5dZTlJjNVFvmXDnvB8n5PSxb8Sbv73zae9UcGAaupn0UmudzYSRH6jnWgckeVCNw9C0iNdhhwAG/w7O4ZwLqptnU1k7xuNvAhVlo0m3HWlAJ/TtZX+afcTk1kX9U6P7z/syG7nsdrixLvGrMoY15YtqwWh8QPoBddONF2Chc=;4:Hf5bCCD4ZBCreiIf/BFJnTb9A4AU62IBAYOXnPFaOMIh6MUMSZtKCta0hz/PO5rVuNaLGM+m4yjfQC1RQ9HQCkuFKtTHuFO8C+ncG4AEZcs9PLAtfVAjWQlaKIcoLN4bY++97udDOsRFTItpm4vNZnsd+8D1zCTzHb+dI1FrQPD9af7MNdh4hHoh1+Wiu9iteuJSp/SdbERnWLXSQuWDjHXJx/33qlfZMRAzXpGUO9wKmcA9RmYSJVtWT8U53a8Isu9LJ7ywP259kGET4AHIV3VfhmRpFnkcuKV2oLBeYQM9ihhD36vrkR5o38C6We0URv13qcBT/BZlQb9YamBd00hJrh4kTev/XsbW7ykXXSIBR9g/0l7tU6qq04WBz3vF2SCnjdFApCs48gkdta1iHIbe0NH/N7Q4lOOTdiwf7k+psbbrBMn1i1sK756fD28bseNE4eo1LxQ2rk2TtsIH+ilWrfHYy+HpAWf3m9yXZmjsp41rm+dQHDElRyyS87KcoYdc/flAd7pXyAshY7T8V+IcRTbNVwOY/4xVIfIAUJS/ZL/9zBqHiP3oD5Tg2MUA X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(211171220733660); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(13018025)(13024025)(13023025)(13017025)(13015025)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:BN1PR0301MB0594;BCL:0;PCL:0;RULEID:(400006);SRVR:BN1PR0301MB0594; X-Forefront-PRVS: 0029F17A3F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN1PR0301MB0594;23:0Gtfd8w65crqm1ekRc/Cnc/oXRCfl7UTE0wcLzz?= =?us-ascii?Q?BnCrJM1aZox00eijxP4vLJwX9P049M1kLkKJRPOUke15lEq/9w3hfZkRL5wp?= =?us-ascii?Q?UDS6P2DICumkfgC9gduCOiOfjBPAig8qioAwkxutnNaflN29aiggFCJnqUna?= =?us-ascii?Q?kAwaGyFG83q8EGm3TzExqmYtC1TbfYyKOSQI+4hlUexHO7gjvZwcxN2cjqtq?= =?us-ascii?Q?zjrTM3Gwqs+By2JQKZAvNIV6Xg9rvchaLH5rtQvagKq9ZDvvcCGntUYxJgf5?= =?us-ascii?Q?i8aQE2YnTVB+bryfxt2WrEvenAXLxxIjsxKRkUT1Gzx/zKtGHrnEOTZLlr66?= =?us-ascii?Q?1E0AXK8XHA4RoPtiD9fjmxAjwu3tUTITRtQSGAgcedfd8VemSDsVbT5iLu4G?= =?us-ascii?Q?8+1+saC/qC67YtBQrL1Wz5TUusjrAbxrZ+M+BPZyApfoqubxS88o+s84sVT1?= =?us-ascii?Q?Bne4/nD7uBYnBwZfKtG3FeJLs6tZ60pQoeBQy8lyqXYvJcu4qjpTI7dmAQ3Z?= =?us-ascii?Q?RvkiwmpKrmD8WwxjiBscVwrrkugSjEgL23hLMkfw6lAAfJEXalIo7o05g3K9?= =?us-ascii?Q?eYlvyFJFUjexyH5pRAcqX7B4CorWY1Nr4kjZZjFNudqhi/o4WWAUonhjMPnQ?= =?us-ascii?Q?F4fGWSbu9WX4J9RiNSpR2/XuXnH05CR3HOLbSEJ3AECUaCwCh17PpwyU3MWe?= =?us-ascii?Q?4VGOHJ+i9R06NzGmacPUPmSQA69n8uUeOeU2x0FeV2+3Oi1gnH4lBKcr9Ury?= =?us-ascii?Q?6kdrPpWozIaLfOzUhuFwk4zU9snaAs6rvGNSi3rOcR/yTBoetUyZie5a3QbD?= =?us-ascii?Q?BD9LmWveKFy2Ka5180nQWrothor1a/QNeKOllUhnyTxUksmTbV+yTtofRNlv?= =?us-ascii?Q?W+0MCKrtuNwbuUzrc7E3DNIAbaasowsOx7QmIYz5YXE+l6tHjV55/1uBGVy0?= =?us-ascii?Q?36UVcW9z16bKNpK5dySaQJ1cCmBFJixByoZW8auld2//JIFE7NhDnhbsiJqI?= =?us-ascii?Q?dr8IizuC+AlJ2oQhmM2YaIfM8qbZjQ5EaOLIypXTUm555QXFtwxj3sQ/VEgD?= =?us-ascii?Q?LLp6/8ZOSpGE6p1ikhMXhZndJ7HFNWrT3DOO11Eo9WcRKZ4fPyq7iYH2gc8C?= =?us-ascii?Q?YpOZuzZFN0Xq4E9Se1quZgC7OjSxbRkHlylCuRxQZaFifboJqt8O9jrm+FVq?= =?us-ascii?Q?Yh/P2GssxOaeGGT/BLkGPfRTy31FxCzf+3Hdw?= X-Microsoft-Exchange-Diagnostics: 1;BN1PR0301MB0594;6:Z3e12SEXqKp5qnrv+usrBwUt/9sy61PwvXLqDlUO2pIHDtGmzBMxc4kkAXrVuzf3lN51At07BvezUTj1k1lmRyGlgl1xPHOKJIciXYwRiLomMAKH2tH4TCbnEb2VKJ//jLmX49QI9gI3O40nC684XdohkE21hJnUDLaxFg9NF34glb+Dy9OiONQqEi0f5CmGseGRfq+rH5QoyPsbfx+vpgfSKwMS5P2NdxkNLh7yoV4agbGkOclLLgiRva/IQgfSvXlcnG9f4csPx+g/02zfrHzMM4rQXvwWKwD0QPPVUGc=;5:0nhYSZyt+NlT6war86JFmiLOyla0cf2nxAJmbNFBmlTNs7Msw/xefeCAmAoZ/RWCoRyNh3CBl/XUWP8Pnfj84zJ9dusSSJ40N6huy22cjl0tOrXjnPr/36c++P2knaBIweNVZ80Nrcy4NkpdgietXes6aCnInYv/n9Vvb5CLz/g=;24:Mi58dtgxnpmucL8bhCHCSA4HKW9NtwoHd1CCfM73ciUKtFXAK0s/OYKv5CoI6YZKvrNR6dFCm5fbre3NzCOIn03L6Lrk/nRN+cXf87EnuFo=;7:0O4qZ8gUwvVxHYNvKjBDky4EoMkwzJrsVk3XgjYJWn/B2BawjVKONGPOn0syIElwSL0+z1U+28YW+QqJ6F7jqm8odzm2X3nUU9ebHXX0VTkLIULFL4Xd41nTDxZhRpQGESc2srXU0hc5UUAjR8a7jEy7ZtKhmlnAD+Y0QrTz1+dtmymG/b7XltzPkKZioOf0sT6+j/wUpCQWX5gieO/LBgbV/yHPX7i7u3cG4YKBdV/ly052hmhvufWZOGle/IEs SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Aug 2016 21:57:33.6245 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.158.2];Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR0301MB0594 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add DDR EDAC for ARM-based compatible controllers. Both big-endian and little-endian are supported, as specified in device tree. Signed-off-by: York Sun --- Change log v4: Drop adding atomic_scrub() for arm64 Drop NO_IRQ v3: no change v2: Create new driver using shared DDR object arch/arm64/Kconfig.platforms | 1 + drivers/edac/Kconfig | 7 +++++ drivers/edac/Makefile | 3 ++ drivers/edac/fsl_ddr_edac.c | 2 +- drivers/edac/layerscape_edac.c | 67 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 drivers/edac/layerscape_edac.c diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms index 7ef1d05..185a215 100644 --- a/arch/arm64/Kconfig.platforms +++ b/arch/arm64/Kconfig.platforms @@ -41,6 +41,7 @@ config ARCH_EXYNOS config ARCH_LAYERSCAPE bool "ARMv8 based Freescale Layerscape SoC family" + select EDAC_SUPPORT help This enables support for the Freescale Layerscape SoC family. diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig index 6ca7474..f1ac4e2 100644 --- a/drivers/edac/Kconfig +++ b/drivers/edac/Kconfig @@ -258,6 +258,13 @@ config EDAC_MPC85XX Support for error detection and correction on the Freescale MPC8349, MPC8560, MPC8540, MPC8548, T4240 +config EDAC_LAYERSCAPE + tristate "Freescale Layerscape DDR" + depends on EDAC_MM_EDAC && ARCH_LAYERSCAPE + help + Support for error detection and correction on Freescale memory + controllers on Layerscape SoCs. + config EDAC_MV64X60 tristate "Marvell MV64x60" depends on EDAC_MM_EDAC && MV64X60 diff --git a/drivers/edac/Makefile b/drivers/edac/Makefile index ee047a4..910dc83 100644 --- a/drivers/edac/Makefile +++ b/drivers/edac/Makefile @@ -54,6 +54,9 @@ obj-$(CONFIG_EDAC_PASEMI) += pasemi_edac.o mpc85xx_edac_mod-y := fsl_ddr_edac.o mpc85xx_edac.o obj-$(CONFIG_EDAC_MPC85XX) += mpc85xx_edac_mod.o +layerscape_edac_mod-y := fsl_ddr_edac.o layerscape_edac.o +obj-$(CONFIG_EDAC_LAYERSCAPE) += layerscape_edac_mod.o + obj-$(CONFIG_EDAC_MV64X60) += mv64x60_edac.o obj-$(CONFIG_EDAC_CELL) += cell_edac.o obj-$(CONFIG_EDAC_PPC4XX) += ppc4xx_edac.o diff --git a/drivers/edac/fsl_ddr_edac.c b/drivers/edac/fsl_ddr_edac.c index d8ce1f6..afade14 100644 --- a/drivers/edac/fsl_ddr_edac.c +++ b/drivers/edac/fsl_ddr_edac.c @@ -26,6 +26,7 @@ #include #include +#include #include "edac_module.h" #include "edac_core.h" #include "fsl_ddr_edac.h" @@ -478,7 +479,6 @@ int fsl_mc_err_probe(struct platform_device *op) pdata = mci->pvt_info; pdata->name = "fsl_mc_err"; - pdata->irq = NO_IRQ; mci->pdev = &op->dev; pdata->edac_idx = edac_mc_idx++; dev_set_drvdata(mci->pdev, mci); diff --git a/drivers/edac/layerscape_edac.c b/drivers/edac/layerscape_edac.c new file mode 100644 index 0000000..6ba771d --- /dev/null +++ b/drivers/edac/layerscape_edac.c @@ -0,0 +1,67 @@ +/* + * Freescale Memory Controller kernel module + * + * Derived from mpc85xx_edac.c + * Author: Dave Jiang + * + * 2006-2007 (c) MontaVista Software, Inc. This file is licensed under + * the terms of the GNU General Public License version 2. This program + * is licensed "as is" without any warranty of any kind, whether express + * or implied. + */ + +#include "edac_core.h" +#include "fsl_ddr_edac.h" + +static const struct of_device_id fsl_ddr_mc_err_of_match[] = { + { .compatible = "fsl,qoriq-memory-controller", }, + {}, +}; +MODULE_DEVICE_TABLE(of, fsl_ddr_mc_err_of_match); + +static struct platform_driver fsl_ddr_mc_err_driver = { + .probe = fsl_mc_err_probe, + .remove = fsl_mc_err_remove, + .driver = { + .name = "fsl_ddr_mc_err", + .of_match_table = fsl_ddr_mc_err_of_match, + }, +}; + +static int __init fsl_ddr_mc_init(void) +{ + int res = 0; + + /* make sure error reporting method is sane */ + switch (edac_op_state) { + case EDAC_OPSTATE_POLL: + case EDAC_OPSTATE_INT: + break; + default: + edac_op_state = EDAC_OPSTATE_INT; + break; + } + + res = platform_driver_register(&fsl_ddr_mc_err_driver); + if (res) { + pr_err("Layerscape EDAC: MC fails to register\n"); + return res; + } + + return 0; +} + +module_init(fsl_ddr_mc_init); + +static void __exit fsl_ddr_mc_exit(void) +{ + platform_driver_unregister(&fsl_ddr_mc_err_driver); +} + +module_exit(fsl_ddr_mc_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Montavista Software, Inc."); +module_param(edac_op_state, int, 0444); +MODULE_PARM_DESC(edac_op_state, + "EDAC Error Reporting state: 0=Poll, 2=Interrupt"); -- 2.7.4