aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Holland <samuel.holland@sifive.com>2024-10-25 11:59:47 -0700
committerAnup Patel <anup@brainfault.org>2024-11-11 18:18:35 +0530
commit693afc818feecdbddb75f5c9ec4b436d56f64208 (patch)
tree912ef53be729c41fcfb4cc0a7eddccb1e61cddfc
parentbe9752a071475ae1d9e58a2dfcb8e83185fb7ae5 (diff)
downloadopensbi-693afc818feecdbddb75f5c9ec4b436d56f64208.zip
opensbi-693afc818feecdbddb75f5c9ec4b436d56f64208.tar.gz
opensbi-693afc818feecdbddb75f5c9ec4b436d56f64208.tar.bz2
lib: sbi_ipi: Move initial IPI clear to sbi_ipi_init()
sbi_ipi_init() expects the platform warm init function to clear IPIs on the local hart, but there is already a generic function to do this. After this change, none of the existing drivers need a warm init callback. Signed-off-by: Samuel Holland <samuel.holland@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org>
-rw-r--r--include/sbi_utils/ipi/aclint_mswi.h2
-rw-r--r--include/sbi_utils/ipi/andes_plicsw.h2
-rw-r--r--lib/sbi/sbi_hsm.c2
-rw-r--r--lib/sbi/sbi_ipi.c8
-rw-r--r--lib/utils/ipi/aclint_mswi.c8
-rw-r--r--lib/utils/ipi/andes_plicsw.c8
-rw-r--r--lib/utils/ipi/fdt_ipi_mswi.c2
-rw-r--r--lib/utils/ipi/fdt_ipi_plicsw.c2
-rw-r--r--platform/fpga/ariane/platform.c2
-rw-r--r--platform/fpga/openpiton/platform.c2
-rw-r--r--platform/kendryte/k210/platform.c2
-rw-r--r--platform/nuclei/ux600/platform.c2
-rw-r--r--platform/template/platform.c2
13 files changed, 12 insertions, 32 deletions
diff --git a/include/sbi_utils/ipi/aclint_mswi.h b/include/sbi_utils/ipi/aclint_mswi.h
index e373a8c..4b8249f 100644
--- a/include/sbi_utils/ipi/aclint_mswi.h
+++ b/include/sbi_utils/ipi/aclint_mswi.h
@@ -26,8 +26,6 @@ struct aclint_mswi_data {
u32 hart_count;
};
-int aclint_mswi_warm_init(void);
-
int aclint_mswi_cold_init(struct aclint_mswi_data *mswi);
#endif
diff --git a/include/sbi_utils/ipi/andes_plicsw.h b/include/sbi_utils/ipi/andes_plicsw.h
index 0d18444..f6e1cae 100644
--- a/include/sbi_utils/ipi/andes_plicsw.h
+++ b/include/sbi_utils/ipi/andes_plicsw.h
@@ -32,8 +32,6 @@ struct plicsw_data {
uint32_t hart_count;
};
-int plicsw_warm_ipi_init(void);
-
int plicsw_cold_ipi_init(struct plicsw_data *plicsw);
#endif /* _IPI_ANDES_PLICSW_H_ */
diff --git a/lib/sbi/sbi_hsm.c b/lib/sbi/sbi_hsm.c
index 58a3379..a3d6947 100644
--- a/lib/sbi/sbi_hsm.c
+++ b/lib/sbi/sbi_hsm.c
@@ -178,7 +178,7 @@ static void sbi_hsm_hart_wait(struct sbi_scratch *scratch)
/*
* No need to clear IPI here because the sbi_ipi_init() will
- * clear it for current HART via sbi_platform_ipi_init().
+ * clear it for current HART.
*/
}
diff --git a/lib/sbi/sbi_ipi.c b/lib/sbi/sbi_ipi.c
index 33b4d9b..b39f03e 100644
--- a/lib/sbi/sbi_ipi.c
+++ b/lib/sbi/sbi_ipi.c
@@ -332,14 +332,14 @@ int sbi_ipi_init(struct sbi_scratch *scratch, bool cold_boot)
ipi_data = sbi_scratch_offset_ptr(scratch, ipi_data_off);
ipi_data->ipi_type = 0x00;
- /*
- * Initialize platform IPI support. This will also clear any
- * pending IPIs for current/calling HART.
- */
+ /* Initialize platform IPI support */
ret = sbi_platform_ipi_init(sbi_platform_ptr(scratch), cold_boot);
if (ret)
return ret;
+ /* Clear any pending IPIs for the current hart */
+ sbi_ipi_raw_clear();
+
/* Enable software interrupts */
csr_set(CSR_MIE, MIP_MSIP);
diff --git a/lib/utils/ipi/aclint_mswi.c b/lib/utils/ipi/aclint_mswi.c
index 2cd7a53..9e55078 100644
--- a/lib/utils/ipi/aclint_mswi.c
+++ b/lib/utils/ipi/aclint_mswi.c
@@ -66,14 +66,6 @@ static struct sbi_ipi_device aclint_mswi = {
.ipi_clear = mswi_ipi_clear
};
-int aclint_mswi_warm_init(void)
-{
- /* Clear IPI for current HART */
- mswi_ipi_clear();
-
- return 0;
-}
-
int aclint_mswi_cold_init(struct aclint_mswi_data *mswi)
{
u32 i;
diff --git a/lib/utils/ipi/andes_plicsw.c b/lib/utils/ipi/andes_plicsw.c
index 626699f..5d085d8 100644
--- a/lib/utils/ipi/andes_plicsw.c
+++ b/lib/utils/ipi/andes_plicsw.c
@@ -65,14 +65,6 @@ static struct sbi_ipi_device plicsw_ipi = {
.ipi_clear = plicsw_ipi_clear
};
-int plicsw_warm_ipi_init(void)
-{
- /* Clear PLICSW IPI */
- plicsw_ipi_clear();
-
- return 0;
-}
-
int plicsw_cold_ipi_init(struct plicsw_data *plicsw)
{
int rc;
diff --git a/lib/utils/ipi/fdt_ipi_mswi.c b/lib/utils/ipi/fdt_ipi_mswi.c
index c78dead..0133197 100644
--- a/lib/utils/ipi/fdt_ipi_mswi.c
+++ b/lib/utils/ipi/fdt_ipi_mswi.c
@@ -64,6 +64,6 @@ static const struct fdt_match ipi_mswi_match[] = {
struct fdt_ipi fdt_ipi_mswi = {
.match_table = ipi_mswi_match,
.cold_init = ipi_mswi_cold_init,
- .warm_init = aclint_mswi_warm_init,
+ .warm_init = NULL,
.exit = NULL,
};
diff --git a/lib/utils/ipi/fdt_ipi_plicsw.c b/lib/utils/ipi/fdt_ipi_plicsw.c
index 3288574..1fd6ba1 100644
--- a/lib/utils/ipi/fdt_ipi_plicsw.c
+++ b/lib/utils/ipi/fdt_ipi_plicsw.c
@@ -42,6 +42,6 @@ static const struct fdt_match ipi_plicsw_match[] = {
struct fdt_ipi fdt_ipi_plicsw = {
.match_table = ipi_plicsw_match,
.cold_init = fdt_plicsw_cold_ipi_init,
- .warm_init = plicsw_warm_ipi_init,
+ .warm_init = NULL,
.exit = NULL,
};
diff --git a/platform/fpga/ariane/platform.c b/platform/fpga/ariane/platform.c
index dfe170f..fb98aad 100644
--- a/platform/fpga/ariane/platform.c
+++ b/platform/fpga/ariane/platform.c
@@ -143,7 +143,7 @@ static int ariane_ipi_init(bool cold_boot)
return ret;
}
- return aclint_mswi_warm_init();
+ return 0;
}
/*
diff --git a/platform/fpga/openpiton/platform.c b/platform/fpga/openpiton/platform.c
index 2bfc15c..6c658be 100644
--- a/platform/fpga/openpiton/platform.c
+++ b/platform/fpga/openpiton/platform.c
@@ -174,7 +174,7 @@ static int openpiton_ipi_init(bool cold_boot)
return ret;
}
- return aclint_mswi_warm_init();
+ return 0;
}
/*
diff --git a/platform/kendryte/k210/platform.c b/platform/kendryte/k210/platform.c
index 06b7eb7..1c7bd11 100644
--- a/platform/kendryte/k210/platform.c
+++ b/platform/kendryte/k210/platform.c
@@ -156,7 +156,7 @@ static int k210_ipi_init(bool cold_boot)
return rc;
}
- return aclint_mswi_warm_init();
+ return 0;
}
static int k210_timer_init(void)
diff --git a/platform/nuclei/ux600/platform.c b/platform/nuclei/ux600/platform.c
index d4f309a..f3b7f98 100644
--- a/platform/nuclei/ux600/platform.c
+++ b/platform/nuclei/ux600/platform.c
@@ -212,7 +212,7 @@ static int ux600_ipi_init(bool cold_boot)
return rc;
}
- return aclint_mswi_warm_init();
+ return 0;
}
static int ux600_timer_init(void)
diff --git a/platform/template/platform.c b/platform/template/platform.c
index 1fc7b7b..d0f9f32 100644
--- a/platform/template/platform.c
+++ b/platform/template/platform.c
@@ -112,7 +112,7 @@ static int platform_ipi_init(bool cold_boot)
return ret;
}
- return aclint_mswi_warm_init();
+ return 0;
}
/*