From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 2/2] nios2: Split timer code into timer.c
Date: Fri, 4 Sep 2015 11:51:16 +0200 [thread overview]
Message-ID: <1441360276-4792-2-git-send-email-marex@denx.de> (raw)
In-Reply-To: <1441360276-4792-1-git-send-email-marex@denx.de>
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 <marex@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, wd at denx.de.
+ *
+ * (C) Copyright 2004, Psyent Corporation <www.psyent.com>
+ * Scott McNutt <smcnutt@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
next prev parent reply other threads:[~2015-09-04 9:51 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-04 9:51 [U-Boot] [PATCH 1/2] nios2: Switch to generic timer Marek Vasut
2015-09-04 9:51 ` Marek Vasut [this message]
2015-09-07 8:00 ` [U-Boot] [PATCH 2/2] nios2: Split timer code into timer.c Thomas Chou
2015-09-04 13:33 ` [U-Boot] [PATCH 1/2] nios2: Switch to generic timer Thomas Chou
2015-09-04 14:08 ` Marek Vasut
2015-09-05 0:10 ` Thomas Chou
2015-09-07 12:33 ` Marek Vasut
2015-09-05 13:04 ` [U-Boot] [PATCH] nios2: configure STATUS_LED_BOOT Thomas Chou
2015-09-05 13:11 ` Marek Vasut
2015-09-06 11:35 ` Thomas Chou
2015-09-06 11:56 ` Marek Vasut
2015-09-15 8:39 ` Thomas Chou
2015-09-07 1:10 ` [U-Boot] [PATCH 1/2] nios2: Switch to generic timer Thomas Chou
2015-09-07 9:32 ` Marek Vasut
2015-09-07 11:15 ` Thomas Chou
-- strict thread matches above, loose matches on Subject: below --
2015-09-07 12:31 [U-Boot] [PATCH V2 " Marek Vasut
2015-09-07 12:31 ` [U-Boot] [PATCH 2/2] nios2: Split timer code into timer.c Marek Vasut
2015-09-07 14:10 ` Thomas Chou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1441360276-4792-2-git-send-email-marex@denx.de \
--to=marex@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.