Display.py revision 14283
114283Sgiacomo.travaglini@arm.com# Copyright (c) 2019 ARM Limited 214283Sgiacomo.travaglini@arm.com# All rights reserved. 314283Sgiacomo.travaglini@arm.com# 414283Sgiacomo.travaglini@arm.com# The license below extends only to copyright in the software and shall 514283Sgiacomo.travaglini@arm.com# not be construed as granting a license to any other intellectual 614283Sgiacomo.travaglini@arm.com# property including but not limited to intellectual property relating 714283Sgiacomo.travaglini@arm.com# to a hardware implementation of the functionality of the software 814283Sgiacomo.travaglini@arm.com# licensed hereunder. You may use the software subject to the license 914283Sgiacomo.travaglini@arm.com# terms below provided that you ensure that this notice is replicated 1014283Sgiacomo.travaglini@arm.com# unmodified and in its entirety in all distributions of the software, 1114283Sgiacomo.travaglini@arm.com# modified or unmodified, in source code or in binary form. 1214283Sgiacomo.travaglini@arm.com# 1314283Sgiacomo.travaglini@arm.com# Redistribution and use in source and binary forms, with or without 1414283Sgiacomo.travaglini@arm.com# modification, are permitted provided that the following conditions are 1514283Sgiacomo.travaglini@arm.com# met: redistributions of source code must retain the above copyright 1614283Sgiacomo.travaglini@arm.com# notice, this list of conditions and the following disclaimer; 1714283Sgiacomo.travaglini@arm.com# redistributions in binary form must reproduce the above copyright 1814283Sgiacomo.travaglini@arm.com# notice, this list of conditions and the following disclaimer in the 1914283Sgiacomo.travaglini@arm.com# documentation and/or other materials provided with the distribution; 2014283Sgiacomo.travaglini@arm.com# neither the name of the copyright holders nor the names of its 2114283Sgiacomo.travaglini@arm.com# contributors may be used to endorse or promote products derived from 2214283Sgiacomo.travaglini@arm.com# this software without specific prior written permission. 2314283Sgiacomo.travaglini@arm.com# 2414283Sgiacomo.travaglini@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2514283Sgiacomo.travaglini@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2614283Sgiacomo.travaglini@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2714283Sgiacomo.travaglini@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2814283Sgiacomo.travaglini@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2914283Sgiacomo.travaglini@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3014283Sgiacomo.travaglini@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3114283Sgiacomo.travaglini@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3214283Sgiacomo.travaglini@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3314283Sgiacomo.travaglini@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3414283Sgiacomo.travaglini@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3514283Sgiacomo.travaglini@arm.com# 3614283Sgiacomo.travaglini@arm.com# Authors: Giacomo Travaglini 3714283Sgiacomo.travaglini@arm.com 3814283Sgiacomo.travaglini@arm.comfrom m5.params import * 3914283Sgiacomo.travaglini@arm.comfrom m5.SimObject import SimObject 4014283Sgiacomo.travaglini@arm.comfrom m5.util.fdthelper import * 4114283Sgiacomo.travaglini@arm.com 4214283Sgiacomo.travaglini@arm.comclass Display(SimObject): 4314283Sgiacomo.travaglini@arm.com type = 'Display' 4414283Sgiacomo.travaglini@arm.com cxx_header = "dev/arm/display.hh" 4514283Sgiacomo.travaglini@arm.com clock_frequency = Param.Unsigned("clock-frequency property") 4614283Sgiacomo.travaglini@arm.com hactive = Param.Unsigned("hactive property") 4714283Sgiacomo.travaglini@arm.com vactive = Param.Unsigned("vactive property") 4814283Sgiacomo.travaglini@arm.com hfront_porch = Param.Unsigned("hfront-porch property") 4914283Sgiacomo.travaglini@arm.com hback_porch = Param.Unsigned("hback-porch property") 5014283Sgiacomo.travaglini@arm.com hsync_len = Param.Unsigned("hsync-len property") 5114283Sgiacomo.travaglini@arm.com vfront_porch = Param.Unsigned("vfront-porch property") 5214283Sgiacomo.travaglini@arm.com vback_porch = Param.Unsigned("vback-porch property") 5314283Sgiacomo.travaglini@arm.com vsync_len = Param.Unsigned("vsync-len property") 5414283Sgiacomo.travaglini@arm.com 5514283Sgiacomo.travaglini@arm.com _endpoint_node = None 5614283Sgiacomo.travaglini@arm.com 5714283Sgiacomo.travaglini@arm.com def endpointPhandle(self): 5814283Sgiacomo.travaglini@arm.com return "encoder_endpoint" 5914283Sgiacomo.travaglini@arm.com 6014283Sgiacomo.travaglini@arm.com def endpointNode(self): 6114283Sgiacomo.travaglini@arm.com assert self._endpoint_node is not None 6214283Sgiacomo.travaglini@arm.com return self._endpoint_node 6314283Sgiacomo.travaglini@arm.com 6414283Sgiacomo.travaglini@arm.com def generateDeviceTree(self, state): 6514283Sgiacomo.travaglini@arm.com # timing node 6614283Sgiacomo.travaglini@arm.com timing_node = FdtNode(self.timingNode()) 6714283Sgiacomo.travaglini@arm.com 6814283Sgiacomo.travaglini@arm.com timing_node.append(FdtPropertyWords( 6914283Sgiacomo.travaglini@arm.com "clock-frequency", [self.clock_frequency])) 7014283Sgiacomo.travaglini@arm.com timing_node.append(FdtPropertyWords( 7114283Sgiacomo.travaglini@arm.com "hactive", [self.hactive])) 7214283Sgiacomo.travaglini@arm.com timing_node.append(FdtPropertyWords( 7314283Sgiacomo.travaglini@arm.com "vactive", [self.vactive])) 7414283Sgiacomo.travaglini@arm.com timing_node.append(FdtPropertyWords( 7514283Sgiacomo.travaglini@arm.com "hfront-porch", [self.hfront_porch])) 7614283Sgiacomo.travaglini@arm.com timing_node.append(FdtPropertyWords( 7714283Sgiacomo.travaglini@arm.com "hback-porch", [self.hback_porch])) 7814283Sgiacomo.travaglini@arm.com timing_node.append(FdtPropertyWords( 7914283Sgiacomo.travaglini@arm.com "hsync-len", [self.hsync_len])) 8014283Sgiacomo.travaglini@arm.com timing_node.append(FdtPropertyWords( 8114283Sgiacomo.travaglini@arm.com "vfront-porch", [self.vfront_porch])) 8214283Sgiacomo.travaglini@arm.com timing_node.append(FdtPropertyWords( 8314283Sgiacomo.travaglini@arm.com "vback-porch", [self.vback_porch])) 8414283Sgiacomo.travaglini@arm.com timing_node.append(FdtPropertyWords( 8514283Sgiacomo.travaglini@arm.com "vsync-len", [self.vsync_len])) 8614283Sgiacomo.travaglini@arm.com 8714283Sgiacomo.travaglini@arm.com timing_node.appendPhandle(self.timingNode()) 8814283Sgiacomo.travaglini@arm.com 8914283Sgiacomo.travaglini@arm.com # display timing node 9014283Sgiacomo.travaglini@arm.com dispt_node = FdtNode("display-timings") 9114283Sgiacomo.travaglini@arm.com dispt_node.append(FdtPropertyWords("native-mode", 9214283Sgiacomo.travaglini@arm.com state.phandle(self.timingNode()))) 9314283Sgiacomo.travaglini@arm.com dispt_node.append(timing_node) 9414283Sgiacomo.travaglini@arm.com 9514283Sgiacomo.travaglini@arm.com # endpoint node 9614283Sgiacomo.travaglini@arm.com endpoint_node = FdtNode("endpoint") 9714283Sgiacomo.travaglini@arm.com endpoint_node.appendPhandle( 9814283Sgiacomo.travaglini@arm.com self.endpointPhandle()) 9914283Sgiacomo.travaglini@arm.com 10014283Sgiacomo.travaglini@arm.com # Assign node so that it can be retrieved 10114283Sgiacomo.travaglini@arm.com self._endpoint_node = endpoint_node 10214283Sgiacomo.travaglini@arm.com 10314283Sgiacomo.travaglini@arm.com # port node 10414283Sgiacomo.travaglini@arm.com port_node = FdtNode("port") 10514283Sgiacomo.travaglini@arm.com port_node.append(endpoint_node) 10614283Sgiacomo.travaglini@arm.com 10714283Sgiacomo.travaglini@arm.com # Virt-encoder 10814283Sgiacomo.travaglini@arm.com node = FdtNode("virt-encoder") 10914283Sgiacomo.travaglini@arm.com node.appendCompatible(["drm,virtual-encoder"]) 11014283Sgiacomo.travaglini@arm.com node.append(dispt_node) 11114283Sgiacomo.travaglini@arm.com node.append(port_node) 11214283Sgiacomo.travaglini@arm.com 11314283Sgiacomo.travaglini@arm.com yield node 11414283Sgiacomo.travaglini@arm.com 11514283Sgiacomo.travaglini@arm.comclass Display1080p(Display): 11614283Sgiacomo.travaglini@arm.com clock_frequency = 148500000 11714283Sgiacomo.travaglini@arm.com hactive = 1920 11814283Sgiacomo.travaglini@arm.com vactive = 1080 11914283Sgiacomo.travaglini@arm.com hfront_porch = 148 12014283Sgiacomo.travaglini@arm.com hback_porch = 88 12114283Sgiacomo.travaglini@arm.com hsync_len = 44 12214283Sgiacomo.travaglini@arm.com vfront_porch = 36 12314283Sgiacomo.travaglini@arm.com vback_porch = 4 12414283Sgiacomo.travaglini@arm.com vsync_len = 5 12514283Sgiacomo.travaglini@arm.com 12614283Sgiacomo.travaglini@arm.com def timingNode(self): 12714283Sgiacomo.travaglini@arm.com return "timing_1080p60" 128