|  | /* | 
|  | *  Copyright (C) 2005 | 
|  | *  Travis B. Sawyer, Sandburst Corporation, tsawyer@sandburst.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) | 
|  |  | 
|  |  | 
|  | /************************************************************************** | 
|  | * TLB TABLE | 
|  | * | 
|  | * This table is used by the cpu boot code to setup the initial tlb | 
|  | * entries. Rather than make broad assumptions in the cpu source tree, | 
|  | * this table lets each board set things up however they like. | 
|  | * | 
|  | *  Pointer to the table is returned in r1 | 
|  | * | 
|  | *************************************************************************/ | 
|  |  | 
|  | .section .bootpg,"ax" | 
|  | .globl tlbtab | 
|  |  | 
|  | tlbtab: | 
|  | tlbtab_start | 
|  | tlbentry( 0xf0000000, SZ_256M, 0xf0000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I) | 
|  | tlbentry( CFG_PERIPHERAL_BASE, SZ_256M, 0x40000000, 1, AC_R|AC_W|SA_G|SA_I) | 
|  | tlbentry( CFG_ISRAM_BASE, SZ_256K, 0x80000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I) | 
|  | tlbentry( CFG_SDRAM_BASE, SZ_256M, 0x00000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) | 
|  | tlbentry( CFG_SDRAM_BASE+0x10000000, SZ_256M, 0x10000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) | 
|  | tlbentry( CFG_SDRAM_BASE+0x20000000, SZ_256M, 0x20000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) | 
|  | tlbentry( CFG_SDRAM_BASE+0x30000000, SZ_256M, 0x30000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) | 
|  | tlbentry( CFG_PCI_BASE, SZ_256M, 0x00000000, 2, AC_R|AC_W|SA_G|SA_I ) | 
|  | tlbentry( CFG_PCI_MEMBASE, SZ_256M, 0x00000000, 3, AC_R|AC_W|SA_G|SA_I ) | 
|  | tlbtab_end |