diff --git a/README.md b/README.md
index 43dbf18fe8a630fa9f9fdc4aaf616677ccbe5714..386261fe387d018785ce820b7715c9192476a6ea 100644
--- a/README.md
+++ b/README.md
@@ -84,6 +84,7 @@ information.
 | [ARM Foundation FVP](http://www.arm.com/fvp) |`PLATFORM=vexpress-fvp`| Yes |
 | [HiKey Board (HiSilicon Kirin 620)](https://www.96boards.org/products/hikey)|`PLATFORM=hikey`| Yes |
 | [MediaTek MT8173 EVB Board](http://www.mediatek.com/en/products/mobile-communications/tablet/mt8173)|`PLATFORM=mediatek-mt8173`| No |
+| [Poplar](https://www.96boards.org/product/poplar/)|`PLATFORM=poplar`| Yes |
 | [QEMU](http://wiki.qemu.org/Main_Page) |`PLATFORM=vexpress-qemu_virt`| Yes |
 | [QEMUv8](http://wiki.qemu.org/Main_Page) |`PLATFORM=vexpress-qemu_armv8a`| Yes |
 | [Raspberry Pi 3](https://www.raspberrypi.org/products/raspberry-pi-3-model-b) |`PLATFORM=rpi3`| Yes |
@@ -101,6 +102,7 @@ Here is a list of manifests for the devices currently supported.
 | FVP | `fvp.xml` | `fvp_stable.xml` | [fvp.md] |
 | HiKey | `hikey.xml` | `hikey_stable.xml` | [hikey.md] |
 | HiKey Debian | `hikey_debian.xml` | `hikey_debian_stable.xml`| [hikey.md] |
+| Poplar Debian | `poplar.xml` | | [] |
 | MediaTek MT8173 EVB Board | `mt8173-evb.xml` | `mt8173-evb_stable.xml` | [mtk8173.md] |
 | ARM Juno board| `juno.xml` | `juno_stable.xml` | [juno.md] |
 | Raspberry Pi 3 | `rpi3.xml` | `rpi3_stable.xml` | [rpi3.md] |
diff --git a/kconfigs/poplar.conf b/kconfigs/poplar.conf
new file mode 100644
index 0000000000000000000000000000000000000000..07554cf843d34ef484dd90155765a91519476980
--- /dev/null
+++ b/kconfigs/poplar.conf
@@ -0,0 +1,2 @@
+CONFIG_TEE=y
+CONFIG_OPTEE=y
diff --git a/poplar.mk b/poplar.mk
new file mode 100644
index 0000000000000000000000000000000000000000..04084071a9408d91650074e24b206490226bbfca
--- /dev/null
+++ b/poplar.mk
@@ -0,0 +1,286 @@
+################################################################################
+# Following variables defines how the NS_USER (Non Secure User - Client
+# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
+# S_USER (Secure User - TA) are compiled
+################################################################################
+COMPILE_NS_USER   ?= 64
+override COMPILE_NS_KERNEL := 64
+COMPILE_S_USER    ?= 32
+COMPILE_S_KERNEL  ?= 64
+
+################################################################################
+# Includes
+################################################################################
+include common.mk
+
+################################################################################
+# Paths to git projects and various binaries
+################################################################################
+ifeq ($(DEBUG),1)
+ARM_TF_BUILD		?= debug
+else
+ARM_TF_BUILD		?= release
+endif
+
+OUT_PATH		?= $(ROOT)/out
+
+ARM_TF_PATH		?= $(ROOT)/arm-trusted-firmware
+LLOADER_PATH		?= $(ROOT)/l-loader
+UBOOT_PATH		?= $(ROOT)/u-boot
+OPTEE_PATH		?= $(ROOT)/optee_os
+OPTEE_CLIENT_PATH	?= $(ROOT)/optee_client
+OPTEE_CLIENT_EXPORT	?= $(OPTEE_CLIENT_PATH)/out/export
+OPTEE_TEST_PATH		?= $(ROOT)/optee_test
+LINUX_PATH		?= $(ROOT)/linux
+TOOLS_PATH		?= $(ROOT)/poplar-tools
+
+BL1_BIN			?= $(ARM_TF_PATH)/build/poplar/$(ARM_TF_BUILD)/bl1.bin
+FIP_BIN			?= $(ARM_TF_PATH)/build/poplar/$(ARM_TF_BUILD)/fip.bin
+LLOADER_BIN		?= $(LLOADER_PATH)/l-loader.bin
+
+LINUX_DTB		?= $(LINUX_PATH)/arch/arm64/boot/dts/hisilicon/hi3798cv200-poplar.dtb
+
+UBOOT_BIN		?= $(UBOOT_PATH)/u-boot.bin
+OPTEE_BIN		?= $(OPTEE_PATH)/out/arm/core/tee-header_v2.bin
+OPTEE_BIN_EXTRA1	?= $(OPTEE_PATH)/out/arm/core/tee-pager_v2.bin
+OPTEE_BIN_EXTRA2	?= $(OPTEE_PATH)/out/arm/core/tee-pageable_v2.bin
+
+ROOTFS_BIN		?= linaro-stretch-developer-*.tar.gz
+ROOTFS_URL		?= http://snapshots.linaro.org/debian/images/stretch/developer-arm64/latest/$(ROOTFS_BIN)
+
+PKG_OPTEE_VERSION	?= $(shell cd $(OPTEE_OS_PATH) && git describe)-0
+PKG_PATH		?= $(OUT_PATH)/debpkg/optee_$(PKG_OPTEE_VERSION)
+PKG_USR_BIN		?= $(PKG_PATH)/usr/bin
+PKG_CONTROL		?= $(PKG_PATH)/DEBIAN/control
+
+################################################################################
+# Targets
+################################################################################
+.PHONY: all
+all: u-boot arm-tf l-loader linux rootfs prepare-images deb-package | toolchains
+
+.PHONY: clean
+clean: u-boot-clean arm-tf-clean l-loader-clean linux-clean optee-os-clean
+
+################################################################################
+# Toolchain
+################################################################################
+include toolchain.mk
+
+################################################################################
+# U-Boot
+################################################################################
+.PHONY: u-boot-config
+u-boot-config:
+ifeq ($(wildcard $(UBOOT_PATH)/.config),)
+	$(MAKE) -C $(UBOOT_PATH) \
+		CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) poplar_defconfig
+endif
+
+.PHONY: u-boot-menuconfig
+u-boot-menuconfig: u-boot-config
+	$(MAKE) -C $(UBOOT_PATH) \
+		CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) menuconfig
+
+.PHONY: u-boot
+u-boot: u-boot-config
+	$(MAKE) -C $(UBOOT_PATH) \
+		CROSS_COMPILE="$(AARCH64_CROSS_COMPILE)"
+
+.PHONY: u-boot-clean
+u-boot-clean:
+	cd $(UBOOT_PATH) && git clean -xdf
+
+################################################################################
+# OP-TEE client
+################################################################################
+.PHONY: optee-client
+optee-client: optee-client-common
+
+.PHONY: optee-client-clean
+optee-client-clean: optee-client-common-clean
+
+################################################################################
+# OP-TEE xtest
+################################################################################
+.PHONY: xtest
+xtest: xtest-common
+
+.PHONY: xtest-clean
+xtest-clean: xtest-clean-common
+
+################################################################################
+# ARM Trusted Firmware
+################################################################################
+.PHONY: arm-tf
+arm-tf: u-boot optee-os
+	$(MAKE) -C $(ARM_TF_PATH) \
+		CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
+		all fip \
+		DEBUG=$(DEBUG) \
+		PLAT=poplar \
+		SPD=opteed \
+		BL32=$(OPTEE_BIN) \
+		BL33=$(UBOOT_BIN) \
+		BL32_EXTRA1=$(OPTEE_BIN_EXTRA1) \
+		BL32_EXTRA2=$(OPTEE_BIN_EXTRA2)
+
+.PHONY: arm-tf-clean
+arm-tf-clean:
+	cd $(ARM_TF_PATH) && git clean -xdf
+
+################################################################################
+# OP-TEE
+################################################################################
+OPTEE_OS_COMMON_FLAGS += PLATFORM=poplar CFG_ARM64_core=y CFG_DRAM_SIZE_GB=2
+OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=poplar
+
+.PHONY: optee-os
+optee-os: optee-os-common
+
+.PHONY: optee-os-clean
+optee-os-clean: optee-os-clean-common
+
+################################################################################
+# l-loader
+################################################################################
+l-loader: arm-tf
+	cp $(BL1_BIN) $(LLOADER_PATH)/atf
+	cp $(FIP_BIN) $(LLOADER_PATH)/atf
+	$(MAKE) -C $(LLOADER_PATH) CROSS_COMPILE="$(AARCH32_CROSS_COMPILE)"
+
+.PHONY: l-loader-clean
+l-loader-clean:
+	cd $(LLOADER_PATH) && git clean -xdf
+
+################################################################################
+# rootfs
+################################################################################
+.PHONY: rootfs
+rootfs:
+	@wget -nc -P $(OUT_PATH) $(ROOTFS_URL)
+
+.PHONY: rootfs-clean
+rootfs-clean:
+	rm -f $(ROOTFS_BIN)
+
+################################################################################
+# Linux
+################################################################################
+LINUX_DEFCONFIG_COMMON_ARCH := arm64
+LINUX_DEFCONFIG_COMMON_FILES := \
+		$(LINUX_PATH)/arch/arm64/configs/poplar_defconfig \
+		$(CURDIR)/kconfigs/hikey.conf
+
+linux-defconfig: $(LINUX_PATH)/.config
+
+LINUX_COMMON_FLAGS += ARCH=arm64
+
+linux: linux-common
+
+linux-defconfig-clean: linux-defconfig-clean-common
+
+LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
+
+linux-clean: linux-clean-common
+
+LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
+
+linux-cleaner: linux-cleaner-common
+
+################################################################################
+# Build package
+################################################################################
+.PHONY: deb-package
+deb-package: xtest optee-client
+	mkdir -p $(PKG_PATH)/usr/lib/aarch64-linux-gnu
+	mkdir -p $(PKG_USR_BIN)
+	mkdir -p $(PKG_PATH)/lib/optee_armtz
+	mkdir -p $(PKG_PATH)/DEBIAN
+	cp -f $(OPTEE_CLIENT_EXPORT)/bin/tee-supplicant $(PKG_USR_BIN)
+	cp -f $(OPTEE_TEST_PATH)/out/xtest/xtest $(PKG_USR_BIN)
+	cp -f $(OPTEE_CLIENT_EXPORT)/lib/libtee* $(PKG_PATH)/usr/lib/aarch64-linux-gnu
+	find $(OPTEE_TEST_PATH)/out/ta -name "*.ta" -exec cp {} $(PKG_PATH)/lib/optee_armtz \;
+	echo "Package: op-tee" > $(PKG_CONTROL)
+	echo "Version: $(PKG_OPTEE_VERSION)" >> $(PKG_CONTROL)
+	echo "Section: base" >> $(PKG_CONTROL)
+	echo "Priority: optional" >> $(PKG_CONTROL)
+	echo "Architecture: arm64" >> $(PKG_CONTROL)
+	echo "Depends:" >> $(PKG_CONTROL)
+	echo "Maintainer: OP-TEE <op-tee@linaro.org>" >> $(PKG_CONTROL)
+	echo "Description: OP-TEE client binaries, test program and Trusted Applications" >> $(PKG_CONTROL)
+	echo " Package contains tee-supplicant, libtee.so, xtest and a set of" >> $(PKG_CONTROL)
+	echo " Trusted Applications." >> $(PKG_CONTROL)
+	echo " NOTE! This package should only be used for testing and development." >> $(PKG_CONTROL)
+	echo ""
+	dpkg-deb --build $(PKG_PATH)
+
+################################################################################
+# Prepare images
+################################################################################
+.PHONY: prepare-images
+prepare-images: linux l-loader rootfs
+	@cp $(TOOLS_PATH)/poplar_recovery_builder.sh $(OUT_PATH)
+	@cp $(LLOADER_BIN) $(OUT_PATH)
+	@cp $(LINUX_PATH)/arch/arm64/boot/Image $(OUT_PATH)
+	@cp $(LINUX_DTB) $(OUT_PATH)
+	@cd $(OUT_PATH) && \
+		PATH=$(UBOOT_PATH)/tools:$$PATH \
+	bash ./poplar_recovery_builder.sh all "$(ROOTFS_BIN)"
+
+################################################################################
+# Flash images
+################################################################################
+.PHONY: flash-help
+flash-help:
+	@echo "1. Install and configure TFTP server on your host PC:"
+	@echo ""
+	@echo "   $$ sudo apt-get install atftpd      # install atftpd server"
+	@echo "   $$ sudo vim /etc/default/atftpd     # edit atftpd server config"
+	@echo "   $$ sudo service atftpd restart      # restart atftpd server"
+	@echo ""
+	@echo "2. Proper configuration should look like:"
+	@echo ""
+	@echo "   $$ cat /etc/default/atftpd"
+	@echo "   USE_INETD=false"
+	@echo "   OPTIONS=\"--tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /path/to/rep/out/dir\""
+	@echo ""
+	@echo "3. Flash proper U-boot build  to USB stick."
+	@echo "   It should be flashed to the first FAT32 partition. Then boot"
+	@echo "   from it by pressing USB_BOOT switch on the board"
+	@echo ""
+	@echo "4. Connect to Poplar board over serial console (run on host PC):"
+	@echo ""
+	@echo "   $$ screen /dev/ttyUSB0 115200"
+	@echo ""
+	@echo "5. Configure network interface in Poplar U-boot shell. If you can't"
+	@echo "get into U-boot console, press and hold Ctrl+C while booting:"
+	@echo ""
+	@echo "   => setenv ipaddr 192.168.0.2"
+	@echo "   => setenv netmask 255.255.255.0"
+	@echo "   => setenv serverip 192.168.0.3"
+	@echo "   ETH1: PHY(phyaddr=3, rgmii) link UP: DUPLEX=FULL : SPEED=1000M"
+	@echo "   MAC:   00-16-8E-62-66-84"
+	@echo "   host 192.168.0.3 is alive"
+	@echo ""
+	@echo "6. Verify connection is working (run in U-boot shell):"
+	@echo ""
+	@echo "   => ping 192.168.0.3"
+	@echo ""
+	@echo "7. Run installer (run in U-boot shell):"
+	@echo ""
+	@echo "   => tftp 0x08000000 recovery_files/install.scr"
+	@echo "   => source 0x08000000"
+	@echo ""
+	@echo "8. After successful flashing reboot your board (U-boot shell):"
+	@echo ""
+	@echo "   => reset"
+	@echo ""
+	@echo "9. Upload deb package using SCP (run on your host PC):"
+	@echo ""
+	@echo "   $$ scp optee_${PKG_OPTEE_VERSION}.deb linaro@192.168.0.2:/tmp"
+	@echo ""
+	@echo "10. Install package (run on Poplar board in bash shell):"
+	@echo ""
+	@echo "   $$ cd /tmp && dpkg --force-all -i optee*.deb"
+	@echo ""