mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-01 00:49:43 +00:00
Merge branch 'master' of git://git.denx.de/u-boot-mpc85xx
This commit is contained in:
commit
f3dfbb6816
11 changed files with 118 additions and 22 deletions
|
@ -127,6 +127,8 @@ initdram(int board_type)
|
|||
dram_size = fixed_sdram();
|
||||
#endif
|
||||
|
||||
setup_ddr_bat(dram_size);
|
||||
|
||||
puts(" DDR: ");
|
||||
return dram_size;
|
||||
}
|
||||
|
|
|
@ -74,6 +74,8 @@ initdram(int board_type)
|
|||
dram_size = fixed_sdram();
|
||||
#endif
|
||||
|
||||
setup_ddr_bat(dram_size);
|
||||
|
||||
puts(" DDR: ");
|
||||
return dram_size;
|
||||
}
|
||||
|
|
|
@ -70,18 +70,40 @@ __secondary_start_page:
|
|||
mttbu r3
|
||||
|
||||
/* Enable/invalidate the I-Cache */
|
||||
mfspr r0,SPRN_L1CSR1
|
||||
ori r0,r0,(L1CSR1_ICFI|L1CSR1_ICE)
|
||||
mtspr SPRN_L1CSR1,r0
|
||||
lis r2,(L1CSR1_ICFI|L1CSR1_ICLFR)@h
|
||||
ori r2,r2,(L1CSR1_ICFI|L1CSR1_ICLFR)@l
|
||||
mtspr SPRN_L1CSR1,r2
|
||||
1:
|
||||
mfspr r3,SPRN_L1CSR1
|
||||
and. r1,r3,r2
|
||||
bne 1b
|
||||
|
||||
lis r3,(L1CSR1_CPE|L1CSR1_ICE)@h
|
||||
ori r3,r3,(L1CSR1_CPE|L1CSR1_ICE)@l
|
||||
mtspr SPRN_L1CSR1,r3
|
||||
isync
|
||||
2:
|
||||
mfspr r3,SPRN_L1CSR1
|
||||
andi. r1,r3,L1CSR1_ICE@l
|
||||
beq 2b
|
||||
|
||||
/* Enable/invalidate the D-Cache */
|
||||
mfspr r0,SPRN_L1CSR0
|
||||
ori r0,r0,(L1CSR0_DCFI|L1CSR0_DCE)
|
||||
msync
|
||||
isync
|
||||
mtspr SPRN_L1CSR0,r0
|
||||
lis r2,(L1CSR0_DCFI|L1CSR0_DCLFR)@h
|
||||
ori r2,r2,(L1CSR0_DCFI|L1CSR0_DCLFR)@l
|
||||
mtspr SPRN_L1CSR0,r2
|
||||
1:
|
||||
mfspr r3,SPRN_L1CSR0
|
||||
and. r1,r3,r2
|
||||
bne 1b
|
||||
|
||||
lis r3,(L1CSR0_CPE|L1CSR0_DCE)@h
|
||||
ori r3,r3,(L1CSR0_CPE|L1CSR0_DCE)@l
|
||||
mtspr SPRN_L1CSR0,r3
|
||||
isync
|
||||
2:
|
||||
mfspr r3,SPRN_L1CSR0
|
||||
andi. r1,r3,L1CSR0_DCE@l
|
||||
beq 2b
|
||||
|
||||
#define toreset(x) (x - __secondary_start_page + 0xfffff000)
|
||||
|
||||
|
|
|
@ -108,13 +108,41 @@ _start_e500:
|
|||
mtspr L1CSR2,r2
|
||||
#endif
|
||||
|
||||
lis r2,L1CSR0_CPE@H /* enable parity */
|
||||
ori r2,r2,L1CSR0_DCE
|
||||
mtspr L1CSR0,r2 /* enable L1 Dcache */
|
||||
/* Enable/invalidate the I-Cache */
|
||||
lis r2,(L1CSR1_ICFI|L1CSR1_ICLFR)@h
|
||||
ori r2,r2,(L1CSR1_ICFI|L1CSR1_ICLFR)@l
|
||||
mtspr SPRN_L1CSR1,r2
|
||||
1:
|
||||
mfspr r3,SPRN_L1CSR1
|
||||
and. r1,r3,r2
|
||||
bne 1b
|
||||
|
||||
lis r3,(L1CSR1_CPE|L1CSR1_ICE)@h
|
||||
ori r3,r3,(L1CSR1_CPE|L1CSR1_ICE)@l
|
||||
mtspr SPRN_L1CSR1,r3
|
||||
isync
|
||||
mtspr L1CSR1,r2 /* enable L1 Icache */
|
||||
2:
|
||||
mfspr r3,SPRN_L1CSR1
|
||||
andi. r1,r3,L1CSR1_ICE@l
|
||||
beq 2b
|
||||
|
||||
/* Enable/invalidate the D-Cache */
|
||||
lis r2,(L1CSR0_DCFI|L1CSR0_DCLFR)@h
|
||||
ori r2,r2,(L1CSR0_DCFI|L1CSR0_DCLFR)@l
|
||||
mtspr SPRN_L1CSR0,r2
|
||||
1:
|
||||
mfspr r3,SPRN_L1CSR0
|
||||
and. r1,r3,r2
|
||||
bne 1b
|
||||
|
||||
lis r3,(L1CSR0_CPE|L1CSR0_DCE)@h
|
||||
ori r3,r3,(L1CSR0_CPE|L1CSR0_DCE)@l
|
||||
mtspr SPRN_L1CSR0,r3
|
||||
isync
|
||||
msync
|
||||
2:
|
||||
mfspr r3,SPRN_L1CSR0
|
||||
andi. r1,r3,L1CSR0_DCE@l
|
||||
beq 2b
|
||||
|
||||
/* Setup interrupt vectors */
|
||||
lis r1,TEXT_BASE@h
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2006,2009 Freescale Semiconductor, Inc.
|
||||
* Copyright 2006,2009-2010 Freescale Semiconductor, Inc.
|
||||
* Jeff Brown
|
||||
* Srikanth Srinivasan (srikanth.srinivasan@freescale.com)
|
||||
*
|
||||
|
@ -197,3 +197,37 @@ void mpc86xx_reginfo(void)
|
|||
printf("\tBR7\t0x%08X\tOR7\t0x%08X \n", in_be32(&lbc->br7), in_be32(&lbc->or7));
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the DDR BATs to reflect the actual size of DDR.
|
||||
*
|
||||
* dram_size is the actual size of DDR, in bytes
|
||||
*
|
||||
* Note: we assume that CONFIG_MAX_MEM_MAPPED is 2G or smaller as we only
|
||||
* are using a single BAT to cover DDR.
|
||||
*
|
||||
* If this is not true, (e.g. CONFIG_MAX_MEM_MAPPED is 2GB but HID0_XBSEN
|
||||
* is not defined) then we might have a situation where U-Boot will attempt
|
||||
* to relocated itself outside of the region mapped by DBAT0.
|
||||
* This will cause a machine check.
|
||||
*
|
||||
* Currently we are limited to power of two sized DDR since we only use a
|
||||
* single bat. If a non-power of two size is used that is less than
|
||||
* CONFIG_MAX_MEM_MAPPED u-boot will crash.
|
||||
*
|
||||
*/
|
||||
void setup_ddr_bat(phys_addr_t dram_size)
|
||||
{
|
||||
unsigned long batu, bl;
|
||||
|
||||
bl = TO_BATU_BL(min(dram_size, CONFIG_MAX_MEM_MAPPED));
|
||||
|
||||
if (BATU_SIZE(bl) != dram_size) {
|
||||
u64 sz = (u64)dram_size - BATU_SIZE(bl);
|
||||
print_size(sz, " left unmapped\n");
|
||||
}
|
||||
|
||||
batu = bl | BATU_VS | BATU_VP;
|
||||
write_bat(DBAT0, batu, CONFIG_SYS_DBAT0L);
|
||||
write_bat(IBAT0, batu, CONFIG_SYS_IBAT0L);
|
||||
}
|
||||
|
|
|
@ -138,8 +138,12 @@ int cpu_init_r(void)
|
|||
/* Set up BAT registers */
|
||||
void setup_bats(void)
|
||||
{
|
||||
#if defined(CONFIG_SYS_DBAT0U) && defined(CONFIG_SYS_DBAT0L)
|
||||
write_bat(DBAT0, CONFIG_SYS_DBAT0U, CONFIG_SYS_DBAT0L);
|
||||
#endif
|
||||
#if defined(CONFIG_SYS_IBAT0U) && defined(CONFIG_SYS_IBAT0L)
|
||||
write_bat(IBAT0, CONFIG_SYS_IBAT0U, CONFIG_SYS_IBAT0L);
|
||||
#endif
|
||||
write_bat(DBAT1, CONFIG_SYS_DBAT1U, CONFIG_SYS_DBAT1L);
|
||||
write_bat(IBAT1, CONFIG_SYS_IBAT1U, CONFIG_SYS_IBAT1L);
|
||||
write_bat(DBAT2, CONFIG_SYS_DBAT2U, CONFIG_SYS_DBAT2L);
|
||||
|
|
|
@ -213,7 +213,11 @@ extern void print_bats(void);
|
|||
#define BATL_PADDR(x) ((phys_addr_t)((x & 0xfffe0000) \
|
||||
| ((x & 0x0e00ULL) << 24) \
|
||||
| ((x & 0x04ULL) << 30)))
|
||||
#define BATU_SIZE(x) (1UL << (fls((x & BATU_BL_MAX) >> 2) + 17))
|
||||
#define BATU_SIZE(x) (1ULL << (fls((x & BATU_BL_MAX) >> 2) + 17))
|
||||
|
||||
/* bytes into BATU_BL */
|
||||
#define TO_BATU_BL(x) \
|
||||
(u32)((((1ull << __ilog2_u64((u64)x)) / (128 * 1024)) - 1) * 4)
|
||||
|
||||
/* Used to set up SDR1 register */
|
||||
#define HASH_TABLE_SIZE_64K 0x00010000
|
||||
|
|
|
@ -485,10 +485,12 @@
|
|||
#define SPRN_L2CFG0 0x207 /* L2 Cache Configuration Register 0 */
|
||||
#define SPRN_L1CSR0 0x3f2 /* L1 Data Cache Control and Status Register 0 */
|
||||
#define L1CSR0_CPE 0x00010000 /* Data Cache Parity Enable */
|
||||
#define L1CSR0_DCLFR 0x00000100 /* D-Cache Lock Flash Reset */
|
||||
#define L1CSR0_DCFI 0x00000002 /* Data Cache Flash Invalidate */
|
||||
#define L1CSR0_DCE 0x00000001 /* Data Cache Enable */
|
||||
#define SPRN_L1CSR1 0x3f3 /* L1 Instruction Cache Control and Status Register 1 */
|
||||
#define L1CSR1_CPE 0x00010000 /* Instruction Cache Parity Enable */
|
||||
#define L1CSR1_ICLFR 0x00000100 /* I-Cache Lock Flash Reset */
|
||||
#define L1CSR1_ICFI 0x00000002 /* Instruction Cache Flash Invalidate */
|
||||
#define L1CSR1_ICE 0x00000001 /* Instruction Cache Enable */
|
||||
#define SPRN_L1CSR2 0x25e /* L1 Data Cache Control and Status Register 2 */
|
||||
|
|
|
@ -341,10 +341,8 @@
|
|||
* BAT0 2G Cacheable, non-guarded
|
||||
* 0x0000_0000 2G DDR
|
||||
*/
|
||||
#define CONFIG_SYS_DBAT0L (BATL_PP_RW | BATL_MEMCOHERENCE)
|
||||
#define CONFIG_SYS_DBAT0U (BATU_BL_2G | BATU_VS | BATU_VP)
|
||||
#define CONFIG_SYS_IBAT0L (BATL_PP_RW | BATL_MEMCOHERENCE )
|
||||
#define CONFIG_SYS_IBAT0U CONFIG_SYS_DBAT0U
|
||||
#define CONFIG_SYS_DBAT0L (BATL_PP_RW)
|
||||
#define CONFIG_SYS_IBAT0L (BATL_PP_RW)
|
||||
|
||||
/*
|
||||
* BAT1 1G Cache-inhibited, guarded
|
||||
|
|
|
@ -482,9 +482,7 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
|
|||
* BAT0 DDR
|
||||
*/
|
||||
#define CONFIG_SYS_DBAT0L (BATL_PP_RW | BATL_MEMCOHERENCE)
|
||||
#define CONFIG_SYS_DBAT0U (BATU_BL_2G | BATU_VS | BATU_VP)
|
||||
#define CONFIG_SYS_IBAT0L (BATL_PP_RW | BATL_MEMCOHERENCE )
|
||||
#define CONFIG_SYS_IBAT0U CONFIG_SYS_DBAT0U
|
||||
#define CONFIG_SYS_IBAT0L (BATL_PP_RW | BATL_MEMCOHERENCE)
|
||||
|
||||
/*
|
||||
* BAT1 LBC (PIXIS/CF)
|
||||
|
|
|
@ -83,5 +83,7 @@ static __inline__ unsigned long get_l2cr (void)
|
|||
return l2cr_val;
|
||||
}
|
||||
|
||||
void setup_ddr_bat(phys_addr_t dram_size);
|
||||
|
||||
#endif /* _ASMLANGUAGE */
|
||||
#endif /* __MPC86xx_H__ */
|
||||
|
|
Loading…
Reference in a new issue