Message ID | fbf5a7c3-5304-43e6-a10e-ba00e3df80e2@VA3EHSMHS024.ehs.local |
---|---|
State | Accepted |
Delegated to: | Michal Simek |
Headers | show |
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.
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 */
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(+)