Commit Graph

753 Commits

Author SHA1 Message Date
Michael Hope
b99b7d14f1 drivers: interrupt_controller: add a WCH EXTI external interrupt driver
The WCH External Trigger and Interrupt controller (EXTI) supports
between 8 and 22 lines where each line can trigger an interrupt on
rising edge, falling edge, or both edges. Lines are assigned to a
group, and each group has a separate interrupt. On the CH32V003/6,
there is one group of 8 lines, while on the CH32V208 there are
multiple groups with between one and six lines per group.

In the same way as the STM32 and GD32, define an EXTI driver that
configures the peripheral and an internal interface that can configure
individual lines.

Signed-off-by: Michael Hope <michaelh@juju.nz>
2025-06-26 09:38:56 +02:00
Tatsuya Ogawa
5560c9f12a drivers: interrupt_controller: Add interrupt controller support for RX130
Add interrupt controller driver support for RX130 series

Signed-off-by: Tatsuya Ogawa <tatsuya.ogawa.nx@renesas.com>
Signed-off-by: Quy Tran <quy.tran.pz@renesas.com>
2025-06-24 14:18:41 +02:00
Benjamin Cabé
48a1a2a248 drivers: intc: nxp_pint: fix off-by-one error in pin_enable
Prevent out-of-bounds access in nxp_pint_pin_enable by fixing the
comparison to use >= instead of >.

Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org>
2025-06-21 10:40:28 +02:00
Youssef Zini
38428c6f52 drivers: interrupt_controller: add stm32mp2 exti
Add the mp2 exti2 dts to the dtsi file.
Add mp2 exti hal and ll function calls with EXTI2 instance. We use the
EXTI2 instance because it contains the GPIO interrupts in the non-secure
context. (We are trying to build the blinky sample as a first milestone)

Signed-off-by: Youssef Zini <youssef.zini@savoirfairelinux.com>
2025-06-17 08:20:33 +02:00
Youssef Zini
64ac64d2d6 drivers: interrupt_controller: change dt macro
Replace the use of `DT_NODELABEL(exti)` which depends on the node label
with the defined EXTI_NODE macro using the instance with the
`st_stm32_exti` compatible.
Since both macros point to the same node, this change doesn't affect
the code logic, but makes it independent of the node label, in
preparation for the addition of the STM32MP2 exti nodes.

Signed-off-by: Youssef Zini <youssef.zini@savoirfairelinux.com>
2025-06-17 08:20:33 +02:00
Benjamin Cabé
aa8386929e drivers: intc_wch_pfic: replace shift operations with BIT macro
Updated intc_wch_pfic driver to use BIT() macro for clarity.

Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org>
2025-06-11 08:18:58 +02:00
Benjamin Cabé
b15f942684 drivers: intc_wch_pfic: correct/optimize interrupt disable logic
The IRER registers are write-only and clear the enable bit for the
provided interrupt. Use a direct write instead of a read/modify/write
sequence to avoid generating a bogus read access and improve performance

Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org>
2025-06-11 08:18:58 +02:00
Keith Packard
513e6ed5d2 arch/common: Mark interrupt tables const when !DYNAMIC_INTERRUPTS
When not using dynamic interrupt mapping, various interrupt tables are
configured to be stored in read-only memory in the linker script.. Mark
them const so that the linker doesn't complain.

This affects _sw_isr_table, _irq_vector_table, and z_shared_sw_isr_table in
arch/common along with _VectorTable in arch/arc.

Signed-off-by: Keith Packard <keithp@keithp.com>
2025-06-10 22:13:09 +02:00
Raffael Rostagno
c3aa6589c3 drivers: intc: esp32: Disable IRQ before connect
Disable IRQ before connecting new handler when interrupt is not
shared. This aligns intc behavior to version before PR #87369.

Signed-off-by: Raffael Rostagno <raffael.rostagno@espressif.com>
2025-06-05 15:10:44 -05:00
Dawid Niedzwiecki
964aa56ea7 interrupt_controller: intc_plic: move unused function
Move function that is used only if some configs are defined.

Signed-off-by: Dawid Niedzwiecki <dawidn@google.com>
2025-06-02 13:29:30 +02:00
Miguel Gazquez
2b91c467f2 modules: Update hal_wch
Update hal_wch.

As the hal upstream changed name, there is now a name conflict.
Rename ch32fun.h to hal_ch32fun.h to fix this conflict.

Signed-off-by: Miguel Gazquez <miguel.gazquez@bootlin.com>
2025-05-24 18:03:53 +02:00
Mahesh Mahadevan
dcad2e036e drivers: nxp_pint: Add power handlers for the NXP PINT driver
This is needed to restore state on wakeup from certain low power
modes.

Signed-off-by: Mahesh Mahadevan <mahesh.mahadevan@nxp.com>
2025-05-19 21:55:15 +02:00
Anas Nashif
2aacbcaab5 style: add missing curly braces in if/while/for statements.
Add missing curly braces in if/while/for statements.

This is a style guideline we have that was not enforced in CI. All
issues fixed here were detected by sonarqube SCA.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2025-05-17 14:10:33 +02:00
Vit Stanicek
405ab182a9 drivers: intc_nxp_pint: Decouple from fsl_power.h
Add drivers/interrupt_controller/intc_nxp_pint/power.h abstracting
EnableDeepSleepIRQ and DisableDeepSleepIRQ invocations from
intc_nxp_pint.c. Modify intc_nxp_pint.c to use that file.

fsl_power.c and fsl_power.h can't be built on the
mimxrt685_evk/mimxrt685s/hifi4 target, so it's excluded from it in hal_nxp.

Signed-off-by: Vit Stanicek <vit.stanicek@nxp.com>
2025-05-16 19:00:30 +02:00
Daniel Baluta
c9f149cf6f drivers: intc: irqstr: Fix uninitialized variable error
Move initialization of 'enabled' variable together with declaration.
This fixes the following compiler error:
error: 'enabled' may be used uninitialized [-Werror=maybe-uninitialized]

This is not really an error but the compiler is tricked by the
K_SPINLOCK() macro.

Fixes: https://github.com/zephyrproject-rtos/zephyr/issues/88996
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
2025-04-24 22:58:59 +02:00
Laurentiu Mihalcea
eaa1addb5e drivers: intc: irqstr: refactor level 1 interrupt recounting
So far, it has been assumed that only level 2 interrupts can be shared
via the `CONFIG_SHARED_INTERRUPTS` option, but this is not true. In the
case of i.MX95, for instance, level 1 interrupt 143 is shared among EDMA
channels 30 and 31.

Due to the previous assumption, the irqsteer driver currently performs
reference counting for all level 2 interrupts aggregated by each
dispatcher and, of course, for the level 1 interrupts the dispatchers are
attached to. For instance, assuming a machine with 100 level 1 interrupts
and 1 irqsteer dispatcher attached to line 50 this would mean reference
counting is performed solely for line 50 (and the level 2 interrupts MUX'd
into this line).

Going back to i.MX95, since there's no dispatcher attached to IRQ line 143
that means there's no reference counting for it. In turn, this means that
the IRQ line can be disabled accidentally on a channel release() operation
while the other channel is active.

To protect against such cases, refactor the level1 interrupt reference
counting. Now, reference counting is performed for _all_ level 1
interrupts.

Additionally, simplify the locking logic. Ideally, there would be a lock
for each dispatcher protecting the level 2 interrupts and 1 global lock
protecting the level 1 interrupts. Instead of this approach (which is a
bit more complex), simply use a global lock for all interrupts. If finer
granularity is required then it can be added later on.

Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
2025-04-21 20:04:19 +02:00
Laurentiu Mihalcea
bb7efcf03b drivers: intc: irqstr: change name of level1 IRQ enable/disable
Add the "_raw" suffix to the macros handling the level 1 IRQ enable and
disable operation to signify that these operations perform no refcounting.
Additionally, shorten some portions of the name.

Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
2025-04-21 20:04:19 +02:00
Mika Braunschweig
d19c499037 drivers: interrupt-controller: vim: Compare interrupt numbers
To avoid misconfigurations a comparision has been added which compares the
amount of reported interrupts from the VIM interrupt controller with the
configured number of interrupts via Kconfig.

Signed-off-by: Mika Braunschweig <mika.braunschweig@siemens.com>
2025-04-17 00:56:59 +02:00
Mika Braunschweig
2b7db7f395 drivers: interrupt-controller: vim: Fix wrong address
On startup the VIM interrupt controller driver had a sys_read32 call with a
bitmask instead of an address. This has been fixed.

Signed-off-by: Mika Braunschweig <mika.braunschweig@siemens.com>
2025-04-17 00:56:59 +02:00
Huaqi Fang
a7f9ebe9d5 driver: interrupt_controller: intc_clic: support 32 and 64 bit riscv cpu
This patch is used to provide clic(eclic) in 64 bit riscv cpu support,
since in 64 bit riscv cpu, the clic irq table entry is also 64 bit,
so we need to use ld/sd to do irq entry load and store

Signed-off-by: Huaqi Fang <578567190@qq.com>
2025-04-16 08:10:47 +02:00
Adam Openshaw
797e03258b drivers: gicv3: fixed typo
fixed typo

Signed-off-by: Adam Openshaw <quic_adamo@quicinc.com>
2025-04-09 21:09:43 +02:00
Adam Openshaw
1146574b67 drivers: gicv3: Add Support for Extended SPI
Added support to gicv3 driver to utilize the
extended SPI MMIO registers introduced in
GICv3.1 for the extended SPI range.

Documentation for the Extended Shared
Peripheral Interrupts extension can be found
in the ARM General Interrupt Controller
Architecture Specification:

https://developer.arm.com/documentation/ihi0069/latest/

Signed-off-by: Adam Openshaw <quic_adamo@quicinc.com>
2025-04-09 21:09:43 +02:00
Adam Openshaw
b664d3a925 drivers: gicv3: clang-format
Formatting files for compliance

Signed-off-by: Adam Openshaw <quic_adamo@quicinc.com>
2025-04-09 21:09:43 +02:00
Tim Lin
678adea066 drivers/interrupt: Add interrupt and wake-up control drivers of it51xxx
Add interrupt and wake-up control drivers for ITE it51xxx series.

Signed-off-by: Tim Lin <tim2.lin@ite.corp-partner.google.com>
2025-04-08 10:48:26 +02:00
Jimmy Zheng
dbd0ac40ce drivers: interrupt_controller: intc_clic: add indirect access clic reg
Add indirect CSR access to access CLIC register to satisfy the current
CLIC spec (Version v0.9, 2024-06-28: Draf).

Add CONFIG_LEGACY_CLIC_MEMORYMAP_ACCESS for legacy CLIC implementation
with memory-mapped CLIC register.

Signed-off-by: Jimmy Zheng <jimmyzhe@andestech.com>
2025-04-04 14:55:50 +02:00
Jimmy Zheng
46a828e787 drivers: interrupt_controller: intc_clic: add CLIC parameters
Add support for CLIC hardware parameters based on the hardware
implementation.

  1. CLIC_PARAMETER_INTCTLBITS
    Specifies the number of modifiable bit in interrupt control register.

  2. CLIC_PARAMETER_MNLBITS
    Specifies the number of bits are assigned to interrupt level in the
    interrupt control bits.

Signed-off-by: Jimmy Zheng <jimmyzhe@andestech.com>
2025-04-04 14:55:50 +02:00
Jimmy Zheng
ed97af9309 drivers: interrupt_controller: intc_clic: add CLIC SMCLICCONFIG extension
Add support for CLIC SMCLICCONFIG extension, allowing user to configure
the number of available interrupt level bits at runtime.

Signed-off-by: Jimmy Zheng <jimmyzhe@andestech.com>
2025-04-04 14:55:50 +02:00
Jimmy Zheng
8dca182b14 driver: interrupt_controller: intc_clic: fixed access CLIC w/o privileged
Temporarily disabled PMP stack guard to allow access to CLIC M-mode
register, because U-mode load/store (mstatus.MPRV=0x1,MPP=0x0) is
restricted.

Signed-off-by: Jimmy Zheng <jimmyzhe@andestech.com>
2025-04-04 14:55:50 +02:00
Jimmy Zheng
9349d54074 driver: interrupt_controller: intc_clic: rework to standard CLIC driver
Rework intc_clic to standard CLIC driver with Nuclei ECLIC extention.

Signed-off-by: Jimmy Zheng <jimmyzhe@andestech.com>
2025-04-04 14:55:50 +02:00
Jimmy Zheng
21f0ee0383 driver: interrupt_controller: rename intc_nuclei_eclic to intc_clic
Rename intc_nuclei_eclic to intc_clic, and separate CLIC register
definitions into intc_clic.h.

Signed-off-by: Jimmy Zheng <jimmyzhe@andestech.com>
2025-04-04 14:55:50 +02:00
Raffael Rostagno
034c0cb977 drivers: intc: esp32: Shared allocator for Xtensa and RISCV
Update interrupt allocator to use the same driver for both
Xtensa and RISCV devices.

Signed-off-by: Raffael Rostagno <raffael.rostagno@espressif.com>
Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
2025-04-02 19:02:27 +02:00
Quang Le
9736851528 drivers: interrupt controller: Add support for RZ/T
- Add interrupt controller driver support for RZ/T
- Remove a duplicate USE_RZ_FSP_EXT_IRQ in Kconfig

Signed-off-by: Quang Le <quang.le.eb@bp.renesas.com>
Signed-off-by: Nhut Nguyen <nhut.nguyen.kc@renesas.com>
Signed-off-by: Binh Nguyen <binh.nguyen.xw@renesas.com>
2025-04-02 12:52:54 +02:00
Daniel Hajjar
a4e139b9f8 drivers: intc_ioapic: Fix Out of Bounds shift
Hexadecimal integer literals are signed if they can fit into a signed int,
which causes undefined behavior.

This happens here because 0xFF can fit into a signed int and then gets
left-shifted by 24, undefined behavior for signed integers.

Signed-off-by: Daniel Hajjar <daniel.hajjar16@gmail.com>
2025-03-24 19:23:55 +01:00
TOKITA Hiroshi
cbcf36e1a7 dts: arm: renesas: ra: Remove old R7FA4M1AB3CFM configurations
Due to historical reasons, there were two implementations of
R7FA4M1AB3CFM. However, the migration has been completed,
so the old one is now being removed.

Signed-off-by: TOKITA Hiroshi <tokita.hiroshi@gmail.com>
2025-03-17 16:24:42 +01:00
Nhut Nguyen
6a5ccb6358 drivers: interrupt_controller: Add support for RZ/T2L
Add interrupt controller for RZ/T2L

Signed-off-by: Nhut Nguyen <nhut.nguyen.kc@renesas.com>
Signed-off-by: Hieu Nguyen <hieu.nguyen.ym@bp.renesas.com>
2025-03-17 09:26:13 +01:00
Quang Le
020a0d312c drivers: interrupt controller: Add support for RZ/N2L
Add interrupt controller driver support for RZ/N2L

Signed-off-by: Quang Le <quang.le.eb@bp.renesas.com>
Signed-off-by: Nhut Nguyen <nhut.nguyen.kc@renesas.com>
2025-03-14 09:23:50 +01:00
Yangbo Lu
605335716a drivers: interrupt_controller: intc_nxp_irqsteer: fix system INTID
Current system INTID calcualtion only worked for SoCs whose extended
interrupts started from IRQ 0.
Otherwise, FSL_FEATURE_IRQSTEER_IRQ_START_INDEX should be added for
system INTID.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
2025-03-11 18:54:40 +01:00
Yangbo Lu
8108c891b8 drivers: interrupt_controller: intc_nxp_irqsteer: support ARM Cortex-M
Added ARM Cortex-M support for intc_nxp_irqsteer driver.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
2025-03-11 18:54:40 +01:00
Sylvio Alves
f22de9733b soc: esp32: riscv: fix interrupt allocator
Current interrupt allocator is not taking into account
reserved areas. In case of esp32c6, Wi-Fi isn't properly
configured, causing instability or even non-functional feature.
This adds the reserved area ranges for all risc-v based SoC and
unify the slot finding based on interrupt source.

Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
2025-03-06 08:35:29 +00:00
Hoang Nguyen
ca75671c50 drivers: interrupt controller: Initial support for RZ/G3S
Add interrupt controller driver support for Renesas RZ/G3S

Signed-off-by: Hoang Nguyen <hoang.nguyen.jx@bp.renesas.com>
Signed-off-by: Nhut Nguyen <nhut.nguyen.kc@renesas.com>
2025-02-11 10:11:15 +01:00
Jamie McCrae
560db8509a drivers: kconfig: Fix bleeding options
Fixes a multitude of Kconfigs that wrongly appear on devices
where support is literally impossible

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2025-01-31 11:50:12 +01:00
Ziad Elhanafy
9a236f82c1 drivers: gic: Add multiple GIC redistributors regions support
For GIC multiple views feature support, all GIC Re-distributor's
GICR_TYPER.last will be set. Because configuration view-0 can
assign non-contiguous CPUs to views other than 0, in this case
the GIC Redistributors' registers won't seem contiguous.

So the GIC driver should cope with multiple sets of redistributors
like multi-chip scenarios. In this patch we add multiple GIC
redistributor regions support in GIC redistributor iteration.

For more information, refer to the Multi view subsection
in the GIC Technical Reference Manual.
For example:
https://developer.arm.com/documentation/101516/0400/Operation-of-GIC-700/Multi-view

Signed-off-by: Ziad Elhanafy <ziad.elhanafy@arm.com>
2025-01-21 11:16:12 +01:00
Martin Jäger
e5e8fb56d1 drivers: interrupt_controller: esp32c6: reserve IRQ 1 for WiFi
IRQ 1 is reserved for WiFi in ESP-IDF, which is used as the basis
for the Espressif HAL in Zephyr.

If IRQ 1 is used by Zephyr and too many other peripherals (e.g.
multiple UARTs) are enabled, WiFi stops working.

Marking IRQ 1 as "not available" seems to fix the issue.

Fixes #82874

Signed-off-by: Martin Jäger <martin@libre.solar>
2024-12-23 13:23:59 +01:00
Pieter De Gendt
b775c0d30e drivers: interrupt_controller: Place API into iterable section
Commit e63c6cd534 introduced device API
macros to be used by driver implementations. The DEVICE_API macro
ensures the passed API instance is placed in the corresponding iterable
section to allow for runtime checks.

Add wrapper DEVICE_API macro to all its_driver_api instances.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
2024-12-05 09:41:52 +01:00
Pieter De Gendt
1a0c852e0d drivers: interrupt_controller: Place API into iterable section
Add wrapper DEVICE_API macro to all vtd_driver_api instances.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
2024-12-02 22:08:07 +00:00
Pieter De Gendt
74fc1b171d drivers: interrupt_controller: Place API into iterable section
Add wrapper DEVICE_API macro to all shared_irq_driver_api instances.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
2024-12-02 22:08:07 +00:00
Michael Hope
ef475cbf71 drivers: add the pfic interrupt controller
This commit adds the pfic interrupt controller driver for WCH CH32V003.

Signed-off-by: Michael Hope <michaelh@juju.nz>
Signed-off-by: Dhiru Kholia <dhiru.kholia@gmail.com>
2024-11-26 14:41:46 +00:00
Yong Cong Sin
6843240196 drivers: intc: plic: use per-instance spinlock
Instead of doing an `irq_lock()`, use per-instance spinlock instead.

Refactored out an unlocked version of `local_irq_is_enabled`
from `riscv_plic_irq_is_enabled()` to achieve that.

Signed-off-by: Yong Cong Sin <ycsin@meta.com>
2024-11-20 08:26:02 -05:00
Yong Cong Sin
ea23856336 drivers: intc: plic: remove incorrect arch_proc_id() usage
The `arch_proc_id()` returns the hartid of a CPU, which may not start
from zero. The way that it's used as an index to access `save_irq[]`
array is wrong, use `arch_curr_cpu()->id` instead.

Signed-off-by: Yong Cong Sin <ycsin@meta.com>
Signed-off-by: Yong Cong Sin <yongcong.sin@gmail.com>
2024-11-18 07:25:31 -05:00
Nils Bosbach
2506d599a3 drivers: interrupt_controller: do not set sgi type
The GICD_ICFGR0 register is read only because SGIs are always
edge-triggered.

Signed-off-by: Nils Bosbach <bosbach@ice.rwth-aachen.de>
2024-11-16 14:57:44 -05:00