From a3ceeda819efc8179fe1a65496fa181b2bd259ed Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Fri, 11 Jul 2025 09:25:23 +0800 Subject: [PATCH 1/3] [DM/PIC] Import DM Kconfig Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/pic/Kconfig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/drivers/pic/Kconfig b/components/drivers/pic/Kconfig index 3cf00c02956..448818fab7c 100755 --- a/components/drivers/pic/Kconfig +++ b/components/drivers/pic/Kconfig @@ -55,3 +55,7 @@ config RT_PIC_ARM_GIC_MAX_NR depends on RT_PIC_ARM_GIC default 2 if SOC_REALVIEW default 1 + +if RT_USING_PIC + osource "$(SOC_DM_PIC_DIR)/Kconfig" +endif From 89d3ee25fecee16659f36414ab42b1c6f08ece74 Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Fri, 11 Jul 2025 09:26:13 +0800 Subject: [PATCH 2/3] [DM/PIC] Config IPI by RT_MAX_IPI Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/include/drivers/core/dm.h | 4 ++++ components/drivers/pic/pic-gic-common.c | 18 +++++++----------- components/drivers/pic/pic.c | 15 +++------------ 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/components/drivers/include/drivers/core/dm.h b/components/drivers/include/drivers/core/dm.h index 4c110ca7eb1..b6cd70dcbab 100644 --- a/components/drivers/include/drivers/core/dm.h +++ b/components/drivers/include/drivers/core/dm.h @@ -27,6 +27,10 @@ extern int rt_hw_cpu_id(void); #endif +#ifndef RT_MAX_IPI +#define RT_MAX_IPI 0 +#endif + void rt_dm_secondary_cpu_init(void); /* ID Allocation */ diff --git a/components/drivers/pic/pic-gic-common.c b/components/drivers/pic/pic-gic-common.c index 69ad804a2af..edfbafd195d 100644 --- a/components/drivers/pic/pic-gic-common.c +++ b/components/drivers/pic/pic-gic-common.c @@ -62,20 +62,16 @@ void gic_common_init_quirk_hw(rt_uint32_t iidr, const struct gic_quirk *quirks, void gic_common_sgi_config(void *base, void *data, int irq_base) { #ifdef RT_USING_SMP - if (irq_base < 2) + if (irq_base < RT_MAX_IPI) { struct rt_pic_irq *pirq; -#define DECLARE_GIC_IPI(ipi, hwirq) \ - rt_pic_config_ipi(data, ipi, hwirq); \ - pirq = rt_pic_find_ipi(data, ipi); \ - pirq->mode = RT_IRQ_MODE_EDGE_RISING; \ - - DECLARE_GIC_IPI(RT_SCHEDULE_IPI, RT_SCHEDULE_IPI); - DECLARE_GIC_IPI(RT_STOP_IPI, RT_STOP_IPI); - DECLARE_GIC_IPI(RT_SMP_CALL_IPI, RT_SMP_CALL_IPI); - -#undef DECLARE_GIC_IPI + for (int ipi = 0; ipi < RT_MAX_IPI; ++ipi) + { + rt_pic_config_ipi(data, ipi, ipi); + pirq = rt_pic_find_ipi(data, ipi); + pirq->mode = RT_IRQ_MODE_EDGE_RISING; + } } #endif /* RT_USING_SMP */ } diff --git a/components/drivers/pic/pic.c b/components/drivers/pic/pic.c index 6a611ceab0f..10dd948a591 100644 --- a/components/drivers/pic/pic.c +++ b/components/drivers/pic/pic.c @@ -28,17 +28,8 @@ struct irq_traps rt_bool_t (*handler)(void *); }; -static int _ipi_hash[] = -{ -#ifdef RT_USING_SMP - [RT_SCHEDULE_IPI] = RT_SCHEDULE_IPI, - [RT_STOP_IPI] = RT_STOP_IPI, - [RT_SMP_CALL_IPI] = RT_SMP_CALL_IPI, -#endif -}; - /* reserved ipi */ -static int _pirq_hash_idx = RT_ARRAY_SIZE(_ipi_hash); +static int _pirq_hash_idx = RT_MAX_IPI; static struct rt_pic_irq _pirq_hash[MAX_HANDLERS] = { [0 ... MAX_HANDLERS - 1] = @@ -230,7 +221,7 @@ int rt_pic_config_ipi(struct rt_pic *pic, int ipi_index, int hwirq) int ipi = ipi_index; struct rt_pic_irq *pirq; - if (pic && ipi < RT_ARRAY_SIZE(_ipi_hash) && hwirq >= 0 && pic->ops->irq_send_ipi) + if (pic && ipi < RT_MAX_IPI && hwirq >= 0 && pic->ops->irq_send_ipi) { pirq = &_pirq_hash[ipi]; config_pirq(pic, pirq, ipi, hwirq); @@ -281,7 +272,7 @@ struct rt_pic_irq *rt_pic_find_ipi(struct rt_pic *pic, int ipi_index) { struct rt_pic_irq *pirq = &_pirq_hash[ipi_index]; - RT_ASSERT(ipi_index < RT_ARRAY_SIZE(_ipi_hash)); + RT_ASSERT(ipi_index < RT_MAX_IPI); RT_ASSERT(pirq->pic == pic); return pirq; From a58d3941ee94f106a8b07a48f835151323c19a5f Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Fri, 11 Jul 2025 09:27:59 +0800 Subject: [PATCH 3/3] [DM/PIC] Fixup the interrput info list format Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/pic/pic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/drivers/pic/pic.c b/components/drivers/pic/pic.c index 10dd948a591..66834944287 100644 --- a/components/drivers/pic/pic.c +++ b/components/drivers/pic/pic.c @@ -1281,7 +1281,7 @@ static int list_irq(int argc, char**argv) #ifdef RT_USING_SMP rt_kputs(cpumask); #endif - rt_kprintf("%-10d ", repeat_isr->action.counter); + rt_kprintf(" %-10d ", repeat_isr->action.counter); rt_kprintf("%-*.s", 10, repeat_isr->action.name); #ifdef RT_USING_SMP for (int cpuid = 0; cpuid < RT_CPUS_NR; cpuid++)