summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/sbi/sbi_platform.h25
-rw-r--r--include/sbi_utils/irqchip/fdt_irqchip.h10
-rw-r--r--lib/sbi/sbi_irqchip.c12
-rw-r--r--lib/utils/irqchip/fdt_irqchip.c57
-rw-r--r--lib/utils/irqchip/fdt_irqchip_aplic.c2
-rw-r--r--lib/utils/irqchip/fdt_irqchip_imsic.c1
-rw-r--r--lib/utils/irqchip/fdt_irqchip_plic.c2
-rw-r--r--platform/fpga/ariane/platform.c14
-rw-r--r--platform/fpga/openpiton/platform.c14
-rw-r--r--platform/generic/platform.c1
-rw-r--r--platform/kendryte/k210/platform.c12
-rw-r--r--platform/nuclei/ux600/platform.c12
-rw-r--r--platform/template/platform.c14
13 files changed, 26 insertions, 150 deletions
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,33 +541,20 @@ 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
*
* @param plat pointer to struct sbi_platform
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 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)
+int fdt_irqchip_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);
}
/*