All of lore.kernel.org
 help / color / mirror / Atom feed
From: opendmb@gmail.com (Doug Berger)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 8/9] bus: brcmstb_gisb: add ARM64 SError support
Date: Fri, 24 Mar 2017 07:46:31 -0700	[thread overview]
Message-ID: <20170324144632.5896-9-opendmb@gmail.com> (raw)
In-Reply-To: <20170324144632.5896-1-opendmb@gmail.com>

Asynchronous external aborts (e.g. for buffered writes) trigger SError
aborts on the arm64 architecture.  This commit hooks the SError abort
handling to check for GISB arbitration errors.

Signed-off-by: Doug Berger <opendmb@gmail.com>
---
 drivers/bus/brcmstb_gisb.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/bus/brcmstb_gisb.c b/drivers/bus/brcmstb_gisb.c
index bf26b4017a2c..52b5d96081eb 100644
--- a/drivers/bus/brcmstb_gisb.c
+++ b/drivers/bus/brcmstb_gisb.c
@@ -252,6 +252,28 @@ static int brcmstb_bus_error_handler(unsigned long addr, unsigned int fsr,
 	/* Always report unhandled exception */
 	return 1;
 }
+
+#ifdef CONFIG_ARM64
+static int (*serror_chain)(unsigned long addr, unsigned int esr,
+				struct pt_regs *regs);
+static int do_brahma_b53_serror(unsigned long addr, unsigned int esr,
+				struct pt_regs *regs)
+{
+	struct brcmstb_gisb_arb_device *gdev;
+
+	if (((esr & (3 << 22)) == 0) && ((esr & 3) == 2)) {
+		/* iterate over each GISB arb registered handlers */
+		list_for_each_entry(gdev, &brcmstb_gisb_arb_device_list, next)
+			brcmstb_gisb_arb_decode_addr(gdev, "bus error");
+	}
+
+	if (serror_chain)
+		return serror_chain(addr, esr, regs);
+
+	/* Always report unhandled exception */
+	return 1;
+}
+#endif
 #endif /* CONFIG_ARM || CONFIG_ARM64 */
 
 #ifdef CONFIG_MIPS
@@ -403,6 +425,8 @@ static int __init brcmstb_gisb_arb_probe(struct platform_device *pdev)
 #ifdef CONFIG_ARM64
 	hook_fault_code(16, brcmstb_bus_error_handler, SIGBUS, 0,
 			"synchronous external abort");
+	if (list_is_singular(&brcmstb_gisb_arb_device_list))
+		serror_chain = hook_serror_handler(do_brahma_b53_serror);
 #endif
 #ifdef CONFIG_MIPS
 	board_be_handler = brcmstb_bus_error_handler;
-- 
2.12.0

WARNING: multiple messages have this Message-ID (diff)
From: Doug Berger <opendmb@gmail.com>
To: catalin.marinas@arm.com
Cc: robh+dt@kernel.org, mark.rutland@arm.com, will.deacon@arm.com,
	computersforpeace@gmail.com, gregory.0xf0@gmail.com,
	f.fainelli@gmail.com, bcm-kernel-feedback-list@broadcom.com,
	wangkefeng.wang@huawei.com, james.morse@arm.com,
	vladimir.murzin@arm.com, panand@redhat.com,
	andre.przywara@arm.com, cmetcalf@mellanox.com, mingo@kernel.org,
	sandeepa.s.prabhu@gmail.com, shijie.huang@arm.com,
	linus.walleij@linaro.org, treding@nvidia.com,
	jonathanh@nvidia.com, olof@lixom.net, mirza.krak@gmail.com,
	suzuki.poulose@arm.com, bgolaszewski@baylibre.com,
	horms+renesas@verge.net.au, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, opendmb@gmail.com
Subject: [PATCH 8/9] bus: brcmstb_gisb: add ARM64 SError support
Date: Fri, 24 Mar 2017 07:46:31 -0700	[thread overview]
Message-ID: <20170324144632.5896-9-opendmb@gmail.com> (raw)
In-Reply-To: <20170324144632.5896-1-opendmb@gmail.com>

Asynchronous external aborts (e.g. for buffered writes) trigger SError
aborts on the arm64 architecture.  This commit hooks the SError abort
handling to check for GISB arbitration errors.

Signed-off-by: Doug Berger <opendmb@gmail.com>
---
 drivers/bus/brcmstb_gisb.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/bus/brcmstb_gisb.c b/drivers/bus/brcmstb_gisb.c
index bf26b4017a2c..52b5d96081eb 100644
--- a/drivers/bus/brcmstb_gisb.c
+++ b/drivers/bus/brcmstb_gisb.c
@@ -252,6 +252,28 @@ static int brcmstb_bus_error_handler(unsigned long addr, unsigned int fsr,
 	/* Always report unhandled exception */
 	return 1;
 }
+
+#ifdef CONFIG_ARM64
+static int (*serror_chain)(unsigned long addr, unsigned int esr,
+				struct pt_regs *regs);
+static int do_brahma_b53_serror(unsigned long addr, unsigned int esr,
+				struct pt_regs *regs)
+{
+	struct brcmstb_gisb_arb_device *gdev;
+
+	if (((esr & (3 << 22)) == 0) && ((esr & 3) == 2)) {
+		/* iterate over each GISB arb registered handlers */
+		list_for_each_entry(gdev, &brcmstb_gisb_arb_device_list, next)
+			brcmstb_gisb_arb_decode_addr(gdev, "bus error");
+	}
+
+	if (serror_chain)
+		return serror_chain(addr, esr, regs);
+
+	/* Always report unhandled exception */
+	return 1;
+}
+#endif
 #endif /* CONFIG_ARM || CONFIG_ARM64 */
 
 #ifdef CONFIG_MIPS
@@ -403,6 +425,8 @@ static int __init brcmstb_gisb_arb_probe(struct platform_device *pdev)
 #ifdef CONFIG_ARM64
 	hook_fault_code(16, brcmstb_bus_error_handler, SIGBUS, 0,
 			"synchronous external abort");
+	if (list_is_singular(&brcmstb_gisb_arb_device_list))
+		serror_chain = hook_serror_handler(do_brahma_b53_serror);
 #endif
 #ifdef CONFIG_MIPS
 	board_be_handler = brcmstb_bus_error_handler;
-- 
2.12.0

  parent reply	other threads:[~2017-03-24 14:46 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-24 14:46 [PATCH 0/9] bus: brcmstb_gisb: add support for GISBv7 arbiter Doug Berger
2017-03-24 14:46 ` Doug Berger
2017-03-24 14:46 ` Doug Berger
2017-03-24 14:46 ` [PATCH 1/9] arm64: mm: Allow installation of memory abort handlers Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-24 14:46 ` [PATCH 2/9] arm64: mm: mark fault_info __ro_after_init Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-24 14:46 ` [PATCH 3/9] arm64: mm: install SError abort handler Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-24 15:16   ` Mark Rutland
2017-03-24 15:16     ` Mark Rutland
2017-03-24 15:16     ` Mark Rutland
2017-03-24 16:48     ` Doug Berger
2017-03-24 16:48       ` Doug Berger
2017-03-24 16:48       ` Doug Berger
2017-03-24 17:35       ` Mark Rutland
2017-03-24 17:35         ` Mark Rutland
2017-03-24 17:35         ` Mark Rutland
2017-03-24 17:53         ` Florian Fainelli
2017-03-24 17:53           ` Florian Fainelli
2017-03-24 17:53           ` Florian Fainelli
2017-03-24 18:31           ` Mark Rutland
2017-03-24 18:31             ` Mark Rutland
2017-03-24 18:31             ` Mark Rutland
2017-03-24 19:02             ` Florian Fainelli
2017-03-24 19:02               ` Florian Fainelli
2017-03-24 19:02               ` Florian Fainelli
2017-03-25 10:06               ` Marc Zyngier
2017-03-25 10:06                 ` Marc Zyngier
2017-03-27 20:19                 ` Florian Fainelli
2017-03-27 20:19                   ` Florian Fainelli
2017-03-27 20:19                   ` Florian Fainelli
2017-03-24 14:46 ` [PATCH 4/9] bus: brcmstb_gisb: Use register offsets with writes too Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-25  5:21   ` Gregory Fong
2017-03-25  5:21     ` Gregory Fong
2017-03-25  5:21     ` Gregory Fong
2017-03-24 14:46 ` [PATCH 5/9] bus: brcmstb_gisb: Correct hooking of ARM aborts Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-24 14:46 ` [PATCH 6/9] bus: brcmstb_gisb: correct support for 64-bit address output Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-25  5:36   ` Gregory Fong
2017-03-25  5:36     ` Gregory Fong
2017-03-25  5:36     ` Gregory Fong
2017-03-24 14:46 ` [PATCH 7/9] bus: brcmstb_gisb: Add ARM64 support Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-24 14:46 ` Doug Berger [this message]
2017-03-24 14:46   ` [PATCH 8/9] bus: brcmstb_gisb: add ARM64 SError support Doug Berger
2017-03-24 14:46 ` [PATCH 9/9] bus: brcmstb_gisb: update to support new revision Doug Berger
2017-03-24 14:46   ` Doug Berger
2017-03-24 15:03 ` [PATCH 0/9] bus: brcmstb_gisb: add support for GISBv7 arbiter Mark Rutland
2017-03-24 15:03   ` Mark Rutland
2017-03-24 16:02   ` Doug Berger
2017-03-24 16:02     ` Doug Berger
2017-03-24 16:02     ` Doug Berger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170324144632.5896-9-opendmb@gmail.com \
    --to=opendmb@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.