From nobody Fri Apr 3 01:26:02 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1774435278; cv=none; d=zohomail.com; s=zohoarc; b=lBRa2UZnlhLylSC2DvscWms8tGsyMrV+Ugq50FBbxsL8a04NHVAisuxkqZcBxco2CjlftVVGSbpnGjdgPTRVUVoed6Yqc0Q2Y4WsVn1tDT0hjRwO6ev7jqIhzJymMyh6NctDM+F4Mdp3w8VmO8gUtBRsYf08ITyExIYBRnNYryw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774435278; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=JH93Di2V3lm2/5shCb0uuFhGc+gxIZ87omGm1UV+NOQ=; b=aZNjWrUHhZZbairzdRqMnoyBzoZ9TwHsBNOdKl3SRboxL7d+cWMa9aTorKV0uQx3rcCz/BkXP0j22fmaJpWqBrVzKT6x45HqKTBouVsKu6o3p7RVbB1yDTPxoSyhshWPykEK/U1AavQl4p2Pb0k/uICVNyeuHo1G30R95xMH5to= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774435278873164.9280960238832; Wed, 25 Mar 2026 03:41:18 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261930.1554656 (Exim 4.92) (envelope-from ) id 1w5Lfe-0005Qp-KD; Wed, 25 Mar 2026 10:41:06 +0000 Received: by outflank-mailman (output) from mailman id 1261930.1554656; Wed, 25 Mar 2026 10:41:06 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Lfe-0005Qi-Fc; Wed, 25 Mar 2026 10:41:06 +0000 Received: by outflank-mailman (input) for mailman id 1261930; Wed, 25 Mar 2026 10:41:05 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Lfd-0005DO-F8 for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 10:41:05 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w5Lfc-00CENL-RF for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 11:41:04 +0100 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c3bbb7-e002-0a2a0a5209dd-0a2a450bd7b6-32 for ; Wed, 25 Mar 2026 11:41:04 +0100 Received: from [209.85.208.53] (helo=mail-ed1-f53.google.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c3bbc0-ef63-0a2a450b0019-d155d035b01a-3 for ; Wed, 25 Mar 2026 11:41:04 +0100 Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-667f8794e97so10873664a12.2 for ; Wed, 25 Mar 2026 03:41:04 -0700 (PDT) Received: from EPUAKYIW02F7.. ([45.12.25.73]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b9832f8be14sm798491866b.17.2026.03.25.03.41.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 03:41:02 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774435264; x=1775040064; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JH93Di2V3lm2/5shCb0uuFhGc+gxIZ87omGm1UV+NOQ=; b=BrdwNUT0DUELUeYGQ+x4+zIw1Ckhb8sSJqKQEQbpfVMWzvfH0pqdrllpEw4TrbtRsu BdEOIKbgTmzoxDaHQyJbEqLBM80FAWt/B2vcUE+6zIGrgsRcFoJsrejSOrgNWQFu+/wn FwfsixoBN1UKsSJCMQpxmSZvOg1AAyZYusA9VtXPm0+0wTF/4r2Ab/a/336SupF4q4Og UswEpvhVJo3S/NRjPgK/c19pM/CSbjFjWHOQ9SjKFjNvWYyVVHco0YuobuTgV5SgZCB6 OB3eGCB08z4H3pNifHFCq+4dEAXKCwo2H83R4DToIPo3Z9DoExVOxvz2FNjouGmN1BVt NmTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774435264; x=1775040064; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=JH93Di2V3lm2/5shCb0uuFhGc+gxIZ87omGm1UV+NOQ=; b=Eu04sQtK+Z1EeeD7mtvD+JYINKT8nQtZW+A0eOqbqiGDM3B+Zv+MsbXHI1zVgTjYvv gfU+zRXaafSwmQMR4Z0O7Ntd9hWSTg/Q805VZrUI89/qwIVBjLEcycw1NSXDsfbcm1b6 RCOENv9nXWol+KdZ5p5WWWtL3FhyaoMFbCvq7GlsgHWE2+99L6npW6K7/6ZBJuSHUo2d B1lh/0datiQATtAXwT+UTKqTbdr6g6/1kvrt+t8eJYR6kNKgsOeLZWDhMrlYinwcPAjY GfGFjWc/XSC4R/cpw5hglk4KBh3wURcKIiT3xdDo+85o2Fv+dcvCUv/5DsE9WqsxuWZm H7LQ== X-Gm-Message-State: AOJu0Yz6wy1OPRW0AuAgccqrNJkdgcONxF2vpRhuWCasdomGPSKf95hu ocfE/F1BbqoVuVGqTQxrZALyK+DCvi1cfN0f2eIkxN4TeUa538YEdIdzRXK2bw== X-Gm-Gg: ATEYQzzljgXEGdQTlm7FlibIG3QQC3EmSVnECX77X2TGzxSuOgqg0VskoSEPWqGFNrR iJcO0C7RVkMgGzbUho47P7sbGJteN3Tcd8Mbmng/TkK2cvV2EYlifnTWEa/GPNN9wdGDX1FdPl/ 2vcNhd9ZWJBj58M7FpkrkTqpBMQyWJWkl/TZWXpsDV3ng/wk/1uUHmJwO9ij+ctg4O0uSO7AaM3 5xh+Jsak9MsWtlHNhgRJrtSL6xNB87JMvQFYJUCShgFM+LUpw6hrzH5/oT1QCalmxKfiM5w9aF9 RQlJING16n+SAUyVFyOl4gY3OqsHIUf4oVnpDLtQpmiZUyUY7iR3bf+3T88pi6VeMUTjKV3ijgQ Vzr3GHM5040XDuVwRjZSidn64iHFztzgMiuSMjNStVoFY3/zXZdXA4Jqq1R7XzrtPd8vgyTFdF9 m/jrTo9MsreaTgi9xCAQXeZIBXyQ== X-Received: by 2002:a17:907:e113:b0:b97:1d24:bfd7 with SMTP id a640c23a62f3a-b9a3f166610mr163314766b.6.1774435263745; Wed, 25 Mar 2026 03:41:03 -0700 (PDT) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH 1/4] xen/arm: its: collect quirk flags and honor dma-noncoherent Date: Wed, 25 Mar 2026 12:38:30 +0200 Message-ID: <5b68fa0a8403ea60db3047f6505876bc03a41f3f.1774431310.git.mykola_kvach@epam.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-42698a/1774435264-A000B112-B5D61A7C/0/0 X-purgate-type: clean X-purgate-size: 4195 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1774435279561158500 Content-Type: text/plain; charset="utf-8" From: Mykola Kvach Replace the per-quirk init callback with declarative flags in struct its_quirk, and introduce gicv3_its_collect_quirks() to gather the effective workaround flags from both the IIDR-matched quirk entry and the "dma-noncoherent" device-tree property. This lets non-coherent platforms force non-cacheable ITS table attributes even when no IIDR quirk entry matches. Signed-off-by: Mykola Kvach --- xen/arch/arm/gic-v3-its.c | 70 ++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index 9ba068c46f..00524b43a3 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -57,71 +57,87 @@ struct its_device { */ struct its_quirk { const char *desc; - bool (*init)(struct host_its *hw_its); uint32_t iidr; uint32_t mask; + uint32_t flags; }; =20 static uint32_t __ro_after_init its_quirk_flags; =20 -static bool gicv3_its_enable_quirk_gen4(struct host_its *hw_its) -{ - its_quirk_flags |=3D HOST_ITS_WORKAROUND_NC_NS | - HOST_ITS_WORKAROUND_32BIT_ADDR; - - return true; -} - static const struct its_quirk its_quirks[] =3D { { - .desc =3D "R-Car Gen4", - .iidr =3D 0x0201743b, - .mask =3D 0xffffffffU, - .init =3D gicv3_its_enable_quirk_gen4, + .desc =3D "R-Car Gen4", + .iidr =3D 0x0201743b, + .mask =3D 0xffffffffU, + .flags =3D HOST_ITS_WORKAROUND_NC_NS | + HOST_ITS_WORKAROUND_32BIT_ADDR, }, { /* Sentinel. */ } }; =20 -static struct its_quirk* gicv3_its_find_quirk(uint32_t iidr) +static const struct its_quirk *gicv3_its_find_quirk(uint32_t iidr) { - const struct its_quirk *quirks =3D its_quirks; + const struct its_quirk *quirk =3D its_quirks; =20 - for ( ; quirks->desc; quirks++ ) + for ( ; quirk->desc; quirk++ ) { - if ( quirks->iidr =3D=3D (quirks->mask & iidr) ) - return (struct its_quirk *)quirks; + if ( quirk->iidr !=3D (quirk->mask & iidr) ) + continue; + + return quirk; } =20 return NULL; } =20 -static void gicv3_its_enable_quirks(struct host_its *hw_its) +static uint32_t gicv3_its_collect_quirks(const struct host_its *hw_its, + const struct its_quirk **matched_= quirk) { + const struct its_quirk *quirk; + uint32_t flags =3D 0; uint32_t iidr =3D readl_relaxed(hw_its->its_base + GITS_IIDR); - const struct its_quirk *quirk =3D gicv3_its_find_quirk(iidr); =20 - if ( quirk && quirk->init(hw_its) ) + quirk =3D gicv3_its_find_quirk(iidr); + if ( quirk ) + flags |=3D quirk->flags; + + if ( hw_its->dt_node && + dt_property_read_bool(hw_its->dt_node, "dma-noncoherent") ) + flags |=3D HOST_ITS_WORKAROUND_NC_NS; + + if ( matched_quirk ) + *matched_quirk =3D quirk; + + return flags; +} + +static void gicv3_its_enable_quirks(struct host_its *hw_its) +{ + const struct its_quirk *quirk; + + its_quirk_flags =3D gicv3_its_collect_quirks(hw_its, &quirk); + + if ( quirk ) printk("GICv3: enabling workaround for ITS: %s\n", quirk->desc); } =20 static void gicv3_its_validate_quirks(void) { - const struct its_quirk *quirk =3D NULL, *prev =3D NULL; + uint32_t quirks, prev_quirks; const struct host_its *hw_its; =20 if ( list_empty(&host_its_list) ) return; =20 hw_its =3D list_first_entry(&host_its_list, struct host_its, entry); - prev =3D gicv3_its_find_quirk(readl_relaxed(hw_its->its_base + GITS_II= DR)); + prev_quirks =3D gicv3_its_collect_quirks(hw_its, NULL); =20 - list_for_each_entry(hw_its, &host_its_list, entry) + list_for_each_entry_continue(hw_its, &host_its_list, entry) { - quirk =3D gicv3_its_find_quirk(readl_relaxed(hw_its->its_base + GI= TS_IIDR)); - BUG_ON(quirk !=3D prev); - prev =3D quirk; + quirks =3D gicv3_its_collect_quirks(hw_its, NULL); + BUG_ON(quirks !=3D prev_quirks); } } =20 --=20 2.43.0 From nobody Fri Apr 3 01:26:02 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1774435285; cv=none; d=zohomail.com; s=zohoarc; b=ZBFesnkTj/HCyDbdZugWtNdKpcGMerAwHNmZyAfdnt1SdmXi4+XPr51WKwSeZm0WWwlMHi+rzadaHr6bU5deYSL4g0qulKprCUAUgd2lB3iIA+aoLZiq2su84SsZVKI7sK4a0WlPMA0xPW4RtaPD4QibQOZGzUMdCRtMpNII810= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774435285; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CikO432tEUr8bFn5h+cx0SZD0cYZGcKrs8DBIckuAUw=; b=npnkWkwFuN8JU/smf6fGlVEGjGf6pbfi7QfsgwQxkzALWwkuO2qB5Q/9hV3c873iYEI4OxWsu/VSGucBpUzmbUp87mFfUQJFLul0Aza74wQrU7hjp5QUUssr6vFiYgRjHnZAeNLOAXco+huA3kFFgO4/ePhkORFQGn6EYmSKtNk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774435285918524.3032167635026; Wed, 25 Mar 2026 03:41:25 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261931.1554664 (Exim 4.92) (envelope-from ) id 1w5Lff-0005fH-UY; Wed, 25 Mar 2026 10:41:07 +0000 Received: by outflank-mailman (output) from mailman id 1261931.1554664; Wed, 25 Mar 2026 10:41:07 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Lff-0005f7-R0; Wed, 25 Mar 2026 10:41:07 +0000 Received: by outflank-mailman (input) for mailman id 1261931; Wed, 25 Mar 2026 10:41:06 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Lfe-0005SP-Sq for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 10:41:06 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w5Lfc-00CE42-N8 for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 11:41:06 +0100 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c3bbb7-5cb7-0a2a0a5109dd-0a2a4501c0c6-22 for ; Wed, 25 Mar 2026 11:41:06 +0100 Received: from [209.85.208.53] (helo=mail-ed1-f53.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c3bbc2-6400-0a2a45010019-d155d035c405-3 for ; Wed, 25 Mar 2026 11:41:06 +0100 Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-667de793310so4106970a12.0 for ; Wed, 25 Mar 2026 03:41:06 -0700 (PDT) Received: from EPUAKYIW02F7.. ([45.12.25.73]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b9832f8be14sm798491866b.17.2026.03.25.03.41.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 03:41:04 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774435265; x=1775040065; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CikO432tEUr8bFn5h+cx0SZD0cYZGcKrs8DBIckuAUw=; b=Ox2knnDiceog+aUcmcN1wGAS7FWppjuBH4ATtPiVz1+cftsBSZiivqwebKm9dj8hZ5 eN0gtlda9SAJU0VTbl+3IY7Xu+DmwCTkF4WraGbKqn6UA1qwvLwvNcanRR/ccqOAe9Cw pWS2aFGaL0DqviBgcAFJIcmXokxjAYrgeMG6b9dA+N8PkxiUZpkJYqu9H1yTOfGMLrkN oMYug/Ptde0k0HYKprrAu5lDAh6dIy09HstRvrpIJ79aptFEf49nORf3cqd8edqGPnb/ Rkn00+PMwQ6u2cibQ9EE/TL+DhgxEE+4c2lrxsT0rIGw5ExxITsWr3gWwVdUzBwl/X6N sQGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774435265; x=1775040065; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=CikO432tEUr8bFn5h+cx0SZD0cYZGcKrs8DBIckuAUw=; b=siSna0PFoZGIyBOilBs8UvRH6Pa+TzO/634SdUtqXC3zgF//VgtoP+Y2vnSSERD4KC ld1lgfr0/urCrVl4iUyJ6GhP6nDrdnL1QXhZWQsOfpJ4/ObroU7RErIVBlQiVEKaulTV A6oV1tn4U2y3nk8GQk+iBg9v0Vs1P/l7lS+oHLgmHqbGkjmKcFLe7BqgN9lcsEqWdvIj X8Gl3vwjIyFUr+qpi6lf8h8SjvLwoTn8R8QqfoHJ4dy4CcHTYnB/FWZylHAL3dGjTklB V5rr/5TK3sA0fxmu0W99Xge0DvD4JIIvenXgZQcPmNntBNlbbuk2RFIEG0C/9yoksIzD lmmQ== X-Gm-Message-State: AOJu0YyvI9SaBEmL8W0zrPjQ4TaLjEMCb2whsgkYJHZE8LscIpX8cyhS AvETbLVT76rtti7uQWxNZTVcQbd/rNa0Qk01TRaHZ9SqZ3Y9a6No00EJKY6jxQ== X-Gm-Gg: ATEYQzwcsch9fOf9t64vB3+QJD7gbphPdp4jPgOf5XQndoguolajMvrm4+VbvdkzFbV z4lDyIy7L4PsGsiQkUCvpTcesiUMBSXRTKYzR5reWRrL8jHPhVd4NkchvjpVg5pY/P+Q0+NiFAL qJGNXSQHOH6aHWG4d1N71MD5zuidCcWMqy3LH0zZqgAoNmhYO2R2aDvXvBKHR/TnZOEN1fPsSas gACor6ByAMhclMOD2wLbRUaz4rgLRSU7DX0sZE42/JB1vQKYlR0OdxCBicE43IO8Uqhs7RrGZbU ps2dBt9gDC30eLixHZgpPdAwaRv42kBTaWf3XxWWf1uMnQUbGjy0h1n/Co/F5Nz0/vpHWto8fkc QwtEJIJA5KlWKI7pMToz/h9vdd2Xrdm7QtMEuSNEbbeVD/2zrjbW0qjyiZ3HlxXyo3xT1Zc3L86 J5ZWVL1mfKGqlRgDc1gekQBTbRVQ== X-Received: by 2002:a17:907:9626:b0:b9b:e5d:71db with SMTP id a640c23a62f3a-b9b0e5d86c4mr157328866b.46.1774435265134; Wed, 25 Mar 2026 03:41:05 -0700 (PDT) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH 2/4] xen/arm: its: add platform match callback for ITS quirks Date: Wed, 25 Mar 2026 12:38:31 +0200 Message-ID: <10da5cf38dded9c3373c4b0ba54d7f7a7b2fd98f.1774431311.git.mykola_kvach@epam.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-d62444/1774435266-21CFBDF3-3AE12AE1/0/0 X-purgate-type: clean X-purgate-size: 2594 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1774435287383158500 Content-Type: text/plain; charset="utf-8" From: Mykola Kvach Extend ITS quirk lookup with an optional match callback so that platforms sharing the same IIDR can still be distinguished. Use the board compatible string to positively identify Renesas R-Car Gen4 before applying ITS workaround flags, preventing false matches on other SoCs that happen to use the same GIC IP block. Signed-off-by: Mykola Kvach --- xen/arch/arm/gic-v3-its.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index 00524b43a3..c40629731f 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -57,6 +57,7 @@ struct its_device { */ struct its_quirk { const char *desc; + bool (*match)(const struct host_its *hw_its); uint32_t iidr; uint32_t mask; uint32_t flags; @@ -64,11 +65,24 @@ struct its_quirk { =20 static uint32_t __ro_after_init its_quirk_flags; =20 +static bool gicv3_its_match_quirk_gen4(const struct host_its *hw_its) +{ + if ( !hw_its->dt_node ) + return false; + + if ( !dt_machine_is_compatible("renesas,r8a779f0") && + !dt_machine_is_compatible("renesas,r8a779g0") ) + return false; + + return true; +} + static const struct its_quirk its_quirks[] =3D { { .desc =3D "R-Car Gen4", .iidr =3D 0x0201743b, .mask =3D 0xffffffffU, + .match =3D gicv3_its_match_quirk_gen4, .flags =3D HOST_ITS_WORKAROUND_NC_NS | HOST_ITS_WORKAROUND_32BIT_ADDR, }, @@ -77,7 +91,8 @@ static const struct its_quirk its_quirks[] =3D { } }; =20 -static const struct its_quirk *gicv3_its_find_quirk(uint32_t iidr) +static const struct its_quirk *gicv3_its_find_quirk( + const struct host_its *hw_its, uint32_t iidr) { const struct its_quirk *quirk =3D its_quirks; =20 @@ -86,7 +101,8 @@ static const struct its_quirk *gicv3_its_find_quirk(uint= 32_t iidr) if ( quirk->iidr !=3D (quirk->mask & iidr) ) continue; =20 - return quirk; + if ( !quirk->match || quirk->match(hw_its) ) + return quirk; } =20 return NULL; @@ -99,7 +115,7 @@ static uint32_t gicv3_its_collect_quirks(const struct ho= st_its *hw_its, uint32_t flags =3D 0; uint32_t iidr =3D readl_relaxed(hw_its->its_base + GITS_IIDR); =20 - quirk =3D gicv3_its_find_quirk(iidr); + quirk =3D gicv3_its_find_quirk(hw_its, iidr); if ( quirk ) flags |=3D quirk->flags; =20 --=20 2.43.0 From nobody Fri Apr 3 01:26:02 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1774435286; cv=none; d=zohomail.com; s=zohoarc; b=ShegxkxUVCvOzvvtN6KbNLIdM3wWJx1rC6rkv9r7ms/g1bDznE9nVPEMsY5R5a6X6yUdcErLWM4UdufUEDiiMFGQ+n7KooiDcPT9mv6fO3ZnSFnESFqwbTSE8X9N7aynTLNixiR1WiTkLNDHWqQ369jSFHEcVTP/fdGQGRb6Nd0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774435286; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/rT8SR9SDzTxBQqKsvJCI0AzqlhVbVITm6mf7ezqebE=; b=Rba1wy1n5OrjRfRVowbTR1qH018S4FHDOFBf7HgqJ7FInbQhYY9RAD5OF3tC3+0xwRKs0h59LJeDbcIou5IY6hAuMESTWH8SCPrplowyXmhJO7pPZwMEfD1Ip4SyBjRgyNMhfnljt/bZgBGt29+6PIQRzKborLSbn+nzkCRd48E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774435286933557.1175939311214; Wed, 25 Mar 2026 03:41:26 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261932.1554674 (Exim 4.92) (envelope-from ) id 1w5Lfh-0005tp-7l; Wed, 25 Mar 2026 10:41:09 +0000 Received: by outflank-mailman (output) from mailman id 1261932.1554674; Wed, 25 Mar 2026 10:41:09 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Lfh-0005th-25; Wed, 25 Mar 2026 10:41:09 +0000 Received: by outflank-mailman (input) for mailman id 1261932; Wed, 25 Mar 2026 10:41:08 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Lff-0005f1-Vc for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 10:41:07 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w5Lfd-00CE42-Q5 for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 11:41:07 +0100 Received: from [10.42.69.4] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c3bbbf-5cb7-0a2a0a5109dd-0a2a4504cc78-22 for ; Wed, 25 Mar 2026 11:41:07 +0100 Received: from [209.85.218.50] (helo=mail-ej1-f50.google.com) by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c3bbc3-c823-0a2a45040019-d155da32e8ff-3 for ; Wed, 25 Mar 2026 11:41:07 +0100 Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-b79f8f7ea43so385276566b.2 for ; Wed, 25 Mar 2026 03:41:07 -0700 (PDT) Received: from EPUAKYIW02F7.. ([45.12.25.73]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b9832f8be14sm798491866b.17.2026.03.25.03.41.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 03:41:05 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774435266; x=1775040066; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/rT8SR9SDzTxBQqKsvJCI0AzqlhVbVITm6mf7ezqebE=; b=j8uoYdFrUM1GvMC6l6T8lF5CrziORcBStp6HpiG4uvPPUYbwrAVKzup3nWP5xiDp8/ iR82VW1vkkyUlwxi2DCXTu7AtTGcyggzWV+g/H/jTEHj1UinS8BOwCAMLV9dUFDmvNHq 7lpnkQ8XnvH/JSlPz1Qb1r38CCQpvGhg1UFRpbgk/0CkltJiw9LFT5gSuZGfk6yaM08W U2b19y6mXW5zl2NSzbuAMAGeBgCjy0AvGGCb43oobzL1U+Fn3NQboooGLz49qi0XBLsW 0f2JQKYj+SbwP4+iXK97GQy2TDO17GdNFxR1icuuCQeOyFShHGLfq9ci1B6BBB9SLvzn kizw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774435266; x=1775040066; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=/rT8SR9SDzTxBQqKsvJCI0AzqlhVbVITm6mf7ezqebE=; b=FySeze+Zz1nQF/Jxoxy2oitlgSyY/3GmX7nYBf8M9SFnx8hqC8vQqcRS3fVX4Az7vD a5sXDBojq6HDbn7eBKwr7JgZWz2XalcIQpqZFPlEPv2lLsEwCe5dDyBB+PRKUAK5fmmB dKv8XgDIdEplo9cMSjML+bmeuO/KY/d/YVUYs6t9GmR7RTKBoeipdf8txqZYL5oGhhzM n9wOPX9VbuO2Ri8I49nuQ789n2MB2xrdi418f0a3cO1PDJJVtX1k4YbNWhcvYGap/cON hCaT5/gI4syh337MVL/mkmoZ1muy04PR+7FWY0SoMhuoKXLGFsEzyuEDVkKW2bTR3VxW DJiw== X-Gm-Message-State: AOJu0Yx0o1Pjy46iE7AnXHfEqrBEMU0j9lcH5TZyjlWcJ9wZz6XV8VNA EXKZyRYaNP5HC6a4c3E6FDfYSJVw8AOYGq1eeCo20PqQ4OfUd5RGV3fGyREYXA== X-Gm-Gg: ATEYQzyLZC4dZU7Q1TZUyEhlnU40iSPaP8Va6SKUs6mjxWUWieaZu7c0EConlhVVi+I 8n5TKvcreSACPMcIQZk4WwOVjq19a3EQLId3K89SS/3xKBCUg81hePLQL9gEY/dHiY5DL5PDkkn jSJYyhubZJW0RgNNc6BR5xmQxQoxR1pXI+XvNEzURMnGknrOIPZASofOZwJB5KBrWkSGbckR9Zb G5kf3MLjjEv6pjQrlKmIpUUIfHmj9IpYY41T0XoTQaScvVDdokHtWynOXN0Dc+q4/g61ogiCeqP 1e0KaYTJft+dPlglQyWOwZEyX1rmpufN5vDMB2ycsbrVUF38TvWuGaEoSMsseoZDVTvwkZMRI6L ZaFdJGxLnJ95nKVkKfMbVWajoN3DuPLjMkCkbX40JeqsYuHGA+L2xZX00JAL5R4tLKlD++H8kvA FmGotv9ZGNygRp+25lDt4H8qwrhQ== X-Received: by 2002:a17:906:af50:b0:b98:6926:13a5 with SMTP id a640c23a62f3a-b9a54241c2cmr156309266b.46.1774435266342; Wed, 25 Mar 2026 03:41:06 -0700 (PDT) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH 3/4] xen/arm: its: add Orange Pi 5 ITS quirk Date: Wed, 25 Mar 2026 12:38:32 +0200 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-ebf023/1774435267-B38979D1-2A4B2AD9/0/0 X-purgate-type: clean X-purgate-size: 1450 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1774435287399158500 Content-Type: text/plain; charset="utf-8" From: Mykola Kvach Add an ITS quirk entry for Orange Pi 5 boards based on Rockchip RK3588/RK3588S and match it via the platform compatible string. Signed-off-by: Mykola Kvach --- xen/arch/arm/gic-v3-its.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index c40629731f..ee432088cd 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -77,6 +77,18 @@ static bool gicv3_its_match_quirk_gen4(const struct host= _its *hw_its) return true; } =20 +static bool gicv3_its_match_quirk_opi5(const struct host_its *hw_its) +{ + if ( !hw_its->dt_node ) + return false; + + if ( !dt_machine_is_compatible("rockchip,rk3588") && + !dt_machine_is_compatible("rockchip,rk3588s") ) + return false; + + return true; +} + static const struct its_quirk its_quirks[] =3D { { .desc =3D "R-Car Gen4", @@ -86,6 +98,13 @@ static const struct its_quirk its_quirks[] =3D { .flags =3D HOST_ITS_WORKAROUND_NC_NS | HOST_ITS_WORKAROUND_32BIT_ADDR, }, + { + .desc =3D "Orange Pi 5", + .iidr =3D 0x0201743b, + .mask =3D 0xffffffffU, + .match =3D gicv3_its_match_quirk_opi5, + .flags =3D HOST_ITS_WORKAROUND_32BIT_ADDR, + }, { /* Sentinel. */ } --=20 2.43.0 From nobody Fri Apr 3 01:26:02 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1774435292; cv=none; d=zohomail.com; s=zohoarc; b=Mfjxu9/OVXUSUwD2oLailUAbIXzyd89m4xaF/deHHtuXuqcOErWpymjHOJcmw4ndU0oPDb9z3RMq3it/HmUkOQLERw81g6IholGUyEK27bbluFxtcCPXqJkjkmdThi4DMbq4HELS9h5UFYeCZw3BraOhRLaGI4lULcX6PoBgSQ8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774435292; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zwKk50IewHoX8VCImGLVtNk1nwW7tGvQB6wa4lfiyaM=; b=JeFsWCXXPM4IbQ1YYbipoduKTm7WASkJvHRPK7FKmoSO8m0QNTHXNNcB+oKF0OAXJiEfhrzUltUwdjAcBcIVXLpbEsbAGR5p8TGmA6m7vfmYwOVeU80xhEFlz304dlc9BFr6e92VixKF0i8XiNfscGRNXQ4hmwDVRsykM/tzQVo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774435292983407.67484790418905; Wed, 25 Mar 2026 03:41:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261933.1554682 (Exim 4.92) (envelope-from ) id 1w5Lfj-0006AI-DJ; Wed, 25 Mar 2026 10:41:11 +0000 Received: by outflank-mailman (output) from mailman id 1261933.1554682; Wed, 25 Mar 2026 10:41:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Lfj-0006A3-AC; Wed, 25 Mar 2026 10:41:11 +0000 Received: by outflank-mailman (input) for mailman id 1261933; Wed, 25 Mar 2026 10:41:09 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w5Lfh-0005su-5e for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 10:41:09 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w5Lff-00CE42-01 for xen-devel@lists.xenproject.org; Wed, 25 Mar 2026 11:41:08 +0100 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c3bbb7-5cb7-0a2a0a5109dd-0a2a4501c0c6-34 for ; Wed, 25 Mar 2026 11:41:08 +0100 Received: from [209.85.208.50] (helo=mail-ed1-f50.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c3bbc4-6400-0a2a45010019-d155d032e9c6-3 for ; Wed, 25 Mar 2026 11:41:08 +0100 Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-6694d00e01bso4273583a12.3 for ; Wed, 25 Mar 2026 03:41:08 -0700 (PDT) Received: from EPUAKYIW02F7.. ([45.12.25.73]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b9832f8be14sm798491866b.17.2026.03.25.03.41.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 03:41:06 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774435268; x=1775040068; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zwKk50IewHoX8VCImGLVtNk1nwW7tGvQB6wa4lfiyaM=; b=mTCLEEm/Y9vnXShW9+VAZwyP8SIN7HM8T+43eVxwQLTqFnbcCk9TNPgkrijtxpM1VT 9Epkleh+80OwsnLSGAN/cq8pYU2wxg1LbOFEbWLVAddNaRBRBykGAYjOtGUM6jN1qJUo OdxpQDaCWjRXBtB9gdV8ltgkcSAcouvqr20jOFa08CWnwr+KrT+QzNcTqblfrRh5JMlT hygnd0HUg9JUTSC4XecwH/3Ar/ypEFvcRy1QSASRTw6dL55J5PrDUNhdApfJzNSG5uKl WAzfFlZBDipXO85UDOGSgS598/aTAnqHxOaH5n/6bzO2goTJ6o+uX9/LLK1fclgFfsrS 2OPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774435268; x=1775040068; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=zwKk50IewHoX8VCImGLVtNk1nwW7tGvQB6wa4lfiyaM=; b=FJjtF6cksaRJme40sOCa5O+Gl+IhvkYoCpRh8zCjhDf2X1D/Es+k8uEpFbB0cOn8rI cz0YLWdTu0L9D147MGyxm5U1eTOdT/4wcYIckIYNqoaazUqBbEq1jzfboMl2RbFRO6jr av1zcHhuIPV/X73N4K0nLTueQfDdtfRmkx9lGq5YEsXHgEpL3KALfxSK2QUBSheq1anQ 01Yt2MTEqdy2nKRHDajM93qERT3/O15fpyTrFJ9OXZN2m9Wo2LEm+1qIbi1gjBR0eijB ewoK6VJMh+gb4DQKEwo6WRWA43G9KWruwzPYYw+1PLfGPOc4My5WrTjb4+ylf3NK6I+5 ML8A== X-Gm-Message-State: AOJu0YzDqQ4F4fNkM86bsZODFz1h7/yNpI/wMW+p/tyKrn6sl9mEeB86 /3A1pWjyNgFj1MozVjs9QEWkiUw/S6owMTGMPoS/NeNzgVaNTOMH8vNyc2nO9w== X-Gm-Gg: ATEYQzyGBBiW9Ve7AHsISZdoK7OyFaeZbQMbqI+cODv6l66VxyDsguAe9SHOvJxRG9Q bC1/tGyDQ5r8ewL3KykMnG17euVX3BCyO1KaYNN/IURMad/Yx61JhCWYUkJXBvV2zxS6EKitZa3 qtSLK0TUmszReH3IK4S+Ul41/Exn35Gi1KO5YT1YsxPZGhWSTsjEwZ21PNR+K5SsSjUKVbToHbe MGCdRGMuU1lKMeDaMm5WFnkwWUMWRFkFN9ZHnB2vyvNpJGjXc4xyQEy5Lfn3wEywVPMLixfBDdf rywOpa511OLECI4PePcvtMuwJKy2rfUXP+eYmZ6hDVGdlOxZiwBWbegQ0e+dprKWcYUTI4oo8GS g8OURhDlmLnAp5HXYxVaSEODzWA0SBGMnM0T7GhsnLcOd7mxh8dHRRAoEJzMmfqIM/t7hV8WJIe e1hrtOD1n+por0/yslGDWd5Vtd7Q== X-Received: by 2002:a17:906:f59c:b0:b98:1b:5157 with SMTP id a640c23a62f3a-b9a3f1a54d5mr196571266b.23.1774435267531; Wed, 25 Mar 2026 03:41:07 -0700 (PDT) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH 4/4] xen/arm: its: pre-initialize ITS quirks before LPI setup Date: Wed, 25 Mar 2026 12:38:33 +0200 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-d62444/1774435268-20CF3DF3-1B90C5EA/0/0 X-purgate-type: clean X-purgate-size: 5396 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1774435293550158500 Content-Type: text/plain; charset="utf-8" From: Mykola Kvach In the current initialization flow, gicv3_init() calls gicv3_dist_init() before gicv3_its_init(). When LPIs are supported, gicv3_dist_init() calls gicv3_lpi_init_host_lpis(), which initializes host LPI state and allocates the boot CPU pending table before ITS quirk flags are computed. Non-boot CPUs allocate their pending tables later from the CPU_UP_PREPARE notifier, while redistributor LPI programming happens separately in gicv3_lpi_init_rdist(). This means the boot CPU LPI setup can observe default ITS memory attributes before dma-noncoherent and other ITS quirks are applied. Introduce gicv3_its_preinit() and call it before gicv3_dist_init(). This keeps the actual ITS hardware initialization in gicv3_its_init(), but moves ITS discovery, quirk validation and quirk flag setup early enough for the subsequent LPI initialization to use the correct attributes. Signed-off-by: Mykola Kvach --- TODO: Think about separating Redistributor/LPI attributes from ITS. --- xen/arch/arm/gic-v3-its.c | 36 +++++++++++++++++---------- xen/arch/arm/gic-v3.c | 7 ++++++ xen/arch/arm/include/asm/gic_v3_its.h | 5 ++++ 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index ee432088cd..0251d91630 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -63,6 +63,7 @@ struct its_quirk { uint32_t flags; }; =20 +/* TODO: Separate Redistributor/LPI attributes from ITS quirks. */ static uint32_t __ro_after_init its_quirk_flags; =20 static bool gicv3_its_match_quirk_gen4(const struct host_its *hw_its) @@ -148,9 +149,15 @@ static uint32_t gicv3_its_collect_quirks(const struct = host_its *hw_its, return flags; } =20 -static void gicv3_its_enable_quirks(struct host_its *hw_its) +static void gicv3_its_enable_quirks(void) { const struct its_quirk *quirk; + const struct host_its *hw_its; + + if ( list_empty(&host_its_list) ) + return; + + hw_its =3D list_first_entry(&host_its_list, struct host_its, entry); =20 its_quirk_flags =3D gicv3_its_collect_quirks(hw_its, &quirk); =20 @@ -603,16 +610,10 @@ static int gicv3_its_init_single_its(struct host_its = *hw_its) uint64_t reg; int i, ret; =20 - hw_its->its_base =3D ioremap_nocache(hw_its->addr, hw_its->size); - if ( !hw_its->its_base ) - return -ENOMEM; - ret =3D gicv3_disable_its(hw_its); if ( ret ) return ret; =20 - gicv3_its_enable_quirks(hw_its); - reg =3D readq_relaxed(hw_its->its_base + GITS_TYPER); hw_its->devid_bits =3D GITS_TYPER_DEVICE_ID_BITS(reg); hw_its->evid_bits =3D GITS_TYPER_EVENT_ID_BITS(reg); @@ -1161,6 +1162,11 @@ static void add_to_host_its_list(paddr_t addr, paddr= _t size, its_data->size =3D size; its_data->dt_node =3D node; =20 + its_data->its_base =3D ioremap_nocache(its_data->addr, its_data->size); + if ( !its_data->its_base ) + panic("GICv3: Cannot map ITS frame: 0x%lx, 0x%lx\n", + its_data->addr, its_data->size); + printk("GICv3: Found ITS @0x%lx\n", addr); =20 list_add_tail(&its_data->entry, &host_its_list); @@ -1238,16 +1244,22 @@ static void gicv3_its_acpi_init(void) =20 #endif =20 -int gicv3_its_init(void) +void __init gicv3_its_preinit(void) { - struct host_its *hw_its; - int ret; - if ( acpi_disabled ) gicv3_its_dt_init(dt_interrupt_controller); else gicv3_its_acpi_init(); =20 + gicv3_its_validate_quirks(); + gicv3_its_enable_quirks(); +} + +int gicv3_its_init(void) +{ + struct host_its *hw_its; + int ret; + list_for_each_entry(hw_its, &host_its_list, entry) { ret =3D gicv3_its_init_single_its(hw_its); @@ -1255,8 +1267,6 @@ int gicv3_its_init(void) return ret; } =20 - gicv3_its_validate_quirks(); - return 0; } =20 diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index bc07f97c16..6e44d23d64 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -1974,6 +1974,13 @@ static int __init gicv3_init(void) =20 spin_lock(&gicv3.lock); =20 + if ( gic_dist_supports_lpis() ) + /* + * Apply ITS quirks before gicv3_dist_init() sets up host LPIs, + * so pending tables use the correct ITS memory attributes. + */ + gicv3_its_preinit(); + gicv3_dist_init(); =20 if ( gic_dist_supports_lpis() ) diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index fc5a84892c..e1d7522ea5 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -156,6 +156,7 @@ int gicv3_lpi_init_rdist(void __iomem * rdist_base); =20 /* Initialize the host structures for LPIs and the host ITSes. */ int gicv3_lpi_init_host_lpis(unsigned int host_lpi_bits); +void gicv3_its_preinit(void); int gicv3_its_init(void); =20 /* Store the physical address and ID for each redistributor as read from D= T. */ @@ -219,6 +220,10 @@ static inline int gicv3_its_deny_access(struct domain = *d) return 0; } =20 +static inline void gicv3_its_preinit(void) +{ +} + static inline bool gicv3_its_host_has_its(void) { return false; --=20 2.43.0