From: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
To: Mykola Kvach <xakep.amatop@gmail.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
Mykola Kvach <Mykola_Kvach@epam.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Julien Grall <julien@xen.org>,
Bertrand Marquis <bertrand.marquis@arm.com>,
Michal Orzel <michal.orzel@amd.com>
Subject: Re: [PATCH 2/4] xen/arm: its: add platform match callback for ITS quirks
Date: Wed, 25 Mar 2026 14:45:20 +0000 [thread overview]
Message-ID: <87341ovugw.fsf@epam.com> (raw)
In-Reply-To: <10da5cf38dded9c3373c4b0ba54d7f7a7b2fd98f.1774431311.git.mykola_kvach@epam.com> (Mykola Kvach's message of "Wed, 25 Mar 2026 12:38:31 +0200")
Hi Mykola,
Mykola Kvach <xakep.amatop@gmail.com> writes:
> From: Mykola Kvach <mykola_kvach@epam.com>
>
> 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@epam.com>
> ---
> 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
next prev parent reply other threads:[~2026-03-25 14:45 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-25 10:38 [PATCH 0/4] xen/arm: ITS quirk handling fixes and board-specific matches Mykola Kvach
2026-03-25 10:38 ` [PATCH 1/4] xen/arm: its: collect quirk flags and honor dma-noncoherent Mykola Kvach
2026-03-25 14:42 ` Volodymyr Babchuk
2026-03-25 15:47 ` Mykola Kvach
2026-03-30 23:44 ` Volodymyr Babchuk
2026-04-28 18:42 ` Oleksandr Tyshchenko
2026-05-04 5:42 ` Mykola Kvach
2026-03-25 10:38 ` [PATCH 2/4] xen/arm: its: add platform match callback for ITS quirks Mykola Kvach
2026-03-25 14:45 ` Volodymyr Babchuk [this message]
2026-03-25 16:34 ` Mykola Kvach
2026-03-31 0:26 ` Volodymyr Babchuk
2026-03-31 8:15 ` Mykola Kvach
2026-04-02 16:50 ` Volodymyr Babchuk
2026-03-25 10:38 ` [PATCH 3/4] xen/arm: its: add Orange Pi 5 ITS quirk Mykola Kvach
2026-03-25 10:38 ` [PATCH 4/4] xen/arm: its: pre-initialize ITS quirks before LPI setup Mykola Kvach
2026-04-02 17:02 ` Volodymyr Babchuk
2026-04-28 16:31 ` Oleksandr Tyshchenko
2026-05-04 6:33 ` Mykola Kvach
2026-04-28 12:25 ` Ping: Re: [PATCH 0/4] xen/arm: ITS quirk handling fixes and board-specific matches Mykola Kvach
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87341ovugw.fsf@epam.com \
--to=volodymyr_babchuk@epam.com \
--cc=Mykola_Kvach@epam.com \
--cc=bertrand.marquis@arm.com \
--cc=julien@xen.org \
--cc=michal.orzel@amd.com \
--cc=sstabellini@kernel.org \
--cc=xakep.amatop@gmail.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.