]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
ARM64: zynqmp: Add support for DFU from SPL
authorMichal Simek <michal.simek@xilinx.com>
Fri, 19 Aug 2016 12:14:52 +0000 (14:14 +0200)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 26 Oct 2016 07:13:56 +0000 (09:13 +0200)
SPL needs to have bigger stack size because of USB.
Simple malloc needs to be disabled because dfu code requires different
allocation functions. There is no space in OCM that's why random place
in DDR is used.

BOOTD must be disabled because it is causing compilation error.

All variables are disabled and used only variables valid for DFU because
they are simple huge. Including automatic variables added by
CONFIG_ENV_VARS_UBOOT_CONFIG.
Hardcode addresses for u-boot, atf, kernel and dtb
just for SPL DFU code.

Enable SPL DFU for zcu100.
Create new usb_dfu_spl variable just to run Linux kernel loaded in SPL.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/cpu/armv8/zynqmp/spl.c
board/xilinx/zynqmp/zynqmp.c
configs/xilinx_zynqmp_zcu100_defconfig
include/configs/xilinx_zynqmp.h

index ab8b30d9cd88dc2e5e3a4db800d4f69d6bb3f971..fa647013b63c53a5db1c87bcdc13940aa0750f50 100644 (file)
@@ -78,6 +78,10 @@ u32 spl_boot_device(void)
        case SD_MODE:
        case SD_MODE1:
                return BOOT_DEVICE_MMC1;
+#endif
+#ifdef CONFIG_SPL_DFU_SUPPORT
+       case USB_MODE:
+               return BOOT_DEVICE_DFU;
 #endif
        default:
                printf("Invalid Boot Mode:0x%x\n", bootmode);
index 7aa9f4c9a68cfd295cf3dfdab87619920ba67cf4..eca916f01402559addb4fd8313e0ee618e4f5e68 100644 (file)
@@ -340,6 +340,11 @@ int board_late_init(void)
 
        puts("Bootmode: ");
        switch (bootmode) {
+       case USB_MODE:
+               puts("USB_MODE\n");
+               mode = "usb";
+               setenv("modeboot", "usb_dfu_spl");
+               break;
        case JTAG_MODE:
                puts("JTAG_MODE\n");
                mode = "pxe dhcp";
index 7b7576110146e821ac58c1ac250b0844c09afb96..d3f6ef72445ffbc3e08bf680110ef30ff6beccf8 100644 (file)
@@ -2,7 +2,6 @@ CONFIG_ARM=y
 CONFIG_SYS_CONFIG_NAME="xilinx_zynqmp_zcu100"
 CONFIG_ARCH_ZYNQMP=y
 CONFIG_SYS_MALLOC_F_LEN=0x8000
-CONFIG_SPL_SYS_MALLOC_SIMPLE=y
 CONFIG_SPL_DM=y
 CONFIG_DM_SPI_FLASH=y
 CONFIG_DM_GPIO=y
@@ -14,6 +13,7 @@ CONFIG_SPL=y
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_SPL_LOAD_FIT=y
+CONFIG_SPL_DFU_SUPPORT=y
 CONFIG_IDENT_STRING=" Xilinx ZynqMP ZCU100"
 CONFIG_HUSH_PARSER=y
 CONFIG_SYS_PROMPT="ZynqMP> "
index 6cf8baeb0b41d7a6c243c4270173381dd191b5ee..5fc84201c5fe1e7c4902f9993f12361cb66b33b8 100644 (file)
@@ -82,7 +82,9 @@
 
 /* Diff from config_distro_defaults.h */
 #define CONFIG_SUPPORT_RAW_INITRD
+#if !defined(CONFIG_SPL_BUILD)
 #define CONFIG_ENV_VARS_UBOOT_CONFIG
+#endif
 #define CONFIG_AUTO_COMPLETE
 
 /* PXE */
        "sdroot1=setenv bootargs $bootargs root=/dev/mmcblk1p2 rw rootwait\0" \
        "android=setenv bootargs $bootargs init=/init androidboot.selinux=disabled androidboot.hardware=$board\0" \
        "android_debug=run android && setenv bootargs $bootargs video=DP-1:1024x768@60 drm.debug=0xf\0" \
+       "usb_dfu_spl=booti $kernel_addr - $fdt_addr\0" \
        "usbhostboot=usb start && load usb 0 $fdt_addr system.dtb && " \
                     "load usb 0 $kernel_addr Image && " \
                     "booti $kernel_addr - $fdt_addr\0" \
        DFU_ALT_INFO
 #endif
 
+/* SPL can't handle all huge variables - define just DFU */
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_DFU_SUPPORT)
+#undef CONFIG_EXTRA_ENV_SETTINGS
+# define CONFIG_EXTRA_ENV_SETTINGS \
+       "dfu_alt_info_ram=uboot.bin ram 0x8000000 0x1000000;" \
+                         "atf-uboot.ub ram 0x10000000 0x1000000;" \
+                         "Image ram 0x80000 0x3f80000;" \
+                         "system.dtb ram 0x4000000 0x100000\0" \
+       "dfu_bufsiz=0x1000\0"
+#endif
+
 #define CONFIG_SPL_TEXT_BASE           0xfffc0000
 #define CONFIG_SPL_STACK               0xfffffffc
-#define CONFIG_SPL_MAX_SIZE            0x20000
+#define CONFIG_SPL_MAX_SIZE            0x40000
 
 /* Just random location in OCM */
 #define CONFIG_SPL_BSS_START_ADDR      0x0
 # define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME       "u-boot.img"
 #endif
 
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_DFU_SUPPORT)
+# undef CONFIG_CMD_BOOTD
+# define CONFIG_SPL_ENV_SUPPORT
+# define CONFIG_SPL_HASH_SUPPORT
+# define CONFIG_ENV_MAX_ENTRIES        10
+
+# define CONFIG_SYS_SPL_MALLOC_START   0x20000000
+# define CONFIG_SYS_SPL_MALLOC_SIZE    0x10000000
+
+#ifdef CONFIG_SPL_SYS_MALLOC_SIMPLE
+# error "Disable CONFIG_SPL_SYS_MALLOC_SIMPLE. Full malloc needs to be used"
+#endif
+#endif
+
 #endif /* __XILINX_ZYNQMP_H */