Merge branch 'release-staging-v20.0.0.0' into develop

This commit is contained in:
Bobby R. Bruce
2020-05-28 15:52:09 -07:00
5 changed files with 50 additions and 38 deletions

View File

@@ -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")

View File

@@ -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()
{

View File

@@ -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;

View File

@@ -40,8 +40,6 @@
.globl _start
_start:
ldr x0, =CNTFRQ
msr cntfrq_el0, x0
/*
* EL3 initialisation
*/

View File

@@ -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