From 98bea5e531ba76f346556b79f84236db064aef9f Mon Sep 17 00:00:00 2001 From: Mykola Kvach Date: Fri, 15 May 2026 12:40:31 +0300 Subject: [PATCH] arm/gicv3: Detect normal NC ITS command queues GITS_CBASER.InnerCache uses the GIC BASER cacheability encoding. Both 0b000 (Device-nGnRnE) and 0b001 (Normal Inner Non-cacheable) describe non-cacheable accesses to the command queue. its_map_cbaser() only checked whether the shifted field was zero, so an ITS that reports Normal Inner Non-cacheable would not set HOST_ITS_FLUSH_CMD_QUEUE. Decode the field before comparing it with the unshifted enum value, matching the handling of ITS BASER tables and GICR_PROPBASER. Fixes: 8ed8d21373be ("ARM: GICv3 ITS: map ITS command buffer") Signed-off-by: Mykola Kvach Reviewed-by: Luca Fancellu Acked-by: Stefano Stabellini --- xen/arch/arm/gic-v3-its.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index 9005ce8ce5..7560d46c6d 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -424,7 +424,8 @@ static void *its_map_cbaser(struct host_its *its) * If the command queue memory is mapped as uncached, we need to flush * it on every access. */ - if ( !(reg & GITS_BASER_INNER_CACHEABILITY_MASK) ) + if ( MASK_EXTR(reg, GITS_BASER_INNER_CACHEABILITY_MASK) <= + GIC_BASER_CACHE_nC ) { its->flags |= HOST_ITS_FLUSH_CMD_QUEUE; printk(XENLOG_WARNING "using non-cacheable ITS command queue\n");