diff --git a/common/image-android.c b/common/image-android.c
index 0f6de83a03f0df668d3f91f5fec74aad77aefc41..a006120c5143efc7a2c87f3e2858327d163ee43b 100644
--- a/common/image-android.c
+++ b/common/image-android.c
@@ -97,6 +97,16 @@ int android_image_get_kernel(const struct andr_img_hdr *hdr, int verify,
 					serialnr.low);
 	strcat(commandline, newbootargs);
 #endif
+
+	/* append soc type into bootargs */
+	char *soc_type = getenv("soc_type");
+	if (soc_type) {
+		sprintf(newbootargs,
+			" androidboot.soc_type=%s",
+			soc_type);
+		strcat(commandline, newbootargs);
+	}
+
 	int bootdev = get_boot_device();
 	if (bootdev == SD1_BOOT || bootdev == SD2_BOOT ||
 		bootdev == SD3_BOOT || bootdev == SD4_BOOT) {
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index 0939234bde650cc706aa2c93f8c9d4ef25cbc05d..5280adf46c3627783740d70a6155cc90acdc3868 100644
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -33,6 +33,7 @@
 #endif
 
 #ifdef CONFIG_FSL_FASTBOOT
+#include <asm/imx-common/sys_proto.h>
 #include <fsl_fastboot.h>
 #include <mmc.h>
 #include <android_image.h>
@@ -1754,6 +1755,33 @@ void board_fastboot_setup(void)
 		printf("unsupported boot devices\n");
 		break;
 	}
+
+	/* add soc type into bootargs */
+	if (is_mx6dqp()) {
+		if (!getenv("soc_type"))
+			setenv("soc_type", "imx6qp");
+	} else if (is_mx6dq()) {
+		if (!getenv("soc_type"))
+			setenv("soc_type", "imx6q");
+	} else if (is_mx6sdl()) {
+		if (!getenv("soc_type"))
+			setenv("soc_type", "imx6dl");
+	} else if (is_mx6sx()) {
+		if (!getenv("soc_type"))
+			setenv("soc_type", "imx6sx");
+	} else if (is_mx6sl()) {
+		if (!getenv("soc_type"))
+			setenv("soc_type", "imx6sl");
+	} else if (is_mx6ul()) {
+		if (!getenv("soc_type"))
+			setenv("soc_type", "imx6ul");
+	} else if (is_mx7()) {
+		if (!getenv("soc_type"))
+			setenv("soc_type", "imx7d");
+	} else if (is_mx7ulp()) {
+		if (!getenv("soc_type"))
+			setenv("soc_type", "imx7ulp");
+	}
 }
 
 #ifdef CONFIG_ANDROID_RECOVERY