From 4f999c3661ce6d85fda1bb97019c61f31d5edc11 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Thu, 9 Feb 2006 11:59:03 +0000 Subject: ixp4xx-kernel: Added patchset and metadata for 2.6.16-rc2 kernel. --- .../2.6.16/48-setup-byteswap-cmdline.patch | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 packages/linux/ixp4xx-kernel/2.6.16/48-setup-byteswap-cmdline.patch (limited to 'packages/linux/ixp4xx-kernel/2.6.16/48-setup-byteswap-cmdline.patch') diff --git a/packages/linux/ixp4xx-kernel/2.6.16/48-setup-byteswap-cmdline.patch b/packages/linux/ixp4xx-kernel/2.6.16/48-setup-byteswap-cmdline.patch new file mode 100644 index 0000000000..1c2243ba35 --- /dev/null +++ b/packages/linux/ixp4xx-kernel/2.6.16/48-setup-byteswap-cmdline.patch @@ -0,0 +1,51 @@ +When invoking an LE kernel from a BE boot loader or vice versa +the ATAG_CMDLINE command line will be byte swapped, other ATAGs +are fine because they are 32 bit values. + +This patch adds support for a command line option "swx " - which +must be at the start of the command line - and which is used to +detect a need to byte swap the rest of the command line. + +Signed-off-by: John Bowler + + arch/arm/kernel/setup.c | 29 ++++++++++++++++++++++++++++- + 1 file changed, 28 insertions(+), 1 deletion(-) + +--- linux-nslu2.orig/arch/arm/kernel/setup.c 2006-02-06 20:37:00.000000000 +0100 ++++ linux-nslu2/arch/arm/kernel/setup.c 2006-02-06 21:49:18.000000000 +0100 +@@ -660,7 +660,34 @@ __tagtable(ATAG_REVISION, parse_tag_revi + + static int __init parse_tag_cmdline(const struct tag *tag) + { +- strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE); ++ /* Check the first four bytes for "swx " (swap, but it's ++ * ok) or " xws" (command line is byte swapped) ++ */ ++ const char *cmdline = tag->u.cmdline.cmdline; ++ u32 size = tag->hdr.size; ++ ++ if (size > 0 && !memcmp(cmdline, " xws", 4)) { ++ cmdline += 4; ++ ++ if (--size > 0) { ++ const u32 *from = (const u32*)cmdline; ++ u32 *to = (u32*)default_command_line; ++ ++ if (size > COMMAND_LINE_SIZE/4) ++ size = COMMAND_LINE_SIZE/4; ++ ++ while (size-- > 0) ++ to[size] = swab32(from[size]); ++ ++ default_command_line[COMMAND_LINE_SIZE-1] = 0; ++ return 0; ++ } ++ } ++ ++ if (size > 0 && !memcmp(cmdline, "swx ", 4)) ++ cmdline += 4; ++ ++ strlcpy(default_command_line, cmdline, COMMAND_LINE_SIZE); + return 0; + } + -- cgit v1.2.3