[U-Boot] [PATCH 09/12] microblaze: timer: Add device-tree driver configuration
Michal Simek
monstr at monstr.eu
Mon Jul 9 11:20:36 CEST 2012
Read configuration from DTB.
Signed-off-by: Michal Simek <monstr at monstr.eu>
---
arch/microblaze/cpu/timer.c | 25 +++++++++++++++++++++++++
1 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/arch/microblaze/cpu/timer.c b/arch/microblaze/cpu/timer.c
index dfaaaf5..91ca42b 100644
--- a/arch/microblaze/cpu/timer.c
+++ b/arch/microblaze/cpu/timer.c
@@ -25,6 +25,9 @@
#include <common.h>
#include <asm/microblaze_timer.h>
#include <asm/microblaze_intc.h>
+#include <fdtdec.h>
+
+DECLARE_GLOBAL_DATA_PTR;
volatile int timestamp = 0;
microblaze_timer_t *tmr;
@@ -62,11 +65,33 @@ int timer_init (void)
u32 preload = 0;
u32 ret = 0;
+#ifndef CONFIG_OF_CONTROL
#if defined(CONFIG_SYS_TIMER_0_ADDR) && defined(CONFIG_SYS_INTC_0_NUM)
preload = XILINX_CLOCK_FREQ / CONFIG_SYS_HZ;
irq = CONFIG_SYS_TIMER_0_IRQ;
tmr = (microblaze_timer_t *) (CONFIG_SYS_TIMER_0_ADDR);
#endif
+#else
+ int temp;
+ int offset = 0;
+
+ offset = fdt_node_offset_by_compatible(gd->fdt_blob, offset,
+ "xlnx,xps-timer-1.00.a");
+ if (offset > 0) {
+ temp = fdtdec_get_addr(gd->fdt_blob, offset, "reg");
+ if (temp != FDT_ADDR_T_NONE) {
+ tmr = (microblaze_timer_t *)temp;
+ irq = fdtdec_get_int(gd->fdt_blob, offset,
+ "interrupts", -1);
+ if (irq == -1)
+ panic("Connect IRQ to system timer\n");
+ /* Set default clock frequency */
+ temp = fdtdec_get_int(gd->fdt_blob, offset,
+ "clock-frequency", 0);
+ preload = temp / CONFIG_SYS_HZ;
+ }
+ }
+#endif
if (tmr && irq && preload) {
tmr->loadreg = preload;
--
1.7.0.4
More information about the U-Boot
mailing list