Changeset e3c9937 in rtems


Ignore:
Timestamp:
Feb 18, 2015, 2:34:39 PM (5 years ago)
Author:
Daniel Hellstrom <daniel@…>
Branches:
4.11, master
Children:
05ce8bd5
Parents:
f37a3c2
git-author:
Daniel Hellstrom <daniel@…> (02/18/15 14:34:39)
git-committer:
Daniel Hellstrom <daniel@…> (04/16/15 23:10:22)
Message:

GPTIMER: move ISR install from init1

To avoid install ISRs during init level 1 the ISR install is moved
to the opening/initialization of the timer.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/sparc/shared/timer/gptimer.c

    rf37a3c2 re3c9937  
    9595        unsigned int base_clk;
    9696        unsigned int base_freq;
    97         int separate_interrupt;
     97        char separate_interrupt;
     98        char isr_installed;
    9899
    99100        /* Structure per Timer unit, the core supports up to 8 timers */
     
    304305        priv->separate_interrupt = regs->cfg & GPTIMER_CFG_SI;
    305306
    306         if ( priv->separate_interrupt == 0 ) {
    307                 /* Shared IRQ handler */
    308                 drvmgr_interrupt_register(
    309                         priv->dev,
    310                         0,
    311                         "gptimer_shared",
    312                         gptimer_isr,
    313                         priv);
    314         }
    315 
    316307        /* Older HW */
    317308       
     
    462453                drvmgr_interrupt_register(priv->dev, timer->tindex,
    463454                                                "gptimer", func, data);
     455        } else {
     456                if (priv->isr_installed == 0) {
     457                        /* Shared IRQ handler */
     458                        drvmgr_interrupt_register(
     459                                priv->dev,
     460                                0,
     461                                "gptimer_shared",
     462                                gptimer_isr,
     463                                priv);
     464                }
     465                priv->isr_installed++;
    464466        }
    465467
     
    480482        } else {
    481483                timer->tdev.isr_func = NULL;
     484                priv->isr_installed--;
     485                if (priv->isr_installed == 0) {
     486                        drvmgr_interrupt_unregister(priv->dev, 0,
     487                                                        gptimer_isr, priv);
     488                }
    482489        }
    483490}
Note: See TracChangeset for help on using the changeset viewer.