[U-Boot] [PATCH 25/34] zynq: Add support to find bootmode

Added support to find the bootmodes by reading slcr bootmode register. this can be helpful to autoboot the configurations w.r.t a specified bootmode.
Added this functionality on board_late_init as it's not needed for normal initializtion part.
Signed-off-by: Jagannadha Sutradharudu Teki jaganna@xilinx.com --- arch/arm/cpu/armv7/zynq/slcr.c | 6 ++++++ arch/arm/include/asm/arch-zynq/sys_proto.h | 1 + board/xilinx/zynq/board.c | 33 ++++++++++++++++++++++++++++++ include/configs/zynq-common.h | 1 + 4 files changed, 41 insertions(+)
diff --git a/arch/arm/cpu/armv7/zynq/slcr.c b/arch/arm/cpu/armv7/zynq/slcr.c index 717ec65..b4c11c3 100644 --- a/arch/arm/cpu/armv7/zynq/slcr.c +++ b/arch/arm/cpu/armv7/zynq/slcr.c @@ -101,6 +101,12 @@ void zynq_slcr_devcfg_enable(void) zynq_slcr_lock(); }
+u32 zynq_slcr_get_boot_mode(void) +{ + /* Get the bootmode register value */ + return readl(&slcr_base->boot_mode); +} + u32 zynq_slcr_get_idcode(void) { return (readl(&slcr_base->pss_idcode) & SLCR_IDCODE_MASK) >> diff --git a/arch/arm/include/asm/arch-zynq/sys_proto.h b/arch/arm/include/asm/arch-zynq/sys_proto.h index 110de90..8f925af 100644 --- a/arch/arm/include/asm/arch-zynq/sys_proto.h +++ b/arch/arm/include/asm/arch-zynq/sys_proto.h @@ -13,6 +13,7 @@ extern void zynq_slcr_cpu_reset(void); extern void zynq_slcr_gem_clk_setup(u32 gem_id, u32 rclk, u32 clk); extern void zynq_slcr_devcfg_disable(void); extern void zynq_slcr_devcfg_enable(void); +extern u32 zynq_slcr_get_boot_mode(void); extern u32 zynq_slcr_get_idcode(void); extern void zynq_ddrc_init(void);
diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c index 5119c09..7d1063d 100644 --- a/board/xilinx/zynq/board.c +++ b/board/xilinx/zynq/board.c @@ -12,6 +12,14 @@
DECLARE_GLOBAL_DATA_PTR;
+/* Bootmode setting values */ +#define BOOT_MODES_MASK 0x0000000F +#define QSPI_MODE 0x00000001 +#define NOR_FLASH_MODE 0x00000002 +#define NAND_FLASH_MODE 0x00000004 +#define SD_MODE 0x00000005 +#define JTAG_MODE 0x00000000 + #ifdef CONFIG_FPGA Xilinx_desc fpga;
@@ -59,6 +67,31 @@ int board_init(void) return 0; }
+int board_late_init(void) +{ + switch ((zynq_slcr_get_boot_mode()) & BOOT_MODES_MASK) { + case QSPI_MODE: + setenv("modeboot", "qspiboot"); + break; + case NAND_FLASH_MODE: + setenv("modeboot", "nandboot"); + break; + case NOR_FLASH_MODE: + setenv("modeboot", "norboot"); + break; + case SD_MODE: + setenv("modeboot", "sdboot"); + break; + case JTAG_MODE: + setenv("modeboot", "jtagboot"); + break; + default: + setenv("modeboot", ""); + break; + } + + return 0; +}
#ifdef CONFIG_CMD_NET int board_eth_init(bd_t *bis) diff --git a/include/configs/zynq-common.h b/include/configs/zynq-common.h index 97b49d4..c823036 100644 --- a/include/configs/zynq-common.h +++ b/include/configs/zynq-common.h @@ -162,6 +162,7 @@
#define CONFIG_CMDLINE_EDITING #define CONFIG_AUTO_COMPLETE +#define CONFIG_BOARD_LATE_INIT #define CONFIG_SYS_LONGHELP #define CONFIG_SYS_MAXARGS 15 /* max number of command args */ #define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */

On Tue, Nov 05, 2013 at 11:16:46PM +0530, Jagannadha Sutradharudu Teki wrote:
Added support to find the bootmodes by reading slcr bootmode register. this can be helpful to autoboot the configurations w.r.t a specified bootmode.
Added this functionality on board_late_init as it's not needed for normal initializtion part.
Signed-off-by: Jagannadha Sutradharudu Teki jaganna@xilinx.com
[snip]
+int board_late_init(void) +{
- switch ((zynq_slcr_get_boot_mode()) & BOOT_MODES_MASK) {
- case QSPI_MODE:
setenv("modeboot", "qspiboot");
break;
- case NAND_FLASH_MODE:
setenv("modeboot", "nandboot");
break;
- case NOR_FLASH_MODE:
setenv("modeboot", "norboot");
break;
- case SD_MODE:
setenv("modeboot", "sdboot");
break;
- case JTAG_MODE:
setenv("modeboot", "jtagboot");
break;
- default:
setenv("modeboot", "");
break;
- }
Please document this variable somewhere because I'd like to make use of it on am335x/am43xx boards as well.
participants (2)
-
Jagannadha Sutradharudu Teki
-
Tom Rini