arch-arm, dev-arm: Autogen PSCI node in DTB
This is controlled via the python only _have_psci parameter This flag will be checked when auto-generarting a PSCI node. A client (e.g Linux) would then be able to know if it can use the PSCI APIs Change-Id: I16c4a67bd358eca3dfff6c98ab8a602a31e1c751 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27387 Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
committed by
Giacomo Travaglini
parent
73dd2ee7a1
commit
8b2b0f8d71
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2009, 2012-2013, 2015-2019 ARM Limited
|
||||
# Copyright (c) 2009, 2012-2013, 2015-2020 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
@@ -83,6 +83,12 @@ class ArmSystem(System):
|
||||
"Base of the 64KiB PA range used for memory-mapped m5ops. Set to 0 "
|
||||
"to disable.")
|
||||
|
||||
# Set to true if simulation provides a PSCI implementation
|
||||
# This flag will be checked when auto-generating
|
||||
# a PSCI node. A client (e.g Linux) would then be able to
|
||||
# know if it can use the PSCI APIs
|
||||
_have_psci = False
|
||||
|
||||
def generateDtb(self, filename):
|
||||
"""
|
||||
Autogenerate DTB. Arguments are the folder where the DTB
|
||||
|
||||
@@ -645,9 +645,13 @@ class RealView(Platform):
|
||||
yield node
|
||||
|
||||
def annotateCpuDeviceNode(self, cpu, state):
|
||||
cpu.append(FdtPropertyStrings("enable-method", "spin-table"))
|
||||
cpu.append(FdtPropertyWords("cpu-release-addr", \
|
||||
state.addrCells(0x8000fff8)))
|
||||
system = self.system.unproxy(self)
|
||||
if system._have_psci:
|
||||
cpu.append(FdtPropertyStrings('enable-method', 'psci'))
|
||||
else:
|
||||
cpu.append(FdtPropertyStrings("enable-method", "spin-table"))
|
||||
cpu.append(FdtPropertyWords("cpu-release-addr", \
|
||||
state.addrCells(0x8000fff8)))
|
||||
|
||||
class VExpress_EMM(RealView):
|
||||
_mem_regions = [ AddrRange('2GB', size='2GB') ]
|
||||
@@ -1128,6 +1132,24 @@ Interrupts:
|
||||
node.append(FdtPropertyWords("arm,hbi", [0x0]))
|
||||
node.append(FdtPropertyWords("arm,vexpress,site", [0xf]))
|
||||
|
||||
system = self.system.unproxy(self)
|
||||
if system._have_psci:
|
||||
# PSCI functions exposed to the kernel
|
||||
if not system.have_security:
|
||||
raise AssertionError("PSCI requires EL3 (have_security)")
|
||||
|
||||
psci_node = FdtNode('psci')
|
||||
psci_node.appendCompatible(['arm,psci-1.0', 'arm,psci-0.2',
|
||||
'arm,psci'])
|
||||
method = 'smc'
|
||||
psci_node.append(FdtPropertyStrings('method', method))
|
||||
psci_node.append(FdtPropertyWords('cpu_suspend', 0xc4000001))
|
||||
psci_node.append(FdtPropertyWords('cpu_off', 0x84000002))
|
||||
psci_node.append(FdtPropertyWords('cpu_on', 0xc4000003))
|
||||
psci_node.append(FdtPropertyWords('sys_poweroff', 0x84000008))
|
||||
psci_node.append(FdtPropertyWords('sys_reset', 0x84000009))
|
||||
node.append(psci_node)
|
||||
|
||||
yield node
|
||||
|
||||
class VExpress_GEM5_V1_Base(VExpress_GEM5_Base):
|
||||
|
||||
Reference in New Issue
Block a user