Ticket #2020: 0012-Mods-to-clock.c-for-virtex4-5-BSPs.patch

File 0012-Mods-to-clock.c-for-virtex4-5-BSPs.patch, 4.1 KB (added by Ric Claus, on 03/02/12 at 00:52:37)

PPC 403 clock.c changes for virtex4 & 5 BSPs

  • c/src/lib/libcpu/powerpc/ppc403/clock/clock.c

    From 2c480b61ee5fd978326639834bae03a03083bf90 Mon Sep 17 00:00:00 2001
    From: Ric Claus <claus@SLAC.Stanford.edu>
    Date: Thu, 1 Mar 2012 17:25:07 -0800
    Subject: [PATCH 12/14] Mods to clock.c for virtex4/5 BSPs
    
    ---
     c/src/lib/libcpu/powerpc/ppc403/clock/clock.c |   55 ++++++++++++-------------
     1 files changed, 27 insertions(+), 28 deletions(-)
    
    diff --git a/c/src/lib/libcpu/powerpc/ppc403/clock/clock.c b/c/src/lib/libcpu/powerpc/ppc403/clock/clock.c
    index 52e240a..daa2a94 100644
    a b static bool auto_restart; 
    6363
    6464void Clock_exit( void );
    6565
     66static inline uint32_t   get_itimer(void)
     67{
     68  register uint32_t   rc;
     69
     70#ifdef ppc403 /* this is a ppc403 */
     71  asm volatile ("mfspr %0, 0x3dd" : "=r" ((rc))); /* TBLO */
     72#else /* ppc403 */
     73  asm volatile ("mfspr %0, 0x10c" : "=r" ((rc))); /* 405GP & 440 TBL */
     74#endif /* ppc403 */
     75
     76  return rc;
     77}
     78
    6679/*
    6780 *  ISR Handler
    6881 */
    void ClockOn(const rtems_irq_connect_data* unused) 
    202215   else if ((pvr & 0xff00) == 0x0100) /* 403GB */
    203216     auto_restart = true;
    204217
    205 #elif defined(ppc405) /* ppc405 */
     218#else
     219# ifdef ppc405 /* ppc405 */
    206220  __asm__ volatile ("mfdcr %0, 0x0b2" : "=r" (iocr));  /*405GP CPC0_CR1 */
    207221  if (bsp_timer_internal_clock) {
    208222    iocr &=~0x800000; /* timer clocked from system clock CETE */
    void ClockOn(const rtems_irq_connect_data* unused) 
    211225  }
    212226  /* 405GP CPC0_CR1 */
    213227  __asm__ volatile ("mtdcr 0x0b2, %0" : "=r" (iocr) : "0" (iocr));
    214 
    215   /*
    216    * Enable auto restart
    217    */
    218   auto_restart = true;
    219 #else
    220   /* PPC440 */
     228# else  /* PPC440 */
    221229  __asm__ volatile ("mfspr %0, 0x378" : "=r" (iocr));  /* 440 CCR1 */
    222230  if (bsp_timer_internal_clock) {
    223     iocr &= ~0x00000100;           /* timer clocked from system clock CETE */
     231    iocr &= ~0x00000100;     /* timer clocked from system clock CPMC440CLOCK */
    224232  } else {
    225     iocr |= 0x00000100;           /* select external timer clock CETE */
     233    iocr |= 0x00000100;      /* select CPU timer clock CPMC440TIMERCLOCK */
    226234  }
    227235  __asm__ volatile ("mtspr 0x378, %0" : "=r" (iocr) : "0" (iocr)); /*440 CCR1*/
    228 #endif
     236# endif /* ppc405 */
     237
     238  /*
     239   * Enable auto restart
     240   */
     241  auto_restart = true;
     242#endif /* ppc403 */
     243
    229244  pit_value = rtems_configuration_get_microseconds_per_tick() *
    230245                bsp_clicks_per_usec;
    231246
    void ClockOn(const rtems_irq_connect_data* unused) 
    240255
    241256   /*
    242257    * Set timer to autoreload, bit TCR->ARE = 1  0x0400000
    243     * Enable PIT interrupt, bit TCR->PIE = 1     0x4000000
     258    * Enable PIT interrupt,    bit TCR->PIE = 1  0x4000000
    244259    */
    245260  tick_time = get_itimer() + pit_value;
    246261
    void Install_clock( 
    274289  clockIrqConnData.on   = ClockOn;
    275290  clockIrqConnData.off  = ClockOff;
    276291  clockIrqConnData.isOn = ClockIsOn;
    277 #ifndef ppc440
    278292  clockIrqConnData.name = BSP_PIT;
    279 #else
    280   clockIrqConnData.name = BSP_DECREMENTER;
    281 #endif
    282293  clockIrqConnData.hdl  = clock_isr;
    283294  if (!BSP_install_rtems_irq_handler (&clockIrqConnData)) {
    284295    printk("Unable to connect Clock Irq handler\n");
    void ReInstall_clock( 
    297308
    298309  rtems_interrupt_disable(isrlevel);
    299310
    300 #ifndef ppc440
    301311  clockIrqConnData.name = BSP_PIT;
    302 #else
    303   clockIrqConnData.name = BSP_DECREMENTER;
    304 #endif
    305312  if (!BSP_get_current_rtems_irq_handler(&clockIrqConnData)) {
    306313    printk("Unable to stop system clock\n");
    307314    rtems_fatal_error_occurred(1);
    void ReInstall_clock( 
    312319  clockIrqConnData.on   = ClockOn;
    313320  clockIrqConnData.off  = ClockOff;
    314321  clockIrqConnData.isOn = ClockIsOn;
    315 #ifndef ppc440
    316322  clockIrqConnData.name = BSP_PIT;
    317 #else
    318   clockIrqConnData.name = BSP_DECREMENTER;
    319 #endif
    320323  clockIrqConnData.hdl  = new_clock_isr;
    321324
    322325  if (!BSP_install_rtems_irq_handler (&clockIrqConnData)) {
    void Clock_exit(void) 
    338341{
    339342  rtems_irq_connect_data clockIrqConnData;
    340343
    341 #ifndef ppc440
    342344  clockIrqConnData.name = BSP_PIT;
    343 #else
    344   clockIrqConnData.name = BSP_DECREMENTER;
    345 #endif
    346345  if (!BSP_get_current_rtems_irq_handler(&clockIrqConnData)) {
    347346    printk("Unable to stop system clock\n");
    348347    rtems_fatal_error_occurred(1);