[fuchsia] Add native Fushcia booting for imx8m EVK board
diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
index 7236abe..2258cd9 100644
--- a/arch/arm/lib/bootm.c
+++ b/arch/arm/lib/bootm.c
@@ -30,6 +30,19 @@
 #include <asm/armv7.h>
 #endif
 
+#if defined(CONFIG_FUCHSIA_BOOT_IMAGE)
+#include <fuchsia/bootdata.h>
+#include <fuchsia/driver-config.h>
+
+static void append_bootdata(bootdata_t* container, uint32_t type, uint32_t extra,
+							const void* payload, uint32_t length);
+
+#if defined(CONFIG_IMX8MEVK)
+#include <fuchsia/board/imx8mevk/board-config.h>
+#endif
+
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 static struct tag *params;
@@ -433,3 +446,61 @@
 	((void (*)(void *))images->ep)(images->ft_addr);
 }
 #endif
+
+
+#if defined(CONFIG_FUCHSIA_BOOT_IMAGE)
+
+#define FUCHSIA_KERNEL_ALIGN	65536
+
+static void append_bootdata(bootdata_t* container, uint32_t type, uint32_t extra,
+							const void* payload, uint32_t length) {
+	bootdata_t* dest = (bootdata_t*)((uintptr_t)container + container->length + sizeof(bootdata_t));
+
+	dest->type = type;
+	dest->length = length;
+	dest->extra = extra;
+	dest->flags = 0;
+	dest->reserved0 = 0;
+	dest->reserved1 = 0;
+	dest->magic = BOOTITEM_MAGIC;
+	dest->crc32 = BOOTITEM_NO_CRC32;
+
+	if (length) {
+		memcpy(dest + 1, payload, length);
+	}
+	length = BOOTDATA_ALIGN(length + sizeof(bootdata_t));
+	container->length += length;
+}
+
+int do_bootm_fuchsia(int flag, int argc, char * const argv[],
+		   bootm_headers_t *images)
+{
+	bootdata_t* bootdata = (bootdata_t *)images->ep;
+	const bootdata_t* kernel_hdr = &bootdata[1];
+	const bootdata_kernel_t* kernel = (bootdata_kernel_t *)&bootdata[2];
+
+	append_board_bootdata(bootdata);
+
+	uint32_t bootdata_len = bootdata->length + sizeof(bootdata_t);
+	uint32_t kernel_len = kernel_hdr->length + 2 * sizeof(bootdata_t);
+
+	// If bootdata_len is greater than kernel_len,
+	// then we have bootdata records after the kernel.
+	// In that case we must relocate the kernel after the bootdata
+	if (bootdata_len > kernel_len) {
+		uintptr_t dest = (ulong)bootdata + bootdata_len;
+		// align to 64K boundary
+		dest = (dest + FUCHSIA_KERNEL_ALIGN - 1) & ~(FUCHSIA_KERNEL_ALIGN - 1);
+		memcpy((void *)dest, bootdata, kernel_len);
+		images->ep = dest + kernel->entry64;
+	} else {
+		images->ep = (ulong)bootdata + kernel->entry64;
+	}
+
+	// this will pass the bootdata pointer to the kernel via x0
+	images->ft_addr = (char *)bootdata;
+
+	boot_jump_linux(images, flag);
+	return 0;
+}
+#endif
diff --git a/common/Makefile b/common/Makefile
index a5e92dc..d0866f2 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -149,6 +149,7 @@
 obj-$(CONFIG_CMD_IDE) += ide.o
 obj-y += image.o
 obj-$(CONFIG_ANDROID_BOOT_IMAGE) += image-android.o
+obj-$(CONFIG_FUCHSIA_BOOT_IMAGE) += image-fuchsia.o
 obj-$(CONFIG_$(SPL_)OF_LIBFDT) += image-fdt.o
 obj-$(CONFIG_$(SPL_)FIT) += image-fit.o
 obj-$(CONFIG_$(SPL_)FIT_SIGNATURE) += image-sig.o
diff --git a/common/bootm.c b/common/bootm.c
index b2c0912..38f2e6e 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -164,6 +164,20 @@
 		ep_found = true;
 		break;
 #endif
+#ifdef CONFIG_FUCHSIA_BOOT_IMAGE
+	case IMAGE_FORMAT_FUCHSIA:
+		images.os.type = IH_TYPE_KERNEL;
+		images.os.comp =  fuchsia_image_get_comp(os_hdr);
+		images.os.os = IH_OS_FUCHSIA;
+
+		images.os.end = fuchsia_image_get_end(os_hdr);
+		images.os.load = fuchsia_image_get_kload(os_hdr);
+		if (images.os.load == 0x10008000)
+			images.os.load = 0x1080000;
+		images.ep = images.os.load;
+		ep_found = true;
+		break;
+#endif
 	default:
 		puts("ERROR: unknown image format type!\n");
 		return 1;
@@ -877,6 +891,15 @@
 		images->fit_noffset_os = os_noffset;
 		break;
 #endif
+#ifdef CONFIG_FUCHSIA_BOOT_IMAGE
+	case IMAGE_FORMAT_FUCHSIA:
+		printf("## Booting Fuchsia Image at 0x%08lx ...\n", img_addr);
+		buf = map_sysmem(img_addr, 0);
+		if (fuchsia_image_get_kernel(buf, images->verify,
+					     os_data, os_len))
+			return NULL;
+		break;
+#endif
 #ifdef CONFIG_ANDROID_BOOT_IMAGE
 	case IMAGE_FORMAT_ANDROID:
 		printf("## Booting Android Image at 0x%08lx ...\n", img_addr);
diff --git a/common/bootm_os.c b/common/bootm_os.c
index 6e463c3..4cc9421 100644
--- a/common/bootm_os.c
+++ b/common/bootm_os.c
@@ -477,6 +477,9 @@
 #ifdef CONFIG_BOOTM_OPENRTOS
 	[IH_OS_OPENRTOS] = do_bootm_openrtos,
 #endif
+#ifdef CONFIG_FUCHSIA_BOOT_IMAGE
+	[IH_OS_FUCHSIA] = do_bootm_fuchsia,
+#endif
 };
 
 /* Allow for arch specific config before we boot */
diff --git a/common/image-fuchsia.c b/common/image-fuchsia.c
new file mode 100644
index 0000000..e5b143f
--- /dev/null
+++ b/common/image-fuchsia.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018 The Fuchsia Authors
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <image.h>
+#include <fuchsia/bootdata.h>
+
+int fuchsia_image_check_header(const void *hdr)
+{
+    const bootdata_t* bootdata = hdr;
+
+    return (bootdata[0].type == BOOTDATA_CONTAINER &&
+            bootdata[0].extra == BOOTDATA_MAGIC &&
+            bootdata[0].magic == BOOTITEM_MAGIC &&
+            bootdata[1].type == BOOTDATA_KERNEL &&
+            bootdata[1].magic == BOOTITEM_MAGIC) ? 0 : -1;
+}
+
+/**
+ * fuchsia_image_get_kernel() - processes kernel part of Fuchsia bootdata
+ * @bootdata:   Pointer to bootdata.
+ * @verify:     Checksum verification flag. Currently unimplemented.
+ * @os_data:    Pointer to a ulong variable, will hold os data start
+ *          address.
+ * @os_len: Pointer to a ulong variable, will hold os data length.
+ *
+ * This function returns the os image's start address and length. Also,
+ * it appends the kernel command line to the bootargs env variable.
+ *
+ * Return: Zero, os start address and length on success,
+ *      otherwise on failure.
+ */
+int fuchsia_image_get_kernel(const void* hdr, int verify,
+                 ulong *os_data, ulong *os_len)
+{
+    if (fuchsia_image_check_header(hdr))
+        return -1;
+
+    const bootdata_t* bootdata = hdr;
+
+    *os_data = (ulong)bootdata;
+    *os_len = (ulong) bootdata->length + sizeof(bootdata_t);
+
+    return 0;
+}
+
+ulong fuchsia_image_get_end(const void *hdr)
+{
+    const bootdata_t* container_hdr = hdr;
+    return (ulong)hdr + container_hdr->length + sizeof(bootdata_t);
+}
+
+ulong fuchsia_image_get_kload(const void *hdr)
+{
+    return 0x40480000;
+}
+
+ulong fuchsia_image_get_comp(const void *hdr)
+{
+    return IH_COMP_NONE;
+}
\ No newline at end of file
diff --git a/common/image.c b/common/image.c
index 0f88984..1de9017 100644
--- a/common/image.c
+++ b/common/image.c
@@ -880,11 +880,14 @@
 	if (fdt_check_header(img_addr) == 0)
 		return IMAGE_FORMAT_FIT;
 #endif
+#ifdef CONFIG_FUCHSIA_BOOT_IMAGE
+	if (fuchsia_image_check_header(img_addr) == 0)
+		return IMAGE_FORMAT_FUCHSIA;
+#endif
 #ifdef CONFIG_ANDROID_BOOT_IMAGE
 	if (android_image_check_header(img_addr) == 0)
 		return IMAGE_FORMAT_ANDROID;
 #endif
-
 	return IMAGE_FORMAT_INVALID;
 }
 
diff --git a/configs/mx8mq_evk_android_defconfig b/configs/mx8mq_evk_android_defconfig
index 58383c0..14c99f7 100644
--- a/configs/mx8mq_evk_android_defconfig
+++ b/configs/mx8mq_evk_android_defconfig
@@ -37,3 +37,5 @@
 CONFIG_SPL_FIT=y
 CONFIG_SPL_LOAD_FIT=y
 CONFIG_LZ4=y
+CONFIG_VIDEO=y
+CONFIG_VIDEO_IMX8_HDMI=y
\ No newline at end of file
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index b4fec87..2b1bb9c 100755
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -23,6 +23,9 @@
 #include <linux/usb/gadget.h>
 #include <linux/usb/composite.h>
 #include <linux/compiler.h>
+#ifdef CONFIG_FUCHSIA_BOOT_IMAGE
+#include <fuchsia/bootdata.h>
+#endif
 #include <version.h>
 #include <g_dnl.h>
 #ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV
@@ -1585,7 +1588,25 @@
 		hdr = (struct andr_img_hdr *)avb_loadpart->data;
 		if (android_image_check_header(hdr)) {
 			printf("boota: bad boot image magic\n");
+#ifdef CONFIG_FUCHSIA_BOOT_IMAGE
+			if (fuchsia_image_check_header(hdr) == 0) {
+				printf("Found Fuchsia Image!!!!!\n");
+				const bootdata_t* bootdata = (bootdata_t*) hdr;
+				printf("Load bootdata at 0x%lx\n",fuchsia_image_get_kload(hdr));
+				memcpy((void *)(ulong)(fuchsia_image_get_kload(hdr)),
+					(void *)hdr,
+					sizeof(*bootdata) + ALIGN(bootdata->length, hdr->page_size));
+				char fboot_addr_start[12];
+				char *boot_args[] = { NULL,fboot_addr_start, NULL, NULL};
+				boot_args[0] = "bootm";
+				sprintf(fboot_addr_start, "0x%lx", fuchsia_image_get_kload(hdr));
+				do_bootm(NULL, 0, 2, boot_args);
+				/* This only happens if image is somehow faulty so we start over */
+				do_reset(NULL, 0, 0, NULL);
+			}
+#else
 			goto fail;
+#endif
 		}
 		if (avb_result == AVB_AB_FLOW_RESULT_OK)
 			printf(" verify OK, boot '%s%s'\n",
diff --git a/include/bootm.h b/include/bootm.h
index 4981377..b7fba6f 100644
--- a/include/bootm.h
+++ b/include/bootm.h
@@ -36,6 +36,8 @@
 			bootm_headers_t *images);
 
 extern boot_os_fn do_bootm_linux;
+extern boot_os_fn do_bootm_fuchsia;
+
 int do_bootelf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
 void lynxkdi_boot(image_header_t *hdr);
 
diff --git a/include/configs/imx8mq_evk.h b/include/configs/imx8mq_evk.h
index 315df99..58e4846 100644
--- a/include/configs/imx8mq_evk.h
+++ b/include/configs/imx8mq_evk.h
@@ -302,6 +302,7 @@
 /* Framebuffer */
 #ifdef CONFIG_VIDEO
 #define CONFIG_VIDEO_IMXDCSS
+#define CONFIG_VIDEO_IMXDCSS_1080P
 #define CONFIG_VIDEO_BMP_RLE8
 #define CONFIG_SPLASH_SCREEN
 #define CONFIG_SPLASH_SCREEN_ALIGN
diff --git a/include/configs/imx8mq_evk_android.h b/include/configs/imx8mq_evk_android.h
index ea19029..41da7ec 100644
--- a/include/configs/imx8mq_evk_android.h
+++ b/include/configs/imx8mq_evk_android.h
@@ -7,10 +7,15 @@
 #ifndef IMX8MQ_EVK_ANDROID_H
 #define IMX8MQ_EVK_ANDROID_H
 
+#define CONFIG_FUCHSIA_BOOT_IMAGE
+#define CONFIG_IMX8MEVK
+
 #define CONFIG_BOOTLOADER_OFFSET_33K
 #define CONFIG_BCB_SUPPORT
 #define CONFIG_CMD_READ
 
+#define CONFIG_SYS_BOOTM_LEN    0x1000000
+
 #define CONFIG_ENABLE_LOCKSTATUS_SUPPORT
 #define CONFIG_ANDROID_AB_SUPPORT
 #define CONFIG_AVB_SUPPORT
diff --git a/include/fuchsia/board/imx8mevk/board-config.h b/include/fuchsia/board/imx8mevk/board-config.h
new file mode 100644
index 0000000..5c21ebf
--- /dev/null
+++ b/include/fuchsia/board/imx8mevk/board-config.h
@@ -0,0 +1,87 @@
+// Copyright 2018 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#define PDEV_VID_NXP                9
+#define PDEV_PID_IMX8MEVK           1
+
+const char* BOOTLOADER_VERSION = "fuchsia-bootloader=0.03";
+
+static const bootdata_cpu_config_t cpu_config = {
+    .cluster_count = 1,
+    .clusters = {
+        {
+            .cpu_count = 4,
+        },
+    },
+};
+
+static const bootdata_mem_range_t mem_config[] = {
+    {
+        .type = BOOTDATA_MEM_RANGE_RAM,
+        .paddr = 0x40000000,
+        .length = 0xc0000000, // 3GB
+    },
+    {
+        .type = BOOTDATA_MEM_RANGE_PERIPHERAL,
+        .paddr = 0,
+        .length = 0x40000000,
+    },
+};
+
+static const dcfg_simple_t uart_driver = {
+    .mmio_phys = 0x30860000,
+    .irq = 58,
+};
+
+static const dcfg_arm_gicv3_driver_t gicv3_driver = {
+    .mmio_phys = 0x38800000,
+    .gicd_offset = 0x00000,
+    .gicr_offset = 0x80000,
+    .gicr_stride = 0x20000,
+    .ipi_base = 9,
+    // Used for Errata e11171
+    .mx8_gpr_phys = 0x30340000,
+};
+
+static const dcfg_arm_psci_driver_t psci_driver = {
+    .use_hvc = false,
+};
+
+static const dcfg_arm_generic_timer_driver_t timer_driver = {
+    .irq_phys = 30,
+    .irq_virt = 27,
+    .freq_override = 8333333,
+};
+
+static const bootdata_platform_id_t platform_id = {
+    .vid = PDEV_VID_NXP,
+    .pid = PDEV_PID_IMX8MEVK,
+    .board_name = "imx8mevk",
+};
+
+static void append_board_bootdata(bootdata_t* bootdata) {
+    // add CPU configuration
+    append_bootdata(bootdata, BOOTDATA_CPU_CONFIG, 0, &cpu_config,
+                    sizeof(bootdata_cpu_config_t) +
+                    sizeof(bootdata_cpu_cluster_t) * cpu_config.cluster_count);
+
+    // add memory configuration
+    append_bootdata(bootdata, BOOTDATA_MEM_CONFIG, 0, &mem_config,
+                    sizeof(bootdata_mem_range_t) * (sizeof(mem_config)/sizeof(mem_config[0])));
+
+    // add kernel drivers
+    append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_NXP_IMX_UART, &uart_driver,
+                    sizeof(uart_driver));
+    append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_ARM_GIC_V3, &gicv3_driver,
+                    sizeof(gicv3_driver));
+    append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_ARM_PSCI, &psci_driver,
+                    sizeof(psci_driver));
+    append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_ARM_GENERIC_TIMER, &timer_driver,
+                    sizeof(timer_driver));
+
+    append_bootdata(bootdata, BOOTDATA_CMDLINE, 0, BOOTLOADER_VERSION, strlen(BOOTLOADER_VERSION) + 1);
+
+    // add platform ID
+    append_bootdata(bootdata, BOOTDATA_PLATFORM_ID, 0, &platform_id, sizeof(platform_id));
+}
diff --git a/include/fuchsia/bootdata.h b/include/fuchsia/bootdata.h
new file mode 100644
index 0000000..7aa791a
--- /dev/null
+++ b/include/fuchsia/bootdata.h
@@ -0,0 +1,298 @@
+/*
+ * Copyright (c) 2018 The Fuchsia Authors
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _FUCHSIA_BOOTDATA_H_
+#define _FUCHSIA_BOOTDATA_H_
+
+// lsw of sha256("bootdata")
+#define BOOTDATA_MAGIC (0x868cf7e6)
+
+// lsw of sha256("bootitem")
+#define BOOTITEM_MAGIC (0xb5781729)
+
+// Round n up to the next 8 byte boundary
+#define BOOTDATA_ALIGN(n) (((n) + 7) & (~7))
+
+#define BOOTITEM_NO_CRC32 (0x4a87e8d6)
+
+// This flag is required.
+#define BOOTDATA_FLAG_V2         (0x00010000)
+
+// Bootdata items with the CRC32 flag must have a valid crc32.
+// Otherwise their crc32 field must contain BOOTITEM_NO_CRC32
+#define BOOTDATA_FLAG_CRC32      (0x00020000)
+
+// Containers are used to wrap a set of bootdata items
+// written to a file or partition.  The "length" is the
+// length of the set of following bootdata items.  The
+// "extra" is the value BOOTDATA_MAGIC and "flags" is
+// set to 0.
+#define BOOTDATA_CONTAINER        (0x544f4f42) // BOOT
+
+// BOOTFS images.  The "extra" field is the decompressed
+// size of the image, if compressed, otherwise the same
+// as the "length" field.
+#define BOOTDATA_BOOTFS_BOOT      (0x42534642) // BFSB
+#define BOOTDATA_BOOTFS_SYSTEM    (0x53534642) // BFSS
+#define BOOTDATA_BOOTFS_DISCARD   (0x58534642) // BFSX
+
+#define BOOTDATA_BOOTFS_MASK      (0x00FFFFFF)
+#define BOOTDATA_BOOTFS_TYPE      (0x00534642) // BFS\0
+
+// Virtual disk images.  The header fields and compression protocol
+// are the same as for the BOOTFS types, but the payload before
+// compression is a raw disk image rather than BOOTFS format.
+#define BOOTDATA_RAMDISK          (0x4b534452) // RDSK
+
+// A Zircon Kernel Image
+// Content: bootdata_kernel_t
+#define BOOTDATA_KERNEL           (0x4c4e524b) // KRNL
+
+// A Zircon Partition Map
+// Content: bootdata_partition_map_t
+#define BOOTDATA_PARTITION_MAP    (0x54524150) // PART
+
+// Flag indicating that the bootfs is compressed.
+#define BOOTDATA_BOOTFS_FLAG_COMPRESSED  (1 << 0)
+
+
+// These items are for passing from bootloader to kernel
+
+// Kernel Command Line String
+// Content: uint8_t[]
+#define BOOTDATA_CMDLINE          (0x4c444d43) // CMDL
+
+// ACPI Root Table Pointer
+// Content: uint64_t phys addr
+#define BOOTDATA_ACPI_RSDP        (0x50445352) // RSDP
+
+// SMBIOS entry point pointer
+// Content: uint64_t phys addr
+#define BOOTDATA_SMBIOS           (0x49424d53) // SMBI
+
+// Framebuffer Parameters
+// Content: bootdata_swfb_t
+#define BOOTDATA_FRAMEBUFFER      (0x42465753) // SWFB
+
+// Debug Serial Port
+// Content: bootdata_uart_t
+#define BOOTDATA_DEBUG_UART       (0x54524155) // UART
+
+// Platform ID Information
+// Content: bootdata_platform_id_t
+#define BOOTDATA_PLATFORM_ID      (0x44494C50) // PLID
+
+// Memory which will persist across warm boots
+// Content bootdata_lastlog_nvram_t
+#define BOOTDATA_LASTLOG_NVRAM    (0x4c4c564e) // NVLL
+
+// This reflects a typo we need to support for a while
+#define BOOTDATA_LASTLOG_NVRAM2   (0x4c4c5643) // CVLL
+
+// E820 Memory Table
+// Content: e820entry[]
+#define BOOTDATA_E820_TABLE       (0x30323845) // E820
+
+// EFI Memory Map
+// Content: a uint64_t entrysz followed by a set of
+// efi_memory_descriptor aligned on entrysz
+#define BOOTDATA_EFI_MEMORY_MAP   (0x4d494645) // EFIM
+
+// EFI System Table
+// Content: a uint64_t physical address of the table
+#define BOOTDATA_EFI_SYSTEM_TABLE (0x53494645) // EFIS
+
+// Last crashlog
+// Content: ascii/utf8 log data from previous boot
+#define BOOTDATA_LAST_CRASHLOG    (0x4d4f4f42) // BOOM
+
+// CPU configuration
+// Content: bootdata_cpu_config_t
+#define BOOTDATA_CPU_CONFIG       (0x43555043) // CPUC
+
+// Memory configuration
+// Content: one or more of bootdata_mem_range_t (count determined by bootdata_t length)
+#define BOOTDATA_MEM_CONFIG       (0x434D454D) // MEMC
+
+// Kernel driver configuration
+// Content: driver specific struct, with type determined by bootdata "extra" field
+#define BOOTDATA_KERNEL_DRIVER    (0x5652444B) // KDRV
+
+#define BOOTDATA_IGNORE           (0x50494b53) // SKIP
+
+// BootData header, describing the type and size of data
+// used to initialize the system. All fields are little-endian.
+//
+// BootData headers in a stream must be 8-byte-aligned.
+//
+// The length field specifies the actual payload length
+// and does not include the size of padding.
+typedef struct {
+    // Boot data type
+    uint32_t type;
+
+    // Size of the payload following this header
+    uint32_t length;
+
+    // type-specific extra data
+    // For CONTAINER this is MAGIC.
+    // For BOOTFS this is the decompressed size.
+    uint32_t extra;
+
+    // Flags for the boot data. See flag descriptions for each type.
+    uint32_t flags;
+
+    // For future expansion.  Set to 0.
+    uint32_t reserved0;
+    uint32_t reserved1;
+
+    // Must be BOOTITEM_MAGIC
+    uint32_t magic;
+
+    // Must be the CRC32 of payload if FLAG_CRC32 is set,
+    // otherwise must be BOOTITEM_NO_CRC32
+    uint32_t crc32;
+} bootdata_t;
+
+typedef struct {
+    uint64_t base; // physical base addr
+    uint32_t width;
+    uint32_t height;
+    uint32_t stride;
+    uint32_t format;
+} bootdata_swfb_t;
+
+typedef struct {
+    uint64_t entry64;
+    uint64_t reserved;
+} bootdata_kernel_t;
+
+typedef struct {
+    bootdata_t hdr_file;
+    bootdata_t hdr_kernel;
+    bootdata_kernel_t data_kernel;
+} zircon_kernel_t;
+
+#define BOOTDATA_PART_NAME_LEN 32
+#define BOOTDATA_PART_GUID_LEN 16
+
+typedef struct {
+    uint8_t type_guid[BOOTDATA_PART_GUID_LEN];
+    uint8_t uniq_guid[BOOTDATA_PART_GUID_LEN];
+    uint64_t first_block;
+    uint64_t last_block;
+    uint64_t flags;
+    char name[BOOTDATA_PART_NAME_LEN];
+} bootdata_partition_t;
+
+typedef struct {
+    uint64_t block_count;
+    uint64_t block_size;
+    // pdev_vid/pid/did are used to match partition map to
+    // appropriate block device on the platform bus
+    uint32_t pdev_vid;
+    uint32_t pdev_pid;
+    uint32_t pdev_did;
+    uint32_t partition_count;
+    char guid[BOOTDATA_PART_GUID_LEN];
+    bootdata_partition_t partitions[];
+} bootdata_partition_map_t;
+
+typedef struct {
+    uint64_t base;
+    uint64_t length;
+} bootdata_nvram_t;
+
+#define BOOTDATA_UART_NONE 0
+#define BOOTDATA_UART_PC_PORT 1
+#define BOOTDATA_UART_PC_MMIO 2
+typedef struct {
+    uint64_t base;
+    uint32_t type;
+    uint32_t irq;
+} bootdata_uart_t;
+
+typedef struct {
+    uint32_t vid;
+    uint32_t pid;
+    char board_name[32];
+} bootdata_platform_id_t;
+
+typedef struct {
+    uint32_t cpu_count;     // number of CPU cores in the cluster
+    uint32_t type;          // for future use
+    uint32_t flags;         // for future use
+    uint32_t reserved;
+} bootdata_cpu_cluster_t;
+
+typedef struct {
+    uint32_t cluster_count;
+    uint32_t reserved[3];
+    bootdata_cpu_cluster_t clusters[];
+} bootdata_cpu_config_t;
+
+#define BOOTDATA_MEM_RANGE_RAM          1
+#define BOOTDATA_MEM_RANGE_PERIPHERAL   2
+#define BOOTDATA_MEM_RANGE_RESERVED     3
+typedef struct {
+    uint64_t    paddr;
+    uint64_t    length;
+    uint32_t    type;
+    uint32_t    reserved;
+} bootdata_mem_range_t;
+
+/* EFI Variable for Crash Log */
+#define ZIRCON_VENDOR_GUID \
+    {0x82305eb2, 0xd39e, 0x4575, {0xa0, 0xc8, 0x6c, 0x20, 0x72, 0xd0, 0x84, 0x4c}}
+#define ZIRCON_CRASHLOG_EFIVAR \
+    { 'c', 'r', 'a', 's', 'h', 'l', 'o', 'g', 0 };
+#define ZIRCON_CRASHLOG_EFIATTR \
+    (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS)
+
+
+// BOOTFS is a trivial "filesystem" format
+//
+// It consists of a bootfs_header_t
+//
+// Followed by a series of bootfs_entry_t's of:
+//   name length (32bit le)
+//   data size   (32bit le)
+//   data offset (32bit le)
+//   namedata   (namelength bytes, includes \0)
+//
+// - data offsets must be page aligned (multiple of 4096)
+// - entries start on uint32 boundaries
+
+//lsw of sha256("bootfs")
+#define BOOTFS_MAGIC (0xa56d3ff9)
+
+#define BOOTFS_MAX_NAME_LEN 256
+
+typedef struct bootfs_header {
+    // magic value BOOTFS_MAGIC
+    uint32_t magic;
+
+    // total size of all bootfs_entry_t's
+    // does not include the size of the bootfs_header_t
+    uint32_t dirsize;
+
+    // 0, 0
+    uint32_t reserved0;
+    uint32_t reserved1;
+} bootfs_header_t;
+
+typedef struct bootfs_entry {
+    uint32_t name_len;
+    uint32_t data_len;
+    uint32_t data_off;
+    char name[];
+} bootfs_entry_t;
+
+#define BOOTFS_ALIGN(nlen) (((nlen) + 3) & (~3))
+#define BOOTFS_RECSIZE(entry) \
+    (sizeof(bootfs_entry_t) + BOOTFS_ALIGN(entry->name_len))
+
+#endif
\ No newline at end of file
diff --git a/include/fuchsia/driver-config.h b/include/fuchsia/driver-config.h
new file mode 100644
index 0000000..1a79267
--- /dev/null
+++ b/include/fuchsia/driver-config.h
@@ -0,0 +1,76 @@
+// Copyright 2018 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#pragma once
+
+// BOOTDATA_KERNEL_DRIVER bootdata types
+#define KDRV_ARM_PSCI           0x49435350  // 'PSCI'
+#define KDRV_ARM_GIC_V2         0x32434947  // 'GIC2'
+#define KDRV_ARM_GIC_V3         0x33434947  // 'GIC3'
+#define KDRV_ARM_GENERIC_TIMER  0x4D495441  // 'ATIM'
+#define KDRV_PL011_UART         0x55304C50  // 'PL0U'
+#define KDRV_AMLOGIC_UART       0x554C4D41  // 'AMLU'
+#define KDRV_NXP_IMX_UART       0x55584D49  // 'IMXU'
+#define KDRV_HISILICON_POWER    0x4F505348  // 'HSPO'
+#define KDRV_AMLOGIC_HDCP       0x484C4D41  // 'AMLH'
+
+// kernel driver struct that can be used for simple drivers
+// used by KDRV_PL011_UART, KDRV_AMLOGIC_UART and KDRV_NXP_IMX_UART
+typedef struct {
+    uint64_t mmio_phys;
+    uint32_t irq;
+} dcfg_simple_t;
+
+// for KDRV_ARM_PSCI
+typedef struct {
+    bool use_hvc;
+    uint64_t shutdown_args[3];
+    uint64_t reboot_args[3];
+    uint64_t reboot_bootloader_args[3];
+} dcfg_arm_psci_driver_t;
+
+// for KDRV_ARM_GIC_V2
+typedef struct {
+    uint64_t mmio_phys;
+    uint64_t msi_frame_phys;
+    uint64_t gicd_offset;
+    uint64_t gicc_offset;
+    uint64_t gich_offset;
+    uint64_t gicv_offset;
+    uint32_t ipi_base;
+    bool optional;
+    bool use_msi;
+} dcfg_arm_gicv2_driver_t;
+
+// for KDRV_ARM_GIC_V3
+typedef struct {
+    uint64_t mmio_phys;
+    uint64_t gicd_offset;
+    uint64_t gicr_offset;
+    uint64_t gicr_stride;
+    uint64_t mx8_gpr_phys;
+    uint32_t ipi_base;
+    bool optional;
+} dcfg_arm_gicv3_driver_t;
+
+// for KDRV_ARM_GENERIC_TIMER
+typedef struct {
+    uint32_t irq_phys;
+    uint32_t irq_virt;
+    uint32_t irq_sphys;
+    uint32_t freq_override;
+} dcfg_arm_generic_timer_driver_t;
+
+// for KDRV_HISILICON_POWER
+typedef struct {
+    uint64_t sctrl_phys;
+    uint64_t pmu_phys;
+} dcfg_hisilicon_power_driver_t;
+
+// for KDRV_AMLOGIC_HDCP
+typedef struct {
+    uint64_t preset_phys;
+    uint64_t hiu_phys;
+    uint64_t hdmitx_phys;
+} dcfg_amlogic_hdcp_driver_t;
\ No newline at end of file
diff --git a/include/image.h b/include/image.h
index 6d60de8..d5d12e1 100644
--- a/include/image.h
+++ b/include/image.h
@@ -160,6 +160,7 @@
 	IH_OS_OSE,			/* OSE		*/
 	IH_OS_PLAN9,			/* Plan 9	*/
 	IH_OS_OPENRTOS,		/* OpenRTOS	*/
+	IH_OS_FUCHSIA,		/* Fuchsia	*/
 
 	IH_OS_COUNT,
 };
@@ -558,6 +559,7 @@
 #endif
 #define IMAGE_FORMAT_FIT	0x02	/* new, libfdt based format */
 #define IMAGE_FORMAT_ANDROID	0x03	/* Android boot image */
+#define IMAGE_FORMAT_FUCHSIA	0x04	/* Fuchsia boot image */
 
 ulong genimg_get_kernel_addr_fit(char * const img_addr,
 			         const char **fit_uname_config,
@@ -1329,4 +1331,14 @@
 		.handler = _handler, \
 	}
 
+#if defined(CONFIG_FUCHSIA_BOOT_IMAGE)
+struct andr_img_hdr;
+int fuchsia_image_check_header(const void *hdr);
+int fuchsia_image_get_kernel(const void* hdr, int verify,
+			     ulong *os_data, ulong *os_len);
+ulong fuchsia_image_get_end(const void *hdr);
+ulong fuchsia_image_get_kload(const void *hdr);
+ulong fuchsia_image_get_comp(const void *hdr);
+#endif /* CONFIG_FUCHSIA_BOOT_IMAGE */
+
 #endif	/* __IMAGE_H__ */
diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
index ab1df16..07bddd9 100644
--- a/scripts/config_whitelist.txt
+++ b/scripts/config_whitelist.txt
@@ -1,3 +1,4 @@
+CONFIG_
 CONFIG_16BIT
 CONFIG_33
 CONFIG_400MHZ_MODE
@@ -135,6 +136,7 @@
 CONFIG_ARMADA100_FEC
 CONFIG_ARMADA168
 CONFIG_ARMADA_39X
+CONFIG_ARMADA_XXX
 CONFIG_ARMCORTEXA9
 CONFIG_ARMV7_PSCI_1_0
 CONFIG_ARMV7_SECURE_BASE
@@ -221,6 +223,7 @@
 CONFIG_AUTONEG_TIMEOUT
 CONFIG_AUTO_COMPLETE
 CONFIG_AUTO_ZRELADDR
+CONFIG_AVB_DEBUG
 CONFIG_AVB_FUSE
 CONFIG_AVB_FUSE_BANK_END
 CONFIG_AVB_FUSE_BANK_SIZEW
@@ -375,6 +378,7 @@
 CONFIG_BOOT_OS_NET
 CONFIG_BOOT_PARAMS_ADDR
 CONFIG_BOOT_PCI
+CONFIG_BOOT_QSPI
 CONFIG_BOOT_RETRY_MIN
 CONFIG_BOOT_RETRY_TIME
 CONFIG_BOUNCE_BUFFER
@@ -461,6 +465,7 @@
 CONFIG_CMD_BLOB
 CONFIG_CMD_BMODE
 CONFIG_CMD_BMP
+CONFIG_CMD_BOOTAUX
 CONFIG_CMD_BOOTLDR
 CONFIG_CMD_BSP
 CONFIG_CMD_CBFS
@@ -679,13 +684,13 @@
 CONFIG_DBAU1000
 CONFIG_DBAU1X00
 CONFIG_DBGU
-CONFIG_DBG_MONITOR
 CONFIG_DB_784MP_GP
 CONFIG_DCACHE
 CONFIG_DCACHE_OFF
 CONFIG_DCACHE_WB
 CONFIG_DCFG_ADDR
 CONFIG_DCLK_DIV
+CONFIG_DDR3L_MT41K256M16HA
 CONFIG_DDR_
 CONFIG_DDR_2HCLK
 CONFIG_DDR_2T_TIMING
@@ -832,6 +837,7 @@
 CONFIG_DTT_PWM_LOOKUPTABLE
 CONFIG_DTT_SENSORS
 CONFIG_DTT_TACH_LIMIT
+CONFIG_DUALX8_RAM
 CONFIG_DUOVERO
 CONFIG_DV_USBPHY_CTL
 CONFIG_DWC2_DFLT_SPEED_FULL
@@ -932,6 +938,7 @@
 CONFIG_EMMC_BOOT
 CONFIG_EMU
 CONFIG_ENABLE_36BIT_PHYS
+CONFIG_ENABLE_DDR_TRAINING_DEBUG
 CONFIG_ENABLE_LOCKSTATUS_SUPPORT
 CONFIG_ENABLE_MMU
 CONFIG_ENABLE_MUST_CHECK
@@ -1101,6 +1108,7 @@
 CONFIG_FEC2_PHY
 CONFIG_FEC_10MBIT
 CONFIG_FEC_AN_TIMEOUT
+CONFIG_FEC_ENABLE_MAX7322
 CONFIG_FEC_ENET
 CONFIG_FEC_ENET_DEV
 CONFIG_FEC_FIXED_SPEED
@@ -1112,6 +1120,7 @@
 CONFIG_FEROCEON_88FR131
 CONFIG_FFUART
 CONFIG_FILE
+CONFIG_FIRMWARE_2ND_BOOT
 CONFIG_FIRMWARE_OFFSET
 CONFIG_FIRMWARE_SIZE
 CONFIG_FIT_DISABLE_SHA256
@@ -1138,6 +1147,7 @@
 CONFIG_FMAN_ENET
 CONFIG_FM_PLAT_CLK_DIV
 CONFIG_FO300
+CONFIG_FOO
 CONFIG_FORCE_DDR_DATA_BUS_WIDTH_32
 CONFIG_FORMIKE
 CONFIG_FPGA_COUNT
@@ -1271,6 +1281,7 @@
 CONFIG_FTUART010_03_BASE
 CONFIG_FTWDT010_BASE
 CONFIG_FTWDT010_WATCHDOG
+CONFIG_FUCHSIA_BOOT_IMAGE
 CONFIG_FUNC_ISRAM_ADDR
 CONFIG_FWUPDATE_DEBUG
 CONFIG_FZOTG266HD0A_BASE
@@ -1457,6 +1468,9 @@
 CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING3_TRTP
 CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING4_PWRDOWNEXIT
 CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING4_SELFRFSHEXIT
+CONFIG_HPS_SDR_CTRLCFG_EXTRATIME1_CFG_EXTRA_CTL_CLK_RD_TO_WR
+CONFIG_HPS_SDR_CTRLCFG_EXTRATIME1_CFG_EXTRA_CTL_CLK_RD_TO_WR_BC
+CONFIG_HPS_SDR_CTRLCFG_EXTRATIME1_CFG_EXTRA_CTL_CLK_RD_TO_WR_DIFF_CHIP
 CONFIG_HPS_SDR_CTRLCFG_FIFOCFG_INCSYNC
 CONFIG_HPS_SDR_CTRLCFG_FIFOCFG_SYNCMODE
 CONFIG_HPS_SDR_CTRLCFG_FPGAPORTRST
@@ -1523,6 +1537,7 @@
 CONFIG_I2C_REPEATED_START
 CONFIG_I2C_RTC_ADDR
 CONFIG_I2C_TIMEOUT
+CONFIG_IBE_OBE
 CONFIG_IBM_EMAC4_V4
 CONFIG_ICACHE
 CONFIG_ICACHE_OFF
@@ -1550,6 +1565,8 @@
 CONFIG_IMAGE_FORMAT_LEGACY
 CONFIG_IMX
 CONFIG_IMX6_PWM_PER_CLK
+CONFIG_IMX8MEVK
+CONFIG_IMX_FIXED_IVT_OFFSET
 CONFIG_IMX_HDMI
 CONFIG_IMX_NAND
 CONFIG_IMX_OTP
@@ -1598,6 +1615,7 @@
 CONFIG_IRAM_TOP
 CONFIG_IRDA_BASE
 CONFIG_ISP1362_USB
+CONFIG_IS_
 CONFIG_IS_BUILTIN
 CONFIG_IS_ENABLED
 CONFIG_IS_INVALID
@@ -1746,6 +1764,7 @@
 CONFIG_KW88F6192
 CONFIG_KW88F6281
 CONFIG_KW88F6702
+CONFIG_KWB_SECURE
 CONFIG_KYOCERA_KCS057QV1AJ
 CONFIG_KZM_A9_GT
 CONFIG_L1_INIT_RAM
@@ -1887,6 +1906,8 @@
 CONFIG_MARVELL_GPIO
 CONFIG_MARVELL_MFP
 CONFIG_MASK_AER_AO
+CONFIG_MAX7322_I2C_ADDR
+CONFIG_MAX7322_I2C_BUS
 CONFIG_MAX_DSP_CPUS
 CONFIG_MAX_FPGA_DEVICES
 CONFIG_MAX_MEM_MAPPED
@@ -1917,6 +1938,7 @@
 CONFIG_MENUPROMPT
 CONFIG_MENU_SHOW
 CONFIG_MFG_ENV_SETTINGS
+CONFIG_MFG_NAND_PARTITION
 CONFIG_MGCOGE
 CONFIG_MGCOGE3NE
 CONFIG_MIGO_R
@@ -2051,6 +2073,7 @@
 CONFIG_MUNICES
 CONFIG_MUSB_HOST
 CONFIG_MV88E61XX_CPU_PORT
+CONFIG_MV88E61XX_FIXED_PORTS
 CONFIG_MV88E61XX_PHY_PORTS
 CONFIG_MVEBU_MMC
 CONFIG_MVGBE
@@ -2082,8 +2105,6 @@
 CONFIG_MX6DL_LPDDR2
 CONFIG_MX6DQ_LPDDR2
 CONFIG_MX6SX_SABRESD_REVA
-CONFIG_MX6UL_14X14_EVK_EMMC_REWORK
-CONFIG_MXC_EPDC
 CONFIG_MXC_GPIO
 CONFIG_MXC_GPT_HCLK
 CONFIG_MXC_KEYMAPPING
@@ -2237,7 +2258,6 @@
 CONFIG_PALMAS_USB_SS_PWR
 CONFIG_PANIC_HANG
 CONFIG_PARAVIRT
-CONFIG_PARTITION_UUIDS
 CONFIG_PATA_BFIN
 CONFIG_PATI
 CONFIG_PB1000
@@ -2444,6 +2464,7 @@
 CONFIG_POWER_TPS65217
 CONFIG_POWER_TPS65218
 CONFIG_POWER_TPS65910
+CONFIG_PPA_KEY_HASH
 CONFIG_PPC4XX_RAPIDIO_DEBUG
 CONFIG_PPC4XX_RAPIDIO_IN_BAR_USE_OCM
 CONFIG_PPC4XX_RAPIDIO_LOOPBACK
@@ -2498,6 +2519,8 @@
 CONFIG_QEMU_MIPS
 CONFIG_QIXIS_I2C_ACCESS
 CONFIG_QSPI
+CONFIG_QSPI_BASE
+CONFIG_QSPI_MEMMAP_BASE
 CONFIG_QSPI_QUAD_SUPPORT
 CONFIG_QSPI_SEL_GPIO
 CONFIG_QUOTA
@@ -2676,6 +2699,7 @@
 CONFIG_SCLK1_DIV
 CONFIG_SCLK_DIV
 CONFIG_SCLK_HZ
+CONFIG_SCM_EVB
 CONFIG_SCSI
 CONFIG_SCSI_AHCI
 CONFIG_SCSI_AHCI_PLAT
@@ -2872,7 +2896,6 @@
 CONFIG_SOFT_I2C_I2C9_SDA
 CONFIG_SOFT_I2C_MULTI_BUS
 CONFIG_SOFT_I2C_READ_REPEATED_START
-CONFIG_SOFT_SPI
 CONFIG_SOFT_TWS
 CONFIG_SOURCE
 CONFIG_SPARSE_RCU_POINTER
@@ -2914,6 +2937,7 @@
 CONFIG_SPI_DATAFLASH_WRITE_VERIFY
 CONFIG_SPI_FLASH_ALL
 CONFIG_SPI_FLASH_ISSI
+CONFIG_SPI_FLASH_PROTECTION
 CONFIG_SPI_FLASH_QUAD
 CONFIG_SPI_FLASH_SIZE
 CONFIG_SPI_HALF_DUPLEX
@@ -2921,6 +2945,7 @@
 CONFIG_SPI_LENGTH
 CONFIG_SPI_N25Q256A_RESET
 CONFIG_SPLASHIMAGE_GUARD
+CONFIG_SPLASH_IS_IN_MMC
 CONFIG_SPLASH_SCREEN
 CONFIG_SPLASH_SCREEN_ALIGN
 CONFIG_SPLASH_SOURCE
@@ -2935,12 +2960,14 @@
 CONFIG_SPL_BOOT_DEVICE
 CONFIG_SPL_BSS_MAX_SIZE
 CONFIG_SPL_BSS_START_ADDR
+CONFIG_SPL_BUILD
 CONFIG_SPL_CMT
 CONFIG_SPL_CMT_DEBUG
 CONFIG_SPL_COMMON_INIT_DDR
 CONFIG_SPL_CONSOLE
 CONFIG_SPL_ETH_DEVICE
 CONFIG_SPL_FLUSH_IMAGE
+CONFIG_SPL_FOO
 CONFIG_SPL_FRAMEWORK
 CONFIG_SPL_FSL_PBL
 CONFIG_SPL_FS_LOAD_ARGS_NAME
@@ -3223,8 +3250,10 @@
 CONFIG_SYS_BOOT_EEPROM_PAGE_WRITE_BITS
 CONFIG_SYS_BOOT_GET_CMDLINE
 CONFIG_SYS_BOOT_GET_KBD
+CONFIG_SYS_BOOT_NAND
+CONFIG_SYS_BOOT_QSPI
 CONFIG_SYS_BOOT_RAMDISK_HIGH
-CONFIG_SYS_BOOT_SPINOR
+CONFIG_SYS_BOOT_SATA
 CONFIG_SYS_BR0_64M
 CONFIG_SYS_BR0_8M
 CONFIG_SYS_BR0_PRELIM
@@ -4146,7 +4175,6 @@
 CONFIG_SYS_FSL_ESDHC_ADDR
 CONFIG_SYS_FSL_ESDHC_BE
 CONFIG_SYS_FSL_ESDHC_BROKEN_TIMEOUT
-CONFIG_SYS_FSL_ESDHC_FORCE_VSELECT
 CONFIG_SYS_FSL_ESDHC_HAS_DDR_MODE
 CONFIG_SYS_FSL_ESDHC_LE
 CONFIG_SYS_FSL_ESDHC_NUM
@@ -4943,6 +4971,7 @@
 CONFIG_SYS_LS_MC_DRAM_DPC_OFFSET
 CONFIG_SYS_LS_MC_DRAM_DPL_OFFSET
 CONFIG_SYS_LS_MC_FW_IN_DDR
+CONFIG_SYS_LS_PPA_ESBC_ADDR
 CONFIG_SYS_LS_PPA_FW_IN_xxx
 CONFIG_SYS_M41T11_BASE_YEAR
 CONFIG_SYS_M41T11_EXT_CENTURY_DATA
@@ -6389,6 +6418,7 @@
 CONFIG_SYS_USE_NOR
 CONFIG_SYS_USE_NORFLASH
 CONFIG_SYS_USE_PPCENV
+CONFIG_SYS_USE_QSPI
 CONFIG_SYS_USE_SERIALFLASH
 CONFIG_SYS_USE_SPIFLASH
 CONFIG_SYS_USE_UBI
@@ -6446,6 +6476,7 @@
 CONFIG_SYS_XLB_PIPELINING
 CONFIG_SYS_XSVF_DEFAULT_ADDR
 CONFIG_SYS_XWAY_EBU_BOOTCFG
+CONFIG_SYS_XXX
 CONFIG_SYS_ZYNQ_QSPI_WAIT
 CONFIG_SYS_ZYNQ_SPI_WAIT
 CONFIG_SYS_i2C_FSL
@@ -6499,6 +6530,7 @@
 CONFIG_TMU_CMD_DTT
 CONFIG_TMU_TIMER
 CONFIG_TOTAL5200
+CONFIG_TPL_BUILD
 CONFIG_TPL_DRIVERS_MISC_SUPPORT
 CONFIG_TPL_PAD_TO
 CONFIG_TPM_TIS_BASE_ADDRESS
@@ -6565,6 +6597,7 @@
 CONFIG_TZSW_RESERVED_DRAM_SIZE
 CONFIG_T_SH7706LSR
 CONFIG_UART_BASE
+CONFIG_UART_BASE_CLOCK
 CONFIG_UART_BR_PRELIM
 CONFIG_UART_CONSOLE
 CONFIG_UART_CONSOLE_IS_JTAG
@@ -6684,6 +6717,7 @@
 CONFIG_USB_ETH_RNDIS
 CONFIG_USB_ETH_SUBSET
 CONFIG_USB_EXT2_BOOT
+CONFIG_USB_FASTBOOT_BUF_SIZE
 CONFIG_USB_FAT_BOOT
 CONFIG_USB_FREQ
 CONFIG_USB_FUNCTION_MASS_STORAGE
@@ -6750,6 +6784,7 @@
 CONFIG_USB_XHCI_KEYSTONE
 CONFIG_USB_XHCI_OMAP
 CONFIG_USB_XHCI_PCI
+CONFIG_USB_XHCI_UNIPHIER
 CONFIG_USER_LOWLEVEL_INIT
 CONFIG_USE_FDT
 CONFIG_USE_INTERRUPT
@@ -6758,6 +6793,7 @@
 CONFIG_USE_NETDEV
 CONFIG_USE_NOR
 CONFIG_USE_ONENAND_BOARD_INIT
+CONFIG_USE_PLUGIN
 CONFIG_USE_SPIFLASH
 CONFIG_USE_STDINT
 CONFIG_USE_TTY
@@ -6787,6 +6823,7 @@
 CONFIG_VIDEO_DT_SIMPLEFB
 CONFIG_VIDEO_FONT_4X6
 CONFIG_VIDEO_GIS
+CONFIG_VIDEO_IMXDCSS_1080P
 CONFIG_VIDEO_LCD_I2C_BUS
 CONFIG_VIDEO_LOGO
 CONFIG_VIDEO_MB862xx
@@ -6894,3 +6931,6 @@
 CONFIG_ZYNQ_SDHCI_MIN_FREQ
 CONFIG_ZYNQ_SERIAL
 CONFIG_eTSEC_MDIO_BUS
+CONFIG_n
+CONFIG_prefix
+CONFIG_xxx