summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Westerhof <mwester@dls.net>2007-02-15 06:53:35 +0000
committerMike Westerhof <mwester@dls.net>2007-02-15 06:53:35 +0000
commitd31aa0829942777aadf63719508902cf2a5bf1f0 (patch)
treee286ced0a7a4f2f81a22264e16d826cf29c89728
parent95785b5abe1a39b33a613cb1ccf00cbdcb16d65f (diff)
arm-kernel-shim: Update DSM-G600 kernel shim to supply a default cmline,
if the cmdline passed in from the bootloader is empty or missing.
-rw-r--r--packages/arm-kernel-shim/arm-kernel-shim_1.3.bb3
-rw-r--r--packages/arm-kernel-shim/files/cmdline_if_none.patch45
-rw-r--r--packages/arm-kernel-shim/files/config-dsmg600.h7
3 files changed, 52 insertions, 3 deletions
diff --git a/packages/arm-kernel-shim/arm-kernel-shim_1.3.bb b/packages/arm-kernel-shim/arm-kernel-shim_1.3.bb
index 0c9ad35235..4014d9e866 100644
--- a/packages/arm-kernel-shim/arm-kernel-shim_1.3.bb
+++ b/packages/arm-kernel-shim/arm-kernel-shim_1.3.bb
@@ -3,12 +3,13 @@ SECTION = ""
PRIORITY = "optional"
HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
LICENSE = "GPL"
-PR = "r3"
+PR = "r4"
COMPATIBLE_MACHINE = "(ixp4xx|nslu2)"
SRC_URI = "ftp://ftp.buici.com/pub/arm/arm-kernel-shim/arm-kernel-shim-${PV}.tar.gz \
file://passthrough-atags.patch;patch=1 \
+ file://cmdline_if_none.patch;patch=1 \
file://config-nslu2.h \
file://config-nas100d.h \
file://config-dsmg600.h \
diff --git a/packages/arm-kernel-shim/files/cmdline_if_none.patch b/packages/arm-kernel-shim/files/cmdline_if_none.patch
new file mode 100644
index 0000000000..460f7be090
--- /dev/null
+++ b/packages/arm-kernel-shim/files/cmdline_if_none.patch
@@ -0,0 +1,45 @@
+--- arm-kernel-shim-1.3/main.c.orig 2007-02-14 19:05:35.000000000 -0600
++++ arm-kernel-shim-1.3/main.c 2007-02-14 22:48:06.000000000 -0600
+@@ -153,6 +153,42 @@
+ p->hdr.tag = ATAG_NONE;
+ p->hdr.size = 0;
+
++#else
++
++#ifdef CMDLINE_IF_NONE
++
++ /* Walk over the ATAG list, we need to find the end of the list.
++ * If we find a command line tag, stash away the pointer to the
++ * actual command line itself. Note that the implementation
++ * below assumes a single ATAG_CMDLINE passed in from the
++ * bootloader, which may not be a good assumption in all cases.
++ */
++ {
++ char *c = 0;
++ for_each_tag(p, (struct tag*) PHYS_PARAMS)
++ if (p->hdr.tag == ATAG_CMDLINE) c = p->u.cmdline.cmdline;
++
++ /* p -> final tag (ATAG_NONE), and c -> command line if found */
++ /* if no ATAG_CMDLINE, or command line is empty, add the default one. */
++
++ if ((c == 0) || (*c == 0)) {
++ p->hdr.tag = ATAG_CMDLINE;
++ p->hdr.size = tag_size (tag_cmdline)
++ + (sizeof (cmdline)+3)/4 - 1;
++ {
++ const char* sz = cmdline + offset;
++ int i;
++ for (i = 0; i < sizeof (cmdline); ++i)
++ p->u.cmdline.cmdline[i] = sz[i];
++ }
++ p = tag_next (p);
++ p->hdr.tag = ATAG_NONE;
++ p->hdr.size = 0;
++ }
++ }
++
++#endif
++
+ #endif
+
+ /* Pass control to the kernel */
diff --git a/packages/arm-kernel-shim/files/config-dsmg600.h b/packages/arm-kernel-shim/files/config-dsmg600.h
index 5f90fb424d..3203052d51 100644
--- a/packages/arm-kernel-shim/files/config-dsmg600.h
+++ b/packages/arm-kernel-shim/files/config-dsmg600.h
@@ -22,14 +22,17 @@
//#define RAM_BANK1_START 0xd0000000
//#define RAM_BANK1_LENGTH 0x10000000
-//#define COMMANDLINE\
-// "init=/linuxrc root=/dev/mtdblock2 rootfstype=jffs2 rw noirqdebug console=ttyS0,115200n8"
+#define COMMANDLINE \
+ "init=/linuxrc root=/dev/mtdblock2 rootfstype=jffs2 rw noirqdebug console=ttyS0,115200n8"
#define MACH_TYPE 964
/* The DSM-G600 RedBoot sets up the ATAGs correctly */
#define PASSTHROUGH_ATAGS
+/* but if the command line passed in is empty, use the default above. */
+#define CMDLINE_IF_NONE
+
/* Uncomment one of these if you need to switch the CPU into a
specific mode. */
//#define FORCE_LITTLEENDIAN