-# 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
"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
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') ]
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):