public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v3 0/8] MIPS: bootm updates
@ 2013-08-11 19:39 Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 1/8] MIPS: bootm: fix checkpatch.pl warnings Daniel Schwierzeck
                   ` (7 more replies)
  0 siblings, 8 replies; 10+ messages in thread
From: Daniel Schwierzeck @ 2013-08-11 19:39 UTC (permalink / raw)
  To: u-boot

- refactoring and optimization of bootm command
- add support for logical memory blocks (LMB)
- make external init ramdisks working again with recent kernels
- add support for bootm subcommand 'cmdline'
- prepare bootm for upcoming device tree support
- add bootm support for newly added MIPS Malta Qemu
- drop obsolete bootm support of MIPS Qemu

Changes in v3:
- rebased to current master
- drop patches 6, 8 and 9, which need further discussion and review
- removed boot_prep_linux_legacy due to dropped patches

Changes in v2:
- fix multi-line comment
- use debug() macro

Daniel Schwierzeck (8):
  MIPS: bootm: fix checkpatch.pl warnings
  MIPS: bootm: optimize kernel entry call
  MIPS: bootm: add support for LMB
  MIPS: bootm: refactor initialisation of kernel cmdline
  MIPS: bootm: refactor initialisation of kernel environment
  MIPS: bootm: add support for generic relocation of init ramdisks
  MIPS: bootm: add YAMON style Linux preparation/jump code for Qemu
    Malta
  MIPS: bootm: drop obsolete Qemu specific bootm implementation

 arch/mips/include/asm/config.h  |   3 +
 arch/mips/lib/Makefile          |   4 -
 arch/mips/lib/bootm.c           | 241 ++++++++++++++++++++++++++--------------
 arch/mips/lib/bootm_qemu_mips.c |  62 -----------
 4 files changed, 160 insertions(+), 150 deletions(-)
 delete mode 100644 arch/mips/lib/bootm_qemu_mips.c

-- 
1.8.1.2

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 1/8] MIPS: bootm: fix checkpatch.pl warnings
  2013-08-11 19:39 [U-Boot] [PATCH v3 0/8] MIPS: bootm updates Daniel Schwierzeck
@ 2013-08-11 19:39 ` Daniel Schwierzeck
  2013-08-14 13:06   ` Gabor Juhos
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 2/8] MIPS: bootm: optimize kernel entry call Daniel Schwierzeck
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 10+ messages in thread
From: Daniel Schwierzeck @ 2013-08-11 19:39 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

---
Changes in v3: None
Changes in v2:
- fix multi-line comment

 arch/mips/lib/bootm.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c
index ade9af4..e7aa11a 100644
--- a/arch/mips/lib/bootm.c
+++ b/arch/mips/lib/bootm.c
@@ -41,7 +41,7 @@ static void boot_prep_linux(bootm_headers_t *images)
 #else
 	sprintf(env_buf, "%lu", (ulong)(gd->ram_size >> 20));
 	debug("## Giving linux memsize in MB, %lu\n",
-		(ulong)(gd->ram_size >> 20));
+	      (ulong)(gd->ram_size >> 20));
 #endif /* CONFIG_MEMSIZE_IN_BYTES */
 
 	linux_env_set("memsize", env_buf);
@@ -114,9 +114,9 @@ static void linux_params_init(ulong start, char *line)
 	char *next, *quote, *argp;
 
 	linux_argc = 1;
-	linux_argv = (char **) start;
+	linux_argv = (char **)start;
 	linux_argv[0] = 0;
-	argp = (char *) (linux_argv + LINUX_MAX_ARGS);
+	argp = (char *)(linux_argv + LINUX_MAX_ARGS);
 
 	next = line;
 
@@ -125,7 +125,8 @@ static void linux_params_init(ulong start, char *line)
 		next = strchr(line, ' ');
 
 		while (next && quote && quote < next) {
-			/* we found a left quote before the next blank
+			/*
+			 * we found a left quote before the next blank
 			 * now we have to find the matching right quote
 			 */
 			next = strchr(quote + 1, '"');
@@ -151,9 +152,9 @@ static void linux_params_init(ulong start, char *line)
 		line = next;
 	}
 
-	linux_env = (char **) (((ulong) argp + 15) & ~15);
+	linux_env = (char **)(((ulong) argp + 15) & ~15);
 	linux_env[0] = 0;
-	linux_env_p = (char *) (linux_env + LINUX_MAX_ENVS);
+	linux_env_p = (char *)(linux_env + LINUX_MAX_ENVS);
 	linux_env_idx = 0;
 }
 
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 2/8] MIPS: bootm: optimize kernel entry call
  2013-08-11 19:39 [U-Boot] [PATCH v3 0/8] MIPS: bootm updates Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 1/8] MIPS: bootm: fix checkpatch.pl warnings Daniel Schwierzeck
@ 2013-08-11 19:39 ` Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 3/8] MIPS: bootm: add support for LMB Daniel Schwierzeck
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 10+ messages in thread
From: Daniel Schwierzeck @ 2013-08-11 19:39 UTC (permalink / raw)
  To: u-boot

Fix signature of kernel entry function. Mark the kernel entry
with __noreturn for better code optimisation.

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
---
Changes in v3: None
Changes in v2: None

 arch/mips/lib/bootm.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c
index e7aa11a..692f7dc 100644
--- a/arch/mips/lib/bootm.c
+++ b/arch/mips/lib/bootm.c
@@ -69,20 +69,17 @@ static void boot_prep_linux(bootm_headers_t *images)
 
 static void boot_jump_linux(bootm_headers_t *images)
 {
-	void (*theKernel) (int, char **, char **, int *);
+	typedef void __noreturn (*kernel_entry_t)(int, ulong, ulong, ulong);
+	kernel_entry_t kernel = (kernel_entry_t) images->ep;
 
-	/* find kernel entry point */
-	theKernel = (void (*)(int, char **, char **, int *))images->ep;
-
-	debug("## Transferring control to Linux (at address %08lx) ...\n",
-		(ulong) theKernel);
+	debug("## Transferring control to Linux (at address %p) ...\n", kernel);
 
 	bootstage_mark(BOOTSTAGE_ID_RUN_OS);
 
 	/* we assume that the kernel is in place */
 	printf("\nStarting kernel ...\n\n");
 
-	theKernel(linux_argc, linux_argv, linux_env, 0);
+	kernel(linux_argc, (ulong)linux_argv, (ulong)linux_env, 0);
 }
 
 int do_bootm_linux(int flag, int argc, char * const argv[],
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 3/8] MIPS: bootm: add support for LMB
  2013-08-11 19:39 [U-Boot] [PATCH v3 0/8] MIPS: bootm updates Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 1/8] MIPS: bootm: fix checkpatch.pl warnings Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 2/8] MIPS: bootm: optimize kernel entry call Daniel Schwierzeck
@ 2013-08-11 19:39 ` Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 4/8] MIPS: bootm: refactor initialisation of kernel cmdline Daniel Schwierzeck
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 10+ messages in thread
From: Daniel Schwierzeck @ 2013-08-11 19:39 UTC (permalink / raw)
  To: u-boot

This is required for init ramdisk relocation and device tree
support.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
---
Changes in v3: None
Changes in v2: None

 arch/mips/include/asm/config.h |  2 ++
 arch/mips/lib/bootm.c          | 21 +++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/arch/mips/include/asm/config.h b/arch/mips/include/asm/config.h
index cd29734..6eb1cee 100644
--- a/arch/mips/include/asm/config.h
+++ b/arch/mips/include/asm/config.h
@@ -7,4 +7,6 @@
 #ifndef _ASM_CONFIG_H_
 #define _ASM_CONFIG_H_
 
+#define CONFIG_LMB
+
 #endif
diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c
index 692f7dc..59ed632 100644
--- a/arch/mips/lib/bootm.c
+++ b/arch/mips/lib/bootm.c
@@ -27,6 +27,27 @@ 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);
 
+static ulong arch_get_sp(void)
+{
+	ulong ret;
+
+	__asm__ __volatile__("move %0, $sp" : "=r"(ret) : );
+
+	return ret;
+}
+
+void arch_lmb_reserve(struct lmb *lmb)
+{
+	ulong sp;
+
+	sp = arch_get_sp();
+	debug("## Current stack ends at 0x%08lx\n", sp);
+
+	/* adjust sp by 4K to be safe */
+	sp -= 4096;
+	lmb_reserve(lmb, sp, CONFIG_SYS_SDRAM_BASE + gd->ram_size - sp);
+}
+
 static void boot_prep_linux(bootm_headers_t *images)
 {
 	char *commandline = getenv("bootargs");
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 4/8] MIPS: bootm: refactor initialisation of kernel cmdline
  2013-08-11 19:39 [U-Boot] [PATCH v3 0/8] MIPS: bootm updates Daniel Schwierzeck
                   ` (2 preceding siblings ...)
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 3/8] MIPS: bootm: add support for LMB Daniel Schwierzeck
@ 2013-08-11 19:39 ` Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 5/8] MIPS: bootm: refactor initialisation of kernel environment Daniel Schwierzeck
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 10+ messages in thread
From: Daniel Schwierzeck @ 2013-08-11 19:39 UTC (permalink / raw)
  To: u-boot

Move initialisation of Linux command line to separate functions.
Also add support for bootm subcommand 'cmdline'.

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

---
Changes in v3: None
Changes in v2:
- use debug() macro

 arch/mips/lib/bootm.c | 130 ++++++++++++++++++++++++++++++++------------------
 1 file changed, 83 insertions(+), 47 deletions(-)

diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c
index 59ed632..ba9fd68 100644
--- a/arch/mips/lib/bootm.c
+++ b/arch/mips/lib/bootm.c
@@ -19,12 +19,13 @@ DECLARE_GLOBAL_DATA_PTR;
 
 static int linux_argc;
 static char **linux_argv;
+static char *linux_argp;
 
 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_params_init(void);
 static void linux_env_set(char *env_name, char *env_val);
 
 static ulong arch_get_sp(void)
@@ -48,13 +49,83 @@ void arch_lmb_reserve(struct lmb *lmb)
 	lmb_reserve(lmb, sp, CONFIG_SYS_SDRAM_BASE + gd->ram_size - sp);
 }
 
+static void linux_cmdline_init(void)
+{
+	linux_argc = 1;
+	linux_argv = (char **)UNCACHED_SDRAM(gd->bd->bi_boot_params);
+	linux_argv[0] = 0;
+	linux_argp = (char *)(linux_argv + LINUX_MAX_ARGS);
+}
+
+static void linux_cmdline_set(const char *value, size_t len)
+{
+	linux_argv[linux_argc] = linux_argp;
+	memcpy(linux_argp, value, len);
+	linux_argp[len] = 0;
+
+	linux_argp += len + 1;
+	linux_argc++;
+}
+
+static void linux_cmdline_dump(void)
+{
+	int i;
+
+	debug("## cmdline argv at 0x%p, argp at 0x%p\n",
+	      linux_argv, linux_argp);
+
+	for (i = 1; i < linux_argc; i++)
+		debug("   arg %03d: %s\n", i, linux_argv[i]);
+}
+
+static void boot_cmdline_linux(bootm_headers_t *images)
+{
+	const char *bootargs, *next, *quote;
+
+	linux_cmdline_init();
+
+	bootargs = getenv("bootargs");
+	if (!bootargs)
+		return;
+
+	next = bootargs;
+
+	while (bootargs && *bootargs && linux_argc < LINUX_MAX_ARGS) {
+		quote = strchr(bootargs, '"');
+		next = strchr(bootargs, ' ');
+
+		while (next && quote && 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) {
+				quote = strchr(next + 1, '"');
+				next = strchr(next + 1, ' ');
+			}
+		}
+
+		if (!next)
+			next = bootargs + strlen(bootargs);
+
+		linux_cmdline_set(bootargs, next - bootargs);
+
+		if (*next)
+			next++;
+
+		bootargs = next;
+	}
+
+	linux_cmdline_dump();
+}
+
 static void boot_prep_linux(bootm_headers_t *images)
 {
-	char *commandline = getenv("bootargs");
 	char env_buf[12];
 	char *cp;
 
-	linux_params_init(UNCACHED_SDRAM(gd->bd->bi_boot_params), commandline);
+	linux_params_init();
 
 #ifdef CONFIG_MEMSIZE_IN_BYTES
 	sprintf(env_buf, "%lu", (ulong)gd->ram_size);
@@ -107,9 +178,14 @@ int do_bootm_linux(int flag, int argc, char * const argv[],
 			bootm_headers_t *images)
 {
 	/* No need for those on MIPS */
-	if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)
+	if (flag & BOOTM_STATE_OS_BD_T)
 		return -1;
 
+	if (flag & BOOTM_STATE_OS_CMDLINE) {
+		boot_cmdline_linux(images);
+		return 0;
+	}
+
 	if (flag & BOOTM_STATE_OS_PREP) {
 		boot_prep_linux(images);
 		return 0;
@@ -120,6 +196,7 @@ int do_bootm_linux(int flag, int argc, char * const argv[],
 		return 0;
 	}
 
+	boot_cmdline_linux(images);
 	boot_prep_linux(images);
 	boot_jump_linux(images);
 
@@ -127,50 +204,9 @@ int do_bootm_linux(int flag, int argc, char * const argv[],
 	return 1;
 }
 
-static void linux_params_init(ulong start, char *line)
+static void linux_params_init(void)
 {
-	char *next, *quote, *argp;
-
-	linux_argc = 1;
-	linux_argv = (char **)start;
-	linux_argv[0] = 0;
-	argp = (char *)(linux_argv + LINUX_MAX_ARGS);
-
-	next = line;
-
-	while (line && *line && linux_argc < LINUX_MAX_ARGS) {
-		quote = strchr(line, '"');
-		next = strchr(line, ' ');
-
-		while (next && quote && 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) {
-				quote = strchr(next + 1, '"');
-				next = strchr(next + 1, ' ');
-			}
-		}
-
-		if (!next)
-			next = line + strlen(line);
-
-		linux_argv[linux_argc] = argp;
-		memcpy(argp, line, next - line);
-		argp[next - line] = 0;
-
-		argp += next - line + 1;
-		linux_argc++;
-
-		if (*next)
-			next++;
-
-		line = next;
-	}
-
-	linux_env = (char **)(((ulong) argp + 15) & ~15);
+	linux_env = (char **)(((ulong) linux_argp + 15) & ~15);
 	linux_env[0] = 0;
 	linux_env_p = (char *)(linux_env + LINUX_MAX_ENVS);
 	linux_env_idx = 0;
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 5/8] MIPS: bootm: refactor initialisation of kernel environment
  2013-08-11 19:39 [U-Boot] [PATCH v3 0/8] MIPS: bootm updates Daniel Schwierzeck
                   ` (3 preceding siblings ...)
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 4/8] MIPS: bootm: refactor initialisation of kernel cmdline Daniel Schwierzeck
@ 2013-08-11 19:39 ` Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 6/8] MIPS: bootm: add support for generic relocation of init ramdisks Daniel Schwierzeck
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 10+ messages in thread
From: Daniel Schwierzeck @ 2013-08-11 19:39 UTC (permalink / raw)
  To: u-boot

Move initialisation of Linux environment to separate functions.

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

---
Changes in v3:
- removed boot_prep_linux_legacy due to dropped patches

Changes in v2: None

 arch/mips/lib/bootm.c | 62 ++++++++++++++++++++++++---------------------------
 1 file changed, 29 insertions(+), 33 deletions(-)

diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c
index ba9fd68..257390b 100644
--- a/arch/mips/lib/bootm.c
+++ b/arch/mips/lib/bootm.c
@@ -25,9 +25,6 @@ static char **linux_env;
 static char *linux_env_p;
 static int linux_env_idx;
 
-static void linux_params_init(void);
-static void linux_env_set(char *env_name, char *env_val);
-
 static ulong arch_get_sp(void)
 {
 	ulong ret;
@@ -120,12 +117,36 @@ static void boot_cmdline_linux(bootm_headers_t *images)
 	linux_cmdline_dump();
 }
 
+static void linux_env_init(void)
+{
+	linux_env = (char **)(((ulong) linux_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(const char *env_name, const 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);
+		linux_env_p += strlen(env_name);
+
+		*linux_env_p++ = '=';
+
+		strcpy(linux_env_p, env_val);
+		linux_env_p += strlen(env_val);
+
+		linux_env_p++;
+		linux_env[++linux_env_idx] = 0;
+	}
+}
+
 static void boot_prep_linux(bootm_headers_t *images)
 {
 	char env_buf[12];
-	char *cp;
-
-	linux_params_init();
+	const char *cp;
 
 #ifdef CONFIG_MEMSIZE_IN_BYTES
 	sprintf(env_buf, "%lu", (ulong)gd->ram_size);
@@ -136,6 +157,8 @@ static void boot_prep_linux(bootm_headers_t *images)
 	      (ulong)(gd->ram_size >> 20));
 #endif /* CONFIG_MEMSIZE_IN_BYTES */
 
+	linux_env_init();
+
 	linux_env_set("memsize", env_buf);
 
 	sprintf(env_buf, "0x%08X", (uint) UNCACHED_SDRAM(images->rd_start));
@@ -203,30 +226,3 @@ int do_bootm_linux(int flag, int argc, char * const argv[],
 	/* does not return */
 	return 1;
 }
-
-static void linux_params_init(void)
-{
-	linux_env = (char **)(((ulong) linux_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) {
-		linux_env[linux_env_idx] = linux_env_p;
-
-		strcpy(linux_env_p, env_name);
-		linux_env_p += strlen(env_name);
-
-		strcpy(linux_env_p, "=");
-		linux_env_p += 1;
-
-		strcpy(linux_env_p, env_val);
-		linux_env_p += strlen(env_val);
-
-		linux_env_p++;
-		linux_env[++linux_env_idx] = 0;
-	}
-}
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 6/8] MIPS: bootm: add support for generic relocation of init ramdisks
  2013-08-11 19:39 [U-Boot] [PATCH v3 0/8] MIPS: bootm updates Daniel Schwierzeck
                   ` (4 preceding siblings ...)
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 5/8] MIPS: bootm: refactor initialisation of kernel environment Daniel Schwierzeck
@ 2013-08-11 19:39 ` Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 7/8] MIPS: bootm: add YAMON style Linux preparation/jump code for Qemu Malta Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 8/8] MIPS: bootm: drop obsolete Qemu specific bootm implementation Daniel Schwierzeck
  7 siblings, 0 replies; 10+ messages in thread
From: Daniel Schwierzeck @ 2013-08-11 19:39 UTC (permalink / raw)
  To: u-boot

All linux kernels after v2.6 require a page-aligned location of
an external init ramdisk. Enable CONFIG_SYS_BOOT_RAMDISK_HIGH to
support this with the generic U-Boot relocation code.

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
---
Changes in v3: None
Changes in v2: None

 arch/mips/include/asm/config.h | 1 +
 arch/mips/lib/bootm.c          | 8 ++++++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/arch/mips/include/asm/config.h b/arch/mips/include/asm/config.h
index 6eb1cee..3a891ba 100644
--- a/arch/mips/include/asm/config.h
+++ b/arch/mips/include/asm/config.h
@@ -8,5 +8,6 @@
 #define _ASM_CONFIG_H_
 
 #define CONFIG_LMB
+#define CONFIG_SYS_BOOT_RAMDISK_HIGH
 
 #endif
diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c
index 257390b..27e0b1b 100644
--- a/arch/mips/lib/bootm.c
+++ b/arch/mips/lib/bootm.c
@@ -147,6 +147,7 @@ static void boot_prep_linux(bootm_headers_t *images)
 {
 	char env_buf[12];
 	const char *cp;
+	ulong rd_start, rd_size;
 
 #ifdef CONFIG_MEMSIZE_IN_BYTES
 	sprintf(env_buf, "%lu", (ulong)gd->ram_size);
@@ -157,14 +158,17 @@ static void boot_prep_linux(bootm_headers_t *images)
 	      (ulong)(gd->ram_size >> 20));
 #endif /* CONFIG_MEMSIZE_IN_BYTES */
 
+	rd_start = UNCACHED_SDRAM(images->initrd_start);
+	rd_size = images->initrd_end - images->initrd_start;
+
 	linux_env_init();
 
 	linux_env_set("memsize", env_buf);
 
-	sprintf(env_buf, "0x%08X", (uint) UNCACHED_SDRAM(images->rd_start));
+	sprintf(env_buf, "0x%08lX", rd_start);
 	linux_env_set("initrd_start", env_buf);
 
-	sprintf(env_buf, "0x%X", (uint) (images->rd_end - images->rd_start));
+	sprintf(env_buf, "0x%lX", rd_size);
 	linux_env_set("initrd_size", env_buf);
 
 	sprintf(env_buf, "0x%08X", (uint) (gd->bd->bi_flashstart));
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 7/8] MIPS: bootm: add YAMON style Linux preparation/jump code for Qemu Malta
  2013-08-11 19:39 [U-Boot] [PATCH v3 0/8] MIPS: bootm updates Daniel Schwierzeck
                   ` (5 preceding siblings ...)
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 6/8] MIPS: bootm: add support for generic relocation of init ramdisks Daniel Schwierzeck
@ 2013-08-11 19:39 ` Daniel Schwierzeck
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 8/8] MIPS: bootm: drop obsolete Qemu specific bootm implementation Daniel Schwierzeck
  7 siblings, 0 replies; 10+ messages in thread
From: Daniel Schwierzeck @ 2013-08-11 19:39 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
---
Changes in v3: None
Changes in v2: None

 arch/mips/lib/bootm.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c
index 27e0b1b..66340ea 100644
--- a/arch/mips/lib/bootm.c
+++ b/arch/mips/lib/bootm.c
@@ -17,6 +17,12 @@ DECLARE_GLOBAL_DATA_PTR;
 #define	LINUX_MAX_ENVS		256
 #define	LINUX_MAX_ARGS		256
 
+#if defined(CONFIG_QEMU_MALTA)
+#define mips_boot_qemu_malta	1
+#else
+#define mips_boot_qemu_malta	0
+#endif
+
 static int linux_argc;
 static char **linux_argv;
 static char *linux_argp;
@@ -133,7 +139,12 @@ static void linux_env_set(const char *env_name, const char *env_val)
 		strcpy(linux_env_p, env_name);
 		linux_env_p += strlen(env_name);
 
-		*linux_env_p++ = '=';
+		if (mips_boot_qemu_malta) {
+			linux_env_p++;
+			linux_env[++linux_env_idx] = linux_env_p;
+		} else {
+			*linux_env_p++ = '=';
+		}
 
 		strcpy(linux_env_p, env_val);
 		linux_env_p += strlen(env_val);
@@ -184,21 +195,28 @@ static void boot_prep_linux(bootm_headers_t *images)
 	cp = getenv("eth1addr");
 	if (cp)
 		linux_env_set("eth1addr", cp);
+
+	if (mips_boot_qemu_malta)
+		linux_env_set("modetty0", "38400n8r");
 }
 
 static void boot_jump_linux(bootm_headers_t *images)
 {
 	typedef void __noreturn (*kernel_entry_t)(int, ulong, ulong, ulong);
 	kernel_entry_t kernel = (kernel_entry_t) images->ep;
+	ulong linux_extra = 0;
 
 	debug("## Transferring control to Linux (at address %p) ...\n", kernel);
 
 	bootstage_mark(BOOTSTAGE_ID_RUN_OS);
 
+	if (mips_boot_qemu_malta)
+		linux_extra = gd->ram_size;
+
 	/* we assume that the kernel is in place */
 	printf("\nStarting kernel ...\n\n");
 
-	kernel(linux_argc, (ulong)linux_argv, (ulong)linux_env, 0);
+	kernel(linux_argc, (ulong)linux_argv, (ulong)linux_env, linux_extra);
 }
 
 int do_bootm_linux(int flag, int argc, char * const argv[],
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 8/8] MIPS: bootm: drop obsolete Qemu specific bootm implementation
  2013-08-11 19:39 [U-Boot] [PATCH v3 0/8] MIPS: bootm updates Daniel Schwierzeck
                   ` (6 preceding siblings ...)
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 7/8] MIPS: bootm: add YAMON style Linux preparation/jump code for Qemu Malta Daniel Schwierzeck
@ 2013-08-11 19:39 ` Daniel Schwierzeck
  7 siblings, 0 replies; 10+ messages in thread
From: Daniel Schwierzeck @ 2013-08-11 19:39 UTC (permalink / raw)
  To: u-boot

The Qemu specific bootm implementation was intended for a special
Qemu target in Linux kernel. But this target has been dropped in
v2.6.25-rc1 by commit 302922e5f6901eb6f29c58539631f71b3d9746b8

    Author: Ralf Baechle <ralf@linux-mips.org>
    Date:   Tue Jan 29 10:15:02 2008 +0000

    [MIPS] Qemu: Remove platform.

    The Qemu platform was originally implemented to have an easily supportable
    platform until Qemu reaches a state where it emulates a real world system.
    Since the latest release Qemu is capable of emulating the MIPSsim and
    Malta platforms, so this goal has been reached.  The Qemu plaform is also
    rather underfeatured so less useful than a Malta emulation.

Thus the special bootm implementation is obsolete by now and can be
dropped. The Qemu support in U-Boot is going to be replaced by MIPS Malta
board support.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

---
Changes in v3: None
Changes in v2: None

 arch/mips/lib/Makefile          |  4 ---
 arch/mips/lib/bootm_qemu_mips.c | 62 -----------------------------------------
 2 files changed, 66 deletions(-)
 delete mode 100644 arch/mips/lib/bootm_qemu_mips.c

diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile
index e9f82f7..f91406c 100644
--- a/arch/mips/lib/Makefile
+++ b/arch/mips/lib/Makefile
@@ -19,11 +19,7 @@ LGOBJS	:= $(addprefix $(obj),$(GLSOBJS))
 SOBJS-y	+=
 
 COBJS-y	+= board.o
-ifeq ($(CONFIG_QEMU_MIPS),y)
-COBJS-$(CONFIG_CMD_BOOTM) += bootm_qemu_mips.o
-else
 COBJS-$(CONFIG_CMD_BOOTM) += bootm.o
-endif
 
 SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS	:= $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
diff --git a/arch/mips/lib/bootm_qemu_mips.c b/arch/mips/lib/bootm_qemu_mips.c
deleted file mode 100644
index 910ab73..0000000
--- a/arch/mips/lib/bootm_qemu_mips.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * (C) Copyright 2008
- * Jean-Christophe PLAGNIOL-VILLARD <jcplagniol@jcrosoft.com>
- *
- * SPDX-License-Identifier:	GPL-2.0+
- */
-
-#include <common.h>
-#include <command.h>
-#include <image.h>
-#include <asm/byteorder.h>
-#include <asm/addrspace.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-int do_bootm_linux(int flag, int argc, char * const argv[],
-			bootm_headers_t *images)
-{
-	void (*theKernel) (int, char **, char **, int *);
-	char *bootargs = getenv("bootargs");
-	char *start;
-	uint len;
-
-	/* find kernel entry point */
-	theKernel = (void (*)(int, char **, char **, int *))images->ep;
-
-	bootstage_mark(BOOTSTAGE_ID_RUN_OS);
-
-	debug("## Transferring control to Linux (at address %08lx) ...\n",
-		(ulong) theKernel);
-
-	gd->bd->bi_boot_params = gd->bd->bi_memstart + (16 << 20) - 256;
-	debug("%-12s= 0x%08lX\n", "boot_params", (ulong)gd->bd->bi_boot_params);
-
-	/* set Magic */
-	*(int32_t *)(gd->bd->bi_boot_params - 4) = 0x12345678;
-	/* set ram_size */
-	*(int32_t *)(gd->bd->bi_boot_params - 8) = gd->ram_size;
-
-	start = (char *)gd->bd->bi_boot_params;
-
-	len = strlen(bootargs);
-
-	strncpy(start, bootargs, len + 1);
-
-	start += len;
-
-	len = images->rd_end - images->rd_start;
-	if (len > 0) {
-		start += sprintf(start, " rd_start=0x%08X rd_size=0x%0X",
-		(uint) UNCACHED_SDRAM(images->rd_start),
-		(uint) len);
-	}
-
-	/* we assume that the kernel is in place */
-	printf("\nStarting kernel ...\n\n");
-
-	theKernel(0, NULL, NULL, 0);
-
-	/* does not return */
-	return 1;
-}
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH v3 1/8] MIPS: bootm: fix checkpatch.pl warnings
  2013-08-11 19:39 ` [U-Boot] [PATCH v3 1/8] MIPS: bootm: fix checkpatch.pl warnings Daniel Schwierzeck
@ 2013-08-14 13:06   ` Gabor Juhos
  0 siblings, 0 replies; 10+ messages in thread
From: Gabor Juhos @ 2013-08-14 13:06 UTC (permalink / raw)
  To: u-boot

2013.08.11. 21:39 keltez?ssel, Daniel Schwierzeck ?rta:
> Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

Looks good, but the subject line is misleading a bit. I would expect that the
patch fixes all warnings, however there are some CamelCase warnings even after
the patch.

-Gabor

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2013-08-14 13:06 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-11 19:39 [U-Boot] [PATCH v3 0/8] MIPS: bootm updates Daniel Schwierzeck
2013-08-11 19:39 ` [U-Boot] [PATCH v3 1/8] MIPS: bootm: fix checkpatch.pl warnings Daniel Schwierzeck
2013-08-14 13:06   ` Gabor Juhos
2013-08-11 19:39 ` [U-Boot] [PATCH v3 2/8] MIPS: bootm: optimize kernel entry call Daniel Schwierzeck
2013-08-11 19:39 ` [U-Boot] [PATCH v3 3/8] MIPS: bootm: add support for LMB Daniel Schwierzeck
2013-08-11 19:39 ` [U-Boot] [PATCH v3 4/8] MIPS: bootm: refactor initialisation of kernel cmdline Daniel Schwierzeck
2013-08-11 19:39 ` [U-Boot] [PATCH v3 5/8] MIPS: bootm: refactor initialisation of kernel environment Daniel Schwierzeck
2013-08-11 19:39 ` [U-Boot] [PATCH v3 6/8] MIPS: bootm: add support for generic relocation of init ramdisks Daniel Schwierzeck
2013-08-11 19:39 ` [U-Boot] [PATCH v3 7/8] MIPS: bootm: add YAMON style Linux preparation/jump code for Qemu Malta Daniel Schwierzeck
2013-08-11 19:39 ` [U-Boot] [PATCH v3 8/8] MIPS: bootm: drop obsolete Qemu specific bootm implementation Daniel Schwierzeck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox