diff options
Diffstat (limited to 'lib_ppc')
| -rw-r--r-- | lib_ppc/bat_rw.c | 28 | ||||
| -rw-r--r-- | lib_ppc/board.c | 2 | 
2 files changed, 29 insertions, 1 deletions
diff --git a/lib_ppc/bat_rw.c b/lib_ppc/bat_rw.c index a40b377bc..c48c24015 100644 --- a/lib_ppc/bat_rw.c +++ b/lib_ppc/bat_rw.c @@ -27,14 +27,23 @@  #include <asm/mmu.h>  #include <asm/io.h> +#ifdef CONFIG_ADDR_MAP +#include <addr_map.h> +#endif + +DECLARE_GLOBAL_DATA_PTR; +  int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)  { +	int batn = -1; +  	sync();  	switch (bat) {  	case DBAT0:  		mtspr (DBAT0L, lower);  		mtspr (DBAT0U, upper); +		batn = 0;  		break;  	case IBAT0:  		mtspr (IBAT0L, lower); @@ -43,6 +52,7 @@ int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)  	case DBAT1:  		mtspr (DBAT1L, lower);  		mtspr (DBAT1U, upper); +		batn = 1;  		break;  	case IBAT1:  		mtspr (IBAT1L, lower); @@ -51,6 +61,7 @@ int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)  	case DBAT2:  		mtspr (DBAT2L, lower);  		mtspr (DBAT2U, upper); +		batn = 2;  		break;  	case IBAT2:  		mtspr (IBAT2L, lower); @@ -59,6 +70,7 @@ int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)  	case DBAT3:  		mtspr (DBAT3L, lower);  		mtspr (DBAT3U, upper); +		batn = 3;  		break;  	case IBAT3:  		mtspr (IBAT3L, lower); @@ -68,6 +80,7 @@ int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)  	case DBAT4:  		mtspr (DBAT4L, lower);  		mtspr (DBAT4U, upper); +		batn = 4;  		break;  	case IBAT4:  		mtspr (IBAT4L, lower); @@ -76,6 +89,7 @@ int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)  	case DBAT5:  		mtspr (DBAT5L, lower);  		mtspr (DBAT5U, upper); +		batn = 5;  		break;  	case IBAT5:  		mtspr (IBAT5L, lower); @@ -84,6 +98,7 @@ int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)  	case DBAT6:  		mtspr (DBAT6L, lower);  		mtspr (DBAT6U, upper); +		batn = 6;  		break;  	case IBAT6:  		mtspr (IBAT6L, lower); @@ -92,6 +107,7 @@ int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)  	case DBAT7:  		mtspr (DBAT7L, lower);  		mtspr (DBAT7U, upper); +		batn = 7;  		break;  	case IBAT7:  		mtspr (IBAT7L, lower); @@ -102,6 +118,18 @@ int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)  		return (-1);  	} +#ifdef CONFIG_ADDR_MAP +	if ((gd->flags & GD_FLG_RELOC) && (batn >= 0)) { +		phys_size_t size; +		if (!BATU_VALID(upper)) +			size = 0; +		else +			size = BATU_SIZE(upper); +		addrmap_set_entry(BATU_VADDR(upper), BATL_PADDR(lower), +				  size, batn); +	} +#endif +  	sync();  	isync(); diff --git a/lib_ppc/board.c b/lib_ppc/board.c index df1cf13b5..2262bb4a0 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -685,7 +685,7 @@ void board_init_r (gd_t *id, ulong dest_addr)  	 */  	trap_init (dest_addr); -#if defined(CONFIG_ADDR_MAP) && defined(CONFIG_E500) +#ifdef CONFIG_ADDR_MAP  	init_addr_map();  #endif  |