diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h index e94ab37c..dc852a5c 100644 --- a/include/sbi/sbi_platform.h +++ b/include/sbi/sbi_platform.h @@ -111,10 +111,8 @@ struct sbi_platform_operations { /** Get platform specific mhpmevent value */ uint64_t (*pmu_xlate_to_mhpmevent)(uint32_t event_idx, uint64_t data); - /** Initialize the platform interrupt controller for current HART */ - int (*irqchip_init)(bool cold_boot); - /** Exit the platform interrupt controller for current HART */ - void (*irqchip_exit)(void); + /** Initialize the platform interrupt controller during cold boot */ + int (*irqchip_init)(void); /** Initialize IPI during cold boot */ int (*ipi_init)(void); @@ -543,32 +541,19 @@ static inline uint64_t sbi_platform_pmu_xlate_to_mhpmevent(const struct sbi_plat } /** - * Initialize the platform interrupt controller for current HART + * Initialize the platform interrupt controller during cold boot * * @param plat pointer to struct sbi_platform - * @param cold_boot whether cold boot (true) or warm_boot (false) * * @return 0 on success and negative error code on failure */ -static inline int sbi_platform_irqchip_init(const struct sbi_platform *plat, - bool cold_boot) +static inline int sbi_platform_irqchip_init(const struct sbi_platform *plat) { if (plat && sbi_platform_ops(plat)->irqchip_init) - return sbi_platform_ops(plat)->irqchip_init(cold_boot); + return sbi_platform_ops(plat)->irqchip_init(); return 0; } -/** - * Exit the platform interrupt controller for current HART - * - * @param plat pointer to struct sbi_platform - */ -static inline void sbi_platform_irqchip_exit(const struct sbi_platform *plat) -{ - if (plat && sbi_platform_ops(plat)->irqchip_exit) - sbi_platform_ops(plat)->irqchip_exit(); -} - /** * Initialize the platform IPI support during cold boot * diff --git a/include/sbi_utils/irqchip/fdt_irqchip.h b/include/sbi_utils/irqchip/fdt_irqchip.h index bc02c0c8..0ad00489 100644 --- a/include/sbi_utils/irqchip/fdt_irqchip.h +++ b/include/sbi_utils/irqchip/fdt_irqchip.h @@ -17,19 +17,13 @@ struct fdt_irqchip { const struct fdt_match *match_table; int (*cold_init)(const void *fdt, int nodeoff, const struct fdt_match *match); - int (*warm_init)(void); - void (*exit)(void); }; -void fdt_irqchip_exit(void); - -int fdt_irqchip_init(bool cold_boot); +int fdt_irqchip_init(void); #else -static inline void fdt_irqchip_exit(void) { } - -static inline int fdt_irqchip_init(bool cold_boot) { return 0; } +static inline int fdt_irqchip_init(void) { return 0; } #endif diff --git a/lib/sbi/sbi_irqchip.c b/lib/sbi/sbi_irqchip.c index 1aa18b8b..ab487d16 100644 --- a/lib/sbi/sbi_irqchip.c +++ b/lib/sbi/sbi_irqchip.c @@ -42,9 +42,11 @@ int sbi_irqchip_init(struct sbi_scratch *scratch, bool cold_boot) const struct sbi_platform *plat = sbi_platform_ptr(scratch); struct sbi_irqchip_device *dev; - rc = sbi_platform_irqchip_init(plat, cold_boot); - if (rc) - return rc; + if (cold_boot) { + rc = sbi_platform_irqchip_init(plat); + if (rc) + return rc; + } sbi_list_for_each_entry(dev, &irqchip_list, node) { if (!dev->warm_init) @@ -62,10 +64,6 @@ int sbi_irqchip_init(struct sbi_scratch *scratch, bool cold_boot) void sbi_irqchip_exit(struct sbi_scratch *scratch) { - const struct sbi_platform *plat = sbi_platform_ptr(scratch); - if (ext_irqfn != default_irqfn) csr_clear(CSR_MIE, MIP_MEIP); - - sbi_platform_irqchip_exit(plat); } diff --git a/lib/utils/irqchip/fdt_irqchip.c b/lib/utils/irqchip/fdt_irqchip.c index b4f054ae..2819540a 100644 --- a/lib/utils/irqchip/fdt_irqchip.c +++ b/lib/utils/irqchip/fdt_irqchip.c @@ -16,40 +16,8 @@ extern struct fdt_irqchip *fdt_irqchip_drivers[]; extern unsigned long fdt_irqchip_drivers_size; -#define FDT_IRQCHIP_MAX_DRIVERS 8 - -static struct fdt_irqchip *current_drivers[FDT_IRQCHIP_MAX_DRIVERS] = {0}; -static int current_drivers_count; - -void fdt_irqchip_exit(void) +int fdt_irqchip_init(void) { - int i; - - for (i = 0; i < current_drivers_count; i++) { - if (!current_drivers[i] || !current_drivers[i]->exit) - continue; - current_drivers[i]->exit(); - } -} - -static int fdt_irqchip_warm_init(void) -{ - int i, rc; - - for (i = 0; i < current_drivers_count; i++) { - if (!current_drivers[i] || !current_drivers[i]->warm_init) - continue; - rc = current_drivers[i]->warm_init(); - if (rc) - return rc; - } - - return 0; -} - -static int fdt_irqchip_cold_init(void) -{ - bool drv_added; int pos, noff, rc; struct fdt_irqchip *drv; const struct fdt_match *match; @@ -59,7 +27,6 @@ static int fdt_irqchip_cold_init(void) drv = fdt_irqchip_drivers[pos]; noff = -1; - drv_added = false; while ((noff = fdt_find_match(fdt, noff, drv->match_table, &match)) >= 0) { if (!fdt_node_is_enabled(fdt,noff)) @@ -72,30 +39,8 @@ static int fdt_irqchip_cold_init(void) if (rc) return rc; } - - if (drv_added) - continue; - - current_drivers[current_drivers_count++] = drv; - drv_added = true; } - - if (FDT_IRQCHIP_MAX_DRIVERS <= current_drivers_count) - break; } return 0; } - -int fdt_irqchip_init(bool cold_boot) -{ - int rc; - - if (cold_boot) { - rc = fdt_irqchip_cold_init(); - if (rc) - return rc; - } - - return fdt_irqchip_warm_init(); -} diff --git a/lib/utils/irqchip/fdt_irqchip_aplic.c b/lib/utils/irqchip/fdt_irqchip_aplic.c index ed6ccf12..532d8c48 100644 --- a/lib/utils/irqchip/fdt_irqchip_aplic.c +++ b/lib/utils/irqchip/fdt_irqchip_aplic.c @@ -49,6 +49,4 @@ static const struct fdt_match irqchip_aplic_match[] = { struct fdt_irqchip fdt_irqchip_aplic = { .match_table = irqchip_aplic_match, .cold_init = irqchip_aplic_cold_init, - .warm_init = NULL, - .exit = NULL, }; diff --git a/lib/utils/irqchip/fdt_irqchip_imsic.c b/lib/utils/irqchip/fdt_irqchip_imsic.c index 63be6007..40d63eb0 100644 --- a/lib/utils/irqchip/fdt_irqchip_imsic.c +++ b/lib/utils/irqchip/fdt_irqchip_imsic.c @@ -95,5 +95,4 @@ static const struct fdt_match irqchip_imsic_match[] = { struct fdt_irqchip fdt_irqchip_imsic = { .match_table = irqchip_imsic_match, .cold_init = irqchip_imsic_cold_init, - .warm_init = NULL, }; diff --git a/lib/utils/irqchip/fdt_irqchip_plic.c b/lib/utils/irqchip/fdt_irqchip_plic.c index 9066d745..a7388dcc 100644 --- a/lib/utils/irqchip/fdt_irqchip_plic.c +++ b/lib/utils/irqchip/fdt_irqchip_plic.c @@ -108,6 +108,4 @@ static const struct fdt_match irqchip_plic_match[] = { struct fdt_irqchip fdt_irqchip_plic = { .match_table = irqchip_plic_match, .cold_init = irqchip_plic_cold_init, - .warm_init = NULL, - .exit = NULL, }; diff --git a/platform/fpga/ariane/platform.c b/platform/fpga/ariane/platform.c index 720895ef..0b4455f1 100644 --- a/platform/fpga/ariane/platform.c +++ b/platform/fpga/ariane/platform.c @@ -98,19 +98,11 @@ static int ariane_final_init(bool cold_boot) } /* - * Initialize the ariane interrupt controller for current HART. + * Initialize the ariane interrupt controller during cold boot. */ -static int ariane_irqchip_init(bool cold_boot) +static int ariane_irqchip_init(void) { - int ret; - - if (cold_boot) { - ret = plic_cold_irqchip_init(&plic); - if (ret) - return ret; - } - - return 0; + return plic_cold_irqchip_init(&plic); } /* diff --git a/platform/fpga/openpiton/platform.c b/platform/fpga/openpiton/platform.c index 1c14c101..9f4378a4 100644 --- a/platform/fpga/openpiton/platform.c +++ b/platform/fpga/openpiton/platform.c @@ -131,19 +131,11 @@ static int openpiton_final_init(bool cold_boot) } /* - * Initialize the openpiton interrupt controller for current HART. + * Initialize the openpiton interrupt controller during cold boot. */ -static int openpiton_irqchip_init(bool cold_boot) +static int openpiton_irqchip_init(void) { - int ret; - - if (cold_boot) { - ret = plic_cold_irqchip_init(&plic); - if (ret) - return ret; - } - - return 0; + return plic_cold_irqchip_init(&plic); } /* diff --git a/platform/generic/platform.c b/platform/generic/platform.c index 3b20ffbe..768b9b68 100644 --- a/platform/generic/platform.c +++ b/platform/generic/platform.c @@ -419,7 +419,6 @@ const struct sbi_platform_operations platform_ops = { .extensions_init = generic_extensions_init, .domains_init = generic_domains_init, .irqchip_init = fdt_irqchip_init, - .irqchip_exit = fdt_irqchip_exit, .ipi_init = fdt_ipi_init, .pmu_init = generic_pmu_init, .pmu_xlate_to_mhpmevent = generic_pmu_xlate_to_mhpmevent, diff --git a/platform/kendryte/k210/platform.c b/platform/kendryte/k210/platform.c index f654325f..aff133c6 100644 --- a/platform/kendryte/k210/platform.c +++ b/platform/kendryte/k210/platform.c @@ -136,17 +136,9 @@ static int k210_final_init(bool cold_boot) return 0; } -static int k210_irqchip_init(bool cold_boot) +static int k210_irqchip_init(void) { - int rc; - - if (cold_boot) { - rc = plic_cold_irqchip_init(&plic); - if (rc) - return rc; - } - - return 0; + return plic_cold_irqchip_init(&plic); } static int k210_ipi_init(void) diff --git a/platform/nuclei/ux600/platform.c b/platform/nuclei/ux600/platform.c index 7b85f1f2..1b67b644 100644 --- a/platform/nuclei/ux600/platform.c +++ b/platform/nuclei/ux600/platform.c @@ -190,17 +190,9 @@ static int ux600_final_init(bool cold_boot) return 0; } -static int ux600_irqchip_init(bool cold_boot) +static int ux600_irqchip_init(void) { - int rc; - - if (cold_boot) { - rc = plic_cold_irqchip_init(&plic); - if (rc) - return rc; - } - - return 0; + return plic_cold_irqchip_init(&plic); } static int ux600_ipi_init(void) diff --git a/platform/template/platform.c b/platform/template/platform.c index c7af31ab..bc351bc9 100644 --- a/platform/template/platform.c +++ b/platform/template/platform.c @@ -87,20 +87,12 @@ static int platform_final_init(bool cold_boot) } /* - * Initialize the platform interrupt controller for current HART. + * Initialize the platform interrupt controller during cold boot. */ -static int platform_irqchip_init(bool cold_boot) +static int platform_irqchip_init(void) { - int ret; - /* Example if the generic PLIC driver is used */ - if (cold_boot) { - ret = plic_cold_irqchip_init(&plic); - if (ret) - return ret; - } - - return 0; + return plic_cold_irqchip_init(&plic); } /*