diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-01-09 11:12:48 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-01-09 16:45:25 +0100 |
commit | bfde536ec46b58091dbdd9efd4bb0e8c2fd46549 (patch) | |
tree | 98d99a8adbfc2cc44b0d6ea8a40b8e899a8ab094 | |
parent | bsp/gen83xx: System reset after fatal conditions (diff) | |
download | rtems-bfde536ec46b58091dbdd9efd4bb0e8c2fd46549.tar.bz2 |
bsp/gen83xx: Invalidate caches only if disabled
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen83xx/startup/cpuinit.c | 13 |
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 |