diff options
| author | Wolfgang Denk <wd@denx.de> | 2009-08-18 13:57:04 +0200 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2009-08-18 13:57:04 +0200 | 
| commit | 2bcbd429f44e32ead38a33f372e4c027e66710f9 (patch) | |
| tree | 379423f44ae69ff1cc6d267139a60605a27d46f8 | |
| parent | 9af019f579e6090ade0adb8e883bf28d16f0563a (diff) | |
| parent | e393e2e9bc5cd3d5484e193d1380e7cd7587ab5c (diff) | |
| download | olio-uboot-2014.01-2bcbd429f44e32ead38a33f372e4c027e66710f9.tar.xz olio-uboot-2014.01-2bcbd429f44e32ead38a33f372e4c027e66710f9.zip | |
Merge branch 'master' of git://git.denx.de/u-boot-mpc85xx
| -rw-r--r-- | cpu/mpc85xx/tlb.c | 28 | 
1 files changed, 22 insertions, 6 deletions
| diff --git a/cpu/mpc85xx/tlb.c b/cpu/mpc85xx/tlb.c index 46925f138..43ef1ffe6 100644 --- a/cpu/mpc85xx/tlb.c +++ b/cpu/mpc85xx/tlb.c @@ -110,15 +110,31 @@ void init_tlbs(void)  void init_addr_map(void)  {  	int i; +	unsigned int max_cam = (mfspr(SPRN_TLB1CFG) >> 16) & 0xff; -	for (i = 0; i < num_tlb_entries; i++) { -		if (tlb_table[i].tlb == 0) +	/* walk all the entries */ +	for (i = 0; i < max_cam; i++) { +		unsigned long epn; +		u32 tsize, _mas1;	 +		phys_addr_t rpn; + +		mtspr(MAS0, FSL_BOOKE_MAS0(1, i, 0)); + +		asm volatile("tlbre;isync"); +		_mas1 = mfspr(MAS1); + +		/* if the entry isn't valid skip it */ +		if (!(_mas1 & MAS1_VALID))  			continue; -		addrmap_set_entry(tlb_table[i].epn, -			tlb_table[i].rpn, -			(1UL << ((tlb_table[i].tsize * 2) + 10)), -			tlb_table[i].esel); +		tsize = (_mas1 >> 8) & 0xf; +		epn = mfspr(MAS2) & MAS2_EPN; +		rpn = mfspr(MAS3) & MAS3_RPN; +#ifdef CONFIG_ENABLE_36BIT_PHYS +		rpn |= ((phys_addr_t)mfspr(MAS7)) << 32; +#endif + +		addrmap_set_entry(epn, rpn, (1UL << ((tsize * 2) + 10)), i);  	}  	return ; |