Hi Zenghui, On 3/25/20 9:10 AM, Zenghui Yu wrote: > Hi Eric, > > On 2020/3/20 17:24, Eric Auger wrote: >> Introduce an helper functions to register >> - a new device, characterized by its device id and the >> max number of event IDs that dimension its ITT (Interrupt >> Translation Table). The function allocates the ITT. >> >> - a new collection, characterized by its ID and the >> target processing engine (PE). >> >> Signed-off-by: Eric Auger <eric.auger@xxxxxxxxxx> >> >> --- >> >> v3 -> v4: >> - remove unused its_baser variable from its_create_device() >> - use get_order() >> - device->itt becomes a GVA instead of GPA >> >> v2 -> v3: >> - s/report_abort/assert >> >> v1 -> v2: >> - s/nb_/nr_ >> --- >> lib/arm64/asm/gic-v3-its.h | 19 +++++++++++++++++++ >> lib/arm64/gic-v3-its.c | 38 ++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 57 insertions(+) >> >> diff --git a/lib/arm64/asm/gic-v3-its.h b/lib/arm64/asm/gic-v3-its.h >> index 4683011..adcb642 100644 >> --- a/lib/arm64/asm/gic-v3-its.h >> +++ b/lib/arm64/asm/gic-v3-its.h >> @@ -31,6 +31,19 @@ struct its_baser { >> }; >> #define GITS_BASER_NR_REGS 8 >> +#define GITS_MAX_DEVICES 8 >> +#define GITS_MAX_COLLECTIONS 8 >> + >> +struct its_device { >> + u32 device_id; /* device ID */ >> + u32 nr_ites; /* Max Interrupt Translation Entries */ >> + void *itt; /* Interrupt Translation Table GVA */ >> +}; >> + >> +struct its_collection { >> + u64 target_address; >> + u16 col_id; >> +}; >> struct its_data { >> void *base; >> @@ -39,6 +52,10 @@ struct its_data { >> struct its_baser coll_baser; >> struct its_cmd_block *cmd_base; >> struct its_cmd_block *cmd_write; >> + struct its_device devices[GITS_MAX_DEVICES]; >> + u32 nr_devices; /* Allocated Devices */ >> + struct its_collection collections[GITS_MAX_COLLECTIONS]; >> + u32 nr_collections; /* Allocated Collections */ >> }; >> extern struct its_data its_data; >> @@ -93,5 +110,7 @@ extern void its_parse_typer(void); >> extern void its_init(void); >> extern int its_baser_lookup(int i, struct its_baser *baser); >> extern void its_enable_defaults(void); >> +extern struct its_device *its_create_device(u32 dev_id, int nr_ites); >> +extern struct its_collection *its_create_collection(u32 col_id, u32 >> target_pe); > > Maybe use 'u16 col_id'? fair enough. At this point, not sure this is worth a respin though ;-) > > Besides, > Reviewed-by: Zenghui Yu <yuzenghui@xxxxxxxxxx> Thanks! Eric > > > Thanks > >