|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6 20/31] xen/arm: ITS: Introduce helper to get number of event IDs
From: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx>
gic_nr_event_ids() helper to read number of event IDs that
ITS hardware supports.
Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx>
---
xen/arch/arm/gic-v3-its.c | 7 +++++++
xen/arch/arm/gic-v3.c | 3 +++
xen/arch/arm/gic.c | 5 +++++
xen/include/asm-arm/gic-its.h | 1 +
xen/include/asm-arm/gic.h | 4 ++++
5 files changed, 20 insertions(+)
diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c
index 77abbc6..f41ec83 100644
--- a/xen/arch/arm/gic-v3-its.c
+++ b/xen/arch/arm/gic-v3-its.c
@@ -138,6 +138,11 @@ void irqdesc_set_its_device(struct irq_desc *desc, struct
its_device *dev)
irq_get_msi_desc(desc)->dev = dev;
}
+u32 its_get_nr_event_ids(void)
+{
+ return (1 << its_data.eventid_bits);
+}
+
static struct its_collection *dev_event_to_col(struct its_device *dev,
u32 event)
{
@@ -861,6 +866,8 @@ int its_assign_device(struct domain *d, u32 vdevid, u32
pdevid)
for ( i = 0; i < pdev->event_map.nr_lpis; i++ )
{
+ ASSERT(i < gic_nr_event_ids());
+
plpi = its_get_plpi(pdev, i);
/* TODO: Route lpi */
}
diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c
index bb2c531..538f9f4 100644
--- a/xen/arch/arm/gic-v3.c
+++ b/xen/arch/arm/gic-v3.c
@@ -1315,7 +1315,10 @@ static int __init gicv3_init(void)
* ITS dt node is available
*/
if ( !its_init(&gicv3.rdist_data) )
+ {
gicv3_info.lpi_supported = 1;
+ gicv3_info.nr_event_ids = its_get_nr_event_ids();
+ }
else
gicv3_info.lpi_supported = 0;
}
diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
index 555ad3c..2f23a14 100644
--- a/xen/arch/arm/gic.c
+++ b/xen/arch/arm/gic.c
@@ -81,6 +81,11 @@ bool_t gic_lpi_supported(void)
return gic_hw_ops->info->lpi_supported;
}
+unsigned int gic_nr_event_ids(void)
+{
+ return gic_hw_ops->info->nr_event_ids;
+}
+
void gic_save_state(struct vcpu *v)
{
ASSERT(!local_irq_is_enabled());
diff --git a/xen/include/asm-arm/gic-its.h b/xen/include/asm-arm/gic-its.h
index 7077477..a3d21f7 100644
--- a/xen/include/asm-arm/gic-its.h
+++ b/xen/include/asm-arm/gic-its.h
@@ -330,6 +330,7 @@ unsigned int irqdesc_get_lpi_event(struct irq_desc *desc);
struct its_device *irqdesc_get_its_device(struct irq_desc *desc);
void irqdesc_set_its_device(struct irq_desc *desc, struct its_device *dev);
bool_t is_valid_collection(struct domain *d, uint32_t col);
+unsigned int its_get_nr_event_ids(void);
int its_init(struct rdist_prop *rdists);
int its_cpu_init(void);
int its_add_device(u32 devid, u32 nr_ites, struct dt_device_node *dt_its);
diff --git a/xen/include/asm-arm/gic.h b/xen/include/asm-arm/gic.h
index 15c76d0..2b26e28 100644
--- a/xen/include/asm-arm/gic.h
+++ b/xen/include/asm-arm/gic.h
@@ -283,6 +283,8 @@ extern void gic_dump_info(struct vcpu *v);
/* Number of interrupt lines */
extern unsigned int gic_number_lines(void);
+/* Number of event ids supported */
+extern unsigned int gic_nr_event_ids(void);
/* LPI support info */
bool_t gic_lpi_supported(void);
@@ -304,6 +306,8 @@ struct gic_info {
const struct dt_device_node *node;
/* Number of IRQ ID bits supported */
uint32_t nr_id_bits;
+ /* Number of Event IDs supported */
+ uint32_t nr_event_ids;
/* LPIs are support information */
bool_t lpi_supported;
};
--
1.7.9.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |