All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Scott Wood <scottwood@freescale.com>
Cc: linuxppc-dev@ozlabs.org
Subject: Re: [PATCH 11/17] bootwrapper: Make set_cmdline non-static, and accept a const buffer.
Date: Sat, 17 Mar 2007 12:36:10 +1100	[thread overview]
Message-ID: <20070317013610.GI3969@localhost.localdomain> (raw)
In-Reply-To: <20070316172857.GK29784@ld0162-tx32.am.freescale.net>

On Fri, Mar 16, 2007 at 12:28:57PM -0500, Scott Wood wrote:
> This allows platform code to call set_cmdline to initialize
> /chosen/bootargs with a command line passed by the bootloader.
> 
> Signed-off-by: Scott Wood <scottwood@freescale.com>

Ugh, can we hold off on this and the other cmdline related one for a
little.  I had a different approach for cleaning up the cmdline
handling to make it easier for the platform to set the command line.
Um.. patch below.  It won't work, as is, because it depends on my
unfinished device tree utils patch, but with luck the idea will be
clear enough.

Index: working-2.6/arch/powerpc/boot/main.c
===================================================================
--- working-2.6.orig/arch/powerpc/boot/main.c	2007-03-16 15:09:24.000000000 +1100
+++ working-2.6/arch/powerpc/boot/main.c	2007-03-16 16:14:46.000000000 +1100
@@ -211,31 +211,22 @@ static struct addr_range prep_initrd(str
  * edit the command line passed to vmlinux (by setting /chosen/bootargs).
  * The buffer is put in it's own section so that tools may locate it easier.
  */
-static char builtin_cmdline[COMMAND_LINE_SIZE]
+static char cmdline[COMMAND_LINE_SIZE]
 	__attribute__((__section__("__builtin_cmdline")));
 
-static void get_cmdline(char *buf, int size)
+static void prep_cmdline(void)
 {
-	void *devp;
-	int len = strlen(builtin_cmdline);
-
-	buf[0] = '\0';
-
-	if (len > 0) { /* builtin_cmdline overrides dt's /chosen/bootargs */
-		len = min(len, size-1);
-		strncpy(buf, builtin_cmdline, len);
-		buf[len] = '\0';
-	}
-	else if ((devp = finddevice("/chosen")))
-		getprop(devp, "bootargs", buf, size);
-}
-
-static void set_cmdline(char *buf)
-{
-	void *devp;
-
-	if ((devp = finddevice("/chosen")))
-		setprop(devp, "bootargs", buf, strlen(buf) + 1);
+	if (cmdline[0] == '\0')
+		dt_path_getprop("/chosen", "bootargs", cmdline,
+				COMMAND_LINE_SIZE-1);
+
+	printf("\n\rLinux/PowerPC load: %s", cmdline);
+	/* If possible, edit the command line */
+	if (console_ops.edit_cmdline)
+		console_ops.edit_cmdline(cmdline, COMMAND_LINE_SIZE);
+	printf("\n\r");
+	/* Put the command line back into the devtree for the kernel */
+	dt_fixup_prop_str("/chosen", "bootargs", cmdline);
 }
 
 struct platform_ops platform_ops;
@@ -247,9 +238,15 @@ void start(void)
 {
 	struct addr_range vmlinux, initrd;
 	kernel_entry_t kentry;
-	char cmdline[COMMAND_LINE_SIZE];
 	unsigned long ft_addr = 0;
 
+	/* Do this first, because malloc() could clobber the loader's
+	 * command line.  Only use the loader command line if a
+	 * built-in command line wasn't set by an external tool */
+	if ((loader_info.cmdline_len > 0) && (cmdline[0] == '\0'))
+		memmove(cmdline, loader_info.cmdline,
+			min(loader_info.cmdline_len, COMMAND_LINE_SIZE-1));
+
 	if (console_ops.open && (console_ops.open() < 0))
 		exit();
 	if (platform_ops.fixups)
@@ -260,18 +257,7 @@ void start(void)
 	vmlinux = prep_kernel();
 	initrd = prep_initrd(vmlinux, loader_info.initrd_addr,
 			     loader_info.initrd_size);
-
-	/* If cmdline came from zimage wrapper or if we can edit the one
-	 * in the dt, print it out and edit it, if possible.
-	 */
-	if ((strlen(builtin_cmdline) > 0) || console_ops.edit_cmdline) {
-		get_cmdline(cmdline, COMMAND_LINE_SIZE);
-		printf("\n\rLinux/PowerPC load: %s", cmdline);
-		if (console_ops.edit_cmdline)
-			console_ops.edit_cmdline(cmdline, COMMAND_LINE_SIZE);
-		printf("\n\r");
-		set_cmdline(cmdline);
-	}
+	prep_cmdline();
 
 	printf("Finalizing device tree...");
 	if (dt_ops.finalize)
Index: working-2.6/arch/powerpc/boot/ops.h
===================================================================
--- working-2.6.orig/arch/powerpc/boot/ops.h	2007-03-16 15:09:24.000000000 +1100
+++ working-2.6/arch/powerpc/boot/ops.h	2007-03-16 16:12:30.000000000 +1100
@@ -63,6 +63,8 @@ struct serial_console_data {
 struct loader_info {
 	void *promptr;
 	unsigned long initrd_addr, initrd_size;
+	char *cmdline;
+	int cmdline_len;
 };
 extern struct loader_info loader_info;
 


-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

  reply	other threads:[~2007-03-17  1:36 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-16 17:26 [PATCH 00/17] bootwrapper/cuImage patches Scott Wood
2007-03-16 17:27 ` [PATCH 01/17] bootwrapper: Make ft_create_node() pay attention to the parent parameter Scott Wood
2007-03-17  1:23   ` David Gibson
2007-03-16 17:27 ` [PATCH 02/17] bootwrapper: Add dt_ops methods Scott Wood
2007-03-17  1:24   ` David Gibson
2007-03-16 17:27 ` [PATCH 03/17] bootwrapper: Add xlate_reg(), and use it to find serial registers Scott Wood
2007-03-20  3:50   ` David Gibson
2007-03-20 16:34     ` Scott Wood
2007-03-21  3:12       ` David Gibson
2007-03-21 13:49     ` Segher Boessenkool
2007-03-21 16:01       ` Scott Wood
2007-03-21 19:11         ` Segher Boessenkool
2007-03-16 17:27 ` [PATCH 04/17] bootwrapper: Make compression of the kernel image optional Scott Wood
2007-03-17  1:25   ` David Gibson
2007-03-21 15:03   ` Patch: " Milton Miller
2007-03-16 17:28 ` [PATCH 05/17] bootwrapper: misc device tree fixes Scott Wood
2007-03-21  1:51   ` David Gibson
2007-03-22 16:22     ` Scott Wood
2007-03-23  3:26       ` David Gibson
2007-03-21 13:22   ` Segher Boessenkool
2007-03-16 17:28 ` [PATCH 06/17] Document the linux,network-index property Scott Wood
2007-03-17  1:26   ` David Gibson
2007-03-21 13:30   ` Segher Boessenkool
2007-03-21 14:48     ` Yoder Stuart-B08248
2007-03-21 18:57       ` Segher Boessenkool
2007-03-22  0:29         ` David Gibson
2007-03-22 11:11           ` Segher Boessenkool
2007-03-23  3:19             ` David Gibson
2007-03-23 11:36               ` Segher Boessenkool
2007-03-23 23:59                 ` David Gibson
2007-03-24  0:23                   ` Segher Boessenkool
2007-03-23 15:00         ` Scott Wood
2007-03-23 16:42           ` Segher Boessenkool
2007-03-16 17:28 ` [PATCH 07/17] bootwrapper: Add dt_set_memory(), to fill in the /memory node Scott Wood
2007-03-17  1:26   ` David Gibson
2007-03-21 13:32     ` Segher Boessenkool
2007-03-21 23:42       ` David Gibson
2007-03-22 11:02         ` Segher Boessenkool
2007-03-23  3:24           ` David Gibson
2007-03-23  6:49             ` Stefan Roese
2007-03-23  7:40               ` David Gibson
2007-03-23 12:34             ` Segher Boessenkool
2007-03-16 17:28 ` [PATCH 08/17] bootwrapper: Make setprop accept a const buffer Scott Wood
2007-03-17  1:27   ` David Gibson
2007-03-16 17:28 ` [PATCH 09/17] bootwrapper: Add dt_set_cpu_clocks() Scott Wood
2007-03-17  1:28   ` David Gibson
2007-03-16 17:28 ` [PATCH 10/17] bootwrapper: Add dt_set_mac_addresses() Scott Wood
2007-03-17  1:31   ` David Gibson
2007-03-18  0:22     ` Timur Tabi
2007-03-18 11:56       ` David Gibson
2007-03-19 15:09         ` Timur Tabi
2007-03-20  3:59           ` David Gibson
2007-03-20 14:00             ` Timur Tabi
2007-03-21  2:54               ` David Gibson
2007-03-21 15:01                 ` Timur Tabi
2007-03-21 15:25                   ` Jerry Van Baren
2007-03-21 15:55                     ` Timur Tabi
2007-03-22  0:06                   ` David Gibson
2007-03-22 15:13                     ` Timur Tabi
2007-03-22 15:15                     ` Jon Loeliger
2007-03-23  3:22                       ` David Gibson
2007-03-23 14:38                         ` Timur Tabi
2007-03-23 16:37                           ` Segher Boessenkool
2007-03-23 16:42                             ` Timur Tabi
2007-03-23 16:51                               ` Segher Boessenkool
2007-03-23 16:54                                 ` Timur Tabi
2007-03-23 23:17                             ` David Gibson
2007-03-20 18:17           ` Jon Loeliger
2007-03-21 13:45           ` Segher Boessenkool
2007-03-21 15:15             ` Timur Tabi
2007-03-21 19:07               ` Segher Boessenkool
2007-03-21 19:10                 ` Timur Tabi
2007-03-21 19:34                   ` Segher Boessenkool
2007-03-21 19:39                     ` Timur Tabi
2007-03-21 19:48                       ` Segher Boessenkool
2007-03-21 20:03                         ` Timur Tabi
2007-03-21 20:22                           ` Olof Johansson
2007-03-21 21:58                             ` Segher Boessenkool
2007-03-21 21:54                           ` Segher Boessenkool
2007-03-21 20:34                         ` Doug Maxey
2007-03-21 22:01                           ` Segher Boessenkool
2007-03-21 13:38         ` Segher Boessenkool
2007-03-21 15:09           ` Timur Tabi
2007-03-16 17:28 ` [PATCH 11/17] bootwrapper: Make set_cmdline non-static, and accept a const buffer Scott Wood
2007-03-17  1:36   ` David Gibson [this message]
2007-03-16 17:29 ` [PATCH 12/17] bootwrapper: Make set_cmdline() create /chosen if it doesn't exist Scott Wood
2007-03-21 13:32   ` Segher Boessenkool
2007-03-16 17:29 ` [PATCH 13/17] bootwrapper: Add ppcboot.h Scott Wood
2007-03-16 17:29 ` [PATCH 14/17] bootwrapper: Add support for cuboot platforms Scott Wood
2007-03-16 17:29 ` [PATCH 15/17] bootwrapper: Add cmd_wrap_dt Scott Wood
2007-03-16 17:29 ` [PATCH 16/17] bootwrapper: Add a cuImage target Scott Wood
2007-03-16 17:29 ` [PATCH 17/17] bootwrapper: cuboot for 83xx Scott Wood

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070317013610.GI3969@localhost.localdomain \
    --to=david@gibson.dropbear.id.au \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=scottwood@freescale.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.