mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
hw/intc: GICv3 redistributor ITS processing
Implemented lpi processing at redistributor to get lpi config info from lpi configuration table,determine priority,set pending state in lpi pending table and forward the lpi to cpuif.Added logic to invoke redistributor lpi processing with translated LPI which set/clear LPI from ITS device as part of ITS INT,CLEAR,DISCARD command and GITS_TRANSLATER processing. Signed-off-by: Shashi Mallela <shashi.mallela@linaro.org> Tested-by: Neil Armstrong <narmstrong@baylibre.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20210910143951.92242-7-shashi.mallela@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
ac30dec396
commit
17fb5e36aa
7 changed files with 200 additions and 2 deletions
|
@ -165,6 +165,16 @@ static void gicv3_redist_update_noirqset(GICv3CPUState *cs)
|
|||
cs->hppi.grp = gicv3_irq_group(cs->gic, cs, cs->hppi.irq);
|
||||
}
|
||||
|
||||
if ((cs->gicr_ctlr & GICR_CTLR_ENABLE_LPIS) && cs->gic->lpi_enable &&
|
||||
(cs->hpplpi.prio != 0xff)) {
|
||||
if (irqbetter(cs, cs->hpplpi.irq, cs->hpplpi.prio)) {
|
||||
cs->hppi.irq = cs->hpplpi.irq;
|
||||
cs->hppi.prio = cs->hpplpi.prio;
|
||||
cs->hppi.grp = cs->hpplpi.grp;
|
||||
seenbetter = true;
|
||||
}
|
||||
}
|
||||
|
||||
/* If the best interrupt we just found would preempt whatever
|
||||
* was the previous best interrupt before this update, then
|
||||
* we know it's definitely the best one now.
|
||||
|
@ -339,9 +349,13 @@ static void gicv3_set_irq(void *opaque, int irq, int level)
|
|||
|
||||
static void arm_gicv3_post_load(GICv3State *s)
|
||||
{
|
||||
int i;
|
||||
/* Recalculate our cached idea of the current highest priority
|
||||
* pending interrupt, but don't set IRQ or FIQ lines.
|
||||
*/
|
||||
for (i = 0; i < s->num_cpu; i++) {
|
||||
gicv3_redist_update_lpi(&s->cpu[i]);
|
||||
}
|
||||
gicv3_full_update_noirqset(s);
|
||||
/* Repopulate the cache of GICv3CPUState pointers for target CPUs */
|
||||
gicv3_cache_all_target_cpustates(s);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue