mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH v2 04/21] ARM: rpi: support PBL use of mbox
Date: Thu,  9 Jun 2022 07:59:05 +0200	[thread overview]
Message-ID: <20220609055922.667016-5-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20220609055922.667016-1-a.fatoum@pengutronix.de>

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>
---
 arch/arm/include/asm/system_info.h        |  6 +++++
 arch/arm/mach-bcm283x/Makefile            |  2 +-
 arch/arm/mach-bcm283x/core.c              | 29 +++++++++++++++++++++++
 arch/arm/mach-bcm283x/include/mach/core.h |  2 ++
 arch/arm/mach-bcm283x/mbox.c              | 24 ++++++++++++-------
 5 files changed, 54 insertions(+), 9 deletions(-)
 create mode 100644 arch/arm/mach-bcm283x/core.c

diff --git a/arch/arm/include/asm/system_info.h b/arch/arm/include/asm/system_info.h
index c7f998774812..5a84fde75b9f 100644
--- a/arch/arm/include/asm/system_info.h
+++ b/arch/arm/include/asm/system_info.h
@@ -44,6 +44,12 @@
 #define CPU_IS_CORTEX_A15	0x410fc0f0
 #define CPU_IS_CORTEX_A15_MASK	0xff0ffff0
 
+#define CPU_IS_CORTEX_A53	0x410fd030
+#define CPU_IS_CORTEX_A53_MASK	0xff0ffff0
+
+#define CPU_IS_CORTEX_A72	0x410fd080
+#define CPU_IS_CORTEX_A72_MASK	0xff0ffff0
+
 #define CPU_IS_PXA250		0x69052100
 #define CPU_IS_PXA250_MASK	0xfffff7f0
 
diff --git a/arch/arm/mach-bcm283x/Makefile b/arch/arm/mach-bcm283x/Makefile
index d68176441322..53343cec8cd6 100644
--- a/arch/arm/mach-bcm283x/Makefile
+++ b/arch/arm/mach-bcm283x/Makefile
@@ -1,3 +1,3 @@
 # SPDX-License-Identifier: GPL-2.0-only
 
-obj-y += mbox.o
+obj-pbl-y += mbox.o core.o
diff --git a/arch/arm/mach-bcm283x/core.c b/arch/arm/mach-bcm283x/core.c
new file mode 100644
index 000000000000..40882fb6d685
--- /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;
+}
diff --git a/arch/arm/mach-bcm283x/include/mach/core.h b/arch/arm/mach-bcm283x/include/mach/core.h
index bd272b925df5..c8547351a39d 100644
--- a/arch/arm/mach-bcm283x/include/mach/core.h
+++ b/arch/arm/mach-bcm283x/include/mach/core.h
@@ -22,4 +22,6 @@ static void inline bcm2835_register_fb(void)
 	add_generic_device("bcm2835_fb", 0, NULL, 0, 0, 0, NULL);
 }
 
+void __iomem *bcm2835_get_mmio_base_by_cpuid(void);
+
 #endif
diff --git a/arch/arm/mach-bcm283x/mbox.c b/arch/arm/mach-bcm283x/mbox.c
index 4b14afcfe45b..b77065ab305f 100644
--- a/arch/arm/mach-bcm283x/mbox.c
+++ b/arch/arm/mach-bcm283x/mbox.c
@@ -14,13 +14,20 @@
 #include <init.h>
 #include <io.h>
 #include <of_address.h>
+#include <pbl.h>
 
 #include <mach/mbox.h>
+#include <mach/core.h>
 
 #define TIMEOUT (MSECOND * 1000)
 
 static void __iomem *mbox_base;
 
+#ifdef __PBL__
+#define is_timeout_non_interruptible(start, timeout) ((void)start, 0)
+#define get_time_ns() 0
+#endif
+
 static int bcm2835_mbox_call_raw(u32 chan, struct bcm2835_mbox_hdr *buffer,
 					u32 *recv)
 {
@@ -109,19 +116,20 @@ static void dump_buf(struct bcm2835_mbox_hdr *buffer)
 }
 #endif
 
-static int bcm2835_mbox_probe(void)
+static void __iomem *bcm2835_mbox_probe(void)
 {
 	struct device_node *mbox_node;
 
+	if (IN_PBL)
+		return bcm2835_get_mmio_base_by_cpuid() + 0xb880;
+
 	mbox_node = of_find_compatible_node(NULL, NULL, "brcm,bcm2835-mbox");
 	if (!mbox_node) {
 		pr_err("Missing mbox node\n");
-		return -ENOENT;
+		return NULL;
 	}
 
-	mbox_base = of_iomap(mbox_node, 0);
-
-	return 0;
+	return of_iomap(mbox_node, 0);
 }
 
 int bcm2835_mbox_call_prop(u32 chan, struct bcm2835_mbox_hdr *buffer)
@@ -132,9 +140,9 @@ int bcm2835_mbox_call_prop(u32 chan, struct bcm2835_mbox_hdr *buffer)
 	int tag_index;
 
 	if (!mbox_base) {
-		ret = bcm2835_mbox_probe();
-		if (ret)
-			return ret;
+		mbox_base = bcm2835_mbox_probe();
+		if (!mbox_base)
+			return -ENOENT;
 	}
 
 	pr_debug("mbox: TX buffer\n");
-- 
2.30.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


  parent reply	other threads:[~2022-06-09  6:03 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-09  5:59 [PATCH v2 00/21] ARM: rpi: add basic Raspberry Pi 4 support Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 01/21] ARM64: asm: implement read_cpuid_id() Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 02/21] dma: add dma_sync nop stubs for PBL Ahmad Fatoum
2022-06-14  8:49   ` Sascha Hauer
2022-06-14  9:00     ` Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 03/21] ARM: rpi: move bcm2835_add_device_sdram() into header Ahmad Fatoum
2022-06-09  5:59 ` Ahmad Fatoum [this message]
2022-06-09  5:59 ` [PATCH v2 05/21] ARM: rpi: split out mbox helpers to share code with PBL Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 06/21] ARM: rpi: switch to ARM_USE_COMPRESSED_DTB Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 07/21] ARM: rpi: add generic Raspberry Pi image Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 08/21] ARM: rpi: support FDT in x0 for 64bit configurations Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 09/21] serial: ns16550: rpi: remove ungating now done by proper clk driver Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 10/21] ARM: cpu: prevent recursive dependencies via CPU_SUPPORTS_64BIT_KERNEL Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 11/21] ARM: cpu: remove unnecessary CONFIG_SYS_SUPPORTS_64BIT_KERNEL Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 12/21] ARM: cpu: remove unused SYS_SUPPORTS_32BIT_KERNEL Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 13/21] ARM: rpi: add Raspberry Pi 3 64-bit build support Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 14/21] ARM: rpi: rpi3: disallow MMU_EARLY && 64BIT Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 15/21] clk: rpi: add Raspberry Pi 4 support Ahmad Fatoum
2022-06-09 13:58   ` Sascha Hauer
2022-06-09 14:15     ` Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 16/21] mci: bcm2835: add bcm2711-emmc2 (Rpi4) support Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 17/21] clocksource: bcm2835: bump below architeced timer for AArch64 Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 18/21] ARM: rpi: add Raspberry Pi 4 support Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 19/21] ARM: rpi: add debug_ll support for Raspberry Pi 4 Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 20/21] doc: bcm283x: reference newer firmware Ahmad Fatoum
2022-06-09  5:59 ` [PATCH v2 21/21] ARM: rpi: use correct kernel8.img as name for 64-bit Ahmad Fatoum
2022-06-10  8:33 ` [PATCH v2 00/21] ARM: rpi: add basic Raspberry Pi 4 support Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220609055922.667016-5-a.fatoum@pengutronix.de \
    --to=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox