diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h index c6d30080..d75c12de 100644 --- a/include/sbi/sbi_platform.h +++ b/include/sbi/sbi_platform.h @@ -116,9 +116,6 @@ struct sbi_platform_operations { /** Initialize the platform interrupt controller during cold boot */ int (*irqchip_init)(void); - /** Initialize IPI during cold boot */ - int (*ipi_init)(void); - /** Get tlb flush limit value **/ u64 (*get_tlbr_flush_limit)(void); @@ -528,20 +525,6 @@ static inline int sbi_platform_irqchip_init(const struct sbi_platform *plat) return 0; } -/** - * Initialize the platform IPI support during cold boot - * - * @param plat pointer to struct sbi_platform - * - * @return 0 on success and negative error code on failure - */ -static inline int sbi_platform_ipi_init(const struct sbi_platform *plat) -{ - if (plat && sbi_platform_ops(plat)->ipi_init) - return sbi_platform_ops(plat)->ipi_init(); - return 0; -} - /** * Initialize the platform timer during cold boot * diff --git a/lib/sbi/sbi_ipi.c b/lib/sbi/sbi_ipi.c index 93018fe6..ed9ccffb 100644 --- a/lib/sbi/sbi_ipi.c +++ b/lib/sbi/sbi_ipi.c @@ -357,11 +357,6 @@ int sbi_ipi_init(struct sbi_scratch *scratch, bool cold_boot) if (ret < 0) return ret; ipi_halt_event = ret; - - /* Initialize platform IPI support */ - ret = sbi_platform_ipi_init(sbi_platform_ptr(scratch)); - if (ret) - return ret; } else { if (!ipi_data_off) return SBI_ENOMEM; diff --git a/platform/fpga/ariane/platform.c b/platform/fpga/ariane/platform.c index 4bc1c5be..1b6b052f 100644 --- a/platform/fpga/ariane/platform.c +++ b/platform/fpga/ariane/platform.c @@ -71,16 +71,22 @@ static struct aclint_mtimer_data mtimer = { */ static int ariane_early_init(bool cold_boot) { + int rc; + if (!cold_boot) return 0; - return uart8250_init(ARIANE_UART_ADDR, - ARIANE_UART_FREQ, - ARIANE_UART_BAUDRATE, - ARIANE_UART_REG_SHIFT, - ARIANE_UART_REG_WIDTH, - ARIANE_UART_REG_OFFSET, - ARIANE_UART_CAPS); + rc = uart8250_init(ARIANE_UART_ADDR, + ARIANE_UART_FREQ, + ARIANE_UART_BAUDRATE, + ARIANE_UART_REG_SHIFT, + ARIANE_UART_REG_WIDTH, + ARIANE_UART_REG_OFFSET, + ARIANE_UART_CAPS); + if (rc) + return rc; + + return aclint_mswi_cold_init(&mswi); } /* @@ -107,14 +113,6 @@ static int ariane_irqchip_init(void) return plic_cold_irqchip_init(&plic); } -/* - * Initialize IPI during cold boot. - */ -static int ariane_ipi_init(void) -{ - return aclint_mswi_cold_init(&mswi); -} - /* * Initialize ariane timer during cold boot. */ @@ -130,7 +128,6 @@ const struct sbi_platform_operations platform_ops = { .early_init = ariane_early_init, .final_init = ariane_final_init, .irqchip_init = ariane_irqchip_init, - .ipi_init = ariane_ipi_init, .timer_init = ariane_timer_init, }; diff --git a/platform/generic/openhwgroup/openpiton.c b/platform/generic/openhwgroup/openpiton.c index 9be7f9a4..3be66de6 100644 --- a/platform/generic/openhwgroup/openpiton.c +++ b/platform/generic/openhwgroup/openpiton.c @@ -104,11 +104,15 @@ static int openpiton_early_init(bool cold_boot) ACLINT_DEFAULT_MTIMECMP_OFFSET; } - return uart8250_init(uart.addr, uart.freq, uart.baud, - OPENPITON_DEFAULT_UART_REG_SHIFT, - OPENPITON_DEFAULT_UART_REG_WIDTH, - OPENPITON_DEFAULT_UART_REG_OFFSET, - OPENPITON_DEFAULT_UART_CAPS); + rc = uart8250_init(uart.addr, uart.freq, uart.baud, + OPENPITON_DEFAULT_UART_REG_SHIFT, + OPENPITON_DEFAULT_UART_REG_WIDTH, + OPENPITON_DEFAULT_UART_REG_OFFSET, + OPENPITON_DEFAULT_UART_CAPS); + if (rc) + return rc; + + return aclint_mswi_cold_init(&mswi); } /* @@ -135,14 +139,6 @@ static int openpiton_irqchip_init(void) return plic_cold_irqchip_init(&plic); } -/* - * Initialize IPI during cold boot. - */ -static int openpiton_ipi_init(void) -{ - return aclint_mswi_cold_init(&mswi); -} - /* * Initialize openpiton timer during cold boot. */ @@ -155,7 +151,6 @@ static int openhwgroup_openpiton_platform_init(const void *fdt, int nodeoff, con { generic_platform_ops.early_init = openpiton_early_init; generic_platform_ops.timer_init = openpiton_timer_init; - generic_platform_ops.ipi_init = openpiton_ipi_init; generic_platform_ops.irqchip_init = openpiton_irqchip_init; generic_platform_ops.final_init = openpiton_final_init; diff --git a/platform/generic/platform.c b/platform/generic/platform.c index 889d6905..8ba6bc11 100644 --- a/platform/generic/platform.c +++ b/platform/generic/platform.c @@ -229,6 +229,10 @@ int generic_early_init(bool cold_boot) return rc; fdt_driver_init_all(fdt, fdt_early_drivers); + + rc = fdt_ipi_init(); + if (rc) + return rc; } return 0; @@ -337,7 +341,6 @@ struct sbi_platform_operations generic_platform_ops = { .extensions_init = generic_extensions_init, .domains_init = generic_domains_init, .irqchip_init = fdt_irqchip_init, - .ipi_init = fdt_ipi_init, .pmu_init = generic_pmu_init, .pmu_xlate_to_mhpmevent = generic_pmu_xlate_to_mhpmevent, .get_tlbr_flush_limit = generic_tlbr_flush_limit, diff --git a/platform/kendryte/k210/platform.c b/platform/kendryte/k210/platform.c index aff133c6..65f5d497 100644 --- a/platform/kendryte/k210/platform.c +++ b/platform/kendryte/k210/platform.c @@ -112,13 +112,19 @@ static struct sbi_system_reset_device k210_reset = { static int k210_early_init(bool cold_boot) { + int rc; + if (!cold_boot) return 0; sbi_system_reset_add_device(&k210_reset); - return sifive_uart_init(K210_UART_BASE_ADDR, k210_get_clk_freq(), - K210_UART_BAUDRATE); + rc = sifive_uart_init(K210_UART_BASE_ADDR, k210_get_clk_freq(), + K210_UART_BAUDRATE); + if (rc) + return rc; + + return aclint_mswi_cold_init(&mswi); } static int k210_final_init(bool cold_boot) @@ -141,11 +147,6 @@ static int k210_irqchip_init(void) return plic_cold_irqchip_init(&plic); } -static int k210_ipi_init(void) -{ - return aclint_mswi_cold_init(&mswi); -} - static int k210_timer_init(void) { return aclint_mtimer_cold_init(&mtimer, NULL); @@ -158,8 +159,6 @@ const struct sbi_platform_operations platform_ops = { .irqchip_init = k210_irqchip_init, - .ipi_init = k210_ipi_init, - .timer_init = k210_timer_init, }; diff --git a/platform/nuclei/ux600/platform.c b/platform/nuclei/ux600/platform.c index 1b67b644..14fbaeb6 100644 --- a/platform/nuclei/ux600/platform.c +++ b/platform/nuclei/ux600/platform.c @@ -151,6 +151,7 @@ static struct sbi_system_reset_device ux600_reset = { static int ux600_early_init(bool cold_boot) { u32 regval; + int rc; if (!cold_boot) return 0; @@ -168,8 +169,12 @@ static int ux600_early_init(bool cold_boot) UX600_GPIO_IOF_UART0_MASK; writel(regval, (void *)(UX600_GPIO_ADDR + UX600_GPIO_IOF_EN_OFS)); - return sifive_uart_init(UX600_DEBUG_UART, ux600_clk_freq, - UX600_UART_BAUDRATE); + rc = sifive_uart_init(UX600_DEBUG_UART, ux600_clk_freq, + UX600_UART_BAUDRATE); + if (rc) + return rc; + + return aclint_mswi_cold_init(&mswi); } static void ux600_modify_dt(void *fdt) @@ -195,11 +200,6 @@ static int ux600_irqchip_init(void) return plic_cold_irqchip_init(&plic); } -static int ux600_ipi_init(void) -{ - return aclint_mswi_cold_init(&mswi); -} - static int ux600_timer_init(void) { return aclint_mtimer_cold_init(&mtimer, NULL); @@ -209,7 +209,6 @@ const struct sbi_platform_operations platform_ops = { .early_init = ux600_early_init, .final_init = ux600_final_init, .irqchip_init = ux600_irqchip_init, - .ipi_init = ux600_ipi_init, .timer_init = ux600_timer_init, }; diff --git a/platform/template/platform.c b/platform/template/platform.c index 292889d2..38be1b5c 100644 --- a/platform/template/platform.c +++ b/platform/template/platform.c @@ -70,12 +70,18 @@ static struct aclint_mtimer_data mtimer = { */ static int platform_early_init(bool cold_boot) { + int rc; + if (!cold_boot) return 0; /* Example if the generic UART8250 driver is used */ - return uart8250_init(PLATFORM_UART_ADDR, PLATFORM_UART_INPUT_FREQ, - PLATFORM_UART_BAUDRATE, 0, 1, 0, 0); + rc = uart8250_init(PLATFORM_UART_ADDR, PLATFORM_UART_INPUT_FREQ, + PLATFORM_UART_BAUDRATE, 0, 1, 0, 0); + if (rc) + return rc; + + return aclint_mswi_cold_init(&mswi); } /* @@ -95,15 +101,6 @@ static int platform_irqchip_init(void) return plic_cold_irqchip_init(&plic); } -/* - * Initialize IPI during cold boot. - */ -static int platform_ipi_init(void) -{ - /* Example if the generic ACLINT driver is used */ - return aclint_mswi_cold_init(&mswi); -} - /* * Initialize platform timer during cold boot. */ @@ -120,7 +117,6 @@ const struct sbi_platform_operations platform_ops = { .early_init = platform_early_init, .final_init = platform_final_init, .irqchip_init = platform_irqchip_init, - .ipi_init = platform_ipi_init, .timer_init = platform_timer_init }; const struct sbi_platform platform = {