linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v9 0/3]  EDAC: nuvoton: Add nuvoton NPCM memory controller driver
@ 2022-05-10  3:10 Medad CChien
  2022-05-10  3:10 ` [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node Medad CChien
                   ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Medad CChien @ 2022-05-10  3:10 UTC (permalink / raw)
  To: rric, james.morse, tony.luck, mchehab, bp, robh+dt, benjaminfair,
	yuenn, venture, KWLIU, YSCHU, JJLIU0, KFTING, avifishman70,
	tmaimon77, tali.perry1, ctcchien
  Cc: linux-edac, linux-kernel, devicetree, openbmc

Support memory controller for Nuvoton NPCM SoC.

Addressed comments from:
 - Rob Herring : https://lkml.org/lkml/2022/2/25/1103
 - Krzysztof Kozlowski : https://lkml.org/lkml/2022/2/27/63
 - Rob Herring : https://lkml.org/lkml/2022/3/2/828
 - Krzysztof Kozlowski : https://lkml.org/lkml/2022/3/11/294
 - Jonathan Neuschäfer : https://lkml.org/lkml/2022/3/11/1167
 - Krzysztof Kozlowski : https://lkml.org/lkml/2022/3/11/293
 - Rob Herring : https://lkml.org/lkml/2022/3/11/575
 - Krzysztof Kozlowski : https://lkml.org/lkml/2022/3/11/305
 - Avi Fishman : https://lkml.org/lkml/2022/3/13/339
 - Krzysztof Kozlowski : https://lkml.org/lkml/2022/3/14/93
 - Krzysztof Kozlowski : https://lkml.org/lkml/2022/3/14/95
 - Krzysztof Kozlowski : https://lkml.org/lkml/2022/3/15/378
 - Boris Petkov : https://lkml.org/lkml/2022/3/17/561
 - Paul Menzel : https://lkml.org/lkml/2022/4/9/47
 - Paul Menzel : https://lkml.org/lkml/2022/4/11/182
 - Borislav Petkov : https://lkml.org/lkml/2022/4/8/871
 - Paul Menzel : https://lkml.org/lkml/2022/4/9/51
 - Paul Menzel : https://lkml.org/lkml/2022/4/9/65
 - Rob Herring : https://lkml.org/lkml/2022/4/21/681
 - Paul Menzel : https://lkml.org/lkml/2022/5/3/307
 - Paul Menzel : https://lkml.org/lkml/2022/5/3/304
 - Borislav Petkov : https://lkml.org/lkml/2022/5/3/343

Changes since version 9:
 - Add a necessary blank line in Kconfig for EDAC_NPCM.
 - Reflow for 75 characters per line in commit message of devicetree file.
 - Remove wrong tags in all the commit message.
 - Reorder content in commit message of NPCM memory controller driver.

Changes since version 8:
 - Add new line character at the end of file of yaml file

Changes since version 7:
 - Refactor npcm_edac.c.
 - Sort strings in npcm_edac.c.
 - Reflow code for 75 characters per line.
 - Summarize errors and warnings reported by kernel test robot.
 - Shorten name of values to make them become more readable in npcm_edac.c..
 - Put spaces between the * and the text in npcm_edac.c.

Changes since version 6:
 - Fix warnings in npcm_edac.c.
 - Add information reported by kernel test robot <lkp@intel.com>.

Changes since version 5:
 - Update commit message of dt-bindings: edac: nuvoton: add NPCM memory controller.
 
Changes since version 4:
 - Update filename in nuvoton,npcm-memory-controller.yaml.
 - Add COMPILE_TEST in Kconfig.
 - Fix errors in npcm_edac.c.
 - Remove unnecessary checking after of_match_device() and of_device_get_match_data().

Changes since version 3:
 - Rename npcm-edac.yaml as nuvoton,npcm-memory-controller.yaml.
 - Drop 'EDAC' in title of nuvoton,npcm-memory-controller.yaml.
 - Update compatible in nuvoton,npcm-memory-controller.yaml.

Changes since version 2:
 - Update description and compatible in npcm-edac.yaml.
 - Remove address-cells and size-cells in npcm-edac.yaml.
 - Reorder the items of examples in npcm-edac.yaml.
 - Reorder header file in driver.

Changes since version 1:
 - Add nuvoton,npcm750-memory-controller property in NPCM devicetree.
 - Add new property in edac binding document.
 - Add new driver for nuvoton NPCM memory controller.
Medad CChien (3):
  ARM: dts: nuvoton: Add memory controller node
  dt-bindings: edac: nuvoton: add NPCM memory controller
  EDAC: nuvoton: Add NPCM memory controller driver

 .../edac/nuvoton,npcm-memory-controller.yaml  |  61 ++
 arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi |   7 +
 drivers/edac/Kconfig                          |  10 +
 drivers/edac/Makefile                         |   1 +
 drivers/edac/npcm_edac.c                      | 680 ++++++++++++++++++
 5 files changed, 759 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
 create mode 100644 drivers/edac/npcm_edac.c

-- 
2.17.1


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node
  2022-05-10  3:10 [PATCH v9 0/3] EDAC: nuvoton: Add nuvoton NPCM memory controller driver Medad CChien
@ 2022-05-10  3:10 ` Medad CChien
  2022-05-18 17:44   ` Borislav Petkov
  2022-05-10  3:10 ` [PATCH v9 2/3] dt-bindings: edac: nuvoton: add NPCM memory controller Medad CChien
  2022-05-10  3:10 ` [PATCH v9 3/3] EDAC: nuvoton: Add NPCM memory controller driver Medad CChien
  2 siblings, 1 reply; 18+ messages in thread
From: Medad CChien @ 2022-05-10  3:10 UTC (permalink / raw)
  To: rric, james.morse, tony.luck, mchehab, bp, robh+dt, benjaminfair,
	yuenn, venture, KWLIU, YSCHU, JJLIU0, KFTING, avifishman70,
	tmaimon77, tali.perry1, ctcchien
  Cc: linux-edac, linux-kernel, devicetree, openbmc

ECC must be configured in the BootBlock header.
Then, you can read error counts via the EDAC kernel framework.

Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
---
 arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi b/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
index 3696980a3da1..ba542b26941e 100644
--- a/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
+++ b/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
@@ -106,6 +106,13 @@
 		interrupt-parent = <&gic>;
 		ranges;
 
+		mc: memory-controller@f0824000 {
+			compatible = "nuvoton,npcm750-memory-controller";
+			reg = <0x0 0xf0824000 0x0 0x1000>;
+			interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
+			status = "disabled";
+		};
+
 		rstc: rstc@f0801000 {
 			compatible = "nuvoton,npcm750-reset";
 			reg = <0xf0801000 0x70>;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v9 2/3] dt-bindings: edac: nuvoton: add NPCM memory controller
  2022-05-10  3:10 [PATCH v9 0/3] EDAC: nuvoton: Add nuvoton NPCM memory controller driver Medad CChien
  2022-05-10  3:10 ` [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node Medad CChien
@ 2022-05-10  3:10 ` Medad CChien
  2022-05-10  6:14   ` Paul Menzel
  2022-05-10  3:10 ` [PATCH v9 3/3] EDAC: nuvoton: Add NPCM memory controller driver Medad CChien
  2 siblings, 1 reply; 18+ messages in thread
From: Medad CChien @ 2022-05-10  3:10 UTC (permalink / raw)
  To: rric, james.morse, tony.luck, mchehab, bp, robh+dt, benjaminfair,
	yuenn, venture, KWLIU, YSCHU, JJLIU0, KFTING, avifishman70,
	tmaimon77, tali.perry1, ctcchien
  Cc: linux-edac, linux-kernel, devicetree, openbmc

Document devicetree bindings for the Nuvoton BMC NPCM memory controller.

Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
---
 .../edac/nuvoton,npcm-memory-controller.yaml  | 61 +++++++++++++++++++
 1 file changed, 61 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml

diff --git a/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml b/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
new file mode 100644
index 000000000000..6f37211796a3
--- /dev/null
+++ b/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
@@ -0,0 +1,61 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/edac/nuvoton,npcm-memory-controller.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Nuvoton NPCM Memory Controller
+
+maintainers:
+  - Medad CChien <ctcchien@nuvoton.com>
+
+description: |
+  The Nuvoton BMC SoC supports DDR4 memory with and without ECC (error
+  correction check).
+
+  The memory controller supports single bit error correction, double bit
+  error detection (in-line ECC in which a section (1/8th) of the memory
+  device used to store data is used for ECC storage).
+
+  Note, the bootloader must configure ECC mode for the memory controller.
+
+properties:
+  compatible:
+    enum:
+      - nuvoton,npcm750-memory-controller
+      - nuvoton,npcm845-memory-controller
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    minItems: 1
+    items:
+      - description: uncorrectable error interrupt
+      - description: correctable error interrupt
+
+  interrupt-names:
+    minItems: 1
+    items:
+      - const: ue
+      - const: ce
+
+required:
+  - compatible
+  - reg
+  - interrupts
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    ahb {
+        #address-cells = <2>;
+        #size-cells = <2>;
+        mc: memory-controller@f0824000 {
+            compatible = "nuvoton,npcm750-memory-controller";
+            reg = <0x0 0xf0824000 0x0 0x1000>;
+            interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
+        };
+    };
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v9 3/3] EDAC: nuvoton: Add NPCM memory controller driver
  2022-05-10  3:10 [PATCH v9 0/3] EDAC: nuvoton: Add nuvoton NPCM memory controller driver Medad CChien
  2022-05-10  3:10 ` [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node Medad CChien
  2022-05-10  3:10 ` [PATCH v9 2/3] dt-bindings: edac: nuvoton: add NPCM memory controller Medad CChien
@ 2022-05-10  3:10 ` Medad CChien
  2022-05-10  7:49   ` Paul Menzel
  2 siblings, 1 reply; 18+ messages in thread
From: Medad CChien @ 2022-05-10  3:10 UTC (permalink / raw)
  To: rric, james.morse, tony.luck, mchehab, bp, robh+dt, benjaminfair,
	yuenn, venture, KWLIU, YSCHU, JJLIU0, KFTING, avifishman70,
	tmaimon77, tali.perry1, ctcchien
  Cc: linux-edac, linux-kernel, devicetree, openbmc

Add memory controller support for Nuvoton NPCM SoC.

Note:
   you can force an ecc event by writing a string to edac sysfs node
   and remember to define CONFIG_EDAC_DEBUG to enable this feature
   example: force a correctable event on checkcode bit 0
   echo "CE checkcode 0" > /sys/devices/system/edac/mc/mc0/forced_ecc_error

Fix the following warnings and error:
error:
   error: macro "edac_printk" requires 4 arguments, but only 2 given in
   driver/edac/npcm_edac.c
   edac_printk(KERN_INFO, "bit_no for checkcode must be 0~7\n");

warnings:
   performing pointer arithmetic on a null pointer has undefined behavior.
   logical not is only applied to the left hand side of this bitwise
   operator.
   mixing declarations and code is a C99 extension.

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
---
 drivers/edac/Kconfig     |  10 +
 drivers/edac/Makefile    |   1 +
 drivers/edac/npcm_edac.c | 680 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 691 insertions(+)
 create mode 100644 drivers/edac/npcm_edac.c

diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig
index 58ab63642e72..9c83202cbf65 100644
--- a/drivers/edac/Kconfig
+++ b/drivers/edac/Kconfig
@@ -539,4 +539,14 @@ config EDAC_DMC520
 	  Support for error detection and correction on the
 	  SoCs with ARM DMC-520 DRAM controller.
 
+config EDAC_NPCM
+	tristate "Nuvoton NPCM DDR Memory Controller"
+	depends on (ARCH_NPCM || COMPILE_TEST)
+	help
+	  Support for error detection and correction on the Nuvoton NPCM DDR
+	  memory controller.
+
+	  First, ECC must be configured in the BootBlock header. Then, this driver
+	  will expose error counters via the EDAC kernel framework.
+
 endif # EDAC
diff --git a/drivers/edac/Makefile b/drivers/edac/Makefile
index 2d1641a27a28..db3c59d3ad84 100644
--- a/drivers/edac/Makefile
+++ b/drivers/edac/Makefile
@@ -84,3 +84,4 @@ obj-$(CONFIG_EDAC_QCOM)			+= qcom_edac.o
 obj-$(CONFIG_EDAC_ASPEED)		+= aspeed_edac.o
 obj-$(CONFIG_EDAC_BLUEFIELD)		+= bluefield_edac.o
 obj-$(CONFIG_EDAC_DMC520)		+= dmc520_edac.o
+obj-$(CONFIG_EDAC_NPCM)			+= npcm_edac.o
diff --git a/drivers/edac/npcm_edac.c b/drivers/edac/npcm_edac.c
new file mode 100644
index 000000000000..5552dab242b1
--- /dev/null
+++ b/drivers/edac/npcm_edac.c
@@ -0,0 +1,680 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2022 Nuvoton Technology corporation.
+
+#include <linux/delay.h>
+#include <linux/of_device.h>
+
+#include "edac_module.h"
+
+#define NPCM_EDAC_MOD_NAME "npcm-edac"
+#define FORCED_ECC_ERR_EVENT_SUPPORT		BIT(1)
+#define EDAC_MSG_SIZE						256
+/* Granularity of reported error in bytes */
+#define NPCM_EDAC_ERR_GRAIN				1
+
+#define MEM_TYPE_DDR4						0xA
+
+#define NPCM7XX_CHIP						0x700
+#define NPCM8XX_CHIP						0x800
+
+/* Control register width definitions */
+#define WDTH_16								(2)
+#define WDTH_32								(1)
+#define WDTH_64								(0)
+#define CTL_MEM_MAX_WIDTH_MASK			GENMASK(4, 0)
+#define CTL_REG_WIDTH_SHIFT					(32)
+#define XOR_CHECK_BIT_SPLIT_WIDTH			(16)
+#define CTL_CONTROLLER_BUSY_FLAG			BIT(0)
+#define NPCM_ECC_CTL_FORCE_WC				BIT(8)
+#define NPCM_ECC_CTL_AUTO_WRITEBACK_EN	BIT(24)
+#define NPCM_ECC_CTL_XOR_BITS_MASK			GENMASK(23, 16)
+#define NPCM_ECC_CTL_MTYPE_MASK			GENMASK(11, 8)
+#define NPCM_ECC_CTL_GLOBAL_INT_DISABLE		BIT(31)
+
+/* Syndrome values */
+#define ECC_DOUBLE_MULTI_ERR_SYND			0x03
+
+static char data_synd[] = {
+			0xf4, 0xf1, 0xec, 0xea, 0xe9, 0xe6, 0xe5, 0xe3,
+			0xdc, 0xda, 0xd9, 0xd6, 0xd5, 0xd3, 0xce, 0xcb,
+			0xb5, 0xb0, 0xad, 0xab, 0xa8, 0xa7, 0xa4, 0xa2,
+			0x9d, 0x9b, 0x98, 0x97, 0x94, 0x92, 0x8f, 0x8a,
+			0x75, 0x70, 0x6d, 0x6b, 0x68, 0x67, 0x64, 0x62,
+			0x5e, 0x5b, 0x58, 0x57, 0x54, 0x52, 0x4f, 0x4a,
+			0x34, 0x31, 0x2c, 0x2a, 0x29, 0x26, 0x25, 0x23,
+			0x1c, 0x1a, 0x19, 0x16, 0x15, 0x13, 0x0e, 0x0b
+		  };
+
+static char check_synd[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
+
+struct npcm_edac_platform_data {
+	/* force ECC event */
+	u32 ip_features;
+	u32 ddr_ctl_controller_busy_reg;
+	u32 ecc_ctl_xor_check_bits_reg;
+
+	u32 chip;
+
+	/* DDR4 Controller Registers */
+	u32 ddr_ctl_mem_type_reg;
+	u32 ddr_ctl_mem_width_reg;
+
+	u32 ecc_ctl_en_reg;
+	u32 ecc_ctl_int_mask;
+	u32 ecc_ctl_int_status;
+	u32 ecc_ctl_int_ack;
+	u32 ecc_ctl_int_mask_master;
+	u32 ecc_ctl_int_mask_ecc;
+
+	u32 ecc_sig_c_addr_l;
+	u32 ecc_sig_c_addr_h;
+	u32 ecc_sig_c_data_l;
+	u32 ecc_sig_c_data_h;
+	u32 ecc_sig_c_id;
+	u32 ecc_sig_c_synd;
+
+	u32 ecc_sig_u_addr_l;
+	u32 ecc_sig_u_addr_h;
+	u32 ecc_sig_u_data_l;
+	u32 ecc_sig_u_data_h;
+	u32 ecc_sig_u_id;
+	u32 ecc_sig_u_synd;
+
+	/* MASK */
+	u32 ecc_ctl_ecc_enable_mask;
+	u32 ecc_ctl_en_int_master_mask;
+	u32 ecc_ctl_en_int_ecc_mask;
+
+	/* ECC IRQ Macros */
+	u32 ecc_int_ce_event;
+	u32 ecc_int_second_ce_event;
+	u32 ecc_int_ue_event;
+	u32 ecc_int_second_ue_event;
+	u32 ecc_int_ce_ue_mask;
+	u32 ecc_ce_intr_mask;
+	u32 ecc_ue_intr_mask;
+
+	/* ECC Signature Macros */
+	u32 ecc_sig_c_id_shift;
+	u32 ecc_sig_c_synd_shift;
+	u32 ecc_sig_c_addr_h_mask;
+	u32 ecc_sig_c_id_mask;
+	u32 ecc_sig_c_synd_mask;
+
+	u32 ecc_sig_u_id_shift;
+	u32 ecc_sig_u_synd_shift;
+	u32 ecc_sig_u_addr_h_mask;
+	u32 ecc_sig_u_id_mask;
+	u32 ecc_sig_u_synd_mask;
+};
+
+struct priv_data {
+	void __iomem *reg;
+	u32 ce_cnt;
+	u32 ue_cnt;
+	char message[EDAC_MSG_SIZE];
+	const struct npcm_edac_platform_data *npcm_chip;
+};
+
+
+static void init_mem_layout(struct mem_ctl_info *mci)
+{
+	struct priv_data *priv = mci->pvt_info;
+	const struct npcm_edac_platform_data *npcm_chip = priv->npcm_chip;
+	struct csrow_info *csi;
+	struct dimm_info *dimm;
+	struct sysinfo info;
+	enum mem_type mtype;
+	u32 val, width;
+	u32 size, row;
+	u8 j;
+
+	dimm = edac_get_dimm(mci, 0, 0, 0);
+
+	if (dimm)
+		return;
+
+	si_meminfo(&info);
+	size = info.totalram * info.mem_unit;
+	for (row = 0; row < mci->nr_csrows; row++) {
+		csi = mci->csrows[row];
+
+		for (j = 0; j < csi->nr_channels; j++) {
+			dimm            = csi->channels[j]->dimm;
+			dimm->edac_mode = EDAC_FLAG_SECDED;
+			/* Get memory type by reading hw registers */
+			val = readl(priv->reg + npcm_chip->ddr_ctl_mem_type_reg);
+
+			mtype = val & NPCM_ECC_CTL_MTYPE_MASK;
+			if (mtype == MEM_TYPE_DDR4)
+				dimm->mtype = MEM_DDR4;
+			else
+				dimm->mtype = MEM_EMPTY;
+
+			/* Get EDAC devtype width for the current mc */
+			width = readl(priv->reg + npcm_chip->ddr_ctl_mem_width_reg)
+				      & CTL_MEM_MAX_WIDTH_MASK;
+			switch (width) {
+			case WDTH_16:
+				dimm->dtype = DEV_X2;
+				break;
+			case WDTH_32:
+				dimm->dtype = DEV_X4;
+				break;
+			case WDTH_64:
+				dimm->dtype = DEV_X8;
+				break;
+			default:
+				dimm->dtype = DEV_UNKNOWN;
+			}
+
+			dimm->nr_pages = (size >> PAGE_SHIFT) /
+				csi->nr_channels;
+			dimm->grain = NPCM_EDAC_ERR_GRAIN;
+		}
+	}
+}
+
+
+static void handle_correctable_error(struct mem_ctl_info *mci)
+{
+	struct priv_data *priv = mci->pvt_info;
+	const struct npcm_edac_platform_data *npcm_chip = priv->npcm_chip;
+	u64 err_c_addr = 0x0;
+	u64 err_c_data = 0x0;
+	u32 err_c_synd, err_c_id;
+	u32 sig_val_l, sig_val_h = 0x0;
+
+	sig_val_l = readl(priv->reg + npcm_chip->ecc_sig_c_addr_l);
+
+	if (npcm_chip->chip == NPCM8XX_CHIP)
+		sig_val_h = (readl(priv->reg + npcm_chip->ecc_sig_c_addr_h) &
+				npcm_chip->ecc_sig_c_addr_h_mask);
+
+	err_c_addr = (((err_c_addr | sig_val_h) <<
+				CTL_REG_WIDTH_SHIFT) | sig_val_l);
+
+	sig_val_l = readl(priv->reg + npcm_chip->ecc_sig_c_data_l);
+
+	if (npcm_chip->chip == NPCM8XX_CHIP)
+		sig_val_h = readl(priv->reg + npcm_chip->ecc_sig_c_data_h);
+
+	err_c_data = (((err_c_data | sig_val_h) <<
+				CTL_REG_WIDTH_SHIFT) | sig_val_l);
+
+	err_c_id = ((readl(priv->reg + npcm_chip->ecc_sig_c_id) &
+				npcm_chip->ecc_sig_c_id_mask) >>
+				npcm_chip->ecc_sig_c_id_shift);
+
+	err_c_synd = ((readl(priv->reg + npcm_chip->ecc_sig_c_synd) &
+				npcm_chip->ecc_sig_c_synd_mask) >>
+				npcm_chip->ecc_sig_c_synd_shift);
+
+	priv->ce_cnt += 1;
+
+	snprintf(priv->message,
+		 EDAC_MSG_SIZE, "DDR ECC %s: data=0x%llx source_id=%#08x",
+		 mci->ctl_name, err_c_data, err_c_id);
+
+	edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci,
+			     1,
+			     err_c_addr >> PAGE_SHIFT,
+			     err_c_addr & ~PAGE_MASK,
+			     err_c_synd, 0, 0, -1,
+			     priv->message, "");
+}
+
+static void handle_ue(struct mem_ctl_info *mci)
+{
+	struct priv_data *priv = mci->pvt_info;
+	const struct npcm_edac_platform_data *npcm_chip = priv->npcm_chip;
+	u64 err_u_addr = 0x0;
+	u64 err_u_data = 0x0;
+	u32 err_u_synd, err_u_id;
+	u32 sig_val_l, sig_val_h = 0x0;
+
+	sig_val_l = readl(priv->reg + npcm_chip->ecc_sig_u_addr_l);
+
+	if (npcm_chip->chip == NPCM8XX_CHIP)
+		sig_val_h = (readl(priv->reg + npcm_chip->ecc_sig_u_addr_h) &
+				npcm_chip->ecc_sig_u_addr_h_mask);
+
+	err_u_addr = (((err_u_addr | sig_val_h) <<
+				CTL_REG_WIDTH_SHIFT) | sig_val_l);
+
+	sig_val_l = readl(priv->reg + npcm_chip->ecc_sig_u_data_l);
+
+	if (npcm_chip->chip == NPCM8XX_CHIP)
+		sig_val_h = readl(priv->reg + npcm_chip->ecc_sig_u_data_h);
+
+	err_u_data = (((err_u_data | sig_val_h) <<
+				CTL_REG_WIDTH_SHIFT) | sig_val_l);
+
+	err_u_id = ((readl(priv->reg + npcm_chip->ecc_sig_u_id) &
+				npcm_chip->ecc_sig_u_id_mask) >>
+			npcm_chip->ecc_sig_u_id_shift);
+
+	err_u_synd = ((readl(priv->reg + npcm_chip->ecc_sig_u_synd) &
+				npcm_chip->ecc_sig_u_synd_mask) >>
+			npcm_chip->ecc_sig_u_synd_shift);
+	priv->ue_cnt += 1;
+
+	snprintf(priv->message, EDAC_MSG_SIZE,
+		 "DDR ECC %s: addr=0x%llx data=0x%llx source_id=%#08x",
+		 mci->ctl_name, err_u_addr, err_u_data, err_u_id);
+
+	edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci,
+			     1,
+			     err_u_addr >> PAGE_SHIFT,
+			     err_u_addr & ~PAGE_MASK,
+			     err_u_synd, 0, 0, -1,
+			     priv->message, "");
+}
+
+static irqreturn_t edac_ecc_isr(int irq, void *dev_id)
+{
+	struct mem_ctl_info *mci = dev_id;
+	struct priv_data *priv = mci->pvt_info;
+	const struct npcm_edac_platform_data *npcm_chip = priv->npcm_chip;
+	u32 intr_status;
+	u32 val;
+
+	/* Check the intr status and confirm ECC error intr */
+	intr_status = readl(priv->reg + npcm_chip->ecc_ctl_int_status);
+
+	edac_dbg(3, "dev: %s, id: %s: IRQ: %d, interrupt status: 0x%x\n",
+		 mci->dev_name, mci->ctl_name, irq, intr_status);
+
+	val = intr_status & npcm_chip->ecc_int_ce_ue_mask;
+	if (!((val & npcm_chip->ecc_ce_intr_mask) || (val & npcm_chip->ecc_ue_intr_mask)))
+		return IRQ_NONE;
+
+	if (val & npcm_chip->ecc_ce_intr_mask) {
+		handle_correctable_error(mci);
+
+		/* Clear the interrupt source */
+		if (val & npcm_chip->ecc_int_ce_event)
+			writel(npcm_chip->ecc_int_ce_event, priv->reg + npcm_chip->ecc_ctl_int_ack);
+		else if (val & npcm_chip->ecc_int_second_ce_event)
+			writel(npcm_chip->ecc_int_second_ce_event,
+			       priv->reg + npcm_chip->ecc_ctl_int_ack);
+		else
+			edac_printk(KERN_ERR, NPCM_EDAC_MOD_NAME, "Failed to clear CE IRQ\n");
+	}
+
+	if (val & npcm_chip->ecc_ue_intr_mask) {
+		handle_ue(mci);
+
+		/* Clear the interrupt source */
+		if (val & npcm_chip->ecc_int_ue_event)
+			writel(npcm_chip->ecc_int_ue_event, priv->reg + npcm_chip->ecc_ctl_int_ack);
+		else if (val & npcm_chip->ecc_int_second_ue_event)
+			writel(npcm_chip->ecc_int_second_ue_event,
+			       priv->reg + npcm_chip->ecc_ctl_int_ack);
+		else
+			edac_printk(KERN_ERR, NPCM_EDAC_MOD_NAME, "Failed to clear UE IRQ\n");
+	}
+
+	edac_dbg(3, "Total error count CE %d UE %d\n",
+		 priv->ce_cnt, priv->ue_cnt);
+
+	return IRQ_HANDLED;
+}
+
+static ssize_t forced_ecc_error_show(struct device *dev,
+				     struct device_attribute *mattr,
+				     char *data)
+{
+	return sprintf(data, "CDNS-DDR4 Force Injection Help:\n"
+		       "Example:\n"
+		       "echo \"CE checkcode 0\" > /sys/devices/system/edac/mc/mc0/forced_ecc_error\n"
+		       "CE: Corrected\n"
+		       "UE: Uncorrected\n"
+		       "checkcode/data:source\n"
+		       "bit [0-63] for data [0-7] for checkcode:bit number\n");
+}
+
+static ssize_t forced_ecc_error_store(struct device *dev,
+				      struct device_attribute *mattr,
+				      const char *data, size_t count)
+{
+	struct mem_ctl_info *mci = to_mci(dev);
+	struct priv_data *priv = mci->pvt_info;
+	const struct npcm_edac_platform_data *npcm_chip = priv->npcm_chip;
+	int	args_cnt;
+	int	ret;
+	char	**args;
+	u32	regval;
+	u8	bit_no;
+
+	/* Check ecc enabled */
+	if (!(readl(priv->reg + npcm_chip->ecc_ctl_en_reg) & npcm_chip->ecc_ctl_ecc_enable_mask))
+		return count;
+
+	/* Check no write operation pending to controller */
+	while (readl(priv->reg + npcm_chip->ddr_ctl_controller_busy_reg) &
+			CTL_CONTROLLER_BUSY_FLAG) {
+		usleep_range(1000, 10000);
+	}
+
+	/* Split string buffer into separate parameters */
+	args = argv_split(GFP_KERNEL, data, &args_cnt);
+
+	/* Write appropriate syndrome to xor_check_bit */
+	if (!strcmp(args[0], "CE") && args_cnt == 3) {
+		ret = kstrtou8(args[2], 0, &bit_no);
+		if (ret)
+			return ret;
+		if (!strcmp(args[1], "checkcode")) {
+			if (bit_no > 7) {
+				edac_printk(KERN_INFO, NPCM_EDAC_MOD_NAME, "bit_no for checkcode must be 0~7\n");
+				return count;
+			}
+			regval = readl(priv->reg + npcm_chip->ecc_ctl_xor_check_bits_reg);
+			regval = (regval & ~(NPCM_ECC_CTL_XOR_BITS_MASK)) |
+				(check_synd[bit_no] << XOR_CHECK_BIT_SPLIT_WIDTH);
+			writel(regval, priv->reg + npcm_chip->ecc_ctl_xor_check_bits_reg);
+		} else if (!strcmp(args[1], "data")) {
+			if (bit_no > 63) {
+				edac_printk(KERN_INFO, NPCM_EDAC_MOD_NAME, "bit_no for data must be 0~63\n");
+				return count;
+			}
+			regval = readl(priv->reg + npcm_chip->ecc_ctl_xor_check_bits_reg);
+			regval = (regval & ~(NPCM_ECC_CTL_XOR_BITS_MASK)) |
+					 (data_synd[bit_no] << XOR_CHECK_BIT_SPLIT_WIDTH);
+			writel(regval, priv->reg + npcm_chip->ecc_ctl_xor_check_bits_reg);
+		}
+		/* Enable the ECC writeback_en for corrected error */
+		regval = readl(priv->reg + npcm_chip->ecc_ctl_xor_check_bits_reg);
+		writel((regval | NPCM_ECC_CTL_AUTO_WRITEBACK_EN),
+		       priv->reg + npcm_chip->ecc_ctl_xor_check_bits_reg);
+	} else if (!strcmp(args[0], "UE")) {
+		regval = readl(priv->reg + npcm_chip->ecc_ctl_xor_check_bits_reg);
+		regval = (regval & ~(NPCM_ECC_CTL_XOR_BITS_MASK)) |
+				 (ECC_DOUBLE_MULTI_ERR_SYND << XOR_CHECK_BIT_SPLIT_WIDTH);
+		writel(regval, priv->reg + npcm_chip->ecc_ctl_xor_check_bits_reg);
+	}
+
+	/* Assert fwc */
+	writel((NPCM_ECC_CTL_FORCE_WC | readl(priv->reg + npcm_chip->ecc_ctl_xor_check_bits_reg)),
+	       priv->reg + npcm_chip->ecc_ctl_xor_check_bits_reg);
+
+	return count;
+}
+
+static DEVICE_ATTR_RW(forced_ecc_error);
+static int create_sysfs_attributes(struct mem_ctl_info *mci)
+{
+	int rc;
+
+	rc = device_create_file(&mci->dev, &dev_attr_forced_ecc_error);
+	if (rc < 0)
+		return rc;
+	return 0;
+}
+
+static void remove_sysfs_attributes(struct mem_ctl_info *mci)
+{
+	device_remove_file(&mci->dev, &dev_attr_forced_ecc_error);
+}
+
+static const struct npcm_edac_platform_data npcm7xx_edac = {
+	.chip = NPCM7XX_CHIP,
+
+	/* CDNS DDR4 Controller Registers */
+	.ecc_ctl_en_reg = 0x174,
+	.ecc_ctl_int_status = 0x1D0,
+	.ecc_ctl_int_ack = 0x1D4,
+	.ecc_ctl_int_mask_master = 0x1D8,
+
+	.ecc_sig_c_addr_l = 0x188,
+	.ecc_sig_c_data_l = 0x190,
+	.ecc_sig_c_id = 0x194,
+	.ecc_sig_c_synd = 0x18C,
+
+	.ecc_sig_u_addr_l = 0x17C,
+	.ecc_sig_u_data_l = 0x184,
+	.ecc_sig_u_id = 0x194,
+	.ecc_sig_u_synd = 0x180,
+
+	/* MASK */
+	.ecc_ctl_ecc_enable_mask = BIT(24),
+	.ecc_ctl_en_int_master_mask = GENMASK(30, 7) | GENMASK(2, 0),
+
+	/* ECC IRQ Macros */
+	.ecc_int_ce_event = BIT(3),
+	.ecc_int_second_ce_event = BIT(4),
+	.ecc_int_ue_event = BIT(5),
+	.ecc_int_second_ue_event = BIT(6),
+	.ecc_int_ce_ue_mask = GENMASK(6, 3),
+	.ecc_ce_intr_mask = GENMASK(4, 3),
+	.ecc_ue_intr_mask = GENMASK(6, 5),
+
+	/* ECC Signature Macros */
+	.ecc_sig_c_id_shift = 16,
+	.ecc_sig_c_synd_shift = 0,
+
+	.ecc_sig_c_id_mask = GENMASK(29, 16),
+	.ecc_sig_c_synd_mask = GENMASK(6, 0),
+
+	.ecc_sig_u_id_shift = 0,
+	.ecc_sig_u_synd_shift = 0,
+
+	.ecc_sig_u_id_mask = GENMASK(13, 0),
+	.ecc_sig_u_synd_mask = GENMASK(6, 0),
+};
+
+static const struct npcm_edac_platform_data npcm8xx_edac = {
+	.ip_features = FORCED_ECC_ERR_EVENT_SUPPORT,
+	.ddr_ctl_controller_busy_reg = 0x20C,
+	.ecc_ctl_xor_check_bits_reg = 0x174,
+
+	.chip = NPCM8XX_CHIP,
+
+	/* CDNS DDR4 Controller Registers */
+	.ddr_ctl_mem_type_reg = 0x000,
+	.ddr_ctl_mem_width_reg = 0x00c,
+
+	.ecc_ctl_en_reg = 0x16C,
+	.ecc_ctl_int_status = 0x228,
+	.ecc_ctl_int_ack = 0x244,
+	.ecc_ctl_int_mask_master = 0x220,
+	.ecc_ctl_int_mask_ecc = 0x260,
+
+	.ecc_sig_c_addr_l = 0x18C,
+	.ecc_sig_c_addr_h = 0x190,
+	.ecc_sig_c_data_l = 0x194,
+	.ecc_sig_c_data_h = 0x198,
+	.ecc_sig_c_id = 0x19C,
+	.ecc_sig_c_synd = 0x190,
+
+	.ecc_sig_u_addr_l = 0x17C,
+	.ecc_sig_u_addr_h = 0x180,
+	.ecc_sig_u_data_l = 0x184,
+	.ecc_sig_u_data_h = 0x188,
+	.ecc_sig_u_id = 0x19C,
+	.ecc_sig_u_synd = 0x180,
+
+	/* MASK */
+	.ecc_ctl_ecc_enable_mask = GENMASK(17, 16),
+	.ecc_ctl_en_int_master_mask = GENMASK(30, 3) | GENMASK(1, 0),
+	.ecc_ctl_en_int_ecc_mask = GENMASK(8, 4),
+
+	/* ECC IRQ Macros */
+	.ecc_int_ce_event = BIT(0),
+	.ecc_int_second_ce_event = BIT(1),
+	.ecc_int_ue_event = BIT(2),
+	.ecc_int_second_ue_event = BIT(3),
+	.ecc_int_ce_ue_mask = GENMASK(3, 0),
+	.ecc_ce_intr_mask = GENMASK(1, 0),
+	.ecc_ue_intr_mask = GENMASK(3, 2),
+
+	/* ECC Signature Macros */
+	.ecc_sig_c_id_shift = 8,
+	.ecc_sig_c_synd_shift = 8,
+	.ecc_sig_c_addr_h_mask = GENMASK(1, 0),
+	.ecc_sig_c_id_mask = GENMASK(29, 16),
+	.ecc_sig_c_synd_mask = GENMASK(15, 8),
+
+	.ecc_sig_u_id_shift = 0,
+	.ecc_sig_u_synd_shift = 8,
+	.ecc_sig_u_addr_h_mask = GENMASK(1, 0),
+	.ecc_sig_u_id_mask = GENMASK(13, 0),
+	.ecc_sig_u_synd_mask = GENMASK(15, 8),
+};
+
+static const struct of_device_id npcm_edac_of_match[] = {
+	{ .compatible = "nuvoton,npcm750-memory-controller", .data = &npcm7xx_edac },
+	{ .compatible = "nuvoton,npcm845-memory-controller", .data = &npcm8xx_edac },
+	{},
+};
+
+MODULE_DEVICE_TABLE(of, npcm_edac_of_match);
+
+static int npcm_edac_mc_probe(struct platform_device *pdev)
+{
+	const struct npcm_edac_platform_data *npcm_chip;
+	struct device *dev = &pdev->dev;
+	struct edac_mc_layer layers[1];
+	const struct of_device_id *id;
+	struct priv_data *priv_data;
+	struct mem_ctl_info *mci;
+	struct resource *res;
+	void __iomem *reg;
+	int ret = -ENODEV;
+	int irq;
+	u32 ecc_en;
+
+	id = of_match_device(npcm_edac_of_match, &pdev->dev);
+
+	npcm_chip = of_device_get_match_data(&pdev->dev);
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	reg = devm_ioremap_resource(dev, res);
+	if (IS_ERR(reg)) {
+		edac_printk(KERN_ERR, NPCM_EDAC_MOD_NAME, "cdns DDR4 mc regs are not defined\n");
+		return PTR_ERR(reg);
+	}
+
+	ecc_en = readl(reg + npcm_chip->ecc_ctl_en_reg);
+
+	if ((ecc_en & npcm_chip->ecc_ctl_ecc_enable_mask) == npcm_chip->ecc_ctl_ecc_enable_mask) {
+		edac_printk(KERN_INFO, NPCM_EDAC_MOD_NAME, "ECC reporting and correcting on. ");
+	} else {
+		edac_printk(KERN_INFO, NPCM_EDAC_MOD_NAME, "ECC disabled\n");
+		return -ENXIO;
+	}
+
+	edac_printk(KERN_INFO, NPCM_EDAC_MOD_NAME, "IO mapped reg addr: %p\n", reg);
+
+	layers[0].type = EDAC_MC_LAYER_ALL_MEM;
+	layers[0].size = 1;
+
+	mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers,
+			    sizeof(struct priv_data));
+	if (!mci) {
+		edac_printk(KERN_ERR, NPCM_EDAC_MOD_NAME, "Failed memory allocation for mc instance\n");
+		return -ENOMEM;
+	}
+	mci->pdev = &pdev->dev;
+	priv_data = mci->pvt_info;
+	priv_data->reg = reg;
+	priv_data->npcm_chip = npcm_chip;
+	priv_data->ce_cnt = 0;
+	priv_data->ue_cnt = 0;
+	platform_set_drvdata(pdev, mci);
+
+	/* Initialize controller capabilities */
+	mci->mtype_cap = MEM_FLAG_DDR4;
+	mci->edac_ctl_cap = EDAC_FLAG_SECDED;
+	mci->scrub_cap = SCRUB_FLAG_HW_SRC;
+	mci->scrub_mode = SCRUB_HW_SRC;
+	mci->edac_cap = EDAC_FLAG_SECDED;
+	mci->ctl_name = id->compatible;
+	mci->dev_name = dev_name(&pdev->dev);
+	mci->mod_name = NPCM_EDAC_MOD_NAME;
+	mci->ctl_page_to_phys = NULL;
+
+	/* Interrupt feature is supported by cadence mc */
+	edac_op_state = EDAC_OPSTATE_INT;
+	if (IS_ENABLED(CONFIG_EDAC_DEBUG))
+		init_mem_layout(mci);
+
+	/* Set up Interrupt handler for ECC */
+	irq = platform_get_irq(pdev, 0);
+	if (irq < 0) {
+		edac_printk(KERN_ERR, NPCM_EDAC_MOD_NAME, "irq number not defined for ECC.\n");
+		goto err;
+	}
+	ret = devm_request_irq(dev, irq, edac_ecc_isr, 0, "cdns-edac-mc-ecc-irq", mci);
+	if (ret) {
+		edac_printk(KERN_ERR, NPCM_EDAC_MOD_NAME, "request_irq fail for NPCM_EDAC irq\n");
+		goto err;
+	}
+	ret = edac_mc_add_mc(mci);
+	if (ret) {
+		edac_printk(KERN_ERR, NPCM_EDAC_MOD_NAME, "Failed to register with EDAC core\n");
+		goto err;
+	}
+
+	if (IS_ENABLED(CONFIG_EDAC_DEBUG) &&
+	   (npcm_chip->ip_features & FORCED_ECC_ERR_EVENT_SUPPORT) &&
+	    npcm_chip->chip == NPCM8XX_CHIP) {
+		if (create_sysfs_attributes(mci))
+			edac_printk(KERN_ERR, NPCM_EDAC_MOD_NAME, "Failed to create sysfs entries\n");
+	}
+
+	/* Only enable MC interrupts with ECC - clear global int mask bit and ecc bit */
+	writel(npcm_chip->ecc_ctl_en_int_master_mask,
+	       priv_data->reg + npcm_chip->ecc_ctl_int_mask_master);
+
+	if (npcm_chip->chip == NPCM8XX_CHIP) {
+		/* clear single and multi for ce and ue */
+		writel(npcm_chip->ecc_ctl_en_int_ecc_mask,
+		       priv_data->reg + npcm_chip->ecc_ctl_int_mask_ecc);
+	}
+
+	return 0;
+
+	edac_mc_del_mc(&pdev->dev);
+
+err:
+	edac_mc_free(mci);
+	return ret;
+}
+
+static int npcm_edac_mc_remove(struct platform_device *pdev)
+{
+	struct mem_ctl_info *mci = platform_get_drvdata(pdev);
+	struct priv_data *priv = mci->pvt_info;
+	const struct npcm_edac_platform_data *npcm_chip = priv->npcm_chip;
+
+	writel(NPCM_ECC_CTL_GLOBAL_INT_DISABLE, priv->reg + npcm_chip->ecc_ctl_int_mask_master);
+
+	/* Disable ecc feature before removing driver by writing 0 */
+	writel((unsigned int)(~(npcm_chip->ecc_ctl_ecc_enable_mask)),
+	       priv->reg + npcm_chip->ecc_ctl_en_reg);
+
+	if (IS_ENABLED(CONFIG_EDAC_DEBUG))
+		remove_sysfs_attributes(mci);
+
+	edac_mc_del_mc(&pdev->dev);
+	edac_mc_free(mci);
+
+	return 0;
+}
+
+static struct platform_driver npcm_edac_mc_driver = {
+	.driver = {
+		   .name = "npcm-edac",
+		   .of_match_table = npcm_edac_of_match,
+	},
+	.probe = npcm_edac_mc_probe,
+	.remove = npcm_edac_mc_remove,
+};
+
+module_platform_driver(npcm_edac_mc_driver);
+
+MODULE_AUTHOR("Medad CChien <ctcchien@nuvoton.com>");
+MODULE_DESCRIPTION("Nuvoton NPCM EDAC Driver");
+MODULE_LICENSE("GPL v2");
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 2/3] dt-bindings: edac: nuvoton: add NPCM memory controller
  2022-05-10  3:10 ` [PATCH v9 2/3] dt-bindings: edac: nuvoton: add NPCM memory controller Medad CChien
@ 2022-05-10  6:14   ` Paul Menzel
  2022-05-16  2:30     ` Medad Young
  0 siblings, 1 reply; 18+ messages in thread
From: Paul Menzel @ 2022-05-10  6:14 UTC (permalink / raw)
  To: Medad CChien
  Cc: rric, james.morse, tony.luck, mchehab, bp, robh+dt, benjaminfair,
	yuenn, venture, KWLIU, YSCHU, JJLIU0, KFTING, avifishman70,
	tmaimon77, tali.perry1, ctcchien, devicetree, openbmc,
	linux-kernel, linux-edac

Dear Medad,


Thank you for your patch.

Am 10.05.22 um 05:10 schrieb Medad CChien:
> Document devicetree bindings for the Nuvoton BMC NPCM memory controller.
> 
> Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
> ---
>   .../edac/nuvoton,npcm-memory-controller.yaml  | 61 +++++++++++++++++++
>   1 file changed, 61 insertions(+)
>   create mode 100644 Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
> 
> diff --git a/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml b/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
> new file mode 100644
> index 000000000000..6f37211796a3
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
> @@ -0,0 +1,61 @@
> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/edac/nuvoton,npcm-memory-controller.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Nuvoton NPCM Memory Controller
> +
> +maintainers:
> +  - Medad CChien <ctcchien@nuvoton.com>

Just a side note, that in my experience functional like 
<linux-npcm-memory-controller@nuvoton.com> instead of personal addresses 
are useful, as you can configure on your side, who to deliver messages 
to. For example, if you are on sick leave or vacation, you just 
configure to deliver the message to a colleague of yours (or they get 
messages in the first place anyway).

Maybe you can bring that up at Nuvoton.

[…]


Kind regards,

Paul

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 3/3] EDAC: nuvoton: Add NPCM memory controller driver
  2022-05-10  3:10 ` [PATCH v9 3/3] EDAC: nuvoton: Add NPCM memory controller driver Medad CChien
@ 2022-05-10  7:49   ` Paul Menzel
  2022-05-16  2:35     ` Medad Young
  0 siblings, 1 reply; 18+ messages in thread
From: Paul Menzel @ 2022-05-10  7:49 UTC (permalink / raw)
  To: Medad CChien
  Cc: rric, james.morse, tony.luck, mchehab, bp, robh+dt, benjaminfair,
	yuenn, venture, KWLIU, YSCHU, JJLIU0, KFTING, avifishman70,
	tmaimon77, tali.perry1, ctcchien, devicetree, openbmc,
	linux-kernel, linux-edac

Dear Medad,


Am 10.05.22 um 05:10 schrieb Medad CChien:
> Add memory controller support for Nuvoton NPCM SoC.

It’d be great if you added the datasheet name, revision and section used 
to implement this.

> Note:
>     you can force an ecc event by writing a string to edac sysfs node
>     and remember to define CONFIG_EDAC_DEBUG to enable this feature
>     example: force a correctable event on checkcode bit 0
>     echo "CE checkcode 0" > /sys/devices/system/edac/mc/mc0/forced_ecc_error
> 
> Fix the following warnings and error:
> error:
>     error: macro "edac_printk" requires 4 arguments, but only 2 given in
>     driver/edac/npcm_edac.c
>     edac_printk(KERN_INFO, "bit_no for checkcode must be 0~7\n");
> 
> warnings:
>     performing pointer arithmetic on a null pointer has undefined behavior.
>     logical not is only applied to the left hand side of this bitwise
>     operator.
>     mixing declarations and code is a C99 extension.
> 
> Reported-by: kernel test robot <lkp@intel.com>

I find this line confusing as the kernel test robot did not report that 
the memory controller driver is missing.

> Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
> ---
>   drivers/edac/Kconfig     |  10 +
>   drivers/edac/Makefile    |   1 +
>   drivers/edac/npcm_edac.c | 680 +++++++++++++++++++++++++++++++++++++++
>   3 files changed, 691 insertions(+)
>   create mode 100644 drivers/edac/npcm_edac.c
> 
> diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig
> index 58ab63642e72..9c83202cbf65 100644
> --- a/drivers/edac/Kconfig
> +++ b/drivers/edac/Kconfig
> @@ -539,4 +539,14 @@ config EDAC_DMC520
>   	  Support for error detection and correction on the
>   	  SoCs with ARM DMC-520 DRAM controller.
>   
> +config EDAC_NPCM
> +	tristate "Nuvoton NPCM DDR Memory Controller"
> +	depends on (ARCH_NPCM || COMPILE_TEST)
> +	help
> +	  Support for error detection and correction on the Nuvoton NPCM DDR
> +	  memory controller.

Maybe add the information from the devicetree documentation:

The Nuvoton BMC SoC supports DDR4 memory with and without ECC (error
correction check).

The memory controller supports single bit error correction, double bit
error detection (in-line ECC in which a section (1/8th) of the memory
device used to store data is used for ECC storage).

> +
> +	  First, ECC must be configured in the BootBlock header. Then, this driver
> +	  will expose error counters via the EDAC kernel framework.
> +
>   endif # EDAC
> diff --git a/drivers/edac/Makefile b/drivers/edac/Makefile
> index 2d1641a27a28..db3c59d3ad84 100644
> --- a/drivers/edac/Makefile
> +++ b/drivers/edac/Makefile
> @@ -84,3 +84,4 @@ obj-$(CONFIG_EDAC_QCOM)			+= qcom_edac.o
>   obj-$(CONFIG_EDAC_ASPEED)		+= aspeed_edac.o
>   obj-$(CONFIG_EDAC_BLUEFIELD)		+= bluefield_edac.o
>   obj-$(CONFIG_EDAC_DMC520)		+= dmc520_edac.o
> +obj-$(CONFIG_EDAC_NPCM)			+= npcm_edac.o
> diff --git a/drivers/edac/npcm_edac.c b/drivers/edac/npcm_edac.c
> new file mode 100644
> index 000000000000..5552dab242b1
> --- /dev/null
> +++ b/drivers/edac/npcm_edac.c
> @@ -0,0 +1,680 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// Copyright (c) 2022 Nuvoton Technology corporation.

No dot/period is needed at the end, as corporation is not abbreviated. 
Maybe also capitalize Corporation as done on the Web site.

> +
> +#include <linux/delay.h>
> +#include <linux/of_device.h>
> +
> +#include "edac_module.h"
> +
> +#define NPCM_EDAC_MOD_NAME "npcm-edac"
> +#define FORCED_ECC_ERR_EVENT_SUPPORT		BIT(1)
> +#define EDAC_MSG_SIZE						256
> +/* Granularity of reported error in bytes */
> +#define NPCM_EDAC_ERR_GRAIN				1
> +
> +#define MEM_TYPE_DDR4						0xA
> +
> +#define NPCM7XX_CHIP						0x700
> +#define NPCM8XX_CHIP						0x800
> +
> +/* Control register width definitions */
> +#define WDTH_16								(2)
> +#define WDTH_32								(1)
> +#define WDTH_64								(0)
> +#define CTL_MEM_MAX_WIDTH_MASK			GENMASK(4, 0)
> +#define CTL_REG_WIDTH_SHIFT					(32)
> +#define XOR_CHECK_BIT_SPLIT_WIDTH			(16)
> +#define CTL_CONTROLLER_BUSY_FLAG			BIT(0)
> +#define NPCM_ECC_CTL_FORCE_WC				BIT(8)
> +#define NPCM_ECC_CTL_AUTO_WRITEBACK_EN	BIT(24)
> +#define NPCM_ECC_CTL_XOR_BITS_MASK			GENMASK(23, 16)
> +#define NPCM_ECC_CTL_MTYPE_MASK			GENMASK(11, 8)
> +#define NPCM_ECC_CTL_GLOBAL_INT_DISABLE		BIT(31)
> +
> +/* Syndrome values */
> +#define ECC_DOUBLE_MULTI_ERR_SYND			0x03
> +
> +static char data_synd[] = {
> +			0xf4, 0xf1, 0xec, 0xea, 0xe9, 0xe6, 0xe5, 0xe3,
> +			0xdc, 0xda, 0xd9, 0xd6, 0xd5, 0xd3, 0xce, 0xcb,
> +			0xb5, 0xb0, 0xad, 0xab, 0xa8, 0xa7, 0xa4, 0xa2,
> +			0x9d, 0x9b, 0x98, 0x97, 0x94, 0x92, 0x8f, 0x8a,
> +			0x75, 0x70, 0x6d, 0x6b, 0x68, 0x67, 0x64, 0x62,
> +			0x5e, 0x5b, 0x58, 0x57, 0x54, 0x52, 0x4f, 0x4a,
> +			0x34, 0x31, 0x2c, 0x2a, 0x29, 0x26, 0x25, 0x23,
> +			0x1c, 0x1a, 0x19, 0x16, 0x15, 0x13, 0x0e, 0x0b
> +		  };

This does not look correctly indented. At least the } should be at the 
beginning. The values can just be indented by one tab I believe. (At 
least that is what `indent --linux-style` does (GNU indent 2.2.12).

> +
> +static char check_synd[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};

At least `indent --linux-style` add a space after { and before }.

> +
> +struct npcm_edac_platform_data {
> +	/* force ECC event */
> +	u32 ip_features;
> +	u32 ddr_ctl_controller_busy_reg;
> +	u32 ecc_ctl_xor_check_bits_reg;
> +
> +	u32 chip;
> +
> +	/* DDR4 Controller Registers */
> +	u32 ddr_ctl_mem_type_reg;
> +	u32 ddr_ctl_mem_width_reg;
> +
> +	u32 ecc_ctl_en_reg;
> +	u32 ecc_ctl_int_mask;
> +	u32 ecc_ctl_int_status;
> +	u32 ecc_ctl_int_ack;
> +	u32 ecc_ctl_int_mask_master;
> +	u32 ecc_ctl_int_mask_ecc;
> +
> +	u32 ecc_sig_c_addr_l;
> +	u32 ecc_sig_c_addr_h;
> +	u32 ecc_sig_c_data_l;
> +	u32 ecc_sig_c_data_h;
> +	u32 ecc_sig_c_id;
> +	u32 ecc_sig_c_synd;
> +
> +	u32 ecc_sig_u_addr_l;
> +	u32 ecc_sig_u_addr_h;
> +	u32 ecc_sig_u_data_l;
> +	u32 ecc_sig_u_data_h;
> +	u32 ecc_sig_u_id;
> +	u32 ecc_sig_u_synd;
> +
> +	/* MASK */
> +	u32 ecc_ctl_ecc_enable_mask;
> +	u32 ecc_ctl_en_int_master_mask;
> +	u32 ecc_ctl_en_int_ecc_mask;
> +
> +	/* ECC IRQ Macros */
> +	u32 ecc_int_ce_event;
> +	u32 ecc_int_second_ce_event;
> +	u32 ecc_int_ue_event;
> +	u32 ecc_int_second_ue_event;
> +	u32 ecc_int_ce_ue_mask;
> +	u32 ecc_ce_intr_mask;
> +	u32 ecc_ue_intr_mask;
> +
> +	/* ECC Signature Macros */
> +	u32 ecc_sig_c_id_shift;
> +	u32 ecc_sig_c_synd_shift;
> +	u32 ecc_sig_c_addr_h_mask;
> +	u32 ecc_sig_c_id_mask;
> +	u32 ecc_sig_c_synd_mask;
> +
> +	u32 ecc_sig_u_id_shift;
> +	u32 ecc_sig_u_synd_shift;
> +	u32 ecc_sig_u_addr_h_mask;
> +	u32 ecc_sig_u_id_mask;
> +	u32 ecc_sig_u_synd_mask;
> +};
> +
> +struct priv_data {
> +	void __iomem *reg;
> +	u32 ce_cnt;
> +	u32 ue_cnt; > +	char message[EDAC_MSG_SIZE];
> +	const struct npcm_edac_platform_data *npcm_chip;
> +};
> +
> +
> +static void init_mem_layout(struct mem_ctl_info *mci)
> +{
> +	struct priv_data *priv = mci->pvt_info;
> +	const struct npcm_edac_platform_data *npcm_chip = priv->npcm_chip;
> +	struct csrow_info *csi;
> +	struct dimm_info *dimm;
> +	struct sysinfo info;
> +	enum mem_type mtype;
> +	u32 val, width;
> +	u32 size, row;
> +	u8 j;

At least for loop variables, the default size integers should be used [1].

[…]


Kind regards,

Paul


[1]: https://notabs.org/coding/smallIntsBigPenalty.htm

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 2/3] dt-bindings: edac: nuvoton: add NPCM memory controller
  2022-05-10  6:14   ` Paul Menzel
@ 2022-05-16  2:30     ` Medad Young
  2022-05-18  4:33       ` Paul Menzel
  0 siblings, 1 reply; 18+ messages in thread
From: Medad Young @ 2022-05-16  2:30 UTC (permalink / raw)
  To: Paul Menzel
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab,
	Borislav Petkov, Rob Herring, Benjamin Fair, Nancy Yuen,
	Patrick Venture, KWLIU, YSCHU, JJLIU0, KFTING, Avi Fishman,
	Tomer Maimon, Tali Perry, ctcchien, devicetree, OpenBMC Maillist,
	Linux Kernel Mailing List, linux-edac

Dear Paul,

thanks for your comment.

Paul Menzel <pmenzel@molgen.mpg.de> 於 2022年5月10日 週二 下午2:14寫道:
>
> Dear Medad,
>
>
> Thank you for your patch.
>
> Am 10.05.22 um 05:10 schrieb Medad CChien:
> > Document devicetree bindings for the Nuvoton BMC NPCM memory controller.
> >
> > Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
> > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
> > ---
> >   .../edac/nuvoton,npcm-memory-controller.yaml  | 61 +++++++++++++++++++
> >   1 file changed, 61 insertions(+)
> >   create mode 100644 Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
> >
> > diff --git a/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml b/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
> > new file mode 100644
> > index 000000000000..6f37211796a3
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
> > @@ -0,0 +1,61 @@
> > +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/edac/nuvoton,npcm-memory-controller.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Nuvoton NPCM Memory Controller
> > +
> > +maintainers:
> > +  - Medad CChien <ctcchien@nuvoton.com>
>
> Just a side note, that in my experience functional like
> <linux-npcm-memory-controller@nuvoton.com> instead of personal addresses
> are useful, as you can configure on your side, who to deliver messages
> to. For example, if you are on sick leave or vacation, you just
> configure to deliver the message to a colleague of yours (or they get
> messages in the first place anyway).
>
> Maybe you can bring that up at Nuvoton.
>

I understand, but we do not have group email  address.
so maybe I should add more maintainers?

> […]
>
>
> Kind regards,
>
> Paul

B.R.
Medad

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 3/3] EDAC: nuvoton: Add NPCM memory controller driver
  2022-05-10  7:49   ` Paul Menzel
@ 2022-05-16  2:35     ` Medad Young
  0 siblings, 0 replies; 18+ messages in thread
From: Medad Young @ 2022-05-16  2:35 UTC (permalink / raw)
  To: Paul Menzel
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab,
	Borislav Petkov, Rob Herring, Benjamin Fair, Nancy Yuen,
	Patrick Venture, KWLIU, YSCHU, JJLIU0, KFTING, Avi Fishman,
	Tomer Maimon, Tali Perry, ctcchien, devicetree, OpenBMC Maillist,
	Linux Kernel Mailing List, linux-edac

Dear Paul,

thanks for your comments.

Paul Menzel <pmenzel@molgen.mpg.de> 於 2022年5月10日 週二 下午3:49寫道:
>
> Dear Medad,
>
>
> Am 10.05.22 um 05:10 schrieb Medad CChien:
> > Add memory controller support for Nuvoton NPCM SoC.
>
> It’d be great if you added the datasheet name, revision and section used
> to implement this.
>

OK, I will add those information.

> > Note:
> >     you can force an ecc event by writing a string to edac sysfs node
> >     and remember to define CONFIG_EDAC_DEBUG to enable this feature
> >     example: force a correctable event on checkcode bit 0
> >     echo "CE checkcode 0" > /sys/devices/system/edac/mc/mc0/forced_ecc_error
> >
> > Fix the following warnings and error:
> > error:
> >     error: macro "edac_printk" requires 4 arguments, but only 2 given in
> >     driver/edac/npcm_edac.c
> >     edac_printk(KERN_INFO, "bit_no for checkcode must be 0~7\n");
> >
> > warnings:
> >     performing pointer arithmetic on a null pointer has undefined behavior.
> >     logical not is only applied to the left hand side of this bitwise
> >     operator.
> >     mixing declarations and code is a C99 extension.
> >
> > Reported-by: kernel test robot <lkp@intel.com>
>
> I find this line confusing as the kernel test robot did not report that
> the memory controller driver is missing.
>

Sorry, I did not get your point.
but I add these due to kernel test robot reported some errors and warnings.

> > Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
> > ---
> >   drivers/edac/Kconfig     |  10 +
> >   drivers/edac/Makefile    |   1 +
> >   drivers/edac/npcm_edac.c | 680 +++++++++++++++++++++++++++++++++++++++
> >   3 files changed, 691 insertions(+)
> >   create mode 100644 drivers/edac/npcm_edac.c
> >
> > diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig
> > index 58ab63642e72..9c83202cbf65 100644
> > --- a/drivers/edac/Kconfig
> > +++ b/drivers/edac/Kconfig
> > @@ -539,4 +539,14 @@ config EDAC_DMC520
> >         Support for error detection and correction on the
> >         SoCs with ARM DMC-520 DRAM controller.
> >
> > +config EDAC_NPCM
> > +     tristate "Nuvoton NPCM DDR Memory Controller"
> > +     depends on (ARCH_NPCM || COMPILE_TEST)
> > +     help
> > +       Support for error detection and correction on the Nuvoton NPCM DDR
> > +       memory controller.
>
> Maybe add the information from the devicetree documentation:
>
> The Nuvoton BMC SoC supports DDR4 memory with and without ECC (error
> correction check).
>
> The memory controller supports single bit error correction, double bit
> error detection (in-line ECC in which a section (1/8th) of the memory
> device used to store data is used for ECC storage).
>

OK, I will add that information.

> > +
> > +       First, ECC must be configured in the BootBlock header. Then, this driver
> > +       will expose error counters via the EDAC kernel framework.
> > +
> >   endif # EDAC
> > diff --git a/drivers/edac/Makefile b/drivers/edac/Makefile
> > index 2d1641a27a28..db3c59d3ad84 100644
> > --- a/drivers/edac/Makefile
> > +++ b/drivers/edac/Makefile
> > @@ -84,3 +84,4 @@ obj-$(CONFIG_EDAC_QCOM)                     += qcom_edac.o
> >   obj-$(CONFIG_EDAC_ASPEED)           += aspeed_edac.o
> >   obj-$(CONFIG_EDAC_BLUEFIELD)                += bluefield_edac.o
> >   obj-$(CONFIG_EDAC_DMC520)           += dmc520_edac.o
> > +obj-$(CONFIG_EDAC_NPCM)                      += npcm_edac.o
> > diff --git a/drivers/edac/npcm_edac.c b/drivers/edac/npcm_edac.c
> > new file mode 100644
> > index 000000000000..5552dab242b1
> > --- /dev/null
> > +++ b/drivers/edac/npcm_edac.c
> > @@ -0,0 +1,680 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +// Copyright (c) 2022 Nuvoton Technology corporation.
>
> No dot/period is needed at the end, as corporation is not abbreviated.
> Maybe also capitalize Corporation as done on the Web site.

OK

>
> > +
> > +#include <linux/delay.h>
> > +#include <linux/of_device.h>
> > +
> > +#include "edac_module.h"
> > +
> > +#define NPCM_EDAC_MOD_NAME "npcm-edac"
> > +#define FORCED_ECC_ERR_EVENT_SUPPORT         BIT(1)
> > +#define EDAC_MSG_SIZE                                                256
> > +/* Granularity of reported error in bytes */
> > +#define NPCM_EDAC_ERR_GRAIN                          1
> > +
> > +#define MEM_TYPE_DDR4                                                0xA
> > +
> > +#define NPCM7XX_CHIP                                         0x700
> > +#define NPCM8XX_CHIP                                         0x800
> > +
> > +/* Control register width definitions */
> > +#define WDTH_16                                                              (2)
> > +#define WDTH_32                                                              (1)
> > +#define WDTH_64                                                              (0)
> > +#define CTL_MEM_MAX_WIDTH_MASK                       GENMASK(4, 0)
> > +#define CTL_REG_WIDTH_SHIFT                                  (32)
> > +#define XOR_CHECK_BIT_SPLIT_WIDTH                    (16)
> > +#define CTL_CONTROLLER_BUSY_FLAG                     BIT(0)
> > +#define NPCM_ECC_CTL_FORCE_WC                                BIT(8)
> > +#define NPCM_ECC_CTL_AUTO_WRITEBACK_EN       BIT(24)
> > +#define NPCM_ECC_CTL_XOR_BITS_MASK                   GENMASK(23, 16)
> > +#define NPCM_ECC_CTL_MTYPE_MASK                      GENMASK(11, 8)
> > +#define NPCM_ECC_CTL_GLOBAL_INT_DISABLE              BIT(31)
> > +
> > +/* Syndrome values */
> > +#define ECC_DOUBLE_MULTI_ERR_SYND                    0x03
> > +
> > +static char data_synd[] = {
> > +                     0xf4, 0xf1, 0xec, 0xea, 0xe9, 0xe6, 0xe5, 0xe3,
> > +                     0xdc, 0xda, 0xd9, 0xd6, 0xd5, 0xd3, 0xce, 0xcb,
> > +                     0xb5, 0xb0, 0xad, 0xab, 0xa8, 0xa7, 0xa4, 0xa2,
> > +                     0x9d, 0x9b, 0x98, 0x97, 0x94, 0x92, 0x8f, 0x8a,
> > +                     0x75, 0x70, 0x6d, 0x6b, 0x68, 0x67, 0x64, 0x62,
> > +                     0x5e, 0x5b, 0x58, 0x57, 0x54, 0x52, 0x4f, 0x4a,
> > +                     0x34, 0x31, 0x2c, 0x2a, 0x29, 0x26, 0x25, 0x23,
> > +                     0x1c, 0x1a, 0x19, 0x16, 0x15, 0x13, 0x0e, 0x0b
> > +               };
>
> This does not look correctly indented. At least the } should be at the
> beginning. The values can just be indented by one tab I believe. (At
> least that is what `indent --linux-style` does (GNU indent 2.2.12).
>

OK

> > +
> > +static char check_synd[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
>
> At least `indent --linux-style` add a space after { and before }.
>

OK

> > +
> > +struct npcm_edac_platform_data {
> > +     /* force ECC event */
> > +     u32 ip_features;
> > +     u32 ddr_ctl_controller_busy_reg;
> > +     u32 ecc_ctl_xor_check_bits_reg;
> > +
> > +     u32 chip;
> > +
> > +     /* DDR4 Controller Registers */
> > +     u32 ddr_ctl_mem_type_reg;
> > +     u32 ddr_ctl_mem_width_reg;
> > +
> > +     u32 ecc_ctl_en_reg;
> > +     u32 ecc_ctl_int_mask;
> > +     u32 ecc_ctl_int_status;
> > +     u32 ecc_ctl_int_ack;
> > +     u32 ecc_ctl_int_mask_master;
> > +     u32 ecc_ctl_int_mask_ecc;
> > +
> > +     u32 ecc_sig_c_addr_l;
> > +     u32 ecc_sig_c_addr_h;
> > +     u32 ecc_sig_c_data_l;
> > +     u32 ecc_sig_c_data_h;
> > +     u32 ecc_sig_c_id;
> > +     u32 ecc_sig_c_synd;
> > +
> > +     u32 ecc_sig_u_addr_l;
> > +     u32 ecc_sig_u_addr_h;
> > +     u32 ecc_sig_u_data_l;
> > +     u32 ecc_sig_u_data_h;
> > +     u32 ecc_sig_u_id;
> > +     u32 ecc_sig_u_synd;
> > +
> > +     /* MASK */
> > +     u32 ecc_ctl_ecc_enable_mask;
> > +     u32 ecc_ctl_en_int_master_mask;
> > +     u32 ecc_ctl_en_int_ecc_mask;
> > +
> > +     /* ECC IRQ Macros */
> > +     u32 ecc_int_ce_event;
> > +     u32 ecc_int_second_ce_event;
> > +     u32 ecc_int_ue_event;
> > +     u32 ecc_int_second_ue_event;
> > +     u32 ecc_int_ce_ue_mask;
> > +     u32 ecc_ce_intr_mask;
> > +     u32 ecc_ue_intr_mask;
> > +
> > +     /* ECC Signature Macros */
> > +     u32 ecc_sig_c_id_shift;
> > +     u32 ecc_sig_c_synd_shift;
> > +     u32 ecc_sig_c_addr_h_mask;
> > +     u32 ecc_sig_c_id_mask;
> > +     u32 ecc_sig_c_synd_mask;
> > +
> > +     u32 ecc_sig_u_id_shift;
> > +     u32 ecc_sig_u_synd_shift;
> > +     u32 ecc_sig_u_addr_h_mask;
> > +     u32 ecc_sig_u_id_mask;
> > +     u32 ecc_sig_u_synd_mask;
> > +};
> > +
> > +struct priv_data {
> > +     void __iomem *reg;
> > +     u32 ce_cnt;
> > +     u32 ue_cnt; > + char message[EDAC_MSG_SIZE];
> > +     const struct npcm_edac_platform_data *npcm_chip;
> > +};
> > +
> > +
> > +static void init_mem_layout(struct mem_ctl_info *mci)
> > +{
> > +     struct priv_data *priv = mci->pvt_info;
> > +     const struct npcm_edac_platform_data *npcm_chip = priv->npcm_chip;
> > +     struct csrow_info *csi;
> > +     struct dimm_info *dimm;
> > +     struct sysinfo info;
> > +     enum mem_type mtype;
> > +     u32 val, width;
> > +     u32 size, row;
> > +     u8 j;
>
> At least for loop variables, the default size integers should be used [1].
>

OK

> […]
>
>
> Kind regards,
>
> Paul
>
>
> [1]: https://notabs.org/coding/smallIntsBigPenalty.htm

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 2/3] dt-bindings: edac: nuvoton: add NPCM memory controller
  2022-05-16  2:30     ` Medad Young
@ 2022-05-18  4:33       ` Paul Menzel
  2022-05-19  0:52         ` Medad Young
  0 siblings, 1 reply; 18+ messages in thread
From: Paul Menzel @ 2022-05-18  4:33 UTC (permalink / raw)
  To: Medad Young
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab,
	Borislav Petkov, Rob Herring, Benjamin Fair, Nancy Yuen,
	Patrick Venture, KWLIU, YSCHU, JJLIU0, KFTING, Avi Fishman,
	Tomer Maimon, Tali Perry, ctcchien, devicetree, OpenBMC Maillist,
	Linux Kernel Mailing List, linux-edac

Dear Medad,


Am 16.05.22 um 04:30 schrieb Medad Young:

> Paul Menzel 於 2022年5月10日 週二 下午2:14寫道:

>> Am 10.05.22 um 05:10 schrieb Medad CChien:
>>> Document devicetree bindings for the Nuvoton BMC NPCM memory controller.
>>>
>>> Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
>>> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
>>> ---
>>>    .../edac/nuvoton,npcm-memory-controller.yaml  | 61 +++++++++++++++++++
>>>    1 file changed, 61 insertions(+)
>>>    create mode 100644 Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
>>>
>>> diff --git a/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml b/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
>>> new file mode 100644
>>> index 000000000000..6f37211796a3
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
>>> @@ -0,0 +1,61 @@
>>> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
>>> +%YAML 1.2
>>> +---
>>> +$id: http://devicetree.org/schemas/edac/nuvoton,npcm-memory-controller.yaml#
>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>> +
>>> +title: Nuvoton NPCM Memory Controller
>>> +
>>> +maintainers:
>>> +  - Medad CChien <ctcchien@nuvoton.com>
>>
>> Just a side note, that in my experience functional like
>> <linux-npcm-memory-controller@nuvoton.com> instead of personal addresses
>> are useful, as you can configure on your side, who to deliver messages
>> to. For example, if you are on sick leave or vacation, you just
>> configure to deliver the message to a colleague of yours (or they get
>> messages in the first place anyway).
>>
>> Maybe you can bring that up at Nuvoton.
> 
> I understand, but we do not have group email  address.
> so maybe I should add more maintainers?

If there are actually more maintainers, responsible and knowledgeable 
for that driver, than yes, these should be added (until you get a 
function address set up).


Kind regards,

Paul

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node
  2022-05-10  3:10 ` [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node Medad CChien
@ 2022-05-18 17:44   ` Borislav Petkov
  2022-05-19  0:55     ` Medad Young
  0 siblings, 1 reply; 18+ messages in thread
From: Borislav Petkov @ 2022-05-18 17:44 UTC (permalink / raw)
  To: Medad CChien
  Cc: rric, james.morse, tony.luck, mchehab, robh+dt, benjaminfair,
	yuenn, venture, KWLIU, YSCHU, JJLIU0, KFTING, avifishman70,
	tmaimon77, tali.perry1, ctcchien, linux-edac, linux-kernel,
	devicetree, openbmc

On Tue, May 10, 2022 at 11:10:54AM +0800, Medad CChien wrote:
> ECC must be configured in the BootBlock header.
> Then, you can read error counts via the EDAC kernel framework.
> 
> Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
> ---
>  arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi b/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
> index 3696980a3da1..ba542b26941e 100644
> --- a/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
> +++ b/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
> @@ -106,6 +106,13 @@
>  		interrupt-parent = <&gic>;
>  		ranges;
>  
> +		mc: memory-controller@f0824000 {
> +			compatible = "nuvoton,npcm750-memory-controller";
> +			reg = <0x0 0xf0824000 0x0 0x1000>;
> +			interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
> +			status = "disabled";
> +		};
> +
>  		rstc: rstc@f0801000 {
>  			compatible = "nuvoton,npcm750-reset";
>  			reg = <0xf0801000 0x70>;
> -- 

Please integrate scripts/checkpatch.pl into your patch creation
workflow. Some of the warnings/errors *actually* make sense.

In this case:

WARNING: DT compatible string "nuvoton,npcm750-memory-controller" appears un-documented -- check ./Documentation/devicetree/bindings/
#35: FILE: arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi:110:
+                       compatible = "nuvoton,npcm750-memory-controller";

For that I'm guessing patch 2 needs to go first in the series.

In any case, the first two need an ACK from devicetree folks.

WARNING: From:/Signed-off-by: email address mismatch: 'From: Medad CChien <medadyoung@gmail.com>' != 'Signed-off-by: Medad CChien <ctcchien@nuvoton.com>'

For this one I wasn't sure so I had to ask: I guess it kinda makes sense
to have the From: be the same as your SOB email. I.e., make sure the
right authorship and SOB is maintained even when sending from machines
with broken email setups.

And that you can fix very easily: just add in your .git/config:

[user]
        name = Medad CChien
        email = ctcchien@nuvoton.com

and git would use that as the author and also slap a From: at the
beginning of the patch with the correct name and email address.

HTH.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 2/3] dt-bindings: edac: nuvoton: add NPCM memory controller
  2022-05-18  4:33       ` Paul Menzel
@ 2022-05-19  0:52         ` Medad Young
  0 siblings, 0 replies; 18+ messages in thread
From: Medad Young @ 2022-05-19  0:52 UTC (permalink / raw)
  To: Paul Menzel
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab,
	Borislav Petkov, Rob Herring, Benjamin Fair, Nancy Yuen,
	Patrick Venture, KWLIU, YSCHU, JJLIU0, KFTING, Avi Fishman,
	Tomer Maimon, Tali Perry, ctcchien, devicetree, OpenBMC Maillist,
	Linux Kernel Mailing List, linux-edac

Dear Paul,

Paul Menzel <pmenzel@molgen.mpg.de> 於 2022年5月18日 週三 下午12:33寫道:
>
> Dear Medad,
>
>
> Am 16.05.22 um 04:30 schrieb Medad Young:
>
> > Paul Menzel 於 2022年5月10日 週二 下午2:14寫道:
>
> >> Am 10.05.22 um 05:10 schrieb Medad CChien:
> >>> Document devicetree bindings for the Nuvoton BMC NPCM memory controller.
> >>>
> >>> Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
> >>> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
> >>> ---
> >>>    .../edac/nuvoton,npcm-memory-controller.yaml  | 61 +++++++++++++++++++
> >>>    1 file changed, 61 insertions(+)
> >>>    create mode 100644 Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
> >>>
> >>> diff --git a/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml b/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
> >>> new file mode 100644
> >>> index 000000000000..6f37211796a3
> >>> --- /dev/null
> >>> +++ b/Documentation/devicetree/bindings/edac/nuvoton,npcm-memory-controller.yaml
> >>> @@ -0,0 +1,61 @@
> >>> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> >>> +%YAML 1.2
> >>> +---
> >>> +$id: http://devicetree.org/schemas/edac/nuvoton,npcm-memory-controller.yaml#
> >>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> >>> +
> >>> +title: Nuvoton NPCM Memory Controller
> >>> +
> >>> +maintainers:
> >>> +  - Medad CChien <ctcchien@nuvoton.com>
> >>
> >> Just a side note, that in my experience functional like
> >> <linux-npcm-memory-controller@nuvoton.com> instead of personal addresses
> >> are useful, as you can configure on your side, who to deliver messages
> >> to. For example, if you are on sick leave or vacation, you just
> >> configure to deliver the message to a colleague of yours (or they get
> >> messages in the first place anyway).
> >>
> >> Maybe you can bring that up at Nuvoton.
> >
> > I understand, but we do not have group email  address.
> > so maybe I should add more maintainers?
>
> If there are actually more maintainers, responsible and knowledgeable
> for that driver, than yes, these should be added (until you get a
> function address set up).
>

OK, thanks

>
> Kind regards,
>
> Paul

B.R.
Medad

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node
  2022-05-18 17:44   ` Borislav Petkov
@ 2022-05-19  0:55     ` Medad Young
  2022-05-19  9:34       ` Borislav Petkov
  0 siblings, 1 reply; 18+ messages in thread
From: Medad Young @ 2022-05-19  0:55 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab, Rob Herring,
	Benjamin Fair, Nancy Yuen, Patrick Venture, KWLIU, YSCHU, JJLIU0,
	KFTING, Avi Fishman, Tomer Maimon, Tali Perry, ctcchien,
	linux-edac, Linux Kernel Mailing List, devicetree,
	OpenBMC Maillist

Dear Borislav,

Borislav Petkov <bp@alien8.de> 於 2022年5月19日 週四 上午1:44寫道:
>
> On Tue, May 10, 2022 at 11:10:54AM +0800, Medad CChien wrote:
> > ECC must be configured in the BootBlock header.
> > Then, you can read error counts via the EDAC kernel framework.
> >
> > Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
> > ---
> >  arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi b/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
> > index 3696980a3da1..ba542b26941e 100644
> > --- a/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
> > +++ b/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
> > @@ -106,6 +106,13 @@
> >               interrupt-parent = <&gic>;
> >               ranges;
> >
> > +             mc: memory-controller@f0824000 {
> > +                     compatible = "nuvoton,npcm750-memory-controller";
> > +                     reg = <0x0 0xf0824000 0x0 0x1000>;
> > +                     interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
> > +                     status = "disabled";
> > +             };
> > +
> >               rstc: rstc@f0801000 {
> >                       compatible = "nuvoton,npcm750-reset";
> >                       reg = <0xf0801000 0x70>;
> > --
>
> Please integrate scripts/checkpatch.pl into your patch creation
> workflow. Some of the warnings/errors *actually* make sense.
>
> In this case:
>
> WARNING: DT compatible string "nuvoton,npcm750-memory-controller" appears un-documented -- check ./Documentation/devicetree/bindings/
> #35: FILE: arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi:110:
> +                       compatible = "nuvoton,npcm750-memory-controller";
>
> For that I'm guessing patch 2 needs to go first in the series.
>
> In any case, the first two need an ACK from devicetree folks.
>
> WARNING: From:/Signed-off-by: email address mismatch: 'From: Medad CChien <medadyoung@gmail.com>' != 'Signed-off-by: Medad CChien <ctcchien@nuvoton.com>'
>
> For this one I wasn't sure so I had to ask: I guess it kinda makes sense
> to have the From: be the same as your SOB email. I.e., make sure the
> right authorship and SOB is maintained even when sending from machines
> with broken email setups.
>
> And that you can fix very easily: just add in your .git/config:
>
> [user]
>         name = Medad CChien
>         email = ctcchien@nuvoton.com
>
> and git would use that as the author and also slap a From: at the
> beginning of the patch with the correct name and email address.
>

OK, I got it.

> HTH.
>
> --
> Regards/Gruss,
>     Boris.
>
> https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node
  2022-05-19  0:55     ` Medad Young
@ 2022-05-19  9:34       ` Borislav Petkov
  2022-05-20  2:31         ` Medad Young
  0 siblings, 1 reply; 18+ messages in thread
From: Borislav Petkov @ 2022-05-19  9:34 UTC (permalink / raw)
  To: Medad Young
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab, Rob Herring,
	Benjamin Fair, Nancy Yuen, Patrick Venture, KWLIU, YSCHU, JJLIU0,
	KFTING, Avi Fishman, Tomer Maimon, Tali Perry, ctcchien,
	linux-edac, Linux Kernel Mailing List, devicetree,
	OpenBMC Maillist

On Thu, May 19, 2022 at 08:55:53AM +0800, Medad Young wrote:
> OK, I got it.

Are you sure you did get it?

$ ./scripts/checkpatch.pl /tmp/medad-v10-1-3.patch
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#29: 
new file mode 100644

WARNING: From:/Signed-off-by: email address mismatch: 'From: Medad CChien <medadyoung@gmail.com>' != 'Signed-off-by: Medad CChien <ctcchien@nuvoton.com>'

total: 0 errors, 2 warnings, 62 lines checked

Before sending, you should really run checkpatch on your patches.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node
  2022-05-19  9:34       ` Borislav Petkov
@ 2022-05-20  2:31         ` Medad Young
  2022-05-20 12:09           ` Borislav Petkov
  0 siblings, 1 reply; 18+ messages in thread
From: Medad Young @ 2022-05-20  2:31 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab, Rob Herring,
	Benjamin Fair, Nancy Yuen, Patrick Venture, KWLIU, YSCHU, JJLIU0,
	KFTING, Avi Fishman, Tomer Maimon, Tali Perry, ctcchien,
	linux-edac, Linux Kernel Mailing List, devicetree,
	OpenBMC Maillist

Dear Borislav,

Borislav Petkov <bp@alien8.de> 於 2022年5月19日 週四 下午5:34寫道:
>
> On Thu, May 19, 2022 at 08:55:53AM +0800, Medad Young wrote:
> > OK, I got it.
>
> Are you sure you did get it?
>

for the second warning, I did upadate my .git/config according to your advise.
but I thought I met orthe problem, I will try to fix it

for the first warning, did I really need to fix it?

> $ ./scripts/checkpatch.pl /tmp/medad-v10-1-3.patch
> WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
> #29:
> new file mode 100644
>
> WARNING: From:/Signed-off-by: email address mismatch: 'From: Medad CChien <medadyoung@gmail.com>' != 'Signed-off-by: Medad CChien <ctcchien@nuvoton.com>'
>
> total: 0 errors, 2 warnings, 62 lines checked
>
> Before sending, you should really run checkpatch on your patches.
>
> --
> Regards/Gruss,
>     Boris.
>
> https://people.kernel.org/tglx/notes-about-netiquette

thanks
B.R.
Medad

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node
  2022-05-20  2:31         ` Medad Young
@ 2022-05-20 12:09           ` Borislav Petkov
  2022-05-23  9:06             ` Medad Young
  0 siblings, 1 reply; 18+ messages in thread
From: Borislav Petkov @ 2022-05-20 12:09 UTC (permalink / raw)
  To: Medad Young
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab, Rob Herring,
	Benjamin Fair, Nancy Yuen, Patrick Venture, KWLIU, YSCHU, JJLIU0,
	KFTING, Avi Fishman, Tomer Maimon, Tali Perry, ctcchien,
	linux-edac, Linux Kernel Mailing List, devicetree,
	OpenBMC Maillist

On Fri, May 20, 2022 at 10:31:05AM +0800, Medad Young wrote:
> for the second warning, I did upadate my .git/config according to your
> advise. but I thought I met orthe problem, I will try to fix it

You need to do "git commit --amend" on the patch so that it updates the
author.

> for the first warning, did I really need to fix it?

Yes, you need to fix both.

Again, before you send, run checkpatch on your patches, one by one.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node
  2022-05-20 12:09           ` Borislav Petkov
@ 2022-05-23  9:06             ` Medad Young
  2022-05-23  9:34               ` Borislav Petkov
  0 siblings, 1 reply; 18+ messages in thread
From: Medad Young @ 2022-05-23  9:06 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab, Rob Herring,
	Benjamin Fair, Nancy Yuen, Patrick Venture, KWLIU, YSCHU, JJLIU0,
	KFTING, Avi Fishman, Tomer Maimon, Tali Perry, ctcchien,
	linux-edac, Linux Kernel Mailing List, devicetree,
	OpenBMC Maillist

Dear Borislav,

thanks for your comments.

Borislav Petkov <bp@alien8.de> 於 2022年5月20日 週五 下午8:09寫道:
>
> On Fri, May 20, 2022 at 10:31:05AM +0800, Medad Young wrote:
> > for the second warning, I did upadate my .git/config according to your
> > advise. but I thought I met orthe problem, I will try to fix it
>
> You need to do "git commit --amend" on the patch so that it updates the
> author.

I did do "git commit --amend",
I beleve the issue is about the mail server I used,
I use gmail to send the mail due to the mail server of my company
does't support smtp
so now I should sign the commit with my gmail account.

>
> > for the first warning, did I really need to fix it?
>
> Yes, you need to fix both.
>
> Again, before you send, run checkpatch on your patches, one by one.

OK

>
> --
> Regards/Gruss,
>     Boris.
>
> https://people.kernel.org/tglx/notes-about-netiquette

B.R.
Medad

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node
  2022-05-23  9:06             ` Medad Young
@ 2022-05-23  9:34               ` Borislav Petkov
  2022-05-24  1:15                 ` Medad Young
  0 siblings, 1 reply; 18+ messages in thread
From: Borislav Petkov @ 2022-05-23  9:34 UTC (permalink / raw)
  To: Medad Young
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab, Rob Herring,
	Benjamin Fair, Nancy Yuen, Patrick Venture, KWLIU, YSCHU, JJLIU0,
	KFTING, Avi Fishman, Tomer Maimon, Tali Perry, ctcchien,
	linux-edac, Linux Kernel Mailing List, devicetree,
	OpenBMC Maillist

On Mon, May 23, 2022 at 05:06:07PM +0800, Medad Young wrote:
> I did do "git commit --amend",
> I beleve the issue is about the mail server I used,
> I use gmail to send the mail due to the mail server of my company
> does't support smtp
> so now I should sign the commit with my gmail account.

No, you should supply --author too - I had forgotten about that.

commit 0876b99e4aa2bf7113070c9c0f5d0ade7ad91697 (HEAD -> refs/heads/test)
Author: Medad CChien <medadyoung@gmail.com>
Date:   Tue May 10 11:10:54 2022 +0800

    ARM: dts: nuvoton: Add memory controller node
    
    ECC must be configured in the BootBlock header.
    Then, you can read error counts via the EDAC kernel framework.
    
    Signed-off-by: Medad CChien <ctcchien@nuvoton.com>

$  git commit --amend --author="Medad CChien <ctcchien@nuvoton.com>"
[test 5d6cd85171d1] ARM: dts: nuvoton: Add memory controller node
 Author: Medad CChien <ctcchien@nuvoton.com>
 Date: Tue May 10 11:10:54 2022 +0800
 1 file changed, 7 insertions(+)
$ git log -p -1
commit 5d6cd85171d14e67840e672e2f96a16981243424 (HEAD -> refs/heads/test)
Author: Medad CChien <ctcchien@nuvoton.com>
Date:   Tue May 10 11:10:54 2022 +0800

    ARM: dts: nuvoton: Add memory controller node
    
    ECC must be configured in the BootBlock header.
    Then, you can read error counts via the EDAC kernel framework.
    
    Signed-off-by: Medad CChien <ctcchien@nuvoton.com>

$ git format-patch -1 -o /tmp/
/tmp/0001-ARM-dts-nuvoton-Add-memory-controller-node.patch

$ head /tmp/0001-ARM-dts-nuvoton-Add-memory-controller-node.patch
From 5d6cd85171d14e67840e672e2f96a16981243424 Mon Sep 17 00:00:00 2001
From: Medad CChien <ctcchien@nuvoton.com>
		    ^^^^^^^^^^^^^^^^^^^^^^


Don't hesitate to look at the manpages if a tool doesn't do what you
expect it to do.

HTH.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node
  2022-05-23  9:34               ` Borislav Petkov
@ 2022-05-24  1:15                 ` Medad Young
  0 siblings, 0 replies; 18+ messages in thread
From: Medad Young @ 2022-05-24  1:15 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: rric, James Morse, tony.luck, Mauro Carvalho Chehab, Rob Herring,
	Benjamin Fair, Nancy Yuen, Patrick Venture, KWLIU, YSCHU, JJLIU0,
	KFTING, Avi Fishman, Tomer Maimon, Tali Perry, ctcchien,
	linux-edac, Linux Kernel Mailing List, devicetree,
	OpenBMC Maillist

Dear Borislav,

thanks for your help.

Borislav Petkov <bp@alien8.de> 於 2022年5月23日 週一 下午5:34寫道:
>
> On Mon, May 23, 2022 at 05:06:07PM +0800, Medad Young wrote:
> > I did do "git commit --amend",
> > I beleve the issue is about the mail server I used,
> > I use gmail to send the mail due to the mail server of my company
> > does't support smtp
> > so now I should sign the commit with my gmail account.
>
> No, you should supply --author too - I had forgotten about that.
>
> commit 0876b99e4aa2bf7113070c9c0f5d0ade7ad91697 (HEAD -> refs/heads/test)
> Author: Medad CChien <medadyoung@gmail.com>
> Date:   Tue May 10 11:10:54 2022 +0800
>
>     ARM: dts: nuvoton: Add memory controller node
>
>     ECC must be configured in the BootBlock header.
>     Then, you can read error counts via the EDAC kernel framework.
>
>     Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
>
> $  git commit --amend --author="Medad CChien <ctcchien@nuvoton.com>"
> [test 5d6cd85171d1] ARM: dts: nuvoton: Add memory controller node
>  Author: Medad CChien <ctcchien@nuvoton.com>
>  Date: Tue May 10 11:10:54 2022 +0800
>  1 file changed, 7 insertions(+)
> $ git log -p -1
> commit 5d6cd85171d14e67840e672e2f96a16981243424 (HEAD -> refs/heads/test)
> Author: Medad CChien <ctcchien@nuvoton.com>
> Date:   Tue May 10 11:10:54 2022 +0800
>
>     ARM: dts: nuvoton: Add memory controller node
>
>     ECC must be configured in the BootBlock header.
>     Then, you can read error counts via the EDAC kernel framework.
>
>     Signed-off-by: Medad CChien <ctcchien@nuvoton.com>
>
> $ git format-patch -1 -o /tmp/
> /tmp/0001-ARM-dts-nuvoton-Add-memory-controller-node.patch
>
> $ head /tmp/0001-ARM-dts-nuvoton-Add-memory-controller-node.patch
> From 5d6cd85171d14e67840e672e2f96a16981243424 Mon Sep 17 00:00:00 2001
> From: Medad CChien <ctcchien@nuvoton.com>
>                     ^^^^^^^^^^^^^^^^^^^^^^
>
>
> Don't hesitate to look at the manpages if a tool doesn't do what you
> expect it to do.

OK, I will try to supply --author with my original mail server

>
> HTH.
>
> --
> Regards/Gruss,
>     Boris.
>
> https://people.kernel.org/tglx/notes-about-netiquette

B.R.
Medad

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2022-05-24  1:16 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-10  3:10 [PATCH v9 0/3] EDAC: nuvoton: Add nuvoton NPCM memory controller driver Medad CChien
2022-05-10  3:10 ` [PATCH v9 1/3] ARM: dts: nuvoton: Add memory controller node Medad CChien
2022-05-18 17:44   ` Borislav Petkov
2022-05-19  0:55     ` Medad Young
2022-05-19  9:34       ` Borislav Petkov
2022-05-20  2:31         ` Medad Young
2022-05-20 12:09           ` Borislav Petkov
2022-05-23  9:06             ` Medad Young
2022-05-23  9:34               ` Borislav Petkov
2022-05-24  1:15                 ` Medad Young
2022-05-10  3:10 ` [PATCH v9 2/3] dt-bindings: edac: nuvoton: add NPCM memory controller Medad CChien
2022-05-10  6:14   ` Paul Menzel
2022-05-16  2:30     ` Medad Young
2022-05-18  4:33       ` Paul Menzel
2022-05-19  0:52         ` Medad Young
2022-05-10  3:10 ` [PATCH v9 3/3] EDAC: nuvoton: Add NPCM memory controller driver Medad CChien
2022-05-10  7:49   ` Paul Menzel
2022-05-16  2:35     ` Medad Young

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).