mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-04 05:50:17 +00:00 
			
		
		
		
	Most predefined TLB tables don't have memory coherence bit set for SDRAM. This wasn't an issue before invalidate_dcache_range() function was enabled. Without the coherence bit, dcache invalidation doesn't automatically flush the cache. The coherence bit is already set when dynamic TLB table is used. For some boards with different SPL boot method, or with legacy fixed setting, this bit needs to be set in TLB files. Signed-off-by: York Sun <york.sun@nxp.com>
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Copyright 2008 Freescale Semiconductor, Inc.
 | 
						|
 *
 | 
						|
 * (C) Copyright 2000
 | 
						|
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier:	GPL-2.0+
 | 
						|
 */
 | 
						|
 | 
						|
#include <common.h>
 | 
						|
#include <asm/mmu.h>
 | 
						|
 | 
						|
struct fsl_e_tlb_entry tlb_table[] = {
 | 
						|
	/* TLB 0 - for temp stack in cache */
 | 
						|
	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR, CONFIG_SYS_INIT_RAM_ADDR,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
 | 
						|
		      0, 0, BOOKE_PAGESZ_4K, 0),
 | 
						|
	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024,
 | 
						|
		      CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
 | 
						|
		      0, 0, BOOKE_PAGESZ_4K, 0),
 | 
						|
	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024,
 | 
						|
		      CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
 | 
						|
		      0, 0, BOOKE_PAGESZ_4K, 0),
 | 
						|
	SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024,
 | 
						|
		      CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, 0,
 | 
						|
		      0, 0, BOOKE_PAGESZ_4K, 0),
 | 
						|
 | 
						|
	/*
 | 
						|
	 * TLB 0:	64M	Non-cacheable, guarded
 | 
						|
	 * 0xfc000000	56M	unused
 | 
						|
	 * 0xff800000	8M	boot FLASH
 | 
						|
	 *	.... or ....
 | 
						|
	 * 0xfc000000	64M	user flash
 | 
						|
	 *
 | 
						|
	 * Out of reset this entry is only 4K.
 | 
						|
	 */
 | 
						|
	SET_TLB_ENTRY(1, 0xfc000000, 0xfc000000,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
 | 
						|
		      0, 0, BOOKE_PAGESZ_64M, 1),
 | 
						|
 | 
						|
	/*
 | 
						|
	 * TLB 1:	1G	Non-cacheable, guarded
 | 
						|
	 * 0x80000000	512M	PCI1 MEM
 | 
						|
	 * 0xa0000000	512M	PCIe MEM
 | 
						|
	 */
 | 
						|
	SET_TLB_ENTRY(1, CONFIG_SYS_PCI1_MEM_VIRT, CONFIG_SYS_PCI1_MEM_PHYS,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
 | 
						|
		      0, 1, BOOKE_PAGESZ_1G, 1),
 | 
						|
 | 
						|
	/*
 | 
						|
	 * TLB 2:	64M	Non-cacheable, guarded
 | 
						|
	 * 0xe0000000	1M	CCSRBAR
 | 
						|
	 * 0xe2000000	8M	PCI1 IO
 | 
						|
	 * 0xe2800000	8M	PCIe IO
 | 
						|
	 */
 | 
						|
	SET_TLB_ENTRY(1, CONFIG_SYS_CCSRBAR, CONFIG_SYS_CCSRBAR_PHYS,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
 | 
						|
		      0, 2, BOOKE_PAGESZ_64M, 1),
 | 
						|
 | 
						|
#ifdef CONFIG_SYS_LBC_SDRAM_BASE
 | 
						|
	/*
 | 
						|
	 * TLB 3:	64M	Cacheable, non-guarded
 | 
						|
	 * 0xf0000000	64M	LBC SDRAM First half
 | 
						|
	 */
 | 
						|
	SET_TLB_ENTRY(1, CONFIG_SYS_LBC_SDRAM_BASE, CONFIG_SYS_LBC_SDRAM_BASE,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_M,
 | 
						|
		      0, 3, BOOKE_PAGESZ_64M, 1),
 | 
						|
 | 
						|
	/*
 | 
						|
	 * TLB 4:	64M	Cacheable, non-guarded
 | 
						|
	 * 0xf4000000	64M	LBC SDRAM Second half
 | 
						|
	 */
 | 
						|
	SET_TLB_ENTRY(1, CONFIG_SYS_LBC_SDRAM_BASE + 0x4000000,
 | 
						|
		      CONFIG_SYS_LBC_SDRAM_BASE + 0x4000000,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_M,
 | 
						|
		      0, 4, BOOKE_PAGESZ_64M, 1),
 | 
						|
#endif
 | 
						|
 | 
						|
	/*
 | 
						|
	 * TLB 5:	16M	Cacheable, non-guarded
 | 
						|
	 * 0xf8000000	1M	7-segment LED display
 | 
						|
	 * 0xf8100000	1M	User switches
 | 
						|
	 * 0xf8300000	1M	Board revision
 | 
						|
	 * 0xf8b00000	1M	EEPROM
 | 
						|
	 */
 | 
						|
	SET_TLB_ENTRY(1, CONFIG_SYS_EPLD_BASE, CONFIG_SYS_EPLD_BASE,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
 | 
						|
		      0, 5, BOOKE_PAGESZ_16M, 1),
 | 
						|
 | 
						|
#ifndef CONFIG_SYS_ALT_BOOT
 | 
						|
	/*
 | 
						|
	 * TLB 6:	64M	Non-cacheable, guarded
 | 
						|
	 * 0xec000000	64M	64MB user FLASH
 | 
						|
	 */
 | 
						|
	SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH, CONFIG_SYS_ALT_FLASH,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
 | 
						|
		      0, 6, BOOKE_PAGESZ_64M, 1),
 | 
						|
#else
 | 
						|
	/*
 | 
						|
	 * TLB 6:	4M	Non-cacheable, guarded
 | 
						|
	 * 0xef800000	4M	1st 1/2 8MB soldered FLASH
 | 
						|
	 */
 | 
						|
	SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH, CONFIG_SYS_ALT_FLASH,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
 | 
						|
		      0, 6, BOOKE_PAGESZ_4M, 1),
 | 
						|
 | 
						|
	/*
 | 
						|
	 * TLB 7:	4M	Non-cacheable, guarded
 | 
						|
	 * 0xefc00000	4M	2nd half 8MB soldered FLASH
 | 
						|
	 */
 | 
						|
	SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH + 0x400000,
 | 
						|
		      CONFIG_SYS_ALT_FLASH + 0x400000,
 | 
						|
		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
 | 
						|
		      0, 7, BOOKE_PAGESZ_4M, 1),
 | 
						|
#endif
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
int num_tlb_entries = ARRAY_SIZE(tlb_table);
 |