Changeset 655bd39 in rtems


Ignore:
Timestamp:
Nov 30, 2012, 11:58:32 PM (8 years ago)
Author:
Ric Claus <claus@…>
Branches:
4.11, master
Children:
809b726
Parents:
5b822ab
git-author:
Ric Claus <claus@…> (11/30/12 23:58:32)
git-committer:
Sebastian Huber <sebastian.huber@…> (12/01/12 08:04:20)
Message:

Virtex5 BSP: Various updates and improvements.

This BSP now uses the MPC6xx clock driver instead of a modified PPC403 clock
driver. Support for the MMU has been added, but is not enabled by default.

Location:
c/src/lib
Files:
3 added
1 deleted
8 edited

Legend:

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

    r5b822ab r655bd39  
    3636                   ../../shared/bootcard.c \
    3737                   ../../shared/sbrk.c \
    38                    ../../shared/gnatinstallhandler.c
     38                   ../../shared/gnatinstallhandler.c \
     39                   ../shared/src/memcpy.c
    3940
    4041# start
     
    4243
    4344# clock & timer
    44 libbsp_a_SOURCES += ../../../libcpu/@RTEMS_CPU@/ppc403/clock/clock.c
    45 libbsp_a_SOURCES += ../../../libcpu/@RTEMS_CPU@/ppc403/timer/timer.c
     45libbsp_a_SOURCES += ../../powerpc/shared/clock/p_clock.c
    4646
    4747# console
     
    5353libbsp_a_SOURCES += irq/irq_init.c
    5454
     55# mmu
     56include_bsp_HEADERS += include/mmu.h
     57libbsp_a_SOURCES += mmu/mmu.c
     58
    5559#vectors
    5660include_bsp_HEADERS += ../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/vectors.h
     
    6064                  ../../../libcpu/@RTEMS_CPU@/@exceptions@/exc_bspsupport.rel \
    6165                  ../../../libcpu/@RTEMS_CPU@/shared/cache.rel \
    62                   ../../../libcpu/@RTEMS_CPU@/shared/cpuIdent.rel
     66                  ../../../libcpu/@RTEMS_CPU@/shared/cpuIdent.rel \
     67                  ../../../libcpu/@RTEMS_CPU@/e500/clock.rel \
     68                  ../../../libcpu/@RTEMS_CPU@/e500/timer.rel
    6369
    6470EXTRA_DIST = times
  • c/src/lib/libbsp/powerpc/virtex5/include/irq.h

    r5b822ab r655bd39  
    7272#ifdef __cplusplus
    7373}
     74
     75#define BSP_DEC           BSP_PIT
     76#define BSP_DECREMENTER   BSP_PIT
     77
    7478#endif
    7579#endif /* ASM */
  • c/src/lib/libbsp/powerpc/virtex5/irq/irq_init.c

    r5b822ab r655bd39  
    3636 * requirements to enable/disable a certain interrupt or exception
    3737 */
    38 void BSP_irq_nop_func(const rtems_irq_connect_data *unused)
     38static void BSP_irq_nop_func(const rtems_irq_connect_data *unused)
    3939{
    4040  /*
     
    4343}
    4444
    45 void BSP_irq_nop_hdl(void *hdl)
     45static void BSP_irq_nop_hdl(void *hdl)
    4646{
    4747  /*
     
    5050}
    5151
    52 int BSP_irq_isOn_func(const rtems_irq_connect_data *unused)
     52static int BSP_irq_isOn_func(const rtems_irq_connect_data *unused)
    5353{
    5454  /*
     
    6565 * functions to enable/disable/query external/critical interrupts
    6666 */
    67 void BSP_irqexc_on_fnc(rtems_irq_connect_data *conn_data)
     67void BSP_irqexc_on_fnc(const rtems_irq_connect_data *conn_data)
    6868{
    6969  uint32_t msr_value;
     
    7777}
    7878
    79 void BSP_irqexc_off_fnc(rtems_irq_connect_data *unused)
     79void BSP_irqexc_off_fnc(const rtems_irq_connect_data *unused)
    8080{
    8181  uint32_t msr_value;
     
    8888  _CPU_MSR_SET(msr_value);
    8989}
     90
     91SPR_RW(BOOKE_TSR)
     92
     93int C_dispatch_dec_handler (BSP_Exception_frame *frame, unsigned int excNum)
     94{
     95  /* Acknowledge the interrupt */
     96  _write_BOOKE_TSR( BOOKE_TSR_DIS );
     97
     98  /* Handle the interrupt */
     99  BSP_rtems_irq_tbl[BSP_DEC].hdl(BSP_rtems_irq_tbl[BSP_DEC].handle);
     100
     101  return 0;
     102}
     103
    90104
    91105/***********************************************************
     
    101115    BSP_rtems_irq_tbl[BSP_EXT].hdl(BSP_rtems_irq_tbl[BSP_EXT].handle);
    102116    break;
     117#if 0 /* Dealt with by C_dispatch_dec_handler(), above */
    103118  case ASM_BOOKE_DEC_VECTOR:
    104     BSP_rtems_irq_tbl[BSP_PIT].hdl(BSP_rtems_irq_tbl[BSP_PIT].handle);
     119    _write_BOOKE_TSR( BOOKE_TSR_DIS );
     120    BSP_rtems_irq_tbl[BSP_DEC].hdl(BSP_rtems_irq_tbl[BSP_DEC].handle);
    105121    break;
     122#endif
    106123#if 0 /* Critical interrupts not yet supported */
    107124  case ASM_BOOKE_CRIT_VECTOR:
     
    276293 */
    277294static rtems_irq_connect_data emptyIrq = {
    278   0,                     /* Irq Name                 */
     295  0,                     /* IRQ Name                 */
    279296  BSP_irq_nop_hdl,       /* handler function         */
    280297  NULL,                  /* handle passed to handler */
     
    285302
    286303static rtems_irq_global_settings initialConfig = {
    287   BSP_IRQ_NUMBER,    /* irqNb */
    288   {  0,                          /* Irq Name                 */
     304  BSP_IRQ_NUMBER,           /* IRQ number              */
     305  {  0,                     /* IRQ Name                 */
    289306     BSP_irq_nop_hdl,       /* handler function         */
    290307     NULL,                  /* handle passed to handler */
     
    306323   */
    307324  ppc_exc_set_handler(ASM_EXT_VECTOR,       C_dispatch_irq_handler);
    308   ppc_exc_set_handler(ASM_BOOKE_DEC_VECTOR, C_dispatch_irq_handler);
     325  ppc_exc_set_handler(ASM_BOOKE_DEC_VECTOR, C_dispatch_dec_handler);
    309326
    310327  /*
  • c/src/lib/libbsp/powerpc/virtex5/preinstall.am

    r5b822ab r655bd39  
    7070PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
    7171
     72$(PROJECT_INCLUDE)/bsp/mmu.h: include/mmu.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
     73        $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/mmu.h
     74PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/mmu.h
     75
    7276$(PROJECT_INCLUDE)/bsp/vectors.h: ../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/vectors.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
    7377        $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/vectors.h
  • c/src/lib/libbsp/powerpc/virtex5/startup/bspstart.c

    r5b822ab r655bd39  
    5555 *  Modifications for Virtex5 by Richard Claus <claus@slac.stanford.edu>
    5656 */
    57 
    58 #include <string.h>
    59 #include <fcntl.h>
    60 
    61 #include <bsp.h>
    62 #include <bsp/irq.h>
    63 #include <bsp/vectors.h>
     57#include <rtems.h>
     58#include <rtems/config.h>
    6459#include <rtems/bspIo.h>
    6560#include <rtems/libio.h>
    6661#include <rtems/libcsupport.h>
    67 #include <rtems/sptables.h>             /* for RTEMS_VERSION */
     62
    6863#include <libcpu/cpuIdent.h>
    6964#include <libcpu/spr.h>
    7065
     66#include <bsp.h>
     67#include <bsp/vectors.h>
     68#include <bsp/bootcard.h>
     69#include <bsp/irq.h>
     70
     71#include <string.h>
     72#include <fcntl.h>
     73
    7174#define DO_DOWN_ALIGN(x,a) ((x) & ~((a)-1))
    7275
     
    7578#define CPU_DOWN_ALIGN(x)  DO_DOWN_ALIGN(x, CPU_ALIGNMENT)
    7679#define CPU_UP_ALIGN(x)    DO_UP_ALIGN(x, CPU_ALIGNMENT)
    77 
    78 
    79 /* Expected by clock.c */
    80 uint32_t    bsp_clicks_per_usec;
    81 bool        bsp_timer_internal_clock;   /* true, when timer runs with CPU clk */
    82 uint32_t    bsp_timer_least_valid;
    83 uint32_t    bsp_timer_average_overhead;
    8480
    8581
     
    9793LINKER_SYMBOL(MsgAreaSize);
    9894LINKER_SYMBOL(__phy_ram_end);
    99 
     95LINKER_SYMBOL(bsp_exc_vector_base);
     96
     97
     98/* Expected by clock.c */
     99uint32_t    bsp_clicks_per_usec;
     100bool        bsp_timer_internal_clock;   /* true, when timer runs with CPU clk */
     101uint32_t    bsp_timer_least_valid;
     102uint32_t    bsp_timer_average_overhead;
     103
     104/*
     105 * Bus Frequency
     106 */
     107unsigned int BSP_bus_frequency;
     108/*
     109 * processor clock frequency
     110 */
     111unsigned int BSP_processor_frequency;
     112
     113/*
     114 * Time base divisior (bus freq / TB clock)
     115 */
     116unsigned int BSP_time_base_divisor;
    100117
    101118/*
     
    103120 */
    104121static void _noopfun(void) {}
    105 static void _bsp_start(void)
    106 {
    107   uintptr_t         intrStackStart = CPU_UP_ALIGN((uint32_t)__bsp_ram_start);
    108   uintptr_t         intrStackSize  = rtems_configuration_get_interrupt_stack_size();
    109 
    110   /*
    111    * Initialize default raw exception handlers.
    112    *
    113    * This BSP does not assume anything about firmware possibly loaded in the
    114    * FPGA, so the external interrupt should not be enabled in order to avoid
    115    * spurious interrupts.
    116    */
    117   ppc_exc_initialize(PPC_INTERRUPT_DISABLE_MASK_DEFAULT & ~MSR_EE,
    118                      intrStackStart,
    119                      intrStackSize);
    120 
    121   /* Install our own set of exception vectors */
    122   BSP_rtems_irq_mngt_init(0);
    123 }
    124122
    125123
    126124void app_bsp_start(void)
    127 __attribute__(( weak, alias("_bsp_start") ));
     125__attribute__(( weak, alias("_noopfun") ));
    128126
    129127void app_bsp_pretasking_hook(void)
     
    148146{
    149147  printk("\nSystem stopped, issue RESET");
     148
    150149  for(;;);
    151150}
     
    154153void BSP_panic(char *s)
    155154{
    156   printk("\n%s PANIC %s\n", _RTEMS_version, s);
     155  rtems_interrupt_level level;
     156
     157  rtems_interrupt_disable(level);
     158
     159  printk("\n%s PANIC %s\n", rtems_get_version_string(), s);
     160
    157161  BSP_ask_for_reset();
    158162}
     
    161165void _BSP_Fatal_error(unsigned int v)
    162166{
    163   printk("\n%s FATAL ERROR %x\n", _RTEMS_version, v);
     167  rtems_interrupt_level level;
     168
     169  rtems_interrupt_disable(level);
     170
     171  printk("\n%s FATAL ERROR %x\n", rtems_get_version_string(), v);
     172
    164173  BSP_ask_for_reset();
    165174}
     
    177186  uintptr_t          intrStackStart;
    178187  uintptr_t          intrStackSize;
     188
    179189  ppc_cpu_id_t       myCpu;
    180190  ppc_cpu_revision_t myCpuRevision;
     
    183193  BSP_output_char = __bsp_outchar_to_memory;
    184194
    185   printk("\nWelcome to RTEMS %s\n", _RTEMS_version );
     195  printk("RTEMS %s\n", rtems_get_version_string());
    186196
    187197  /*
     
    198208   */
    199209
     210  /* For mpc6xx clock driver: */
     211  BSP_bus_frequency       = 465000000;
     212  BSP_processor_frequency = 465000000;  /* Measured with a DPM 440 2012/8/13 */
     213  BSP_time_base_divisor   = 1000;
     214
    200215  /* Timebase register ticks/microsecond;  The application may override these */
    201   bsp_clicks_per_usec        = 450;
     216  bsp_clicks_per_usec        = BSP_bus_frequency/(BSP_time_base_divisor * 1000);
    202217  bsp_timer_internal_clock   = true;
    203218  bsp_timer_average_overhead = 2;
     
    209224  intrStackStart = CPU_UP_ALIGN((uint32_t)__bsp_ram_start);
    210225  intrStackSize  = rtems_configuration_get_interrupt_stack_size();
     226
     227  ppc_exc_initialize(PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
     228                     intrStackStart,
     229                     intrStackSize);
     230
     231  /* Let the user know what parameters we were compiled with */
    211232  printk("                  Base/Start     End         Size\n"
    212233         "RAM:              0x%08x              0x%x\n"
     
    225246         (uint32_t)__phy_ram_end);
    226247
     248  /*
     249   * Initialize RTEMS IRQ system
     250   */
     251  BSP_rtems_irq_mngt_init(0);
     252
    227253  /* Continue with application-specific initialization */
    228254  app_bsp_start();
  • c/src/lib/libbsp/powerpc/virtex5/startup/linkcmds

    r5b822ab r655bd39  
    2121MEMORY
    2222{
    23   VECTORS         : ORIGIN = 0x00000000, LENGTH = 8K
    24   RAM             : ORIGIN = 0x00002000, LENGTH = 2048M - 8K
     23  VECTORS         : ORIGIN = 0x00000000, LENGTH = 512
     24  RAM             : ORIGIN = 0x00000200, LENGTH = 2048M - 512
    2525}
    2626
     
    2828SECTIONS
    2929{
    30   __exeentry      = download_entry;
    31   __exestart      = 0x100;
    32   .vectors __exestart : { *(.vectors)                           } > VECTORS
     30  bsp_exc_vector_base = 0;
     31  __exeentry          = download_entry;
     32  __exestart          = bsp_exc_vector_base;
     33  .vectors bsp_exc_vector_base : { *(.vectors)                  } > VECTORS
    3334
    3435  /* Read-only sections, merged into text segment: */
  • c/src/lib/libbsp/powerpc/virtex5/startup/start.S

    r5b822ab r655bd39  
    6262#include <rtems/asm.h>
    6363#include <rtems/powerpc/powerpc.h>
     64#include <rtems/powerpc/registers.h>
    6465
    6566#define   V_TS_SZ_I    0x0290      // V,TS=0(Inst),SIZE=9,TID=0
     
    155156       /*------------------------------------------------------------------
    156157        * Set Core Configuration Register 0 as follows:
    157         * sum: 0x00200000
     158        * sum: 0x00206000
    158159        * bit  1    off  Parity Recovery Enable
    159160        * bit  4    off  Cache Read Parity Enable
     
    161162        * bit 11    off  Disable APU Instruction Broadcast
    162163        * bit 16    off  Disable Trace Broadcast
    163         * bit 17:18 off  Specifies behaviour of icbt,dcbt/dcbtst insts
     164        * bit 17:18 on   Specifies behaviour of icbt,dcbt/dcbtst insts
    164165        * bit 23    off  Force Load/Store Alignment
    165166        * bit 28:29 off  Instruction Cache Speculative Line Count
     
    168169        *------------------------------------------------------------------*/
    169170
    170         lis     r2,0x0020         // 7. Set CCR0: DSTG
    171         mtccr0  r2                // Configure CCR0
    172 
    173         mtspr   ccr1,r0           // 8. Clear CCR1
     171        lis     r2,   0x00206000@h // 7. Set CCR0: DSTG
     172        ori     r2,r2,0x00206000@l //    Set CCR0: GDCBT, GICBT
     173        mtccr0  r2                 // Configure CCR0
     174
     175        mtspr   PPC440_CCR1,r0     // 8. Clear CCR1
    174176
    175177       /*------------------------------------------------------------------
    176178        * 9. Configure cache regions
    177179        *------------------------------------------------------------------*/
    178         mtspr   inv0,r0
    179         mtspr   inv1,r0
    180         mtspr   inv2,r0
    181         mtspr   inv3,r0
    182         mtspr   dnv0,r0
    183         mtspr   dnv1,r0
    184         mtspr   dnv2,r0
    185         mtspr   dnv3,r0
    186         mtspr   itv0,r0
    187         mtspr   itv1,r0
    188         mtspr   itv2,r0
    189         mtspr   itv3,r0
    190         mtspr   dtv0,r0
    191         mtspr   dtv1,r0
    192         mtspr   dtv2,r0
    193         mtspr   dtv3,r0
     180        mtspr   PPC440_INV0,r0
     181        mtspr   PPC440_INV1,r0
     182        mtspr   PPC440_INV2,r0
     183        mtspr   PPC440_INV3,r0
     184        mtspr   PPC440_DNV0,r0
     185        mtspr   PPC440_DNV1,r0
     186        mtspr   PPC440_DNV2,r0
     187        mtspr   PPC440_DNV3,r0
     188        mtspr   PPC440_ITV0,r0
     189        mtspr   PPC440_ITV1,r0
     190        mtspr   PPC440_ITV2,r0
     191        mtspr   PPC440_ITV3,r0
     192        mtspr   PPC440_DTV0,r0
     193        mtspr   PPC440_DTV1,r0
     194        mtspr   PPC440_DTV2,r0
     195        mtspr   PPC440_DTV3,r0
    194196
    195197       /*------------------------------------------------------------------
     
    199201        lis     r2,   0x0001f800@h
    200202        ori     r2,r2,0x0001f800@l
    201         mtspr   ivlim,r2
    202         mtspr   dvlim,r2
     203        mtspr   PPC440_IVLIM,r2
     204        mtspr   PPC440_DVLIM,r2
    203205
    204206       /*------------------------------------------------------------------
     
    242244        *------------------------------------------------------------------*/
    243245
    244         mtspr   mmucr,r0          // 10a. Clear MMUCR
     246        mtspr   PPC440_MMUCR,r0   // 10a. Clear MMUCR
    245247        li      r7,WIMG_U_S_1     // Word 2: Pages are NOT cache inhibited
    246248        lis     r6,   PAGE_SZ@h   // Page size constant
     
    256258        * spaces should be enabled when application starts
    257259        *------------------------------------------------------------------*/
    258         lis     r0,   0x00000000@h // 10d. MSR[IS]=0 MSR[DS]=0
    259         ori     r0,r0,0x00000000@l
    260         mtsrr1  r0
     260        lis     r3,   0x00000000@h // 10d. MSR[IS]=0 MSR[DS]=0
     261        ori     r3,r3,0x00000000@l
     262        mtsrr1  r3
    261263        mtsrr0  r28               // Return address
    262264        rfi                       // Context synchronize to invalidate shadow TLB contents
     
    276278        *------------------------------------------------------------------*/
    277279        .extern SYM(__vectors)
    278         lis     r2, __vectors@h     /* set EVPR exc. vector prefix */
    279         mtspr   ivpr,r2
     280        lis     r1, __vectors@h     /* set EVPR exc. vector prefix */
     281        mtspr   BOOKE_IVPR,r1
    280282
    281283       /*------------------------------------------------------------------
    282284        * Set up default exception and interrupt vectors
    283285        *------------------------------------------------------------------*/
    284         li       r1,0x100
     286        li       r1,0
    285287        mtivor0  r1
    286         addi     r1,r1,0x100
     288        addi     r1,r1,0x10
    287289        mtivor1  r1
    288         addi     r1,r1,0x100
     290        addi     r1,r1,0x10
    289291        mtivor2  r1
    290         addi     r1,r1,0x100
     292        addi     r1,r1,0x10
    291293        mtivor3  r1
    292         addi     r1,r1,0x100
     294        addi     r1,r1,0x10
    293295        mtivor4  r1
    294         addi     r1,r1,0x100
     296        addi     r1,r1,0x10
    295297        mtivor5  r1
    296         addi     r1,r1,0x100
     298        addi     r1,r1,0x10
    297299        mtivor6  r1
    298         addi     r1,r1,0x100
     300        addi     r1,r1,0x10
    299301        mtivor7  r1
    300         addi     r1,r1,0x100
     302        addi     r1,r1,0x10
    301303        mtivor8  r1
    302         addi     r1,r1,0x100
     304        addi     r1,r1,0x10
    303305        mtivor9  r1
    304         addi     r1,r1,0x100
     306        addi     r1,r1,0x10
    305307        mtivor10 r1
    306         addi     r1,r1,0x100
     308        addi     r1,r1,0x10
    307309        mtivor11 r1
    308         addi     r1,r1,0x100
     310        addi     r1,r1,0x10
    309311        mtivor12 r1
    310         addi     r1,r1,0x100
     312        addi     r1,r1,0x10
    311313        mtivor13 r1
    312         addi     r1,r1,0x100
     314        addi     r1,r1,0x10
    313315        mtivor14 r1
    314         addi     r1,r1,0x100
     316        addi     r1,r1,0x10
    315317        mtivor15 r1
    316318
     
    337339        *------------------------------------------------------------------*/
    338340        mtdec   r0                // Clear Decrementer to prevent exception
    339         mttbu   r0                // Clear Timebase to prevent Fixed Interval..
    340         mttbl   r0                // ..timer and Watchdog Timer exceptions
     341        mttbl   r0                // Clear Timebase to prevent Fixed Interval..
     342        mttbu   r0                // ..timer and Watchdog Timer exceptions
    341343        mtpit   r0                // Programmable interval timer
    342         li      r1,-1             // -1 to clear TSR
    343         mttsr   r1                // Timer status register
     344        li      r2,-1             // -1 to clear TSR
     345        mttsr   r2                // Timer status register
    344346
    345347       /*-------------------------------------------------------------------
    346348        * Clear out stale values in certain registers to avoid confusion
    347349        *------------------------------------------------------------------*/
    348         li      r0,0
    349350        mtcrf   0xff,r0           // Need for simulation
    350351        mtctr   r0                // Counter register
  • c/src/lib/libcpu/powerpc/configure.ac

    r5b822ab r655bd39  
    5858|| test "$RTEMS_CPU_MODEL" = "mpc8240" \
    5959|| test "$RTEMS_CPU_MODEL" = "mpc8245" \
    60 || test "$RTEMS_CPU_MODEL" = "mpc83xx" )
     60|| test "$RTEMS_CPU_MODEL" = "mpc83xx")
    6161AM_CONDITIONAL(mpc8xx, test "$RTEMS_CPU_MODEL" = "mpc8xx" \
    6262|| test "$RTEMS_CPU_MODEL" = "mpc821" \
     
    6666AM_CONDITIONAL(qoriq, test "$RTEMS_CPU_MODEL" = "qoriq")
    6767
    68 # the ppc405 and ppc440 share files with the ppc403
     68# the ppc405 share files with the ppc403
    6969AM_CONDITIONAL(ppc403, test "$RTEMS_CPU_MODEL" = "ppc403")
    7070AM_CONDITIONAL(ppc405, test "$RTEMS_CPU_MODEL" = "ppc405")
    7171AM_CONDITIONAL(ppc440, test "$RTEMS_CPU_MODEL" = "ppc440")
    7272AM_CONDITIONAL(ppc4xx, test "$RTEMS_CPU_MODEL" = "ppc403" \
    73 || test "$RTEMS_CPU_MODEL" = "ppc405" \
    74 || test "$RTEMS_CPU_MODEL" = "ppc440")
     73|| test "$RTEMS_CPU_MODEL" = "ppc405")
    7574
    7675AM_CONDITIONAL(e500, test "$RTEMS_CPU_MODEL" = "e500" \
     76|| test "$RTEMS_CPU_MODEL" = "ppc440" \
    7777|| test "$RTEMS_CPU_MODEL" = "qoriq" )
    7878
Note: See TracChangeset for help on using the changeset viewer.