forked from Imagelibrary/rtems
GPTIMER: Only probe pending bit on timer0
This commit is contained in:
@@ -177,6 +177,7 @@ int gptimer_init1(struct drvmgr_dev *dev)
|
|||||||
int i, size;
|
int i, size;
|
||||||
struct gptimer_timer *timer;
|
struct gptimer_timer *timer;
|
||||||
union drvmgr_key_value *value;
|
union drvmgr_key_value *value;
|
||||||
|
unsigned char irq_ack_mask;
|
||||||
#if defined(LEON3) && defined(RTEMS_DRVMGR_STARTUP)
|
#if defined(LEON3) && defined(RTEMS_DRVMGR_STARTUP)
|
||||||
char timer_index[7];
|
char timer_index[7];
|
||||||
#endif
|
#endif
|
||||||
@@ -267,6 +268,16 @@ int gptimer_init1(struct drvmgr_dev *dev)
|
|||||||
/* Get Frequency that the timers are operating in (after prescaler) */
|
/* Get Frequency that the timers are operating in (after prescaler) */
|
||||||
priv->base_freq = priv->base_clk / (priv->regs->scaler_reload + 1);
|
priv->base_freq = priv->base_clk / (priv->regs->scaler_reload + 1);
|
||||||
|
|
||||||
|
/* Stop Timer and probe Pending bit. In newer hardware the
|
||||||
|
* timer has pending bit is cleared by writing a one to it,
|
||||||
|
* whereas older versions it is cleared with a zero.
|
||||||
|
*/
|
||||||
|
priv->regs->timer[0].ctrl = GPTIMER_CTRL_IP;
|
||||||
|
if ((priv->regs->timer[0].ctrl & GPTIMER_CTRL_IP) != 0)
|
||||||
|
irq_ack_mask = ~GPTIMER_CTRL_IP;
|
||||||
|
else
|
||||||
|
irq_ack_mask = ~0;
|
||||||
|
|
||||||
priv->timer_cnt = timer_cnt;
|
priv->timer_cnt = timer_cnt;
|
||||||
for (i=0; i<timer_cnt; i++) {
|
for (i=0; i<timer_cnt; i++) {
|
||||||
timer = &priv->timers[i];
|
timer = &priv->timers[i];
|
||||||
@@ -274,16 +285,7 @@ int gptimer_init1(struct drvmgr_dev *dev)
|
|||||||
timer->tindex = i + timer_start;
|
timer->tindex = i + timer_start;
|
||||||
timer->tregs = ®s->timer[(int)timer->tindex];
|
timer->tregs = ®s->timer[(int)timer->tindex];
|
||||||
timer->tdev.drv = &gptimer_tlib_drv;
|
timer->tdev.drv = &gptimer_tlib_drv;
|
||||||
|
timer->irq_ack_mask = irq_ack_mask;
|
||||||
/* Stop Timer and probe Pending bit. In newer hardware the
|
|
||||||
* timer has pending bit is cleared by writing a one to it,
|
|
||||||
* whereas older versions it is cleared with a zero.
|
|
||||||
*/
|
|
||||||
timer->tregs->ctrl = GPTIMER_CTRL_IP;
|
|
||||||
if ((timer->tregs->ctrl & GPTIMER_CTRL_IP) != 0)
|
|
||||||
timer->irq_ack_mask = ~GPTIMER_CTRL_IP;
|
|
||||||
else
|
|
||||||
timer->irq_ack_mask = ~0;
|
|
||||||
|
|
||||||
/* Register Timer at Timer Library */
|
/* Register Timer at Timer Library */
|
||||||
#if defined(LEON3) && defined(RTEMS_DRVMGR_STARTUP)
|
#if defined(LEON3) && defined(RTEMS_DRVMGR_STARTUP)
|
||||||
|
|||||||
Reference in New Issue
Block a user