aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSamuel Holland <samuel.holland@sifive.com>2024-11-04 20:10:09 -0800
committerAnup Patel <anup@brainfault.org>2024-11-28 11:46:36 +0530
commit678f5909a3fe54d528276f9afce5dd3148e42cbf (patch)
treebd3377085a71ed54c2e80a3a0a98a3cff24185cc /lib
parent2dd6eaf680556e763a85b0b4ae180391e2671854 (diff)
downloadopensbi-678f5909a3fe54d528276f9afce5dd3148e42cbf.zip
opensbi-678f5909a3fe54d528276f9afce5dd3148e42cbf.tar.gz
opensbi-678f5909a3fe54d528276f9afce5dd3148e42cbf.tar.bz2
platform: Drop irqchip warm init and exit hooks
Now that driver lifecycle is managed from within the SBI irqchip core, platforms need only to initialize the driver once during cold init. Remove the remaining platform hooks that are no longer used. Signed-off-by: Samuel Holland <samuel.holland@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org>
Diffstat (limited to 'lib')
-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
5 files changed, 6 insertions, 68 deletions
diff --git a/lib/sbi/sbi_irqchip.c b/lib/sbi/sbi_irqchip.c
index 1aa18b8..ab487d1 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 b4f054a..2819540 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 ed6ccf1..532d8c4 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 63be600..40d63eb 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 9066d74..a7388dc 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,
};