app: aboot: Dynamic partition support for update commandline

Change to update commandline to support dynamic partitions,
enablement.

Change-Id: Ia302e7199023d889a794a5c3ea8bd713ece3da54
Signed-off-by: Mayank Grover <groverm@codeaurora.org>
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index ea90598..584ba35 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -162,6 +162,8 @@
 #else
 static const char *emmc_cmdline = " androidboot.emmc=true";
 #endif
+static const char *dynamic_bootdev_cmdline =
+				" androidboot.boot_devices=soc/";
 static const char *usb_sn_cmdline = " androidboot.serialno=";
 static const char *androidboot_mode = " androidboot.mode=";
 
@@ -484,12 +486,19 @@
 	}
 	if (target_is_emmc_boot()) {
 		cmdline_len += strlen(emmc_cmdline);
-#if USE_BOOTDEV_CMDLINE
 		boot_dev_buf = (char *) malloc(sizeof(char) * BOOT_DEV_MAX_LEN);
-		ASSERT(boot_dev_buf);
-		platform_boot_dev_cmdline(boot_dev_buf);
-		cmdline_len += strlen(boot_dev_buf);
+		if (!boot_dev_buf) {
+			dprintf(CRITICAL, "ERROR: Failed to allocate boot_dev_buf\n");
+		} else {
+			platform_boot_dev_cmdline(boot_dev_buf);
+#if USE_BOOTDEV_CMDLINE
+			cmdline_len += strlen(boot_dev_buf);
 #endif
+			if (target_dynamic_partition_supported()) {
+				cmdline_len += strlen(dynamic_bootdev_cmdline);
+				cmdline_len += strlen(boot_dev_buf);
+			}
+		}
 	}
 
 	cmdline_len += strlen(usb_sn_cmdline);
@@ -663,7 +672,10 @@
 		partition_multislot_is_supported())
 	{
 		cmdline_len += strlen(sys_path_cmdline);
-		if (!boot_into_recovery)
+
+		/* For dynamic partition, support skip skip_initramfs */
+		if (!target_dynamic_partition_supported() &&
+			!boot_into_recovery)
 			cmdline_len += strlen(skip_ramfs);
 	}
 
@@ -723,9 +735,22 @@
 			while ((*dst++ = *src++));
 #if USE_BOOTDEV_CMDLINE
 			src = boot_dev_buf;
-			if (have_cmdline) --dst;
-			while ((*dst++ = *src++));
+			if (have_cmdline &&
+				boot_dev_buf) {
+				--dst;
+				while ((*dst++ = *src++));
+			}
 #endif
+			/* Dynamic partition append boot_devices */
+			if (target_dynamic_partition_supported() &&
+				boot_dev_buf) {
+				src = dynamic_bootdev_cmdline;
+				if (have_cmdline) --dst;
+				while ((*dst++ = *src++));
+				src = boot_dev_buf;
+				if (have_cmdline) --dst;
+				while ((*dst++ = *src++));
+			}
 		}
 
 #if VERIFIED_BOOT
@@ -923,7 +948,8 @@
 			partition_multislot_is_supported()) &&
 			have_cmdline)
 		{
-			if (!boot_into_recovery)
+			if (!target_dynamic_partition_supported() &&
+				!boot_into_recovery)
 			{
 				src = skip_ramfs;
 				--dst;