diff options
| author | Tom Rini <trini@ti.com> | 2013-03-18 12:31:00 -0400 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2013-03-18 14:37:18 -0400 | 
| commit | 0ce033d2582129243aca10d3072a221386bbba44 (patch) | |
| tree | 6e50a3f4eed22007549dc740d0fa647a6c8cec5b /arch/arm/cpu/arm926ejs/mxs/timer.c | |
| parent | b5bec88434adb52413f1bc33fa63d7642cb8fd35 (diff) | |
| parent | b27673ccbd3d5435319b5c09c3e7061f559f925d (diff) | |
| download | olio-uboot-2014.01-0ce033d2582129243aca10d3072a221386bbba44.tar.xz olio-uboot-2014.01-0ce033d2582129243aca10d3072a221386bbba44.zip | |
Merge branch 'master' of git://git.denx.de/u-boot-arm
Albert's rework of the linker scripts conflicted with Simon's making
everyone use __bss_end.  We also had a minor conflict over
README.scrapyard being added to in mainline and enhanced in
u-boot-arm/master with proper formatting.
Conflicts:
	arch/arm/cpu/ixp/u-boot.lds
	arch/arm/cpu/u-boot.lds
	arch/arm/lib/Makefile
	board/actux1/u-boot.lds
	board/actux2/u-boot.lds
	board/actux3/u-boot.lds
	board/dvlhost/u-boot.lds
	board/freescale/mx31ads/u-boot.lds
	doc/README.scrapyard
	include/configs/tegra-common.h
Build tested for all of ARM and run-time tested on am335x_evm.
Signed-off-by: Tom Rini <trini@ti.com>
Diffstat (limited to 'arch/arm/cpu/arm926ejs/mxs/timer.c')
| -rw-r--r-- | arch/arm/cpu/arm926ejs/mxs/timer.c | 39 | 
1 files changed, 29 insertions, 10 deletions
| diff --git a/arch/arm/cpu/arm926ejs/mxs/timer.c b/arch/arm/cpu/arm926ejs/mxs/timer.c index 373841180..2039106e4 100644 --- a/arch/arm/cpu/arm926ejs/mxs/timer.c +++ b/arch/arm/cpu/arm926ejs/mxs/timer.c @@ -32,7 +32,11 @@  #include <asm/arch/sys_proto.h>  /* Maximum fixed count */ -#define TIMER_LOAD_VAL	0xffffffff +#if defined(CONFIG_MX23) +#define TIMER_LOAD_VAL 0xffff +#elif defined(CONFIG_MX28) +#define TIMER_LOAD_VAL 0xffffffff +#endif  DECLARE_GLOBAL_DATA_PTR; @@ -42,22 +46,22 @@ DECLARE_GLOBAL_DATA_PTR;  /*   * This driver uses 1kHz clock source.   */ -#define	MX28_INCREMENTER_HZ		1000 +#define	MXS_INCREMENTER_HZ		1000  static inline unsigned long tick_to_time(unsigned long tick)  { -	return tick / (MX28_INCREMENTER_HZ / CONFIG_SYS_HZ); +	return tick / (MXS_INCREMENTER_HZ / CONFIG_SYS_HZ);  }  static inline unsigned long time_to_tick(unsigned long time)  { -	return time * (MX28_INCREMENTER_HZ / CONFIG_SYS_HZ); +	return time * (MXS_INCREMENTER_HZ / CONFIG_SYS_HZ);  }  /* Calculate how many ticks happen in "us" microseconds */  static inline unsigned long us_to_tick(unsigned long us)  { -	return (us * MX28_INCREMENTER_HZ) / 1000000; +	return (us * MXS_INCREMENTER_HZ) / 1000000;  }  int timer_init(void) @@ -69,7 +73,11 @@ int timer_init(void)  	mxs_reset_block(&timrot_regs->hw_timrot_rotctrl_reg);  	/* Set fixed_count to 0 */ +#if defined(CONFIG_MX23) +	writel(0, &timrot_regs->hw_timrot_timcount0); +#elif defined(CONFIG_MX28)  	writel(0, &timrot_regs->hw_timrot_fixed_count0); +#endif  	/* Set UPDATE bit and 1Khz frequency */  	writel(TIMROT_TIMCTRLn_UPDATE | TIMROT_TIMCTRLn_RELOAD | @@ -77,7 +85,11 @@ int timer_init(void)  		&timrot_regs->hw_timrot_timctrl0);  	/* Set fixed_count to maximal value */ +#if defined(CONFIG_MX23) +	writel(TIMER_LOAD_VAL - 1, &timrot_regs->hw_timrot_timcount0); +#elif defined(CONFIG_MX28)  	writel(TIMER_LOAD_VAL, &timrot_regs->hw_timrot_fixed_count0); +#endif  	return 0;  } @@ -86,9 +98,16 @@ unsigned long long get_ticks(void)  {  	struct mxs_timrot_regs *timrot_regs =  		(struct mxs_timrot_regs *)MXS_TIMROT_BASE; +	uint32_t now;  	/* Current tick value */ -	uint32_t now = readl(&timrot_regs->hw_timrot_running_count0); +#if defined(CONFIG_MX23) +	/* Upper bits are the valid ones. */ +	now = readl(&timrot_regs->hw_timrot_timcount0) >> +		TIMROT_RUNNING_COUNTn_RUNNING_COUNT_OFFSET; +#elif defined(CONFIG_MX28) +	now = readl(&timrot_regs->hw_timrot_running_count0); +#endif  	if (lastdec >= now) {  		/* @@ -117,17 +136,17 @@ ulong get_timer(ulong base)  }  /* We use the HW_DIGCTL_MICROSECONDS register for sub-millisecond timer. */ -#define	MX28_HW_DIGCTL_MICROSECONDS	0x8001c0c0 +#define	MXS_HW_DIGCTL_MICROSECONDS	0x8001c0c0  void __udelay(unsigned long usec)  {  	uint32_t old, new, incr;  	uint32_t counter = 0; -	old = readl(MX28_HW_DIGCTL_MICROSECONDS); +	old = readl(MXS_HW_DIGCTL_MICROSECONDS);  	while (counter < usec) { -		new = readl(MX28_HW_DIGCTL_MICROSECONDS); +		new = readl(MXS_HW_DIGCTL_MICROSECONDS);  		/* Check if the timer wrapped. */  		if (new < old) { @@ -152,5 +171,5 @@ void __udelay(unsigned long usec)  ulong get_tbclk(void)  { -	return MX28_INCREMENTER_HZ; +	return MXS_INCREMENTER_HZ;  } |