File indexing completed on 2025-05-11 08:23:59
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #include <rtems/config.h>
0029 #include <rtems/counter.h>
0030
0031 #include <bsp.h>
0032 #include <bsp/vectors.h>
0033 #include <bsp/bootcard.h>
0034 #include <bsp/irq-generic.h>
0035 #include <bsp/linker-symbols.h>
0036
0037 LINKER_SYMBOL(bsp_exc_vector_base);
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 uint32_t bsp_time_base_frequency = 10000000;
0048
0049 #define MTIVPR(base) \
0050 __asm__ volatile ("mtivpr %0" : : "r" (base))
0051
0052 #define VECTOR_TABLE_ENTRY_SIZE 16
0053
0054 #define MTIVOR(vec, offset) \
0055 do { \
0056 __asm__ volatile ("mtspr " RTEMS_XSTRING(vec) ", %0" : : "r" (offset)); \
0057 offset += VECTOR_TABLE_ENTRY_SIZE; \
0058 } while (0)
0059
0060 static void t32mppc_initialize_exceptions(void)
0061 {
0062 uintptr_t addr;
0063
0064 ppc_exc_initialize_interrupt_stack(
0065 (uintptr_t) _ISR_Stack_area_begin
0066 );
0067
0068 addr = (uintptr_t) bsp_exc_vector_base;
0069 MTIVPR(addr);
0070 MTIVOR(BOOKE_IVOR0, addr);
0071 MTIVOR(BOOKE_IVOR1, addr);
0072 MTIVOR(BOOKE_IVOR2, addr);
0073 MTIVOR(BOOKE_IVOR3, addr);
0074 MTIVOR(BOOKE_IVOR4, addr);
0075 MTIVOR(BOOKE_IVOR5, addr);
0076 MTIVOR(BOOKE_IVOR6, addr);
0077 MTIVOR(BOOKE_IVOR7, addr);
0078 MTIVOR(BOOKE_IVOR8, addr);
0079 MTIVOR(BOOKE_IVOR9, addr);
0080 MTIVOR(BOOKE_IVOR10, addr);
0081 MTIVOR(BOOKE_IVOR11, addr);
0082 MTIVOR(BOOKE_IVOR12, addr);
0083 MTIVOR(BOOKE_IVOR13, addr);
0084 MTIVOR(BOOKE_IVOR14, addr);
0085 MTIVOR(BOOKE_IVOR15, addr);
0086 MTIVOR(BOOKE_IVOR32, addr);
0087 MTIVOR(BOOKE_IVOR33, addr);
0088 MTIVOR(BOOKE_IVOR34, addr);
0089 MTIVOR(BOOKE_IVOR35, addr);
0090 }
0091
0092 uint32_t _CPU_Counter_frequency(void)
0093 {
0094 return bsp_time_base_frequency;
0095 }
0096
0097 void bsp_start(void)
0098 {
0099 get_ppc_cpu_type();
0100 get_ppc_cpu_revision();
0101 t32mppc_initialize_exceptions();
0102 bsp_interrupt_initialize();
0103 }