diff options
author | Ahmad Fatoum <a.fatoum@pengutronix.de> | 2022-06-09 07:59:05 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2022-06-17 08:28:55 +0200 |
commit | da06dbb18d57b6f77beab5ea41423a639b4384f5 (patch) | |
tree | c1af4a65ab97ed495b5156bc7fbd0dd28e20315c /arch/arm/mach-bcm283x/core.c | |
parent | 47740c32087930089fc9e0a07fd254676780554a (diff) | |
download | barebox-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.c | 29 |
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; +} |