From mboxrd@z Thu Jan 1 00:00:00 1970 From: Aneesh V Date: Sat, 08 Jan 2011 14:43:28 +0530 Subject: [U-Boot] [PATCH 4/8] arm: minor fixes for cache and mmu handling In-Reply-To: <4D280C8F.605@free.fr> References: <1293018898-13253-1-git-send-email-aneesh@ti.com> <1293018898-13253-5-git-send-email-aneesh@ti.com> <4D280C8F.605@free.fr> Message-ID: <4D282AB8.1020407@ti.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Albert, On Saturday 08 January 2011 12:34 PM, Albert ARIBAUD wrote: > Hi Aneesh, > > Le 22/12/2010 12:54, Aneesh V a ?crit : >> 1. make sure that page table setup is not done multiple times >> 2. flush_dcache_all() is more appropriate while disabling cache >> than a range flush on the entire memory(flush_cache()) >> >> Provide a default implementation for flush_dcache_all() >> for backward compatibility and to avoid build issues. >> >> Signed-off-by: Aneesh V >> --- >> arch/arm/lib/cache-cp15.c | 9 +++++++-- >> arch/arm/lib/cache.c | 13 ++++++++++++- >> 2 files changed, 19 insertions(+), 3 deletions(-) >> >> diff --git a/arch/arm/lib/cache-cp15.c b/arch/arm/lib/cache-cp15.c >> index ca526fb..20aa993 100644 >> --- a/arch/arm/lib/cache-cp15.c >> +++ b/arch/arm/lib/cache-cp15.c >> @@ -94,13 +94,18 @@ static inline void mmu_setup(void) >> set_cr(reg | CR_M); >> } >> >> +static int mmu_enabled(void) >> +{ >> + return get_cr()& CR_M; >> +} >> + >> /* cache_bit must be either CR_I or CR_C */ >> static void cache_enable(uint32_t cache_bit) >> { >> uint32_t reg; >> >> /* The data cache is not active unless the mmu is enabled too */ >> - if (cache_bit == CR_C) >> + if ((cache_bit == CR_C)&& !mmu_enabled()) >> mmu_setup(); >> reg = get_cr(); /* get control reg. */ >> cp_delay(); > > Do you know why double MMU setups happen? Can we not fix the execution > path and remove the second MMU setup call there, rather that catching t > on the fly to ignore it? Please note that mmu_setup() was getting called unconditionally from dcache_enable(). I see that some drivers are calling dcache_enable() and there are u-boot commands for enabling disabling cache. Consequently mmu_setup() may get called multiple times. Do we want to prevent dcache_enable() from being called multiple times? Best regards, Aneesh