xref: /rk3399_rockchip-uboot/board/socrates/tlb.c (revision 326ea986ac150acdc7656d57fca647db80b50158)
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  *
10*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
115d108ac8SSergei Poselenov  */
125d108ac8SSergei Poselenov 
135d108ac8SSergei Poselenov #include <common.h>
145d108ac8SSergei Poselenov #include <asm/mmu.h>
155d108ac8SSergei Poselenov 
165d108ac8SSergei Poselenov struct fsl_e_tlb_entry tlb_table[] = {
175d108ac8SSergei Poselenov 	/* TLB 0 - for temp stack in cache */
186d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR, CONFIG_SYS_INIT_RAM_ADDR,
195d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
205d108ac8SSergei Poselenov 		      0, 0, BOOKE_PAGESZ_4K, 0),
216d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024 , CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024,
225d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
235d108ac8SSergei Poselenov 		      0, 0, BOOKE_PAGESZ_4K, 0),
246d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024 , CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024,
255d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
265d108ac8SSergei Poselenov 		      0, 0, BOOKE_PAGESZ_4K, 0),
276d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024 , CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024,
285d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
295d108ac8SSergei Poselenov 		      0, 0, BOOKE_PAGESZ_4K, 0),
305d108ac8SSergei Poselenov 
315d108ac8SSergei Poselenov 
325d108ac8SSergei Poselenov 	/*
33e64987a8SAnatolij Gustschin 	 * TLB 1:	64M	Non-cacheable, guarded
3459abd15bSSergei Poselenov 	 * 0xfc000000	64M	FLASH
355d108ac8SSergei Poselenov 	 * Out of reset this entry is only 4K.
365d108ac8SSergei Poselenov 	 */
376d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE,
385d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
395d108ac8SSergei Poselenov 		      0, 1, BOOKE_PAGESZ_64M, 1),
405d108ac8SSergei Poselenov 
415d108ac8SSergei Poselenov 	/*
425d108ac8SSergei Poselenov 	 * TLB 2:	256M	Non-cacheable, guarded
435d108ac8SSergei Poselenov 	 * 0x80000000	256M	PCI1 MEM First half
445d108ac8SSergei Poselenov 	 */
456d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_PCI1_MEM_PHYS, CONFIG_SYS_PCI1_MEM_PHYS,
465d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
475d108ac8SSergei Poselenov 		      0, 2, BOOKE_PAGESZ_256M, 1),
485d108ac8SSergei Poselenov 
495d108ac8SSergei Poselenov 	/*
505d108ac8SSergei Poselenov 	 * TLB 3:	256M	Non-cacheable, guarded
515d108ac8SSergei Poselenov 	 * 0x90000000	256M	PCI1 MEM Second half
525d108ac8SSergei Poselenov 	 */
536d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_PCI1_MEM_PHYS + 0x10000000, CONFIG_SYS_PCI1_MEM_PHYS + 0x10000000,
545d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
555d108ac8SSergei Poselenov 		      0, 3, BOOKE_PAGESZ_256M, 1),
565d108ac8SSergei Poselenov 
576d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_SYS_FPGA_BASE)
585d108ac8SSergei Poselenov 	/*
5959abd15bSSergei Poselenov 	 * TLB 4:	1M	Non-cacheable, guarded
6059abd15bSSergei Poselenov 	 * 0xc0000000	1M	FPGA and NAND
615d108ac8SSergei Poselenov 	 */
626d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_FPGA_BASE, CONFIG_SYS_FPGA_BASE,
635d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
6459abd15bSSergei Poselenov 		      0, 4, BOOKE_PAGESZ_1M, 1),
6559abd15bSSergei Poselenov #endif
665d108ac8SSergei Poselenov 
675d108ac8SSergei Poselenov 	/*
68e64987a8SAnatolij Gustschin 	 * TLB 5:	64M	Non-cacheable, guarded
69e64987a8SAnatolij Gustschin 	 * 0xc8000000	16M	LIME GDC framebuffer
70e64987a8SAnatolij Gustschin 	 * 0xc9fc0000	256K	LIME GDC MMIO
71e64987a8SAnatolij Gustschin 	 * (0xcbfc0000	256K	LIME GDC MMIO)
72e64987a8SAnatolij Gustschin 	 * MMIO is relocatable and could be at 0xcbfc0000
73e64987a8SAnatolij Gustschin 	 */
746d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_LIME_BASE, CONFIG_SYS_LIME_BASE,
75e64987a8SAnatolij Gustschin 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
76e64987a8SAnatolij Gustschin 		      0, 5, BOOKE_PAGESZ_64M, 1),
77e64987a8SAnatolij Gustschin 
78e64987a8SAnatolij Gustschin 	/*
795d108ac8SSergei Poselenov 	 * TLB 6:	64M	Non-cacheable, guarded
805d108ac8SSergei Poselenov 	 * 0xe000_0000	1M	CCSRBAR
815d108ac8SSergei Poselenov 	 * 0xe200_0000	16M	PCI1 IO
825d108ac8SSergei Poselenov 	 */
836d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_CCSRBAR, CONFIG_SYS_CCSRBAR_PHYS,
845d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
855d108ac8SSergei Poselenov 		      0, 6, BOOKE_PAGESZ_64M, 1),
865d108ac8SSergei Poselenov 
87dd332e18SAnatolij Gustschin #if !defined(CONFIG_SPD_EEPROM)
885d108ac8SSergei Poselenov 	/*
895d108ac8SSergei Poselenov 	 * TLB 7+8:	512M	DDR, cache disabled (needed for memory test)
905d108ac8SSergei Poselenov 	 * 0x00000000  512M	DDR System memory
915d108ac8SSergei Poselenov 	 * Without SPD EEPROM configured DDR, this must be setup manually.
925d108ac8SSergei Poselenov 	 * Make sure the TLB count at the top of this table is correct.
935d108ac8SSergei Poselenov 	 * Likely it needs to be increased by two for these entries.
945d108ac8SSergei Poselenov 	 */
956d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE,
965d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
975d108ac8SSergei Poselenov 		      0, 7, BOOKE_PAGESZ_256M, 1),
985d108ac8SSergei Poselenov 
996d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE + 0x10000000, CONFIG_SYS_DDR_SDRAM_BASE + 0x10000000,
1005d108ac8SSergei Poselenov 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
1015d108ac8SSergei Poselenov 		      0, 8, BOOKE_PAGESZ_256M, 1),
102dd332e18SAnatolij Gustschin #endif
1035d108ac8SSergei Poselenov };
1045d108ac8SSergei Poselenov 
1055d108ac8SSergei Poselenov int num_tlb_entries = ARRAY_SIZE(tlb_table);
106