diff --git a/tests/lib/fdt/device_trees/build_dtb.sh b/tests/lib/fdt/device_trees/build_dtb.sh
new file mode 100755
index 0000000..30ee90b
--- /dev/null
+++ b/tests/lib/fdt/device_trees/build_dtb.sh
@@ -0,0 +1,82 @@
+#
+# Copyright (c) 2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+LINUX_SOURCE=$1
+TFA_SOURCE=$2
+DTS_LINUX64_JUNO_R1="$LINUX_SOURCE/arch/arm64/boot/dts/arm/juno-r1.dts"
+DTS_LINUX64_SUN50I_A64_PINE64_PLUS="$LINUX_SOURCE/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts"
+DTS_LINUX32_ATLAS7_EVB="$LINUX_SOURCE/arch/arm/boot/dts/atlas7-evb.dts"
+DTS_LINUX32_BCM2837_RPI_3_B_PLUS="$LINUX_SOURCE/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts"
+DTS_TEST="test.dts"
+DTS_FVP_BASE_GICV3_PSCI="$TFA_SOURCE/fdts/fvp-base-gicv3-psci.dts"
+
+process_linux_dts()
+{
+	# DTS file path in first argument
+	# DTB file in 2nd argument
+	# Use global LINUX_SOURCE
+	DTS_FILE=$1
+	DTB_FILE=$2
+
+	cpp -I $LINUX_SOURCE/include -x assembler-with-cpp -o $DTS_FILE.preprocessed $DTS_FILE
+	sed -i -e '/stdc-predef.h/d' $DTS_FILE.preprocessed -e 's/1,pci-domain/linux,pci-domain/g' $DTS_FILE.preprocessed
+	dtc -O dtb -o $DTB_FILE -i $DTS_FILE -b 0 $DTS_FILE.preprocessed
+	rm $DTS_FILE.preprocessed
+}
+
+process_tfa_dts()
+{
+	# DTS file path in first argument
+	# DTB file in 2nd argument
+	DTS_FILE=$1
+	DTB_FILE=$2
+	cpp -I $TFA_SOURCE/include -x assembler-with-cpp -o $DTS_FILE.preprocessed $DTS_FILE
+	sed -i -e '/stdc-predef.h/d' $DTS_FILE.preprocessed -e 's/1,pci-domain/linux,pci-domain/g' $DTS_FILE.preprocessed
+	dtc -O dtb -o $DTB_FILE -i $DTS_FILE -b 0 $DTS_FILE.preprocessed
+	rm $DTS_FILE.preprocessed
+}
+
+process_dts()
+{
+	# DTS file path in first argument
+	# DTB file in 2nd argument
+	DTS_FILE=$1
+	DTB_FILE=$2
+	dtc -o $DTB_FILE $DTS_FILE
+}
+
+# basic argument checks
+if [[ ( "$1" == "-h" ) || ( "$1" == "--help" ) ]]; then
+	echo "Usage: $0 [OPTION] path/to/linux/source path/to/tfa/source"
+	echo ""
+	echo "  This script will build the necessary DTB files from their"
+	echo "  sources in the Linux kernel and TFA repositories. Provide the"
+	echo "  path to the Linux source tree as the first argument to this"
+	echo "  script and the path to the TFA source tree as the second"
+	echo "  argument."
+	echo ""
+	echo "  -h, --help      print this help text"
+	exit 0
+fi
+if [[ ( -z "$1" ) || ( -z "$2" ) ]]; then
+	echo "Invalid arguments, use -h/--help for more info."
+	exit 1
+fi
+
+# create a folder for new DTB files to be placed in
+mkdir dtb
+
+# generate linux DTB files
+process_linux_dts $DTS_LINUX64_JUNO_R1 dtb/juno-r1.dtb
+process_linux_dts $DTS_LINUX64_SUN50I_A64_PINE64_PLUS dtb/sun50i-a64-pine64-plus.dtb
+process_linux_dts $DTS_LINUX32_ATLAS7_EVB dtb/atlas7-evb.dtb
+process_linux_dts $DTS_LINUX32_BCM2837_RPI_3_B_PLUS dtb/bcm2837-rpi-3-b-plus.dtb
+
+# generate TFA DTB file
+process_tfa_dts $DTS_FVP_BASE_GICV3_PSCI dtb/fvp-base-gicv3-psci.dtb
+
+# generate test DTB file
+process_dts $DTS_TEST dtb/test.dtb
diff --git a/tests/lib/fdt/device_trees/test.dts b/tests/lib/fdt/device_trees/test.dts
new file mode 100644
index 0000000..ce10e99
--- /dev/null
+++ b/tests/lib/fdt/device_trees/test.dts
@@ -0,0 +1,91 @@
+/dts-v1/;
+/{
+    #address-cells = <2>;
+    #size-cells = <2>;
+    dev1@184090000 {
+        compatible = "acme,device1";
+        reg = <0x1 0x84090000 0 0x10000>;
+        address = <0x1 0x84090000 0 0x10000>;
+    };
+    dev2@40000 {
+        compatible = "acme,device2";
+        reg = <0 0x40000 0 0x10000>;
+        address = <0 0x40000 0 0x10000>;
+    };
+    transparent-bus {
+        compatible = "simple-bus";
+        #address-cells = <2>;
+        #size-cells = <2>;
+        ranges;
+        dev3@1c00000 {
+            compatible = "acme,device3";
+            reg = <0 0x1c00000 0x0 0x40000>;
+            address = <0 0x1c00000 0x0 0x40000>;
+        };
+        dev4@901300000 {
+            compatible = "acme,device4";
+            reg = <9 0x1300000 0x0 0x40000>;
+            address = <9 0x1300000 0x0 0x40000>;
+        };
+    };
+    legacy-bus@40000000 {
+        compatible = "simple-bus";
+        #address-cells = <1>;
+        #size-cells = <1>;
+        ranges = <0x0 0 0x40000000 0x10000000>;
+        dev5@0 {
+            compatible = "acme,device5";
+            reg = <0x0 0x10000>;
+            address = <0x0 0x40000000 0x0 0x10000>;
+        };
+
+        dev6@90000 {
+            compatible = "acme,device6";
+            reg = <0x90000 0x10000>;
+            address = <0x0 0x40090000 0x0 0x10000>;
+        };
+        large-bus@8000000 {
+            compatible = "simple-bus";
+            #address-cells = <2>;
+            #size-cells = <1>;
+            ranges = <0x0 0x1000000 0x8000000 0x8000000>;
+            /* outside of any mapping entry */
+            dev7@800000 {
+                compatible = "acme,device7";
+                reg = <0 0x800000 0x1000>;
+                address = <0xffffffff 0xffffffff 0x0 0x1000>;
+            };
+            dev8@1400000 {
+                compatible = "acme,device8";
+                reg = <0 0x1400000 0x1000>;
+                address = <0 0x48400000 0x0 0x1000>;
+            };
+        };
+    };
+    high-bus@c0000000 {
+        compatible = "simple-bus";
+        #address-cells = <2>;
+        #size-cells = <1>;
+        ranges = <0 0x0 0 0xc0000000 0x10000000>,
+             <1 0x0 2 0x80000000 0x10000000>,
+             <3 0x0 4 0xc0000000 0x10000000>,
+             <9 0x0 3 0x40000000 0x10000000>,
+             <5 0x0 9 0xd0000000 0x10000000>;
+        dev9@100030000 {
+            compatible = "acme,device9";
+            reg = <1 0x30000 0x10000>;
+            address = <0x2 0x80030000 0x0 0x10000>;
+        };
+        dev10@300180000 {
+            compatible = "acme,device10";
+            reg = <3 0x180000 0x10000>;
+            address = <4 0xc0180000 0 0x10000>;
+        };
+        /* not actually mapped */
+        dev11@400080000 {
+            compatible = "acme,device11";
+            reg = <4 0x80000 0x10000>;
+            address = <0xffffffff 0xffffffff 0x0 0x10000>;
+        };
+    };
+};
diff --git a/tests/lib/fdt/test_fdt.cmake b/tests/lib/fdt/test_fdt.cmake
new file mode 100644
index 0000000..098e4ae
--- /dev/null
+++ b/tests/lib/fdt/test_fdt.cmake
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+include(UnitTest)
+
+unit_test_add_suite(
+	NAME fdt
+	SOURCES
+		${CMAKE_CURRENT_LIST_DIR}/test_fdt.cpp
+		${TF_A_UNIT_TESTS_PATH}/mocks/common/debug.cpp
+		${TF_A_PATH}/common/fdt_wrappers.c
+		${TF_A_PATH}/lib/libc/strlcpy.c
+		${TF_A_PATH}/lib/libfdt/fdt.c
+		${TF_A_PATH}/lib/libfdt/fdt_addresses.c
+		${TF_A_PATH}/lib/libfdt/fdt_empty_tree.c
+		${TF_A_PATH}/lib/libfdt/fdt_overlay.c
+		${TF_A_PATH}/lib/libfdt/fdt_ro.c
+		${TF_A_PATH}/lib/libfdt/fdt_rw.c
+		${TF_A_PATH}/lib/libfdt/fdt_strerror.c
+		${TF_A_PATH}/lib/libfdt/fdt_sw.c
+		${TF_A_PATH}/lib/libfdt/fdt_wip.c
+	INCLUDE_DIRECTORIES
+		${TF_A_UNIT_TESTS_PATH}/mocks/include/
+		${TF_A_UNIT_TESTS_PATH}/mocks/include/lib/libc/
+		${TF_A_PATH}/include/
+		${TF_A_PATH}/include/lib/libfdt/
+	COMPILE_DEFINITIONS
+		# Several additional DTB files from the Linux kernel and the TFA source
+		# are needed to run these tests.  They cannot be included here due to
+		# license restrictions but can be built from the sources using the
+		# script device_trees/build_dtb.sh.  The script takes the paths to these
+		# two source repositories as arguments, builds the DTB files, and places
+		# them in a folder here called dtb.
+		TFA_FVP_DTB_PATH="${CMAKE_CURRENT_LIST_DIR}/device_trees/dtb/fvp-base-gicv3-psci.dtb"
+		LINUX64_JUNO_R1_DTB="${CMAKE_CURRENT_LIST_DIR}/device_trees/dtb/juno-r1.dtb"
+		LINUX64_SUN50I_PINE64_PLUS_DTB="${CMAKE_CURRENT_LIST_DIR}/device_trees/dtb/sun50i-a64-pine64-plus.dtb"
+		LINUX32_ATLAS7_EVB_DTB="${CMAKE_CURRENT_LIST_DIR}/device_trees/dtb/atlas7-evb.dtb"
+		LINUX32_BCM2837_RPI_3_B_DTB="${CMAKE_CURRENT_LIST_DIR}/device_trees/dtb/bcm2837-rpi-3-b-plus.dtb"
+		TEST_DTB="${CMAKE_CURRENT_LIST_DIR}/device_trees/dtb/test.dtb"
+)
diff --git a/tests/lib/fdt/test_fdt.cpp b/tests/lib/fdt/test_fdt.cpp
new file mode 100644
index 0000000..c7b7e06
--- /dev/null
+++ b/tests/lib/fdt/test_fdt.cpp
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "CppUTest/TestHarness.h"
+
+extern "C" {
+#include <common/fdt_wrappers.h>
+#include <libfdt.h>
+#include <stdio.h>
+#include <string.h>
+}
+
+#define FDT_SUCCESS (0)
+
+#define FILE_NOT_FOUND_HELP \
+"          The DTB file used in this test must be generated manually before\n" \
+"          running the test suite.  There is a script build_dtb.sh found in\n" \
+"          tests/lib/fdt/device_trees which can be used to do this."
+
+static int check_translation(const void *fdt, int node, uintptr_t *address)
+{
+	const char *prop;
+	int len, ret;
+	uintptr_t addr;
+
+	prop = (const char *)fdt_getprop(fdt, node, "compatible", &len);
+	if (!prop) {
+		return 3;
+	}
+
+	ret = fdt_get_reg_props_by_index(fdt, node, 0, &addr, NULL);
+	if (ret)
+	{
+		return 4;
+	}
+	addr = fdtw_translate_address(fdt, node, addr);
+
+	*address = addr;
+	return 0;
+}
+
+static uint64_t read_check_address (unsigned char *prop)
+{
+	uint64_t res = 0;
+	/* Address field is stored as 4 big endian uint32_t values. */
+	for (int i = 0; i < 8; i++)
+	{
+		res = res | ((uint64_t)prop[i] << (56-(i*8)));
+	}
+	return res;
+}
+
+static int run_test(const char *name, const char *dtb_path, const char *dev,
+			uintptr_t expected)
+{
+	FILE *dtb;
+	size_t size;
+	int offs;
+	int ret;
+	int len;
+	uintptr_t address;
+	unsigned char *prop;
+	void *fdt_buffer;
+
+	printf("FDT Translation Test Case: %s\n", name);
+	printf("  DTB file: %s\n", dtb_path);
+	if (dev != NULL)
+	{
+		printf("  Device: %s\n", dev);
+	}
+	else
+	{
+		printf("  Device: stdout\n");
+	}
+
+	/* Read DTB file into buffer */
+	dtb = fopen(dtb_path, "rb");
+	if (dtb == NULL)
+	{
+		printf("  [ERROR] Could not open device tree binary \"%s\"\n",
+			dtb_path);
+		printf("%s", FILE_NOT_FOUND_HELP);
+		return -1;
+	}
+
+	/* Get size and allocate buffer. */
+	fseek(dtb, 0, SEEK_END);
+	size = ftell(dtb);
+	fdt_buffer = malloc(size);
+	if (fdt_buffer == NULL)
+	{
+		printf("  [ERROR] Could not allocate file buffer.\n");
+		return -1;
+	}
+	rewind(dtb);
+
+	/* Read file into buffer and close it. */
+	if(fread(fdt_buffer, 1, size, dtb) != size)
+	{
+		printf("  [ERROR] Could not read input file.\n");
+		free(fdt_buffer);
+		return -1;
+	}
+	fclose(dtb);
+
+	ret = fdt_check_header(fdt_buffer);
+	if (ret) {
+		printf("  [ERROR] Invalid DTB header.\n");
+		free(fdt_buffer);
+		return ret;
+	}
+
+	if (dev != NULL)
+	{
+		/* If a specific device is given, look for it. */
+		offs = fdt_node_offset_by_compatible(fdt_buffer, -1, dev);
+	}
+	else
+	{
+		/* If no device specified, look for stdout node. */
+		offs = fdt_get_stdout_node_offset(fdt_buffer);
+	}
+	if (offs < 0) {
+		printf("  [ERROR] Could not find requested node.\n");
+		ret = offs;
+		free(fdt_buffer);
+		return ret;
+	}
+
+	/* Get address of device. */
+	ret = check_translation(fdt_buffer, offs, &address);
+	if (ret != 0)
+	{
+		free(fdt_buffer);
+		return ret;
+	}
+
+	/* Verify address translation. */
+	if (expected == 0)
+	{
+		/* Retrieve expected result from DTB "address" property. */
+		prop = (unsigned char *)fdt_getprop(fdt_buffer, offs, "address",
+							&len);
+		if ((prop == NULL) || (len != 16))
+		{
+			printf("  [ERROR] Expected len %d, got %d\n", 16, len);
+			free(fdt_buffer);
+			return -1;
+		}
+		expected = read_check_address(prop);
+	}
+
+	printf("  Expected: 0x%0lX\n", expected);
+	printf("  Found:    0x%0lX\n", address);
+	if (address != expected)
+	{
+		printf("  TEST FAILED\n");
+		free(fdt_buffer);
+		return -1;
+	}
+
+	printf("  TEST SUCCEEDED\n");
+	free(fdt_buffer);
+	return 0;
+}
+
+TEST_GROUP(fdt)
+{
+	/* Nothing to declare here. */
+};
+
+TEST(fdt, test_fvp)
+{
+	int result = run_test("test_fvp", TFA_FVP_DTB_PATH, "arm,sp804",
+				0x1C110000);
+	CHECK_EQUAL(result, 0);
+}
+
+TEST(fdt, test_juno_r1_a)
+{
+	/* Search for stdout with NULL compatible string. */
+	int result = run_test("test_juno_r1_a", LINUX64_JUNO_R1_DTB, NULL,
+				0x7FF80000);
+	CHECK_EQUAL(result, 0);
+}
+
+TEST(fdt, test_juno_r1_b)
+{
+	int result = run_test("test_juno_r1_b", LINUX64_JUNO_R1_DTB,
+				"arm,sp804", 0x1C110000);
+	CHECK_EQUAL(result, 0);
+}
+
+TEST(fdt, test_sun50i)
+{
+	int result = run_test("test_sun50i_pine64_plus",
+				LINUX64_SUN50I_PINE64_PLUS_DTB,
+				"allwinner,sun50i-a64-de2-rotate",
+				0x01020000);
+	CHECK_EQUAL(result, 0);
+}
+
+TEST(fdt, test_atlas)
+{
+	int result = run_test("test_atlas_7_evb", LINUX32_ATLAS7_EVB_DTB,
+				"sirf,prima2-pwm", 0x18630000);
+	CHECK_EQUAL(result, 0);
+}
+
+TEST(fdt, test_bcm2837)
+{
+	int result = run_test("test_bcm2837_rpi_3", LINUX32_BCM2837_RPI_3_B_DTB,
+				"brcm,bcm2835-txp", 0x3F004000);
+	CHECK_EQUAL(result, 0);
+}
+
+TEST(fdt, test_generic)
+{
+	int failcount = 0;
+	int i = 0;
+	char device[15] = {0};
+
+	/* Count from 1 to 11 */
+	for (int i = 1; i < 12; i++)
+	{
+		sprintf(device, "acme,device%d", i);
+		if (run_test("test_generic", TEST_DTB, device, 0) != 0)
+		{
+			failcount++;
+		}
+	}
+
+	CHECK_EQUAL(failcount, 0);
+}
