summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2021-09-21 17:53:09 -0700
committerJulius Werner <jwerner@chromium.org>2021-10-01 00:01:56 +0000
commitb5e7bd2a58c0ae2c580eb53a3c154e40114f2db4 (patch)
treec84b7f5d01fecdd688d0e66627b0d68528458c8b /src
parentee760b4be8a204cfb65767a5ccd6be830380b518 (diff)
drivers/gic: Remove unnecessary code
On AArch64 platforms, GIC initialization is generally the job of Trusted Firmware and shouldn't be necessary in coreboot. Only the ancient T210 platform (which was started before we had decided on using Trusted Firmware) calls this code, and even there they have a comment wondering "do we still need this?". I'm just gonna assume (without testing because that board is ancient and I'm lazy) that they don't, and that the TF GIC initialization[1] is sufficient here. Remove this obsolete driver. [1] https://review.trustedfirmware.org/plugins/gitiles/TF-A/trusted-firmware-a/+/3ff448/plat/nvidia/tegra/soc/t210/plat_setup.c#259 Signed-off-by: Julius Werner <jwerner@chromium.org> Change-Id: I3e9d90039dd27cb3a13f830ba21fc5cc7a70abe2 Reviewed-on: https://review.coreboot.org/c/coreboot/+/57818 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/drivers/gic/Kconfig4
-rw-r--r--src/drivers/gic/Makefile.inc1
-rw-r--r--src/drivers/gic/gic.c148
-rw-r--r--src/drivers/gic/gic.h61
-rw-r--r--src/include/gic.h26
-rw-r--r--src/soc/nvidia/tegra210/Kconfig1
-rw-r--r--src/soc/nvidia/tegra210/Makefile.inc1
-rw-r--r--src/soc/nvidia/tegra210/gic.c14
-rw-r--r--src/soc/nvidia/tegra210/ramstage.c4
9 files changed, 0 insertions, 260 deletions
diff --git a/src/drivers/gic/Kconfig b/src/drivers/gic/Kconfig
deleted file mode 100644
index 193311fc05..0000000000
--- a/src/drivers/gic/Kconfig
+++ /dev/null
@@ -1,4 +0,0 @@
-config GIC
- def_bool n
- help
- This option enables GIC support, the ARM generic interrupt controller.
diff --git a/src/drivers/gic/Makefile.inc b/src/drivers/gic/Makefile.inc
deleted file mode 100644
index 51e3e199e2..0000000000
--- a/src/drivers/gic/Makefile.inc
+++ /dev/null
@@ -1 +0,0 @@
-ramstage-$(CONFIG_GIC) += gic.c
diff --git a/src/drivers/gic/gic.c b/src/drivers/gic/gic.c
deleted file mode 100644
index 610c0b8e89..0000000000
--- a/src/drivers/gic/gic.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <arch/cpu.h>
-#include <device/mmio.h>
-#include <console/console.h>
-#include <gic.h>
-#include <stddef.h>
-#include "gic.h"
-
-enum {
- ENABLE_GRP0 = 0x1 << 0,
- ENABLE_GRP1 = 0x1 << 1,
- FIQ_BYP_DIS_GRP0 = 0x1 << 5,
- IRQ_BYP_DIS_GRP0 = 0x1 << 6,
- FIQ_BYP_DIS_GRP1 = 0x1 << 7,
- IRQ_BYP_DIS_GRP1 = 0x1 << 8,
-};
-
-struct gic {
- struct gicd_mmio *gicd;
- struct gicc_mmio *gicc;
- size_t num_interrupts;
- unsigned int version;
- unsigned int security_extensions;
-};
-
-static struct gic *gic_get(void)
-{
- static struct gic gic;
-
- if (gic.gicd == NULL) {
- uint32_t typer;
-
- gic.gicd = gicd_base();
- gic.gicc = gicc_base();
- typer = read32(&gic.gicd->typer);
- gic.num_interrupts = 32 * ((typer & 0x1f) + 1);
- gic.security_extensions = !!(typer & (1 << 10));
- gic.version = (read32(&gic.gicd->icpidr2) & 0xf0) >> 4;
-
- printk(BIOS_DEBUG, "GICv%d - %zu ints %s GICD=%p GICC=%p\n",
- gic.version, gic.num_interrupts,
- gic.security_extensions ? "SecExtn" : "",
- gic.gicd, gic.gicc);
- }
-
- return &gic;
-}
-
-static inline uint32_t gic_read(uint32_t *base)
-{
- return read32(base);
-}
-
-static inline void gic_write(uint32_t *base, uint32_t val)
-{
- write32(base, val);
-}
-
-static void gic_write_regs(uint32_t *base, size_t num_regs, uint32_t val)
-{
- size_t i;
-
- for (i = 0; i < num_regs; i++)
- gic_write(base++, val);
-}
-
-static void gic_write_banked_regs(uint32_t *base, size_t interrupts_per_reg,
- uint32_t val)
-{
- /* 1st 32 interrupts are banked per CPU. */
- gic_write_regs(base, 32 / interrupts_per_reg, val);
-}
-
-void gic_init(void)
-{
- struct gic *gic;
- struct gicd_mmio *gicd;
- struct gicc_mmio *gicc;
- uint32_t cpu_mask;
-
- gic = gic_get();
- gicd = gic->gicd;
- gicc = gic->gicc;
-
- /* Enable Group 0 and Group 1 in GICD -- banked regs. */
- gic_write(&gicd->ctlr, ENABLE_GRP0 | ENABLE_GRP1);
-
- /* Enable Group 0 and Group 1 in GICC and enable all priroity levels. */
- gic_write(&gicc->ctlr, ENABLE_GRP0 | ENABLE_GRP1);
- gic_write(&gicc->pmr, 1 << 7);
-
- cpu_mask = 1 << smp_processor_id();
- cpu_mask |= cpu_mask << 8;
- cpu_mask |= cpu_mask << 16;
-
- /* Only write banked registers for secondary CPUs. */
- if (smp_processor_id()) {
- gic_write_banked_regs(&gicd->itargetsr[0], 4, cpu_mask);
- /* Put interrupts into Group 1. */
- gic_write_banked_regs(&gicd->igroupr[0], 32, ~0x0);
- /* Allow Non-secure access to everything. */
- gic_write_banked_regs(&gicd->nsacr[0], 16, ~0x0);
- return;
- }
-
- /* All interrupts routed to processors that execute this function. */
- gic_write_regs(&gicd->itargetsr[0], gic->num_interrupts / 4, cpu_mask);
- /* Put all interrupts into Gropup 1. */
- gic_write_regs(&gicd->igroupr[0], gic->num_interrupts / 32, ~0x0);
- /* Allow Non-secure access to everything. */
- gic_write_regs(&gicd->nsacr[0], gic->num_interrupts / 16, ~0x0);
-}
-
-void gic_disable(void)
-{
- struct gic *gic;
- struct gicc_mmio *gicc;
-
- gic = gic_get();
- gicc = gic->gicc;
-
- /* Disable secure, non-secure interrupts. */
- uint32_t val = gic_read(&gicc->ctlr);
- val &= ~(ENABLE_GRP0 | ENABLE_GRP1);
- /*
- * Enable the IRQ/FIQ BypassDisable bits to bypass the IRQs.
- * So the CPU can wake up from power gating state when the GIC
- * was disabled.
- */
- val |= FIQ_BYP_DIS_GRP0 | IRQ_BYP_DIS_GRP0 |
- FIQ_BYP_DIS_GRP1 | IRQ_BYP_DIS_GRP1;
- gic_write(&gicc->ctlr, val);
-}
-
-void gic_enable(void)
-{
- struct gic *gic;
- struct gicc_mmio *gicc;
-
- gic = gic_get();
- gicc = gic->gicc;
-
- /* Enable secure, non-secure interrupts. */
- uint32_t val = gic_read(&gicc->ctlr);
- val |= (ENABLE_GRP0 | ENABLE_GRP1);
- gic_write(&gicc->ctlr, val);
-}
diff --git a/src/drivers/gic/gic.h b/src/drivers/gic/gic.h
deleted file mode 100644
index 03fed63b49..0000000000
--- a/src/drivers/gic/gic.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#ifndef DRIVERS_GIC_H
-#define DRIVERS_GIC_H
-
-#include <stdint.h>
-
-#define NR(start, end) (((end) - (start)) / sizeof(uint32_t))
-
-struct gicd_mmio {
- uint32_t ctlr; /* 0x000 - 0x003 */
- uint32_t typer; /* 0x004 - 0x007 */
- uint32_t iidr; /* 0x008 - 0x00b */
- uint32_t reserved_1[NR(0xc, 0x80)]; /* 0x00c - 0x07f */
- uint32_t igroupr[NR(0x80, 0x100)]; /* 0x080 - 0x0ff */
- uint32_t isenabler[NR(0x100, 0x180)]; /* 0x100 - 0x17f */
- uint32_t icenabler[NR(0x180, 0x200)]; /* 0x180 - 0x1ff */
- uint32_t ispendr[NR(0x200, 0x280)]; /* 0x200 - 0x27f */
- uint32_t icpendr[NR(0x280, 0x300)]; /* 0x280 - 0x2ff */
- uint32_t isactiver[NR(0x300, 0x380)]; /* 0x300 - 0x37f */
- uint32_t icactiver[NR(0x380, 0x400)]; /* 0x380 - 0x3ff */
- uint32_t ipriorityr[NR(0x400, 0x7fc)]; /* 0x400 - 0x7fb */
- uint32_t reserved_2[NR(0x7fc, 0x800)]; /* 0x7fc - 0x7ff */
- uint32_t itargetsr[NR(0x800, 0xbfc)]; /* 0x800 - 0xbfb */
- uint32_t reserved_3[NR(0xbfc, 0xc00)]; /* 0xbfc - 0x2ff */
- uint32_t icfgr[NR(0xc00, 0xd00)]; /* 0xc00 - 0xcff */
- uint32_t reserved_4[NR(0xd00, 0xe00)]; /* 0xd00 - 0xdff */
- uint32_t nsacr[NR(0xe00, 0xf00)]; /* 0xe00 - 0xeff */
- uint32_t sgir; /* 0xf00 - 0xf03 */
- uint32_t reserved_5[NR(0xf04, 0xf10)]; /* 0xf04 - 0xf0f */
- uint32_t cpendsgir[NR(0xf10, 0xf20)]; /* 0xf10 - 0xf1f */
- uint32_t spendsgir[NR(0xf20, 0xf30)]; /* 0xf20 - 0xf2f */
- uint32_t reserved_6[NR(0xf30, 0xfe8)]; /* 0xf30 - 0xfe7 */
- uint32_t icpidr2; /* 0xfe8 - 0xfeb */
- uint32_t reserved_7[NR(0xfec, 0x1000)]; /* 0xfec - 0xfff */
-};
-
-struct gicc_mmio {
- uint32_t ctlr; /* 0x000 - 0x003 */
- uint32_t pmr; /* 0x004 - 0x007 */
- uint32_t bpr; /* 0x008 - 0x00b */
- uint32_t iar; /* 0x00c - 0x00f */
- uint32_t eoir; /* 0x010 - 0x013 */
- uint32_t rpr; /* 0x014 - 0x017 */
- uint32_t hppir; /* 0x018 - 0x01b */
- uint32_t apbr; /* 0x01c - 0x01f */
- uint32_t aiar; /* 0x020 - 0x023 */
- uint32_t aeoir; /* 0x024 - 0x027 */
- uint32_t ahppir; /* 0x028 - 0x02b */
- uint32_t resered_1[NR(0x2c, 0xd0)]; /* 0x02c - 0x0cf */
- uint32_t apr[NR(0xd0, 0xe0)]; /* 0x0d0 - 0x0df */
- uint32_t nsapr[NR(0xe0, 0xf0)]; /* 0x0e0 - 0x0ef */
- uint32_t resered_2[NR(0xf0, 0xfc)]; /* 0x0f0 - 0x0fb */
- uint32_t iidr; /* 0x0fc - 0x0ff */
- uint32_t reserved_3[NR(0x100, 0x1000)]; /* 0x100 - 0xfff */
- uint32_t dir; /* 0x1000 - 0x1003 */
-};
-
-#undef NR
-
-#endif /* DRIVERS_GIC_H */
diff --git a/src/include/gic.h b/src/include/gic.h
deleted file mode 100644
index a4201bb440..0000000000
--- a/src/include/gic.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#ifndef GIC_H
-#define GIC_H
-
-#if CONFIG(GIC)
-
-/* Initialize the GIC on the currently processor, including GICD and GICC. */
-void gic_init(void);
-void gic_disable(void);
-void gic_enable(void);
-
-/* Return a pointer to the base of the GIC distributor mmio region. */
-void *gicd_base(void);
-
-/* Return a pointer to the base of the GIC CPU mmio region. */
-void *gicc_base(void);
-
-#else /* CONFIG_GIC */
-
-static inline void gic_init(void) {}
-static inline void gic_disable(void) {}
-
-#endif /* CONFIG_GIC */
-
-#endif /* GIC_H */
diff --git a/src/soc/nvidia/tegra210/Kconfig b/src/soc/nvidia/tegra210/Kconfig
index 32748f3b6b..4fcbaffbee 100644
--- a/src/soc/nvidia/tegra210/Kconfig
+++ b/src/soc/nvidia/tegra210/Kconfig
@@ -6,7 +6,6 @@ config SOC_NVIDIA_TEGRA210
select ARCH_VERSTAGE_ARMV4
select ARCH_ROMSTAGE_ARMV4
select ARCH_RAMSTAGE_ARMV8_64
- select GIC
select HAVE_UART_SPECIAL
select ARM64_USE_ARM_TRUSTED_FIRMWARE
select GENERIC_GPIO_LIB
diff --git a/src/soc/nvidia/tegra210/Makefile.inc b/src/soc/nvidia/tegra210/Makefile.inc
index e213751308..f76ab347e0 100644
--- a/src/soc/nvidia/tegra210/Makefile.inc
+++ b/src/soc/nvidia/tegra210/Makefile.inc
@@ -79,7 +79,6 @@ ramstage-y += i2c6.c
ramstage-y += ape.c
ramstage-y += power.c
ramstage-y += dma.c
-ramstage-y += gic.c
ramstage-y += monotonic_timer.c
ramstage-y += padconfig.c
ramstage-y += funitcfg.c
diff --git a/src/soc/nvidia/tegra210/gic.c b/src/soc/nvidia/tegra210/gic.c
deleted file mode 100644
index f02ce53712..0000000000
--- a/src/soc/nvidia/tegra210/gic.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <gic.h>
-#include <soc/addressmap.h>
-
-void *gicd_base(void)
-{
- return (void *)(uintptr_t)TEGRA_GICD_BASE;
-}
-
-void *gicc_base(void)
-{
- return (void *)(uintptr_t)TEGRA_GICC_BASE;
-}
diff --git a/src/soc/nvidia/tegra210/ramstage.c b/src/soc/nvidia/tegra210/ramstage.c
index c470e6b5cd..50249b7051 100644
--- a/src/soc/nvidia/tegra210/ramstage.c
+++ b/src/soc/nvidia/tegra210/ramstage.c
@@ -5,7 +5,6 @@
#include <cbmem.h>
#include <console/console.h>
#include <device/mmio.h>
-#include <gic.h>
#include <soc/addressmap.h>
#include <soc/clock.h>
#include <soc/mmu_operations.h>
@@ -41,9 +40,6 @@ static void mselect_enable_wrap(void)
void ramstage_entry(void);
void ramstage_entry(void)
{
- /* TODO: Is this still needed? */
- gic_init();
-
/* TODO: Move arch timer setup to BL31? */
arm64_arch_timer_init();