ARM: bcm283x: Switch to generic timer

Switch to generic timer implementation from lib/time.c .
This also fixes a signed overflow which was in __udelay()
implementation.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Stephen Warren <swarren@wwwdotorg.org>
Cc: Tyler Baker <tyler.baker@linaro.org>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
master
Marek Vasut 9 years ago committed by Tom Rini
parent 25a63f5b90
commit e390bd5ed0
  1. 2
      arch/arm/mach-bcm283x/Makefile
  2. 58
      arch/arm/mach-bcm283x/timer.c
  3. 6
      include/configs/rpi-common.h

@ -5,4 +5,4 @@
#
obj-$(CONFIG_TARGET_RPI) += lowlevel_init.o
obj-y += init.o reset.o timer.o mbox.o phys2bus.o
obj-y += init.o reset.o mbox.o phys2bus.o

@ -1,58 +0,0 @@
/*
* (C) Copyright 2012 Stephen Warren
*
* 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
* version 2 as published by the Free Software Foundation.
*
* 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.
*/
#include <common.h>
#include <asm/io.h>
#include <asm/arch/timer.h>
ulong get_timer_us(ulong base)
{
struct bcm2835_timer_regs *regs =
(struct bcm2835_timer_regs *)BCM2835_TIMER_PHYSADDR;
return readl(&regs->clo) - base;
}
ulong get_timer(ulong base)
{
ulong us = get_timer_us(0);
us /= (1000000 / CONFIG_SYS_HZ);
us -= base;
return us;
}
unsigned long long get_ticks(void)
{
return get_timer(0);
}
ulong get_tbclk(void)
{
return CONFIG_SYS_HZ;
}
void __udelay(unsigned long usec)
{
ulong endtime;
signed long diff;
endtime = get_timer_us(0) + usec;
do {
ulong now = get_timer_us(0);
diff = endtime - now;
} while (diff >= 0);
}

@ -8,12 +8,18 @@
#define _RPI_COMMON_H_
#include <linux/sizes.h>
#include <asm/arch/timer.h>
/* Architecture, CPU, etc.*/
#define CONFIG_SYS_GENERIC_BOARD
#define CONFIG_BCM2835
#define CONFIG_ARCH_CPU_INIT
#define CONFIG_SYS_DCACHE_OFF
#define CONFIG_SYS_TIMER_RATE 1000000
#define CONFIG_SYS_TIMER_COUNTER \
(&((struct bcm2835_timer_regs *)BCM2835_TIMER_PHYSADDR)->clo)
/*
* 2835 is a SKU in a series for which the 2708 is the first or primary SoC,
* so 2708 has historically been used rather than a dedicated 2835 ID.

Loading…
Cancel
Save