boundarydevices/linux-imx6 — pull request #13 by mstomlinson (2014-09-05 20:44:12+00:00)
Title: GIC FIQ implementation

THIS SHOULD BE CONSIDERED EXPERIMENTAL CODE.
IT HAS ONLY BEEN TESTED ON AN IMX6Q PROCESSOR WITH THIS COMMIT.
THESE PROCESSORS HAVE A GICv1 with Security Enhancements.
HOOKS HAVE BEEN INSTALLED TO VERIFY AN APPROPRIATE GIC IS PRESENT,
BUT THESE HAVE NOT BEEN TESTED.

This upgrade to the gic driver enables multiple groups
in the GIC hardware so that a FIQ interrupt can be utilized.

This is an upgrade to the imx2_wdt watchdog that utilizes the FIQ
interrupt so that a stack dump is generated before the watchdog
reboots the CPU.

This upgrade uses the fiq_glue routines, and Kconfig modifications
reflect this.

Why is this upgrade necessary?

When debugging kernel drivers, if an error occurs during an
interrupt and the CPU locks up, you may only get an indicator
that the watchdog timer rebooted the CPU. Not too helpful.
Although the watchdog timer can create an interrupt before
rebooting the CPU, if interrupts are off, this feature is
useless.

Hence this rewrite, because the watchdog timer is installed on
the FIQ, which remains active even if normal interrupts have been
disabled.

If enabled (with CONFIG_GIC_FIQ), this upgrade will conflict with
Secure and Virtual implementations of Linux and Android.

The major changes are as follows:

In the GIC driver:

cosmetic changes:
base -> cpu_base or dist_base as appropriate
GIC_DIST_CTR -> GIC_DIST_TYPER (closer to v2 naming convention)
necessary changes:
added GIC_DIST_GROUP
added GIC_ICPIDR2
minor fix:
change all init functions to cpu_init

minor change to fiq_glue_setup
current_handler might be used before being set, so initialize it

In IMX2_WDT

add structures for fiq_glue
add calls to initialize and utilize fiq_glue
add stack dump routines (mostly lifted from fiq_debugger)