summaryrefslogtreecommitdiff
path: root/target/linux/brcm2708/patches-4.4/0050-fdt-Add-support-for-the-CONFIG_CMDLINE_EXTEND-option.patch
blob: f7e8b29a2cac8a3b2be8ae0debe1e27acf820225 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
From 0f79afb206f238e89f1cb5c40299f6fd6a47dda3 Mon Sep 17 00:00:00 2001
From: Phil Elwell <phil@raspberrypi.org>
Date: Fri, 5 Dec 2014 17:26:26 +0000
Subject: [PATCH 050/381] fdt: Add support for the CONFIG_CMDLINE_EXTEND option

---
 drivers/of/fdt.c | 29 ++++++++++++++++++++++++-----
 1 file changed, 24 insertions(+), 5 deletions(-)

--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -954,19 +954,38 @@ int __init early_init_dt_scan_chosen(uns
 
 	/* 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.
+	 *
+	 * However, it can be useful to be able to treat the default as
+	 * a starting point to be extended using CONFIG_CMDLINE_EXTEND.
 	 */
+	((char *)data)[0] = '\0';
+
 #ifdef CONFIG_CMDLINE
-#ifndef CONFIG_CMDLINE_FORCE
-	if (!((char *)data)[0])
+	strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
+
+	if (p != NULL && l > 0)	{
+#if defined(CONFIG_CMDLINE_EXTEND)
+		int len = strlen(data);
+		if (len > 0) {
+			strlcat(data, " ", COMMAND_LINE_SIZE);
+			len++;
+		}
+		strlcpy((char *)data + len, p, min((int)l, COMMAND_LINE_SIZE - len));
+#elif defined(CONFIG_CMDLINE_FORCE)
+		pr_warning("Ignoring bootargs property (using the default kernel command line)\n");
+#else
+		/* Neither extend nor force - just override */
+		strlcpy(data, p, min((int)l, COMMAND_LINE_SIZE));
 #endif
-		strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
+	}
+#else /* CONFIG_CMDLINE */
+	if (p != NULL && l > 0)
+		strlcpy(data, p, min((int)l, COMMAND_LINE_SIZE));
 #endif /* CONFIG_CMDLINE */
 
 	pr_debug("Command line is: %s\n", (char*)data);