boundarydevices / linux

Kernel tree for Ezurio (ex-Boundary Devices) platforms
https://www.ezurio.com/
194 stars 290 forks source link

GIC FIQ implementation #13

Closed mstomlinson closed 7 years ago

mstomlinson commented 10 years ago

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)

gibsson commented 7 years ago

Hi,

Closing this pull request since it's been too long, it doesn't apply any more.

Do not hesitate to share if you have a FIQ implementation for recent kernels.

Regards, Gary