[PATCH 1/3] zynq: Add get function for multi boot address register

lukas.funke-oss at weidmueller.com lukas.funke-oss at weidmueller.com
Thu Mar 28 10:01:08 CET 2024


From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier at weidmueller.com>

This commit adds a function to get/set the multiboot register. This
becomes handy in order to ensure a fresh bootimage search after reset.

Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier at weidmueller.com>
Signed-off-by: Lukas Funke <lukas.funke at weidmueller.com>
---

 arch/arm/mach-zynq/cpu.c                    | 19 +++++++++++++++++--
 arch/arm/mach-zynq/include/mach/hardware.h  |  3 ++-
 arch/arm/mach-zynq/include/mach/sys_proto.h |  2 ++
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-zynq/cpu.c b/arch/arm/mach-zynq/cpu.c
index 3b6518c71c..3d2866422e 100644
--- a/arch/arm/mach-zynq/cpu.c
+++ b/arch/arm/mach-zynq/cpu.c
@@ -14,8 +14,9 @@
 #include <asm/arch/ps7_init_gpl.h>
 #include <asm/arch/sys_proto.h>
 
-#define ZYNQ_SILICON_VER_MASK	0xF0000000
-#define ZYNQ_SILICON_VER_SHIFT	28
+#define ZYNQ_SILICON_VER_MASK		0xF0000000
+#define ZYNQ_SILICON_VER_SHIFT		28
+#define ZYNQ_MULTIBOOT_ADDR_MASK	0x00001FFF
 
 #if CONFIG_IS_ENABLED(FPGA)
 xilinx_desc fpga = {
@@ -79,6 +80,20 @@ unsigned int zynq_get_silicon_version(void)
 						>> ZYNQ_SILICON_VER_SHIFT;
 }
 
+unsigned int zynq_get_mulitboot_addr(void)
+{
+	return readl(&devcfg_base->multiboot_addr) & ZYNQ_MULTIBOOT_ADDR_MASK;
+}
+
+void zynq_set_mulitboot_addr(unsigned int value)
+{
+	unsigned int v = readl(&devcfg_base->multiboot_addr);
+
+	v &= ~ZYNQ_MULTIBOOT_ADDR_MASK;
+	v |= value & ZYNQ_MULTIBOOT_ADDR_MASK;
+	writel(v, &devcfg_base->multiboot_addr);
+}
+
 void reset_cpu(void)
 {
 	zynq_slcr_cpu_reset();
diff --git a/arch/arm/mach-zynq/include/mach/hardware.h b/arch/arm/mach-zynq/include/mach/hardware.h
index 89eb565c94..9199baccfa 100644
--- a/arch/arm/mach-zynq/include/mach/hardware.h
+++ b/arch/arm/mach-zynq/include/mach/hardware.h
@@ -96,7 +96,8 @@ struct devcfg_regs {
 	u32 dma_src_len; /* 0x20 */
 	u32 dma_dst_len; /* 0x24 */
 	u32 rom_shadow; /* 0x28 */
-	u32 reserved1[2];
+	u32 multiboot_addr; /* 0x2c */
+	u32 reserved1[1];
 	u32 unlock; /* 0x34 */
 	u32 reserved2[18];
 	u32 mctrl; /* 0x80 */
diff --git a/arch/arm/mach-zynq/include/mach/sys_proto.h b/arch/arm/mach-zynq/include/mach/sys_proto.h
index 268ec50ad8..6b85682808 100644
--- a/arch/arm/mach-zynq/include/mach/sys_proto.h
+++ b/arch/arm/mach-zynq/include/mach/sys_proto.h
@@ -16,5 +16,7 @@ extern u32 zynq_slcr_get_idcode(void);
 extern int zynq_slcr_get_mio_pin_status(const char *periph);
 extern void zynq_ddrc_init(void);
 extern unsigned int zynq_get_silicon_version(void);
+extern unsigned int zynq_get_mulitboot_addr(void);
+extern void zynq_set_mulitboot_addr(unsigned int);
 
 #endif /* _SYS_PROTO_H_ */
-- 
2.30.2



More information about the U-Boot mailing list