zephyr/drivers/interrupt_controller
Zide Chen e8b6b86704 interrupt_controller: device driver can configure IO APIC delivery mode
Currently all IO APIC interrupts are configured at fixed delivery mode,
which is good for HEPT timer interrupt but it imposes burdens to
device drivers to properly handle the repeated interrupt sent to all
processors.

This patch makes it more flexible so that device drivers can specify
the delivery mode it desires in the IRQ connect APIs.

- Don't hard code IOAPIC_FIXED in z_ioapic_irq_set(), meaning the
  IRQ delivery mode is passed in from the 'flags' argument and
  individual device driver needs to choose delivery mode for its own
  IO APIC interrupt.

- To support different delivery mode in different IO APIC interrupts,
  need to save and restore RTE[10:8] during IOAPIC suspend and resume.

If device driver doesn't pass either IOAPIC_FIXED or IOAPIC_LOWEST
in IRQ_CONNECT()/irq_connect_dynamic() alike APIs, the delivery mode
bit fields in the target RTE register are '0' which implies fixed mode.
If the device driver wants the interrupt to be delivered to one CPU
only, it needs to explicitly specify IOAPIC_LOWEST in one of the IRQ
connect APIs.

Signed-off-by: Zide Chen <zide.chen@intel.com>
2020-05-08 22:32:39 -04:00
..
CMakeLists.txt drivers: add GIC V3 driver 2020-05-07 14:22:53 +02:00
Kconfig drivers: interrupt_controller: Refactor GIC configurations 2019-12-19 11:05:27 -05:00
Kconfig.cavs intc: intc_cavs: Use DTS labels for device names 2020-04-22 04:59:22 -05:00
Kconfig.dw interrupt_controller/dw_ictl: need to be initialized earlier 2020-03-25 19:07:28 -04:00
Kconfig.gic drivers: interrupt_controller: Refactor GIC configurations 2019-12-19 11:05:27 -05:00
Kconfig.loapic drivers/interrupt_controller: Split Kconfig for clarity 2019-12-18 21:49:46 +01:00
Kconfig.multilevel kconfig: Clean up header comments and make them consistent 2019-11-04 17:31:27 -05:00
Kconfig.multilevel.aggregator_template
Kconfig.rv32m1 boards: riscv: rv32m1: enable BT related configuration 2019-11-08 15:38:57 +01:00
Kconfig.sam0 kconfig: Replace non-defconfig single-symbol 'if's with 'depends on' 2020-02-12 10:32:34 -06:00
Kconfig.shared_irq kconfig: Clean up header comments and make them consistent 2019-11-04 17:31:27 -05:00
Kconfig.stm32 drivers/exti: stm32: Add support for STM32L5 series 2020-05-08 00:34:34 -05:00
intc_arcv2_irq_unit.c arch: arc: optimize the arc v2 interrupt unit driver 2020-04-06 11:17:38 -07:00
intc_cavs.c devicetree: allow access to all nodes 2020-05-08 19:37:18 -05:00
intc_cavs.h drivers/interrupt_controller: Adopt file naming as other drivers 2019-12-18 21:49:46 +01:00
intc_dw.c device: Fix structure attributes access 2020-05-08 23:07:44 +02:00
intc_dw.h intel_s1000: various fixes for build errors 2020-01-31 14:51:37 -05:00
intc_exti_stm32.c drivers/exti: stm32: Add support for STM32L5 series 2020-05-08 00:34:34 -05:00
intc_gic.c drivers: add GIC V3 driver 2020-05-07 14:22:53 +02:00
intc_gic_common_priv.h drivers: add GIC V3 driver 2020-05-07 14:22:53 +02:00
intc_gicv3.c drivers: add GIC V3 driver 2020-05-07 14:22:53 +02:00
intc_gicv3_priv.h drivers: add GIC V3 driver 2020-05-07 14:22:53 +02:00
intc_ioapic.c interrupt_controller: device driver can configure IO APIC delivery mode 2020-05-08 22:32:39 -04:00
intc_ioapic_priv.h drivers/interrupt_controller: Adopt file naming as other drivers 2019-12-18 21:49:46 +01:00
intc_loapic.c interrupt_controller: program local APIC LDR register for xAPIC 2020-05-08 22:32:39 -04:00
intc_loapic_spurious.S drivers/interrupt_controller: Adopt file naming as other drivers 2019-12-18 21:49:46 +01:00
intc_plic.c drivers: sifive: Convert sifive drivers to new DT_INST macros 2020-03-26 16:06:09 -05:00
intc_rv32m1_intmux.c device: Fix structure attributes access 2020-05-08 23:07:44 +02:00
intc_sam0_eic.c drivers: atmel sam0: Convert atmel sam0 drivers to new DT_INST macros 2020-03-27 11:02:57 -05:00
intc_sam0_eic_priv.h drivers/interrupt_controller: Adopt file naming as other drivers 2019-12-18 21:49:46 +01:00
intc_shared_irq.c device: Fix structure attributes access 2020-05-08 23:07:44 +02:00
intc_swerv_pic.c drivers: intc: intc_swerv_pic: Convert to new DT_INST macros 2020-03-30 13:10:28 -05:00
intc_system_apic.c drivers/interrupt_controller: Adopt file naming as other drivers 2019-12-18 21:49:46 +01:00
intc_vexriscv_litex.c drivers: litex: Convert litex drivers to new DT_INST macros 2020-03-30 12:49:43 -05:00