From: Mark Rutland <mark.rutland@arm.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2] armv8: caches: Added routine to set non cacheable region
Date: Wed, 29 Apr 2015 17:29:50 +0100 [thread overview]
Message-ID: <20150429162950.GD8781@leverpostej> (raw)
In-Reply-To: <36afeeb6504576ba92012c597d24b81517b085c7.1430296529.git.michal.simek@xilinx.com>
Hi Michal,
On Wed, Apr 29, 2015 at 09:35:35AM +0100, Michal Simek wrote:
> Added routine mmu_set_region_dcache_behaviour() to set a
> particular region as non cacheable.
What's the intended use of this?
> Define dummy routine for mmu_set_region_dcache_behaviour()
> to handle incase of dcache off.
>
> Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> ---
>
> Changes in v2:
> - Fix patch subject (remove addional zzz from v1)
> - Remove armv8: caches: Disable dcache after flush patch from this
> series based on the talk with Mark Rutland (patch is not needed
> anymore)
>
> arch/arm/cpu/armv8/cache_v8.c | 23 +++++++++++++++++++++++
> arch/arm/include/asm/system.h | 28 ++++++++++++++++++----------
> 2 files changed, 41 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/cpu/armv8/cache_v8.c b/arch/arm/cpu/armv8/cache_v8.c
> index c5ec5297cd39..25a2136a3cdf 100644
> --- a/arch/arm/cpu/armv8/cache_v8.c
> +++ b/arch/arm/cpu/armv8/cache_v8.c
> @@ -139,6 +139,24 @@ int dcache_status(void)
> return (get_sctlr() & CR_C) != 0;
> }
>
> +void mmu_set_region_dcache_behaviour(phys_addr_t start, size_t size,
> + enum dcache_option option)
> +{
> + /* get the level2_table0 start address */
> + u64 *page_table = (u64 *)(gd->arch.tlb_addr + 0x3000);
This looks very specific to a particular platform.
> + u64 upto, end;
> +
> + end = ALIGN(start + size, (1 << MMU_SECTION_SHIFT)) >>
> + MMU_SECTION_SHIFT;
> + start = start >> MMU_SECTION_SHIFT;
> + for (upto = start; upto < end; upto++) {
> + page_table[upto] &= ~PMD_ATTRINDX_MASK;
> + page_table[upto] |= PMD_ATTRINDX(option);
> + }
> +
> + flush_dcache_range(page_table[start], page_table[end]);
This looks odd. Aren't these the values in the page tables (complete
with attributes), rather than (virtual) addresses?
What exactly are you trying to flush here? Depending on your TCR
settings you don't necessarily have to flush the tables themselves,
assuming they don't fall inside the region being changed?
> + __asm_invalidate_tlb_all();
If the region was previously cacheable, you'll need to
(clean+)invalidate here to clear the PA range in the caches.
Thanks,
Mark.
next prev parent reply other threads:[~2015-04-29 16:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-29 8:35 [U-Boot] [PATCH v2] armv8: caches: Added routine to set non cacheable region Michal Simek
2015-04-29 15:04 ` York Sun
2015-04-29 16:29 ` Mark Rutland [this message]
2015-05-12 3:46 ` Siva Durga Prasad Paladugu
2015-05-13 17:31 ` Mark Rutland
2015-05-14 5:01 ` Siva Durga Prasad Paladugu
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=20150429162950.GD8781@leverpostej \
--to=mark.rutland@arm.com \
--cc=u-boot@lists.denx.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