diff --git a/rpi3.mk b/rpi3.mk
index 328878de5ff6ac39697816e0dc9d1e4f08a64981..8f965c44b1e27c5082c3e6e6bc3c80b4382efbad 100644
--- a/rpi3.mk
+++ b/rpi3.mk
@@ -43,7 +43,8 @@ U-BOOT_JTAG_BIN		?= $(U-BOOT_PATH)/u-boot-jtag.bin
 RPI3_FIRMWARE_PATH	?= $(BUILD_PATH)/rpi3/firmware
 RPI3_HEAD_BIN		?= $(ROOT)/out/head.bin
 RPI3_BOOT_CONFIG	?= $(RPI3_FIRMWARE_PATH)/config.txt
-RPI3_UBOOT_ENV		?= $(RPI3_FIRMWARE_PATH)/uboot.env
+RPI3_UBOOT_ENV		?= $(ROOT)/out/uboot.env
+RPI3_UBOOT_ENV_TXT	?= $(RPI3_FIRMWARE_PATH)/uboot.env.txt
 RPI3_STOCK_FW_PATH	?= $(ROOT)/rpi3_firmware
 
 OPTEE_OS_PAGER		?= $(OPTEE_OS_PATH)/out/arm/core/tee-pager.bin
@@ -55,10 +56,10 @@ MODULE_OUTPUT		?= $(ROOT)/module_output
 ################################################################################
 # Targets
 ################################################################################
-all: rpi3-firmware arm-tf optee-os optee-client xtest u-boot \
+all: rpi3-firmware arm-tf optee-os optee-client xtest u-boot u-boot-jtag-bin\
 	linux update_rootfs
-all-clean: arm-tf-clean busybox-clean u-boot-clean optee-os-clean \
-	optee-client-clean rpi3-firmware-clean head-bin-clean
+all-clean: arm-tf-clean busybox-clean u-boot-clean u-boot-jtag-bin-clean \
+	optee-os-clean optee-client-clean rpi3-firmware-clean head-bin-clean
 
 -include toolchain.mk
 
@@ -100,11 +101,17 @@ U-BOOT_EXPORTS ?= CROSS_COMPILE=$(LEGACY_AARCH64_CROSS_COMPILE) ARCH=arm64
 u-boot: $(RPI3_HEAD_BIN)
 	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) rpi_3_defconfig
 	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) all
-	cd $(U-BOOT_PATH) && cat $(RPI3_HEAD_BIN) $(U-BOOT_BIN) > $(U-BOOT_JTAG_BIN)
+	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) tools
 
 u-boot-clean:
 	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) clean
 
+u-boot-jtag-bin: $(RPI3_UBOOT_ENV) u-boot
+	cd $(U-BOOT_PATH) && cat $(RPI3_HEAD_BIN) $(U-BOOT_BIN) > $(U-BOOT_JTAG_BIN)
+
+u-boot-jtag-bin-clean:
+	rm -f $(U-BOOT_JTAG_BIN)
+
 $(RPI3_HEAD_BIN): $(RPI3_FIRMWARE_PATH)/head.S
 	mkdir -p $(ROOT)/out/
 	$(AARCH64_CROSS_COMPILE)as $< -o $(ROOT)/out/head.o
@@ -113,6 +120,13 @@ $(RPI3_HEAD_BIN): $(RPI3_FIRMWARE_PATH)/head.S
 head-bin-clean:
 	rm -f $(RPI3_HEAD_BIN) $(ROOT)/out/head.o
 
+$(RPI3_UBOOT_ENV): $(RPI3_UBOOT_ENV_TXT) u-boot
+	mkdir -p $(ROOT)/out
+	$(U-BOOT_PATH)/tools/mkenvimage -s 0x4000 -o $(ROOT)/out/uboot.env $(RPI3_UBOOT_ENV_TXT)
+
+u-boot-env-clean:
+	rm -f $(RPI3_UBOOT_ENV)
+
 ################################################################################
 # Busybox
 ################################################################################
diff --git a/rpi3/firmware/uboot.env b/rpi3/firmware/uboot.env
deleted file mode 100644
index 2b6867f39edc62d184e72822a81bc31ce60091cc..0000000000000000000000000000000000000000
Binary files a/rpi3/firmware/uboot.env and /dev/null differ
diff --git a/rpi3/firmware/uboot.env.txt b/rpi3/firmware/uboot.env.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b402276de30896d3153f21b0a0a9f293018b9b56
--- /dev/null
+++ b/rpi3/firmware/uboot.env.txt
@@ -0,0 +1,28 @@
+bootdelay=3
+atf_load_addr=0x08400000
+atf_file=optee.bin
+baudrate=115200
+boot_it=booti ${kernel_addr_r} - ${fdt_addr_r}
+bootargs=console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootfs=ext4 ignore_loglevel dma.dmachans=0x7f35 rootwait 8250.nr_uarts=1 elevator=deadline fsck.repair=yes smsc95xx.macaddr=${ethaddr} bcm2708_fb.fbwidth=1920 bcm2708_fb.fbheight=1080 vc_mem.mem_base=0x3dc00000 vc_mem.mem_size=0x3f000000
+bootcmd=run load_kernel; run load_dtb; run load_firmware; run boot_it
+bootdelay=2
+cpu=armv8
+fdt_addr_r=0x1700000
+fdtfile=bcm2710-rpi-3-b.dtb
+filesize=5a65c
+gatewayip=192.168.1.1
+initrd_high=ffffffff
+kernel_addr_r=0x10000000
+load_dtb=fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}
+load_firmware=fatload mmc 0:1 ${atf_load_addr} ${atf_file}
+load_kernel=fatload mmc 0:1 ${kernel_addr_r} Image
+netmask=255.255.255.0
+serverip=192.168.1.164
+smp=on
+stderr=serial,lcd
+stdin=serial,usbkbd
+stdout=serial,lcd
+
+#setenv optee 'usb start; dhcp ${kernel_addr_r} 192.168.1.164:Image; dhcp ${fdt_addr_r} 192.168.1.164:${fdtfile}; dhcp ${atf_load_addr} 192.168.1.164:${atf_file}; run boot_it'
+
+#setenv bootargs 'console=ttyS0,115200 root=/dev/nfs rw rootfstype=nfs nfsroot=192.168.1.164:/mnt/sshd/srv/nfs/debian-arm64,udp,vers=3 ip=dhcp ignore_loglevel dma.dmachans=0x7f35 rootwait 8250.nr_uarts=1 elevator=deadline fsck.repair=yes smsc95xx.macaddr=${ethaddr} bcm2708_fb.fbwidth=1920 bcm2708_fb.fbheight=1080 vc_mem.mem_base=0x3dc00000 vc_mem.mem_size=0x3f000000'