[U-Boot] [PATCH] mpc86xx: set the DDR BATs after calculating true DDR size

Timur Tabi timur at freescale.com
Tue Mar 30 05:40:03 CEST 2010


On Mon, Mar 29, 2010 at 10:02 PM, Kumar Gala <galak at kernel.crashing.org> wrote:

> + * We also assume that the XBL bits are ignored by the processor (even if set)
> + * if extended BAT addressing is disabled.

Since we don't read/modify/write that BATs, this comment is probably
not true any more.

> -#define BATU_SIZE(x) (1UL << (fls((x & BATU_BL_MAX) >> 2) + 17))
> +#define BATU_SIZE(x) (1ULL << (fls((x & BATU_BL_MAX) >> 2) + 17))
> +
> +#define TO_BATU_BL(x) ((((x)/(128*1024)) - 1) * 4) /* bytes into BATU_BL */

I don't think this works if (x) is not a power of two.  E.g.,
TO_BATU_BL(1.5GB) = 0xbffc.  It should truncate the number to 1GB and
give us 7ffc.  This is one of the issues that Becky raised.  I don't
know if there's some simple way to truncate a number to its lowest
power of two.

> --- a/include/configs/MPC8610HPCD.h
> +++ b/include/configs/MPC8610HPCD.h
> @@ -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
> diff --git a/include/configs/MPC8641HPCN.h b/include/configs/MPC8641HPCN.h
> index 12a8f60..94e4d24 100644
> --- a/include/configs/MPC8641HPCN.h
> +++ b/include/configs/MPC8641HPCN.h
> @@ -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)

Why do we need BATL_MEMCOHERENCE on 8641 but not on 8610?

-- 
Timur Tabi
Linux kernel developer at Freescale


More information about the U-Boot mailing list