From: Heiko Stuebner <heiko@sntech.de>
To: Christoph Hellwig <hch@lst.de>
Cc: palmer@dabbelt.com, paul.walmsley@sifive.com,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
wefu@redhat.com, guoren@kernel.org, cmuellner@linux.com,
philipp.tomsich@vrull.eu, hch@lst.de, samuel@sholland.org,
atishp@atishpatra.org, anup@brainfault.org, mick@ics.forth.gr,
robh+dt@kernel.org, krzk+dt@kernel.org,
devicetree@vger.kernel.org, drew@beagleboard.org,
rdunlap@infradead.org, Atish Patra <atish.patra@wdc.com>
Subject: Re: [PATCH 3/4] riscv: Implement Zicbom-based cache management operations
Date: Fri, 24 Jun 2022 09:49:09 +0200 [thread overview]
Message-ID: <4357313.8hb0ThOEGa@phil> (raw)
In-Reply-To: <20220620061607.GB10485@lst.de>
Hi Christoph,
Am Montag, 20. Juni 2022, 08:16:07 CEST schrieb Christoph Hellwig:
> On Sun, Jun 19, 2022 at 10:32:11PM +0200, Heiko Stuebner wrote:
> > +#ifdef CONFIG_RISCV_DMA_NONCOHERENT
> > +#define ARCH_DMA_MINALIGN L1_CACHE_BYTES
> > +#endif
>
> This needs to be greater or equal to riscv_cbom_block_size, but the
> core code requires a compile time constant here. So we'll need a big
> fat comment here, and panic if riscv_cbom_block_size is >
> L1_CACHE_BYTES/ARCH_DMA_MINALIGN in the code that queries
> riscv_cbom_block_size.
ARM people also had this nice WARN_TAINT to warn when the similar
case happens on ARM64 and the ARCH_DMA_MINALIGN is smaller than
the register value so I've added a similar mechanism.
I've read numerous mails from Torvalds over time that panic-ing should
only ever be the very very last resort, so that WARN_TAINT looks like
a less drastic option while still generating that big warning to users.
> Note that the arm64 folks are looking into making this variable or
> killing it off in this current form, so things might be getting better
> soon.
>
> > +void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
> > + enum dma_data_direction dir)
> > +{
> > + void *vaddr = phys_to_virt(paddr);
> > +
> > + switch (dir) {
> > + case DMA_TO_DEVICE:
> > + ALT_CMO_OP(clean, vaddr, size, riscv_cbom_block_size);
> > + break;
> > + case DMA_FROM_DEVICE:
> > + ALT_CMO_OP(inval, vaddr, size, riscv_cbom_block_size);
> > + break;
>
> For this also see:
>
> https://lore.kernel.org/all/20220606152150.GA31568@willie-the-truck/
>
> and
>
> https://lore.kernel.org/linux-arm-kernel/20220610151228.4562-1-will@kernel.org/T/
so from that discussion, it looks like a "clean" should happen here to
prevent stale bytes (not written to by the dma transfer itself) in the
buffer area I guess.
I'll give that a spin :-)
> > +void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
> > + const struct iommu_ops *iommu, bool coherent)
> > +{
> > + dev->dma_coherent = coherent;
> > +}
>
> This probably wants a sanity check warn if coherent if false without
> any support for cache flushing as that will cause data corruption.
I've added a riscv_noncoherent_supported() call that will track that
"somebody" implemented non-coherence functionality from their
setup function (zicbom_probe, thead_errata-probe) and a matching
second WARN_TAINT in arch_setup_dma_ops() when coherent value
and availability of non-coherence handling is not matched.
Heiko
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Heiko Stuebner <heiko@sntech.de>
To: Christoph Hellwig <hch@lst.de>
Cc: palmer@dabbelt.com, paul.walmsley@sifive.com,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
wefu@redhat.com, guoren@kernel.org, cmuellner@linux.com,
philipp.tomsich@vrull.eu, hch@lst.de, samuel@sholland.org,
atishp@atishpatra.org, anup@brainfault.org, mick@ics.forth.gr,
robh+dt@kernel.org, krzk+dt@kernel.org,
devicetree@vger.kernel.org, drew@beagleboard.org,
rdunlap@infradead.org, Atish Patra <atish.patra@wdc.com>
Subject: Re: [PATCH 3/4] riscv: Implement Zicbom-based cache management operations
Date: Fri, 24 Jun 2022 09:49:09 +0200 [thread overview]
Message-ID: <4357313.8hb0ThOEGa@phil> (raw)
In-Reply-To: <20220620061607.GB10485@lst.de>
Hi Christoph,
Am Montag, 20. Juni 2022, 08:16:07 CEST schrieb Christoph Hellwig:
> On Sun, Jun 19, 2022 at 10:32:11PM +0200, Heiko Stuebner wrote:
> > +#ifdef CONFIG_RISCV_DMA_NONCOHERENT
> > +#define ARCH_DMA_MINALIGN L1_CACHE_BYTES
> > +#endif
>
> This needs to be greater or equal to riscv_cbom_block_size, but the
> core code requires a compile time constant here. So we'll need a big
> fat comment here, and panic if riscv_cbom_block_size is >
> L1_CACHE_BYTES/ARCH_DMA_MINALIGN in the code that queries
> riscv_cbom_block_size.
ARM people also had this nice WARN_TAINT to warn when the similar
case happens on ARM64 and the ARCH_DMA_MINALIGN is smaller than
the register value so I've added a similar mechanism.
I've read numerous mails from Torvalds over time that panic-ing should
only ever be the very very last resort, so that WARN_TAINT looks like
a less drastic option while still generating that big warning to users.
> Note that the arm64 folks are looking into making this variable or
> killing it off in this current form, so things might be getting better
> soon.
>
> > +void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
> > + enum dma_data_direction dir)
> > +{
> > + void *vaddr = phys_to_virt(paddr);
> > +
> > + switch (dir) {
> > + case DMA_TO_DEVICE:
> > + ALT_CMO_OP(clean, vaddr, size, riscv_cbom_block_size);
> > + break;
> > + case DMA_FROM_DEVICE:
> > + ALT_CMO_OP(inval, vaddr, size, riscv_cbom_block_size);
> > + break;
>
> For this also see:
>
> https://lore.kernel.org/all/20220606152150.GA31568@willie-the-truck/
>
> and
>
> https://lore.kernel.org/linux-arm-kernel/20220610151228.4562-1-will@kernel.org/T/
so from that discussion, it looks like a "clean" should happen here to
prevent stale bytes (not written to by the dma transfer itself) in the
buffer area I guess.
I'll give that a spin :-)
> > +void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
> > + const struct iommu_ops *iommu, bool coherent)
> > +{
> > + dev->dma_coherent = coherent;
> > +}
>
> This probably wants a sanity check warn if coherent if false without
> any support for cache flushing as that will cause data corruption.
I've added a riscv_noncoherent_supported() call that will track that
"somebody" implemented non-coherence functionality from their
setup function (zicbom_probe, thead_errata-probe) and a matching
second WARN_TAINT in arch_setup_dma_ops() when coherent value
and availability of non-coherence handling is not matched.
Heiko
next prev parent reply other threads:[~2022-06-24 7:49 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-19 20:32 [PATCH v4 0/4] riscv: implement Zicbom-based CMO instructions + the t-head variant Heiko Stuebner
2022-06-19 20:32 ` Heiko Stuebner
2022-06-19 20:32 ` [PATCH 1/4] of: also handle dma-noncoherent in of_dma_is_coherent() Heiko Stuebner
2022-06-19 20:32 ` Heiko Stuebner
2022-06-20 6:01 ` Christoph Hellwig
2022-06-20 6:01 ` Christoph Hellwig
2022-06-20 16:33 ` Atish Patra
2022-06-20 16:33 ` Atish Patra
2022-06-20 18:11 ` Heiko Stuebner
2022-06-20 18:11 ` Heiko Stuebner
2022-06-20 19:41 ` Atish Patra
2022-06-20 19:41 ` Atish Patra
2022-06-19 20:32 ` [PATCH 2/4] dt-bindings: riscv: document cbom-block-size Heiko Stuebner
2022-06-19 20:32 ` Heiko Stuebner
2022-06-19 20:32 ` [PATCH 3/4] riscv: Implement Zicbom-based cache management operations Heiko Stuebner
2022-06-19 20:32 ` Heiko Stuebner
2022-06-20 6:16 ` Christoph Hellwig
2022-06-20 6:16 ` Christoph Hellwig
2022-06-24 7:49 ` Heiko Stuebner [this message]
2022-06-24 7:49 ` Heiko Stuebner
2022-06-19 20:32 ` [PATCH 4/4] riscv: implement cache-management errata for T-Head SoCs Heiko Stuebner
2022-06-19 20:32 ` Heiko Stuebner
2022-06-20 0:53 ` kernel test robot
2022-06-29 1:29 ` Samuel Holland
2022-06-29 1:29 ` Samuel Holland
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=4357313.8hb0ThOEGa@phil \
--to=heiko@sntech.de \
--cc=anup@brainfault.org \
--cc=atish.patra@wdc.com \
--cc=atishp@atishpatra.org \
--cc=cmuellner@linux.com \
--cc=devicetree@vger.kernel.org \
--cc=drew@beagleboard.org \
--cc=guoren@kernel.org \
--cc=hch@lst.de \
--cc=krzk+dt@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=mick@ics.forth.gr \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=philipp.tomsich@vrull.eu \
--cc=rdunlap@infradead.org \
--cc=robh+dt@kernel.org \
--cc=samuel@sholland.org \
--cc=wefu@redhat.com \
/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.