diff --git a/src/dev/arm/Display.py b/src/dev/arm/Display.py
new file mode 100644
index 0000000..36e4fea
--- /dev/null
+++ b/src/dev/arm/Display.py
@@ -0,0 +1,127 @@
+# Copyright (c) 2019 ARM Limited
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder.  You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Giacomo Travaglini
+
+from m5.params import *
+from m5.SimObject import SimObject
+from m5.util.fdthelper import *
+
+class Display(SimObject):
+    type = 'Display'
+    cxx_header = "dev/arm/display.hh"
+    clock_frequency = Param.Unsigned("clock-frequency property")
+    hactive = Param.Unsigned("hactive property")
+    vactive = Param.Unsigned("vactive property")
+    hfront_porch = Param.Unsigned("hfront-porch property")
+    hback_porch = Param.Unsigned("hback-porch property")
+    hsync_len = Param.Unsigned("hsync-len property")
+    vfront_porch = Param.Unsigned("vfront-porch property")
+    vback_porch = Param.Unsigned("vback-porch property")
+    vsync_len = Param.Unsigned("vsync-len property")
+
+    _endpoint_node = None
+
+    def endpointPhandle(self):
+        return "encoder_endpoint"
+
+    def endpointNode(self):
+        assert self._endpoint_node is not None
+        return self._endpoint_node
+
+    def generateDeviceTree(self, state):
+        # timing node
+        timing_node = FdtNode(self.timingNode())
+
+        timing_node.append(FdtPropertyWords(
+            "clock-frequency", [self.clock_frequency]))
+        timing_node.append(FdtPropertyWords(
+            "hactive", [self.hactive]))
+        timing_node.append(FdtPropertyWords(
+            "vactive", [self.vactive]))
+        timing_node.append(FdtPropertyWords(
+            "hfront-porch", [self.hfront_porch]))
+        timing_node.append(FdtPropertyWords(
+            "hback-porch", [self.hback_porch]))
+        timing_node.append(FdtPropertyWords(
+            "hsync-len", [self.hsync_len]))
+        timing_node.append(FdtPropertyWords(
+            "vfront-porch", [self.vfront_porch]))
+        timing_node.append(FdtPropertyWords(
+            "vback-porch", [self.vback_porch]))
+        timing_node.append(FdtPropertyWords(
+            "vsync-len", [self.vsync_len]))
+
+        timing_node.appendPhandle(self.timingNode())
+
+        # display timing node
+        dispt_node = FdtNode("display-timings")
+        dispt_node.append(FdtPropertyWords("native-mode",
+            state.phandle(self.timingNode())))
+        dispt_node.append(timing_node)
+
+        # endpoint node
+        endpoint_node = FdtNode("endpoint")
+        endpoint_node.appendPhandle(
+            self.endpointPhandle())
+
+        # Assign node so that it can be retrieved
+        self._endpoint_node = endpoint_node
+
+        # port node
+        port_node = FdtNode("port")
+        port_node.append(endpoint_node)
+
+        # Virt-encoder
+        node = FdtNode("virt-encoder")
+        node.appendCompatible(["drm,virtual-encoder"])
+        node.append(dispt_node)
+        node.append(port_node)
+
+        yield node
+
+class Display1080p(Display):
+    clock_frequency = 148500000
+    hactive = 1920
+    vactive = 1080
+    hfront_porch = 148
+    hback_porch = 88
+    hsync_len = 44
+    vfront_porch = 36
+    vback_porch = 4
+    vsync_len = 5
+
+    def timingNode(self):
+        return "timing_1080p60"
diff --git a/src/dev/arm/RealView.py b/src/dev/arm/RealView.py
index 99f79ee..b53cd99 100644
--- a/src/dev/arm/RealView.py
+++ b/src/dev/arm/RealView.py
@@ -65,6 +65,7 @@
 from m5.objects.ClockedObject import ClockedObject
 from m5.objects.PS2 import *
 from m5.objects.VirtIOMMIO import MmioVirtIO
+from m5.objects.Display import Display, Display1080p
 
 # Platforms with KVM support should generally use in-kernel GIC
 # emulation. Use a GIC model that automatically switches between
@@ -491,7 +492,29 @@
     virt_refresh_rate = Param.Frequency("20Hz", "Frame refresh rate "
                                         "in KVM mode")
 
+    encoder = Param.Display(Display1080p(), "Display encoder")
+
+    def endpointPhandle(self):
+        return "hdlcd_endpoint"
+
     def generateDeviceTree(self, state):
+        endpoint_node = FdtNode("endpoint")
+        endpoint_node.appendPhandle(self.endpointPhandle())
+
+        for encoder_node in self.encoder.generateDeviceTree(state):
+            encoder_endpoint = self.encoder.endpointNode()
+
+            # Endpoint subnode
+            endpoint_node.append(FdtPropertyWords("remote-endpoint",
+                [ state.phandle(self.encoder.endpointPhandle()) ]))
+            encoder_endpoint.append(FdtPropertyWords("remote-endpoint",
+                [ state.phandle(self.endpointPhandle()) ]))
+
+            yield encoder_node
+
+        port_node = FdtNode("port")
+        port_node.append(endpoint_node)
+
         # Interrupt number is hardcoded; it is not a property of this class
         node = self.generateBasicPioDeviceNode(state, 'hdlcd',
                                                self.pio_addr, 0x1000, [63])
@@ -508,6 +531,8 @@
 
         self.addIommuProperty(state, node)
 
+        node.append(port_node)
+
         yield node
 
 class RealView(Platform):
diff --git a/src/dev/arm/SConscript b/src/dev/arm/SConscript
index 0b015e2..1643527 100644
--- a/src/dev/arm/SConscript
+++ b/src/dev/arm/SConscript
@@ -41,6 +41,7 @@
 
 if env['TARGET_ISA'] == 'arm':
     SimObject('AbstractNVM.py')
+    SimObject('Display.py')
     SimObject('FlashDevice.py')
     SimObject('Gic.py')
     SimObject('RealView.py')
@@ -54,6 +55,7 @@
     Source('amba_device.cc')
     Source('amba_fake.cc')
     Source('base_gic.cc')
+    Source('display.cc')
     Source('flash_device.cc')
     Source('generic_timer.cc')
     Source('gic_v2.cc')
diff --git a/src/dev/arm/display.cc b/src/dev/arm/display.cc
new file mode 100644
index 0000000..24233e2
--- /dev/null
+++ b/src/dev/arm/display.cc
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2019 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Giacomo Travaglini
+ */
+
+#include "dev/arm/display.hh"
+
+#include "params/Display.hh"
+
+Display::Display(const DisplayParams *p)
+  : SimObject(p)
+{}
+
+Display *
+DisplayParams::create()
+{
+    return new Display(this);
+}
diff --git a/src/dev/arm/display.hh b/src/dev/arm/display.hh
new file mode 100644
index 0000000..80a9b7f
--- /dev/null
+++ b/src/dev/arm/display.hh
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2019 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Giacomo Travaglini
+ */
+
+#ifndef __DEV_ARM_DISPLAY_H__
+#define __DEV_ARM_DISPLAY_H__
+
+#include "sim/sim_object.hh"
+
+class DisplayParams;
+
+class Display : public SimObject
+{
+  public:
+    Display(const DisplayParams *p);
+};
+
+#endif // __DEV_ARM_DISPLAY_H__
