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

Reply via email to