diff options
Diffstat (limited to 'board/amcc/luan/init.S')
| -rw-r--r-- | board/amcc/luan/init.S | 170 | 
1 files changed, 56 insertions, 114 deletions
| diff --git a/board/amcc/luan/init.S b/board/amcc/luan/init.S index 7830ebdfa6d..d5ee117dfac 100644 --- a/board/amcc/luan/init.S +++ b/board/amcc/luan/init.S @@ -1,73 +1,31 @@  /* -* -* See file CREDITS for list of people who contributed to this -* project. -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License as -* published by the Free Software Foundation; either version 2 of -* the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, -* MA 02111-1307 USA -*/ + * (C) Copyright 2007 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + *  Copyright (C) 2002 Scott McNutt <smcnutt@artesyncp.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */  #include <ppc_asm.tmpl>  #include <config.h> - -/* General */ -#define TLB_VALID   0x00000200 - -/* Supported page sizes */ - -#define SZ_1K	    0x00000000 -#define SZ_4K	    0x00000010 -#define SZ_16K	    0x00000020 -#define SZ_64K	    0x00000030 -#define SZ_256K	    0x00000040 -#define SZ_1M	    0x00000050 -#define SZ_16M	    0x00000070 -#define SZ_256M	    0x00000090 - -/* Storage attributes */ -#define SA_W	    0x00000800	    /* Write-through */ -#define SA_I	    0x00000400	    /* Caching inhibited */ -#define SA_M	    0x00000200	    /* Memory coherence */ -#define SA_G	    0x00000100	    /* Guarded */ -#define SA_E	    0x00000080	    /* Endian */ - -/* Access control */ -#define AC_X	    0x00000024	    /* Execute */ -#define AC_W	    0x00000012	    /* Write */ -#define AC_R	    0x00000009	    /* Read */ - -/* Some handy macros */ - -#define EPN(e)		((e) & 0xfffffc00) -#define TLB0(epn,sz)	( (EPN((epn)) | (sz) | TLB_VALID ) ) -#define TLB1(rpn,erpn)	( ((rpn)&0xfffffc00) | (erpn) ) -#define TLB2(a)		( (a)&0x00000fbf ) - -#define tlbtab_start\ -	mflr    r1  ;\ -	bl 0f	    ; - -#define tlbtab_end\ -	.long 0, 0, 0	;   \ -0:	mflr    r0	;   \ -	mtlr    r1	;   \ -	blr		; - -#define tlbentry(epn,sz,rpn,erpn,attr)\ -	.long TLB0(epn,sz),TLB1(rpn,erpn),TLB2(attr) - +#include <asm-ppc/mmu.h>  /**************************************************************************   * TLB TABLE @@ -80,53 +38,37 @@   *   *************************************************************************/ -    .section .bootpg,"ax" -    .globl tlbtab +	.section .bootpg,"ax" +	.globl tlbtab  tlbtab: -    tlbtab_start - -#if (CFG_LARGE_FLASH == 0xffc00000)	/* if booting from large flash */ -    /* large flash */ -    tlbentry( 0xffc00000,         SZ_1M, 0xffc00000,          1, AC_R|AC_W|AC_X|SA_G|SA_I|SA_W ) -    tlbentry( 0xffd00000,         SZ_1M, 0xffd00000,          1, AC_R|AC_W|AC_X|SA_G|SA_I|SA_W ) -    tlbentry( 0xffe00000,         SZ_1M, 0xffe00000,          1, AC_R|AC_W|AC_X|SA_G|SA_I|SA_W ) -    tlbentry( 0xfff00000,         SZ_1M, 0xfff00000,          1, AC_R|AC_W|AC_X|SA_G|SA_I|SA_W ) - -    tlbentry( 0xff800000,         SZ_1M, 0xff800000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ ) -    tlbentry( 0xff900000,         SZ_1M, 0xff900000,          1, AC_R|AC_W|AC_X|SA_G|SA_I|SA_W ) -#else					/* else booting from small flash */ -    tlbentry( 0xffe00000,         SZ_1M, 0xffe00000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ ) -    tlbentry( 0xfff00000,         SZ_1M, 0xfff00000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ ) - -    tlbentry( 0xff800000,         SZ_1M, 0xff800000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ ) -    tlbentry( 0xff900000,         SZ_1M, 0xff900000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ ) -    tlbentry( 0xffa00000,         SZ_1M, 0xffa00000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ ) -    tlbentry( 0xffb00000,         SZ_1M, 0xffb00000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ ) -#endif - -    tlbentry( CFG_EPLD_BASE,    SZ_256K, 0xff000000,          1, AC_R|AC_W|SA_G|SA_I ) - -#if (CFG_SRAM_BASE != 0)		/* if SRAM up high and SDRAM at zero */ -    tlbentry( 0x00000000, SZ_256M, 0x00000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) -    tlbentry( 0x10000000, SZ_256M, 0x10000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) -#elif (CFG_SMALL_FLASH == 0xff900000)	/* else SRAM at 0 */ -    tlbentry( 0x00000000,   SZ_1M, 0xff800000, 1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ ) -#elif (CFG_SMALL_FLASH == 0xfff00000) -    tlbentry( 0x00000000,   SZ_1M, 0xffe00000, 1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ ) -#else -    #error DONT KNOW SRAM LOCATION -#endif - -    /* internal ram (l2 cache) */ -    tlbentry( CFG_ISRAM_BASE,    SZ_256K, 0x80000000,      0, AC_R|AC_W|AC_X|SA_I ) - -    /* peripherals at f0000000 */ -    tlbentry( CFG_PERIPHERAL_BASE, SZ_4K, CFG_PERIPHERAL_BASE, 1, AC_R|AC_W|SA_G|SA_I ) - -    /* PCI */ -#if (CONFIG_COMMANDS & CFG_CMD_PCI) -    tlbentry( CFG_PCI_BASE,    SZ_256M, 0x00000000, 9, AC_R|AC_W|SA_G|SA_I ) -    tlbentry( CFG_PCI_MEMBASE, SZ_256M, 0x10000000, 9, AC_R|AC_W|SA_G|SA_I ) -#endif -    tlbtab_end +	tlbtab_start + +	/* +	 * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the +	 * speed up boot process. It is patched after relocation to enable SA_I +	 */ +	tlbentry(0xfff00000, SZ_1M, 0xfff00000, 1, AC_R|AC_W|AC_X|SA_G) + +	tlbentry(0xffc00000, SZ_1M, 0xffc00000, 1, AC_R|AC_W|AC_X|SA_G|SA_I) +	tlbentry(0xffd00000, SZ_1M, 0xffd00000, 1, AC_R|AC_W|AC_X|SA_G|SA_I) +	tlbentry(0xffe00000, SZ_1M, 0xffe00000, 1, AC_R|AC_W|AC_X|SA_G|SA_I) +	tlbentry(0xff900000, SZ_1M, 0xff900000, 1, AC_R|AC_W|AC_X|SA_G|SA_I) +	tlbentry(CFG_EPLD_BASE, SZ_256K, 0xff000000, 1, AC_R|AC_W|SA_G|SA_I) + +	/* +	 * TLB entries for SDRAM are not needed on this platform. +	 * They are dynamically generated in the SPD DDR(2) detection +	 * routine. +	 */ + +	/* internal ram (l2 cache) */ +	tlbentry(CFG_ISRAM_BASE, SZ_256K, 0x80000000, 0, AC_R|AC_W|AC_X|SA_I) + +	/* peripherals at f0000000 */ +	tlbentry(CFG_PERIPHERAL_BASE, SZ_4K, CFG_PERIPHERAL_BASE, 1, AC_R|AC_W|SA_G|SA_I) + +	/* PCI */ +	tlbentry(CFG_PCI_BASE, SZ_256M, 0x00000000, 9, AC_R|AC_W|SA_G|SA_I) +	tlbentry(CFG_PCI_MEMBASE, SZ_256M, 0x10000000, 9, AC_R|AC_W|SA_G|SA_I) +	tlbtab_end | 
