xref: /rk3399_rockchip-uboot/board/socrates/tlb.c (revision dd332e18d082de75eca3fc2c7c778f5d4571a096)
15d108ac8SSergei Poselenov /*
25d108ac8SSergei Poselenov  * (C) Copyright 2008
35d108ac8SSergei Poselenov  * Sergei Poselenov, Emcraft Systems, sposelenov@emcraft.com.
45d108ac8SSergei Poselenov  *
55d108ac8SSergei Poselenov  * Copyright 2008 Freescale Semiconductor, Inc.
65d108ac8SSergei Poselenov  *
75d108ac8SSergei Poselenov  * (C) Copyright 2000
85d108ac8SSergei Poselenov  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
95d108ac8SSergei Poselenov  *
105d108ac8SSergei Poselenov  * See file CREDITS for list of people who contributed to this
115d108ac8SSergei Poselenov  * project.
125d108ac8SSergei Poselenov  *
135d108ac8SSergei Poselenov  * This program is free software; you can redistribute it and/or
145d108ac8SSergei Poselenov  * modify it under the terms of the GNU General Public License as
155d108ac8SSergei Poselenov  * published by the Free Software Foundation; either version 2 of
165d108ac8SSergei Poselenov  * the License, or (at your option) any later version.
175d108ac8SSergei Poselenov  *
185d108ac8SSergei Poselenov  * This program is distributed in the hope that it will be useful,
195d108ac8SSergei Poselenov  * but WITHOUT ANY WARRANTY; without even the implied warranty of
205d108ac8SSergei Poselenov  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
215d108ac8SSergei Poselenov  * GNU General Public License for more details.
225d108ac8SSergei Poselenov  *
235d108ac8SSergei Poselenov  * You should have received a copy of the GNU General Public License
245d108ac8SSergei Poselenov  * along with this program; if not, write to the Free Software
255d108ac8SSergei Poselenov  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
265d108ac8SSergei Poselenov  * MA 02111-1307 USA
275d108ac8SSergei Poselenov  */
285d108ac8SSergei Poselenov 
295d108ac8SSergei Poselenov #include <common.h>
305d108ac8SSergei Poselenov #include <asm/mmu.h>
315d108ac8SSergei Poselenov 
325d108ac8SSergei Poselenov struct fsl_e_tlb_entry tlb_table[] = {
335d108ac8SSergei Poselenov 	/* TLB 0 - for temp stack in cache */
346d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR, CONFIG_SYS_INIT_RAM_ADDR,
355d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
365d108ac8SSergei Poselenov 		      0, 0, BOOKE_PAGESZ_4K, 0),
376d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024 , CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024,
385d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
395d108ac8SSergei Poselenov 		      0, 0, BOOKE_PAGESZ_4K, 0),
406d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024 , CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024,
415d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
425d108ac8SSergei Poselenov 		      0, 0, BOOKE_PAGESZ_4K, 0),
436d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024 , CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024,
445d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
455d108ac8SSergei Poselenov 		      0, 0, BOOKE_PAGESZ_4K, 0),
465d108ac8SSergei Poselenov 
475d108ac8SSergei Poselenov 
485d108ac8SSergei Poselenov 	/*
49e64987a8SAnatolij Gustschin 	 * TLB 1:	64M	Non-cacheable, guarded
5059abd15bSSergei Poselenov 	 * 0xfc000000	64M	FLASH
515d108ac8SSergei Poselenov 	 * Out of reset this entry is only 4K.
525d108ac8SSergei Poselenov 	 */
536d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE,
545d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
555d108ac8SSergei Poselenov 		      0, 1, BOOKE_PAGESZ_64M, 1),
565d108ac8SSergei Poselenov 
575d108ac8SSergei Poselenov 	/*
585d108ac8SSergei Poselenov 	 * TLB 2:	256M	Non-cacheable, guarded
595d108ac8SSergei Poselenov 	 * 0x80000000	256M	PCI1 MEM First half
605d108ac8SSergei Poselenov 	 */
616d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_PCI1_MEM_PHYS, CONFIG_SYS_PCI1_MEM_PHYS,
625d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
635d108ac8SSergei Poselenov 		      0, 2, BOOKE_PAGESZ_256M, 1),
645d108ac8SSergei Poselenov 
655d108ac8SSergei Poselenov 	/*
665d108ac8SSergei Poselenov 	 * TLB 3:	256M	Non-cacheable, guarded
675d108ac8SSergei Poselenov 	 * 0x90000000	256M	PCI1 MEM Second half
685d108ac8SSergei Poselenov 	 */
696d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_PCI1_MEM_PHYS + 0x10000000, CONFIG_SYS_PCI1_MEM_PHYS + 0x10000000,
705d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
715d108ac8SSergei Poselenov 		      0, 3, BOOKE_PAGESZ_256M, 1),
725d108ac8SSergei Poselenov 
736d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_SYS_FPGA_BASE)
745d108ac8SSergei Poselenov 	/*
7559abd15bSSergei Poselenov 	 * TLB 4:	1M	Non-cacheable, guarded
7659abd15bSSergei Poselenov 	 * 0xc0000000	1M	FPGA and NAND
775d108ac8SSergei Poselenov 	 */
786d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_FPGA_BASE, CONFIG_SYS_FPGA_BASE,
795d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
8059abd15bSSergei Poselenov 		      0, 4, BOOKE_PAGESZ_1M, 1),
8159abd15bSSergei Poselenov #endif
825d108ac8SSergei Poselenov 
835d108ac8SSergei Poselenov 	/*
84e64987a8SAnatolij Gustschin 	 * TLB 5:	64M	Non-cacheable, guarded
85e64987a8SAnatolij Gustschin 	 * 0xc8000000	16M	LIME GDC framebuffer
86e64987a8SAnatolij Gustschin 	 * 0xc9fc0000	256K	LIME GDC MMIO
87e64987a8SAnatolij Gustschin 	 * (0xcbfc0000	256K	LIME GDC MMIO)
88e64987a8SAnatolij Gustschin 	 * MMIO is relocatable and could be at 0xcbfc0000
89e64987a8SAnatolij Gustschin 	 */
906d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_LIME_BASE, CONFIG_SYS_LIME_BASE,
91e64987a8SAnatolij Gustschin 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
92e64987a8SAnatolij Gustschin 		      0, 5, BOOKE_PAGESZ_64M, 1),
93e64987a8SAnatolij Gustschin 
94e64987a8SAnatolij Gustschin 	/*
955d108ac8SSergei Poselenov 	 * TLB 6:	64M	Non-cacheable, guarded
965d108ac8SSergei Poselenov 	 * 0xe000_0000	1M	CCSRBAR
975d108ac8SSergei Poselenov 	 * 0xe200_0000	16M	PCI1 IO
985d108ac8SSergei Poselenov 	 */
996d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_CCSRBAR, CONFIG_SYS_CCSRBAR_PHYS,
1005d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
1015d108ac8SSergei Poselenov 		      0, 6, BOOKE_PAGESZ_64M, 1),
1025d108ac8SSergei Poselenov 
103*dd332e18SAnatolij Gustschin #if !defined(CONFIG_SPD_EEPROM)
1045d108ac8SSergei Poselenov 	/*
1055d108ac8SSergei Poselenov 	 * TLB 7+8:	512M	DDR, cache disabled (needed for memory test)
1065d108ac8SSergei Poselenov 	 * 0x00000000  512M	DDR System memory
1075d108ac8SSergei Poselenov 	 * Without SPD EEPROM configured DDR, this must be setup manually.
1085d108ac8SSergei Poselenov 	 * Make sure the TLB count at the top of this table is correct.
1095d108ac8SSergei Poselenov 	 * Likely it needs to be increased by two for these entries.
1105d108ac8SSergei Poselenov 	 */
1116d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE,
1125d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
1135d108ac8SSergei Poselenov 		      0, 7, BOOKE_PAGESZ_256M, 1),
1145d108ac8SSergei Poselenov 
1156d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE + 0x10000000, CONFIG_SYS_DDR_SDRAM_BASE + 0x10000000,
1165d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
1175d108ac8SSergei Poselenov 		      0, 8, BOOKE_PAGESZ_256M, 1),
118*dd332e18SAnatolij Gustschin #endif
1195d108ac8SSergei Poselenov };
1205d108ac8SSergei Poselenov 
1215d108ac8SSergei Poselenov int num_tlb_entries = ARRAY_SIZE(tlb_table);
122