@@ -265,6 +265,18 @@ LOG_MODULE_REGISTER(nxp_irqstr);
265
265
#define DISPATCHER_REGMAP (disp ) \
266
266
(((const struct irqsteer_config *)disp->dev->config)->regmap_phys)
267
267
268
+ #if defined(CONFIG_XTENSA )
269
+ #define irqsteer_level1_irq_enable (irq ) xtensa_irq_enable(XTENSA_IRQ_NUMBER(irq))
270
+ #define irqsteer_level1_irq_disable (irq ) xtensa_irq_disable(XTENSA_IRQ_NUMBER(irq))
271
+ #define irqsteer_level1_irq_is_enabled (irq ) xtensa_irq_is_enabled(XTENSA_IRQ_NUMBER(irq))
272
+ #elif defined(CONFIG_ARM )
273
+ #define irqsteer_level1_irq_enable (irq ) arm_irq_enable(irq)
274
+ #define irqsteer_level1_irq_disable (irq ) arm_irq_disable(irq)
275
+ #define irqsteer_level1_irq_is_enabled (irq ) arm_irq_is_enabled(irq)
276
+ #else
277
+ #error ARCH not supported
278
+ #endif
279
+
268
280
struct irqsteer_config {
269
281
uint32_t regmap_phys ;
270
282
uint32_t regmap_size ;
@@ -336,13 +348,11 @@ static void _irqstr_disp_enable_disable(struct irqsteer_dispatcher *disp,
336
348
uint32_t regmap = DISPATCHER_REGMAP (disp );
337
349
338
350
if (enable ) {
339
- xtensa_irq_enable (XTENSA_IRQ_NUMBER (disp -> irq ));
340
-
351
+ irqsteer_level1_irq_enable (disp -> irq );
341
352
IRQSTEER_EnableMasterInterrupt (UINT_TO_IRQSTEER (regmap ), disp -> irq );
342
353
} else {
343
354
IRQSTEER_DisableMasterInterrupt (UINT_TO_IRQSTEER (regmap ), disp -> irq );
344
-
345
- xtensa_irq_disable (XTENSA_IRQ_NUMBER (disp -> irq ));
355
+ irqsteer_level1_irq_disable (disp -> irq );
346
356
}
347
357
}
348
358
@@ -467,9 +477,9 @@ void z_soc_irq_enable_disable(uint32_t irq, bool enable)
467
477
if (irq_get_level (irq ) == 1 ) {
468
478
/* LEVEL 1 interrupts are DSP direct */
469
479
if (enable ) {
470
- xtensa_irq_enable ( XTENSA_IRQ_NUMBER ( irq ) );
480
+ irqsteer_level1_irq_enable ( irq );
471
481
} else {
472
- xtensa_irq_disable ( XTENSA_IRQ_NUMBER ( irq ) );
482
+ irqsteer_level1_irq_disable ( irq );
473
483
}
474
484
return ;
475
485
}
@@ -513,8 +523,7 @@ int z_soc_irq_is_enabled(unsigned int irq)
513
523
bool enabled ;
514
524
515
525
if (irq_get_level (irq ) == 1 ) {
516
- /* LEVEL 1 interrupts are DSP direct */
517
- return xtensa_irq_is_enabled (XTENSA_IRQ_NUMBER (irq ));
526
+ return irqsteer_level1_irq_is_enabled (irq );
518
527
}
519
528
520
529
parent_irq = irq_parent_level_2 (irq );
@@ -538,6 +547,18 @@ int z_soc_irq_is_enabled(unsigned int irq)
538
547
return false;
539
548
}
540
549
550
+ #if defined(CONFIG_ARM )
551
+ void z_soc_irq_priority_set (unsigned int irq , unsigned int prio , unsigned int flags )
552
+ {
553
+ uint32_t level1_irq = irq ;
554
+
555
+ if (irq_get_level (irq ) != 1 ) {
556
+ level1_irq = irq_parent_level_2 (irq );
557
+ }
558
+
559
+ arm_irq_priority_set (level1_irq , prio , flags );
560
+ }
561
+ #endif
541
562
542
563
static void irqsteer_isr_dispatcher (const void * data )
543
564
{
0 commit comments