Move the timer code from interrupts.c into timer.c . Eliminate the installation of timer interrupt handler, which is no longer used.
Signed-off-by: Marek Vasut <ma...@denx.de> --- arch/nios2/cpu/Makefile | 2 +- arch/nios2/cpu/interrupts.c | 84 +---------------------------------------- arch/nios2/cpu/timer.c | 69 +++++++++++++++++++++++++++++++++ include/configs/nios2-generic.h | 3 +- 4 files changed, 72 insertions(+), 86 deletions(-) create mode 100644 arch/nios2/cpu/timer.c diff --git a/arch/nios2/cpu/Makefile b/arch/nios2/cpu/Makefile index 3fe7847..c85e261 100644 --- a/arch/nios2/cpu/Makefile +++ b/arch/nios2/cpu/Makefile @@ -7,5 +7,5 @@ extra-y = start.o obj-y = exceptions.o -obj-y += cpu.o interrupts.o sysid.o traps.o +obj-y += cpu.o interrupts.o sysid.o timer.o traps.o obj-y += fdt.o diff --git a/arch/nios2/cpu/interrupts.c b/arch/nios2/cpu/interrupts.c index 36d3ef7..9d85eb0 100644 --- a/arch/nios2/cpu/interrupts.c +++ b/arch/nios2/cpu/interrupts.c @@ -14,36 +14,8 @@ #include <asm/ptrace.h> #include <common.h> #include <command.h> -#include <watchdog.h> -#ifdef CONFIG_STATUS_LED -#include <status_led.h> -#endif - -struct nios_timer { - u32 status; /* Timer status reg */ - u32 control; /* Timer control reg */ - u32 periodl; /* Timeout period low */ - u32 periodh; /* Timeout period high */ - u32 snapl; /* Snapshot low */ - u32 snaph; /* Snapshot high */ -}; - -/* status register */ -#define NIOS_TIMER_TO (1 << 0) /* Timeout */ -#define NIOS_TIMER_RUN (1 << 1) /* Timer running */ - -/* control register */ -#define NIOS_TIMER_ITO (1 << 0) /* Timeout int ena */ -#define NIOS_TIMER_CONT (1 << 1) /* Continuous mode */ -#define NIOS_TIMER_START (1 << 2) /* Start timer */ -#define NIOS_TIMER_STOP (1 << 3) /* Stop timer */ - -#if defined(CONFIG_SYS_TIMER_BASE) && !defined(CONFIG_SYS_TIMER_IRQ) -#error CONFIG_SYS_TIMER_IRQ not defined (see documentation) -#endif - -/****************************************************************************/ +/*************************************************************************/ struct irq_action { interrupt_handler_t *handler; void *arg; @@ -52,60 +24,6 @@ struct irq_action { static struct irq_action vecs[32]; -/*************************************************************************/ -static volatile ulong timestamp; - -/* - * The board must handle this interrupt if a timer is not - * provided. - */ -void tmr_isr (void *arg) -{ - struct nios_timer *tmr = (struct nios_timer *)arg; - /* Interrupt is cleared by writing anything to the - * status register. - */ - writel (0, &tmr->status); - timestamp += CONFIG_SYS_NIOS_TMRMS; -#ifdef CONFIG_STATUS_LED - status_led_tick(timestamp); -#endif -} - -unsigned long notrace timer_read_counter(void) -{ - struct nios_timer *tmr = (struct nios_timer *)CONFIG_SYS_TIMER_BASE; - u32 val; - - /* Trigger update */ - writel(0x0, &tmr->snapl); - - /* Read timer value */ - val = readl(&tmr->snapl) & 0xffff; - val |= (readl(&tmr->snaph) & 0xffff) << 16; - - return ~val; -} - -int timer_init(void) -{ - struct nios_timer *tmr = (struct nios_timer *)CONFIG_SYS_TIMER_BASE; - - writel (0, &tmr->status); - writel (0, &tmr->control); - writel (NIOS_TIMER_STOP, &tmr->control); - - writel (0xffff, &tmr->periodl); - writel (0xffff, &tmr->periodh); - - writel (NIOS_TIMER_CONT | NIOS_TIMER_START, &tmr->control); - /* FIXME */ - irq_install_handler(CONFIG_SYS_TIMER_IRQ, tmr_isr, (void *)tmr); - - return 0; -} - -/*************************************************************************/ int disable_interrupts (void) { int val = rdctl (CTL_STATUS); diff --git a/arch/nios2/cpu/timer.c b/arch/nios2/cpu/timer.c new file mode 100644 index 0000000..006b19b --- /dev/null +++ b/arch/nios2/cpu/timer.c @@ -0,0 +1,69 @@ +/* + * (C) Copyright 2000-2002 + * Wolfgang Denk, DENX Software Engineering, w...@denx.de. + * + * (C) Copyright 2004, Psyent Corporation <www.psyent.com> + * Scott McNutt <smcn...@psyent.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <asm/nios2.h> +#include <asm/types.h> +#include <asm/io.h> + +struct nios_timer { + u32 status; /* Timer status reg */ + u32 control; /* Timer control reg */ + u32 periodl; /* Timeout period low */ + u32 periodh; /* Timeout period high */ + u32 snapl; /* Snapshot low */ + u32 snaph; /* Snapshot high */ +}; + +/* status register */ +#define NIOS_TIMER_TO (1 << 0) /* Timeout */ +#define NIOS_TIMER_RUN (1 << 1) /* Timer running */ + +/* control register */ +#define NIOS_TIMER_ITO (1 << 0) /* Timeout int ena */ +#define NIOS_TIMER_CONT (1 << 1) /* Continuous mode */ +#define NIOS_TIMER_START (1 << 2) /* Start timer */ +#define NIOS_TIMER_STOP (1 << 3) /* Stop timer */ + +#if defined(CONFIG_SYS_TIMER_BASE) && !defined(CONFIG_SYS_TIMER_IRQ) +#error CONFIG_SYS_TIMER_IRQ not defined (see documentation) +#endif + +/*************************************************************************/ +unsigned long notrace timer_read_counter(void) +{ + struct nios_timer *tmr = (struct nios_timer *)CONFIG_SYS_TIMER_BASE; + u32 val; + + /* Trigger update */ + writel(0x0, &tmr->snapl); + + /* Read timer value */ + val = readl(&tmr->snapl) & 0xffff; + val |= (readl(&tmr->snaph) & 0xffff) << 16; + + return ~val; +} + +int timer_init(void) +{ + struct nios_timer *tmr = (struct nios_timer *)CONFIG_SYS_TIMER_BASE; + + writel (0, &tmr->status); + writel (0, &tmr->control); + writel (NIOS_TIMER_STOP, &tmr->control); + + writel (0xffff, &tmr->periodl); + writel (0xffff, &tmr->periodh); + + writel (NIOS_TIMER_CONT | NIOS_TIMER_START, &tmr->control); + + return 0; +} diff --git a/include/configs/nios2-generic.h b/include/configs/nios2-generic.h index 1635794..48d56ac 100644 --- a/include/configs/nios2-generic.h +++ b/include/configs/nios2-generic.h @@ -40,7 +40,6 @@ */ #define CONFIG_SYS_TIMER_COUNTS_DOWN #define CONFIG_SYS_TIMER_RATE CONFIG_SYS_TIMER_FREQ -#define CONFIG_SYS_NIOS_TMRMS 10 /* FIXME: Desired period (msec)*/ /* * STATUS LED @@ -59,7 +58,7 @@ #define STATUS_LED_BIT 0 /* Bit-0 on GPIO */ #define STATUS_LED_STATE 1 /* Blinking */ -#define STATUS_LED_PERIOD (500 / CONFIG_SYS_NIOS_TMRMS) /* 500 msec */ +#define STATUS_LED_PERIOD (CONFIG_SYS_HZ / 2) /* 500 msec */ /* * BOOTP options -- 2.1.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot