source: rtems/c/src/lib/libcpu/powerpc/new-exceptions/e500_raw_exc_init.c @ b679966d

4.104.114.95
Last change on this file since b679966d was b679966d, checked in by Joel Sherrill <joel.sherrill@…>, on 08/18/08 at 21:17:06

2008-08-18 Joel Sherrill <joel.sherrill@…>

  • mpc6xx/mmu/pte121.c, mpc6xx/mmu/pte121.h, mpc6xx/timer/timer.c, new-exceptions/e500_raw_exc_init.c, new-exceptions/bspsupport/ppc_exc_bspsupp.h, new-exceptions/bspsupport/vectors_init.c: Fix warnings.
  • Property mode set to 100644
File size: 2.8 KB
Line 
1#include <libcpu/cpuIdent.h>
2#include <libcpu/raw_exception.h>
3
4#define MTIVPR(prefix) asm volatile("mtivpr %0"::"r"(prefix));
5#define MTIVOR(x, vec) asm volatile("mtivor"#x" %0"::"r"(vec));
6
7/* Use during early init for initializing the e500 IVOR/IVPR registers */
8void
9e500_setup_raw_exceptions(void)
10{
11        unsigned c;
12        if ( ! (c = ppc_cpu_is_bookE()) || PPC_BOOKE_405 == c )
13                return;
14
15        /* Set interupt vector prefix register */
16        MTIVPR( ppc_exc_vector_base);
17
18        /* setup vectors to be compatible with classic PPC */
19        MTIVOR(0,  ppc_get_vector_addr(ASM_BOOKE_CRIT_VECTOR)); /* Critical input not (yet) supported; use reset vector */
20        MTIVOR(1,  ppc_get_vector_addr(ASM_MACH_VECTOR));
21        MTIVOR(2,  ppc_get_vector_addr(ASM_PROT_VECTOR));
22        MTIVOR(3,  ppc_get_vector_addr(ASM_ISI_VECTOR));
23        MTIVOR(4,  ppc_get_vector_addr(ASM_EXT_VECTOR));
24        MTIVOR(5,  ppc_get_vector_addr(ASM_ALIGN_VECTOR));
25        MTIVOR(6,  ppc_get_vector_addr(ASM_PROG_VECTOR));
26        MTIVOR(7,  ppc_get_vector_addr(ASM_FLOAT_VECTOR));
27        MTIVOR(8,  ppc_get_vector_addr(ASM_SYS_VECTOR));
28        MTIVOR(9,  ppc_get_vector_addr(0x0b));
29        MTIVOR(10, ppc_get_vector_addr(ASM_BOOKE_DEC_VECTOR));
30        MTIVOR(11, ppc_get_vector_addr(ASM_BOOKE_FIT_VECTOR));
31        MTIVOR(12, ppc_get_vector_addr(ASM_BOOKE_WDOG_VECTOR));
32        MTIVOR(13, ppc_get_vector_addr(ASM_60X_DSMISS_VECTOR));
33        MTIVOR(14, ppc_get_vector_addr(ASM_60X_DLMISS_VECTOR));
34        MTIVOR(15, ppc_get_vector_addr(ASM_TRACE_VECTOR));
35        MTIVOR(32, ppc_get_vector_addr(ASM_60X_VEC_VECTOR));
36        MTIVOR(33, ppc_get_vector_addr(0x16));
37        MTIVOR(34, ppc_get_vector_addr(0x15));
38        MTIVOR(35, ppc_get_vector_addr(ASM_60X_PERFMON_VECTOR));
39}
40
41void e200_setup_raw_exceptions()
42{
43        if (current_ppc_cpu != PPC_e200z6) {
44                return;
45        }
46
47        /* Interupt vector prefix register */
48        MTIVPR( ppc_exc_vector_base);
49
50        /* Interupt vector offset register */
51        MTIVOR( 0,  0); /* Critical input */
52        MTIVOR( 1,  ppc_get_vector_addr( ASM_MACH_VECTOR));
53        MTIVOR( 2,  ppc_get_vector_addr( ASM_PROT_VECTOR));
54        MTIVOR( 3,  ppc_get_vector_addr( ASM_ISI_VECTOR));
55        MTIVOR( 4,  ppc_get_vector_addr( ASM_EXT_VECTOR));
56        MTIVOR( 5,  ppc_get_vector_addr( ASM_ALIGN_VECTOR));
57        MTIVOR( 6,  ppc_get_vector_addr( ASM_PROG_VECTOR));
58        MTIVOR( 7,  ppc_get_vector_addr( ASM_FLOAT_VECTOR));
59        MTIVOR( 8,  ppc_get_vector_addr( ASM_SYS_VECTOR));
60        MTIVOR( 9,  0); /* APU unavailable */
61        MTIVOR( 10, ppc_get_vector_addr( ASM_BOOKE_DEC_VECTOR));
62        MTIVOR( 11, ppc_get_vector_addr( ASM_BOOKE_FIT_VECTOR));
63        MTIVOR( 12, ppc_get_vector_addr( ASM_BOOKE_WDOG_VECTOR));
64        MTIVOR( 13, ppc_get_vector_addr( ASM_BOOKE_ITLBMISS_VECTOR));
65        MTIVOR( 14, ppc_get_vector_addr( ASM_BOOKE_DTLBMISS_VECTOR));
66        MTIVOR( 15, ppc_get_vector_addr( ASM_TRACE_VECTOR));
67        MTIVOR( 32, ppc_get_vector_addr( ASM_E200_SPE_UNAVAILABLE_VECTOR));
68        MTIVOR( 33, ppc_get_vector_addr( ASM_E200_SPE_DATA_VECTOR));
69        MTIVOR( 34, ppc_get_vector_addr( ASM_E200_SPE_ROUND_VECTOR));
70}
Note: See TracBrowser for help on using the repository browser.