From f409564a07005c85bc0d1368a34dab727705bf2f Mon Sep 17 00:00:00 2001 From: Piotr Dymacz Date: Wed, 12 Apr 2017 21:59:08 +0200 Subject: [PATCH] Code cleanups in mips_linux.c --- u-boot/lib_mips/mips_linux.c | 203 +++++++++++++++++------------------ 1 file changed, 99 insertions(+), 104 deletions(-) diff --git a/u-boot/lib_mips/mips_linux.c b/u-boot/lib_mips/mips_linux.c index 6508ca5..4f16126 100644 --- a/u-boot/lib_mips/mips_linux.c +++ b/u-boot/lib_mips/mips_linux.c @@ -28,162 +28,106 @@ #include #include -//#define DEBUG +/* #define DEBUG */ DECLARE_GLOBAL_DATA_PTR; -#define LINUX_MAX_ENVS 512 // was 256 -#define LINUX_MAX_ARGS 512 // was 256 +#define LINUX_MAX_ENVS 512 +#define LINUX_MAX_ARGS 512 -/* from cmd_bootm.c */ +/* From cmd_bootm.c */ extern image_header_t header; -/* from cpu.c */ -extern int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); - static int linux_argc; -static char ** linux_argv; - -static char ** linux_env; -static char * linux_env_p; static int linux_env_idx; -static void linux_params_init(ulong start, char * commandline); -static void linux_env_set(char * env_name, char * env_val); - -#ifdef CONFIG_WASP_SUPPORT -void wasp_set_cca(void){ - /* set cache coherency attribute */ - asm("mfc0 $t0, $16\n" /* CP0_CONFIG == 16 */ - "li $t1, ~7\n" - "and $t0, $t0, $t1\n" - "ori $t0, 3\n" /* CONF_CM_CACHABLE_NONCOHERENT */ - "mtc0 $t0, $16\n" /* CP0_CONFIG == 16 */ - "nop\n": : ); +static char **linux_argv; +static char **linux_env; +static char *linux_env_p; + +#if defined(CONFIG_WASP_SUPPORT) +void wasp_set_cca(void) +{ + /* Set cache coherency attribute */ + asm("mfc0 $t0, $16\n" /* CP0_CONFIG == 16 */ + "li $t1, ~7\n" + "and $t0, $t0, $t1\n" + "ori $t0, 3\n" /* CONF_CM_CACHABLE_NONCOHERENT */ + "mtc0 $t0, $16\n" /* CP0_CONFIG == 16 */ + "nop\n": : ); } #endif -void do_bootm_linux(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]){ - //ulong initrd_start = 0, initrd_end = 0; - int flash_size_mbytes; - void(*theKernel)(int, char **, char **, int); - image_header_t *hdr = &header; - char *commandline = getenv("bootargs"); - char env_buf[12]; - - theKernel = (void (*)(int, char **, char **, int))ntohl(hdr->ih_ep); - -#ifdef DEBUG - printf("## Bootargs: %s\n", commandline); - printf("## Transferring control to Linux (at address %08lx) ...\n", (ulong)theKernel); -#endif - - linux_params_init(UNCACHED_SDRAM(gd->bd->bi_boot_params), commandline); - - sprintf(env_buf, "%lu", gd->ram_size >> 20); - -#ifdef DEBUG - printf("## Giving linux memsize in MB, %lu\n", gd->ram_size >> 20); -#endif - - linux_env_set("memsize", env_buf); - - //sprintf(env_buf, "0x%08X", (uint)UNCACHED_SDRAM(initrd_start)); - //linux_env_set("initrd_start", env_buf); - - //sprintf(env_buf, "0x%X", (uint)(initrd_end - initrd_start)); - //linux_env_set("initrd_size", env_buf); - - sprintf(env_buf, "0x%08X", (uint)(gd->bd->bi_flashstart)); - linux_env_set("flash_start", env_buf); - - sprintf(env_buf, "0x%X", (uint)(gd->bd->bi_flashsize)); - linux_env_set("flash_size", env_buf); - - // we assume that the kernel is in place - printf("Starting kernel...\n\n"); - -#ifdef CONFIG_WASP_SUPPORT - wasp_set_cca(); -#endif - -#if defined(CONFIG_FOR_DRAGINO_V2) || defined(CONFIG_FOR_MESH_POTATO_V2) - // Restore WAN/LAN LEDs (BIT 3 and 7 in GPIO_FUNCTION_1) - ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) | 0x88)); -#endif - - // Pass the flash size as expected by current Linux kernel for AR7100 - flash_size_mbytes = gd->bd->bi_flashsize/(1024 * 1024); - theKernel(linux_argc, linux_argv, linux_env, flash_size_mbytes); -} - -static void linux_params_init(ulong start, char *line){ +static void linux_params_init(ulong start, char *cmdline) +{ + char memstr[16]; char *next, *quote, *argp; - char memstr[32]; linux_argc = 1; linux_argv = (char **)start; linux_argv[0] = 0; argp = (char *)(linux_argv + LINUX_MAX_ARGS); - next = line; + next = cmdline; - if(strstr(line, "mem=")){ + if (strstr(cmdline, "mem=")) memstr[0] = 0; - } else { + else memstr[0] = 1; - } - while(line && *line && linux_argc < LINUX_MAX_ARGS){ - quote = strchr(line, '"'); - next = strchr(line, ' '); + while (cmdline && *cmdline && linux_argc < LINUX_MAX_ARGS) { + quote = strchr(cmdline, '"'); + next = strchr(cmdline, ' '); - while(next != NULL && quote != NULL && quote < next){ - /* we found a left quote before the next blank + while (next != NULL && quote != NULL && quote < next) { + /* + * We found a left quote before the next blank * now we have to find the matching right quote */ next = strchr(quote + 1, '"'); - if(next != NULL){ + if (next != NULL) { quote = strchr(next + 1, '"'); - next = strchr(next + 1, ' '); + next = strchr(next + 1, ' '); } } - if(next == NULL){ - next = line + strlen(line); - } + if (next == NULL) + next = cmdline + strlen(cmdline); linux_argv[linux_argc] = argp; - memcpy(argp, line, next - line); - argp[next - line] = 0; + memcpy(argp, cmdline, next - cmdline); + argp[next - cmdline] = 0; - argp += next - line + 1; + argp += next - cmdline + 1; linux_argc++; - if(*next){ + if (*next) next++; - } - line = next; + cmdline = next; } - /* Add mem size to command line */ - if(memstr[0]){ + /* Add mem size to command line if it's missing' */ + if (memstr[0]) { sprintf(memstr, "mem=%luM", gd->ram_size >> 20); - memcpy(argp, memstr, strlen(memstr)+1); + memcpy(argp, memstr, strlen(memstr) + 1); + linux_argv[linux_argc] = argp; linux_argc++; + argp += strlen(memstr) + 1; } linux_env = (char **)(((ulong)argp + 15) & ~15); linux_env[0] = 0; + linux_env_p = (char *)(linux_env + LINUX_MAX_ENVS); linux_env_idx = 0; } -static void linux_env_set(char *env_name, char *env_val){ - if(linux_env_idx < LINUX_MAX_ENVS - 1){ +static void linux_env_set(char *env_name, char *env_val) +{ + if (linux_env_idx < LINUX_MAX_ENVS - 1) { linux_env[linux_env_idx] = linux_env_p; strcpy(linux_env_p, env_name); @@ -199,3 +143,54 @@ static void linux_env_set(char *env_name, char *env_val){ linux_env[++linux_env_idx] = 0; } } + +void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + char buf[16]; + char *cmdline; + unsigned int flash_mb; + image_header_t *hdr = &header; + void(*theKernel)(int, char **, char **, int); + + cmdline = getenv("bootargs"); + + theKernel = (void (*)(int, char **, char **, int))ntohl(hdr->ih_ep); + +#if defined(DEBUG) + printf("## Bootargs: %s\n", cmdline); + printf("## Transferring control to Linux (at address %08lx) ...\n", + (ulong)theKernel); +#endif + + linux_params_init(UNCACHED_SDRAM(gd->bd->bi_boot_params), cmdline); + +#if defined(DEBUG) + printf("## Giving linux memsize in MB, %lu\n", gd->ram_size >> 20); +#endif + + sprintf(buf, "%lu", gd->ram_size >> 20); + linux_env_set("memsize", buf); + + sprintf(buf, "0x%X", (unsigned int)(gd->bd->bi_flashstart)); + linux_env_set("flash_start", buf); + + sprintf(buf, "0x%X", (unsigned int)(gd->bd->bi_flashsize)); + linux_env_set("flash_size", buf); + + /* We assume that the kernel is in place */ + printf("Starting kernel...\n\n"); + +#if defined(CONFIG_WASP_SUPPORT) + wasp_set_cca(); +#endif + +#if defined(CONFIG_FOR_DRAGINO_V2) || defined(CONFIG_FOR_MESH_POTATO_V2) + /* Restore WAN/LAN LEDs (BIT 3 and 7 in GPIO_FUNCTION_1) */ + ar7240_reg_wr(AR7240_GPIO_FUNC, + (ar7240_reg_rd(AR7240_GPIO_FUNC) | 0x88)); +#endif + + /* Pass the flash size as expected by current Linux kernel for AR7100 */ + flash_mb = gd->bd->bi_flashsize >> 20; + theKernel(linux_argc, linux_argv, linux_env, flash_mb); +} -- 2.25.1