The BAT of system memory is setting as 2GB block, however the mpc8610hpcd is shipping with 512MB DDR2 memory, there will be a hole in the 2GB memory space, no any physical memory cover the hole. It will cause PPC speculative data access to the hole, the result is machine check.
There are two options to resolve the issue, one is changing the block size to 512MB, another one is setting the G bit to DBAT. but the mpc8610hpcd memory is DIMM-based, the size is variable. so the second option is the best. The issue is seen by Timur Tabi with the latest u-boot tree when boot up the Linux kernel. Report-by: Timur Tabi <b04...@freescale.com> Signed-off-by: Dave Liu <dave...@freescale.com> --- include/configs/MPC8610HPCD.h | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/configs/MPC8610HPCD.h b/include/configs/MPC8610HPCD.h index 1d2d659..629c971 100644 --- a/include/configs/MPC8610HPCD.h +++ b/include/configs/MPC8610HPCD.h @@ -338,10 +338,15 @@ #endif /* CONFIG_PCI */ /* - * BAT0 2G Cacheable, non-guarded + * BAT0 2G Cacheable, guarded for data side. it will avoid + * speculative data access to the memory hole when + * the board use the DIMM memory size < 2GB, such as + * 512MB. If you need better performance in u-boot, + * use the matching memory size to BAT. + * * 0x0000_0000 2G DDR */ -#define CONFIG_SYS_DBAT0L (BATL_PP_RW | BATL_MEMCOHERENCE) +#define CONFIG_SYS_DBAT0L (BATL_PP_RW | BATL_MEMCOHERENCE | BATL_GUARDEDSTORAGE) #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 -- 1.6.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot