[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