History log of /fuchsia/zircon/kernel/dev/pdev/interrupt/interrupt.c
Revision Date Author Comments
# 2f2670a8 09-Aug-2018 Christopher Anderson <cja@google.com>

[kernel] Pull MSI support out of PCIe into dev/interrupt

- Remove PCI dependency from the Intel IOMMU impl.
- Remove WITH_DEV_PCIE defines that gate MSI support.
- Move msi_* functions to dev/interrupt.h and provide
weak stubs in dev/interrupt/msi.c
- Update intel and aram methods to use new MSI functions
that exist standalone.

The MSI interface is subject to change still in the future,
but for now this decouples the IOMMU from PCI and sets up
a framework for MSI being part of the kernel interrupt interface.

PciePlatform support classes are mostly left alone to avoid
refactoring a system that will be unused later. They may be
eliminated in a future CL if it seems easy to do.

Test: core-tests and boot tests

Change-Id: I89f226ccf5ebf4930ea06d9f32cb6e1caabde34e


# 6ae3d36c 08-Jun-2018 Nick Maniscalco <maniscalco@google.com>

[kernel][interrupts][gicv2] Add shutdown_interrupts_curr_cpu

On arm64, once we've powered off a CPU (via PSCI CPU_OFF) it's
critical that it not receive any interrupts.

This change:

- adds a (currently unused) shutdown_cpu operation to the platform
- implements shutdown_interrupts_curr_cpu for arm64 gicv2

On arm64 gicv2, shutdown_interrupts_curr_cpu asserts that all Private
Peripheral Interrupts (PPIs) are disabled and any Shared Peripheral
Interrupts (SPIs) no longer target the CPU that's about to be
shutdown.

On arm64, gicv3, shutdown_interrupts_curr_cpu is PANIC_UNIMPLEMENTED.

On x64, shutdown_interrupts_curr_cpu is PANIC_UNIMPLEMENTED.

Future changes will implement shutdown_interrupts_curr_cpu for gicv3
and x64.

Tested: Manually tested gicv2 path on qemu using another change that
actually called shutdown_interrupts_curr_cpu (prior to shutting down
the platform timer).

ZX-2228 #comment prereq

ZX-2302 #comment progress

Change-Id: I983e88c7b92159567efc9d3a305231dd86b53b8e


# d62150ad 11-Jun-2018 Christopher Anderson <cja@google.com>

[kernel] Add get_base_vector and get_max_vector to interrupt interface

Add interrupt_get_base_vector() and interrupt_get_max_vector() to
the interrupt.h interface, as well as the pdev interrupt protocol
structure.

Test: none
Change-Id: I3f7fd7b779e019bd82d3eb586ed4842a2c84b3a5


# 9f95363b 05-Feb-2018 Mark Seaborn <mseaborn@google.com>

[kernel][interrupts] Replace "enum handler_return" type with void

Following recent changes for using preempt_disable, all of the
in-kernel interrupt handlers now always return INT_NO_RESCHEDULE. We
can therefore remove their return values. We can use "void" instead
of "enum handler_return".

The bulk changes are:

* Search-and-replace "enum handler_return" -> "void".
* Manually change "return INT_NO_RESCHEDULE;" -> "return;", or remove
when at the end of a function.
* Manually change "return foo();" -> "foo();" when return type is
void (just a cleanup -- the code compiles without this change).

The non-bulk changes include:

* Remove the definition of enum handler_return.
* Update the interrupt entry points: faults.cpp and exceptions_c.cpp.
* Update a few places where handler_return values were propagated,
such as "handler->handler()" calls, removing "ret =".

Note that platform_fiq() (changed here) is called from ARM assembly.

ZX-1490

Change-Id: I70b57c610ded0facb93c09ac8ffc81cf23a985fc


# 1e354201 25-Jan-2018 Mark Seaborn <mseaborn@google.com>

[kernel] Revert "[kernel][interrupts] Add assertion to every interrupt-handling function"

This reverts commit cae96aef07ff38db6e1ad7f05444758531c3e764.

That change caused a kernel assertion failure via the following path:

sys_mmap_device_io()
-> IoBitmap::SetIoBitmap()
-> mp_sync_exec()
-> mp_mbx_generic_irq()

ZX-1490

Change-Id: Ic2362d000be7b4e021c6942cc6d0f9550dd15649


# cae96aef 24-Jan-2018 Mark Seaborn <mseaborn@google.com>

[kernel][interrupts] Add assertion to every interrupt-handling function

This is in preparation for removing the "enum handler_return" type.
When we replace that with "void", there will be nothing in the
function signatures to mark out these functions that are only called
in interrupt-handling context.

To make up for that, add the assertion
"DEBUG_ASSERT(arch_in_int_handler())" at the start of every function
that currently returns a "handler_return".

ZX-1490

Change-Id: I30deda7192eed9f5a5276ec6259cce78277e87ea


# 30cf5781 11-Dec-2017 Mike Voydanoff <voydanoff@google.com>

[kernel][interrupt] return error from register_int_handler()

register_int_handler() will return ZX_ERR_INVALID_ARGS instead of panicing
if the interrupt vector is invalid and will now also return ZX_ERR_ALREADY_BOUND
if the caller attempts to set a handler for an interrupt vector that already
has a handler.

This allows us to remove an unnecessary WAVL tree from InterruptEventDispatcher.

Also, zx_interrupt_create() will return an error if it attempts to bind to an
interrupt vector that is now being used by a kernel driver.

Add interrupt_has_handler() to determine if we have a handler for an interrupt vector
to use for this instead.

Also added a missing sanity check to PciInterruptDispatcher.

ZX-1369 #done

Change-Id: I107634c66b57cd5a7adfd6780d0afa24dfda449b


# 39d88359 26-Sep-2017 George Kulakowski <kulakowski@google.com>

[kernel][status] Migrate the rest to zx_status_t

Change-Id: If0a5d3e04bfc3e2a57d068350ee1d1156ed67872


# 0601e9df 30-Aug-2017 Travis Geiselbrecht <travisg@google.com>

[kernel][mp] add new header with types and routines to deal with cpu numbers

Add a few more types and switch some apis to using those. No functional
change.

Change-Id: I67add1247cf36d9e6a55f15dd809ffe4bafe06fd


# f3e2126c 12-Sep-2017 Roland McGrath <mcgrathr@google.com>

[zx] Magenta -> Zircon

The Great Renaming is here!

Change-Id: I3229bdeb2a3d0e40fb4db6fec8ca7d971fbffb94


# 823081b0 05-Jul-2017 Mark Seaborn <mseaborn@google.com>

[errors] Add MX_ prefix to ERR_NOT_CONFIGURED for consistency

This is for consistency with other error codes.

Change-Id: I21794cd75dfb6ecd4feb956a914418fb2fdf731b


# ce995746 27-Apr-2017 Gurjant Kalsi <gkalsi@google.com>

[pdev][interrupts] Hook for shutting down irqs

Implements a PDev hook for shutting down the interrupt controller.

Currently only implemented for the BCM28xx's interrupt controller.
Panics for GIC[v3] for now.

Change-Id: I734135d419da1e4a91d1a97c4008345fc0a9d0ed


# 1d163363 21-Mar-2017 Mike Voydanoff <voydanoff@google.com>

[kernel][pdev][interrupts] Remove unneeded support for per-cpu interrupt handlers

Change-Id: I44bbba3007d9f339f04dbe8ff0dd9928422ac624


# 1dad1344 20-Mar-2017 Gurjant Kalsi <gkalsi@google.com>

[bcm28xx][irq] Fix IRQ Handler nullptr check for RPi3.

Looks like we were checking the pointer to the struct that
contains the handler rather than the handler itself.

Change-Id: I4e5339b14bcabb2ade48e181265b0bf515dd8f0d


# 6b6ee00f 20-Mar-2017 Mike Voydanoff <voydanoff@google.com>

[kernel][pdev][interrupts] Add flag to enable/disable per-cpu interrupt handlers

The RPi3 interrupt controller does not currently use per-cpu interrupts,
and attempting to use them gives bad results.

Change-Id: I1d34f18906f3ac8a4e372902fb1318480ec7bea9


# 228f1fde 20-Mar-2017 Mike Voydanoff <voydanoff@google.com>

[kernel][pdev] Fix uninitialized spin lock and add some memory barriers

Change-Id: I47d585d710d6370b82abbffcad198a1d65f65842


# d39c4a6d 04-Mar-2017 Mike Voydanoff <voydanoff@google.com>

[kernel][pdev] Add support for pdev interrupt controller and debug UART drivers

Change-Id: I3216731bd0bd23d716105cf1f2d6b7755fdd05c2