[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/4] xen/arm: its: add platform match callback for ITS quirks


  • To: Mykola Kvach <xakep.amatop@xxxxxxxxx>
  • From: Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Date: Wed, 25 Mar 2026 14:45:20 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=TbEni8vswSWmayvLOdrlJNVIlOh1EX8ez+dkbyHhEdg=; b=zS+ABbGfImc4KJvswhvkNQqpCrW0XN20EOxSL37X/H5efVz7taSfk1c1ePxKrFCBPMLkqH/kwMgT6FCv+opi5ukNdHMgLn2FODETCpbGcnNRfVOceR1nuDoDRchCoMHmnFdpk2gP2mAjmKypxsMyVa2YNluojP2to7qPyv2DqJ3JFDTYrH0NjjwR4iUGCKhbj+zOdIeU8XM4s1wi3M1PfSYDGhzRJ0OlXvZ43Mfae0PfT5QSS/TXx7jY3hyCqi7EkMbRID/5mPD6idPD62LHEjAAWKf3TJq/LnwJfXxnQqFI98pRYhbMeX6/cRiS1X4XKQZMOlvuv7T6pBKOVPk4xw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O04MiYQlHz/LvWGjIBc8OitlXkgP1YlsQRUCfZnmDkMs8qEmULLzj4XCyvtr6Smpu/NCB3QK72anIUVGbWRiwi/Ki1YdH6MGVFbAEO2AynLeL/aUjvLdjMGVnAmm2dNXbjQtuvbtgs7TJINvlUbwy42Xyu//LemlwrC/alPkbaQrldoBxXPryKuopRsxXveBz/eMS+CYt+DviRdKQWJGo7epEv+tjdzfR5jTCZ3Uuo1bRJCLzgiJ0NtCz37YTbzoyiFGRStzt+7XyFrJGAviMFEW9hz+whnVwxiZyHzqfcFjDCj7CR1p86mPLYxDhBLb8P85yByBlfnRq1z3nMRjhA==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Mykola Kvach <Mykola_Kvach@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>
  • Delivery-date: Wed, 25 Mar 2026 14:45:28 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHcvEPkvPnBPPoH7U6Wnzsnt2hLeg==
  • Thread-topic: [PATCH 2/4] xen/arm: its: add platform match callback for ITS quirks

Hi Mykola,

Mykola Kvach <xakep.amatop@xxxxxxxxx> writes:

> From: Mykola Kvach <mykola_kvach@xxxxxxxx>
>
> 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 <mykola_kvach@xxxxxxxx>
> ---
>  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);

If you are introducing match predicate, then why do you need...

>      uint32_t iidr;
>      uint32_t mask;
>      uint32_t flags;

these? You can use a predicate function to match against iidr

> @@ -64,11 +65,24 @@ struct its_quirk {
>  
>  static uint32_t __ro_after_init its_quirk_flags;
>  
> +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[] = {
>      {
>          .desc  = "R-Car Gen4",
>          .iidr  = 0x0201743b,
>          .mask  = 0xffffffffU,
> +        .match = gicv3_its_match_quirk_gen4,
>          .flags = HOST_ITS_WORKAROUND_NC_NS |
>                   HOST_ITS_WORKAROUND_32BIT_ADDR,
>      },
> @@ -77,7 +91,8 @@ static const struct its_quirk its_quirks[] = {
>      }
>  };
>  
> -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 = its_quirks;
>  
> @@ -86,7 +101,8 @@ static const struct its_quirk 
> *gicv3_its_find_quirk(uint32_t iidr)
>          if ( quirk->iidr != (quirk->mask & iidr) )
>              continue;
>  
> -        return quirk;
> +        if ( !quirk->match || quirk->match(hw_its) )
> +            return quirk;
>      }
>  
>      return NULL;
> @@ -99,7 +115,7 @@ static uint32_t gicv3_its_collect_quirks(const struct 
> host_its *hw_its,
>      uint32_t flags = 0;
>      uint32_t iidr = readl_relaxed(hw_its->its_base + GITS_IIDR);
>  
> -    quirk = gicv3_its_find_quirk(iidr);
> +    quirk = gicv3_its_find_quirk(hw_its, iidr);
>      if ( quirk )
>          flags |= quirk->flags;

-- 
WBR, Volodymyr


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.