[PATCH v3] EDAC: Add ARM64 EDAC

2015-10-27 Thread Brijesh Singh
Add support for Cortex A57 and A53 EDAC driver.

Signed-off-by: Brijesh Singh 
CC: robh...@kernel.org
CC: pawel.m...@arm.com
CC: mark.rutl...@arm.com
CC: ijc+devicet...@hellion.org.uk
CC: ga...@codeaurora.org
CC: dougthomp...@xmission.com
CC: b...@alien8.de
CC: mche...@osg.samsung.com
CC: devicetree@vger.kernel.org
CC: guohan...@huawei.com
CC: andre.przyw...@arm.com
CC: a...@arndb.de
CC: sb...@codeaurora.org
CC: linux-ker...@vger.kernel.org
CC: linux-e...@vger.kernel.org
---
v3:
* change DT binding compatibilty string to 'cortex-a57-edac'
* remove A57/A53 prefix from register bit definition
* unify A57 and A53 L1/L2 error parsing functions
* use mc trace event function to report the error
* update Kconfig default to 'n'

v2:
* convert into generic arm64 edac driver
* remove AMD specific references from dt binding
* remove poll_msec property from dt binding
* add poll_msec as a module param, default is 100ms
* update copyright text
* define macro mnemonics for L1 and L2 RAMID
* check L2 error per-cluster instead of per core
* update function names
* use get_online_cpus() and put_online_cpus() to make L1 and L2 register 
  read hotplug-safe
* add error check in probe routine

 .../devicetree/bindings/edac/cortex-arm64-edac.txt |  15 +
 drivers/edac/Kconfig   |   8 +
 drivers/edac/Makefile  |   1 +
 drivers/edac/cortex_arm64_edac.c   | 349 +
 4 files changed, 373 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/edac/cortex-arm64-edac.txt
 create mode 100644 drivers/edac/cortex_arm64_edac.c

diff --git a/Documentation/devicetree/bindings/edac/cortex-arm64-edac.txt 
b/Documentation/devicetree/bindings/edac/cortex-arm64-edac.txt
new file mode 100644
index 000..552f0c7
--- /dev/null
+++ b/Documentation/devicetree/bindings/edac/cortex-arm64-edac.txt
@@ -0,0 +1,15 @@
+* ARM Cortex A57 and A53 L1/L2 cache error reporting
+
+CPU Memory Error Syndrome and L2 Memory Error Syndrome registers can be used
+for checking L1 and L2 memory errors.
+
+The following section describes the Cortex A57/A53 EDAC DT node binding.
+
+Required properties:
+- compatible: Should be "arm,cortex-a57-edac" or "arm,cortex-a53-edac"
+
+Example:
+   edac {
+   compatible = "arm,cortex-a57-edac";
+   };
+
diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig
index ef25000..84507b5 100644
--- a/drivers/edac/Kconfig
+++ b/drivers/edac/Kconfig
@@ -390,4 +390,12 @@ config EDAC_XGENE
  Support for error detection and correction on the
  APM X-Gene family of SOCs.
 
+config EDAC_CORTEX_ARM64
+   tristate "ARM Cortex A57/A53"
+   depends on EDAC_MM_EDAC && ARM64
+   default n
+   help
+ Support for error detection and correction on the
+ ARM Cortex A57 and A53.
+
 endif # EDAC
diff --git a/drivers/edac/Makefile b/drivers/edac/Makefile
index ae3c5f3..ac01660 100644
--- a/drivers/edac/Makefile
+++ b/drivers/edac/Makefile
@@ -68,3 +68,4 @@ obj-$(CONFIG_EDAC_OCTEON_PCI) += octeon_edac-pci.o
 obj-$(CONFIG_EDAC_ALTERA_MC)   += altera_edac.o
 obj-$(CONFIG_EDAC_SYNOPSYS)+= synopsys_edac.o
 obj-$(CONFIG_EDAC_XGENE)   += xgene_edac.o
+obj-$(CONFIG_EDAC_CORTEX_ARM64)+= cortex_arm64_edac.o
diff --git a/drivers/edac/cortex_arm64_edac.c b/drivers/edac/cortex_arm64_edac.c
new file mode 100644
index 000..7c936b66
--- /dev/null
+++ b/drivers/edac/cortex_arm64_edac.c
@@ -0,0 +1,349 @@
+/*
+ * Cortex A57 and A53 EDAC
+ *
+ * Copyright (c) 2015, Advanced Micro Devices
+ * Author: Brijesh Singh 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include 
+#include 
+#include 
+#include 
+
+#include "edac_core.h"
+
+#define DRV_NAME   "cortex_edac"
+
+#define CPUMERRSR_EL1_INDEX(x, y)  ((x) & (y))
+#define CPUMERRSR_EL1_BANK_WAY(x, y)   (((x) >> 18) & (y))
+#define CPUMERRSR_EL1_RAMID(x) (((x) >> 24) & 0x7f)
+#define CPUMERRSR_EL1_VALID(x) ((x) & (1 << 31))
+#define CPUMERRSR_EL1_REPEAT(x)(((x) >> 32) & 0x7f)
+#define CPUMERRSR_EL1_OTHER(x) (((x) >> 40) & 0xff)
+#define CPUMERRSR_EL1_FATAL(x) ((x) & (1UL << 63))
+#define L1_I_TAG_RAM   0x00
+#define L1_I_DATA_RAM  0x01
+#define L1_D_TAG_RAM   0x08
+#define L1_D_DATA_RAM  0x09
+#define L1_D_DIRTY_RAM 0x14
+#define TLB_RAM0x18

Re: [PATCH v3] EDAC: Add ARM64 EDAC

2015-10-27 Thread Stephen Boyd
On 10/27, Brijesh Singh wrote:
> diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig
> index ef25000..84507b5 100644
> --- a/drivers/edac/Kconfig
> +++ b/drivers/edac/Kconfig
> @@ -390,4 +390,12 @@ config EDAC_XGENE
> Support for error detection and correction on the
> APM X-Gene family of SOCs.
>  
> +config EDAC_CORTEX_ARM64
> + tristate "ARM Cortex A57/A53"
> + depends on EDAC_MM_EDAC && ARM64
> + default n

n is the default so this can be removed.

> + help
> +   Support for error detection and correction on the
> +   ARM Cortex A57 and A53.
> +
>  endif # EDAC
> diff --git a/drivers/edac/cortex_arm64_edac.c 
> b/drivers/edac/cortex_arm64_edac.c
> new file mode 100644
> index 000..7c936b66
> --- /dev/null
> +++ b/drivers/edac/cortex_arm64_edac.c
> +
> +static struct platform_driver cortex_arm64_edac_driver = {
> + .probe = cortex_arm64_edac_probe,
> + .remove = cortex_arm64_edac_remove,
> + .driver = {
> + .name = DRV_NAME,
> + .owner = THIS_MODULE,

This line can be removed. THIS_MODULE is assigned by
platform_driver_register().

> + .of_match_table = cortex_arm64_edac_of_match,
> + },
> +};
> +
> +static int __init cortex_arm64_edac_init(void)
> +{
> + return platform_driver_register(_arm64_edac_driver);
> +}
> +module_init(cortex_arm64_edac_init);
> +
> +static void __exit cortex_arm64_edac_exit(void)
> +{
> + platform_driver_unregister(_arm64_edac_driver);
> +}
> +module_exit(cortex_arm64_edac_exit);

This can be module_platform_driver(cortex_arm64_edac_driver) now.

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] EDAC: Add ARM64 EDAC

2015-10-27 Thread Brijesh Singh
Thanks for review Steve.

On 10/27/2015 02:08 PM, Stephen Boyd wrote:
>> +config EDAC_CORTEX_ARM64
>> +tristate "ARM Cortex A57/A53"
>> +depends on EDAC_MM_EDAC && ARM64
>> +default n
> 
> n is the default so this can be removed.
> 
noted

>> +.driver = {
>> +.name = DRV_NAME,
>> +.owner = THIS_MODULE,
> 
> This line can be removed. THIS_MODULE is assigned by
> platform_driver_register().
noted. 

> 
>> +.of_match_table = cortex_arm64_edac_of_match,
>> +},
>> +};
>> +
>> +static int __init cortex_arm64_edac_init(void)
>> +{
>> +return platform_driver_register(_arm64_edac_driver);
>> +}
>> +module_init(cortex_arm64_edac_init);
>> +
>> +static void __exit cortex_arm64_edac_exit(void)
>> +{
>> +platform_driver_unregister(_arm64_edac_driver);
>> +}
>> +module_exit(cortex_arm64_edac_exit);
> 
> This can be module_platform_driver(cortex_arm64_edac_driver) now.
> 
noted.

-Brijesh
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html