devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Daniel Thompson <daniel.thompson@linaro.org>
To: Jason Wessel <jason.wessel@windriver.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	kernel@stlinux.com, kgdb-bugreport@lists.sourceforge.net,
	Linus Walleij <linus.walleij@linaro.org>,
	Jiri Slaby <jslaby@suse.cz>,
	Daniel Thompson <daniel.thompson@linaro.org>,
	Dirk Behme <dirk.behme@de.bosch.com>,
	Russell King <linux@arm.linux.org.uk>,
	Nicolas Pitre <nico@linaro.org>,
	Ian Campbell <ijc+devicetree@hellion.org.uk>,
	Anton Vorontsov <anton.vorontsov@linaro.org>,
	"David A. Long" <dave.long@linaro.org>,
	linux-serial@vger.kernel.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	kernel-team@android.com, devicetree@vger.kernel.org,
	linaro-kernel@lists.linaro.org, Pawel Moll <pawel.moll@arm.com>,
	patches@linaro.org, Kumar Gala <galak@codeaurora.org>,
	Rob Herring <robh+dt@kernel.org>,
	John Stultz <john.stultz@linaro.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-arm-kernel@lists.infradead.org,
	Greg Kroah-Hartman <gregkh@linuxfou>
Subject: [RFC v3 0/9] kgdb: NMI/FIQ support for ARM
Date: Thu,  5 Jun 2014 10:53:05 +0100	[thread overview]
Message-ID: <1401961994-18033-1-git-send-email-daniel.thompson@linaro.org> (raw)
In-Reply-To: <1400853478-5824-1-git-send-email-daniel.thompson@linaro.org>

This patchset makes it possible to use the kgdb NMI infrastructure on
ARM platforms by providing a mutli-platform compatible means for drivers
to manage FIQ routings.

First a quick summary of how the mainline kgdb NMI infrastructure
(mostly found in drivers/tty/serial/kgdb_nmi.c) works. The kgdb
infrastructure will re-route the kgdb console UART's interrupt signal
from IRQ to FIQ. Naturally the UART will no longer function normally and
will instead be managed by kgdb using the polled I/O functions. Any
character delivered to the UART causes the kgdb handler function to be
called.

Note that, within this patchset a serial driver explicitly consents (or
not) to the abuse outlined above by calling the appropriate registration
during the .poll_init() callback.

The patch set is structured as follows:

  The first five patches modify the interrupt system to make it easier
  to describe FIQ. The key concept is that a call to enable_fiq() must
  modify the IRQ/FIQ routing to that the FIQ really is enabled (rather
  than spuriously delivering the signal on the IRQ). To achieve this
  each interrupt controller registers two virqs for each hwirq (allowing
  IRQ and FIQ to be readily distinguished) and registers the mappings
  using a new call, fiq_add_mapping().
  
  The next two patches (6 and 7) provide kgdb with a FIQ handler and
  a means for serial drivers to register their FIQ with kgdb.

  Finally two example serial drivers are modified in order to register
  their FIQs with kgdb.

Major remaining TODO item is to modify the code to halt the other CPUs;
at present this code sends IPIs (which use a normal IRQ) and busy waits
for the other CPUs to halt. This means the benefits of invoking the
debugger via NMI are not yet realized on SMP systems. However I plan
to tackle that later (i.e.  when there's some consensus on whether this
approach is the right way to handle FIQ).

Changes since v2:

* Use flexible mappings to link a normal virq to a FIQ virq. This
  replaces the device tree proposals from the previous RFC
  (thanks Russell King and Rob Herring).

* Reviewed all use of spin locks within .irq_eoi callbacks (and fixed
  the issue identified). Added comments to the FIQ registration
  functions making clear the requirements imposed on interrupt
  controller that call the FIQ API (thanks Russell King).

* Fixed a few whitespace issues (thanks Srinivas Kandagatla)

* ARM64/defconfig build tests (no problems found)

Changes since v1:

* Fully fledged multi-platform

* Tested for correct FIQ operation on STiH416/B2020 (Cortex A9),
  qemu/versatile and qemu/vexpress-a15 (with self-written mods to the
  GIC model to support FIQ).

* Regression tested (and resulting bugs fixed) on qemu/versatile+DT and
  qemu/integreatorcp.

Anton Vorontsov (2):
  ARM: Move some macros from entry-armv to entry-header
  ARM: Add KGDB/KDB FIQ debugger generic code

Daniel Thompson (7):
  arm: fiq: arbitrary mappings from IRQ to FIQ virqs
  arm: fiq: Allow EOI to be communicated to the intc
  irqchip: gic: Provide support for interrupt grouping
  irqchip: gic: Introduce shadow irqs for FIQ
  irqchip: vic: Introduce shadow irqs for FIQ
  serial: amba-pl011: Pass on FIQ information to KGDB.
  serial: asc: Add support for KGDB's FIQ/NMI mode

 arch/arm/Kconfig                            |   2 +
 arch/arm/Kconfig.debug                      |  18 +++
 arch/arm/include/asm/fiq.h                  |   4 +
 arch/arm/include/asm/kgdb.h                 |   7 ++
 arch/arm/kernel/Makefile                    |   1 +
 arch/arm/kernel/entry-armv.S                | 151 +------------------------
 arch/arm/kernel/entry-header.S              | 164 ++++++++++++++++++++++++++++
 arch/arm/kernel/fiq.c                       |  85 +++++++++++++-
 arch/arm/kernel/kgdb_fiq.c                  | 124 +++++++++++++++++++++
 arch/arm/kernel/kgdb_fiq_entry.S            |  87 +++++++++++++++
 arch/arm/mach-ep93xx/core.c                 |   6 +-
 arch/arm/mach-netx/generic.c                |   3 +-
 arch/arm/mach-s3c64xx/common.c              |   6 +-
 arch/arm/mach-versatile/core.c              |   9 +-
 arch/arm/mach-versatile/include/mach/irqs.h |   5 +-
 arch/arm/plat-samsung/s5p-irq.c             |   3 +-
 drivers/irqchip/irq-gic.c                   |  97 ++++++++++++++--
 drivers/irqchip/irq-vic.c                   | 102 ++++++++++++++---
 drivers/tty/serial/amba-pl011.c             |  99 ++++++++++-------
 drivers/tty/serial/st-asc.c                 |  23 ++++
 include/linux/irqchip/arm-gic.h             |   3 +
 include/linux/irqchip/arm-vic.h             |   8 +-
 22 files changed, 770 insertions(+), 237 deletions(-)
 create mode 100644 arch/arm/kernel/kgdb_fiq.c
 create mode 100644 arch/arm/kernel/kgdb_fiq_entry.S

-- 
1.9.0

  parent reply	other threads:[~2014-06-05  9:53 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-14 15:58 [RFC 0/8] kgdb: NMI/FIQ support for ARM Daniel Thompson
2014-05-14 15:58 ` [RFC 1/8] arm: fiq: Allow EOI to be communicated to the intc Daniel Thompson
2014-05-14 15:58 ` [RFC 2/8] irqchip: gic: Provide support for interrupt grouping Daniel Thompson
2014-05-14 15:58 ` [RFC 3/8] ARM: Move some macros from entry-armv to entry-header Daniel Thompson
2014-05-14 15:58 ` [RFC 4/8] ARM: Add KGDB/KDB FIQ debugger generic code Daniel Thompson
2014-05-14 15:58 ` [RFC 5/8] serial: amba-pl011: Pass on FIQ information to KGDB Daniel Thompson
2014-05-14 15:58 ` [RFC 6/8] serial: asc: Add support for KGDB's FIQ/NMI mode Daniel Thompson
2014-05-14 15:58 ` [RFC 7/8] ARM: VIC: Add vic_set_fiq function to select if an interrupt should generate an IRQ or FIQ Daniel Thompson
2014-05-14 15:58 ` [RFC 8/8] arm: fiq: Hack FIQ routing backdoors into GIC and VIC Daniel Thompson
2014-05-23 13:57 ` [RFC v2 00/10] kgdb: NMI/FIQ support for ARM Daniel Thompson
2014-05-23 13:57   ` [RFC v2 01/10] arm: fiq: Allow EOI to be communicated to the intc Daniel Thompson
2014-05-23 14:59     ` Srinivas Kandagatla
2014-05-23 15:00     ` Russell King - ARM Linux
2014-05-28 15:47       ` Daniel Thompson
2014-05-23 13:57   ` [RFC v2 02/10] irqchip: gic: Provide support for interrupt grouping Daniel Thompson
2014-05-23 13:57   ` [RFC v2 03/10] irqchip: gic: Introduce shadow irqs for FIQ Daniel Thompson
2014-05-23 13:57   ` [RFC v2 04/10] ARM: vexpress: Extend UART with FIQ support Daniel Thompson
2014-05-23 15:04     ` Russell King - ARM Linux
2014-05-29 10:31       ` Daniel Thompson
2014-05-29 13:44         ` Rob Herring
2014-06-03 12:41           ` Daniel Thompson
2014-05-23 13:57   ` [RFC v2 05/10] ARM: STi: STiH41x: " Daniel Thompson
2014-05-23 13:57   ` [RFC v2 06/10] irqchip: vic: Introduce shadow irqs for FIQ Daniel Thompson
2014-05-23 13:57   ` [RFC v2 07/10] ARM: Move some macros from entry-armv to entry-header Daniel Thompson
2014-05-23 13:57   ` [RFC v2 08/10] ARM: Add KGDB/KDB FIQ debugger generic code Daniel Thompson
2014-05-23 13:57   ` [RFC v2 09/10] serial: amba-pl011: Pass on FIQ information to KGDB Daniel Thompson
2014-05-23 13:57   ` [RFC v2 10/10] serial: asc: Add support for KGDB's FIQ/NMI mode Daniel Thompson
2014-05-23 14:50     ` Srinivas Kandagatla
2014-06-05  9:53   ` Daniel Thompson [this message]
2014-06-05  9:53     ` [RFC v3 1/9] arm: fiq: arbitrary mappings from IRQ to FIQ virqs Daniel Thompson
2014-06-05 11:51       ` Russell King - ARM Linux
2014-06-05 13:08         ` Daniel Thompson
2014-06-12  8:37       ` Linus Walleij
2014-06-12  9:54         ` Daniel Thompson
2014-06-13 14:29       ` Rob Herring
2014-06-18 11:24         ` Daniel Thompson
2014-06-05  9:53     ` [RFC v3 2/9] arm: fiq: Allow EOI to be communicated to the intc Daniel Thompson
2014-06-05  9:53     ` [RFC v3 3/9] irqchip: gic: Provide support for interrupt grouping Daniel Thompson
2014-06-05 19:50       ` Nicolas Pitre
2014-06-05  9:53     ` [RFC v3 4/9] irqchip: gic: Introduce shadow irqs for FIQ Daniel Thompson
2014-06-06  7:46       ` Peter De Schrijver
2014-06-06  9:23         ` Daniel Thompson
2014-06-05  9:53     ` [RFC v3 5/9] irqchip: vic: " Daniel Thompson
2014-06-05  9:53     ` [RFC v3 6/9] ARM: Move some macros from entry-armv to entry-header Daniel Thompson
2014-06-05  9:53     ` [RFC v3 7/9] ARM: Add KGDB/KDB FIQ debugger generic code Daniel Thompson
2014-06-05  9:53     ` [RFC v3 8/9] serial: amba-pl011: Pass on FIQ information to KGDB Daniel Thompson
2014-06-05  9:53     ` [RFC v3 9/9] serial: asc: Add support for KGDB's FIQ/NMI mode Daniel Thompson
2014-06-19 10:38     ` [PATCH v4 00/13] kgdb: NMI/FIQ support for ARM Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 01/13] arm: fiq: Add callbacks to manage FIQ routings Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 02/13] arm: fiq: Allow EOI to be communicated to the intc Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 03/13] irqchip: gic: Provide support for interrupt grouping Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 04/13] irqchip: gic: Add support for FIQ management Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 05/13] irqchip: gic: Remove spin locks from eoi_irq Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 06/13] irqchip: vic: Add support for FIQ management Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 07/13] ARM: Move some macros from entry-armv to entry-header Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 08/13] ARM: Add KGDB/KDB FIQ debugger generic code Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 09/13] serial: amba-pl011: Pass FIQ information to KGDB Daniel Thompson
2014-06-20  0:36         ` Greg Kroah-Hartman
2014-06-19 10:38       ` [PATCH v4 10/13] serial: asc: Add support for KGDB's FIQ/NMI mode Daniel Thompson
2014-06-20  0:36         ` Greg Kroah-Hartman
2014-06-19 10:38       ` [PATCH v4 11/13] serial: asc: Adopt readl_/writel_relaxed() Daniel Thompson
2014-06-19 11:29         ` Srinivas Kandagatla
2014-06-19 11:46           ` Daniel Thompson
2014-06-19 11:58             ` Maxime Coquelin
2014-06-19 12:01             ` Srinivas Kandagatla
2014-06-19 13:12               ` Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 12/13] serial: imx: clean up imx_poll_get_char() Daniel Thompson
2014-06-19 10:38       ` [PATCH v4 13/13] serial: imx: Add support for KGDB's FIQ/NMI mode Daniel Thompson

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=1401961994-18033-1-git-send-email-daniel.thompson@linaro.org \
    --to=daniel.thompson@linaro.org \
    --cc=anton.vorontsov@linaro.org \
    --cc=catalin.marinas@arm.com \
    --cc=dave.long@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dirk.behme@de.bosch.com \
    --cc=galak@codeaurora.org \
    --cc=gregkh@linuxfou \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=jason.wessel@windriver.com \
    --cc=john.stultz@linaro.org \
    --cc=jslaby@suse.cz \
    --cc=kernel-team@android.com \
    --cc=kernel@stlinux.com \
    --cc=kgdb-bugreport@lists.sourceforge.net \
    --cc=linaro-kernel@lists.linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=nico@linaro.org \
    --cc=patches@linaro.org \
    --cc=pawel.moll@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=tglx@linutronix.de \
    /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 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).