[zircon] version 0.05: Update to latest zircon support Change-Id: I2f1b36fb2eb4ceadb0fef3b15024a924ed69e98f
diff --git a/board/freescale/imx8mq_evk/zircon.c b/board/freescale/imx8mq_evk/zircon.c index 525944a..b1fb5f0 100644 --- a/board/freescale/imx8mq_evk/zircon.c +++ b/board/freescale/imx8mq_evk/zircon.c
@@ -7,7 +7,7 @@ #define PDEV_VID_NXP 9 #define PDEV_PID_IMX8MEVK 1 -const char* BOOTLOADER_VERSION = "zircon-bootloader=0.04"; +const char* BOOTLOADER_VERSION = "zircon-bootloader=0.05"; static const zbi_cpu_config_t cpu_config = { .cluster_count = 1,
diff --git a/common/image-zircon.c b/common/image-zircon.c index eb8cdb8..8b11b7b 100644 --- a/common/image-zircon.c +++ b/common/image-zircon.c
@@ -31,15 +31,11 @@ int zircon_image_check_header(const void *hdr) { const zbi_header_t* zbi = hdr; -printf("zircon_image_check_header zbi[0].type %08x zbi[0].extra %08x zbi[0].magic %08x zbi[1].type %08x\n", - zbi[0].type, zbi[0].extra, zbi[0].magic, zbi[1].type); return (zbi[0].type == ZBI_TYPE_CONTAINER && zbi[0].extra == ZBI_CONTAINER_MAGIC && zbi[0].magic == ZBI_ITEM_MAGIC && - ZBI_IS_KERNEL_BOOTITEM(zbi[1].type) && // TODO: change this to comparison with - // ZBI_TYPE_KERNEL_ARM64 after zircon kernel - // is switched over + zbi[1].type == ZBI_TYPE_KERNEL_ARM64 && zbi[1].magic == ZBI_ITEM_MAGIC) ? 0 : -1; }
diff --git a/include/zircon/image.h b/include/zircon/image.h index 48ed84b..b204c38 100644 --- a/include/zircon/image.h +++ b/include/zircon/image.h
@@ -32,7 +32,11 @@ // make a complete ZBI. // All items begin at an 8-byte aligned offset into the image. +#ifdef __ASSEMBLER__ #define ZBI_ALIGNMENT (8) +#else +#define ZBI_ALIGNMENT (8u) +#endif // Round n up to the next 8 byte boundary #define ZBI_ALIGN(n) (((n) + ZBI_ALIGNMENT - 1) & -ZBI_ALIGNMENT) @@ -88,6 +92,31 @@ } zbi_header_t; #endif +// Be sure to add new types to ZBI_ALL_TYPES. +#define ZBI_ALL_TYPES(macro) \ + macro(ZBI_TYPE_CONTAINER, "CONTAINER", ".bin") \ + macro(ZBI_TYPE_KERNEL_X64, "KERNEL_X64", ".bin") \ + macro(ZBI_TYPE_KERNEL_ARM64, "KERNEL_ARM64", ".bin") \ + macro(ZBI_TYPE_DISCARD, "DISCARD", ".bin") \ + macro(ZBI_TYPE_STORAGE_RAMDISK, "RAMDISK", ".bin") \ + macro(ZBI_TYPE_STORAGE_BOOTFS, "BOOTFS", ".bin") \ + macro(ZBI_TYPE_CMDLINE, "CMDLINE", ".txt") \ + macro(ZBI_TYPE_CRASHLOG, "CRASHLOG", ".bin") \ + macro(ZBI_TYPE_NVRAM, "NVRAM", ".bin") \ + macro(ZBI_TYPE_PLATFORM_ID, "PLATFORM_ID", ".bin") \ + macro(ZBI_TYPE_CPU_CONFIG, "CPU_CONFIG", ".bin") \ + macro(ZBI_TYPE_MEM_CONFIG, "MEM_CONFIG", ".bin") \ + macro(ZBI_TYPE_KERNEL_DRIVER, "KERNEL_DRIVER", ".bin") \ + macro(ZBI_TYPE_ACPI_RSDP, "ACPI_RSDP", ".bin") \ + macro(ZBI_TYPE_SMBIOS, "SMBIOS", ".bin") \ + macro(ZBI_TYPE_EFI_MEMORY_MAP, "EFI_MEMORY_MAP", ".bin") \ + macro(ZBI_TYPE_EFI_SYSTEM_TABLE, "EFI_SYSTEM_TABLE", ".bin") \ + macro(ZBI_TYPE_E820_TABLE, "E820_TABLE", ".bin") \ + macro(ZBI_TYPE_DEBUG_UART, "DEBUG_UART", ".bin") \ + macro(ZBI_TYPE_FRAMEBUFFER, "FRAMEBUFFER", ".bin") \ + macro(ZBI_TYPE_DRV_MAC_ADDRESS, "DRV_MAC_ADDRESS", ".bin") \ + macro(ZBI_TYPE_DRV_PARTITION_MAP, "DRV_PARTITION_MAP", ".bin") + // Each ZBI starts with a container header. // length: Total size of the image after this header. // This includes all item headers, payloads, and padding. @@ -130,18 +159,14 @@ // loader to describe the machine. The precise protocol for transferring // control to the kernel's entry point varies by machine. // -// TODO(mcgrathr): On all machines, the kernel requires some amount of -// scratch memory to be available immediately after the kernel image at -// boot. It needs this space for early setup work before it has a chance -// to read any memory-map information from the boot loader. Currently, the -// kernel simply assumes that enough space is available and clobbers some -// memory after its load image. (In zircon-image.elf, the IMAGE_RESERVE_END -// symbol indicates the end of the address range that will be clobbered.) -// If the boot loader happened to place its constructed ZBI or other reserved -// areas immediately after the kernel image, things would go badly. -// We should amend the protocol with the boot loader so that it knows how -// much space to reserve after the kernel image. Either zbi_header_t.extra -// or zbi_kernel_t.reserved could be repurposed for this. +// On all machines, the kernel requires some amount of scratch memory to be +// available immediately after the kernel image at boot. It needs this +// space for early setup work before it has a chance to read any memory-map +// information from the boot loader. The `reserve_memory_size` field tells +// the boot loader how much space after the kernel's load image it must +// leave available for the kernel's use. The boot loader must place its +// constructed ZBI or other reserved areas at least this many bytes after +// the kernel image. // // x86-64 // @@ -178,8 +203,9 @@ typedef struct { // Entry-point address. The interpretation of this differs by machine. uint64_t entry; - // Reserved for future use. - uint64_t reserved; + // Minimum amount (in bytes) of scratch memory that the kernel requires + // immediately after its load image. + uint64_t reserve_memory_size; } zbi_kernel_t; // The whole contiguous image loaded into memory by the boot loader. @@ -392,6 +418,14 @@ // E820 memory table, an array of e820entry_t. #define ZBI_TYPE_E820_TABLE (0x30323845) // E820 +/* 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) + // Debug serial port, a zbi_uart_t entry. #define ZBI_TYPE_DEBUG_UART (0x54524155) // UART #ifndef __ASSEMBLER__