Skip to contentSkip to conversation

edac: xgene: Add missing SoC register bus error handling and fix CE promotes to UE

PATCH Superseded Loc Ho 3 participants 7 messages Jan 20, 2016

Subsystems (4)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore

Loc Ho

author
#0 lore raw

v2 cover edac: xgene: Add missing SoC register bus error handling and fix CE promotes to UE

Add missing register bus error handling for SoC and fix an checking condition for CE error promotes to UE. DT binding and documentation are also updated.

v2:
* Make the register bus resource optional
* Update DT binding accordinlgy

---
Loc Ho (3):
Documentation: Update the APM X-Gene SoC EDAC DTS binding for missing
RB
edac: xgene: Add missing SoC register bus error handling and fix CE
promotes to UE
arm64: Update the APM X-Gene EDAC node with the RB register resource

 .../devicetree/bindings/edac/apm-xgene-edac.txt    |   12 ++++
 arch/arm64/boot/dts/apm/apm-storm.dtsi             |    6 ++
 drivers/edac/xgene_edac.c                          |   70 +++++++++++++++++++-
 3 files changed, 87 insertions(+), 1 deletions(-)
author
#1 lore raw

PATCH v2 1/3 Documentation: Update the APM X-Gene SoC EDAC DTS binding for missing RB

This patch updates the APM X-Gene SoC EDAC documentation binding to reference the missing register bus for the the SoC EDAC.

---
 .../devicetree/bindings/edac/apm-xgene-edac.txt    |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)
Documentation/devicetree/bindings/edac/apm-xgene-edac.txt +12 -0
index 78e2a31..17b29af 100644
@@ -20,6 +20,12 @@ Required properties:
 - interrupts            : Interrupt-specifier for MCU, PMD, L3, or SoC error
 			  IRQ(s).
 
+Optional property:
+- regmap-rb		: Regmap of the register bus resource. This properity
+			  is optional only for compatibility. If the RB
+			  erorr conditions are not cleared, it will
+			  continuously generates interrupt.
+
 Required properties for memory controller subnode:
 - compatible		: Shall be "apm,xgene-edac-mc".
 - reg			: First resource shall be the memory controller unit
@@ -64,6 +70,11 @@ Example:
 		reg = <0x0 0x1054a000 0x0 0x20>;
 	};
 
+	rb: rb at 7e000000 {
+		compatible = "apm,xgene-rb", "syscon";
+		reg = <0x0 0x7e000000 0x0 0x10>;
+	};
+
 	edac at 78800000 {
 		compatible = "apm,xgene-edac";
 		#address-cells = <2>;
@@ -73,6 +84,7 @@ Example:
 		regmap-mcba = <&mcba>;
 		regmap-mcbb = <&mcbb>;
 		regmap-efuse = <&efuse>;
+		regmap-rb = <&rb>;
 		reg = <0x0 0x78800000 0x0 0x100>;
 		interrupts = <0x0 0x20 0x4>,
 			     <0x0 0x21 0x4>,
Signature · 1 line
1.7.1
maintainer
#2 lore raw

PATCH v2 1/3 Documentation: Update the APM X-Gene SoC EDAC DTS binding for missing RB

Quoted 13 lines · Loc Ho

This patch updates the APM X-Gene SoC EDAC documentation binding to reference the missing register bus for the the SoC EDAC.

---
 .../devicetree/bindings/edac/apm-xgene-edac.txt    |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)
Documentation/devicetree/bindings/edac/apm-xgene-edac.txt +0 -0
index 78e2a31..17b29af 100644

Documentation/devicetree/bindings/edac/apm-xgene-edac.txt Required properties: · line 24

Quoted 5 lines
Documentation/devicetree/bindings/edac/apm-xgene-edac.txt +2 -0
@@ -20,6 +20,12 @@ Required properties:
 - interrupts            : Interrupt-specifier for MCU, PMD, L3, or SoC error
 			  IRQ(s).
 
+Optional property:
+- regmap-rb		: Regmap of the register bus resource. This properity

s/properity/property/

Documentation/devicetree/bindings/edac/apm-xgene-edac.txt Required properties: · line 27

Quoted 3 lines
Documentation/devicetree/bindings/edac/apm-xgene-edac.txt +3 -0
+			  is optional only for compatibility. If the RB
+			  erorr conditions are not cleared, it will
+			  continuously generates interrupt.

s/generates/generate/

Given this is pretty much required. I think I would move this back to required in the documentation, but keep the driver to allow it to be missing.

Rob

maintainer
#3 lore raw

PATCH v2 1/3 Documentation: Update the APM X-Gene SoC EDAC DTS binding for missing RB

In reply to Loc Ho
Quoted 16 lines · Loc Ho

This patch updates the APM X-Gene SoC EDAC documentation binding to reference the missing register bus for the the SoC EDAC.

---

  .../devicetree/bindings/edac/apm-xgene-edac.txt    |   12 ++++++++++++
  1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/Documentation/devicetree/bindings/edac/apm-xgene-edac.txt b/Documentation/devicetree/bindings/edac/apm-xgene-edac.txt index 78e2a31..17b29af 100644
--- a/Documentation/devicetree/bindings/edac/apm-xgene-edac.txt
+++ b/Documentation/devicetree/bindings/edac/apm-xgene-edac.txt
@@ -20,6 +20,12 @@ Required properties:
- interrupts : Interrupt-specifier for MCU, PMD, L3, or SoC error
IRQ(s).

Quoted 4 lines

+Optional property:

 +- regmap-rb		: Regmap of the register bus resource. This properity
 +			  is optional only for compatibility. If the RB
 +			  erorr conditions are not cleared, it will

s/erorr/error/

Please integrate a spellchecker into your patch creation workflow.

Thanks.

Signature · 4 lines
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.
author
#4 lore raw

PATCH v2 1/3 Documentation: Update the APM X-Gene SoC EDAC DTS binding for missing RB

Hi,

Quoted 17 lines · Borislav Petkov
Quoted 16 lines · Loc Ho

This patch updates the APM X-Gene SoC EDAC documentation binding to reference the missing register bus for the the SoC EDAC.

---

  .../devicetree/bindings/edac/apm-xgene-edac.txt    |   12 ++++++++++++
  1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/Documentation/devicetree/bindings/edac/apm-xgene-edac.txt b/Documentation/devicetree/bindings/edac/apm-xgene-edac.txt index 78e2a31..17b29af 100644
--- a/Documentation/devicetree/bindings/edac/apm-xgene-edac.txt
+++ b/Documentation/devicetree/bindings/edac/apm-xgene-edac.txt
@@ -20,6 +20,12 @@ Required properties:
- interrupts : Interrupt-specifier for MCU, PMD, L3, or SoC error

                        IRQ(s).
Quoted 8 lines
Quoted 4 lines

+Optional property:

 +- regmap-rb         : Regmap of the register bus resource. This properity
 +                      is optional only for compatibility. If the RB
 +                      erorr conditions are not cleared, it will

s/erorr/error/

Please integrate a spellchecker into your patch creation workflow.

I will integrate aspell into the patch creation workflow and shoot for an update version sometime this Friday.

-Loc

author
#5 lore raw

PATCH v2 2/3 edac: xgene: Add missing SoC register bus error handling and fix CE promotes to UE

In reply to Loc Ho

Add missing register bus error handling for APM X-Gene EDAC SoC and fix an checking condition for CE error promotes to UE.

---
 drivers/edac/xgene_edac.c |   70 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 69 insertions(+), 1 deletions(-)
drivers/edac/xgene_edac.c +69 -1
index 41f8764..07b676b 100644
@@ -61,6 +61,7 @@ struct xgene_edac {
 	struct regmap		*mcba_map;
 	struct regmap		*mcbb_map;
 	struct regmap		*efuse_map;
+	struct regmap		*rb_map;
 	void __iomem		*pcp_csr;
 	spinlock_t		lock;
 	struct dentry           *dfs;
@@ -1057,7 +1058,7 @@ static bool xgene_edac_l3_promote_to_uc_err(u32 l3cesr, u32 l3celr)
 		case 0x041:
 			return true;
 		}
-	} else if (L3C_ELR_ERRSYN(l3celr) == 9)
+	} else if (L3C_ELR_ERRWAY(l3celr) == 9)
 		return true;
 
 	return false;
@@ -1353,6 +1354,17 @@ static int xgene_edac_l3_remove(struct xgene_edac_dev_ctx *l3)
 #define GLBL_MDED_ERRH			0x0848
 #define GLBL_MDED_ERRHMASK		0x084c
 
+/* IO Bus Registers */
+#define RBCSR				0x0000
+#define STICKYERR_MASK			BIT(0)
+#define RBEIR				0x0008
+#define AGENT_OFFLINE_ERR_MASK		BIT(30)
+#define UNIMPL_RBPAGE_ERR_MASK		BIT(29)
+#define WORD_ALIGNED_ERR_MASK		BIT(28)
+#define PAGE_ACCESS_ERR_MASK		BIT(27)
+#define WRITE_ACCESS_MASK		BIT(26)
+#define RBERRADDR_RD(src)		((src) & 0x03FFFFFF)
+
 static const char * const soc_mem_err_v1[] = {
 	"10GbE0",
 	"10GbE1",
@@ -1470,6 +1482,51 @@ static void xgene_edac_rb_report(struct edac_device_ctl_info *edac_dev)
 	u32 err_addr_hi;
 	u32 reg;
 
+	/* If the register bus resource isn't available, just skip it */
+	if (!ctx->edac->rb_map)
+		goto rb_skip;
+
+	/*
+	 * Check RB access errors
+	 * 1. Out of range
+	 * 2. Un-implemented page
+	 * 3. Un-aligned access
+	 * 4. Offline slave IP
+	 */
+	if (regmap_read(ctx->edac->rb_map, RBCSR, &reg))
+		return;
+	if (reg & STICKYERR_MASK) {
+		bool write;
+		u32 address;
+
+		dev_err(edac_dev->dev, "IOB bus access error(s)\n");
+		if (regmap_read(ctx->edac->rb_map, RBEIR, &reg))
+			return;
+		write = reg & WRITE_ACCESS_MASK ? 1 : 0;
+		address = RBERRADDR_RD(reg);
+		if (reg & AGENT_OFFLINE_ERR_MASK)
+			dev_err(edac_dev->dev,
+				"IOB bus %s access to offline agent error\n",
+				write ? "write" : "read");
+		if (reg & UNIMPL_RBPAGE_ERR_MASK)
+			dev_err(edac_dev->dev,
+				"IOB bus %s access to unimplemented page error\n",
+				write ? "write" : "read");
+		if (reg & WORD_ALIGNED_ERR_MASK)
+			dev_err(edac_dev->dev,
+				"IOB bus %s word aligned access error\n",
+				write ? "write" : "read");
+		if (reg & PAGE_ACCESS_ERR_MASK)
+			dev_err(edac_dev->dev,
+				"IOB bus %s to page out of range access error\n",
+				write ? "write" : "read");
+		if (regmap_write(ctx->edac->rb_map, RBEIR, 0))
+			return;
+		if (regmap_write(ctx->edac->rb_map, RBCSR, 0))
+			return;
+	}
+rb_skip:
+
 	/* IOB Bridge agent transaction error interrupt */
 	reg = readl(ctx->dev_csr + IOBBATRANSERRINTSTS);
 	if (!reg)
@@ -1852,6 +1909,17 @@ static int xgene_edac_probe(struct platform_device *pdev)
 		goto out_err;
 	}
 
+	/*
+	 * NOTE: The register bus resources is optional for compatibiity
+	 * reason.
+	 */
+	edac->rb_map = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
+						       "regmap-rb");
+	if (IS_ERR(edac->rb_map)) {
+		dev_warn(edac->dev, "missing syscon regmap rb\n");
+		edac->rb_map = NULL;
+	}
+
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	edac->pcp_csr = devm_ioremap_resource(&pdev->dev, res);
 	if (IS_ERR(edac->pcp_csr)) {
Signature · 1 line
1.7.1
author
#6 lore raw

PATCH v2 3/3 arm64: Update the APM X-Gene EDAC node with the RB register resource

In reply to Loc Ho

Add the RB register resource as requires with the updated driver.

---
 arch/arm64/boot/dts/apm/apm-storm.dtsi |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)
arch/arm64/boot/dts/apm/apm-storm.dtsi +6 -0
index fe30f76..3e40bd4 100644
@@ -493,6 +493,11 @@
 			reg = <0x0 0x1054a000 0x0 0x20>;
 		};
 
+		rb: rb at 7e000000 {
+			compatible = "apm,xgene-rb", "syscon";
+			reg = <0x0 0x7e000000 0x0 0x10>;
+		};
+
 		edac at 78800000 {
 			compatible = "apm,xgene-edac";
 			#address-cells = <2>;
@@ -502,6 +507,7 @@
 			regmap-mcba = <&mcba>;
 			regmap-mcbb = <&mcbb>;
 			regmap-efuse = <&efuse>;
+			regmap-rb = <&rb>;
 			reg = <0x0 0x78800000 0x0 0x100>;
 			interrupts = <0x0 0x20 0x4>,
 				     <0x0 0x21 0x4>,
Signature · 1 line
1.7.1