summaryrefslogtreecommitdiffstats
path: root/target/linux/mcs814x/patches-3.3/010-fdt_config_cmdline_extend.patch
diff options
context:
space:
mode:
authorflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-06-19 14:48:56 +0000
committerflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-06-19 14:48:56 +0000
commit7c90f3b2b498531a267b0e85c4f634f65d76eba8 (patch)
tree7b34e2be994fc0c2bdd15a6868864b39be34d6bc /target/linux/mcs814x/patches-3.3/010-fdt_config_cmdline_extend.patch
parent5fa7ed291ee18d3d7e6f24ee803ac6cfb96b625e (diff)
[mcs814x] add Moschip MSC814x support
This target currently only supports Moschip's MCS8140 SoC, but support for other chips in the same family (MCS8142, MCS8144) will be easy to add. Target support is entirely using Device Tree for probing peripherals. Drivers support include: - PCI - USB 1 & 2 - watchdog - random number generator - UART - timer - internal Ethernet PHY - Ethernet MAC core Support for the following boards is included using Device Tree - Devolo dLAN USB Extender - Tigal RBT-832 git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32462 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/mcs814x/patches-3.3/010-fdt_config_cmdline_extend.patch')
-rw-r--r--target/linux/mcs814x/patches-3.3/010-fdt_config_cmdline_extend.patch140
1 files changed, 140 insertions, 0 deletions
diff --git a/target/linux/mcs814x/patches-3.3/010-fdt_config_cmdline_extend.patch b/target/linux/mcs814x/patches-3.3/010-fdt_config_cmdline_extend.patch
new file mode 100644
index 000000000..8735fd8e9
--- /dev/null
+++ b/target/linux/mcs814x/patches-3.3/010-fdt_config_cmdline_extend.patch
@@ -0,0 +1,140 @@
+The old logic assumes CMDLINE_FROM_BOOTLOADER vs. CMDLINE_FORCE and
+ignores CMDLINE_EXTEND. Here's the old logic:
+
+- CONFIG_CMDLINE_FORCE=true
+ CONFIG_CMDLINE
+- dt bootargs=non-empty:
+ dt bootargs
+- dt bootargs=empty, @data is non-empty string
+ @data is left unchanged
+- dt bootargs=empty, @data is empty string
+ CONFIG_CMDLINE (or "" if that's not defined)
+
+The new logic is now documented in of_fdt.h and is copied here for
+reference:
+
+- CONFIG_CMDLINE_FORCE=true
+ CONFIG_CMDLINE
+- CONFIG_CMDLINE_EXTEND=true, @data is non-empty string
+ @data + dt bootargs (even if dt bootargs are empty)
+- CONFIG_CMDLINE_EXTEND=true, @data is empty string
+ CONFIG_CMDLINE + dt bootargs (even if dt bootargs are empty)
+- CMDLINE_FROM_BOOTLOADER=true, dt bootargs=non-empty:
+ dt bootargs
+- CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is non-empty string
+ @data is left unchanged
+- CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is empty string
+ CONFIG_CMDLINE (or "" if that's not defined)
+
+Signed-off-by: Doug Anderson <diand...@chromium.org>
+CC: devicetree-discuss@lists.ozlabs.org
+CC: Grant Likely <grant.lik...@secretlab.ca>
+CC: Benjamin Herrenschmidt <b...@kernel.crashing.org>
+CC: Rob Herring <rob.herr...@calxeda.com>
+---
+
+--- a/drivers/of/fdt.c
++++ b/drivers/of/fdt.c
+@@ -663,6 +663,29 @@ int __init early_init_dt_scan_memory(uns
+ return 0;
+ }
+
++/*
++ * Convert configs to something easy to use in C code
++ */
++#if defined(CONFIG_CMDLINE_FORCE)
++static const int overwrite_incoming_cmdline = 1;
++static const int read_dt_cmdline;
++static const int concat_cmdline;
++#elif defined(CONFIG_CMDLINE_EXTEND)
++static const int overwrite_incoming_cmdline;
++static const int read_dt_cmdline = 1;
++static const int concat_cmdline = 1;
++#else /* CMDLINE_FROM_BOOTLOADER */
++static const int overwrite_incoming_cmdline;
++static const int read_dt_cmdline = 1;
++static const int concat_cmdline;
++#endif
++
++#ifdef CONFIG_CMDLINE
++static const char *config_cmdline = CONFIG_CMDLINE;
++#else
++static const char *config_cmdline = "";
++#endif
++
+ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
+ int depth, void *data)
+ {
+@@ -677,22 +700,26 @@ int __init early_init_dt_scan_chosen(uns
+
+ early_init_dt_check_for_initrd(node);
+
+- /* Retrieve command line */
+- p = of_get_flat_dt_prop(node, "bootargs", &l);
+- if (p != NULL && l > 0)
+- strlcpy(data, p, min((int)l, COMMAND_LINE_SIZE));
+-
+- /*
+- * CONFIG_CMDLINE is meant to be a default in case nothing else
+- * managed to set the command line, unless CONFIG_CMDLINE_FORCE
+- * is set in which case we override whatever was found earlier.
+- */
+-#ifdef CONFIG_CMDLINE
+-#ifndef CONFIG_CMDLINE_FORCE
+- if (!((char *)data)[0])
+-#endif
+- strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
+-#endif /* CONFIG_CMDLINE */
++ /* Put CONFIG_CMDLINE in if forced or if data had nothing in it to start */
++ if (overwrite_incoming_cmdline || !((char *)data)[0])
++ strlcpy(data, config_cmdline, COMMAND_LINE_SIZE);
++
++ /* Retrieve command line unless forcing */
++ if (read_dt_cmdline) {
++ p = of_get_flat_dt_prop(node, "bootargs", &l);
++ if (p != NULL && l > 0) {
++ if (concat_cmdline) {
++ strlcat(data, " ", COMMAND_LINE_SIZE);
++ strlcat(data, p, min_t(int, (int)l,
++ COMMAND_LINE_SIZE));
++ } else
++ strlcpy(data, p, min_t(int, (int)l,
++ COMMAND_LINE_SIZE));
++ }
++ }
++
++ pr_debug("Command line is: %s\n", (char*)data);
++
+
+ pr_debug("Command line is: %s\n", (char*)data);
+
+--- a/include/linux/of_fdt.h
++++ b/include/linux/of_fdt.h
+@@ -91,6 +91,27 @@ extern int of_flat_dt_is_compatible(unsi
+ extern int of_flat_dt_match(unsigned long node, const char *const *matches);
+ extern unsigned long of_get_flat_dt_root(void);
+
++/*
++ * early_init_dt_scan_chosen - scan the device tree for ramdisk and bootargs
++ *
++ * The boot arguments will be placed into the memory pointed to by @data.
++ * That memory should be COMMAND_LINE_SIZE big and initialized to be a valid
++ * (possibly empty) string. Logic for what will be in @data after this
++ * function finishes:
++ *
++ * - CONFIG_CMDLINE_FORCE=true
++ * CONFIG_CMDLINE
++ * - CONFIG_CMDLINE_EXTEND=true, @data is non-empty string
++ * @data + dt bootargs (even if dt bootargs are empty)
++ * - CONFIG_CMDLINE_EXTEND=true, @data is empty string
++ * CONFIG_CMDLINE + dt bootargs (even if dt bootargs are empty)
++ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=non-empty:
++ * dt bootargs
++ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is non-empty string
++ * @data is left unchanged
++ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is empty string
++ * CONFIG_CMDLINE (or "" if that's not defined)
++ */
+ extern int early_init_dt_scan_chosen(unsigned long node, const char *uname,
+ int depth, void *data);
+ extern void early_init_dt_check_for_initrd(unsigned long node);