summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-01-09 11:12:48 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-01-09 16:45:25 +0100
commitbfde536ec46b58091dbdd9efd4bb0e8c2fd46549 (patch)
tree98d99a8adbfc2cc44b0d6ea8a40b8e899a8ab094
parentbsp/gen83xx: System reset after fatal conditions (diff)
downloadrtems-bfde536ec46b58091dbdd9efd4bb0e8c2fd46549.tar.bz2
bsp/gen83xx: Invalidate caches only if disabled
-rw-r--r--c/src/lib/libbsp/powerpc/gen83xx/startup/cpuinit.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen83xx/startup/cpuinit.c b/c/src/lib/libbsp/powerpc/gen83xx/startup/cpuinit.c
index 0cffc24273..ab409ca7ed 100644
--- a/c/src/lib/libbsp/powerpc/gen83xx/startup/cpuinit.c
+++ b/c/src/lib/libbsp/powerpc/gen83xx/startup/cpuinit.c
@@ -141,14 +141,21 @@ void cpu_init( void)
{
BAT dbat, ibat;
uint32_t msr;
+ uint32_t hid0;
/* Clear MMU and segment registers */
clear_mmu_regs();
/* Clear caches */
- PPC_CLEAR_SPECIAL_PURPOSE_REGISTER_BITS( HID0, HID0_ILOCK | HID0_DLOCK | HID0_ICE | HID0_DCE);
- PPC_SET_SPECIAL_PURPOSE_REGISTER_BITS( HID0, HID0_ICFI | HID0_DCI);
- PPC_CLEAR_SPECIAL_PURPOSE_REGISTER_BITS( HID0, HID0_ICFI | HID0_DCI);
+ hid0 = PPC_SPECIAL_PURPOSE_REGISTER(HID0);
+ if ((hid0 & (HID0_ICE | HID0_DCE)) == 0) {
+ hid0 &= ~(HID0_ILOCK | HID0_DLOCK | HID0_ICE | HID0_DCE);
+ PPC_SET_SPECIAL_PURPOSE_REGISTER(HID0, hid0);
+ hid0 |= HID0_ICFI | HID0_DCI;
+ PPC_SET_SPECIAL_PURPOSE_REGISTER(HID0, hid0);
+ hid0 &= ~(HID0_ICFI | HID0_DCI);
+ PPC_SET_SPECIAL_PURPOSE_REGISTER(HID0, hid0);
+ }
/*
* Set up IBAT registers in MMU