mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53: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
|
@ -140,6 +140,8 @@ FIELD(GICR_PENDBASER, PHYADDR, 16, 36)
|
|||
FIELD(GICR_PENDBASER, OUTERCACHE, 56, 3)
|
||||
FIELD(GICR_PENDBASER, PTZ, 62, 1)
|
||||
|
||||
#define GICR_PROPBASER_IDBITS_THRESHOLD 0xd
|
||||
|
||||
#define ICC_CTLR_EL1_CBPR (1U << 0)
|
||||
#define ICC_CTLR_EL1_EOIMODE (1U << 1)
|
||||
#define ICC_CTLR_EL1_PMHE (1U << 6)
|
||||
|
@ -305,6 +307,9 @@ FIELD(GITS_TYPER, CIL, 36, 1)
|
|||
|
||||
#define L1TABLE_ENTRY_SIZE 8
|
||||
|
||||
#define LPI_CTE_ENABLED TABLE_ENTRY_VALID_MASK
|
||||
#define LPI_PRIORITY_MASK 0xfc
|
||||
|
||||
#define GITS_CMDQ_ENTRY_SIZE 32
|
||||
#define NUM_BYTES_IN_DW 8
|
||||
|
||||
|
@ -397,6 +402,7 @@ FIELD(MAPC, RDBASE, 16, 32)
|
|||
* Valid = 1 bit,RDBase = 36 bits(considering max RDBASE)
|
||||
*/
|
||||
#define GITS_CTE_SIZE (0x8ULL)
|
||||
#define GITS_CTE_RDBASE_PROCNUM_MASK MAKE_64BIT_MASK(1, RDBASE_PROCNUM_LENGTH)
|
||||
|
||||
/* Special interrupt IDs */
|
||||
#define INTID_SECURE 1020
|
||||
|
@ -455,6 +461,9 @@ MemTxResult gicv3_redist_write(void *opaque, hwaddr offset, uint64_t data,
|
|||
unsigned size, MemTxAttrs attrs);
|
||||
void gicv3_dist_set_irq(GICv3State *s, int irq, int level);
|
||||
void gicv3_redist_set_irq(GICv3CPUState *cs, int irq, int level);
|
||||
void gicv3_redist_process_lpi(GICv3CPUState *cs, int irq, int level);
|
||||
void gicv3_redist_lpi_pending(GICv3CPUState *cs, int irq, int level);
|
||||
void gicv3_redist_update_lpi(GICv3CPUState *cs);
|
||||
void gicv3_redist_send_sgi(GICv3CPUState *cs, int grp, int irq, bool ns);
|
||||
void gicv3_init_cpuif(GICv3State *s);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue