Skip to content

Commit

Permalink
MN10300: Make the boot wrapper able to use writeback caching
Browse files Browse the repository at this point in the history
Make the boot wrapper able to use writeback caching, including flushing the
cache before jumping to the main kernel.

Signed-off-by: Akira Takeuchi <takeuchi.akr@jp.panasonic.com>
Signed-off-by: Kiyoshi Owada <owada.kiyoshi@jp.panasonic.com>
Signed-off-by: David Howells <dhowells@redhat.com>
  • Loading branch information
Akira Takeuchi authored and David Howells committed Oct 27, 2010
1 parent 8be0628 commit 6331718
Showing 1 changed file with 48 additions and 1 deletion.
49 changes: 48 additions & 1 deletion arch/mn10300/boot/compressed/head.S
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

#include <linux/linkage.h>
#include <asm/cpu-regs.h>
#include <asm/cache.h>

.globl startup_32
startup_32:
Expand All @@ -37,8 +38,15 @@ startup_32:
mov (a0),d0
btst CHCTR_ICBUSY|CHCTR_DCBUSY,d0 # wait till not busy
lne
mov CHCTR_ICEN|CHCTR_DCEN|CHCTR_DCWTMD,d0 # writethru dcache

#ifdef CONFIG_MN10300_CACHE_ENABLED
#ifdef CONFIG_MN10300_CACHE_WBACK
mov CHCTR_ICEN|CHCTR_DCEN|CHCTR_DCWTMD_WRBACK,d0
#else
mov CHCTR_ICEN|CHCTR_DCEN|CHCTR_DCWTMD_WRTHROUGH,d0
#endif /* WBACK */
movhu d0,(a0) # enable
#endif /* !ENABLED */

# clear the BSS area
mov __bss_start,a0
Expand All @@ -54,6 +62,9 @@ bssclear_end:

# decompress the kernel
call decompress_kernel[],0
#ifdef CONFIG_MN10300_CACHE_WBACK
call mn10300_dcache_flush_inv[],0
#endif

# disable caches again
mov CHCTR,a0
Expand All @@ -69,10 +80,46 @@ bssclear_end:
mov (4,a0),d1
mov (8,a0),d2

# jump to the kernel proper entry point
mov a3,sp
mov CONFIG_KERNEL_TEXT_ADDRESS,a0
jmp (a0)


###############################################################################
#
# Cache flush routines
#
###############################################################################
#ifdef CONFIG_MN10300_CACHE_WBACK
mn10300_dcache_flush_inv:
movhu (CHCTR),d0
btst CHCTR_DCEN,d0
beq mn10300_dcache_flush_inv_end

mov L1_CACHE_NENTRIES,d1
clr a1

mn10300_dcache_flush_inv_loop:
mov (DCACHE_PURGE_WAY0(0),a1),d0 # unconditional purge
mov (DCACHE_PURGE_WAY1(0),a1),d0 # unconditional purge
mov (DCACHE_PURGE_WAY2(0),a1),d0 # unconditional purge
mov (DCACHE_PURGE_WAY3(0),a1),d0 # unconditional purge

add L1_CACHE_BYTES,a1
add -1,d1
bne mn10300_dcache_flush_inv_loop

mn10300_dcache_flush_inv_end:
ret [],0
#endif /* CONFIG_MN10300_CACHE_WBACK */


###############################################################################
#
# Data areas
#
###############################################################################
.data
.align 4
param_save_area:
Expand Down

0 comments on commit 6331718

Please sign in to comment.