Changeset 7078a00b in rtems


Ignore:
Timestamp:
Nov 8, 2017, 12:13:32 PM (18 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
8d0a0aa
Parents:
fdf0e55
git-author:
Sebastian Huber <sebastian.huber@…> (11/08/17 12:13:32)
git-committer:
Sebastian Huber <sebastian.huber@…> (11/08/17 12:14:30)
Message:

bsp/t32mppc: Use fixed exception handlers

Location:
c/src/lib/libbsp/powerpc/t32mppc
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/powerpc/t32mppc/Makefile.am

    rfdf0e55 r7078a00b  
    5050        ../../shared/bspclean.c \
    5151        ../../shared/bspgetworkarea.c \
     52        ../shared/src/ppc-exc-handler-table.c \
    5253        ../shared/src/tictac.c \
    5354        ../shared/src/bsp-start-zero.S \
     
    5657
    5758# Clock
    58 libbsp_a_SOURCES += ../shared/clock/clock.c
     59libbsp_a_SOURCES += clock/clock-config.c
    5960
    6061# Timer
  • c/src/lib/libbsp/powerpc/t32mppc/configure.ac

    rfdf0e55 r7078a00b  
    1818RTEMS_BSPOPTS_HELP_INSTRUCTION_CACHE_ENABLED
    1919
     20RTEMS_BSPOPTS_SET([PPC_EXC_CONFIG_USE_FIXED_HANDLER],[*],[1])
     21RTEMS_BSPOPTS_HELP([PPC_EXC_CONFIG_USE_FIXED_HANDLER],
     22[use fixed high-level exception handler])
     23
     24RTEMS_BSPOPTS_SET([PPC_EXC_CONFIG_BOOKE_ONLY],[*],[1])
     25RTEMS_BSPOPTS_HELP([PPC_EXC_CONFIG_BOOKE_ONLY],
     26[only support Book E exception types])
     27
    2028RTEMS_CHECK_SMP
    2129AM_CONDITIONAL(HAS_SMP,[test "$rtems_cv_HAS_SMP" = "yes"])
  • c/src/lib/libbsp/powerpc/t32mppc/include/bsp.h

    rfdf0e55 r7078a00b  
    11/*
    2  * Copyright (c) 2012-2014 embedded brains GmbH.  All rights reserved.
     2 * Copyright (c) 2012, 2017 embedded brains GmbH.  All rights reserved.
    33 *
    44 *  embedded brains GmbH
     
    3030#define BSP_FEATURE_IRQ_EXTENSION
    3131
     32extern uint32_t bsp_time_base_frequency;
     33
     34void t32mppc_decrementer_dispatch(void);
     35
    3236#endif /* ASM */
    3337
  • c/src/lib/libbsp/powerpc/t32mppc/include/irq.h

    rfdf0e55 r7078a00b  
    11/*
    2  * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
     2 * Copyright (c) 2012, 2017 embedded brains GmbH.  All rights reserved.
    33 *
    44 *  embedded brains GmbH
    5  *  Obere Lagerstr. 30
     5 *  Dornierstr. 4
    66 *  82178 Puchheim
    77 *  Germany
     
    1919#include <rtems/irq.h>
    2020#include <rtems/irq-extension.h>
     21#include <rtems/score/processormask.h>
    2122
    2223#ifdef __cplusplus
     
    2728#define BSP_INTERRUPT_VECTOR_MAX 0
    2829
     30RTEMS_INLINE_ROUTINE void bsp_interrupt_set_affinity(
     31  rtems_vector_number   vector,
     32  const Processor_mask *affinity
     33)
     34{
     35  (void) vector;
     36  (void) affinity;
     37}
     38
     39RTEMS_INLINE_ROUTINE void bsp_interrupt_get_affinity(
     40  rtems_vector_number  vector,
     41  Processor_mask      *affinity
     42)
     43{
     44  (void) vector;
     45  _Processor_mask_From_index( affinity, 0 );
     46}
     47
    2948#ifdef __cplusplus
    3049}
  • c/src/lib/libbsp/powerpc/t32mppc/irq/irq.c

    rfdf0e55 r7078a00b  
    11/*
    2  * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
     2 * Copyright (c) 2012, 2017 embedded brains GmbH.  All rights reserved.
    33 *
    44 *  embedded brains GmbH
    5  *  Obere Lagerstr. 30
     5 *  Dornierstr. 4
    66 *  82178 Puchheim
    77 *  Germany
     
    1313 */
    1414
     15#include <bsp.h>
    1516#include <bsp/irq-generic.h>
     17#include <bsp/vectors.h>
    1618
    1719void bsp_interrupt_vector_enable(rtems_vector_number vector)
    1820{
    1921        bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
     22}
     23
     24void bsp_interrupt_dispatch(uintptr_t exception_number)
     25{
     26        if (exception_number == 10) {
     27                t32mppc_decrementer_dispatch();
     28        } else {
     29                bsp_interrupt_handler_default(0);
     30        }
    2031}
    2132
  • c/src/lib/libbsp/powerpc/t32mppc/start/start.S

    rfdf0e55 r7078a00b  
    9696        .align 4
    9797bsp_exc_vector_base:
    98         stw     r1, ppc_exc_lock_crit@sdarel(r13)
    99         stw     r4, ppc_exc_vector_register_crit@sdarel(r13)
    100         li      r4, -32767
    101         b       ppc_exc_wrap_bookE_crit
    102         stwu    r1, -EXC_GENERIC_SIZE(r1)
    103         stw     r4, GPR4_OFFSET(r1)
    104         li      r4, 2
    105         b       ppc_exc_wrap_nopush_e500_mchk
    106         stwu    r1, -EXC_GENERIC_SIZE(r1)
    107         stw     r4, GPR4_OFFSET(r1)
    108         li      r4, 3
    109         b       ppc_exc_wrap_nopush_std
    110         stwu    r1, -EXC_GENERIC_SIZE(r1)
    111         stw     r4, GPR4_OFFSET(r1)
    112         li      r4, 4
    113         b       ppc_exc_wrap_nopush_std
    114         stwu    r1, -EXC_GENERIC_SIZE(r1)
    115         stw     r4, GPR4_OFFSET(r1)
    116         li      r4, -32763
    117         b       ppc_exc_wrap_nopush_std
    118         stwu    r1, -EXC_GENERIC_SIZE(r1)
    119         stw     r4, GPR4_OFFSET(r1)
    120         li      r4, 6
    121         b       ppc_exc_wrap_nopush_std
    122         stwu    r1, -EXC_GENERIC_SIZE(r1)
    123         stw     r4, GPR4_OFFSET(r1)
    124         li      r4, 7
    125         b       ppc_exc_wrap_nopush_std
    126         stwu    r1, -EXC_GENERIC_SIZE(r1)
    127         stw     r4, GPR4_OFFSET(r1)
    128         li      r4, 8
    129         b       ppc_exc_wrap_nopush_std
    130         stwu    r1, -EXC_GENERIC_SIZE(r1)
    131         stw     r4, GPR4_OFFSET(r1)
    132         li      r4, 12
    133         b       ppc_exc_wrap_nopush_std
    134         stwu    r1, -EXC_GENERIC_SIZE(r1)
    135         stw     r4, GPR4_OFFSET(r1)
    136         li      r4, 24
    137         b       ppc_exc_wrap_nopush_std
    138         stwu    r1, -EXC_GENERIC_SIZE(r1)
    139         stw     r4, GPR4_OFFSET(r1)
    140         li      r4, -32752
    141         b       ppc_exc_wrap_nopush_std
    142         stwu    r1, -EXC_GENERIC_SIZE(r1)
    143         stw     r4, GPR4_OFFSET(r1)
    144         li      r4, -32749
    145         b       ppc_exc_wrap_nopush_std
    146         stw     r1, ppc_exc_lock_crit@sdarel(r13)
    147         stw     r4, ppc_exc_vector_register_crit@sdarel(r13)
    148         li      r4, -32748
    149         b       ppc_exc_wrap_bookE_crit
    150         stwu    r1, -EXC_GENERIC_SIZE(r1)
    151         stw     r4, GPR4_OFFSET(r1)
    152         li      r4, 18
    153         b       ppc_exc_wrap_nopush_std
    154         stwu    r1, -EXC_GENERIC_SIZE(r1)
    155         stw     r4, GPR4_OFFSET(r1)
    156         li      r4, 17
    157         b       ppc_exc_wrap_nopush_std
    158         stwu    r1, -EXC_GENERIC_SIZE(r1)
    159         stw     r4, GPR4_OFFSET(r1)
    160         li      r4, 13
    161         b       ppc_exc_wrap_nopush_bookE_crit
    162         stwu    r1, -EXC_GENERIC_SIZE(r1)
    163         stw     r4, GPR4_OFFSET(r1)
    164         li      r4, 10
    165         b       ppc_exc_wrap_nopush_std
    166         stwu    r1, -EXC_GENERIC_SIZE(r1)
    167         stw     r4, GPR4_OFFSET(r1)
    168         li      r4, 25
    169         b       ppc_exc_wrap_nopush_std
    170         stwu    r1, -EXC_GENERIC_SIZE(r1)
    171         stw     r4, GPR4_OFFSET(r1)
    172         li      r4, 26
    173         b       ppc_exc_wrap_nopush_std
    174         stwu    r1, -EXC_GENERIC_SIZE(r1)
    175         stw     r4, GPR4_OFFSET(r1)
    176         li      r4, 15
    177         b       ppc_exc_wrap_nopush_std
     98        /* Critical input */
     99        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     100        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     101        li      r3, 0
     102        b       ppc_exc_fatal_critical
     103        /* Machine check */
     104        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     105        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     106        li      r3, 1
     107        b       ppc_exc_fatal_machine_check
     108        /* Data storage */
     109        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     110        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     111        li      r3, 2
     112        b       ppc_exc_fatal_normal
     113        /* Instruction storage */
     114        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     115        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     116        li      r3, 3
     117        b       ppc_exc_fatal_normal
     118        /* External input */
     119        PPC_REG_STORE_UPDATE    r1, -PPC_EXC_INTERRUPT_FRAME_SIZE(r1)
     120        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     121        li      r3, 4
     122        b       ppc_exc_interrupt
     123        /* Alignment */
     124        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     125        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     126        li      r3, 5
     127        b       ppc_exc_fatal_normal
     128        /* Program */
     129        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     130        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     131        li      r3, 6
     132        b       ppc_exc_fatal_normal
     133        /* Floating-point unavailable */
     134        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     135        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     136        li      r3, 7
     137        b       ppc_exc_fatal_normal
     138        /* System call */
     139        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     140        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     141        li      r3, 8
     142        b       ppc_exc_fatal_normal
     143        /* APU unavailable */
     144        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     145        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     146        li      r3, 9
     147        b       ppc_exc_fatal_normal
     148        /* Decrementer */
     149        PPC_REG_STORE_UPDATE    r1, -PPC_EXC_INTERRUPT_FRAME_SIZE(r1)
     150        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     151        li      r3, 10
     152        b       ppc_exc_interrupt
     153        /* Fixed-interval timer interrupt */
     154        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     155        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     156        li      r3, 11
     157        b       ppc_exc_fatal_normal
     158        /* Watchdog timer interrupt */
     159        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     160        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     161        li      r3, 12
     162        b       ppc_exc_fatal_critical
     163        /* Data TLB error */
     164        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     165        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     166        li      r3, 13
     167        b       ppc_exc_fatal_normal
     168        /* Instruction TLB error */
     169        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     170        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     171        li      r3, 14
     172        b       ppc_exc_fatal_normal
     173        /* Debug */
     174        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     175        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     176        li      r3, 15
     177        b       ppc_exc_fatal_debug
     178        /* SPE APU unavailable or AltiVec unavailable */
     179        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     180        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     181        li      r3, 32
     182        b       ppc_exc_fatal_normal
     183        /* SPE floating-point data exception or AltiVec assist */
     184        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     185        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     186        li      r3, 33
     187        b       ppc_exc_fatal_normal
     188        /* SPE floating-point round exception */
     189        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     190        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     191        li      r3, 34
     192        b       ppc_exc_fatal_normal
     193        /* Performance monitor */
     194        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
     195        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
     196        li      r3, 35
     197        b       ppc_exc_fatal_normal
    178198
    179199        /* Start stack area */
  • c/src/lib/libbsp/powerpc/t32mppc/startup/bspstart.c

    rfdf0e55 r7078a00b  
    11/*
    2  * Copyright (c) 2012-2014 embedded brains GmbH.  All rights reserved.
     2 * Copyright (c) 2012, 2017 embedded brains GmbH.  All rights reserved.
    33 *
    44 *  embedded brains GmbH
     
    3232 * second.
    3333 */
    34 uint32_t bsp_time_base_frequency = 10000000 / 10;
     34uint32_t bsp_time_base_frequency = 10000000;
    3535
    3636void BSP_panic(char *s)
     
    6262}
    6363
     64#define MTIVPR(base) \
     65  __asm__ volatile ("mtivpr %0" : : "r" (base))
     66
     67#define VECTOR_TABLE_ENTRY_SIZE 16
     68
     69#define MTIVOR(vec, offset) \
     70  do { \
     71    __asm__ volatile ("mtspr " RTEMS_XSTRING(vec) ", %0" : : "r" (offset)); \
     72    offset += VECTOR_TABLE_ENTRY_SIZE; \
     73  } while (0)
     74
     75static void t32mppc_initialize_exceptions(void *interrupt_stack_begin)
     76{
     77  uintptr_t addr;
     78
     79  ppc_exc_initialize_interrupt_stack(
     80    (uintptr_t) interrupt_stack_begin,
     81    rtems_configuration_get_interrupt_stack_size()
     82  );
     83
     84  addr = (uintptr_t) bsp_exc_vector_base;
     85  MTIVPR(addr);
     86  MTIVOR(BOOKE_IVOR0,  addr);
     87  MTIVOR(BOOKE_IVOR1,  addr);
     88  MTIVOR(BOOKE_IVOR2,  addr);
     89  MTIVOR(BOOKE_IVOR3,  addr);
     90  MTIVOR(BOOKE_IVOR4,  addr);
     91  MTIVOR(BOOKE_IVOR5,  addr);
     92  MTIVOR(BOOKE_IVOR6,  addr);
     93  MTIVOR(BOOKE_IVOR7,  addr);
     94  MTIVOR(BOOKE_IVOR8,  addr);
     95  MTIVOR(BOOKE_IVOR9,  addr);
     96  MTIVOR(BOOKE_IVOR10, addr);
     97  MTIVOR(BOOKE_IVOR11, addr);
     98  MTIVOR(BOOKE_IVOR12, addr);
     99  MTIVOR(BOOKE_IVOR13, addr);
     100  MTIVOR(BOOKE_IVOR14, addr);
     101  MTIVOR(BOOKE_IVOR15, addr);
     102  MTIVOR(BOOKE_IVOR32, addr);
     103  MTIVOR(BOOKE_IVOR33, addr);
     104  MTIVOR(BOOKE_IVOR34, addr);
     105  MTIVOR(BOOKE_IVOR35, addr);
     106}
     107
    64108void bsp_start(void)
    65109{
     
    69113  rtems_counter_initialize_converter(bsp_time_base_frequency);
    70114
    71   /* Initialize exception handler */
    72   ppc_exc_initialize_with_vector_base(
    73     (uintptr_t) bsp_section_work_begin,
    74     rtems_configuration_get_interrupt_stack_size(),
    75     bsp_exc_vector_base
    76   );
    77 
    78   /* Initalize interrupt support */
     115  t32mppc_initialize_exceptions(bsp_section_work_begin);
    79116  bsp_interrupt_initialize();
    80117}
Note: See TracChangeset for help on using the changeset viewer.