mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
xen/arm: vgic-v3: Correctly set GICD_TYPER.CPUNumber
On GICv3, the value (CPUNumber + 1) indicates the number of processor that may be used as interrupts targets when ARE bit is zero. The maximum is 8 processors. Signed-off-by: Julien Grall <julien.grall@linaro.org> Acked-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
1 parent
8206d052eb
commit
834551bace
2 files changed
+7
-1
No files matched your search
@@ -685,10 +685,15 @@ static int vgic_v3_distr_mmio_read(struct vcpu *v, mmio_info_t *info)
|
||||
* Stream Protocol Interface
|
||||
*/
|
||||
unsigned int irq_bits = get_count_order(vgic_num_irqs(v->domain));
|
||||
/*
|
||||
* Number of processors that may be used as interrupt targets when ARE
|
||||
* bit is zero. The maximum is 8.
|
||||
*/
|
||||
unsigned int ncpus = min_t(unsigned int, v->domain->max_vcpus, 8);
|
||||
|
||||
if ( dabt.size != DABT_WORD ) goto bad_width;
|
||||
/* No secure world support for guests. */
|
||||
*r = (((v->domain->max_vcpus << 5) & GICD_TYPE_CPUS ) |
|
||||
*r = ((ncpus - 1) << GICD_TYPE_CPUS_SHIFT |
|
||||
((v->domain->arch.vgic.nr_spis / 32) & GICD_TYPE_LINES));
|
||||
|
||||
*r |= (irq_bits - 1) << GICD_TYPE_ID_BITS_SHIFT;
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
#define GICD_CTL_ENABLE 0x1
|
||||
|
||||
#define GICD_TYPE_LINES 0x01f
|
||||
#define GICD_TYPE_CPUS_SHIFT 5
|
||||
#define GICD_TYPE_CPUS 0x0e0
|
||||
#define GICD_TYPE_SEC 0x400
|
||||
|
||||
|
||||