diff options
Diffstat (limited to 'src/dev/arm')
-rw-r--r-- | src/dev/arm/Display.py | 127 | ||||
-rw-r--r-- | src/dev/arm/RealView.py | 25 | ||||
-rw-r--r-- | src/dev/arm/SConscript | 2 | ||||
-rw-r--r-- | src/dev/arm/display.cc | 52 | ||||
-rw-r--r-- | src/dev/arm/display.hh | 53 |
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__ |