aboutsummaryrefslogtreecommitdiffstats
path: root/os/ports/GCC/PPC/SPC56ELxx
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-02-04 13:26:08 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-02-04 13:26:08 +0000
commitb0c635e0d53493bb2812528f4efdd765c56ebe32 (patch)
treecffde293fa6102815b82b29fb3c3bcd3981f0b85 /os/ports/GCC/PPC/SPC56ELxx
parent6d58b61eca6da57b7305ad5f2fc954d10b9eb3e4 (diff)
downloadChibiOS-b0c635e0d53493bb2812528f4efdd765c56ebe32.tar.gz
ChibiOS-b0c635e0d53493bb2812528f4efdd765c56ebe32.tar.bz2
ChibiOS-b0c635e0d53493bb2812528f4efdd765c56ebe32.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5110 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/ports/GCC/PPC/SPC56ELxx')
-rw-r--r--os/ports/GCC/PPC/SPC56ELxx/bam.s80
1 files changed, 78 insertions, 2 deletions
diff --git a/os/ports/GCC/PPC/SPC56ELxx/bam.s b/os/ports/GCC/PPC/SPC56ELxx/bam.s
index be7e83cd9..234f98642 100644
--- a/os/ports/GCC/PPC/SPC56ELxx/bam.s
+++ b/os/ports/GCC/PPC/SPC56ELxx/bam.s
@@ -1,6 +1,6 @@
/*
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
- 2011,2012,2013 Giovanni Di Sirio.
+ 2011,2012,2013 Giovanni Di Sirio.
This file is part of ChibiOS/RT.
@@ -35,8 +35,26 @@
/* RAM clearing, this device requires a write to all RAM location in
order to initialize the ECC detection hardware, this is going to
- slow down the startup but there is no way around.*/
+ slow down the startup but there is no way around.
+ Note all registers are cleared in order to avoid possible problems
+ with lockstep mode.*/
.clear_ecc:
+ xor %r0, %r0, %r0
+ xor %r1, %r1, %r1
+ xor %r2, %r2, %r2
+ xor %r3, %r3, %r3
+ xor %r4, %r4, %r4
+ xor %r5, %r5, %r5
+ xor %r6, %r6, %r6
+ xor %r7, %r7, %r7
+ xor %r8, %r8, %r8
+ xor %r9, %r9, %r9
+ xor %r10, %r10, %r10
+ xor %r11, %r11, %r11
+ xor %r12, %r12, %r12
+ xor %r13, %r13, %r13
+ xor %r14, %r14, %r14
+ xor %r15, %r15, %r15
xor %r16, %r16, %r16
xor %r17, %r17, %r17
xor %r18, %r18, %r18
@@ -64,6 +82,64 @@
addi %r4, %r4, 64
b .cleareccloop
.cleareccend:
+
+ /* Special function registers clearing, required in order to avoid
+ possible problems with lockstep mode.*/
+ mtcrf 0xFF, r31
+ mtspr 8, r31 /* LR */
+ mtspr 9, r31 /* CTR */
+
+ mtspr 272, r31 /* SPRG1-7 */
+ mtspr 273, r31
+ mtspr 274, r31
+ mtspr 275, r31
+ mtspr 276, r31
+ mtspr 277, r31
+ mtspr 278, r31
+ mtspr 279, r31
+ mtspr 604, r31 /* SPRG8-9 */
+ mtspr 605, r31
+ mtspr 26, r31 /* SRR0-1 */
+ mtspr 27, r31
+ mtspr 58, r31 /* CSRR0-1 */
+ mtspr 59, r31
+ mtspr 61, r31 /* DEAR */
+
+ mtspr 22, r31 /* DEC */
+ mtspr 54, r31 /* DECAR */
+ mtspr 285, r31 /* TBU */
+ mtspr 284, r31 /* TBL */
+
+ mtspr 570, r31 /* MCSRR0 */
+ mtspr 571, r31 /* MCSRR1 */
+
+ mtspr 256, r31 /* USPRG0 */
+
+ mtspr 562, r31 /* DBCNT */
+
+ mtspr 63, r31 /* IVPR */
+ mtspr 318, r31 /* DVC1-2 */
+ mtspr 319, r31
+ mtspr 400, r31 /* IVOR0-15 */
+ mtspr 401, r31
+ mtspr 402, r31
+ mtspr 403, r31
+ mtspr 404, r31
+ mtspr 405, r31
+ mtspr 406, r31
+ mtspr 407, r31
+ mtspr 408, r31
+ mtspr 409, r31
+ mtspr 410, r31
+ mtspr 411, r31
+ mtspr 412, r31
+ mtspr 413, r31
+ mtspr 414, r31
+ mtspr 415, r31
+ mtspr 528, r31 /* IVOR32-34 */
+ mtspr 529, r31
+ mtspr 530, r31
+
b _boot_address
#endif /* !defined(__DOXYGEN__) */