Skip to content

Commit

Permalink
m68k: init the MMU hardware for the 54xx ColdFire
Browse files Browse the repository at this point in the history
The 54xx ColdFire CPU family has an internal MMU. Up to now though we
have only supported running on them with the MMU disabled.

Add code to the 54xx ColdFire init sequence to initialize the bootmem
used by the usual MMU m68k code for paging init.

Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Matt Waddel <mwaddel@yahoo.com>
Acked-by: Kurt Mahan <kmahan@xmission.com>
  • Loading branch information
Greg Ungerer committed Dec 30, 2011
1 parent feb1ee7 commit 0079fe7
Showing 1 changed file with 46 additions and 1 deletion.
47 changes: 46 additions & 1 deletion arch/m68k/platform/coldfire/head.S
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/*
* head.S -- common startup code for ColdFire CPUs.
*
* (C) Copyright 1999-2010, Greg Ungerer <gerg@snapgear.com>.
* (C) Copyright 1999-2011, Greg Ungerer <gerg@snapgear.com>.
*/

/*****************************************************************************/
Expand All @@ -13,6 +13,7 @@
#include <asm/asm-offsets.h>
#include <asm/coldfire.h>
#include <asm/mcfsim.h>
#include <asm/mcfmmu.h>
#include <asm/thread_info.h>

/*****************************************************************************/
Expand Down Expand Up @@ -135,6 +136,14 @@ _init_sp:

__HEAD

#ifdef CONFIG_MMU
_start0:
jmp _start
.global kernel_pg_dir
.equ kernel_pg_dir,_start0
.equ .,_start0+0x1000
#endif

/*
* This is the codes first entry point. This is where it all
* begins...
Expand Down Expand Up @@ -193,6 +202,26 @@ _start:
movec %d0,%CACR
nop

#ifdef CONFIG_MMU
/*
* Identity mapping for the kernel region.
*/
movel #(MMUBASE+1),%d0 /* enable MMUBAR registers */
movec %d0,%MMUBAR
movel #MMUOR_CA,%d0 /* clear TLB entries */
movel %d0,MMUOR
movel #0,%d0 /* set ASID to 0 */
movec %d0,%asid

movel #MMUCR_EN,%d0 /* Enable the identity map */
movel %d0,MMUCR
nop /* sync i-pipeline */

movel #_vstart,%a0 /* jump to "virtual" space */
jmp %a0@
_vstart:
#endif /* CONFIG_MMU */

#ifdef CONFIG_ROMFS_FS
/*
* Move ROM filesystem above bss :-)
Expand Down Expand Up @@ -238,6 +267,22 @@ _clear_bss:
lea init_thread_union,%a0
lea THREAD_SIZE(%a0),%sp

#ifdef CONFIG_MMU
.global m68k_cputype
.global m68k_mmutype
.global m68k_fputype
.global m68k_machtype
movel #CPU_COLDFIRE,%d0
movel %d0,m68k_cputype /* Mark us as a ColdFire */
movel #MMU_COLDFIRE,%d0
movel %d0,m68k_mmutype
movel #FPU_COLDFIRE,%d0
movel %d0,m68k_fputype
movel #MACH_M54XX,%d0
movel %d0,m68k_machtype /* Mark us as a 54xx machine */
lea init_task,%a2 /* Set "current" init task */
#endif

/*
* Assember start up done, start code proper.
*/
Expand Down

0 comments on commit 0079fe7

Please sign in to comment.