freescale/qixis: Add support for booting from NAND
Use "qixis_reset nand" to reset the board to boot from NAND. Signed-off-by: Scott Wood <scottwood@freescale.com> Signed-off-by: York Sun <yorksun@freescale.com>
This commit is contained in:
		
							parent
							
								
									b2d5ac5985
								
							
						
					
					
						commit
						548cf52fd5
					
				|  | @ -138,24 +138,23 @@ void qixis_bank_reset(void) | ||||||
| 	QIXIS_WRITE(rcfg_ctl, QIXIS_RCFG_CTL_RECONFIG_START); | 	QIXIS_WRITE(rcfg_ctl, QIXIS_RCFG_CTL_RECONFIG_START); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Set the boot bank to the power-on default bank */ | static void __maybe_unused set_lbmap(int lbmap) | ||||||
| void clear_altbank(void) |  | ||||||
| { | { | ||||||
| 	u8 reg; | 	u8 reg; | ||||||
| 
 | 
 | ||||||
| 	reg = QIXIS_READ(brdcfg[0]); | 	reg = QIXIS_READ(brdcfg[0]); | ||||||
| 	reg = (reg & ~QIXIS_LBMAP_MASK) | QIXIS_LBMAP_DFLTBANK; | 	reg = (reg & ~QIXIS_LBMAP_MASK) | lbmap; | ||||||
| 	QIXIS_WRITE(brdcfg[0], reg); | 	QIXIS_WRITE(brdcfg[0], reg); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Set the boot bank to the alternate bank */ | static void __maybe_unused set_rcw_src(int rcw_src) | ||||||
| void set_altbank(void) |  | ||||||
| { | { | ||||||
| 	u8 reg; | 	u8 reg; | ||||||
| 
 | 
 | ||||||
| 	reg = QIXIS_READ(brdcfg[0]); | 	reg = QIXIS_READ(dutcfg[1]); | ||||||
| 	reg = (reg & ~QIXIS_LBMAP_MASK) | QIXIS_LBMAP_ALTBANK; | 	reg = (reg & ~1) | (rcw_src & 1); | ||||||
| 	QIXIS_WRITE(brdcfg[0], reg); | 	QIXIS_WRITE(dutcfg[1], reg); | ||||||
|  | 	QIXIS_WRITE(dutcfg[0], (rcw_src >> 1) & 0xff); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void qixis_dump_regs(void) | static void qixis_dump_regs(void) | ||||||
|  | @ -201,11 +200,22 @@ int qixis_reset_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	if (argc <= 1) { | 	if (argc <= 1) { | ||||||
| 		clear_altbank(); | 		set_lbmap(QIXIS_LBMAP_DFLTBANK); | ||||||
| 		qixis_reset(); | 		qixis_reset(); | ||||||
| 	} else if (strcmp(argv[1], "altbank") == 0) { | 	} else if (strcmp(argv[1], "altbank") == 0) { | ||||||
| 		set_altbank(); | 		set_lbmap(QIXIS_LBMAP_ALTBANK); | ||||||
| 		qixis_bank_reset(); | 		qixis_bank_reset(); | ||||||
|  | 	} else if (strcmp(argv[1], "nand") == 0) { | ||||||
|  | #ifdef QIXIS_LBMAP_NAND | ||||||
|  | 		QIXIS_WRITE(rst_ctl, 0x30); | ||||||
|  | 		QIXIS_WRITE(rcfg_ctl, 0); | ||||||
|  | 		set_lbmap(QIXIS_LBMAP_NAND); | ||||||
|  | 		set_rcw_src(QIXIS_RCW_SRC_NAND); | ||||||
|  | 		QIXIS_WRITE(rcfg_ctl, 0x20); | ||||||
|  | 		QIXIS_WRITE(rcfg_ctl, 0x21); | ||||||
|  | #else | ||||||
|  | 		printf("Not implemented\n"); | ||||||
|  | #endif | ||||||
| 	} else if (strcmp(argv[1], "watchdog") == 0) { | 	} else if (strcmp(argv[1], "watchdog") == 0) { | ||||||
| 		static char *period[9] = {"2s", "4s", "8s", "16s", "32s", | 		static char *period[9] = {"2s", "4s", "8s", "16s", "32s", | ||||||
| 					  "1min", "2min", "4min", "8min"}; | 					  "1min", "2min", "4min", "8min"}; | ||||||
|  | @ -244,6 +254,7 @@ U_BOOT_CMD( | ||||||
| 	"Reset the board using the FPGA sequencer", | 	"Reset the board using the FPGA sequencer", | ||||||
| 	"- hard reset to default bank\n" | 	"- hard reset to default bank\n" | ||||||
| 	"qixis_reset altbank - reset to alternate bank\n" | 	"qixis_reset altbank - reset to alternate bank\n" | ||||||
|  | 	"qixis_reset nand - reset to nand\n" | ||||||
| 	"qixis watchdog <watchdog_period> - set the watchdog period\n" | 	"qixis watchdog <watchdog_period> - set the watchdog period\n" | ||||||
| 	"	period: 1s 2s 4s 8s 16s 32s 1min 2min 4min 8min\n" | 	"	period: 1s 2s 4s 8s 16s 32s 1min 2min 4min 8min\n" | ||||||
| 	"qixis_reset dump - display the QIXIS registers\n" | 	"qixis_reset dump - display the QIXIS registers\n" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue