SPDX: Convert all of our single license tags to Linux Kernel style
[oweals/u-boot.git] / arch / arm / include / asm / arch-sunxi / spl.h
index a129dd4ee0a09e2d92cf11a7edd9caec8165ad61..4277d836e59cd317d50a8c13303822d897088239 100644 (file)
@@ -1,19 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * (C) Copyright 2007-2011
  * Allwinner Technology Co., Ltd. <www.allwinnertech.com>
  * Tom Cubie <tangliang@allwinnertech.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 #ifndef        _ASM_ARCH_SPL_H_
 #define        _ASM_ARCH_SPL_H_
 
 #define BOOT0_MAGIC            "eGON.BT0"
 #define SPL_SIGNATURE          "SPL" /* marks "sunxi" SPL header */
-#define SPL_HEADER_VERSION     1
+#define SPL_HEADER_VERSION     2
 
-/* Note: A80 will require special handling here: SPL_ADDR 0x10000 */
+#ifdef CONFIG_SUNXI_HIGH_SRAM
+#define SPL_ADDR               0x10000
+#else
 #define SPL_ADDR               0x0
+#endif
+
+/* The low 8-bits of the 'boot_media' field in the SPL header */
+#define SUNXI_BOOTED_FROM_MMC0 0
+#define SUNXI_BOOTED_FROM_NAND 1
+#define SUNXI_BOOTED_FROM_MMC2 2
+#define SUNXI_BOOTED_FROM_SPI  3
 
 /* boot head definition from sun4i boot code */
 struct boot_file_head {
@@ -42,9 +50,33 @@ struct boot_file_head {
                uint8_t spl_signature[4];
        };
        uint32_t fel_script_address;
-       uint32_t reserved;              /* padding, align to 32 bytes */
+       /*
+        * If the fel_uEnv_length member below is set to a non-zero value,
+        * it specifies the size (byte count) of data at fel_script_address.
+        * At the same time this indicates that the data is in uEnv.txt
+        * compatible format, ready to be imported via "env import -t".
+        */
+       uint32_t fel_uEnv_length;
+       /*
+        * Offset of an ASCIIZ string (relative to the SPL header), which
+        * contains the default device tree name (CONFIG_DEFAULT_DEVICE_TREE).
+        * This is optional and may be set to NULL. Is intended to be used
+        * by flash programming tools for providing nice informative messages
+        * to the users.
+        */
+       uint32_t dt_name_offset;
+       uint32_t reserved1;
+       uint32_t boot_media;            /* written here by the boot ROM */
+       /* A padding area (may be used for storing text strings) */
+       uint32_t string_pool[13];
+       /* The header must be a multiple of 32 bytes (for VBAR alignment) */
 };
 
+/* Compile time check to assure proper alignment of structure */
+typedef char boot_file_head_not_multiple_of_32[1 - 2*(sizeof(struct boot_file_head) % 32)];
+
 #define is_boot0_magic(addr)   (memcmp((void *)addr, BOOT0_MAGIC, 8) == 0)
 
+uint32_t sunxi_get_boot_device(void);
+
 #endif