cpu: IntrControl, clear all and check helpers

This patch extends the IntrControl to provided additional member
functions for (1) clearing all pending interrupts in a PE and (2)
checking for any pending interrupt in a PE. These are intended to
be used from interrupt management related peripherals.

Change-Id: I06b553872ed469e7449b872a0716865773ace154
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/26809
Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu>
Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Adrian Herrera
2019-12-09 20:10:14 +00:00
committed by Giacomo Travaglini
parent 252560f03a
commit 700bf943f3
2 changed files with 22 additions and 6 deletions

View File

@@ -47,18 +47,32 @@ void
IntrControl::post(int cpu_id, int int_num, int index)
{
DPRINTF(IntrControl, "post %d:%d (cpu %d)\n", int_num, index, cpu_id);
std::vector<ThreadContext *> &tcvec = sys->threadContexts;
BaseCPU *cpu = tcvec[cpu_id]->getCpuPtr();
cpu->postInterrupt(tcvec[cpu_id]->threadId(), int_num, index);
ThreadContext *tc = sys->getThreadContext(cpu_id);
tc->getCpuPtr()->postInterrupt(tc->threadId(), int_num, index);
}
void
IntrControl::clear(int cpu_id, int int_num, int index)
{
DPRINTF(IntrControl, "clear %d:%d (cpu %d)\n", int_num, index, cpu_id);
std::vector<ThreadContext *> &tcvec = sys->threadContexts;
BaseCPU *cpu = tcvec[cpu_id]->getCpuPtr();
cpu->clearInterrupt(tcvec[cpu_id]->threadId(), int_num, index);
ThreadContext *tc = sys->getThreadContext(cpu_id);
tc->getCpuPtr()->clearInterrupt(tc->threadId(), int_num, index);
}
void
IntrControl::clearAll(int cpu_id)
{
DPRINTF(IntrControl, "Clear all pending interrupts for CPU %d\n", cpu_id);
ThreadContext *tc = sys->getThreadContext(cpu_id);
tc->getCpuPtr()->clearInterrupts(tc->threadId());
}
bool
IntrControl::havePosted(int cpu_id) const
{
DPRINTF(IntrControl, "Check pending interrupts for CPU %d\n", cpu_id);
ThreadContext *tc = sys->getThreadContext(cpu_id);
return tc->getCpuPtr()->checkInterrupts(tc);
}
IntrControl *

View File

@@ -45,6 +45,8 @@ class IntrControl : public SimObject
void clear(int cpu_id, int int_num, int index);
void post(int cpu_id, int int_num, int index);
void clearAll(int cpu_id);
bool havePosted(int cpu_id) const;
void
clear(int int_num, int index = 0)