Merge tag 'u-boot-atmel-fixes-2020.07-a' of https://gitlab.denx.de/u-boot/custodians...
[oweals/u-boot.git] / arch / m68k / cpu / mcf547x_8x / slicetimer.c
index 8dc010a3521aca6219a5a7d596ecfdda049a4167..33b4cff4ec7213a6760542937668e3c820eb93d9 100644 (file)
@@ -1,30 +1,17 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- * (C) Copyright 2007 Freescale Semiconductor, Inc.
+ * (C) Copyright 2007, 2012 Freescale Semiconductor, Inc.
  * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
  */
 
 #include <common.h>
+#include <init.h>
+#include <irq_func.h>
+#include <linux/delay.h>
 
 #include <asm/timer.h>
 #include <asm/immap.h>
+#include <asm/io.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -42,62 +29,61 @@ extern void dtimer_intr_setup(void);
 
 void __udelay(unsigned long usec)
 {
-       volatile slt_t *timerp = (slt_t *) (CONFIG_SYS_UDELAY_BASE);
+       slt_t *timerp = (slt_t *) (CONFIG_SYS_UDELAY_BASE);
        u32 now, freq;
 
        /* 1 us period */
        freq = CONFIG_SYS_TIMER_PRESCALER;
 
-       timerp->cr = 0;         /* Disable */
-       timerp->tcnt = usec * freq;
-       timerp->cr = SLT_CR_TEN;
+       /* Disable */
+       out_be32(&timerp->cr, 0);
+       out_be32(&timerp->tcnt, usec * freq);
+       out_be32(&timerp->cr, SLT_CR_TEN);
 
-       now = timerp->cnt;
+       now = in_be32(&timerp->cnt);
        while (now != 0)
-               now = timerp->cnt;
+               now = in_be32(&timerp->cnt);
 
-       timerp->sr |= SLT_SR_ST;
-       timerp->cr = 0;
+       setbits_be32(&timerp->sr, SLT_SR_ST);
+       out_be32(&timerp->cr, 0);
 }
 
 void dtimer_interrupt(void *not_used)
 {
-       volatile slt_t *timerp = (slt_t *) (CONFIG_SYS_TMR_BASE);
+       slt_t *timerp = (slt_t *) (CONFIG_SYS_TMR_BASE);
 
        /* check for timer interrupt asserted */
        if ((CONFIG_SYS_TMRPND_REG & CONFIG_SYS_TMRINTR_MASK) == CONFIG_SYS_TMRINTR_PEND) {
-               timerp->sr |= SLT_SR_ST;
+               setbits_be32(&timerp->sr, SLT_SR_ST);
                timestamp++;
                return;
        }
 }
 
-void timer_init(void)
+int timer_init(void)
 {
-       volatile slt_t *timerp = (slt_t *) (CONFIG_SYS_TMR_BASE);
+       slt_t *timerp = (slt_t *) (CONFIG_SYS_TMR_BASE);
 
        timestamp = 0;
 
-       timerp->cr = 0;         /* disable timer */
-       timerp->tcnt = 0;
-       timerp->sr = SLT_SR_BE | SLT_SR_ST;     /* clear status */
+       /* disable timer */
+       out_be32(&timerp->cr, 0);
+       out_be32(&timerp->tcnt, 0);
+       /* clear status */
+       out_be32(&timerp->sr, SLT_SR_BE | SLT_SR_ST);
 
        /* initialize and enable timer interrupt */
        irq_install_handler(CONFIG_SYS_TMRINTR_NO, dtimer_interrupt, 0);
 
        /* Interrupt every ms */
-       timerp->tcnt = 1000 * CONFIG_SYS_TIMER_PRESCALER;
+       out_be32(&timerp->tcnt, 1000 * CONFIG_SYS_TIMER_PRESCALER);
 
        dtimer_intr_setup();
 
        /* set a period of 1us, set timer mode to restart and
           enable timer and interrupt */
-       timerp->cr = SLT_CR_RUN | SLT_CR_IEN | SLT_CR_TEN;
-}
-
-void reset_timer(void)
-{
-       timestamp = 0;
+       out_be32(&timerp->cr, SLT_CR_RUN | SLT_CR_IEN | SLT_CR_TEN);
+       return 0;
 }
 
 ulong get_timer(ulong base)
@@ -105,8 +91,4 @@ ulong get_timer(ulong base)
        return (timestamp - base);
 }
 
-void set_timer(ulong t)
-{
-       timestamp = t;
-}
 #endif                         /* CONFIG_SLTTMR */