summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-bcm283x/core.c
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2022-06-09 07:59:05 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2022-06-17 08:28:55 +0200
commitda06dbb18d57b6f77beab5ea41423a639b4384f5 (patch)
treec1af4a65ab97ed495b5156bc7fbd0dd28e20315c /arch/arm/mach-bcm283x/core.c
parent47740c32087930089fc9e0a07fd254676780554a (diff)
downloadbarebox-da06dbb18d57b6f77beab5ea41423a639b4384f5.tar.gz
barebox-da06dbb18d57b6f77beab5ea41423a639b4384f5.tar.xz
ARM: rpi: support PBL use of mbox
barebox uses DT to find out the base address of the mailbox. For the generic image, we need to use the mailbox interface to find out which DT to use. Resolve the chicken-egg problem by hardcoding a list of mailbox base addresses and selecting the correct one by looking up the CPU ID and using that to deduce the Raspberry Pi SoC type. Note that this is incompatible with arm_peri_high=1. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> Link: https://lore.barebox.org/20220609055922.667016-5-a.fatoum@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-bcm283x/core.c')
-rw-r--r--arch/arm/mach-bcm283x/core.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/arch/arm/mach-bcm283x/core.c b/arch/arm/mach-bcm283x/core.c
new file mode 100644
index 0000000000..40882fb6d6
--- /dev/null
+++ b/arch/arm/mach-bcm283x/core.c
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <linux/types.h>
+#include <mach/core.h>
+#include <asm/system_info.h>
+
+void __iomem *bcm2835_get_mmio_base_by_cpuid(void)
+{
+ static u32 cpuid;
+
+ if (!cpuid) {
+ cpuid = read_cpuid_id();
+ pr_debug("ARM CPUID: %08x\n", cpuid);
+ }
+
+ /* We know ARM1167, Cortex A-7, A-53 and A-72 CPUID mask is identical */
+ switch(cpuid & CPU_IS_ARM1176_MASK) {
+ case CPU_IS_ARM1176: /* bcm2835 */
+ return IOMEM(0x20000000);
+ case CPU_IS_CORTEX_A7: /* bcm2836 */
+ case CPU_IS_CORTEX_A53: /* bcm2837 */
+ return IOMEM(0x3f000000);
+ case CPU_IS_CORTEX_A72: /* bcm2711 */
+ return IOMEM(0xfe000000);
+ }
+
+ pr_err("Couldn't determine rpi by CPUID %08x\n", cpuid);
+ return NULL;
+}