Merge branch 'release-staging-v20.0.0.0' into develop
This commit is contained in:
@@ -89,6 +89,15 @@ Reference:
|
||||
int_virt = Param.ArmPPI("Virtual timer interrupt")
|
||||
int_hyp = Param.ArmPPI("Hypervisor timer interrupt")
|
||||
|
||||
# This value should be in theory initialized by the highest
|
||||
# priviledged software. We do this in gem5 to avoid KVM
|
||||
# complications (the gem5 firmware won't run at highest EL)
|
||||
#
|
||||
# PLEASE note: change this parameter only if using the gem5 bootloader
|
||||
# Another real world bootloader might be changing the CNTFRQ register
|
||||
# value, so this initial value will be discarded
|
||||
cntfrq = Param.UInt64(0x1800000, "Value for the CNTFRQ timer register")
|
||||
|
||||
def generateDeviceTree(self, state):
|
||||
node = FdtNode("timer")
|
||||
|
||||
|
||||
@@ -689,6 +689,42 @@ GenericTimer::readMiscReg(int reg, unsigned cpu)
|
||||
}
|
||||
}
|
||||
|
||||
GenericTimer::CoreTimers::CoreTimers(GenericTimer &_parent,
|
||||
ArmSystem &system, unsigned cpu,
|
||||
ArmInterruptPin *_irqPhysS, ArmInterruptPin *_irqPhysNS,
|
||||
ArmInterruptPin *_irqVirt, ArmInterruptPin *_irqHyp)
|
||||
: parent(_parent),
|
||||
cntfrq(parent.params()->cntfrq),
|
||||
threadContext(system.getThreadContext(cpu)),
|
||||
irqPhysS(_irqPhysS),
|
||||
irqPhysNS(_irqPhysNS),
|
||||
irqVirt(_irqVirt),
|
||||
irqHyp(_irqHyp),
|
||||
physS(csprintf("%s.phys_s_timer%d", parent.name(), cpu),
|
||||
system, parent, parent.systemCounter,
|
||||
_irqPhysS),
|
||||
// This should really be phys_timerN, but we are stuck with
|
||||
// arch_timer for backwards compatibility.
|
||||
physNS(csprintf("%s.arch_timer%d", parent.name(), cpu),
|
||||
system, parent, parent.systemCounter,
|
||||
_irqPhysNS),
|
||||
virt(csprintf("%s.virt_timer%d", parent.name(), cpu),
|
||||
system, parent, parent.systemCounter,
|
||||
_irqVirt),
|
||||
hyp(csprintf("%s.hyp_timer%d", parent.name(), cpu),
|
||||
system, parent, parent.systemCounter,
|
||||
_irqHyp),
|
||||
physEvStream{
|
||||
EventFunctionWrapper([this]{ physEventStreamCallback(); },
|
||||
csprintf("%s.phys_event_gen%d", parent.name(), cpu)), 0, 0
|
||||
},
|
||||
virtEvStream{
|
||||
EventFunctionWrapper([this]{ virtEventStreamCallback(); },
|
||||
csprintf("%s.virt_event_gen%d", parent.name(), cpu)), 0, 0
|
||||
}
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
GenericTimer::CoreTimers::physEventStreamCallback()
|
||||
{
|
||||
|
||||
@@ -293,38 +293,10 @@ class GenericTimer : public SimObject
|
||||
public:
|
||||
CoreTimers(GenericTimer &_parent, ArmSystem &system, unsigned cpu,
|
||||
ArmInterruptPin *_irqPhysS, ArmInterruptPin *_irqPhysNS,
|
||||
ArmInterruptPin *_irqVirt, ArmInterruptPin *_irqHyp)
|
||||
: parent(_parent),
|
||||
threadContext(system.getThreadContext(cpu)),
|
||||
irqPhysS(_irqPhysS),
|
||||
irqPhysNS(_irqPhysNS),
|
||||
irqVirt(_irqVirt),
|
||||
irqHyp(_irqHyp),
|
||||
physS(csprintf("%s.phys_s_timer%d", parent.name(), cpu),
|
||||
system, parent, parent.systemCounter,
|
||||
_irqPhysS),
|
||||
// This should really be phys_timerN, but we are stuck with
|
||||
// arch_timer for backwards compatibility.
|
||||
physNS(csprintf("%s.arch_timer%d", parent.name(), cpu),
|
||||
system, parent, parent.systemCounter,
|
||||
_irqPhysNS),
|
||||
virt(csprintf("%s.virt_timer%d", parent.name(), cpu),
|
||||
system, parent, parent.systemCounter,
|
||||
_irqVirt),
|
||||
hyp(csprintf("%s.hyp_timer%d", parent.name(), cpu),
|
||||
system, parent, parent.systemCounter,
|
||||
_irqHyp),
|
||||
physEvStream{
|
||||
EventFunctionWrapper([this]{ physEventStreamCallback(); },
|
||||
csprintf("%s.phys_event_gen%d", parent.name(), cpu)), 0, 0
|
||||
},
|
||||
virtEvStream{
|
||||
EventFunctionWrapper([this]{ virtEventStreamCallback(); },
|
||||
csprintf("%s.virt_event_gen%d", parent.name(), cpu)), 0, 0
|
||||
}
|
||||
{
|
||||
cntfrq = 0x01800000;
|
||||
}
|
||||
ArmInterruptPin *_irqVirt, ArmInterruptPin *_irqHyp);
|
||||
|
||||
/// Generic Timer parent reference
|
||||
GenericTimer &parent;
|
||||
|
||||
/// System counter frequency as visible from this core
|
||||
uint32_t cntfrq;
|
||||
@@ -335,9 +307,6 @@ class GenericTimer : public SimObject
|
||||
/// Hypervisor control register
|
||||
CNTHCTL cnthctl;
|
||||
|
||||
/// Generic Timer parent reference
|
||||
GenericTimer &parent;
|
||||
|
||||
/// Thread (HW) context associated to this PE implementation
|
||||
ThreadContext *threadContext;
|
||||
|
||||
|
||||
@@ -40,8 +40,6 @@
|
||||
|
||||
.globl _start
|
||||
_start:
|
||||
ldr x0, =CNTFRQ
|
||||
msr cntfrq_el0, x0
|
||||
/*
|
||||
* EL3 initialisation
|
||||
*/
|
||||
|
||||
@@ -34,7 +34,7 @@ BUILDDIR = .
|
||||
DESTDIR = $(error Please set DESTDIR to wanted installation directory)
|
||||
|
||||
CFLAGS = -march=armv8-a
|
||||
CPPFLAGS = -DPHYS_OFFSET=0x80000000 -DCNTFRQ=0x01800000 \
|
||||
CPPFLAGS = -DPHYS_OFFSET=0x80000000 \
|
||||
-DUART_BASE=0x1c090000 -DSYSREGS_BASE=0x1c010000 \
|
||||
-Dkernel=0x80080000 \
|
||||
-Dmbox=0x8000fff8 -Ddtb=0x80000100
|
||||
|
||||
Reference in New Issue
Block a user