* [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration
@ 2012-08-06 7:46 Michal Simek
2012-08-06 7:46 ` [U-Boot] [PATCH v2 2/7] microblaze: board: Remove compilation warning Michal Simek
` (6 more replies)
0 siblings, 7 replies; 18+ messages in thread
From: Michal Simek @ 2012-08-06 7:46 UTC (permalink / raw)
To: u-boot
This is minimum code required to be able to use device-tree
for u-boot initialization.
Currently only for device driver initialization.
Linker script change ensures DTB to be aligned
for both options CONFIG_OF_EMBED and CONFIG_OF_SEPARATE.
Signed-off-by: Michal Simek <monstr@monstr.eu>
CC: Simon Glass <sjg@chromium.org>
---
v2: Show message about DTB address in bootlog
---
arch/microblaze/config.mk | 2 ++
arch/microblaze/cpu/u-boot.lds | 1 +
arch/microblaze/include/asm/global_data.h | 1 +
arch/microblaze/lib/board.c | 24 ++++++++++++++++++++++++
4 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/arch/microblaze/config.mk b/arch/microblaze/config.mk
index aca79e2..b4935f0 100644
--- a/arch/microblaze/config.mk
+++ b/arch/microblaze/config.mk
@@ -31,3 +31,5 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000
PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__
LDSCRIPT ?= $(SRCTREE)/$(CPUDIR)/u-boot.lds
+
+CONFIG_ARCH_DEVICE_TREE := microblaze
diff --git a/arch/microblaze/cpu/u-boot.lds b/arch/microblaze/cpu/u-boot.lds
index ee41145..d033a28 100644
--- a/arch/microblaze/cpu/u-boot.lds
+++ b/arch/microblaze/cpu/u-boot.lds
@@ -45,6 +45,7 @@ SECTIONS
.data ALIGN(0x4):
{
__data_start = .;
+ dts/libdts.o (.data)
*(.data)
__data_end = .;
}
diff --git a/arch/microblaze/include/asm/global_data.h b/arch/microblaze/include/asm/global_data.h
index 6e8537c..e802e4e 100644
--- a/arch/microblaze/include/asm/global_data.h
+++ b/arch/microblaze/include/asm/global_data.h
@@ -43,6 +43,7 @@ typedef struct global_data {
unsigned long precon_buf_idx; /* Pre-Console buffer index */
#endif
unsigned long env_addr; /* Address of Environment struct */
+ const void *fdt_blob; /* Our device tree, NULL if none */
unsigned long env_valid; /* Checksum of Environment valid? */
unsigned long fb_base; /* base address of frame buffer */
void **jt; /* jump table */
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index b80250a..942e18c 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -34,6 +34,7 @@
#include <net.h>
#include <asm/processor.h>
#include <asm/microblaze_intc.h>
+#include <fdtdec.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -63,6 +64,9 @@ typedef int (init_fnc_t) (void);
init_fnc_t *init_sequence[] = {
env_init,
+#ifdef CONFIG_OF_CONTROL
+ fdtdec_check_fdt,
+#endif
serial_init,
console_init_f,
#ifdef CONFIG_SYS_GPIO_0
@@ -103,6 +107,17 @@ void board_init (void)
monitor_flash_len = __end - __text_start;
+#ifdef CONFIG_OF_EMBED
+ /* Get a pointer to the FDT */
+ gd->fdt_blob = _binary_dt_dtb_start;
+#elif defined CONFIG_OF_SEPARATE
+ /* FDT is at end of image */
+ gd->fdt_blob = (void *)__end;
+#endif
+ /* Allow the early environment to override the fdt address */
+ gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16,
+ (uintptr_t)gd->fdt_blob);
+
/*
* The Malloc area is immediately below the monitor copy in DRAM
* aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
@@ -121,6 +136,15 @@ void board_init (void)
}
}
+#ifdef CONFIG_OF_CONTROL
+ /* For now, put this check after the console is ready */
+ if (fdtdec_prepare_fdt()) {
+ panic("** CONFIG_OF_CONTROL defined but no FDT - please see "
+ "doc/README.fdt-control");
+ } else
+ printf("DTB: 0x%x\n", (u32)gd->fdt_blob);
+#endif
+
puts ("SDRAM :\n");
printf ("\t\tIcache:%s\n", icache_status() ? "ON" : "OFF");
printf ("\t\tDcache:%s\n", dcache_status() ? "ON" : "OFF");
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 2/7] microblaze: board: Remove compilation warning
2012-08-06 7:46 [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Michal Simek
@ 2012-08-06 7:46 ` Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-06 7:46 ` [U-Boot] [PATCH v2 3/7] microblaze: intc: Registering interrupt should return value Michal Simek
` (5 subsequent siblings)
6 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2012-08-06 7:46 UTC (permalink / raw)
To: u-boot
Variable is used when CONFIG_SYS_FLASH_CHECKSUM is used.
Warning log:
board.c: In function 'board_init':
board.c:101: warning: unused variable 's'
Signed-off-by: Michal Simek <monstr@monstr.eu>
---
v2: Use __mabe_unused prefix
---
arch/microblaze/lib/board.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index 942e18c..b5f21d8 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -32,6 +32,7 @@
#include <stdio_dev.h>
#include <serial.h>
#include <net.h>
+#include <linux/compiler.h>
#include <asm/processor.h>
#include <asm/microblaze_intc.h>
#include <fdtdec.h>
@@ -91,7 +92,7 @@ void board_init (void)
gd = (gd_t *) (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET);
bd = (bd_t *) (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET \
- GENERATED_BD_INFO_SIZE);
- char *s;
+ __maybe_unused char *s;
#if defined(CONFIG_CMD_FLASH)
ulong flash_size = 0;
#endif
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 3/7] microblaze: intc: Registering interrupt should return value
2012-08-06 7:46 [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Michal Simek
2012-08-06 7:46 ` [U-Boot] [PATCH v2 2/7] microblaze: board: Remove compilation warning Michal Simek
@ 2012-08-06 7:46 ` Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-06 7:46 ` [U-Boot] [PATCH v2 4/7] microblaze: intc: Coding style cleanup Michal Simek
` (4 subsequent siblings)
6 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2012-08-06 7:46 UTC (permalink / raw)
To: u-boot
Return value to find out if un/registration was succesful.
Signed-off-by: Michal Simek <monstr@monstr.eu>
---
v2: Add comment to header file to describe parameters and return codes
---
arch/microblaze/cpu/interrupts.c | 16 +++++++++-------
arch/microblaze/include/asm/microblaze_intc.h | 11 ++++++++++-
2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
index ee67082..08f6bad 100644
--- a/arch/microblaze/cpu/interrupts.c
+++ b/arch/microblaze/cpu/interrupts.c
@@ -91,14 +91,13 @@ static void disable_one_interrupt(int irq)
#endif
}
-/* adding new handler for interrupt */
-void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
+int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
{
struct irq_action *act;
/* irq out of range */
if ((irq < 0) || (irq > irq_no)) {
puts ("IRQ out of range\n");
- return;
+ return -1;
}
act = &vecs[irq];
if (hdlr) { /* enable */
@@ -106,11 +105,14 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
act->arg = arg;
act->count = 0;
enable_one_interrupt (irq);
- } else { /* disable */
- act->handler = (interrupt_handler_t *) def_hdlr;
- act->arg = (void *)irq;
- disable_one_interrupt (irq);
+ return 0;
}
+
+ /* Disable */
+ act->handler = (interrupt_handler_t *) def_hdlr;
+ act->arg = (void *)irq;
+ disable_one_interrupt(irq);
+ return 1;
}
/* initialization interrupt controller - hardware */
diff --git a/arch/microblaze/include/asm/microblaze_intc.h b/arch/microblaze/include/asm/microblaze_intc.h
index 6142b9c..e9640f5 100644
--- a/arch/microblaze/include/asm/microblaze_intc.h
+++ b/arch/microblaze/include/asm/microblaze_intc.h
@@ -39,7 +39,16 @@ struct irq_action {
int count; /* number of interrupt */
};
-void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
+/**
+ * Register and unregister interrupt handler rutines
+ *
+ * @param irq IRQ number
+ * @param hdlr Interrupt handler rutine
+ * @param arg Pointer to argument which is passed to int. handler rutine
+ * @return 0 if registration pass, 1 if unregistration pass,
+ * or an error code < 0 otherwise
+ */
+int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
void *arg);
int interrupts_init(void);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 4/7] microblaze: intc: Coding style cleanup
2012-08-06 7:46 [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Michal Simek
2012-08-06 7:46 ` [U-Boot] [PATCH v2 2/7] microblaze: board: Remove compilation warning Michal Simek
2012-08-06 7:46 ` [U-Boot] [PATCH v2 3/7] microblaze: intc: Registering interrupt should return value Michal Simek
@ 2012-08-06 7:46 ` Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-06 7:46 ` [U-Boot] [PATCH v2 5/7] microblaze: timer: Prepare for device-tree initialization Michal Simek
` (3 subsequent siblings)
6 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2012-08-06 7:46 UTC (permalink / raw)
To: u-boot
Just coding style cleanup.
Remove unneeded externs.
Signed-off-by: Michal Simek <monstr@monstr.eu>
Acked-by: Simon Glass <sjg@chromium.org>
--
v2: Rebase - depends on previous intc patch
---
arch/microblaze/cpu/interrupts.c | 26 +++++++++++++-------------
1 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
index 08f6bad..7f2ee64 100644
--- a/arch/microblaze/cpu/interrupts.c
+++ b/arch/microblaze/cpu/interrupts.c
@@ -32,15 +32,12 @@
#undef DEBUG_INT
-extern void microblaze_disable_interrupts (void);
-extern void microblaze_enable_interrupts (void);
-
-void enable_interrupts (void)
+void enable_interrupts(void)
{
MSRSET(0x2);
}
-int disable_interrupts (void)
+int disable_interrupts(void)
{
unsigned int msr;
@@ -58,20 +55,21 @@ microblaze_intc_t *intc;
/* default handler */
static void def_hdlr(void)
{
- puts ("def_hdlr\n");
+ puts("def_hdlr\n");
}
static void enable_one_interrupt(int irq)
{
int mask;
int offset = 1;
+
offset <<= irq;
mask = intc->ier;
intc->ier = (mask | offset);
#ifdef DEBUG_INT
- printf ("Enable one interrupt irq %x - mask %x,ier %x\n", offset, mask,
+ printf("Enable one interrupt irq %x - mask %x,ier %x\n", offset, mask,
intc->ier);
- printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
+ printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
intc->iar, intc->mer);
#endif
}
@@ -80,13 +78,14 @@ static void disable_one_interrupt(int irq)
{
int mask;
int offset = 1;
+
offset <<= irq;
mask = intc->ier;
intc->ier = (mask & ~offset);
#ifdef DEBUG_INT
- printf ("Disable one interrupt irq %x - mask %x,ier %x\n", irq, mask,
+ printf("Disable one interrupt irq %x - mask %x,ier %x\n", irq, mask,
intc->ier);
- printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
+ printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
intc->iar, intc->mer);
#endif
}
@@ -94,9 +93,10 @@ static void disable_one_interrupt(int irq)
int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
{
struct irq_action *act;
+
/* irq out of range */
if ((irq < 0) || (irq > irq_no)) {
- puts ("IRQ out of range\n");
+ puts("IRQ out of range\n");
return -1;
}
act = &vecs[irq];
@@ -124,7 +124,7 @@ static void intc_init(void)
/* XIntc_Start - hw_interrupt enable and all interrupt enable */
intc->mer = 0x3;
#ifdef DEBUG_INT
- printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
+ printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
intc->iar, intc->mer);
#endif
}
@@ -159,7 +159,7 @@ int interrupts_init(void)
return 0;
}
-void interrupt_handler (void)
+void interrupt_handler(void)
{
int irqs = intc->ivr; /* find active interrupt */
int mask = 1;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 5/7] microblaze: timer: Prepare for device-tree initialization
2012-08-06 7:46 [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Michal Simek
` (2 preceding siblings ...)
2012-08-06 7:46 ` [U-Boot] [PATCH v2 4/7] microblaze: intc: Coding style cleanup Michal Simek
@ 2012-08-06 7:46 ` Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-06 7:46 ` [U-Boot] [PATCH v2 6/7] microblaze: Clean microblaze initialization Michal Simek
` (2 subsequent siblings)
6 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2012-08-06 7:46 UTC (permalink / raw)
To: u-boot
microblaze: Fix CONFIG_SYS_HZ usage in board config
Do not use hardcoded value. Use CONFIG_SYS_HZ instead.
Separate static configuration to single block.
Signed-off-by: Michal Simek <monstr@monstr.eu>
---
v2: Fix irq type irq == -1 means no IRQ
---
arch/microblaze/cpu/timer.c | 69 ++++++++++++-----------
arch/microblaze/include/asm/microblaze_timer.h | 3 +
arch/microblaze/lib/board.c | 5 --
include/configs/microblaze-generic.h | 12 +----
4 files changed, 41 insertions(+), 48 deletions(-)
diff --git a/arch/microblaze/cpu/timer.c b/arch/microblaze/cpu/timer.c
index cc6b897..1330401 100644
--- a/arch/microblaze/cpu/timer.c
+++ b/arch/microblaze/cpu/timer.c
@@ -27,42 +27,30 @@
#include <asm/microblaze_intc.h>
volatile int timestamp = 0;
+microblaze_timer_t *tmr;
-#ifdef CONFIG_SYS_TIMER_0
ulong get_timer (ulong base)
{
- return (timestamp - base);
+ if (tmr)
+ return timestamp - base;
+ return timestamp++ - base;
}
-#else
-ulong get_timer (ulong base)
-{
- return (timestamp++ - base);
-}
-#endif
-#ifdef CONFIG_SYS_TIMER_0
void __udelay(unsigned long usec)
{
- int i;
+ u32 i;
- i = get_timer(0);
- while ((get_timer(0) - i) < (usec / 1000))
- ;
+ if (tmr) {
+ i = get_timer(0);
+ while ((get_timer(0) - i) < (usec / 1000))
+ ;
+ } else {
+ for (i = 0; i < (usec * XILINX_CLOCK_FREQ / 10000000); i++)
+ ;
+ }
}
-#else
-void __udelay(unsigned long usec)
-{
- unsigned int i;
- for (i = 0; i < (usec * CONFIG_XILINX_CLOCK_FREQ / 10000000); i++)
- ;
-}
-#endif
-
-#ifdef CONFIG_SYS_TIMER_0
-microblaze_timer_t *tmr = (microblaze_timer_t *) (CONFIG_SYS_TIMER_0_ADDR);
-
-void timer_isr (void *arg)
+static void timer_isr(void *arg)
{
timestamp++;
tmr->control = tmr->control | TIMER_INTERRUPT;
@@ -70,15 +58,30 @@ void timer_isr (void *arg)
int timer_init (void)
{
- tmr->loadreg = CONFIG_SYS_TIMER_0_PRELOAD;
- tmr->control = TIMER_INTERRUPT | TIMER_RESET;
- tmr->control =
- TIMER_ENABLE | TIMER_ENABLE_INTR | TIMER_RELOAD | TIMER_DOWN_COUNT;
- timestamp = 0;
- install_interrupt_handler (CONFIG_SYS_TIMER_0_IRQ, timer_isr, (void *)tmr);
+ int irq = -1;
+ u32 preload = 0;
+ u32 ret = 0;
+
+#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
+
+ if (tmr && preload && irq >= 0) {
+ tmr->loadreg = preload;
+ tmr->control = TIMER_INTERRUPT | TIMER_RESET;
+ tmr->control = TIMER_ENABLE | TIMER_ENABLE_INTR |\
+ TIMER_RELOAD | TIMER_DOWN_COUNT;
+ timestamp = 0;
+ ret = install_interrupt_handler (irq, timer_isr, (void *)tmr);
+ if (ret)
+ tmr = NULL;
+ }
+
+ /* No problem if timer is not found/initialized */
return 0;
}
-#endif
/*
* This function is derived from PowerPC code (read timebase as long long).
diff --git a/arch/microblaze/include/asm/microblaze_timer.h b/arch/microblaze/include/asm/microblaze_timer.h
index 844c8db..28e8b02 100644
--- a/arch/microblaze/include/asm/microblaze_timer.h
+++ b/arch/microblaze/include/asm/microblaze_timer.h
@@ -39,3 +39,6 @@ typedef volatile struct microblaze_timer_t {
int loadreg; /* load register TLR */
int counter; /* timer/counter register */
} microblaze_timer_t;
+
+int timer_init(void);
+
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index b5f21d8..fde109f 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -42,9 +42,6 @@ DECLARE_GLOBAL_DATA_PTR;
#ifdef CONFIG_SYS_GPIO_0
extern int gpio_init (void);
#endif
-#ifdef CONFIG_SYS_TIMER_0
-extern int timer_init (void);
-#endif
#ifdef CONFIG_SYS_FSL_2
extern void fsl_init2 (void);
#endif
@@ -74,9 +71,7 @@ init_fnc_t *init_sequence[] = {
gpio_init,
#endif
interrupts_init,
-#ifdef CONFIG_SYS_TIMER_0
timer_init,
-#endif
#ifdef CONFIG_SYS_FSL_2
fsl_init2,
#endif
diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
index 1266cf7..21ddb2b 100644
--- a/include/configs/microblaze-generic.h
+++ b/include/configs/microblaze-generic.h
@@ -115,19 +115,11 @@
#endif
/* timer */
-#ifdef XILINX_TIMER_BASEADDR
-# if (XILINX_TIMER_IRQ != -1)
-# define CONFIG_SYS_TIMER_0 1
+#if defined(XILINX_TIMER_BASEADD) && defined(XILINX_TIMER_IRQ)
# define CONFIG_SYS_TIMER_0_ADDR XILINX_TIMER_BASEADDR
# define CONFIG_SYS_TIMER_0_IRQ XILINX_TIMER_IRQ
-# define FREQUENCE XILINX_CLOCK_FREQ
-# define CONFIG_SYS_TIMER_0_PRELOAD ( FREQUENCE/1000 )
-# endif
-#elif XILINX_CLOCK_FREQ
-# define CONFIG_XILINX_CLOCK_FREQ XILINX_CLOCK_FREQ
-#else
-# error BAD CLOCK FREQ
#endif
+
/* FSL */
/* #define CONFIG_SYS_FSL_2 */
/* #define FSL_INTR_2 1 */
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 6/7] microblaze: Clean microblaze initialization
2012-08-06 7:46 [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Michal Simek
` (3 preceding siblings ...)
2012-08-06 7:46 ` [U-Boot] [PATCH v2 5/7] microblaze: timer: Prepare for device-tree initialization Michal Simek
@ 2012-08-06 7:46 ` Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-06 7:46 ` [U-Boot] [PATCH v2 7/7] microblaze: board: Use bi_flashstart instead of CONFIG_SYS_FLASH_BASE Michal Simek
2012-08-07 20:10 ` [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Stephan Linz
6 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2012-08-06 7:46 UTC (permalink / raw)
To: u-boot
Move board specific function to board_init function in board/ folder
Remove externs from generic board.c
Use board_init_f function in board.c file.
Signed-off-by: Michal Simek <monstr@monstr.eu>
---
v2: Remove global pointer
Define board_init function in header
---
arch/microblaze/cpu/start.S | 2 +-
arch/microblaze/include/asm/processor.h | 3 +++
arch/microblaze/lib/board.c | 17 +++--------------
.../xilinx/microblaze-generic/microblaze-generic.c | 9 +++++++++
4 files changed, 16 insertions(+), 15 deletions(-)
diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index 8a2f634..8564c4e 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -149,7 +149,7 @@ clear_bss:
cmp r6, r5, r4 /* check if we have reach the end */
bnei r6, 2b
3: /* jumping to board_init */
- brai board_init
+ brai board_init_f
1: bri 1b
/*
diff --git a/arch/microblaze/include/asm/processor.h b/arch/microblaze/include/asm/processor.h
index 2295d0a..2c4d5ff 100644
--- a/arch/microblaze/include/asm/processor.h
+++ b/arch/microblaze/include/asm/processor.h
@@ -28,4 +28,7 @@
extern char __end[];
extern char __text_start[];
+/* Microblaze board initialization function */
+void board_init(void);
+
#endif /* __ASM_MICROBLAZE_PROCESSOR_H */
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index fde109f..b450367 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -39,13 +39,6 @@
DECLARE_GLOBAL_DATA_PTR;
-#ifdef CONFIG_SYS_GPIO_0
-extern int gpio_init (void);
-#endif
-#ifdef CONFIG_SYS_FSL_2
-extern void fsl_init2 (void);
-#endif
-
/*
* All attempts to come up with a "common" initialization sequence
* that works for all boards and architectures failed: some of the
@@ -67,20 +60,14 @@ init_fnc_t *init_sequence[] = {
#endif
serial_init,
console_init_f,
-#ifdef CONFIG_SYS_GPIO_0
- gpio_init,
-#endif
interrupts_init,
timer_init,
-#ifdef CONFIG_SYS_FSL_2
- fsl_init2,
-#endif
NULL,
};
unsigned long monitor_flash_len;
-void board_init (void)
+void board_init_f(ulong not_used)
{
bd_t *bd;
init_fnc_t **init_fnc_ptr;
@@ -189,6 +176,8 @@ void board_init (void)
/* Initialize the console (after the relocation and devices init) */
console_init_r();
+ board_init();
+
/* Initialize from environment */
load_addr = getenv_ulong("loadaddr", 16, load_addr);
diff --git a/board/xilinx/microblaze-generic/microblaze-generic.c b/board/xilinx/microblaze-generic/microblaze-generic.c
index a1e2bfe..b75e62c 100644
--- a/board/xilinx/microblaze-generic/microblaze-generic.c
+++ b/board/xilinx/microblaze-generic/microblaze-generic.c
@@ -28,6 +28,7 @@
#include <common.h>
#include <config.h>
#include <netdev.h>
+#include <asm/processor.h>
#include <asm/microblaze_intc.h>
#include <asm/asm.h>
@@ -69,6 +70,14 @@ int fsl_init2 (void) {
}
#endif
+void board_init(void)
+{
+ gpio_init();
+#ifdef CONFIG_SYS_FSL_2
+ fsl_init2();
+#endif
+}
+
int board_eth_init(bd_t *bis)
{
int ret = 0;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 7/7] microblaze: board: Use bi_flashstart instead of CONFIG_SYS_FLASH_BASE
2012-08-06 7:46 [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Michal Simek
` (4 preceding siblings ...)
2012-08-06 7:46 ` [U-Boot] [PATCH v2 6/7] microblaze: Clean microblaze initialization Michal Simek
@ 2012-08-06 7:46 ` Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-07 20:10 ` [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Stephan Linz
6 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2012-08-06 7:46 UTC (permalink / raw)
To: u-boot
Prepare for device-tree driven configuration.
Signed-off-by: Michal Simek <monstr@monstr.eu>
---
v2: Move bi_flashsize and bi_flashoffset from other patch
---
arch/microblaze/lib/board.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index b450367..674b573 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -136,9 +136,8 @@ void board_init_f(ulong not_used)
#if defined(CONFIG_CMD_FLASH)
puts ("Flash: ");
bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
- if (0 < (flash_size = flash_init ())) {
- bd->bi_flashsize = flash_size;
- bd->bi_flashoffset = CONFIG_SYS_FLASH_BASE + flash_size;
+ flash_size = flash_init();
+ if (bd->bi_flashstart && flash_size > 0) {
# ifdef CONFIG_SYS_FLASH_CHECKSUM
print_size (flash_size, "");
/*
@@ -149,13 +148,16 @@ void board_init_f(ulong not_used)
s = getenv ("flashchecksum");
if (s && (*s == 'y')) {
printf (" CRC: %08X",
- crc32 (0, (const unsigned char *) CONFIG_SYS_FLASH_BASE, flash_size)
+ crc32(0, (const u8 *)bd->bi_flashstart,
+ flash_size)
);
}
putc ('\n');
# else /* !CONFIG_SYS_FLASH_CHECKSUM */
print_size (flash_size, "\n");
# endif /* CONFIG_SYS_FLASH_CHECKSUM */
+ bd->bi_flashsize = flash_size;
+ bd->bi_flashoffset = bd->bi_flashstart + flash_size;
} else {
puts ("Flash init FAILED");
bd->bi_flashstart = 0;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration
2012-08-06 7:46 [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Michal Simek
` (5 preceding siblings ...)
2012-08-06 7:46 ` [U-Boot] [PATCH v2 7/7] microblaze: board: Use bi_flashstart instead of CONFIG_SYS_FLASH_BASE Michal Simek
@ 2012-08-07 20:10 ` Stephan Linz
2012-08-10 7:16 ` Michal Simek
6 siblings, 1 reply; 18+ messages in thread
From: Stephan Linz @ 2012-08-07 20:10 UTC (permalink / raw)
To: u-boot
Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
> This is minimum code required to be able to use device-tree
> for u-boot initialization.
> Currently only for device driver initialization.
>
> Linker script change ensures DTB to be aligned
> for both options CONFIG_OF_EMBED and CONFIG_OF_SEPARATE.
>
> Signed-off-by: Michal Simek <monstr@monstr.eu>
> CC: Simon Glass <sjg@chromium.org>
>
Acked-by: Stephan Linz <linz@li-pro.net>
Tested with AXI systems on Avnet S6LX150T and S6LX9 micro-evaluation.
> ---
> v2: Show message about DTB address in bootlog
> ---
> arch/microblaze/config.mk | 2 ++
> arch/microblaze/cpu/u-boot.lds | 1 +
> arch/microblaze/include/asm/global_data.h | 1 +
> arch/microblaze/lib/board.c | 24 ++++++++++++++++++++++++
> 4 files changed, 28 insertions(+), 0 deletions(-)
>
> diff --git a/arch/microblaze/config.mk b/arch/microblaze/config.mk
> index aca79e2..b4935f0 100644
> --- a/arch/microblaze/config.mk
> +++ b/arch/microblaze/config.mk
> @@ -31,3 +31,5 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000
> PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__
>
> LDSCRIPT ?= $(SRCTREE)/$(CPUDIR)/u-boot.lds
> +
> +CONFIG_ARCH_DEVICE_TREE := microblaze
> diff --git a/arch/microblaze/cpu/u-boot.lds b/arch/microblaze/cpu/u-boot.lds
> index ee41145..d033a28 100644
> --- a/arch/microblaze/cpu/u-boot.lds
> +++ b/arch/microblaze/cpu/u-boot.lds
> @@ -45,6 +45,7 @@ SECTIONS
> .data ALIGN(0x4):
> {
> __data_start = .;
> + dts/libdts.o (.data)
> *(.data)
> __data_end = .;
> }
> diff --git a/arch/microblaze/include/asm/global_data.h b/arch/microblaze/include/asm/global_data.h
> index 6e8537c..e802e4e 100644
> --- a/arch/microblaze/include/asm/global_data.h
> +++ b/arch/microblaze/include/asm/global_data.h
> @@ -43,6 +43,7 @@ typedef struct global_data {
> unsigned long precon_buf_idx; /* Pre-Console buffer index */
> #endif
> unsigned long env_addr; /* Address of Environment struct */
> + const void *fdt_blob; /* Our device tree, NULL if none */
> unsigned long env_valid; /* Checksum of Environment valid? */
> unsigned long fb_base; /* base address of frame buffer */
> void **jt; /* jump table */
> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
> index b80250a..942e18c 100644
> --- a/arch/microblaze/lib/board.c
> +++ b/arch/microblaze/lib/board.c
> @@ -34,6 +34,7 @@
> #include <net.h>
> #include <asm/processor.h>
> #include <asm/microblaze_intc.h>
> +#include <fdtdec.h>
>
> DECLARE_GLOBAL_DATA_PTR;
>
> @@ -63,6 +64,9 @@ typedef int (init_fnc_t) (void);
>
> init_fnc_t *init_sequence[] = {
> env_init,
> +#ifdef CONFIG_OF_CONTROL
> + fdtdec_check_fdt,
> +#endif
> serial_init,
> console_init_f,
> #ifdef CONFIG_SYS_GPIO_0
> @@ -103,6 +107,17 @@ void board_init (void)
>
> monitor_flash_len = __end - __text_start;
>
> +#ifdef CONFIG_OF_EMBED
> + /* Get a pointer to the FDT */
> + gd->fdt_blob = _binary_dt_dtb_start;
> +#elif defined CONFIG_OF_SEPARATE
> + /* FDT is at end of image */
> + gd->fdt_blob = (void *)__end;
> +#endif
> + /* Allow the early environment to override the fdt address */
> + gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16,
> + (uintptr_t)gd->fdt_blob);
> +
> /*
> * The Malloc area is immediately below the monitor copy in DRAM
> * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
> @@ -121,6 +136,15 @@ void board_init (void)
> }
> }
>
> +#ifdef CONFIG_OF_CONTROL
> + /* For now, put this check after the console is ready */
> + if (fdtdec_prepare_fdt()) {
> + panic("** CONFIG_OF_CONTROL defined but no FDT - please see "
> + "doc/README.fdt-control");
> + } else
> + printf("DTB: 0x%x\n", (u32)gd->fdt_blob);
> +#endif
> +
> puts ("SDRAM :\n");
> printf ("\t\tIcache:%s\n", icache_status() ? "ON" : "OFF");
> printf ("\t\tDcache:%s\n", dcache_status() ? "ON" : "OFF");
--
Viele Gr??e,
Stephan Linz
______________________________________________________________________________
MB-Ref: http://www.li-pro.de/xilinx_mb:mbref:start
OpenDCC: http://www.li-pro.net/opendcc.phtml
PC/M: http://www.li-pro.net/pcm.phtml
Sourceforge: http://sourceforge.net/users/slz
Gitorious: https://gitorious.org/~slz
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 2/7] microblaze: board: Remove compilation warning
2012-08-06 7:46 ` [U-Boot] [PATCH v2 2/7] microblaze: board: Remove compilation warning Michal Simek
@ 2012-08-07 20:10 ` Stephan Linz
0 siblings, 0 replies; 18+ messages in thread
From: Stephan Linz @ 2012-08-07 20:10 UTC (permalink / raw)
To: u-boot
Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
> Variable is used when CONFIG_SYS_FLASH_CHECKSUM is used.
>
> Warning log:
> board.c: In function 'board_init':
> board.c:101: warning: unused variable 's'
>
> Signed-off-by: Michal Simek <monstr@monstr.eu>
>
Acked-by: Stephan Linz <linz@li-pro.net>
> ---
> v2: Use __mabe_unused prefix
> ---
> arch/microblaze/lib/board.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
> index 942e18c..b5f21d8 100644
> --- a/arch/microblaze/lib/board.c
> +++ b/arch/microblaze/lib/board.c
> @@ -32,6 +32,7 @@
> #include <stdio_dev.h>
> #include <serial.h>
> #include <net.h>
> +#include <linux/compiler.h>
> #include <asm/processor.h>
> #include <asm/microblaze_intc.h>
> #include <fdtdec.h>
> @@ -91,7 +92,7 @@ void board_init (void)
> gd = (gd_t *) (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET);
> bd = (bd_t *) (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET \
> - GENERATED_BD_INFO_SIZE);
> - char *s;
> + __maybe_unused char *s;
> #if defined(CONFIG_CMD_FLASH)
> ulong flash_size = 0;
> #endif
--
Viele Gr??e,
Stephan Linz
______________________________________________________________________________
MB-Ref: http://www.li-pro.de/xilinx_mb:mbref:start
OpenDCC: http://www.li-pro.net/opendcc.phtml
PC/M: http://www.li-pro.net/pcm.phtml
Sourceforge: http://sourceforge.net/users/slz
Gitorious: https://gitorious.org/~slz
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 3/7] microblaze: intc: Registering interrupt should return value
2012-08-06 7:46 ` [U-Boot] [PATCH v2 3/7] microblaze: intc: Registering interrupt should return value Michal Simek
@ 2012-08-07 20:10 ` Stephan Linz
2012-08-08 8:27 ` Michal Simek
0 siblings, 1 reply; 18+ messages in thread
From: Stephan Linz @ 2012-08-07 20:10 UTC (permalink / raw)
To: u-boot
Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
> Return value to find out if un/registration was succesful.
>
> Signed-off-by: Michal Simek <monstr@monstr.eu>
>
> ---
> v2: Add comment to header file to describe parameters and return codes
> ---
> arch/microblaze/cpu/interrupts.c | 16 +++++++++-------
> arch/microblaze/include/asm/microblaze_intc.h | 11 ++++++++++-
> 2 files changed, 19 insertions(+), 8 deletions(-)
>
> diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
> index ee67082..08f6bad 100644
> --- a/arch/microblaze/cpu/interrupts.c
> +++ b/arch/microblaze/cpu/interrupts.c
> @@ -91,14 +91,13 @@ static void disable_one_interrupt(int irq)
> #endif
> }
>
> -/* adding new handler for interrupt */
> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
> {
> struct irq_action *act;
> /* irq out of range */
> if ((irq < 0) || (irq > irq_no)) {
> puts ("IRQ out of range\n");
> - return;
> + return -1;
> }
> act = &vecs[irq];
> if (hdlr) { /* enable */
> @@ -106,11 +105,14 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
> act->arg = arg;
> act->count = 0;
> enable_one_interrupt (irq);
> - } else { /* disable */
> - act->handler = (interrupt_handler_t *) def_hdlr;
> - act->arg = (void *)irq;
> - disable_one_interrupt (irq);
> + return 0;
> }
> +
> + /* Disable */
> + act->handler = (interrupt_handler_t *) def_hdlr;
> + act->arg = (void *)irq;
> + disable_one_interrupt(irq);
> + return 1;
> }
>
> /* initialization interrupt controller - hardware */
> diff --git a/arch/microblaze/include/asm/microblaze_intc.h b/arch/microblaze/include/asm/microblaze_intc.h
> index 6142b9c..e9640f5 100644
> --- a/arch/microblaze/include/asm/microblaze_intc.h
> +++ b/arch/microblaze/include/asm/microblaze_intc.h
> @@ -39,7 +39,16 @@ struct irq_action {
> int count; /* number of interrupt */
> };
>
> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
> +/**
> + * Register and unregister interrupt handler rutines
> + *
> + * @param irq IRQ number
> + * @param hdlr Interrupt handler rutine
> + * @param arg Pointer to argument which is passed to int. handler rutine
> + * @return 0 if registration pass, 1 if unregistration pass,
> + * or an error code < 0 otherwise
> + */
> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
> void *arg);
Hi Michal,
why not two different functions here, one for registration, another one
for unregistration? To mee it is puzzling to use a 'install' function
for unregistration ...
... whatever, you should evaluate the return code in fsl_init2() too.
>
> int interrupts_init(void);
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 4/7] microblaze: intc: Coding style cleanup
2012-08-06 7:46 ` [U-Boot] [PATCH v2 4/7] microblaze: intc: Coding style cleanup Michal Simek
@ 2012-08-07 20:10 ` Stephan Linz
0 siblings, 0 replies; 18+ messages in thread
From: Stephan Linz @ 2012-08-07 20:10 UTC (permalink / raw)
To: u-boot
Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
> Just coding style cleanup.
> Remove unneeded externs.
>
> Signed-off-by: Michal Simek <monstr@monstr.eu>
> Acked-by: Simon Glass <sjg@chromium.org>
>
Acked-by: Stephan Linz <linz@li-pro.net>
> --
> v2: Rebase - depends on previous intc patch
> ---
> arch/microblaze/cpu/interrupts.c | 26 +++++++++++++-------------
> 1 files changed, 13 insertions(+), 13 deletions(-)
>
> diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
> index 08f6bad..7f2ee64 100644
> --- a/arch/microblaze/cpu/interrupts.c
> +++ b/arch/microblaze/cpu/interrupts.c
> @@ -32,15 +32,12 @@
>
> #undef DEBUG_INT
>
> -extern void microblaze_disable_interrupts (void);
> -extern void microblaze_enable_interrupts (void);
> -
> -void enable_interrupts (void)
> +void enable_interrupts(void)
> {
> MSRSET(0x2);
> }
>
> -int disable_interrupts (void)
> +int disable_interrupts(void)
> {
> unsigned int msr;
>
> @@ -58,20 +55,21 @@ microblaze_intc_t *intc;
> /* default handler */
> static void def_hdlr(void)
> {
> - puts ("def_hdlr\n");
> + puts("def_hdlr\n");
> }
>
> static void enable_one_interrupt(int irq)
> {
> int mask;
> int offset = 1;
> +
> offset <<= irq;
> mask = intc->ier;
> intc->ier = (mask | offset);
> #ifdef DEBUG_INT
> - printf ("Enable one interrupt irq %x - mask %x,ier %x\n", offset, mask,
> + printf("Enable one interrupt irq %x - mask %x,ier %x\n", offset, mask,
> intc->ier);
> - printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
> + printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
> intc->iar, intc->mer);
> #endif
> }
> @@ -80,13 +78,14 @@ static void disable_one_interrupt(int irq)
> {
> int mask;
> int offset = 1;
> +
> offset <<= irq;
> mask = intc->ier;
> intc->ier = (mask & ~offset);
> #ifdef DEBUG_INT
> - printf ("Disable one interrupt irq %x - mask %x,ier %x\n", irq, mask,
> + printf("Disable one interrupt irq %x - mask %x,ier %x\n", irq, mask,
> intc->ier);
> - printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
> + printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
> intc->iar, intc->mer);
> #endif
> }
> @@ -94,9 +93,10 @@ static void disable_one_interrupt(int irq)
> int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
> {
> struct irq_action *act;
> +
> /* irq out of range */
> if ((irq < 0) || (irq > irq_no)) {
> - puts ("IRQ out of range\n");
> + puts("IRQ out of range\n");
> return -1;
> }
> act = &vecs[irq];
> @@ -124,7 +124,7 @@ static void intc_init(void)
> /* XIntc_Start - hw_interrupt enable and all interrupt enable */
> intc->mer = 0x3;
> #ifdef DEBUG_INT
> - printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
> + printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
> intc->iar, intc->mer);
> #endif
> }
> @@ -159,7 +159,7 @@ int interrupts_init(void)
> return 0;
> }
>
> -void interrupt_handler (void)
> +void interrupt_handler(void)
> {
> int irqs = intc->ivr; /* find active interrupt */
> int mask = 1;
--
Viele Gr??e,
Stephan Linz
______________________________________________________________________________
MB-Ref: http://www.li-pro.de/xilinx_mb:mbref:start
OpenDCC: http://www.li-pro.net/opendcc.phtml
PC/M: http://www.li-pro.net/pcm.phtml
Sourceforge: http://sourceforge.net/users/slz
Gitorious: https://gitorious.org/~slz
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 5/7] microblaze: timer: Prepare for device-tree initialization
2012-08-06 7:46 ` [U-Boot] [PATCH v2 5/7] microblaze: timer: Prepare for device-tree initialization Michal Simek
@ 2012-08-07 20:10 ` Stephan Linz
2012-08-08 8:27 ` Michal Simek
0 siblings, 1 reply; 18+ messages in thread
From: Stephan Linz @ 2012-08-07 20:10 UTC (permalink / raw)
To: u-boot
Hi Michal,
looks fine, but ... (see below)
Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
> microblaze: Fix CONFIG_SYS_HZ usage in board config
>
> Do not use hardcoded value. Use CONFIG_SYS_HZ instead.
> Separate static configuration to single block.
>
> Signed-off-by: Michal Simek <monstr@monstr.eu>
>
> ---
> v2: Fix irq type irq == -1 means no IRQ
> ---
> arch/microblaze/cpu/timer.c | 69 ++++++++++++-----------
> arch/microblaze/include/asm/microblaze_timer.h | 3 +
> arch/microblaze/lib/board.c | 5 --
> include/configs/microblaze-generic.h | 12 +----
> 4 files changed, 41 insertions(+), 48 deletions(-)
>
> diff --git a/arch/microblaze/cpu/timer.c b/arch/microblaze/cpu/timer.c
> index cc6b897..1330401 100644
> --- a/arch/microblaze/cpu/timer.c
> +++ b/arch/microblaze/cpu/timer.c
> @@ -27,42 +27,30 @@
> #include <asm/microblaze_intc.h>
>
> volatile int timestamp = 0;
> +microblaze_timer_t *tmr;
>
> -#ifdef CONFIG_SYS_TIMER_0
> ulong get_timer (ulong base)
> {
> - return (timestamp - base);
> + if (tmr)
> + return timestamp - base;
> + return timestamp++ - base;
> }
> -#else
> -ulong get_timer (ulong base)
> -{
> - return (timestamp++ - base);
> -}
> -#endif
>
> -#ifdef CONFIG_SYS_TIMER_0
> void __udelay(unsigned long usec)
> {
> - int i;
> + u32 i;
>
> - i = get_timer(0);
> - while ((get_timer(0) - i) < (usec / 1000))
> - ;
> + if (tmr) {
> + i = get_timer(0);
> + while ((get_timer(0) - i) < (usec / 1000))
> + ;
> + } else {
> + for (i = 0; i < (usec * XILINX_CLOCK_FREQ / 10000000); i++)
> + ;
> + }
> }
> -#else
> -void __udelay(unsigned long usec)
> -{
> - unsigned int i;
>
> - for (i = 0; i < (usec * CONFIG_XILINX_CLOCK_FREQ / 10000000); i++)
> - ;
> -}
> -#endif
> -
> -#ifdef CONFIG_SYS_TIMER_0
> -microblaze_timer_t *tmr = (microblaze_timer_t *) (CONFIG_SYS_TIMER_0_ADDR);
> -
> -void timer_isr (void *arg)
> +static void timer_isr(void *arg)
> {
> timestamp++;
> tmr->control = tmr->control | TIMER_INTERRUPT;
> @@ -70,15 +58,30 @@ void timer_isr (void *arg)
>
> int timer_init (void)
> {
> - tmr->loadreg = CONFIG_SYS_TIMER_0_PRELOAD;
> - tmr->control = TIMER_INTERRUPT | TIMER_RESET;
> - tmr->control =
> - TIMER_ENABLE | TIMER_ENABLE_INTR | TIMER_RELOAD | TIMER_DOWN_COUNT;
> - timestamp = 0;
> - install_interrupt_handler (CONFIG_SYS_TIMER_0_IRQ, timer_isr, (void *)tmr);
> + int irq = -1;
> + u32 preload = 0;
> + u32 ret = 0;
> +
> +#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
> +
> + if (tmr && preload && irq >= 0) {
> + tmr->loadreg = preload;
> + tmr->control = TIMER_INTERRUPT | TIMER_RESET;
> + tmr->control = TIMER_ENABLE | TIMER_ENABLE_INTR |\
> + TIMER_RELOAD | TIMER_DOWN_COUNT;
> + timestamp = 0;
> + ret = install_interrupt_handler (irq, timer_isr, (void *)tmr);
> + if (ret)
> + tmr = NULL;
> + }
> +
> + /* No problem if timer is not found/initialized */
> return 0;
> }
> -#endif
>
> /*
> * This function is derived from PowerPC code (read timebase as long long).
> diff --git a/arch/microblaze/include/asm/microblaze_timer.h b/arch/microblaze/include/asm/microblaze_timer.h
> index 844c8db..28e8b02 100644
> --- a/arch/microblaze/include/asm/microblaze_timer.h
> +++ b/arch/microblaze/include/asm/microblaze_timer.h
> @@ -39,3 +39,6 @@ typedef volatile struct microblaze_timer_t {
> int loadreg; /* load register TLR */
> int counter; /* timer/counter register */
> } microblaze_timer_t;
> +
> +int timer_init(void);
> +
> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
> index b5f21d8..fde109f 100644
> --- a/arch/microblaze/lib/board.c
> +++ b/arch/microblaze/lib/board.c
> @@ -42,9 +42,6 @@ DECLARE_GLOBAL_DATA_PTR;
> #ifdef CONFIG_SYS_GPIO_0
> extern int gpio_init (void);
> #endif
> -#ifdef CONFIG_SYS_TIMER_0
> -extern int timer_init (void);
> -#endif
> #ifdef CONFIG_SYS_FSL_2
> extern void fsl_init2 (void);
> #endif
> @@ -74,9 +71,7 @@ init_fnc_t *init_sequence[] = {
> gpio_init,
> #endif
> interrupts_init,
> -#ifdef CONFIG_SYS_TIMER_0
> timer_init,
> -#endif
> #ifdef CONFIG_SYS_FSL_2
> fsl_init2,
> #endif
> diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
> index 1266cf7..21ddb2b 100644
> --- a/include/configs/microblaze-generic.h
> +++ b/include/configs/microblaze-generic.h
> @@ -115,19 +115,11 @@
> #endif
>
> /* timer */
> -#ifdef XILINX_TIMER_BASEADDR
> -# if (XILINX_TIMER_IRQ != -1)
> -# define CONFIG_SYS_TIMER_0 1
> +#if defined(XILINX_TIMER_BASEADD) && defined(XILINX_TIMER_IRQ)
typo here XILINX_TIMER_BASEADD <--- missing 'R'
br,
Stephan
> # define CONFIG_SYS_TIMER_0_ADDR XILINX_TIMER_BASEADDR
> # define CONFIG_SYS_TIMER_0_IRQ XILINX_TIMER_IRQ
> -# define FREQUENCE XILINX_CLOCK_FREQ
> -# define CONFIG_SYS_TIMER_0_PRELOAD ( FREQUENCE/1000 )
> -# endif
> -#elif XILINX_CLOCK_FREQ
> -# define CONFIG_XILINX_CLOCK_FREQ XILINX_CLOCK_FREQ
> -#else
> -# error BAD CLOCK FREQ
> #endif
> +
> /* FSL */
> /* #define CONFIG_SYS_FSL_2 */
> /* #define FSL_INTR_2 1 */
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 6/7] microblaze: Clean microblaze initialization
2012-08-06 7:46 ` [U-Boot] [PATCH v2 6/7] microblaze: Clean microblaze initialization Michal Simek
@ 2012-08-07 20:10 ` Stephan Linz
0 siblings, 0 replies; 18+ messages in thread
From: Stephan Linz @ 2012-08-07 20:10 UTC (permalink / raw)
To: u-boot
Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
> Move board specific function to board_init function in board/ folder
> Remove externs from generic board.c
> Use board_init_f function in board.c file.
>
> Signed-off-by: Michal Simek <monstr@monstr.eu>
>
Acked-by: Stephan Linz <linz@li-pro.net>
Tested with AXI systems on Avnet S6LX150T and S6LX9 micro-evaluation.
> ---
> v2: Remove global pointer
> Define board_init function in header
> ---
> arch/microblaze/cpu/start.S | 2 +-
> arch/microblaze/include/asm/processor.h | 3 +++
> arch/microblaze/lib/board.c | 17 +++--------------
> .../xilinx/microblaze-generic/microblaze-generic.c | 9 +++++++++
> 4 files changed, 16 insertions(+), 15 deletions(-)
>
> diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
> index 8a2f634..8564c4e 100644
> --- a/arch/microblaze/cpu/start.S
> +++ b/arch/microblaze/cpu/start.S
> @@ -149,7 +149,7 @@ clear_bss:
> cmp r6, r5, r4 /* check if we have reach the end */
> bnei r6, 2b
> 3: /* jumping to board_init */
> - brai board_init
> + brai board_init_f
> 1: bri 1b
>
> /*
> diff --git a/arch/microblaze/include/asm/processor.h b/arch/microblaze/include/asm/processor.h
> index 2295d0a..2c4d5ff 100644
> --- a/arch/microblaze/include/asm/processor.h
> +++ b/arch/microblaze/include/asm/processor.h
> @@ -28,4 +28,7 @@
> extern char __end[];
> extern char __text_start[];
>
> +/* Microblaze board initialization function */
> +void board_init(void);
> +
> #endif /* __ASM_MICROBLAZE_PROCESSOR_H */
> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
> index fde109f..b450367 100644
> --- a/arch/microblaze/lib/board.c
> +++ b/arch/microblaze/lib/board.c
> @@ -39,13 +39,6 @@
>
> DECLARE_GLOBAL_DATA_PTR;
>
> -#ifdef CONFIG_SYS_GPIO_0
> -extern int gpio_init (void);
> -#endif
> -#ifdef CONFIG_SYS_FSL_2
> -extern void fsl_init2 (void);
> -#endif
> -
> /*
> * All attempts to come up with a "common" initialization sequence
> * that works for all boards and architectures failed: some of the
> @@ -67,20 +60,14 @@ init_fnc_t *init_sequence[] = {
> #endif
> serial_init,
> console_init_f,
> -#ifdef CONFIG_SYS_GPIO_0
> - gpio_init,
> -#endif
> interrupts_init,
> timer_init,
> -#ifdef CONFIG_SYS_FSL_2
> - fsl_init2,
> -#endif
> NULL,
> };
>
> unsigned long monitor_flash_len;
>
> -void board_init (void)
> +void board_init_f(ulong not_used)
> {
> bd_t *bd;
> init_fnc_t **init_fnc_ptr;
> @@ -189,6 +176,8 @@ void board_init (void)
> /* Initialize the console (after the relocation and devices init) */
> console_init_r();
>
> + board_init();
> +
> /* Initialize from environment */
> load_addr = getenv_ulong("loadaddr", 16, load_addr);
>
> diff --git a/board/xilinx/microblaze-generic/microblaze-generic.c b/board/xilinx/microblaze-generic/microblaze-generic.c
> index a1e2bfe..b75e62c 100644
> --- a/board/xilinx/microblaze-generic/microblaze-generic.c
> +++ b/board/xilinx/microblaze-generic/microblaze-generic.c
> @@ -28,6 +28,7 @@
> #include <common.h>
> #include <config.h>
> #include <netdev.h>
> +#include <asm/processor.h>
> #include <asm/microblaze_intc.h>
> #include <asm/asm.h>
>
> @@ -69,6 +70,14 @@ int fsl_init2 (void) {
> }
> #endif
>
> +void board_init(void)
> +{
> + gpio_init();
> +#ifdef CONFIG_SYS_FSL_2
> + fsl_init2();
> +#endif
> +}
> +
> int board_eth_init(bd_t *bis)
> {
> int ret = 0;
--
Viele Gr??e,
Stephan Linz
______________________________________________________________________________
MB-Ref: http://www.li-pro.de/xilinx_mb:mbref:start
OpenDCC: http://www.li-pro.net/opendcc.phtml
PC/M: http://www.li-pro.net/pcm.phtml
Sourceforge: http://sourceforge.net/users/slz
Gitorious: https://gitorious.org/~slz
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 7/7] microblaze: board: Use bi_flashstart instead of CONFIG_SYS_FLASH_BASE
2012-08-06 7:46 ` [U-Boot] [PATCH v2 7/7] microblaze: board: Use bi_flashstart instead of CONFIG_SYS_FLASH_BASE Michal Simek
@ 2012-08-07 20:10 ` Stephan Linz
0 siblings, 0 replies; 18+ messages in thread
From: Stephan Linz @ 2012-08-07 20:10 UTC (permalink / raw)
To: u-boot
Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
> Prepare for device-tree driven configuration.
>
> Signed-off-by: Michal Simek <monstr@monstr.eu>
>
Acked-by: Stephan Linz <linz@li-pro.net>
Tested with AXI systems on Avnet S6LX150T and S6LX9 micro-evaluation.
> ---
> v2: Move bi_flashsize and bi_flashoffset from other patch
> ---
> arch/microblaze/lib/board.c | 10 ++++++----
> 1 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
> index b450367..674b573 100644
> --- a/arch/microblaze/lib/board.c
> +++ b/arch/microblaze/lib/board.c
> @@ -136,9 +136,8 @@ void board_init_f(ulong not_used)
> #if defined(CONFIG_CMD_FLASH)
> puts ("Flash: ");
> bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
> - if (0 < (flash_size = flash_init ())) {
> - bd->bi_flashsize = flash_size;
> - bd->bi_flashoffset = CONFIG_SYS_FLASH_BASE + flash_size;
> + flash_size = flash_init();
> + if (bd->bi_flashstart && flash_size > 0) {
> # ifdef CONFIG_SYS_FLASH_CHECKSUM
> print_size (flash_size, "");
> /*
> @@ -149,13 +148,16 @@ void board_init_f(ulong not_used)
> s = getenv ("flashchecksum");
> if (s && (*s == 'y')) {
> printf (" CRC: %08X",
> - crc32 (0, (const unsigned char *) CONFIG_SYS_FLASH_BASE, flash_size)
> + crc32(0, (const u8 *)bd->bi_flashstart,
> + flash_size)
> );
> }
> putc ('\n');
> # else /* !CONFIG_SYS_FLASH_CHECKSUM */
> print_size (flash_size, "\n");
> # endif /* CONFIG_SYS_FLASH_CHECKSUM */
> + bd->bi_flashsize = flash_size;
> + bd->bi_flashoffset = bd->bi_flashstart + flash_size;
> } else {
> puts ("Flash init FAILED");
> bd->bi_flashstart = 0;
--
Viele Gr??e,
Stephan Linz
______________________________________________________________________________
MB-Ref: http://www.li-pro.de/xilinx_mb:mbref:start
OpenDCC: http://www.li-pro.net/opendcc.phtml
PC/M: http://www.li-pro.net/pcm.phtml
Sourceforge: http://sourceforge.net/users/slz
Gitorious: https://gitorious.org/~slz
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 3/7] microblaze: intc: Registering interrupt should return value
2012-08-07 20:10 ` Stephan Linz
@ 2012-08-08 8:27 ` Michal Simek
2012-08-08 17:47 ` Stephan Linz
0 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2012-08-08 8:27 UTC (permalink / raw)
To: u-boot
On 08/07/2012 10:10 PM, Stephan Linz wrote:
> Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
>> Return value to find out if un/registration was succesful.
>>
>> Signed-off-by: Michal Simek <monstr@monstr.eu>
>>
>> ---
>> v2: Add comment to header file to describe parameters and return codes
>> ---
>> arch/microblaze/cpu/interrupts.c | 16 +++++++++-------
>> arch/microblaze/include/asm/microblaze_intc.h | 11 ++++++++++-
>> 2 files changed, 19 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
>> index ee67082..08f6bad 100644
>> --- a/arch/microblaze/cpu/interrupts.c
>> +++ b/arch/microblaze/cpu/interrupts.c
>> @@ -91,14 +91,13 @@ static void disable_one_interrupt(int irq)
>> #endif
>> }
>>
>> -/* adding new handler for interrupt */
>> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
>> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
>> {
>> struct irq_action *act;
>> /* irq out of range */
>> if ((irq < 0) || (irq > irq_no)) {
>> puts ("IRQ out of range\n");
>> - return;
>> + return -1;
>> }
>> act = &vecs[irq];
>> if (hdlr) { /* enable */
>> @@ -106,11 +105,14 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
>> act->arg = arg;
>> act->count = 0;
>> enable_one_interrupt (irq);
>> - } else { /* disable */
>> - act->handler = (interrupt_handler_t *) def_hdlr;
>> - act->arg = (void *)irq;
>> - disable_one_interrupt (irq);
>> + return 0;
>> }
>> +
>> + /* Disable */
>> + act->handler = (interrupt_handler_t *) def_hdlr;
>> + act->arg = (void *)irq;
>> + disable_one_interrupt(irq);
>> + return 1;
>> }
>>
>> /* initialization interrupt controller - hardware */
>> diff --git a/arch/microblaze/include/asm/microblaze_intc.h b/arch/microblaze/include/asm/microblaze_intc.h
>> index 6142b9c..e9640f5 100644
>> --- a/arch/microblaze/include/asm/microblaze_intc.h
>> +++ b/arch/microblaze/include/asm/microblaze_intc.h
>> @@ -39,7 +39,16 @@ struct irq_action {
>> int count; /* number of interrupt */
>> };
>>
>> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
>> +/**
>> + * Register and unregister interrupt handler rutines
>> + *
>> + * @param irq IRQ number
>> + * @param hdlr Interrupt handler rutine
>> + * @param arg Pointer to argument which is passed to int. handler rutine
>> + * @return 0 if registration pass, 1 if unregistration pass,
>> + * or an error code < 0 otherwise
>> + */
>> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
>> void *arg);
>
> Hi Michal,
>
> why not two different functions here, one for registration, another one
> for unregistration? To mee it is puzzling to use a 'install' function
> for unregistration ...
partially agree with that. Maybe we could introduce one macro for that.
#define uninstall_interrupt_handler(irq) install_interrupt_handler(irq, NULL, NULL)
> ... whatever, you should evaluate the return code in fsl_init2() too.
Not necessary to do it in this patch.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 5/7] microblaze: timer: Prepare for device-tree initialization
2012-08-07 20:10 ` Stephan Linz
@ 2012-08-08 8:27 ` Michal Simek
0 siblings, 0 replies; 18+ messages in thread
From: Michal Simek @ 2012-08-08 8:27 UTC (permalink / raw)
To: u-boot
On 08/07/2012 10:10 PM, Stephan Linz wrote:
> Hi Michal,
>
> looks fine, but ... (see below)
>
> Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
>> microblaze: Fix CONFIG_SYS_HZ usage in board config
>>
>> Do not use hardcoded value. Use CONFIG_SYS_HZ instead.
>> Separate static configuration to single block.
>>
>> Signed-off-by: Michal Simek <monstr@monstr.eu>
>>
>> ---
>> v2: Fix irq type irq == -1 means no IRQ
>> ---
>> arch/microblaze/cpu/timer.c | 69 ++++++++++++-----------
>> arch/microblaze/include/asm/microblaze_timer.h | 3 +
>> arch/microblaze/lib/board.c | 5 --
>> include/configs/microblaze-generic.h | 12 +----
>> 4 files changed, 41 insertions(+), 48 deletions(-)
>>
>> diff --git a/arch/microblaze/cpu/timer.c b/arch/microblaze/cpu/timer.c
>> index cc6b897..1330401 100644
>> --- a/arch/microblaze/cpu/timer.c
>> +++ b/arch/microblaze/cpu/timer.c
>> @@ -27,42 +27,30 @@
>> #include <asm/microblaze_intc.h>
>>
>> volatile int timestamp = 0;
>> +microblaze_timer_t *tmr;
>>
>> -#ifdef CONFIG_SYS_TIMER_0
>> ulong get_timer (ulong base)
>> {
>> - return (timestamp - base);
>> + if (tmr)
>> + return timestamp - base;
>> + return timestamp++ - base;
>> }
>> -#else
>> -ulong get_timer (ulong base)
>> -{
>> - return (timestamp++ - base);
>> -}
>> -#endif
>>
>> -#ifdef CONFIG_SYS_TIMER_0
>> void __udelay(unsigned long usec)
>> {
>> - int i;
>> + u32 i;
>>
>> - i = get_timer(0);
>> - while ((get_timer(0) - i) < (usec / 1000))
>> - ;
>> + if (tmr) {
>> + i = get_timer(0);
>> + while ((get_timer(0) - i) < (usec / 1000))
>> + ;
>> + } else {
>> + for (i = 0; i < (usec * XILINX_CLOCK_FREQ / 10000000); i++)
>> + ;
>> + }
>> }
>> -#else
>> -void __udelay(unsigned long usec)
>> -{
>> - unsigned int i;
>>
>> - for (i = 0; i < (usec * CONFIG_XILINX_CLOCK_FREQ / 10000000); i++)
>> - ;
>> -}
>> -#endif
>> -
>> -#ifdef CONFIG_SYS_TIMER_0
>> -microblaze_timer_t *tmr = (microblaze_timer_t *) (CONFIG_SYS_TIMER_0_ADDR);
>> -
>> -void timer_isr (void *arg)
>> +static void timer_isr(void *arg)
>> {
>> timestamp++;
>> tmr->control = tmr->control | TIMER_INTERRUPT;
>> @@ -70,15 +58,30 @@ void timer_isr (void *arg)
>>
>> int timer_init (void)
>> {
>> - tmr->loadreg = CONFIG_SYS_TIMER_0_PRELOAD;
>> - tmr->control = TIMER_INTERRUPT | TIMER_RESET;
>> - tmr->control =
>> - TIMER_ENABLE | TIMER_ENABLE_INTR | TIMER_RELOAD | TIMER_DOWN_COUNT;
>> - timestamp = 0;
>> - install_interrupt_handler (CONFIG_SYS_TIMER_0_IRQ, timer_isr, (void *)tmr);
>> + int irq = -1;
>> + u32 preload = 0;
>> + u32 ret = 0;
>> +
>> +#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
>> +
>> + if (tmr && preload && irq >= 0) {
>> + tmr->loadreg = preload;
>> + tmr->control = TIMER_INTERRUPT | TIMER_RESET;
>> + tmr->control = TIMER_ENABLE | TIMER_ENABLE_INTR |\
>> + TIMER_RELOAD | TIMER_DOWN_COUNT;
>> + timestamp = 0;
>> + ret = install_interrupt_handler (irq, timer_isr, (void *)tmr);
>> + if (ret)
>> + tmr = NULL;
>> + }
>> +
>> + /* No problem if timer is not found/initialized */
>> return 0;
>> }
>> -#endif
>>
>> /*
>> * This function is derived from PowerPC code (read timebase as long long).
>> diff --git a/arch/microblaze/include/asm/microblaze_timer.h b/arch/microblaze/include/asm/microblaze_timer.h
>> index 844c8db..28e8b02 100644
>> --- a/arch/microblaze/include/asm/microblaze_timer.h
>> +++ b/arch/microblaze/include/asm/microblaze_timer.h
>> @@ -39,3 +39,6 @@ typedef volatile struct microblaze_timer_t {
>> int loadreg; /* load register TLR */
>> int counter; /* timer/counter register */
>> } microblaze_timer_t;
>> +
>> +int timer_init(void);
>> +
>> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
>> index b5f21d8..fde109f 100644
>> --- a/arch/microblaze/lib/board.c
>> +++ b/arch/microblaze/lib/board.c
>> @@ -42,9 +42,6 @@ DECLARE_GLOBAL_DATA_PTR;
>> #ifdef CONFIG_SYS_GPIO_0
>> extern int gpio_init (void);
>> #endif
>> -#ifdef CONFIG_SYS_TIMER_0
>> -extern int timer_init (void);
>> -#endif
>> #ifdef CONFIG_SYS_FSL_2
>> extern void fsl_init2 (void);
>> #endif
>> @@ -74,9 +71,7 @@ init_fnc_t *init_sequence[] = {
>> gpio_init,
>> #endif
>> interrupts_init,
>> -#ifdef CONFIG_SYS_TIMER_0
>> timer_init,
>> -#endif
>> #ifdef CONFIG_SYS_FSL_2
>> fsl_init2,
>> #endif
>> diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
>> index 1266cf7..21ddb2b 100644
>> --- a/include/configs/microblaze-generic.h
>> +++ b/include/configs/microblaze-generic.h
>> @@ -115,19 +115,11 @@
>> #endif
>>
>> /* timer */
>> -#ifdef XILINX_TIMER_BASEADDR
>> -# if (XILINX_TIMER_IRQ != -1)
>> -# define CONFIG_SYS_TIMER_0 1
>> +#if defined(XILINX_TIMER_BASEADD) && defined(XILINX_TIMER_IRQ)
>
> typo here XILINX_TIMER_BASEADD <--- missing 'R'
Will fix it when I add this to my branch.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 3/7] microblaze: intc: Registering interrupt should return value
2012-08-08 8:27 ` Michal Simek
@ 2012-08-08 17:47 ` Stephan Linz
0 siblings, 0 replies; 18+ messages in thread
From: Stephan Linz @ 2012-08-08 17:47 UTC (permalink / raw)
To: u-boot
Am Mittwoch, den 08.08.2012, 10:27 +0200 schrieb Michal Simek:
> On 08/07/2012 10:10 PM, Stephan Linz wrote:
> > Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
> >> Return value to find out if un/registration was succesful.
> >>
> >> Signed-off-by: Michal Simek <monstr@monstr.eu>
> >>
> >> ---
> >> v2: Add comment to header file to describe parameters and return codes
> >> ---
> >> arch/microblaze/cpu/interrupts.c | 16 +++++++++-------
> >> arch/microblaze/include/asm/microblaze_intc.h | 11 ++++++++++-
> >> 2 files changed, 19 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
> >> index ee67082..08f6bad 100644
> >> --- a/arch/microblaze/cpu/interrupts.c
> >> +++ b/arch/microblaze/cpu/interrupts.c
> >> @@ -91,14 +91,13 @@ static void disable_one_interrupt(int irq)
> >> #endif
> >> }
> >>
> >> -/* adding new handler for interrupt */
> >> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
> >> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
> >> {
> >> struct irq_action *act;
> >> /* irq out of range */
> >> if ((irq < 0) || (irq > irq_no)) {
> >> puts ("IRQ out of range\n");
> >> - return;
> >> + return -1;
> >> }
> >> act = &vecs[irq];
> >> if (hdlr) { /* enable */
> >> @@ -106,11 +105,14 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
> >> act->arg = arg;
> >> act->count = 0;
> >> enable_one_interrupt (irq);
> >> - } else { /* disable */
> >> - act->handler = (interrupt_handler_t *) def_hdlr;
> >> - act->arg = (void *)irq;
> >> - disable_one_interrupt (irq);
> >> + return 0;
> >> }
> >> +
> >> + /* Disable */
> >> + act->handler = (interrupt_handler_t *) def_hdlr;
> >> + act->arg = (void *)irq;
> >> + disable_one_interrupt(irq);
> >> + return 1;
> >> }
> >>
> >> /* initialization interrupt controller - hardware */
> >> diff --git a/arch/microblaze/include/asm/microblaze_intc.h b/arch/microblaze/include/asm/microblaze_intc.h
> >> index 6142b9c..e9640f5 100644
> >> --- a/arch/microblaze/include/asm/microblaze_intc.h
> >> +++ b/arch/microblaze/include/asm/microblaze_intc.h
> >> @@ -39,7 +39,16 @@ struct irq_action {
> >> int count; /* number of interrupt */
> >> };
> >>
> >> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
> >> +/**
> >> + * Register and unregister interrupt handler rutines
> >> + *
> >> + * @param irq IRQ number
> >> + * @param hdlr Interrupt handler rutine
> >> + * @param arg Pointer to argument which is passed to int. handler rutine
> >> + * @return 0 if registration pass, 1 if unregistration pass,
> >> + * or an error code < 0 otherwise
> >> + */
> >> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
> >> void *arg);
> >
> > Hi Michal,
> >
> > why not two different functions here, one for registration, another one
> > for unregistration? To mee it is puzzling to use a 'install' function
> > for unregistration ...
>
> partially agree with that. Maybe we could introduce one macro for that.
>
> #define uninstall_interrupt_handler(irq) install_interrupt_handler(irq, NULL, NULL)
yes, that is ok ...
>
>
> > ... whatever, you should evaluate the return code in fsl_init2() too.
>
> Not necessary to do it in this patch.
yes, it's another part ...
br,
Stephan
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration
2012-08-07 20:10 ` [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Stephan Linz
@ 2012-08-10 7:16 ` Michal Simek
0 siblings, 0 replies; 18+ messages in thread
From: Michal Simek @ 2012-08-10 7:16 UTC (permalink / raw)
To: u-boot
On 08/07/2012 10:10 PM, Stephan Linz wrote:
> Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
>> This is minimum code required to be able to use device-tree
>> for u-boot initialization.
>> Currently only for device driver initialization.
>>
>> Linker script change ensures DTB to be aligned
>> for both options CONFIG_OF_EMBED and CONFIG_OF_SEPARATE.
>>
>> Signed-off-by: Michal Simek <monstr@monstr.eu>
>> CC: Simon Glass <sjg@chromium.org>
>>
>
> Acked-by: Stephan Linz <linz@li-pro.net>
>
> Tested with AXI systems on Avnet S6LX150T and S6LX9 micro-evaluation.
>
Applied the whole series to microblaze custodian repo.
I have fixed small typo fault in 5/7 directly without sending v3 patch to mailing list.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2012-08-10 7:16 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-06 7:46 [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Michal Simek
2012-08-06 7:46 ` [U-Boot] [PATCH v2 2/7] microblaze: board: Remove compilation warning Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-06 7:46 ` [U-Boot] [PATCH v2 3/7] microblaze: intc: Registering interrupt should return value Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-08 8:27 ` Michal Simek
2012-08-08 17:47 ` Stephan Linz
2012-08-06 7:46 ` [U-Boot] [PATCH v2 4/7] microblaze: intc: Coding style cleanup Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-06 7:46 ` [U-Boot] [PATCH v2 5/7] microblaze: timer: Prepare for device-tree initialization Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-08 8:27 ` Michal Simek
2012-08-06 7:46 ` [U-Boot] [PATCH v2 6/7] microblaze: Clean microblaze initialization Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-06 7:46 ` [U-Boot] [PATCH v2 7/7] microblaze: board: Use bi_flashstart instead of CONFIG_SYS_FLASH_BASE Michal Simek
2012-08-07 20:10 ` Stephan Linz
2012-08-07 20:10 ` [U-Boot] [PATCH v2 1/7] microblaze: Add support for device tree driven board configuration Stephan Linz
2012-08-10 7:16 ` Michal Simek
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.