git-svn-id: https://chibios.svn.sourceforge.net/svnroot/chibios/trunk@5182 35acf78f...
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>
Fri, 15 Feb 2013 09:29:54 +0000 (09:29 +0000)
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>
Fri, 15 Feb 2013 09:29:54 +0000 (09:29 +0000)
docs/reports/SPC56EL60-120.txt
os/hal/platforms/SPC56ELxx/hal_lld.c
os/ports/GCC/PPC/SPC56ELxx/core.s

index c76ff2d..614fbcf 100644 (file)
@@ -100,51 +100,51 @@ Settings: SYSCLK=120
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.1 (Benchmark, messages #1)\r
---- Score : 378081 msgs/S, 756162 ctxswc/S\r
+--- Score : 378087 msgs/S, 756174 ctxswc/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.2 (Benchmark, messages #2)\r
---- Score : 312112 msgs/S, 624224 ctxswc/S\r
+--- Score : 312115 msgs/S, 624230 ctxswc/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.3 (Benchmark, messages #3)\r
---- Score : 312115 msgs/S, 624230 ctxswc/S\r
+--- Score : 312112 msgs/S, 624224 ctxswc/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.4 (Benchmark, context switch)\r
---- Score : 1099584 ctxswc/S\r
+--- Score : 1088328 ctxswc/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.5 (Benchmark, threads, full cycle)\r
---- Score : 244343 threads/S\r
+--- Score : 250733 threads/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.6 (Benchmark, threads, create only)\r
---- Score : 369918 threads/S\r
+--- Score : 369919 threads/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.7 (Benchmark, mass reschedule, 5 threads)\r
---- Score : 94519 reschedules/S, 567114 ctxswc/S\r
+--- Score : 92909 reschedules/S, 557454 ctxswc/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.8 (Benchmark, round robin context switching)\r
---- Score : 633460 ctxswc/S\r
+--- Score : 617000 ctxswc/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.9 (Benchmark, I/O Queues throughput)\r
---- Score : 1104628 bytes/S\r
+--- Score : 1084644 bytes/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.10 (Benchmark, virtual timers set/reset)\r
---- Score : 1295758 timers/S\r
+--- Score : 1325758 timers/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.11 (Benchmark, semaphores wait/signal)\r
---- Score : 1762552 wait+signal/S\r
+--- Score : 1743316 wait+signal/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.12 (Benchmark, mutexes lock/unlock)\r
---- Score : 1227172 lock+unlock/S\r
+--- Score : 1210644 lock+unlock/S\r
 --- Result: SUCCESS\r
 ----------------------------------------------------------------------------\r
 --- Test Case 11.13 (Benchmark, RAM footprint)\r
index 343d143..af465bf 100644 (file)
@@ -109,11 +109,6 @@ void spc_early_init(void) {
 \r
 #if !SPC5_NO_INIT\r
 \r
-  /* Enables the branch prediction, clears and enables the BTB into the\r
-     BUCSR special register (1013).*/\r
-  asm volatile ("li      %%r3, 0x0201          \t\n"\r
-                "mtspr   1013, %%r3": : : "r3");\r
-\r
   /* SSCM initialization. Setting up the most restrictive handling of\r
      invalid accesses to peripherals.*/\r
   SSCM.ERROR.R = 3;                             /* PAE and RAE bits.        */\r
index a0565e0..adeb9b9 100644 (file)
 #define MAS3_SR                 0x00000001\r
 /** @} */\r
 \r
+/**\r
+ * @name    BUCSR registers definitions\r
+ * @{\r
+ */\r
+#define BUCSR_BPEN              0x00000001\r
+#define BUCSR_BPRED_MASK        0x00000006\r
+#define BUCSR_BPRED_0           0x00000000\r
+#define BUCSR_BPRED_1           0x00000002\r
+#define BUCSR_BPRED_2           0x00000004\r
+#define BUCSR_BPRED_3           0x00000006\r
+#define BUCSR_BALLOC_MASK       0x00000030\r
+#define BUCSR_BALLOC_0          0x00000030\r
+#define BUCSR_BALLOC_1          0x00000010\r
+#define BUCSR_BALLOC_2          0x00000020\r
+#define BUCSR_BALLOC_3          0x00000030\r
+#define BUCSR_BALLOC_BFI        0x00000200\r
+/** @} */\r
+\r
 /**\r
  * @name    LICSR1 registers definitions\r
  * @{\r
  */\r
 #define LICSR1_ICE              0x00000001\r
+#define LICSR1_ICINV            0x00000002\r
+#define LICSR1_ICORG            0x00000010\r
 /** @} */\r
 \r
 /**\r
                                  MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)\r
 \r
 #define TLB3_MAS0               (MAS0_TBLMAS_TBL | MAS0_ESEL(3))\r
-#define TLB3_MAS1               (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_2M)\r
+#define TLB3_MAS1               (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_1M)\r
 #define TLB3_MAS2               (MAS2_EPN(0xFFE00000) | MAS2_I)\r
 #define TLB3_MAS3               (MAS3_RPN(0xFFE00000) |                     \\r
                                  MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)\r
+\r
+#define TLB4_MAS0               (MAS0_TBLMAS_TBL | MAS0_ESEL(4))\r
+#define TLB4_MAS1               (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_1M)\r
+#define TLB4_MAS2               (MAS2_EPN(0x8FF00000) | MAS2_I)\r
+#define TLB4_MAS3               (MAS3_RPN(0x8FF00000) |                     \\r
+                                 MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)\r
+\r
+#define TLB5_MAS0               (MAS0_TBLMAS_TBL | MAS0_ESEL(5))\r
+#define TLB5_MAS1               (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_1M)\r
+#define TLB5_MAS2               (MAS2_EPN(0xFFF00000) | MAS2_I)\r
+#define TLB5_MAS3               (MAS3_RPN(0xFFF00000) |                     \\r
+                                 MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)\r
 /** @} */\r
 \r
 /**\r
- * @name    LICSR1 default settings\r
+ * @name    BUCSR default settings\r
  * @{\r
  */\r
-#define LICSR1_DEFAULT          (LICSR1_ICE)\r
+#define BUCSR_DEFAULT           (BUCSR_BPEN | BUCSR_BPRED_0 |               \\r
+                                 BUCSR_BALLOC_0 | BUCSR_BALLOC_BFI)\r
 /** @} */\r
 \r
+/**\r
+ * @name    LICSR1 default settings\r
+ * @{\r
+ */\r
+#define LICSR1_DEFAULT          (LICSR1_ICE | LICSR1_ICORG)\r
+/** @} */\r
 \r
 /**\r
  * @name   MSR register definitions\r
  * @name   MSR default settings\r
  * @{\r
  */\r
-#define MSR_DEFAULT             (MSR_ME)\r
+#define MSR_DEFAULT             (MSR_SPE | MSR_WE | MSR_ME)\r
 /** @} */\r
 \r
 #if !defined(__DOXYGEN__)\r
 \r
         .section    .coreinit, "ax"\r
 \r
+        .align      2\r
+_ramcode:\r
+        tlbwe\r
+        isync\r
+        blr\r
+\r
         .align      2\r
         .globl      _coreinit\r
         .type       _coreinit, @function\r
 _coreinit:\r
-        /*\r
-         * TLB0 allocated to flash.\r
-         */\r
-        lis         %r3, TLB0_MAS0@h\r
-        mtspr       624, %r3        /* MAS0 */\r
-        lis         %r3, TLB0_MAS1@h\r
-        ori         %r3, %r3, TLB0_MAS1@l\r
-        mtspr       625, %r3        /* MAS1 */\r
-        lis         %r3, TLB0_MAS2@h\r
-        ori         %r3, %r3, TLB0_MAS2@l\r
-        mtspr       626, %r3        /* MAS2 */\r
-        lis         %r3, TLB0_MAS3@h\r
-        ori         %r3, %r3, TLB0_MAS3@l\r
-        mtspr       627, %r3        /* MAS3 */\r
-        tlbwe\r
-\r
         /*\r
          * TLB1 allocated to internal RAM.\r
          */\r
@@ -233,18 +262,44 @@ _coreinit:
         tlbwe\r
 \r
         /*\r
-         * Invalidating the remaining TLBs (because debuggers).\r
+         * TLB4 allocated to on-platform peripherals.\r
          */\r
-        lis         %r3, 0\r
+        lis         %r3, TLB4_MAS0@h\r
+        mtspr       624, %r3        /* MAS0 */\r
+        lis         %r3, TLB4_MAS1@h\r
+        ori         %r3, %r3, TLB4_MAS1@l\r
         mtspr       625, %r3        /* MAS1 */\r
+        lis         %r3, TLB4_MAS2@h\r
+        ori         %r3, %r3, TLB4_MAS2@l\r
         mtspr       626, %r3        /* MAS2 */\r
+        lis         %r3, TLB4_MAS3@h\r
+        ori         %r3, %r3, TLB4_MAS3@l\r
         mtspr       627, %r3        /* MAS3 */\r
-        lis         %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(4))@h\r
-        mtspr       624, %r3        /* MAS0 */\r
         tlbwe\r
-        lis         %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(5))@h\r
+\r
+        /*\r
+         * TLB5 allocated to on-platform peripherals.\r
+         */\r
+        lis         %r3, TLB5_MAS0@h\r
         mtspr       624, %r3        /* MAS0 */\r
+        lis         %r3, TLB5_MAS1@h\r
+        ori         %r3, %r3, TLB5_MAS1@l\r
+        mtspr       625, %r3        /* MAS1 */\r
+        lis         %r3, TLB5_MAS2@h\r
+        ori         %r3, %r3, TLB5_MAS2@l\r
+        mtspr       626, %r3        /* MAS2 */\r
+        lis         %r3, TLB5_MAS3@h\r
+        ori         %r3, %r3, TLB5_MAS3@l\r
+        mtspr       627, %r3        /* MAS3 */\r
         tlbwe\r
+\r
+        /*\r
+         * Invalidating the remaining TLBs (because debuggers).\r
+         */\r
+        lis         %r3, 0\r
+        mtspr       625, %r3        /* MAS1 */\r
+        mtspr       626, %r3        /* MAS2 */\r
+        mtspr       627, %r3        /* MAS3 */\r
         lis         %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(6))@h\r
         mtspr       624, %r3        /* MAS0 */\r
         tlbwe\r
@@ -277,9 +332,7 @@ _coreinit:
         tlbwe\r
 \r
         /*\r
-         * Enabling peripheral bridges to allow all operations from all\r
-         * masters. Required in order to enable the following accesses to\r
-         * peripherals.\r
+         * PBRIDGE programmed to allow all accesses from user mode.\r
          */\r
         lis         %r7, 0xFFF0\r
         lis         %r3, 0x7777\r
@@ -303,6 +356,19 @@ _coreinit:
         stw         %r3, 104(%r7)\r
         stw         %r3, 108(%r7)\r
 \r
+e_lis     r6,0xfff3\r
+e_or2i    r6,0x8010\r
+e_li      r7,0xC520\r
+se_stw    r7,0x0(r6)\r
+e_li      r7,0xD928\r
+se_stw    r7,0x0(r6)\r
+\r
+e_lis     r6,0xfff3\r
+e_or2i    r6,0x8000\r
+e_lis     r7,0xff00\r
+e_or2i    r7,0x10A\r
+se_stw    r7,0x0(r6) /* # WEN = 0 */\r
+\r
         /*\r
          * RAM clearing, this device requires a write to all RAM location in\r
          * order to initialize the ECC detection hardware, this is going to\r
@@ -376,8 +442,8 @@ _coreinit:
         mtspr       279, %r31\r
         mtspr       285, %r31       /* TBU     */\r
         mtspr       284, %r31       /* TBL     */\r
-        mtspr       318, %r31       /* DVC1-2  */\r
-        mtspr       319, %r31\r
+//        mtspr       318, %r31       /* DVC1-2  */\r
+//        mtspr       319, %r31\r
         mtspr       562, %r31       /* DBCNT */\r
         mtspr       570, %r31       /* MCSRR0  */\r
         mtspr       571, %r31       /* MCSRR1  */\r
@@ -385,10 +451,50 @@ _coreinit:
         mtspr       605, %r31\r
 \r
         /*\r
-         * Cache enabled.\r
+         * *Finally* the TLB0 is re-allocated to flash, note, the final phase\r
+         * is executed from RAM.\r
          */\r
-        mfspr       %r3, 1011       /* LICSR1 */\r
-        ori         %r3, %r3, LICSR1_DEFAULT\r
+        lis         %r3, TLB0_MAS0@h\r
+        mtspr       624, %r3        /* MAS0 */\r
+        lis         %r3, TLB0_MAS1@h\r
+        ori         %r3, %r3, TLB0_MAS1@l\r
+        mtspr       625, %r3        /* MAS1 */\r
+        lis         %r3, TLB0_MAS2@h\r
+        ori         %r3, %r3, TLB0_MAS2@l\r
+        mtspr       626, %r3        /* MAS2 */\r
+        lis         %r3, TLB0_MAS3@h\r
+        ori         %r3, %r3, TLB0_MAS3@l\r
+        mtspr       627, %r3        /* MAS3 */\r
+        mflr        %r4\r
+        lis         %r6, _ramcode@h\r
+        ori         %r6, %r6, _ramcode@l\r
+        lis         %r7, 0x40010000@h\r
+        mtctr       %r7\r
+        lwz         %r3, 0(%r6)\r
+        stw         %r3, 0(%r7)\r
+        lwz         %r3, 4(%r6)\r
+        stw         %r3, 4(%r7)\r
+        lwz         %r3, 8(%r6)\r
+        stw         %r3, 8(%r7)\r
+        bctrl\r
+        mtlr        %r4\r
+\r
+        /*\r
+         * Branch prediction enabled.\r
+         */\r
+        li          %r3, BUCSR_DEFAULT\r
+        mtspr       1013, %r3       /* BUCSR */\r
+\r
+        /*\r
+         * Cache invalidated and then enabled.\r
+         */\r
+        li          %r3, LICSR1_ICINV\r
+        mtspr       1011, %r3       /* LICSR1 */\r
+.inv:   mfspr       %r3, 1011       /* LICSR1 */\r
+        andi.       %r3, %r3, LICSR1_ICINV\r
+        bne         .inv\r
+        lis         %r3, LICSR1_DEFAULT@h\r
+        ori         %r3, %r3, LICSR1_DEFAULT@l\r
         mtspr       1011, %r3       /* LICSR1 */\r
 \r
         blr\r
@@ -412,6 +518,7 @@ _ivinit:
         /* IVORs initialization.*/\r
         lis         %r3, _unhandled_exception@h\r
         ori         %r3, %r3, _unhandled_exception@l\r
+\r
         mtspr       400, %r3    /* IVOR0-15 */\r
         mtspr       401, %r3\r
         mtspr       402, %r3\r
@@ -431,6 +538,7 @@ _ivinit:
         mtspr       528, %r3        /* IVOR32-34 */\r
         mtspr       529, %r3\r
         mtspr       530, %r3\r
+\r
         blr\r
 \r
         /*\r