Skip to content

Commit 38428c6

Browse files
youssefz24kartben
authored andcommitted
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>
1 parent 64ac64d commit 38428c6

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

drivers/interrupt_controller/intc_exti_stm32.c

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright (c) 2016 Open-RnD Sp. z o.o.
33
* Copyright (c) 2017 RnDity Sp. z o.o.
44
* Copyright (c) 2019-23 Linaro Limited
5+
* Copyright (C) 2025 Savoir-faire Linux, Inc.
56
*
67
* SPDX-License-Identifier: Apache-2.0
78
*/
@@ -60,7 +61,8 @@ static inline uint32_t stm32_exti_linenum_to_src_cfg_line(gpio_pin_t linenum)
6061
#if defined(CONFIG_SOC_SERIES_STM32L0X) || \
6162
defined(CONFIG_SOC_SERIES_STM32F0X)
6263
return ((linenum % 4 * 4) << 16) | (linenum / 4);
63-
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32g0_exti)
64+
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32g0_exti) || \
65+
defined(CONFIG_SOC_SERIES_STM32MP2X)
6466
return ((linenum & 0x3) << (16 + 3)) | (linenum >> 2);
6567
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
6668
/* Gives the LL_SBS_EXTI_LINEn corresponding to the line number */
@@ -82,6 +84,9 @@ static inline int stm32_exti_is_pending(stm32_gpio_irq_line_t line)
8284
LL_EXTI_IsActiveFallingFlag_0_31(line));
8385
#elif defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
8486
return LL_C2_EXTI_IsActiveFlag_0_31(line);
87+
#elif defined(CONFIG_SOC_SERIES_STM32MP2X)
88+
return LL_EXTI_IsActiveRisingFlag_0_31(EXTI2, line) ||
89+
LL_EXTI_IsActiveFallingFlag_0_31(EXTI2, line);
8590
#else
8691
return LL_EXTI_IsActiveFlag_0_31(line);
8792
#endif
@@ -99,6 +104,9 @@ static inline void stm32_exti_clear_pending(stm32_gpio_irq_line_t line)
99104
LL_EXTI_ClearFallingFlag_0_31(line);
100105
#elif defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
101106
LL_C2_EXTI_ClearFlag_0_31(line);
107+
#elif defined(CONFIG_SOC_SERIES_STM32MP2X)
108+
LL_EXTI_ClearRisingFlag_0_31(EXTI2, line);
109+
LL_EXTI_ClearFallingFlag_0_31(EXTI2, line);
102110
#else
103111
LL_EXTI_ClearFlag_0_31(line);
104112
#endif
@@ -269,6 +277,8 @@ void stm32_gpio_intc_enable_line(stm32_gpio_irq_line_t line)
269277
/* Enable requested line interrupt */
270278
#if defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
271279
LL_C2_EXTI_EnableIT_0_31(line);
280+
#elif defined(CONFIG_SOC_SERIES_STM32MP2X)
281+
LL_C2_EXTI_EnableIT_0_31(EXTI2, line);
272282
#else
273283
LL_EXTI_EnableIT_0_31(line);
274284
#endif
@@ -281,6 +291,8 @@ void stm32_gpio_intc_disable_line(stm32_gpio_irq_line_t line)
281291
{
282292
#if defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
283293
LL_C2_EXTI_DisableIT_0_31(line);
294+
#elif defined(CONFIG_SOC_SERIES_STM32MP2X)
295+
LL_C2_EXTI_DisableIT_0_31(EXTI2, line);
284296
#else
285297
LL_EXTI_DisableIT_0_31(line);
286298
#endif
@@ -291,6 +303,24 @@ void stm32_gpio_intc_select_line_trigger(stm32_gpio_irq_line_t line, uint32_t tr
291303
z_stm32_hsem_lock(CFG_HW_EXTI_SEMID, HSEM_LOCK_DEFAULT_RETRY);
292304

293305
switch (trg) {
306+
#if defined(CONFIG_SOC_SERIES_STM32MP2X)
307+
case STM32_GPIO_IRQ_TRIG_NONE:
308+
LL_EXTI_DisableRisingTrig_0_31(EXTI2, line);
309+
LL_EXTI_DisableFallingTrig_0_31(EXTI2, line);
310+
break;
311+
case STM32_GPIO_IRQ_TRIG_RISING:
312+
LL_EXTI_EnableRisingTrig_0_31(EXTI2, line);
313+
LL_EXTI_DisableFallingTrig_0_31(EXTI2, line);
314+
break;
315+
case STM32_GPIO_IRQ_TRIG_FALLING:
316+
LL_EXTI_EnableFallingTrig_0_31(EXTI2, line);
317+
LL_EXTI_DisableRisingTrig_0_31(EXTI2, line);
318+
break;
319+
case STM32_GPIO_IRQ_TRIG_BOTH:
320+
LL_EXTI_EnableRisingTrig_0_31(EXTI2, line);
321+
LL_EXTI_EnableFallingTrig_0_31(EXTI2, line);
322+
break;
323+
#else /* CONFIG_SOC_SERIES_STM32MP2X */
294324
case STM32_GPIO_IRQ_TRIG_NONE:
295325
LL_EXTI_DisableRisingTrig_0_31(line);
296326
LL_EXTI_DisableFallingTrig_0_31(line);
@@ -307,6 +337,7 @@ void stm32_gpio_intc_select_line_trigger(stm32_gpio_irq_line_t line, uint32_t tr
307337
LL_EXTI_EnableRisingTrig_0_31(line);
308338
LL_EXTI_EnableFallingTrig_0_31(line);
309339
break;
340+
#endif /* CONFIG_SOC_SERIES_STM32MP2X */
310341
default:
311342
__ASSERT_NO_MSG(0);
312343
break;
@@ -369,6 +400,8 @@ void stm32_exti_set_line_src_port(gpio_pin_t line, uint32_t port)
369400
LL_EXTI_SetEXTISource(port, ll_line);
370401
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
371402
LL_SBS_SetEXTISource(port, ll_line);
403+
#elif defined(CONFIG_SOC_SERIES_STM32MP2X)
404+
LL_EXTI_SetEXTISource(EXTI2, port, ll_line);
372405
#else
373406
LL_SYSCFG_SetEXTISource(port, ll_line);
374407
#endif
@@ -386,6 +419,8 @@ uint32_t stm32_exti_get_line_src_port(gpio_pin_t line)
386419
port = LL_EXTI_GetEXTISource(ll_line);
387420
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
388421
port = LL_SBS_GetEXTISource(ll_line);
422+
#elif defined(CONFIG_SOC_SERIES_STM32MP2X)
423+
port = LL_EXTI_GetEXTISource(EXTI2, ll_line);
389424
#else
390425
port = LL_SYSCFG_GetEXTISource(ll_line);
391426
#endif

dts/arm/st/mp2/stm32mp2_m33.dtsi

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,27 @@
3535
#clock-cells = <2>;
3636
reg = <0x44200000 DT_SIZE_K(64)>;
3737
};
38+
39+
exti2: interrupt-controller@46230000 {
40+
compatible = "st,stm32-exti";
41+
interrupt-controller;
42+
#interrupt-cells = <1>;
43+
#address-cells = <1>;
44+
reg = <0x46230000 DT_SIZE_K(1)>;
45+
num-lines = <16>;
46+
interrupts = <17 0>, <18 0>, <19 0>, <20 0>,
47+
<21 0>, <22 0>, <23 0>, <24 0>,
48+
<25 0>, <26 0>, <27 0>, <28 0>,
49+
<29 0>, <30 0>, <31 0>, <32 0>;
50+
interrupt-names = "line0", "line1", "line2", "line3",
51+
"line4", "line5", "line6", "line7",
52+
"line8", "line9", "line10", "line11",
53+
"line12", "line13", "line14", "line15";
54+
line-ranges = <0 1>, <1 1>, <2 1>, <3 1>,
55+
<4 1>, <5 1>, <6 1>, <7 1>,
56+
<8 1>, <9 1>, <10 1>, <11 1>,
57+
<12 1>, <13 1>, <14 1>, <15 1>;
58+
};
3859
};
3960
};
4061

0 commit comments

Comments
 (0)