dev-arm: Take into account PPI enable bit

When checking for PPIs to send to the cpu in the PL390 GIC we
were forwarding any pending PPI regardless of their masking
in the distributor.

Change-Id: I2e294abeca733cca95cd0deeb9659c7d3d9d8734
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/12624
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
This commit is contained in:
Giacomo Travaglini
2018-09-05 14:43:09 +01:00
parent 64b3a741f5
commit 54bc94114f

View File

@@ -742,11 +742,18 @@ GicV2::updateIntState(int hint)
// Check PPIs
if (cpuPpiPending[cpu]) {
for (int ppi = 0; ppi < PPI_MAX; ppi++) {
if (cpuPpiPending[cpu] & (1 << ppi))
if (highest_pri > getIntPriority(cpu, SGI_MAX + ppi)) {
highest_pri = getIntPriority(cpu, SGI_MAX + ppi);
highest_int = SGI_MAX + ppi;
for (int ppi_idx = 0, int_num = SGI_MAX;
int_num < PPI_MAX + SGI_MAX;
ppi_idx++, int_num++) {
const bool ppi_pending = bits(cpuPpiPending[cpu], ppi_idx);
const bool ppi_enabled = bits(getIntEnabled(cpu, 0), int_num);
const bool higher_priority =
highest_pri > getIntPriority(cpu, int_num);
if (ppi_pending && ppi_enabled && higher_priority) {
highest_pri = getIntPriority(cpu, int_num);
highest_int = int_num;
}
}
}