From 4662aa16d93f7ffd933125db6231868be544ebd5 Mon Sep 17 00:00:00 2001 From: Xiangfu Date: Wed, 10 Oct 2012 18:39:55 +0800 Subject: [PATCH 3/5] add more boot options(F1/F2/F3/F4/M/S) --- arch/mips/include/asm/global_data.h | 3 +++ arch/mips/lib/bootm.c | 17 ++++++++++++++++- board/qi/qi_lb60/qi_lb60.c | 26 +++++++++++++++++++++++--- common/main.c | 21 +++++++++++++++++++-- include/configs/qi_lb60.h | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 93 insertions(+), 6 deletions(-) diff --git a/arch/mips/include/asm/global_data.h b/arch/mips/include/asm/global_data.h index 6e2cdc7..cd03d7e 100644 --- a/arch/mips/include/asm/global_data.h +++ b/arch/mips/include/asm/global_data.h @@ -59,6 +59,9 @@ typedef struct global_data { unsigned long env_valid; /* Checksum of Environment valid? */ void **jt; /* jump table */ char env_buf[32]; /* buffer for getenv() before reloc. */ +#if defined(CONFIG_NANONOTE) + unsigned long boot_option; +#endif } gd_t; #include diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c index 608c1a7..e00416b 100644 --- a/arch/mips/lib/bootm.c +++ b/arch/mips/lib/bootm.c @@ -47,10 +47,25 @@ int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *images) { void (*theKernel) (int, char **, char **, int *); - char *commandline = getenv("bootargs"); + char *commandline; char env_buf[12]; char *cp; +#if defined(CONFIG_NANONOTE) + if (gd->boot_option & BOOT_FROM_MEMCARD) + commandline = getenv ("bootargsfromsd"); + else if (gd->boot_option & BOOT_WITH_F1) + commandline = getenv ("bootargsf1"); + else if (gd->boot_option & BOOT_WITH_F2) + commandline = getenv ("bootargsf2"); + else if (gd->boot_option & BOOT_WITH_F3) + commandline = getenv ("bootargsf3"); + else if (gd->boot_option & BOOT_WITH_F4) + commandline = getenv ("bootargsf4"); + else +#endif + commandline = getenv ("bootargs"); + if ((flag != 0) && (flag != BOOTM_STATE_OS_GO)) return 1; diff --git a/board/qi/qi_lb60/qi_lb60.c b/board/qi/qi_lb60/qi_lb60.c index 68da069..14a928e 100644 --- a/board/qi/qi_lb60/qi_lb60.c +++ b/board/qi/qi_lb60/qi_lb60.c @@ -15,7 +15,7 @@ DECLARE_GLOBAL_DATA_PTR; static void gpio_init(void) { - unsigned int i; + unsigned int i, j; /* Initialize NAND Flash Pins */ __gpio_as_nand(); @@ -42,14 +42,34 @@ static void gpio_init(void) if (__gpio_get_pin(GPIO_KEYIN_BASE + 2) == 0){ printf("[S] pressed, enable UART0\n"); + gd->boot_option |= BOOT_WITH_ENABLE_UART; __gpio_as_uart0(); } else { __gpio_as_input(GPIO_KEYIN_8); __gpio_enable_pull(GPIO_KEYIN_8); } - /* enable the TP4, TP5 as UART0 */ - __gpio_jtag_to_uart0(); + if (__gpio_get_pin(GPIO_KEYIN_BASE + 3) == 0) { + printf("[M] pressed, boot from memory card\n"); + gd->boot_option |= BOOT_FROM_MEMCARD; + __gpio_jtag_to_uart0(); + } + + for (j = 0; j < 4; j++) { + for (i = 0; i < 4; i++) + __gpio_set_pin(GPIO_KEYOUT_BASE + i); + + __gpio_clear_pin(GPIO_KEYOUT_BASE + j); + + if (__gpio_get_pin(GPIO_KEYIN_BASE) == 0) { + printf("[F%d] pressed", (j + 1)); + gd->boot_option |= (1 << (j + 2)); + /* BOOT_WITH_F1 (1 << 2) */ + /* BOOT_WITH_F2 (1 << 3) */ + /* BOOT_WITH_F3 (1 << 4) */ + /* BOOT_WITH_F4 (1 << 5) */ + } + } __gpio_as_output(GPIO_AUDIO_POP); __gpio_set_pin(GPIO_AUDIO_POP); diff --git a/common/main.c b/common/main.c index 9507cec..dbfb7ca 100644 --- a/common/main.c +++ b/common/main.c @@ -355,7 +355,11 @@ void main_loop (void) #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0) s = getenv ("bootdelay"); bootdelay = s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY; - +#if defined(CONFIG_NANONOTE) + DECLARE_GLOBAL_DATA_PTR; + if (gd->boot_option & BOOT_WITH_ENABLE_UART) + bootdelay = 3; +# endif debug ("### main_loop entered: bootdelay=%d\n\n", bootdelay); #if defined(CONFIG_MENU_SHOW) @@ -379,7 +383,20 @@ void main_loop (void) } else #endif /* CONFIG_BOOTCOUNT_LIMIT */ - s = getenv ("bootcmd"); +#if defined(CONFIG_NANONOTE) + if (gd->boot_option & BOOT_FROM_MEMCARD) + s = getenv ("bootcmdfromsd"); + else if (gd->boot_option & BOOT_WITH_F1) + s = getenv ("bootcmdf1"); + else if (gd->boot_option & BOOT_WITH_F2) + s = getenv ("bootcmdf2"); + else if (gd->boot_option & BOOT_WITH_F3) + s = getenv ("bootcmdf3"); + else if (gd->boot_option & BOOT_WITH_F4) + s = getenv ("bootcmdf4"); + else +#endif + s = getenv ("bootcmd"); debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : ""); diff --git a/include/configs/qi_lb60.h b/include/configs/qi_lb60.h index 2690e17..e824d48 100644 --- a/include/configs/qi_lb60.h +++ b/include/configs/qi_lb60.h @@ -31,6 +31,7 @@ /* * Miscellaneous configurable options */ +#define CONFIG_NANONOTE #define CONFIG_JZ4740_MMC #define CONFIG_MMC 1 #define CONFIG_FAT 1 @@ -39,6 +40,37 @@ #define CONFIG_CMD_FAT #define CONFIG_CMD_EXT2 +#define CONFIG_CMD_UBIFS +#define CONFIG_CMD_UBI +#define CONFIG_MTD_PARTITIONS +#define CONFIG_MTD_DEVICE +#define CONFIG_CMD_MTDPARTS +#define CONFIG_CMD_UBI +#define CONFIG_CMD_UBIFS +#define CONFIG_LZO +#define CONFIG_RBTREE + +#define MTDIDS_DEFAULT "nand0=jz4740-nand" +#define MTDPARTS_DEFAULT "mtdparts=jz4740-nand:4M@0(uboot)ro,4M@4M(kernel)ro,512M@8M(rootfs)ro,-(data)ro" + +#define BOOT_FROM_MEMCARD 1 +#define BOOT_WITH_ENABLE_UART (1 << 1) /* Vaule for global_data.h gd->boot_option */ +#define BOOT_WITH_F1 (1 << 2) +#define BOOT_WITH_F2 (1 << 3) +#define BOOT_WITH_F3 (1 << 4) +#define BOOT_WITH_F4 (1 << 5) + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "bootcmdfromsd=mmc init; ext2load mmc 0 0x80600000 /boot/uImage; bootm;\0" \ + "bootargsfromsd=mem=32M console=tty0 console=ttyS0,57600n8 rootfstype=ext2 root=/dev/mmcblk0p1 rw rootwait\0" \ + "bootcmdf1=mmc init; ext2load mmc 0:1 0x80600000 /boot/uImage; bootm;\0" \ + "bootargsf1=mem=32M console=tty0 console=ttyS0,57600n8 rootfstype=ext2 root=/dev/mmcblk0p1 rw rootwait\0" \ + "bootcmdf2=mmc init; ext2load mmc 0:2 0x80600000 /boot/uImage; bootm;\0" \ + "bootargsf2=mem=32M console=tty0 console=ttyS0,57600n8 rootfstype=ext2 root=/dev/mmcblk0p2 rw rootwait\0" \ + "bootcmdf3=mmc init; ext2load mmc 0:3 0x80600000 /boot/uImage; bootm;\0" \ + "bootargsf3=mem=32M console=tty0 console=ttyS0,57600n8 rootfstype=ext2 root=/dev/mmcblk0p3 rw rootwait\0" \ + "bootcmdf4=mtdparts default;ubi part rootfs;ubifsmount rootfs;ubifsload 0x80600000 /boot/uImage; bootm;\0" \ + "bootargsf4=mem=32M console=tty0 console=ttyS0,57600n8 ubi.mtd=2 rootfstype=ubifs root=ubi0:rootfs rw rootwait" #define CONFIG_SYS_SDRAM_BASE 0x80000000 /* Cached addr */ #define CONFIG_SYS_INIT_SP_OFFSET 0x400000 -- 1.7.9.5