include: sbi: Remove platform specific IPI init

The platform specfic IPI init is not need anymore because using
IPI device rating multiple IPI devices can be registered in any
order as part of the platform specific early init.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
Reviewed-by: Samuel Holland <samuel.holland@sifive.com>
Tested-by: Nick Hu <nick.hu@sifive.com>
Link: https://lore.kernel.org/r/20250904052410.546818-3-apatel@ventanamicro.com
Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
Anup Patel
2025-09-04 10:54:09 +05:30
committed by Anup Patel
parent ee92afa638
commit 85f22b38c8
8 changed files with 49 additions and 82 deletions

View File

@@ -116,9 +116,6 @@ struct sbi_platform_operations {
/** Initialize the platform interrupt controller during cold boot */ /** Initialize the platform interrupt controller during cold boot */
int (*irqchip_init)(void); int (*irqchip_init)(void);
/** Initialize IPI during cold boot */
int (*ipi_init)(void);
/** Get tlb flush limit value **/ /** Get tlb flush limit value **/
u64 (*get_tlbr_flush_limit)(void); u64 (*get_tlbr_flush_limit)(void);
@@ -528,20 +525,6 @@ static inline int sbi_platform_irqchip_init(const struct sbi_platform *plat)
return 0; 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 * Initialize the platform timer during cold boot
* *

View File

@@ -357,11 +357,6 @@ int sbi_ipi_init(struct sbi_scratch *scratch, bool cold_boot)
if (ret < 0) if (ret < 0)
return ret; return ret;
ipi_halt_event = ret; ipi_halt_event = ret;
/* Initialize platform IPI support */
ret = sbi_platform_ipi_init(sbi_platform_ptr(scratch));
if (ret)
return ret;
} else { } else {
if (!ipi_data_off) if (!ipi_data_off)
return SBI_ENOMEM; return SBI_ENOMEM;

View File

@@ -71,16 +71,22 @@ static struct aclint_mtimer_data mtimer = {
*/ */
static int ariane_early_init(bool cold_boot) static int ariane_early_init(bool cold_boot)
{ {
int rc;
if (!cold_boot) if (!cold_boot)
return 0; return 0;
return uart8250_init(ARIANE_UART_ADDR, rc = uart8250_init(ARIANE_UART_ADDR,
ARIANE_UART_FREQ, ARIANE_UART_FREQ,
ARIANE_UART_BAUDRATE, ARIANE_UART_BAUDRATE,
ARIANE_UART_REG_SHIFT, ARIANE_UART_REG_SHIFT,
ARIANE_UART_REG_WIDTH, ARIANE_UART_REG_WIDTH,
ARIANE_UART_REG_OFFSET, ARIANE_UART_REG_OFFSET,
ARIANE_UART_CAPS); 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); 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. * Initialize ariane timer during cold boot.
*/ */
@@ -130,7 +128,6 @@ const struct sbi_platform_operations platform_ops = {
.early_init = ariane_early_init, .early_init = ariane_early_init,
.final_init = ariane_final_init, .final_init = ariane_final_init,
.irqchip_init = ariane_irqchip_init, .irqchip_init = ariane_irqchip_init,
.ipi_init = ariane_ipi_init,
.timer_init = ariane_timer_init, .timer_init = ariane_timer_init,
}; };

View File

@@ -104,11 +104,15 @@ static int openpiton_early_init(bool cold_boot)
ACLINT_DEFAULT_MTIMECMP_OFFSET; ACLINT_DEFAULT_MTIMECMP_OFFSET;
} }
return uart8250_init(uart.addr, uart.freq, uart.baud, rc = uart8250_init(uart.addr, uart.freq, uart.baud,
OPENPITON_DEFAULT_UART_REG_SHIFT, OPENPITON_DEFAULT_UART_REG_SHIFT,
OPENPITON_DEFAULT_UART_REG_WIDTH, OPENPITON_DEFAULT_UART_REG_WIDTH,
OPENPITON_DEFAULT_UART_REG_OFFSET, OPENPITON_DEFAULT_UART_REG_OFFSET,
OPENPITON_DEFAULT_UART_CAPS); 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); 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. * 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.early_init = openpiton_early_init;
generic_platform_ops.timer_init = openpiton_timer_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.irqchip_init = openpiton_irqchip_init;
generic_platform_ops.final_init = openpiton_final_init; generic_platform_ops.final_init = openpiton_final_init;

View File

@@ -229,6 +229,10 @@ int generic_early_init(bool cold_boot)
return rc; return rc;
fdt_driver_init_all(fdt, fdt_early_drivers); fdt_driver_init_all(fdt, fdt_early_drivers);
rc = fdt_ipi_init();
if (rc)
return rc;
} }
return 0; return 0;
@@ -337,7 +341,6 @@ struct sbi_platform_operations generic_platform_ops = {
.extensions_init = generic_extensions_init, .extensions_init = generic_extensions_init,
.domains_init = generic_domains_init, .domains_init = generic_domains_init,
.irqchip_init = fdt_irqchip_init, .irqchip_init = fdt_irqchip_init,
.ipi_init = fdt_ipi_init,
.pmu_init = generic_pmu_init, .pmu_init = generic_pmu_init,
.pmu_xlate_to_mhpmevent = generic_pmu_xlate_to_mhpmevent, .pmu_xlate_to_mhpmevent = generic_pmu_xlate_to_mhpmevent,
.get_tlbr_flush_limit = generic_tlbr_flush_limit, .get_tlbr_flush_limit = generic_tlbr_flush_limit,

View File

@@ -112,13 +112,19 @@ static struct sbi_system_reset_device k210_reset = {
static int k210_early_init(bool cold_boot) static int k210_early_init(bool cold_boot)
{ {
int rc;
if (!cold_boot) if (!cold_boot)
return 0; return 0;
sbi_system_reset_add_device(&k210_reset); sbi_system_reset_add_device(&k210_reset);
return sifive_uart_init(K210_UART_BASE_ADDR, k210_get_clk_freq(), rc = sifive_uart_init(K210_UART_BASE_ADDR, k210_get_clk_freq(),
K210_UART_BAUDRATE); K210_UART_BAUDRATE);
if (rc)
return rc;
return aclint_mswi_cold_init(&mswi);
} }
static int k210_final_init(bool cold_boot) static int k210_final_init(bool cold_boot)
@@ -141,11 +147,6 @@ static int k210_irqchip_init(void)
return plic_cold_irqchip_init(&plic); return plic_cold_irqchip_init(&plic);
} }
static int k210_ipi_init(void)
{
return aclint_mswi_cold_init(&mswi);
}
static int k210_timer_init(void) static int k210_timer_init(void)
{ {
return aclint_mtimer_cold_init(&mtimer, NULL); return aclint_mtimer_cold_init(&mtimer, NULL);
@@ -158,8 +159,6 @@ const struct sbi_platform_operations platform_ops = {
.irqchip_init = k210_irqchip_init, .irqchip_init = k210_irqchip_init,
.ipi_init = k210_ipi_init,
.timer_init = k210_timer_init, .timer_init = k210_timer_init,
}; };

View File

@@ -151,6 +151,7 @@ static struct sbi_system_reset_device ux600_reset = {
static int ux600_early_init(bool cold_boot) static int ux600_early_init(bool cold_boot)
{ {
u32 regval; u32 regval;
int rc;
if (!cold_boot) if (!cold_boot)
return 0; return 0;
@@ -168,8 +169,12 @@ static int ux600_early_init(bool cold_boot)
UX600_GPIO_IOF_UART0_MASK; UX600_GPIO_IOF_UART0_MASK;
writel(regval, (void *)(UX600_GPIO_ADDR + UX600_GPIO_IOF_EN_OFS)); writel(regval, (void *)(UX600_GPIO_ADDR + UX600_GPIO_IOF_EN_OFS));
return sifive_uart_init(UX600_DEBUG_UART, ux600_clk_freq, rc = sifive_uart_init(UX600_DEBUG_UART, ux600_clk_freq,
UX600_UART_BAUDRATE); UX600_UART_BAUDRATE);
if (rc)
return rc;
return aclint_mswi_cold_init(&mswi);
} }
static void ux600_modify_dt(void *fdt) static void ux600_modify_dt(void *fdt)
@@ -195,11 +200,6 @@ static int ux600_irqchip_init(void)
return plic_cold_irqchip_init(&plic); return plic_cold_irqchip_init(&plic);
} }
static int ux600_ipi_init(void)
{
return aclint_mswi_cold_init(&mswi);
}
static int ux600_timer_init(void) static int ux600_timer_init(void)
{ {
return aclint_mtimer_cold_init(&mtimer, NULL); return aclint_mtimer_cold_init(&mtimer, NULL);
@@ -209,7 +209,6 @@ const struct sbi_platform_operations platform_ops = {
.early_init = ux600_early_init, .early_init = ux600_early_init,
.final_init = ux600_final_init, .final_init = ux600_final_init,
.irqchip_init = ux600_irqchip_init, .irqchip_init = ux600_irqchip_init,
.ipi_init = ux600_ipi_init,
.timer_init = ux600_timer_init, .timer_init = ux600_timer_init,
}; };

View File

@@ -70,12 +70,18 @@ static struct aclint_mtimer_data mtimer = {
*/ */
static int platform_early_init(bool cold_boot) static int platform_early_init(bool cold_boot)
{ {
int rc;
if (!cold_boot) if (!cold_boot)
return 0; return 0;
/* Example if the generic UART8250 driver is used */ /* Example if the generic UART8250 driver is used */
return uart8250_init(PLATFORM_UART_ADDR, PLATFORM_UART_INPUT_FREQ, rc = uart8250_init(PLATFORM_UART_ADDR, PLATFORM_UART_INPUT_FREQ,
PLATFORM_UART_BAUDRATE, 0, 1, 0, 0); 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); 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. * Initialize platform timer during cold boot.
*/ */
@@ -120,7 +117,6 @@ const struct sbi_platform_operations platform_ops = {
.early_init = platform_early_init, .early_init = platform_early_init,
.final_init = platform_final_init, .final_init = platform_final_init,
.irqchip_init = platform_irqchip_init, .irqchip_init = platform_irqchip_init,
.ipi_init = platform_ipi_init,
.timer_init = platform_timer_init .timer_init = platform_timer_init
}; };
const struct sbi_platform platform = { const struct sbi_platform platform = {