xref: /rk3399_rockchip-uboot/board/freescale/t208xrdb/tlb.c (revision e7f9350525d73233d4eaf1793f8fe618e9fd4910)
18d67c368SShengzhou Liu /*
28d67c368SShengzhou Liu  * Copyright 2008-2014 Freescale Semiconductor, Inc.
38d67c368SShengzhou Liu  *
48d67c368SShengzhou Liu  * (C) Copyright 2000
58d67c368SShengzhou Liu  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
68d67c368SShengzhou Liu  *
78d67c368SShengzhou Liu  * SPDX-License-Identifier:     GPL-2.0+
88d67c368SShengzhou Liu  */
98d67c368SShengzhou Liu 
108d67c368SShengzhou Liu #include <common.h>
118d67c368SShengzhou Liu #include <asm/mmu.h>
128d67c368SShengzhou Liu 
138d67c368SShengzhou Liu struct fsl_e_tlb_entry tlb_table[] = {
148d67c368SShengzhou Liu 	/* TLB 0 - for temp stack in cache */
158d67c368SShengzhou Liu 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR,
168d67c368SShengzhou Liu 		      CONFIG_SYS_INIT_RAM_ADDR_PHYS,
178d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
188d67c368SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_4K, 0),
198d67c368SShengzhou Liu 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024,
208d67c368SShengzhou Liu 		      CONFIG_SYS_INIT_RAM_ADDR_PHYS + 4 * 1024,
218d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
228d67c368SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_4K, 0),
238d67c368SShengzhou Liu 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024,
248d67c368SShengzhou Liu 		      CONFIG_SYS_INIT_RAM_ADDR_PHYS + 8 * 1024,
258d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
268d67c368SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_4K, 0),
278d67c368SShengzhou Liu 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024,
288d67c368SShengzhou Liu 		      CONFIG_SYS_INIT_RAM_ADDR_PHYS + 12 * 1024,
298d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
308d67c368SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_4K, 0),
318d67c368SShengzhou Liu 
328d67c368SShengzhou Liu 	/* TLB 1 */
338d67c368SShengzhou Liu 	/* *I*** - Covers boot page */
348d67c368SShengzhou Liu #if defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SYS_INIT_L3_ADDR)
358d67c368SShengzhou Liu 	/*
368d67c368SShengzhou Liu 	 * *I*G - L3SRAM. When L3 is used as 1M SRAM, the address of the
378d67c368SShengzhou Liu 	 * SRAM is at 0xfff00000, it covered the 0xfffff000.
388d67c368SShengzhou Liu 	 */
398d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L3_ADDR, CONFIG_SYS_INIT_L3_ADDR,
408d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
418d67c368SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_1M, 1),
428d67c368SShengzhou Liu #elif defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
438d67c368SShengzhou Liu 	/*
448d67c368SShengzhou Liu 	 * SRIO_PCIE_BOOT-SLAVE. When slave boot, the address of the
458d67c368SShengzhou Liu 	 * space is at 0xfff00000, it covered the 0xfffff000.
468d67c368SShengzhou Liu 	 */
478d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR,
488d67c368SShengzhou Liu 		      CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS,
498d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_W|MAS2_G,
508d67c368SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_1M, 1),
518d67c368SShengzhou Liu #else
528d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
538d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
548d67c368SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_4K, 1),
558d67c368SShengzhou Liu #endif
568d67c368SShengzhou Liu 
578d67c368SShengzhou Liu 	/* *I*G* - CCSRBAR */
588d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_CCSRBAR, CONFIG_SYS_CCSRBAR_PHYS,
598d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
608d67c368SShengzhou Liu 		      0, 1, BOOKE_PAGESZ_16M, 1),
618d67c368SShengzhou Liu 
628d67c368SShengzhou Liu 	/* *I*G* - Flash, localbus */
638d67c368SShengzhou Liu 	/* This will be changed to *I*G* after relocation to RAM. */
648d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE_PHYS,
658d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SR, MAS2_W|MAS2_G,
668d67c368SShengzhou Liu 		      0, 2, BOOKE_PAGESZ_256M, 1),
678d67c368SShengzhou Liu 
68*4d666683SShengzhou Liu #ifndef CONFIG_SPL_BUILD
698d67c368SShengzhou Liu 	/* *I*G* - PCIe 1, 0x80000000 */
708d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_MEM_VIRT, CONFIG_SYS_PCIE1_MEM_PHYS,
718d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
728d67c368SShengzhou Liu 		      0, 3, BOOKE_PAGESZ_512M, 1),
738d67c368SShengzhou Liu 
748d67c368SShengzhou Liu 	/* *I*G* - PCIe 2, 0xa0000000 */
758d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE2_MEM_VIRT, CONFIG_SYS_PCIE2_MEM_PHYS,
768d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
778d67c368SShengzhou Liu 		      0, 4, BOOKE_PAGESZ_256M, 1),
788d67c368SShengzhou Liu 
798d67c368SShengzhou Liu 	/* *I*G* - PCIe 3, 0xb0000000 */
808d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE3_MEM_VIRT, CONFIG_SYS_PCIE3_MEM_PHYS,
818d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
828d67c368SShengzhou Liu 		      0, 5, BOOKE_PAGESZ_256M, 1),
838d67c368SShengzhou Liu 
848d67c368SShengzhou Liu 
858d67c368SShengzhou Liu 	/* *I*G* - PCIe 4, 0xc0000000 */
868d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE4_MEM_VIRT, CONFIG_SYS_PCIE4_MEM_PHYS,
878d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
888d67c368SShengzhou Liu 		      0, 6, BOOKE_PAGESZ_256M, 1),
898d67c368SShengzhou Liu 
908d67c368SShengzhou Liu 	/* *I*G* - PCI I/O */
918d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_IO_VIRT, CONFIG_SYS_PCIE1_IO_PHYS,
928d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
938d67c368SShengzhou Liu 		      0, 7, BOOKE_PAGESZ_256K, 1),
948d67c368SShengzhou Liu 
958d67c368SShengzhou Liu 	/* Bman/Qman */
968d67c368SShengzhou Liu #ifdef CONFIG_SYS_BMAN_MEM_PHYS
978d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_BMAN_MEM_BASE, CONFIG_SYS_BMAN_MEM_PHYS,
988d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
998d67c368SShengzhou Liu 		      0, 9, BOOKE_PAGESZ_16M, 1),
1008d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_BMAN_MEM_BASE + 0x01000000,
1018d67c368SShengzhou Liu 		      CONFIG_SYS_BMAN_MEM_PHYS + 0x01000000,
1028d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
1038d67c368SShengzhou Liu 		      0, 10, BOOKE_PAGESZ_16M, 1),
1048d67c368SShengzhou Liu #endif
1058d67c368SShengzhou Liu #ifdef CONFIG_SYS_QMAN_MEM_PHYS
1068d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_QMAN_MEM_BASE, CONFIG_SYS_QMAN_MEM_PHYS,
1078d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
1088d67c368SShengzhou Liu 		      0, 11, BOOKE_PAGESZ_16M, 1),
1098d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_QMAN_MEM_BASE + 0x01000000,
1108d67c368SShengzhou Liu 		      CONFIG_SYS_QMAN_MEM_PHYS + 0x01000000,
1118d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
1128d67c368SShengzhou Liu 		      0, 12, BOOKE_PAGESZ_16M, 1),
1138d67c368SShengzhou Liu #endif
114*4d666683SShengzhou Liu #endif
1158d67c368SShengzhou Liu #ifdef CONFIG_SYS_DCSRBAR_PHYS
1168d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_DCSRBAR, CONFIG_SYS_DCSRBAR_PHYS,
1178d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
1188d67c368SShengzhou Liu 		      0, 13, BOOKE_PAGESZ_32M, 1),
1198d67c368SShengzhou Liu #endif
1208d67c368SShengzhou Liu #ifdef CONFIG_SYS_NAND_BASE
1218d67c368SShengzhou Liu 	/*
1228d67c368SShengzhou Liu 	 * *I*G - NAND
1238d67c368SShengzhou Liu 	 * entry 14 and 15 has been used hard coded, they will be disabled
1248d67c368SShengzhou Liu 	 * in cpu_init_f, so we use entry 16 for nand.
1258d67c368SShengzhou Liu 	 */
1268d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_NAND_BASE, CONFIG_SYS_NAND_BASE_PHYS,
1278d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
1288d67c368SShengzhou Liu 		      0, 16, BOOKE_PAGESZ_64K, 1),
1298d67c368SShengzhou Liu #endif
1308d67c368SShengzhou Liu #ifdef CONFIG_SYS_CPLD_BASE
1318d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_CPLD_BASE, CONFIG_SYS_CPLD_BASE_PHYS,
1328d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
1338d67c368SShengzhou Liu 		      0, 17, BOOKE_PAGESZ_4K, 1),
1348d67c368SShengzhou Liu #endif
1358d67c368SShengzhou Liu #ifdef CONFIG_SRIO_PCIE_BOOT_SLAVE
1368d67c368SShengzhou Liu 	/*
1378d67c368SShengzhou Liu 	 * SRIO_PCIE_BOOT-SLAVE. 1M space from 0xffe00000 for
1388d67c368SShengzhou Liu 	 * fetching ucode and ENV from master
1398d67c368SShengzhou Liu 	 */
1408d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR,
1418d67c368SShengzhou Liu 		      CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS,
1428d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_G,
1438d67c368SShengzhou Liu 		      0, 18, BOOKE_PAGESZ_1M, 1),
1448d67c368SShengzhou Liu #endif
145*4d666683SShengzhou Liu #if defined(CONFIG_RAMBOOT_PBL) && !defined(CONFIG_SPL_BUILD)
1468d67c368SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE,
1478d67c368SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
1488d67c368SShengzhou Liu 		      0, 19, BOOKE_PAGESZ_2G, 1)
1498d67c368SShengzhou Liu #endif
1508d67c368SShengzhou Liu 
1518d67c368SShengzhou Liu };
1528d67c368SShengzhou Liu 
1538d67c368SShengzhou Liu int num_tlb_entries = ARRAY_SIZE(tlb_table);
154