summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dev/arm/Display.py127
-rw-r--r--src/dev/arm/RealView.py25
-rw-r--r--src/dev/arm/SConscript2
-rw-r--r--src/dev/arm/display.cc52
-rw-r--r--src/dev/arm/display.hh53
5 files changed, 259 insertions, 0 deletions
diff --git a/src/dev/arm/Display.py b/src/dev/arm/Display.py
new file mode 100644
index 000000000..36e4feaf0
--- /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 99f79eed8..b53cd9922 100644
--- a/src/dev/arm/RealView.py
+++ b/src/dev/arm/RealView.py
@@ -65,6 +65,7 @@ from m5.objects.Graphics import ImageFormat
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 @@ class HDLcd(AmbaDmaDevice):
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 @@ class HDLcd(AmbaDmaDevice):
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 0b015e2c3..1643527a9 100644
--- a/src/dev/arm/SConscript
+++ b/src/dev/arm/SConscript
@@ -41,6 +41,7 @@ Import('*')
if env['TARGET_ISA'] == 'arm':
SimObject('AbstractNVM.py')
+ SimObject('Display.py')
SimObject('FlashDevice.py')
SimObject('Gic.py')
SimObject('RealView.py')
@@ -54,6 +55,7 @@ if env['TARGET_ISA'] == 'arm':
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 000000000..24233e2f2
--- /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 000000000..80a9b7f12
--- /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__