linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: Dragan Simic <dsimic@manjaro.org>
Cc: linux-rockchip@lists.infradead.org, heiko@sntech.de,
	tglx@linutronix.de, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
	robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org,
	FUKAUMI Naoki <naoki@radxa.com>
Subject: Re: [PATCH 2/2] irqchip/gic-v3-its: Make "dma-noncoherent" preferred for RK358x errata
Date: Fri, 27 Dec 2024 16:46:19 +0000	[thread overview]
Message-ID: <87bjwxoyzo.wl-maz@kernel.org> (raw)
In-Reply-To: <1382cd99ec213b5fb6f3b23d4e895f078f587b8f.1735313870.git.dsimic@manjaro.org>

On Fri, 27 Dec 2024 15:42:24 +0000,
Dragan Simic <dsimic@manjaro.org> wrote:
> 
> The preferred way to denote hardware with non-coherent DMA is to use the
> "dma-noncoherent" DT property, [1] instead of relying on the compatibles. [2]
> Alas, older versions of the Rockchip RK3588 and RK3588S SoC dts(i) files
> failed to specify this DT property, which means that checking the compatibles
> remains required for backward SoC dts(i) compatibility.
> 
> Let's have the Rockchip 3588001 hardware errata handled the preferred way,
> with newer versions of the Rockchip RK3588, RK3588S and RK3582 SoC dts(i)
> files that properly specify the "dma-noncoherent" DT properties at both the
> GIC redistributor and the GIC ITS levels, while falling back to checking the
> compatibles for backward RK3588 and RK3588S SoC dts(i) compatibility.
> 
> [1] Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.yaml
> [2] https://lore.kernel.org/linux-rockchip/86msgoozqa.wl-maz@kernel.org/
> 
> Cc: Marc Zyngier <maz@kernel.org>
> Cc: FUKAUMI Naoki <naoki@radxa.com>
> Signed-off-by: Dragan Simic <dsimic@manjaro.org>
> ---
>  drivers/irqchip/irq-gic-v3-its.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
> index fdec478ba5e7..982dcbb30f39 100644
> --- a/drivers/irqchip/irq-gic-v3-its.c
> +++ b/drivers/irqchip/irq-gic-v3-its.c
> @@ -4747,6 +4747,18 @@ static bool __maybe_unused its_enable_rk3588001(void *data)
>  {
>  	struct its_node *its = data;
>  
> +	/*
> +	 * The preferred way to denote hardware with non-coherent DMA is to use
> +	 * the "dma-noncoherent" DT property, which the older RK3588 SoC dts(i)
> +	 * files failed to specify, relying on the compatibles instead.
> +	 *
> +	 * Thus, check for the presence of "dma-noncoherent" DT property first,
> +	 * to let the hardware quirk be handled the preferred way, and fall back
> +	 * to checking the compatibles for backward dts(i) compatibility.
> +	 */
> +	if (!of_dma_is_coherent(to_of_node(its->fwnode_handle)))
> +		return false;
> +
>  	if (!of_machine_is_compatible("rockchip,rk3588") &&
>  	    !of_machine_is_compatible("rockchip,rk3588s"))
>  		return false;
> 

I'm sorry, but this patch serves no purpose. We already have a
workaround in place, and we don't need to handle it *twice*.

Worse, it is actively harmful. A DT that would only advertise the
property on the ITS would result in a broken system, while it would
work correctly with the current code.

Additionally, look at what of_dma_is_coherent() does, and how it will
fetch a property that is potentially completely unrelated to the GIC
node, or eventually return some random default. The binding documents
the dma-noncoherent property as part of the relevant nodes, and not
anywhere else.

In the end, this is just dead code, and potentially worse. So while
I'm rather supportive of your first patch in this series as it allows
OSs other than Linux to *maybe* avoid this hack, the Linux driver
doesn't need any change.

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.


  reply	other threads:[~2024-12-27 16:47 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-27 15:42 [PATCH 0/2] Use "dma-noncoherent" to handle Rockchip RK358x 3588001 errata Dragan Simic
2024-12-27 15:42 ` [PATCH 1/2] arm64: dts: rockchip: Use "dma-noncoherent" in base RK3588 SoC dtsi Dragan Simic
2024-12-27 16:47   ` Marc Zyngier
2024-12-27 15:42 ` [PATCH 2/2] irqchip/gic-v3-its: Make "dma-noncoherent" preferred for RK358x errata Dragan Simic
2024-12-27 16:46   ` Marc Zyngier [this message]
2024-12-27 17:08     ` Dragan Simic

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=87bjwxoyzo.wl-maz@kernel.org \
    --to=maz@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dsimic@manjaro.org \
    --cc=heiko@sntech.de \
    --cc=krzk+dt@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=naoki@radxa.com \
    --cc=robh@kernel.org \
    --cc=tglx@linutronix.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).