public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] nds32: split common cache access from cpu into lib
Date: Sun, 15 Jul 2012 10:12:45 +0200	[thread overview]
Message-ID: <201207151012.45797.marex@denx.de> (raw)
In-Reply-To: <1342324924-3282-1-git-send-email-macpaul@gmail.com>

Dear Macpaul Lin,

> This commit does the following updates.
> 1. Split the common cache access from cpu.c into lib folder.
> 2. Rename the following cache api to adapt common.h
>  - dcache_flush_rang -> flush_dcache_rang
>  - icache_inval_range -> invalidate_icache_range
> 3. Add invalidate_dcache_range

So basically this connects it to standard cache api?

[...]
> diff --git a/arch/nds32/lib/cache.c b/arch/nds32/lib/cache.c
[...]
> +static inline unsigned long CACHE_LINE_SIZE(enum cache_t cache)
> +{
> +	if (cache == ICACHE)
> +		return 8 << (((GET_ICM_CFG() & ICM_CFG_MSK_ISZ) \
> +					>> ICM_CFG_OFF_ISZ) - 1);


These crazy macros can be probably done easier and can share some code maybe? 
Maybe not though, I dunno, just a thought.

> +	else
> +		return 8 << (((GET_DCM_CFG() & DCM_CFG_MSK_DSZ) \
> +					>> DCM_CFG_OFF_DSZ) - 1);
> +}
> +
> +void flush_dcache_range(unsigned long start, unsigned long end)
> +{
> +	unsigned long line_size;
> +
> +	line_size = CACHE_LINE_SIZE(DCACHE);
> +
> +	while (end > start) {
> +		__asm__ volatile ("\n\tcctl %0, L1D_VA_WB" : : "r"(start));
> +		__asm__ volatile ("\n\tcctl %0, L1D_VA_INVAL" : : "r"(start));

You probably want to do those two calls in one asm volatile () block. And this 
too ... use "asm volatile()" and not "__asm__ volatile" or "asm __volatile__" 
and similar combinations of these, just a nit ;-)

> +		start += line_size;
> +	}
> +}
> +
> +void invalidate_icache_range(unsigned long start, unsigned long end)
> +{
> +	unsigned long line_size;
> +
> +	line_size = CACHE_LINE_SIZE(ICACHE);
> +	while (end > start) {
> +		__asm__ volatile ("\n\tcctl %0, L1I_VA_INVAL" : : "r"(start));
> +		start += line_size;
> +	}
> +}
> +
> +void invalidate_dcache_range(unsigned long start, unsigned long end)
> +{
> +	unsigned long line_size;
> +
> +	line_size = CACHE_LINE_SIZE(DCACHE);
> +	while (end > start) {
> +		__asm__ volatile ("\n\tcctl %0, L1D_VA_INVAL" : : "r"(start));
> +		start += line_size;
> +	}
> +}
> +
> +void flush_cache(unsigned long addr, unsigned long size)
> +{
> +	flush_dcache_range(addr, addr + size);
> +	invalidate_icache_range(addr, addr + size);

You probably want to flush dcache in here and that's it.

> +}
> +
> +void icache_enable(void)
> +{
> +	__asm__ __volatile__ (

See my nit above for the rest ;-) But all in all it's good, we should be 
applying this around V2-V3 of this patch, for the -next release. Thanks for your 
patch!

  reply	other threads:[~2012-07-15  8:12 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-15  4:02 [U-Boot] [PATCH] nds32: split common cache access from cpu into lib Macpaul Lin
2012-07-15  8:12 ` Marek Vasut [this message]
2012-07-16  2:23   ` Macpaul Lin
2012-07-17 13:44     ` [U-Boot] [PATCH v2] " Macpaul Lin
2012-07-20 16:03       ` Macpaul Lin
2012-07-19  4:37   ` [U-Boot] [PATCH] " Mike Frysinger
2012-07-19  4:51     ` Macpaul Lin
2012-07-19  9:02     ` Marek Vasut
2012-07-19 13:48       ` Mike Frysinger
2012-07-19 14:02         ` Marek Vasut
2012-07-20  8:24           ` Macpaul Lin
2012-07-20 14:41             ` Mike Frysinger

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=201207151012.45797.marex@denx.de \
    --to=marex@denx.de \
    --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