xref: /rk3399_rockchip-uboot/board/freescale/t208xqds/tlb.c (revision e7f9350525d73233d4eaf1793f8fe618e9fd4910)
1254887a5SShengzhou Liu /*
2254887a5SShengzhou Liu  * Copyright 2008-2013 Freescale Semiconductor, Inc.
3254887a5SShengzhou Liu  *
4254887a5SShengzhou Liu  * (C) Copyright 2000
5254887a5SShengzhou Liu  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
6254887a5SShengzhou Liu  *
7254887a5SShengzhou Liu  * SPDX-License-Identifier:     GPL-2.0+
8254887a5SShengzhou Liu  */
9254887a5SShengzhou Liu 
10254887a5SShengzhou Liu #include <common.h>
11254887a5SShengzhou Liu #include <asm/mmu.h>
12254887a5SShengzhou Liu 
13254887a5SShengzhou Liu struct fsl_e_tlb_entry tlb_table[] = {
14254887a5SShengzhou Liu 	/* TLB 0 - for temp stack in cache */
15254887a5SShengzhou Liu 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR,
16254887a5SShengzhou Liu 		      CONFIG_SYS_INIT_RAM_ADDR_PHYS,
17254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
18254887a5SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_4K, 0),
19254887a5SShengzhou Liu 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024,
20254887a5SShengzhou Liu 		      CONFIG_SYS_INIT_RAM_ADDR_PHYS + 4 * 1024,
21254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
22254887a5SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_4K, 0),
23254887a5SShengzhou Liu 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024,
24254887a5SShengzhou Liu 		      CONFIG_SYS_INIT_RAM_ADDR_PHYS + 8 * 1024,
25254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
26254887a5SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_4K, 0),
27254887a5SShengzhou Liu 	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024,
28254887a5SShengzhou Liu 		      CONFIG_SYS_INIT_RAM_ADDR_PHYS + 12 * 1024,
29254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
30254887a5SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_4K, 0),
31254887a5SShengzhou Liu 
32254887a5SShengzhou Liu 	/* TLB 1 */
33254887a5SShengzhou Liu 	/* *I*** - Covers boot page */
34254887a5SShengzhou Liu #if defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SYS_INIT_L3_ADDR)
35254887a5SShengzhou Liu 	/*
36254887a5SShengzhou Liu 	 * *I*G - L3SRAM. When L3 is used as 1M SRAM, the address of the
37254887a5SShengzhou Liu 	 * SRAM is at 0xfff00000, it covered the 0xfffff000.
38254887a5SShengzhou Liu 	 */
39254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L3_ADDR, CONFIG_SYS_INIT_L3_ADDR,
40254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
41254887a5SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_1M, 1),
42254887a5SShengzhou Liu #elif defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
43254887a5SShengzhou Liu 	/*
44254887a5SShengzhou Liu 	 * SRIO_PCIE_BOOT-SLAVE. When slave boot, the address of the
45254887a5SShengzhou Liu 	 * space is at 0xfff00000, it covered the 0xfffff000.
46254887a5SShengzhou Liu 	 */
47254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR,
48254887a5SShengzhou Liu 		      CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS,
49254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_W|MAS2_G,
50254887a5SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_1M, 1),
51254887a5SShengzhou Liu #else
52254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
53254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
54254887a5SShengzhou Liu 		      0, 0, BOOKE_PAGESZ_4K, 1),
55254887a5SShengzhou Liu #endif
56254887a5SShengzhou Liu 
57254887a5SShengzhou Liu 	/* *I*G* - CCSRBAR */
58254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_CCSRBAR, CONFIG_SYS_CCSRBAR_PHYS,
59254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
60254887a5SShengzhou Liu 		      0, 1, BOOKE_PAGESZ_16M, 1),
61254887a5SShengzhou Liu 
62254887a5SShengzhou Liu 	/* *I*G* - Flash, localbus */
63254887a5SShengzhou Liu 	/* This will be changed to *I*G* after relocation to RAM. */
64254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE_PHYS,
65254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SR, MAS2_W|MAS2_G,
66254887a5SShengzhou Liu 		      0, 2, BOOKE_PAGESZ_256M, 1),
67254887a5SShengzhou Liu 
68*b19e288fSShengzhou Liu #ifndef CONFIG_SPL_BUILD
69254887a5SShengzhou Liu 	/* *I*G* - PCIe 1, 0x80000000 */
70254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_MEM_VIRT, CONFIG_SYS_PCIE1_MEM_PHYS,
71254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
72254887a5SShengzhou Liu 		      0, 3, BOOKE_PAGESZ_512M, 1),
73254887a5SShengzhou Liu 
74254887a5SShengzhou Liu 	/* *I*G* - PCIe 2, 0xa0000000 */
75254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE2_MEM_VIRT, CONFIG_SYS_PCIE2_MEM_PHYS,
76254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
77254887a5SShengzhou Liu 		      0, 4, BOOKE_PAGESZ_256M, 1),
78254887a5SShengzhou Liu 
79254887a5SShengzhou Liu 	/* *I*G* - PCIe 3, 0xb0000000 */
80254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE3_MEM_VIRT, CONFIG_SYS_PCIE3_MEM_PHYS,
81254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
82254887a5SShengzhou Liu 		      0, 5, BOOKE_PAGESZ_256M, 1),
83254887a5SShengzhou Liu 
84254887a5SShengzhou Liu 
85254887a5SShengzhou Liu 	/* *I*G* - PCIe 4, 0xc0000000 */
86254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE4_MEM_VIRT, CONFIG_SYS_PCIE4_MEM_PHYS,
87254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
88254887a5SShengzhou Liu 		      0, 6, BOOKE_PAGESZ_256M, 1),
89254887a5SShengzhou Liu 
90254887a5SShengzhou Liu 	/* *I*G* - PCI I/O */
91254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_IO_VIRT, CONFIG_SYS_PCIE1_IO_PHYS,
92254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
93254887a5SShengzhou Liu 		      0, 7, BOOKE_PAGESZ_256K, 1),
94254887a5SShengzhou Liu 
95254887a5SShengzhou Liu 	/* Bman/Qman */
96254887a5SShengzhou Liu #ifdef CONFIG_SYS_BMAN_MEM_PHYS
97254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_BMAN_MEM_BASE, CONFIG_SYS_BMAN_MEM_PHYS,
98254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
99254887a5SShengzhou Liu 		      0, 9, BOOKE_PAGESZ_16M, 1),
100254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_BMAN_MEM_BASE + 0x01000000,
101254887a5SShengzhou Liu 		      CONFIG_SYS_BMAN_MEM_PHYS + 0x01000000,
102254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
103254887a5SShengzhou Liu 		      0, 10, BOOKE_PAGESZ_16M, 1),
104254887a5SShengzhou Liu #endif
105254887a5SShengzhou Liu #ifdef CONFIG_SYS_QMAN_MEM_PHYS
106254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_QMAN_MEM_BASE, CONFIG_SYS_QMAN_MEM_PHYS,
107254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
108254887a5SShengzhou Liu 		      0, 11, BOOKE_PAGESZ_16M, 1),
109254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_QMAN_MEM_BASE + 0x01000000,
110254887a5SShengzhou Liu 		      CONFIG_SYS_QMAN_MEM_PHYS + 0x01000000,
111254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
112254887a5SShengzhou Liu 		      0, 12, BOOKE_PAGESZ_16M, 1),
113254887a5SShengzhou Liu #endif
114*b19e288fSShengzhou Liu #endif
115254887a5SShengzhou Liu #ifdef CONFIG_SYS_DCSRBAR_PHYS
116254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_DCSRBAR, CONFIG_SYS_DCSRBAR_PHYS,
117254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
118254887a5SShengzhou Liu 		      0, 13, BOOKE_PAGESZ_32M, 1),
119254887a5SShengzhou Liu #endif
120254887a5SShengzhou Liu #ifdef CONFIG_SYS_NAND_BASE
121254887a5SShengzhou Liu 	/*
122254887a5SShengzhou Liu 	 * *I*G - NAND
123254887a5SShengzhou Liu 	 * entry 14 and 15 has been used hard coded, they will be disabled
124254887a5SShengzhou Liu 	 * in cpu_init_f, so we use entry 16 for nand.
125254887a5SShengzhou Liu 	 */
126254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_NAND_BASE, CONFIG_SYS_NAND_BASE_PHYS,
127254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
128254887a5SShengzhou Liu 		      0, 16, BOOKE_PAGESZ_64K, 1),
129254887a5SShengzhou Liu #endif
130254887a5SShengzhou Liu #ifdef QIXIS_BASE_PHYS
131254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, QIXIS_BASE, QIXIS_BASE_PHYS,
132254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
133254887a5SShengzhou Liu 		      0, 17, BOOKE_PAGESZ_4K, 1),
134254887a5SShengzhou Liu #endif
135254887a5SShengzhou Liu #ifdef CONFIG_SRIO_PCIE_BOOT_SLAVE
136254887a5SShengzhou Liu 	/*
137254887a5SShengzhou Liu 	 * SRIO_PCIE_BOOT-SLAVE. 1M space from 0xffe00000 for
138254887a5SShengzhou Liu 	 * fetching ucode and ENV from master
139254887a5SShengzhou Liu 	 */
140254887a5SShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR,
141254887a5SShengzhou Liu 		      CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS,
142254887a5SShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_G,
143254887a5SShengzhou Liu 		      0, 18, BOOKE_PAGESZ_1M, 1),
144254887a5SShengzhou Liu #endif
145254887a5SShengzhou Liu 
146*b19e288fSShengzhou Liu #if defined(CONFIG_RAMBOOT_PBL) && !defined(CONFIG_SPL_BUILD)
147*b19e288fSShengzhou Liu 	SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE,
148*b19e288fSShengzhou Liu 		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
149*b19e288fSShengzhou Liu 		      0, 19, BOOKE_PAGESZ_2G, 1)
150*b19e288fSShengzhou Liu #endif
151254887a5SShengzhou Liu };
152254887a5SShengzhou Liu 
153254887a5SShengzhou Liu int num_tlb_entries = ARRAY_SIZE(tlb_table);
154