* [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler
@ 2015-01-27 15:20 Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 02/14] microblaze: Show return address from exception Michal Simek
` (12 more replies)
0 siblings, 13 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Do not save registers below r1 stack pointer because
it is not checked by stack undeflow is not able to detect
it.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/irq.S | 121 +++++++++++++++++++++++-----------------------
1 file changed, 60 insertions(+), 61 deletions(-)
diff --git a/arch/microblaze/cpu/irq.S b/arch/microblaze/cpu/irq.S
index 24015898b0aa..5cfe1516bfcd 100644
--- a/arch/microblaze/cpu/irq.S
+++ b/arch/microblaze/cpu/irq.S
@@ -11,71 +11,70 @@
.text
.global _interrupt_handler
_interrupt_handler:
- swi r2, r1, -4
- swi r3, r1, -8
- swi r4, r1, -12
- swi r5, r1, -16
- swi r6, r1, -20
- swi r7, r1, -24
- swi r8, r1, -28
- swi r9, r1, -32
- swi r10, r1, -36
- swi r11, r1, -40
- swi r12, r1, -44
- swi r13, r1, -48
- swi r14, r1, -52
- swi r15, r1, -56
- swi r16, r1, -60
- swi r17, r1, -64
- swi r18, r1, -68
- swi r19, r1, -72
- swi r20, r1, -76
- swi r21, r1, -80
- swi r22, r1, -84
- swi r23, r1, -88
- swi r24, r1, -92
- swi r25, r1, -96
- swi r26, r1, -100
- swi r27, r1, -104
- swi r28, r1, -108
- swi r29, r1, -112
- swi r30, r1, -116
- swi r31, r1, -120
addik r1, r1, -124
+ swi r2, r1, 4
+ swi r3, r1, 8
+ swi r4, r1, 12
+ swi r5, r1, 16
+ swi r6, r1, 20
+ swi r7, r1, 24
+ swi r8, r1, 28
+ swi r9, r1, 32
+ swi r10, r1, 36
+ swi r11, r1, 40
+ swi r12, r1, 44
+ swi r13, r1, 48
+ swi r14, r1, 52
+ swi r15, r1, 56
+ swi r16, r1, 60
+ swi r17, r1, 64
+ swi r18, r1, 68
+ swi r19, r1, 72
+ swi r20, r1, 76
+ swi r21, r1, 80
+ swi r22, r1, 84
+ swi r23, r1, 88
+ swi r24, r1, 92
+ swi r25, r1, 96
+ swi r26, r1, 100
+ swi r27, r1, 104
+ swi r28, r1, 108
+ swi r29, r1, 112
+ swi r30, r1, 116
+ swi r31, r1, 120
brlid r15, interrupt_handler
nop
+ lwi r31, r1, 120
+ lwi r30, r1, 116
+ lwi r29, r1, 112
+ lwi r28, r1, 108
+ lwi r27, r1, 104
+ lwi r26, r1, 100
+ lwi r25, r1, 96
+ lwi r24, r1, 92
+ lwi r23, r1, 88
+ lwi r22, r1, 84
+ lwi r21, r1, 80
+ lwi r20, r1, 76
+ lwi r19, r1, 72
+ lwi r18, r1, 68
+ lwi r17, r1, 64
+ lwi r16, r1, 60
+ lwi r15, r1, 56
+ lwi r14, r1, 52
+ lwi r13, r1, 48
+ lwi r12, r1, 44
+ lwi r11, r1, 40
+ lwi r10, r1, 36
+ lwi r9, r1, 32
+ lwi r8, r1, 28
+ lwi r7, r1, 24
+ lwi r6, r1, 20
+ lwi r5, r1, 16
+ lwi r4, r1, 12
+ lwi r3, r1, 8
+ lwi r2, r1, 4
addik r1, r1, 124
- lwi r31, r1, -120
- lwi r30, r1, -116
- lwi r29, r1, -112
- lwi r28, r1, -108
- lwi r27, r1, -104
- lwi r26, r1, -100
- lwi r25, r1, -96
- lwi r24, r1, -92
- lwi r23, r1, -88
- lwi r22, r1, -84
- lwi r21, r1, -80
- lwi r20, r1, -76
- lwi r19, r1, -72
- lwi r18, r1, -68
- lwi r17, r1, -64
- lwi r16, r1, -60
- lwi r15, r1, -56
- lwi r14, r1, -52
- lwi r13, r1, -48
- lwi r12, r1, -44
- lwi r11, r1, -40
- lwi r10, r1, -36
- lwi r9, r1, -32
- lwi r8, r1, -28
- lwi r7, r1, -24
- lwi r6, r1, -20
- lwi r5, r1, -16
- lwi r4, r1, -12
- lwi r3, r1, -8
- lwi r2, r1, -4
-
rtid r14, 0
nop
.size _interrupt_handler,.-_interrupt_handler
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/769766d1/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 02/14] microblaze: Show return address from exception
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 03/14] microblaze: Fix coding style in exception.c Michal Simek
` (11 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Show also return address from exception which should
suggest where the problem is.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/exception.c | 2 ++
arch/microblaze/include/asm/asm.h | 4 ++++
2 files changed, 6 insertions(+)
diff --git a/arch/microblaze/cpu/exception.c b/arch/microblaze/cpu/exception.c
index 227842f6a483..45729331f3d3 100644
--- a/arch/microblaze/cpu/exception.c
+++ b/arch/microblaze/cpu/exception.c
@@ -18,6 +18,8 @@ void _hw_exception_handler (void)
/* loading excetpion state register ESR */
MFS (state, resr);
printf ("Hardware exception at 0x%x address\n", address);
+ R17(address);
+ printf("Return address from exception 0x%x\n", address);
switch (state & 0x1f) { /* mask on exception cause */
case 0x1:
puts ("Unaligned data access exception\n");
diff --git a/arch/microblaze/include/asm/asm.h b/arch/microblaze/include/asm/asm.h
index c1c3b0398579..11f3dd0f0ec0 100644
--- a/arch/microblaze/include/asm/asm.h
+++ b/arch/microblaze/include/asm/asm.h
@@ -43,6 +43,10 @@
#define R14(val) \
__asm__ __volatile__ ("addi %0, r14, 0":"=r" (val));
+/* get return address from interrupt */
+#define R17(val) \
+ __asm__ __volatile__ ("addi %0, r17, 0" : "=r" (val));
+
#define NOP __asm__ __volatile__ ("nop");
/* use machine status registe USE_MSR_REG */
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/8e8d6552/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 03/14] microblaze: Fix coding style in exception.c
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 02/14] microblaze: Show return address from exception Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 04/14] microblaze: Remove DEBUG_INT macro and use debug() instead Michal Simek
` (10 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Just coding style cleanup - no functional changes.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/exception.c | 33 +++++++++++++++++----------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/arch/microblaze/cpu/exception.c b/arch/microblaze/cpu/exception.c
index 45729331f3d3..aa34f45befe1 100644
--- a/arch/microblaze/cpu/exception.c
+++ b/arch/microblaze/cpu/exception.c
@@ -13,51 +13,52 @@ void _hw_exception_handler (void)
{
int address = 0;
int state = 0;
+
/* loading address of exception EAR */
- MFS (address, rear);
+ MFS(address, rear);
/* loading excetpion state register ESR */
- MFS (state, resr);
- printf ("Hardware exception at 0x%x address\n", address);
+ MFS(state, resr);
+ printf("Hardware exception at 0x%x address\n", address);
R17(address);
printf("Return address from exception 0x%x\n", address);
switch (state & 0x1f) { /* mask on exception cause */
case 0x1:
- puts ("Unaligned data access exception\n");
+ puts("Unaligned data access exception\n");
break;
case 0x2:
- puts ("Illegal op-code exception\n");
+ puts("Illegal op-code exception\n");
break;
case 0x3:
- puts ("Instruction bus error exception\n");
+ puts("Instruction bus error exception\n");
break;
case 0x4:
- puts ("Data bus error exception\n");
+ puts("Data bus error exception\n");
break;
case 0x5:
- puts ("Divide by zero exception\n");
+ puts("Divide by zero exception\n");
break;
#ifdef MICROBLAZE_V5
case 0x7:
puts("Priviledged or stack protection violation exception\n");
break;
case 0x1000:
- puts ("Exception in delay slot\n");
+ puts("Exception in delay slot\n");
break;
#endif
default:
- puts ("Undefined cause\n");
+ puts("Undefined cause\n");
break;
}
- printf ("Unaligned %sword access\n", ((state & 0x800) ? "" : "half"));
- printf ("Unaligned %s access\n", ((state & 0x400) ? "store" : "load"));
- printf ("Register R%x\n", (state & 0x3E) >> 5);
- hang ();
+ printf("Unaligned %sword access\n", ((state & 0x800) ? "" : "half"));
+ printf("Unaligned %s access\n", ((state & 0x400) ? "store" : "load"));
+ printf("Register R%x\n", (state & 0x3E) >> 5);
+ hang();
}
#ifdef CONFIG_SYS_USR_EXCEP
void _exception_handler (void)
{
- puts ("User vector_exception\n");
- hang ();
+ puts("User vector_exception\n");
+ hang();
}
#endif
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/d0014a71/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 04/14] microblaze: Remove DEBUG_INT macro and use debug() instead
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 02/14] microblaze: Show return address from exception Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 03/14] microblaze: Fix coding style in exception.c Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 05/14] microblaze: Fix coding style Michal Simek
` (9 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Do not use specific macros for debugging.
Also remove compilation warning:
w+../arch/microblaze/cpu/interrupts.c: In function 'interrupt_handler':
w+../arch/microblaze/cpu/interrupts.c:153:2: warning: format '%x'
expects argument of type 'unsigned int', but argument 2 has type 'void
(*)(void *)' [-Wformat]
w+../arch/microblaze/cpu/interrupts.c:153:2: warning: format '%x'
expects argument of type 'unsigned int', but argument 4 has type 'void
*' [-Wformat]
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/interrupts.c | 57 ++++++++++++++++++----------------------
1 file changed, 25 insertions(+), 32 deletions(-)
diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
index 9364e2fa9c9b..030e9147dc40 100644
--- a/arch/microblaze/cpu/interrupts.c
+++ b/arch/microblaze/cpu/interrupts.c
@@ -14,8 +14,6 @@
#include <asm/microblaze_intc.h>
#include <asm/asm.h>
-#undef DEBUG_INT
-
void enable_interrupts(void)
{
MSRSET(0x2);
@@ -50,12 +48,11 @@ static void enable_one_interrupt(int irq)
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,
- intc->ier);
- printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
- intc->iar, intc->mer);
-#endif
+
+ debug("Enable one interrupt irq %x - mask %x,ier %x\n", offset, mask,
+ intc->ier);
+ debug("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
+ intc->iar, intc->mer);
}
static void disable_one_interrupt(int irq)
@@ -66,12 +63,11 @@ static void disable_one_interrupt(int irq)
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,
- intc->ier);
- printf("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
- intc->iar, intc->mer);
-#endif
+
+ debug("Disable one interrupt irq %x - mask %x,ier %x\n", irq, mask,
+ intc->ier);
+ debug("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
+ intc->iar, intc->mer);
}
int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
@@ -107,10 +103,9 @@ static void intc_init(void)
intc->iar = 0xFFFFFFFF;
/* 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,
- intc->iar, intc->mer);
-#endif
+
+ debug("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
+ intc->iar, intc->mer);
}
int interrupts_init(void)
@@ -147,31 +142,29 @@ void interrupt_handler(void)
{
int irqs = intc->ivr; /* find active interrupt */
int mask = 1;
-#ifdef DEBUG_INT
int value;
- printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
- intc->iar, intc->mer);
- R14(value);
- printf ("Interrupt handler on %x line, r14 %x\n", irqs, value);
-#endif
struct irq_action *act = vecs + irqs;
-#ifdef DEBUG_INT
- printf
- ("Jumping to interrupt handler rutine addr %x,count %x,arg %x\n",
- act->handler, act->count, act->arg);
+ debug("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
+ intc->iar, intc->mer);
+#ifdef DEBUG
+ R14(value);
#endif
+ debug("Interrupt handler on %x line, r14 %x\n", irqs, value);
+
+ debug("Jumping to interrupt handler rutine addr %x,count %x,arg %x\n",
+ (u32)act->handler, act->count, (u32)act->arg);
act->handler (act->arg);
act->count++;
intc->iar = mask << irqs;
-#ifdef DEBUG_INT
- printf ("Dump INTC reg, isr %x, ier %x, iar %x, mer %x\n", intc->isr,
- intc->ier, intc->iar, intc->mer);
+ debug("Dump INTC reg, isr %x, ier %x, iar %x, mer %x\n", intc->isr,
+ intc->ier, intc->iar, intc->mer);
+#ifdef DEBUG
R14(value);
- printf ("Interrupt handler on %x line, r14 %x\n", irqs, value);
#endif
+ debug("Interrupt handler on %x line, r14 %x\n", irqs, value);
}
#if defined(CONFIG_CMD_IRQ)
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/bd5c9a7a/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 05/14] microblaze: Fix coding style
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
` (2 preceding siblings ...)
2015-01-27 15:20 ` [U-Boot] [PATCH 04/14] microblaze: Remove DEBUG_INT macro and use debug() instead Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 06/14] microblaze: Add debug message about enabling interrupts Michal Simek
` (8 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
No functional changes just to pass checkpatch.pl.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/interrupts.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
index 030e9147dc40..771bbd0ca628 100644
--- a/arch/microblaze/cpu/interrupts.c
+++ b/arch/microblaze/cpu/interrupts.c
@@ -84,12 +84,12 @@ int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
act->handler = hdlr;
act->arg = arg;
act->count = 0;
- enable_one_interrupt (irq);
+ enable_one_interrupt(irq);
return 0;
}
/* Disable */
- act->handler = (interrupt_handler_t *) def_hdlr;
+ act->handler = (interrupt_handler_t *)def_hdlr;
act->arg = (void *)irq;
disable_one_interrupt(irq);
return 1;
@@ -113,7 +113,7 @@ int interrupts_init(void)
int i;
#if defined(CONFIG_SYS_INTC_0_ADDR) && defined(CONFIG_SYS_INTC_0_NUM)
- intc = (microblaze_intc_t *) (CONFIG_SYS_INTC_0_ADDR);
+ intc = (microblaze_intc_t *)CONFIG_SYS_INTC_0_ADDR;
irq_no = CONFIG_SYS_INTC_0_NUM;
#endif
if (irq_no) {
@@ -125,7 +125,7 @@ int interrupts_init(void)
/* initialize irq list */
for (i = 0; i < irq_no; i++) {
- vecs[i].handler = (interrupt_handler_t *) def_hdlr;
+ vecs[i].handler = (interrupt_handler_t *)def_hdlr;
vecs[i].arg = (void *)i;
vecs[i].count = 0;
}
@@ -154,7 +154,7 @@ void interrupt_handler(void)
debug("Jumping to interrupt handler rutine addr %x,count %x,arg %x\n",
(u32)act->handler, act->count, (u32)act->arg);
- act->handler (act->arg);
+ act->handler(act->arg);
act->count++;
intc->iar = mask << irqs;
@@ -179,10 +179,10 @@ int do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, const char *argv[])
"-----------------------------\n");
for (i = 0; i < irq_no; i++) {
- if (act->handler != (interrupt_handler_t *) def_hdlr) {
+ if (act->handler != (interrupt_handler_t *)def_hdlr) {
printf("%02d %08x %08x %d\n", i,
- (int)act->handler, (int)act->arg,
- act->count);
+ (int)act->handler, (int)act->arg,
+ act->count);
}
act++;
}
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/bea43aa2/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 06/14] microblaze: Add debug message about enabling interrupts
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
` (3 preceding siblings ...)
2015-01-27 15:20 ` [U-Boot] [PATCH 05/14] microblaze: Fix coding style Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 07/14] microblaze: Remove unneeded data section adding from DTB Michal Simek
` (7 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Add one more debug message about enabling global interrupts.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/interrupts.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
index 771bbd0ca628..f66ec69ee25e 100644
--- a/arch/microblaze/cpu/interrupts.c
+++ b/arch/microblaze/cpu/interrupts.c
@@ -16,6 +16,7 @@
void enable_interrupts(void)
{
+ debug("Enable interrupts for the whole CPU\n");
MSRSET(0x2);
}
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/8a44387e/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 07/14] microblaze: Remove unneeded data section adding from DTB
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
` (4 preceding siblings ...)
2015-01-27 15:20 ` [U-Boot] [PATCH 06/14] microblaze: Add debug message about enabling interrupts Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 08/14] microblaze: Use standard interrupt_init() function Michal Simek
` (6 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
DTB is added to rodata section:
[ 2] .rodata PROGBITS 84c5b60c 05c60c 00c618 00 A
0 0 4
[ 3] .dtb.init.rodata PROGBITS 84c67c30 068c30 003c80 00 A
0 0 16
[ 4] .rela.dyn RELA 84c6b8b0 06c8b0 000534 0c A
0 0 4
[ 5] .data PROGBITS 84c6bde4 06cde4 001536 00 WA
0 0 16
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/u-boot.lds | 3 ---
1 file changed, 3 deletions(-)
diff --git a/arch/microblaze/cpu/u-boot.lds b/arch/microblaze/cpu/u-boot.lds
index fdad20753d32..44bc036172f0 100644
--- a/arch/microblaze/cpu/u-boot.lds
+++ b/arch/microblaze/cpu/u-boot.lds
@@ -29,9 +29,6 @@ SECTIONS
.data ALIGN(0x4):
{
__data_start = .;
-#ifdef CONFIG_OF_EMBED
- dts/built-in.o (.data)
-#endif
*(.data)
__data_end = .;
}
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/d8c4e8c6/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 08/14] microblaze: Use standard interrupt_init() function
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
` (5 preceding siblings ...)
2015-01-27 15:20 ` [U-Boot] [PATCH 07/14] microblaze: Remove unneeded data section adding from DTB Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 09/14] microblaze: Remove unused asm label Michal Simek
` (5 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Do not use microblaze specific interrupt init function.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/interrupts.c | 2 +-
arch/microblaze/include/asm/microblaze_intc.h | 2 --
arch/microblaze/lib/board.c | 2 +-
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
index f66ec69ee25e..b6d6610f2fd7 100644
--- a/arch/microblaze/cpu/interrupts.c
+++ b/arch/microblaze/cpu/interrupts.c
@@ -109,7 +109,7 @@ static void intc_init(void)
intc->iar, intc->mer);
}
-int interrupts_init(void)
+int interrupt_init(void)
{
int i;
diff --git a/arch/microblaze/include/asm/microblaze_intc.h b/arch/microblaze/include/asm/microblaze_intc.h
index 0fb9207882fe..65868386b0d8 100644
--- a/arch/microblaze/include/asm/microblaze_intc.h
+++ b/arch/microblaze/include/asm/microblaze_intc.h
@@ -34,5 +34,3 @@ struct irq_action {
*/
int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
void *arg);
-
-int interrupts_init(void);
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index 600c80ab7666..bd028a63c078 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -55,7 +55,7 @@ init_fnc_t *init_sequence[] = {
#endif
display_banner,
#ifndef CONFIG_SPL_BUILD
- interrupts_init,
+ interrupt_init,
timer_init,
#endif
NULL,
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/5760fc07/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 09/14] microblaze: Remove unused asm label
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
` (6 preceding siblings ...)
2015-01-27 15:20 ` [U-Boot] [PATCH 08/14] microblaze: Use standard interrupt_init() function Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 10/14] microblaze: Fix gd_t address which is placed at the end of BRAM Michal Simek
` (4 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
It is not used at all that's why remove it.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/start.S | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index 84c29e54091e..e0e3470a181a 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -129,7 +129,7 @@ _start:
/* Flush cache before enable cache */
addik r5, r0, 0
addik r6, r0, XILINX_DCACHE_BYTE_SIZE
-flush: bralid r15, flush_cache
+ bralid r15, flush_cache
nop
/* enable instruction and data cache */
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/44e6cb65/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 10/14] microblaze: Fix gd_t address which is placed at the end of BRAM
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
` (7 preceding siblings ...)
2015-01-27 15:20 ` [U-Boot] [PATCH 09/14] microblaze: Remove unused asm label Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 11/14] microblaze: Enable SPL_NOR support when FLASH_BASE is setup Michal Simek
` (3 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Setup gd from ASM to be availalbe for board_init_r.
Setting it up in spl_board_init is too late when
MALLOC is used.
Space for gd is located behind MALLOC area at the end of BRAM.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/spl.c | 2 --
arch/microblaze/cpu/start.S | 1 +
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/microblaze/cpu/spl.c b/arch/microblaze/cpu/spl.c
index 091226133e4f..2cc0a2da89e1 100644
--- a/arch/microblaze/cpu/spl.c
+++ b/arch/microblaze/cpu/spl.c
@@ -25,8 +25,6 @@ u32 spl_boot_device(void)
/* Board initialization after bss clearance */
void spl_board_init(void)
{
- gd = (gd_t *)CONFIG_SPL_STACK_ADDR;
-
/* enable console uart printing */
preloader_console_init();
}
diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index e0e3470a181a..14c2f12da06b 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -152,6 +152,7 @@ clear_bss:
#ifndef CONFIG_SPL_BUILD
brai board_init_f
#else
+ addi r31, r0, CONFIG_SYS_SPL_MALLOC_END
brai board_init_r
#endif
1: bri 1b
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/78f3cb44/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 11/14] microblaze: Enable SPL_NOR support when FLASH_BASE is setup
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
` (8 preceding siblings ...)
2015-01-27 15:20 ` [U-Boot] [PATCH 10/14] microblaze: Fix gd_t address which is placed at the end of BRAM Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 12/14] microblaze: Move architecture to use generic board init Michal Simek
` (2 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Simplify SPL NOR init.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
include/configs/microblaze-generic.h | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
index bb070600021b..2e1e64247fe0 100644
--- a/include/configs/microblaze-generic.h
+++ b/include/configs/microblaze-generic.h
@@ -452,7 +452,10 @@
#define CONFIG_SPL_LDSCRIPT "arch/microblaze/cpu/u-boot-spl.lds"
#define CONFIG_SPL_RAM_DEVICE
-#define CONFIG_SPL_NOR_SUPPORT
+#ifdef CONFIG_SYS_FLASH_BASE
+# define CONFIG_SPL_NOR_SUPPORT
+# define CONFIG_SYS_UBOOT_BASE CONFIG_SYS_FLASH_BASE
+#endif
/* for booting directly linux */
#define CONFIG_SPL_OS_BOOT
@@ -491,7 +494,6 @@
/* Just for sure that there is a space for stack */
#define CONFIG_SPL_STACK_SIZE 0x100
-#define CONFIG_SYS_UBOOT_BASE CONFIG_SYS_FLASH_BASE
#define CONFIG_SYS_UBOOT_START CONFIG_SYS_TEXT_BASE
#define CONFIG_SPL_MAX_FOOTPRINT (CONFIG_SYS_INIT_RAM_SIZE - \
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/1b69b4a0/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 12/14] microblaze: Move architecture to use generic board init
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
` (9 preceding siblings ...)
2015-01-27 15:20 ` [U-Boot] [PATCH 11/14] microblaze: Enable SPL_NOR support when FLASH_BASE is setup Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-29 2:15 ` Simon Glass
2015-01-27 15:20 ` [U-Boot] [PATCH 13/14] microblaze: Speedup code copy Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 14/14] bdinfo: Show information about fdt blob via bdinfo Michal Simek
12 siblings, 1 reply; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Compile code with -fPIC to get GOT. Do not build SPL
with fPIC because it increasing SPL size for nothing.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
This code requires
"common/board_r: manual relocation for cmd table"
http://lists.denx.de/pipermail/u-boot/2015-January/201965.html
Not fully happy about it because compare to previous solution adds
almost +60k on size for doing the same thing as before.
15: microblaze: Move architecture to use generic board init
microblaze: (for 1/1 boards) all +52268.0 bss -4.0 data +11724.0
rodata -2676.0 spl/u-boot-spl:all +36.0 spl/u-boot-spl:data +36.0
text +43224.0
microblaze-generic: all +52268 bss -4 data +11724 rodata
-2676 spl/u-boot-spl:all +36 spl/u-boot-spl:data +36 text +43224
---
arch/microblaze/config.mk | 5 +
arch/microblaze/cpu/start.S | 103 +++++++++++
arch/microblaze/cpu/u-boot.lds | 9 +
arch/microblaze/include/asm/config.h | 8 +
arch/microblaze/include/asm/u-boot.h | 11 +-
arch/microblaze/lib/Makefile | 1 -
arch/microblaze/lib/board.c | 201 ---------------------
.../xilinx/microblaze-generic/microblaze-generic.c | 46 +++++
common/board_f.c | 6 +-
common/board_r.c | 2 +-
common/cmd_bdinfo.c | 13 +-
include/configs/microblaze-generic.h | 64 +------
12 files changed, 196 insertions(+), 273 deletions(-)
delete mode 100644 arch/microblaze/lib/board.c
diff --git a/arch/microblaze/config.mk b/arch/microblaze/config.mk
index 98bbf794fa7d..2b817be61a5d 100644
--- a/arch/microblaze/config.mk
+++ b/arch/microblaze/config.mk
@@ -15,3 +15,8 @@ endif
CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000
PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__
+
+ifeq ($(CONFIG_SPL_BUILD),)
+PLATFORM_CPPFLAGS += -fPIC
+endif
+__HAVE_ARCH_GENERIC_BOARD := y
diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index 14c2f12da06b..3de0e12090ea 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -150,6 +150,7 @@ clear_bss:
bnei r6, 2b
3: /* jumping to board_init */
#ifndef CONFIG_SPL_BUILD
+ or r5, r0, r0 /* flags - empty */
brai board_init_f
#else
addi r31, r0, CONFIG_SYS_SPL_MALLOC_END
@@ -190,4 +191,106 @@ out16: bslli r3, r6, 8
rtsd r15, 8
or r0, r0, r0
.end out16
+
+/*
+ * Relocate u-boot
+ */
+ .text
+ .global relocate_code
+ .ent relocate_code
+ .align 2
+relocate_code:
+ /*
+ * r5 - start_addr_sp
+ * r6 - new_gd
+ * r7 - reloc_addr
+ */
+ addi r1, r5, 0 /* Start to use new SP */
+ addi r31, r6, 0 /* Start to use new GD */
+
+ add r23, r0, r7 /* Move reloc addr to r23 */
+ /* Relocate text and data - r12 temp value */
+ addi r21, r0, _start
+ addi r22, r0, __end - 4 /* Include BSS too */
+1: lwi r12, r21, 0 /* Load u-boot data */
+ swi r12, r23, 0 /* Write zero to loc */
+ addi r21, r21, 4 /* Increment to next loc - origin code */
+ cmp r12, r21, r22 /* Check if we have reach the end */
+ bneid r12, 1b
+ addi r23, r23, 4 /* Increment to next loc - relocate code */
+
+ /* R23 points to the base address. */
+ add r23, r0, r7 /* Move reloc addr to r23 */
+ addi r24, r0, CONFIG_SYS_TEXT_BASE /* Get reloc offset */
+ rsub r23, r24, r23 /* keep - this is already here gd->reloc_off */
+
+ addik r6, r0, 0x2 /* BIG/LITTLE endian offset */
+ lwi r7, r0, 0x28
+ swi r6, r0, 0x28 /* used first unused MB vector */
+ lbui r10, r0, 0x28 /* used first unused MB vector */
+ swi r7, r0, 0x28
+
+#ifdef CONFIG_SYS_USR_EXCEP
+ addik r6, r0, _exception_handler
+ addk r6, r6, r23 /* add offset */
+ sw r6, r1, r0
+ lhu r7, r1, r10
+ rsubi r8, r10, 0xa
+ sh r7, r0, r8
+ rsubi r8, r10, 0xe
+ sh r6, r0, r8
+#endif
+ addik r6, r0, _hw_exception_handler
+ addk r6, r6, r23 /* add offset */
+ sw r6, r1, r0
+ lhu r7, r1, r10
+ rsubi r8, r10, 0x22
+ sh r7, r0, r8
+ rsubi r8, r10, 0x26
+ sh r6, r0, r8
+
+ addik r6, r0, _interrupt_handler
+ addk r6, r6, r23 /* add offset */
+ sw r6, r1, r0
+ lhu r7, r1, r10
+ rsubi r8, r10, 0x12
+ sh r7, r0, r8
+ rsubi r8, r10, 0x16
+ sh r6, r0, r8
+
+ /* Check if GOT exist */
+ addik r21, r23, _got_start
+ addik r22, r23, _got_end
+ cmpu r12, r21, r22
+ beqi r12, 2f /* No GOT table - jump over */
+
+ /* Skip last 3 entries plus 1 because of loop boundary below */
+ addik r22, r22, -0x10
+
+ /* Relocate the GOT. */
+3: lw r12, r21, r0 /* Load entry */
+ addk r12, r12, r23 /* Add reloc offset */
+ sw r12, r21, r0 /* Save entry back */
+
+ cmpu r12, r21, r22 /* Check if this cross boundary */
+ bneid r12, 3b
+ addik r21. r21, 4
+
+ /* Update pointer to GOT */
+ mfs r20, rpc
+ addik r20, r20, _GLOBAL_OFFSET_TABLE_ + 8
+ addk r20, r20, r23
+
+ /* Flush caches to ensure consistency */
+ addik r5, r0, 0
+ addik r6, r0, XILINX_DCACHE_BYTE_SIZE
+ bralid r15, flush_cache
+ nop
+
+2: addi r5, r31, 0 /* gd is initialized in board_r.c */
+ addi r6, r0, CONFIG_SYS_TEXT_BASE
+ addi r12, r23, board_init_r
+ bra r12 /* Jump to relocated code */
+
+ .end relocate_code
#endif
diff --git a/arch/microblaze/cpu/u-boot.lds b/arch/microblaze/cpu/u-boot.lds
index 44bc036172f0..2502a0db2b14 100644
--- a/arch/microblaze/cpu/u-boot.lds
+++ b/arch/microblaze/cpu/u-boot.lds
@@ -33,10 +33,19 @@ SECTIONS
__data_end = .;
}
+ .got ALIGN(4):
+ {
+ _got_start = .;
+ *(.got*)
+ . = ALIGN(4);
+ _got_end = .;
+ }
+
. = ALIGN(4);
.u_boot_list : {
KEEP(*(SORT(.u_boot_list*)));
}
+ __init_end = . ;
.bss ALIGN(0x4):
{
diff --git a/arch/microblaze/include/asm/config.h b/arch/microblaze/include/asm/config.h
index cd2973478944..468673460bfb 100644
--- a/arch/microblaze/include/asm/config.h
+++ b/arch/microblaze/include/asm/config.h
@@ -7,4 +7,12 @@
#ifndef _ASM_CONFIG_H_
#define _ASM_CONFIG_H_
+#ifndef CONFIG_SPL_BUILD
+#define CONFIG_NEEDS_MANUAL_RELOC
+#endif
+
+#define CONFIG_NR_DRAM_BANKS 1
+#define CONFIG_SYS_GENERIC_BOARD
+#define CONFIG_SYS_GENERIC_GLOBAL_DATA
+
#endif
diff --git a/arch/microblaze/include/asm/u-boot.h b/arch/microblaze/include/asm/u-boot.h
index 54d415ebb5bd..66f8f952c9d0 100644
--- a/arch/microblaze/include/asm/u-boot.h
+++ b/arch/microblaze/include/asm/u-boot.h
@@ -16,16 +16,7 @@
#ifndef _U_BOOT_H_
#define _U_BOOT_H_
-typedef struct bd_info {
- unsigned long bi_memstart; /* start of DRAM memory */
- phys_size_t bi_memsize; /* size of DRAM memory in bytes */
- unsigned long bi_flashstart; /* start of FLASH memory */
- unsigned long bi_flashsize; /* size of FLASH memory */
- unsigned long bi_flashoffset; /* reserved area for startup monitor */
- unsigned long bi_sramstart; /* start of SRAM memory */
- unsigned long bi_sramsize; /* size of SRAM memory */
- ulong bi_boot_params; /* where this board expects params */
-} bd_t;
+#include <asm-generic/u-boot.h>
/* For image.h:image_check_target_arch() */
#define IH_ARCH_DEFAULT IH_ARCH_MICROBLAZE
diff --git a/arch/microblaze/lib/Makefile b/arch/microblaze/lib/Makefile
index 339dd153a0fd..0289d0cd609a 100644
--- a/arch/microblaze/lib/Makefile
+++ b/arch/microblaze/lib/Makefile
@@ -5,6 +5,5 @@
# SPDX-License-Identifier: GPL-2.0+
#
-obj-y += board.o
obj-$(CONFIG_CMD_BOOTM) += bootm.o
obj-y += muldi3.o
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
deleted file mode 100644
index bd028a63c078..000000000000
--- a/arch/microblaze/lib/board.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * (C) Copyright 2007 Michal Simek
- * (C) Copyright 2004 Atmark Techno, Inc.
- *
- * Michal SIMEK <monstr@monstr.eu>
- * Yasushi SHOJI <yashi@atmark-techno.com>
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-#include <common.h>
-#include <command.h>
-#include <malloc.h>
-#include <version.h>
-#include <watchdog.h>
-#include <stdio_dev.h>
-#include <serial.h>
-#include <net.h>
-#include <spi.h>
-#include <linux/compiler.h>
-#include <asm/processor.h>
-#include <asm/microblaze_intc.h>
-#include <fdtdec.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-static int display_banner(void)
-{
- printf("\n\n%s\n\n", version_string);
- return 0;
-}
-
-/*
- * All attempts to come up with a "common" initialization sequence
- * that works for all boards and architectures failed: some of the
- * requirements are just _too_ different. To get rid of the resulting
- * mess of board dependend #ifdef'ed code we now make the whole
- * initialization sequence configurable to the user.
- *
- * The requirements for any new initalization function is simple: it
- * receives a pointer to the "global data" structure as it's only
- * argument, and returns an integer return code, where 0 means
- * "continue" and != 0 means "fatal error, hang the system".
- */
-typedef int (init_fnc_t) (void);
-
-init_fnc_t *init_sequence[] = {
- env_init,
-#ifdef CONFIG_OF_CONTROL
- fdtdec_check_fdt,
-#endif
- serial_init,
-#ifndef CONFIG_SPL_BUILD
- console_init_f,
-#endif
- display_banner,
-#ifndef CONFIG_SPL_BUILD
- interrupt_init,
- timer_init,
-#endif
- NULL,
-};
-
-unsigned long monitor_flash_len;
-
-void board_init_f(ulong not_used)
-{
- bd_t *bd;
- init_fnc_t **init_fnc_ptr;
- 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);
-#if defined(CONFIG_CMD_FLASH) && !defined(CONFIG_SPL_BUILD)
- ulong flash_size = 0;
-#endif
- asm ("nop"); /* FIXME gd is not initialize - wait */
- memset((void *)gd, 0, GENERATED_GBL_DATA_SIZE);
- memset((void *)bd, 0, GENERATED_BD_INFO_SIZE);
- gd->bd = bd;
- gd->baudrate = CONFIG_BAUDRATE;
- bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
- bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
- gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */
-
- monitor_flash_len = __end - __text_start;
-
-#ifdef CONFIG_OF_EMBED
- /* Get a pointer to the FDT */
- gd->fdt_blob = __dtb_dt_begin;
-#elif defined CONFIG_OF_SEPARATE
- /* FDT is at end of image */
- gd->fdt_blob = (void *)__end;
-#endif
-
-#ifndef CONFIG_SPL_BUILD
- /* Allow the early environment to override the fdt address */
- gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16,
- (uintptr_t)gd->fdt_blob);
-#endif
-
- /*
- * The Malloc area is immediately below the monitor copy in DRAM
- * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
- * as our monitory code is run from SDRAM
- */
- mem_malloc_init(CONFIG_SYS_MALLOC_BASE, CONFIG_SYS_MALLOC_LEN);
-
- serial_initialize();
-
-#ifdef CONFIG_XILINX_TB_WATCHDOG
- hw_watchdog_init();
-#endif
- for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
- WATCHDOG_RESET();
- if ((*init_fnc_ptr) () != 0)
- hang();
- }
-
-#ifndef CONFIG_SPL_BUILD
-#ifdef CONFIG_OF_CONTROL
- /* For now, put this check after the console is ready */
- if (fdtdec_prepare_fdt())
- panic("** 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");
- printf("\tU-Boot Start:0x%08x\n", CONFIG_SYS_TEXT_BASE);
-
-#if defined(CONFIG_CMD_FLASH)
- puts("Flash: ");
- bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
- flash_size = flash_init();
- if (bd->bi_flashstart && flash_size > 0) {
-# ifdef CONFIG_SYS_FLASH_CHECKSUM
- print_size(flash_size, "");
- /*
- * Compute and print flash CRC if flashchecksum is set to 'y'
- *
- * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
- */
- if (getenv_yesno("flashchecksum") == 1) {
- printf(" CRC: %08X",
- 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;
- bd->bi_flashsize = 0;
- bd->bi_flashoffset = 0;
- }
-#endif
-
-#ifdef CONFIG_SPI
- spi_init();
-#endif
-
- /* relocate environment function pointers etc. */
- env_relocate();
-
- /* Initialize stdio devices */
- stdio_init();
-
- /* Initialize the jump table for applications */
- jumptable_init();
-
- /* 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);
-
-#if defined(CONFIG_CMD_NET)
- printf("Net: ");
- eth_initialize(gd->bd);
-
- uchar enetaddr[6];
- eth_getenv_enetaddr("ethaddr", enetaddr);
- printf("MAC: %pM\n", enetaddr);
-#endif
-
- /* main_loop */
- for (;;) {
- WATCHDOG_RESET();
- main_loop();
- }
-#endif /* CONFIG_SPL_BUILD */
-}
diff --git a/board/xilinx/microblaze-generic/microblaze-generic.c b/board/xilinx/microblaze-generic/microblaze-generic.c
index 42a8d0c400e5..062e678eccb7 100644
--- a/board/xilinx/microblaze-generic/microblaze-generic.c
+++ b/board/xilinx/microblaze-generic/microblaze-generic.c
@@ -11,16 +11,62 @@
#include <common.h>
#include <config.h>
+#include <fdtdec.h>
#include <netdev.h>
#include <asm/processor.h>
#include <asm/microblaze_intc.h>
#include <asm/asm.h>
#include <asm/gpio.h>
+DECLARE_GLOBAL_DATA_PTR;
+
#ifdef CONFIG_XILINX_GPIO
static int reset_pin = -1;
#endif
+#ifdef CONFIG_OF_CONTROL
+ulong ram_base;
+
+ulong board_get_usable_ram_top(ulong total_size)
+{
+ return ram_base + gd->ram_size;
+}
+
+void dram_init_banksize(void)
+{
+ gd->bd->bi_dram[0].start = ram_base;
+ gd->bd->bi_dram[0].size = get_effective_memsize();
+}
+
+phys_size_t initdram(int board_type)
+{
+ int node;
+ fdt_addr_t addr;
+ fdt_size_t size;
+ const void *blob = gd->fdt_blob;
+
+ node = fdt_node_offset_by_prop_value(blob, -1, "device_type",
+ "memory", 7);
+ if (node == -FDT_ERR_NOTFOUND) {
+ debug("DRAM: Can't get memory node\n");
+ return 0;
+ }
+ addr = fdtdec_get_addr_size(blob, node, "reg", &size);
+ if (addr == FDT_ADDR_T_NONE || size == 0) {
+ debug("DRAM: Can't get base address or size\n");
+ return 0;
+ }
+ ram_base = addr;
+
+ return size;
+};
+#else
+phys_size_t initdram(int board_type)
+{
+ return CONFIG_SYS_SDRAM_SIZE;
+}
+#endif
+
int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
#ifdef CONFIG_XILINX_GPIO
diff --git a/common/board_f.c b/common/board_f.c
index 3a4b32c29dc1..64b40aebb508 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -174,7 +174,7 @@ static int announce_dram_init(void)
return 0;
}
-#if defined(CONFIG_MIPS) || defined(CONFIG_PPC)
+#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_MICROBLAZE)
static int init_func_ram(void)
{
#ifdef CONFIG_BOARD_TYPES
@@ -262,7 +262,7 @@ static int zero_global_data(void)
static int setup_mon_len(void)
{
-#ifdef __ARM__
+#if defined(__ARM__) || defined(__MICROBLAZE__)
gd->mon_len = (ulong)&__bss_end - (ulong)_start;
#elif defined(CONFIG_SANDBOX)
gd->mon_len = (ulong)&_end - (ulong)_init;
@@ -906,7 +906,7 @@ static init_fnc_t init_sequence_f[] = {
#if defined(CONFIG_ARM) || defined(CONFIG_X86)
dram_init, /* configure available RAM banks */
#endif
-#if defined(CONFIG_MIPS) || defined(CONFIG_PPC)
+#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_MICROBLAZE)
init_func_ram,
#endif
#ifdef CONFIG_POST
diff --git a/common/board_r.c b/common/board_r.c
index e712902cff45..3e77720f2acb 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -829,7 +829,7 @@ init_fnc_t init_sequence_r[] = {
#if defined(CONFIG_ARM)
initr_enable_interrupts,
#endif
-#ifdef CONFIG_X86
+#if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE)
timer_init, /* initialize timer */
#endif
#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT)
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
index e6d8a7ae2c50..4c51059c1ba4 100644
--- a/common/cmd_bdinfo.c
+++ b/common/cmd_bdinfo.c
@@ -183,8 +183,14 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
bd_t *bd = gd->bd;
- print_num("mem start ", (ulong)bd->bi_memstart);
- print_lnum("mem size ", (u64)bd->bi_memsize);
+ int i;
+
+ for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
+ print_num("DRAM bank", i);
+ print_num("-> start", bd->bi_dram[i].start);
+ print_num("-> size", bd->bi_dram[i].size);
+ }
+
print_num("flash start ", (ulong)bd->bi_flashstart);
print_num("flash size ", (ulong)bd->bi_flashsize);
print_num("flash offset ", (ulong)bd->bi_flashoffset);
@@ -196,6 +202,9 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
print_eths();
#endif
printf("baudrate = %u bps\n", gd->baudrate);
+ print_num("relocaddr", gd->relocaddr);
+ print_num("reloc off", gd->reloc_off);
+
return 0;
}
diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
index 2e1e64247fe0..622bc951045b 100644
--- a/include/configs/microblaze-generic.h
+++ b/include/configs/microblaze-generic.h
@@ -106,62 +106,16 @@
# define CONFIG_XILINX_TB_WATCHDOG
#endif
-/*
- * memory layout - Example
- * CONFIG_SYS_TEXT_BASE = 0x1200_0000; defined in config.mk
- * CONFIG_SYS_SRAM_BASE = 0x1000_0000;
- * CONFIG_SYS_SRAM_SIZE = 0x0400_0000; 64MB
- *
- * CONFIG_SYS_MONITOR_LEN = 0x40000
- * CONFIG_SYS_MALLOC_LEN = 3 * CONFIG_SYS_MONITOR_LEN = 0xC0000
- *
- * CONFIG_SYS_GBL_DATA_OFFSET = 0x1000_0000 + 0x0400_0000 - 0x1000 = 0x13FF_F000
- * CONFIG_SYS_MONITOR_BASE = 0x13FF_F000 - CONFIG_SYS_MONITOR_LEN = 0x13FB_F000
- * CONFIG_SYS_MALLOC_BASE = 0x13FB_F000 - CONFIG_SYS_MALLOC_LEN = 0x13EF_F000
- *
- * 0x1000_0000 CONFIG_SYS_SDRAM_BASE
- * MEMTEST_AREA 64kB
- * FREE
- * 0x1200_0000 CONFIG_SYS_TEXT_BASE
- * U-BOOT code
- * 0x1202_0000
- * FREE
- *
- * STACK
- * 0x13EF_F000 CONFIG_SYS_MALLOC_BASE
- * MALLOC_AREA 768kB Alloc
- * 0x13FB_F000 CONFIG_SYS_MONITOR_BASE
- * MONITOR_CODE 256kB Env
- * 0x13FF_F000 CONFIG_SYS_GBL_DATA_OFFSET
- * GLOBAL_DATA 4kB bd, gd
- * 0x1400_0000 CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_SDRAM_SIZE
- */
-
+#ifndef CONFIG_OF_CONTROL
/* ddr sdram - main memory */
-#define CONFIG_SYS_SDRAM_BASE XILINX_RAM_START
-#define CONFIG_SYS_SDRAM_SIZE XILINX_RAM_SIZE
-#define CONFIG_SYS_MEMTEST_START CONFIG_SYS_SDRAM_BASE
-#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_SDRAM_BASE + 0x1000)
-
-/* global pointer */
-/* start of global data */
-#define CONFIG_SYS_GBL_DATA_OFFSET \
- (CONFIG_SYS_SDRAM_SIZE - GENERATED_GBL_DATA_SIZE)
-
-/* monitor code */
-#define SIZE 0x40000
-#define CONFIG_SYS_MONITOR_LEN SIZE
-#define CONFIG_SYS_MONITOR_BASE \
- (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET \
- - CONFIG_SYS_MONITOR_LEN - GENERATED_BD_INFO_SIZE)
-#define CONFIG_SYS_MONITOR_END \
- (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
-#define CONFIG_SYS_MALLOC_LEN (SIZE * 3)
-#define CONFIG_SYS_MALLOC_BASE \
- (CONFIG_SYS_MONITOR_BASE - CONFIG_SYS_MALLOC_LEN)
-
-/* stack */
-#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_MALLOC_BASE
+# define CONFIG_SYS_SDRAM_BASE XILINX_RAM_START
+# define CONFIG_SYS_SDRAM_SIZE XILINX_RAM_SIZE
+#endif
+
+#define CONFIG_SYS_MALLOC_LEN 0xC0000
+
+/* Stack location before relocation */
+#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_TEXT_BASE
/*
* CFI flash memory layout - Example
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/5e4b286f/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 13/14] microblaze: Speedup code copy
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
` (10 preceding siblings ...)
2015-01-27 15:20 ` [U-Boot] [PATCH 12/14] microblaze: Move architecture to use generic board init Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 14/14] bdinfo: Show information about fdt blob via bdinfo Michal Simek
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Remove one instruction in the loop which speedup
code copying.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/microblaze/cpu/start.S | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index 3de0e12090ea..4023ec067531 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -212,12 +212,14 @@ relocate_code:
/* Relocate text and data - r12 temp value */
addi r21, r0, _start
addi r22, r0, __end - 4 /* Include BSS too */
-1: lwi r12, r21, 0 /* Load u-boot data */
- swi r12, r23, 0 /* Write zero to loc */
- addi r21, r21, 4 /* Increment to next loc - origin code */
- cmp r12, r21, r22 /* Check if we have reach the end */
+
+ rsub r6, r21, r22
+ or r5, r0, r0
+1: lw r12, r21, r5 /* Load u-boot data */
+ sw r12, r23, r5 /* Write zero to loc */
+ cmp r12, r5, r6 /* Check if we have reach the end */
bneid r12, 1b
- addi r23, r23, 4 /* Increment to next loc - relocate code */
+ addi r5, r5, 4 /* Increment to next loc - relocate code */
/* R23 points to the base address. */
add r23, r0, r7 /* Move reloc addr to r23 */
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/e0e62dbb/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 14/14] bdinfo: Show information about fdt blob via bdinfo
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
` (11 preceding siblings ...)
2015-01-27 15:20 ` [U-Boot] [PATCH 13/14] microblaze: Speedup code copy Michal Simek
@ 2015-01-27 15:20 ` Michal Simek
12 siblings, 0 replies; 19+ messages in thread
From: Michal Simek @ 2015-01-27 15:20 UTC (permalink / raw)
To: u-boot
Microblaze target supports both OF and !OF cases
and from log is not clear which version is running.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
common/cmd_bdinfo.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
index 4c51059c1ba4..e9eab232f961 100644
--- a/common/cmd_bdinfo.c
+++ b/common/cmd_bdinfo.c
@@ -204,6 +204,9 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
printf("baudrate = %u bps\n", gd->baudrate);
print_num("relocaddr", gd->relocaddr);
print_num("reloc off", gd->reloc_off);
+ print_num("fdt_blob", (ulong)gd->fdt_blob);
+ print_num("new_fdt", (ulong)gd->new_fdt);
+ print_num("fdt_size", (ulong)gd->fdt_size);
return 0;
}
--
1.8.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150127/79424b56/attachment.pgp>
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 12/14] microblaze: Move architecture to use generic board init
2015-01-27 15:20 ` [U-Boot] [PATCH 12/14] microblaze: Move architecture to use generic board init Michal Simek
@ 2015-01-29 2:15 ` Simon Glass
2015-01-29 14:20 ` Michal Simek
0 siblings, 1 reply; 19+ messages in thread
From: Simon Glass @ 2015-01-29 2:15 UTC (permalink / raw)
To: u-boot
Hi Michal,
On 27 January 2015 at 08:20, Michal Simek <michal.simek@xilinx.com> wrote:
> Compile code with -fPIC to get GOT. Do not build SPL
> with fPIC because it increasing SPL size for nothing.
>
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> ---
>
> This code requires
> "common/board_r: manual relocation for cmd table"
> http://lists.denx.de/pipermail/u-boot/2015-January/201965.html
>
> Not fully happy about it because compare to previous solution adds
> almost +60k on size for doing the same thing as before.
>
> 15: microblaze: Move architecture to use generic board init
> microblaze: (for 1/1 boards) all +52268.0 bss -4.0 data +11724.0
> rodata -2676.0 spl/u-boot-spl:all +36.0 spl/u-boot-spl:data +36.0
> text +43224.0
> microblaze-generic: all +52268 bss -4 data +11724 rodata
> -2676 spl/u-boot-spl:all +36 spl/u-boot-spl:data +36 text +43224
> ---
> arch/microblaze/config.mk | 5 +
> arch/microblaze/cpu/start.S | 103 +++++++++++
> arch/microblaze/cpu/u-boot.lds | 9 +
> arch/microblaze/include/asm/config.h | 8 +
> arch/microblaze/include/asm/u-boot.h | 11 +-
> arch/microblaze/lib/Makefile | 1 -
> arch/microblaze/lib/board.c | 201 ---------------------
> .../xilinx/microblaze-generic/microblaze-generic.c | 46 +++++
> common/board_f.c | 6 +-
> common/board_r.c | 2 +-
> common/cmd_bdinfo.c | 13 +-
> include/configs/microblaze-generic.h | 64 +------
> 12 files changed, 196 insertions(+), 273 deletions(-)
> delete mode 100644 arch/microblaze/lib/board.c
>
> diff --git a/arch/microblaze/config.mk b/arch/microblaze/config.mk
> index 98bbf794fa7d..2b817be61a5d 100644
> --- a/arch/microblaze/config.mk
> +++ b/arch/microblaze/config.mk
> @@ -15,3 +15,8 @@ endif
> CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000
>
> PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__
> +
> +ifeq ($(CONFIG_SPL_BUILD),)
> +PLATFORM_CPPFLAGS += -fPIC
> +endif
> +__HAVE_ARCH_GENERIC_BOARD := y
> diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
> index 14c2f12da06b..3de0e12090ea 100644
> --- a/arch/microblaze/cpu/start.S
> +++ b/arch/microblaze/cpu/start.S
> @@ -150,6 +150,7 @@ clear_bss:
> bnei r6, 2b
> 3: /* jumping to board_init */
> #ifndef CONFIG_SPL_BUILD
> + or r5, r0, r0 /* flags - empty */
> brai board_init_f
> #else
> addi r31, r0, CONFIG_SYS_SPL_MALLOC_END
> @@ -190,4 +191,106 @@ out16: bslli r3, r6, 8
> rtsd r15, 8
> or r0, r0, r0
> .end out16
> +
> +/*
> + * Relocate u-boot
> + */
> + .text
> + .global relocate_code
> + .ent relocate_code
> + .align 2
> +relocate_code:
> + /*
> + * r5 - start_addr_sp
> + * r6 - new_gd
> + * r7 - reloc_addr
> + */
> + addi r1, r5, 0 /* Start to use new SP */
> + addi r31, r6, 0 /* Start to use new GD */
> +
> + add r23, r0, r7 /* Move reloc addr to r23 */
> + /* Relocate text and data - r12 temp value */
> + addi r21, r0, _start
> + addi r22, r0, __end - 4 /* Include BSS too */
> +1: lwi r12, r21, 0 /* Load u-boot data */
> + swi r12, r23, 0 /* Write zero to loc */
> + addi r21, r21, 4 /* Increment to next loc - origin code */
> + cmp r12, r21, r22 /* Check if we have reach the end */
> + bneid r12, 1b
> + addi r23, r23, 4 /* Increment to next loc - relocate code */
> +
> + /* R23 points to the base address. */
> + add r23, r0, r7 /* Move reloc addr to r23 */
> + addi r24, r0, CONFIG_SYS_TEXT_BASE /* Get reloc offset */
> + rsub r23, r24, r23 /* keep - this is already here gd->reloc_off */
> +
> + addik r6, r0, 0x2 /* BIG/LITTLE endian offset */
> + lwi r7, r0, 0x28
> + swi r6, r0, 0x28 /* used first unused MB vector */
> + lbui r10, r0, 0x28 /* used first unused MB vector */
> + swi r7, r0, 0x28
> +
> +#ifdef CONFIG_SYS_USR_EXCEP
> + addik r6, r0, _exception_handler
> + addk r6, r6, r23 /* add offset */
> + sw r6, r1, r0
> + lhu r7, r1, r10
> + rsubi r8, r10, 0xa
> + sh r7, r0, r8
> + rsubi r8, r10, 0xe
> + sh r6, r0, r8
> +#endif
> + addik r6, r0, _hw_exception_handler
> + addk r6, r6, r23 /* add offset */
> + sw r6, r1, r0
> + lhu r7, r1, r10
> + rsubi r8, r10, 0x22
> + sh r7, r0, r8
> + rsubi r8, r10, 0x26
> + sh r6, r0, r8
> +
> + addik r6, r0, _interrupt_handler
> + addk r6, r6, r23 /* add offset */
> + sw r6, r1, r0
> + lhu r7, r1, r10
> + rsubi r8, r10, 0x12
> + sh r7, r0, r8
> + rsubi r8, r10, 0x16
> + sh r6, r0, r8
> +
> + /* Check if GOT exist */
> + addik r21, r23, _got_start
> + addik r22, r23, _got_end
> + cmpu r12, r21, r22
> + beqi r12, 2f /* No GOT table - jump over */
> +
> + /* Skip last 3 entries plus 1 because of loop boundary below */
> + addik r22, r22, -0x10
> +
> + /* Relocate the GOT. */
> +3: lw r12, r21, r0 /* Load entry */
> + addk r12, r12, r23 /* Add reloc offset */
> + sw r12, r21, r0 /* Save entry back */
> +
> + cmpu r12, r21, r22 /* Check if this cross boundary */
> + bneid r12, 3b
> + addik r21. r21, 4
> +
> + /* Update pointer to GOT */
> + mfs r20, rpc
> + addik r20, r20, _GLOBAL_OFFSET_TABLE_ + 8
> + addk r20, r20, r23
> +
> + /* Flush caches to ensure consistency */
> + addik r5, r0, 0
> + addik r6, r0, XILINX_DCACHE_BYTE_SIZE
> + bralid r15, flush_cache
> + nop
> +
> +2: addi r5, r31, 0 /* gd is initialized in board_r.c */
> + addi r6, r0, CONFIG_SYS_TEXT_BASE
> + addi r12, r23, board_init_r
> + bra r12 /* Jump to relocated code */
> +
> + .end relocate_code
> #endif
> diff --git a/arch/microblaze/cpu/u-boot.lds b/arch/microblaze/cpu/u-boot.lds
> index 44bc036172f0..2502a0db2b14 100644
> --- a/arch/microblaze/cpu/u-boot.lds
> +++ b/arch/microblaze/cpu/u-boot.lds
> @@ -33,10 +33,19 @@ SECTIONS
> __data_end = .;
> }
>
> + .got ALIGN(4):
> + {
> + _got_start = .;
> + *(.got*)
> + . = ALIGN(4);
> + _got_end = .;
> + }
> +
> . = ALIGN(4);
> .u_boot_list : {
> KEEP(*(SORT(.u_boot_list*)));
> }
> + __init_end = . ;
>
> .bss ALIGN(0x4):
> {
> diff --git a/arch/microblaze/include/asm/config.h b/arch/microblaze/include/asm/config.h
> index cd2973478944..468673460bfb 100644
> --- a/arch/microblaze/include/asm/config.h
> +++ b/arch/microblaze/include/asm/config.h
> @@ -7,4 +7,12 @@
> #ifndef _ASM_CONFIG_H_
> #define _ASM_CONFIG_H_
>
> +#ifndef CONFIG_SPL_BUILD
> +#define CONFIG_NEEDS_MANUAL_RELOC
> +#endif
> +
> +#define CONFIG_NR_DRAM_BANKS 1
> +#define CONFIG_SYS_GENERIC_BOARD
> +#define CONFIG_SYS_GENERIC_GLOBAL_DATA
> +
> #endif
> diff --git a/arch/microblaze/include/asm/u-boot.h b/arch/microblaze/include/asm/u-boot.h
> index 54d415ebb5bd..66f8f952c9d0 100644
> --- a/arch/microblaze/include/asm/u-boot.h
> +++ b/arch/microblaze/include/asm/u-boot.h
> @@ -16,16 +16,7 @@
> #ifndef _U_BOOT_H_
> #define _U_BOOT_H_
>
> -typedef struct bd_info {
> - unsigned long bi_memstart; /* start of DRAM memory */
> - phys_size_t bi_memsize; /* size of DRAM memory in bytes */
> - unsigned long bi_flashstart; /* start of FLASH memory */
> - unsigned long bi_flashsize; /* size of FLASH memory */
> - unsigned long bi_flashoffset; /* reserved area for startup monitor */
> - unsigned long bi_sramstart; /* start of SRAM memory */
> - unsigned long bi_sramsize; /* size of SRAM memory */
> - ulong bi_boot_params; /* where this board expects params */
> -} bd_t;
> +#include <asm-generic/u-boot.h>
>
> /* For image.h:image_check_target_arch() */
> #define IH_ARCH_DEFAULT IH_ARCH_MICROBLAZE
> diff --git a/arch/microblaze/lib/Makefile b/arch/microblaze/lib/Makefile
> index 339dd153a0fd..0289d0cd609a 100644
> --- a/arch/microblaze/lib/Makefile
> +++ b/arch/microblaze/lib/Makefile
> @@ -5,6 +5,5 @@
> # SPDX-License-Identifier: GPL-2.0+
> #
>
> -obj-y += board.o
> obj-$(CONFIG_CMD_BOOTM) += bootm.o
> obj-y += muldi3.o
> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
> deleted file mode 100644
> index bd028a63c078..000000000000
> --- a/arch/microblaze/lib/board.c
> +++ /dev/null
> @@ -1,201 +0,0 @@
> -/*
> - * (C) Copyright 2007 Michal Simek
> - * (C) Copyright 2004 Atmark Techno, Inc.
> - *
> - * Michal SIMEK <monstr@monstr.eu>
> - * Yasushi SHOJI <yashi@atmark-techno.com>
> - *
> - * SPDX-License-Identifier: GPL-2.0+
> - */
> -
> -#include <common.h>
> -#include <command.h>
> -#include <malloc.h>
> -#include <version.h>
> -#include <watchdog.h>
> -#include <stdio_dev.h>
> -#include <serial.h>
> -#include <net.h>
> -#include <spi.h>
> -#include <linux/compiler.h>
> -#include <asm/processor.h>
> -#include <asm/microblaze_intc.h>
> -#include <fdtdec.h>
> -
> -DECLARE_GLOBAL_DATA_PTR;
> -
> -static int display_banner(void)
> -{
> - printf("\n\n%s\n\n", version_string);
> - return 0;
> -}
> -
> -/*
> - * All attempts to come up with a "common" initialization sequence
> - * that works for all boards and architectures failed: some of the
> - * requirements are just _too_ different. To get rid of the resulting
> - * mess of board dependend #ifdef'ed code we now make the whole
> - * initialization sequence configurable to the user.
> - *
> - * The requirements for any new initalization function is simple: it
> - * receives a pointer to the "global data" structure as it's only
> - * argument, and returns an integer return code, where 0 means
> - * "continue" and != 0 means "fatal error, hang the system".
> - */
> -typedef int (init_fnc_t) (void);
> -
> -init_fnc_t *init_sequence[] = {
> - env_init,
> -#ifdef CONFIG_OF_CONTROL
> - fdtdec_check_fdt,
> -#endif
> - serial_init,
> -#ifndef CONFIG_SPL_BUILD
> - console_init_f,
> -#endif
> - display_banner,
> -#ifndef CONFIG_SPL_BUILD
> - interrupt_init,
> - timer_init,
> -#endif
> - NULL,
> -};
> -
> -unsigned long monitor_flash_len;
> -
> -void board_init_f(ulong not_used)
> -{
> - bd_t *bd;
> - init_fnc_t **init_fnc_ptr;
> - 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);
> -#if defined(CONFIG_CMD_FLASH) && !defined(CONFIG_SPL_BUILD)
> - ulong flash_size = 0;
> -#endif
> - asm ("nop"); /* FIXME gd is not initialize - wait */
> - memset((void *)gd, 0, GENERATED_GBL_DATA_SIZE);
> - memset((void *)bd, 0, GENERATED_BD_INFO_SIZE);
> - gd->bd = bd;
> - gd->baudrate = CONFIG_BAUDRATE;
> - bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
> - bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
> - gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */
> -
> - monitor_flash_len = __end - __text_start;
> -
> -#ifdef CONFIG_OF_EMBED
> - /* Get a pointer to the FDT */
> - gd->fdt_blob = __dtb_dt_begin;
> -#elif defined CONFIG_OF_SEPARATE
> - /* FDT is at end of image */
> - gd->fdt_blob = (void *)__end;
> -#endif
> -
> -#ifndef CONFIG_SPL_BUILD
> - /* Allow the early environment to override the fdt address */
> - gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16,
> - (uintptr_t)gd->fdt_blob);
> -#endif
> -
> - /*
> - * The Malloc area is immediately below the monitor copy in DRAM
> - * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
> - * as our monitory code is run from SDRAM
> - */
> - mem_malloc_init(CONFIG_SYS_MALLOC_BASE, CONFIG_SYS_MALLOC_LEN);
> -
> - serial_initialize();
> -
> -#ifdef CONFIG_XILINX_TB_WATCHDOG
> - hw_watchdog_init();
> -#endif
> - for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
> - WATCHDOG_RESET();
> - if ((*init_fnc_ptr) () != 0)
> - hang();
> - }
> -
> -#ifndef CONFIG_SPL_BUILD
> -#ifdef CONFIG_OF_CONTROL
> - /* For now, put this check after the console is ready */
> - if (fdtdec_prepare_fdt())
> - panic("** 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");
> - printf("\tU-Boot Start:0x%08x\n", CONFIG_SYS_TEXT_BASE);
> -
> -#if defined(CONFIG_CMD_FLASH)
> - puts("Flash: ");
> - bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
> - flash_size = flash_init();
> - if (bd->bi_flashstart && flash_size > 0) {
> -# ifdef CONFIG_SYS_FLASH_CHECKSUM
> - print_size(flash_size, "");
> - /*
> - * Compute and print flash CRC if flashchecksum is set to 'y'
> - *
> - * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
> - */
> - if (getenv_yesno("flashchecksum") == 1) {
> - printf(" CRC: %08X",
> - 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;
> - bd->bi_flashsize = 0;
> - bd->bi_flashoffset = 0;
> - }
> -#endif
> -
> -#ifdef CONFIG_SPI
> - spi_init();
> -#endif
> -
> - /* relocate environment function pointers etc. */
> - env_relocate();
> -
> - /* Initialize stdio devices */
> - stdio_init();
> -
> - /* Initialize the jump table for applications */
> - jumptable_init();
> -
> - /* 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);
> -
> -#if defined(CONFIG_CMD_NET)
> - printf("Net: ");
> - eth_initialize(gd->bd);
> -
> - uchar enetaddr[6];
> - eth_getenv_enetaddr("ethaddr", enetaddr);
> - printf("MAC: %pM\n", enetaddr);
> -#endif
> -
> - /* main_loop */
> - for (;;) {
> - WATCHDOG_RESET();
> - main_loop();
> - }
> -#endif /* CONFIG_SPL_BUILD */
> -}
> diff --git a/board/xilinx/microblaze-generic/microblaze-generic.c b/board/xilinx/microblaze-generic/microblaze-generic.c
> index 42a8d0c400e5..062e678eccb7 100644
> --- a/board/xilinx/microblaze-generic/microblaze-generic.c
> +++ b/board/xilinx/microblaze-generic/microblaze-generic.c
> @@ -11,16 +11,62 @@
>
> #include <common.h>
> #include <config.h>
> +#include <fdtdec.h>
> #include <netdev.h>
> #include <asm/processor.h>
> #include <asm/microblaze_intc.h>
> #include <asm/asm.h>
> #include <asm/gpio.h>
>
> +DECLARE_GLOBAL_DATA_PTR;
> +
> #ifdef CONFIG_XILINX_GPIO
> static int reset_pin = -1;
> #endif
>
> +#ifdef CONFIG_OF_CONTROL
> +ulong ram_base;
> +
> +ulong board_get_usable_ram_top(ulong total_size)
> +{
> + return ram_base + gd->ram_size;
> +}
> +
> +void dram_init_banksize(void)
> +{
> + gd->bd->bi_dram[0].start = ram_base;
> + gd->bd->bi_dram[0].size = get_effective_memsize();
> +}
> +
> +phys_size_t initdram(int board_type)
> +{
> + int node;
> + fdt_addr_t addr;
> + fdt_size_t size;
> + const void *blob = gd->fdt_blob;
> +
> + node = fdt_node_offset_by_prop_value(blob, -1, "device_type",
> + "memory", 7);
> + if (node == -FDT_ERR_NOTFOUND) {
> + debug("DRAM: Can't get memory node\n");
> + return 0;
> + }
> + addr = fdtdec_get_addr_size(blob, node, "reg", &size);
> + if (addr == FDT_ADDR_T_NONE || size == 0) {
> + debug("DRAM: Can't get base address or size\n");
> + return 0;
> + }
> + ram_base = addr;
> +
> + return size;
> +};
> +#else
> +phys_size_t initdram(int board_type)
> +{
> + return CONFIG_SYS_SDRAM_SIZE;
> +}
> +#endif
> +
> int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> {
> #ifdef CONFIG_XILINX_GPIO
> diff --git a/common/board_f.c b/common/board_f.c
> index 3a4b32c29dc1..64b40aebb508 100644
> --- a/common/board_f.c
> +++ b/common/board_f.c
> @@ -174,7 +174,7 @@ static int announce_dram_init(void)
> return 0;
> }
>
> -#if defined(CONFIG_MIPS) || defined(CONFIG_PPC)
> +#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_MICROBLAZE)
> static int init_func_ram(void)
> {
Can you use dram_init() instead?
> #ifdef CONFIG_BOARD_TYPES
> @@ -262,7 +262,7 @@ static int zero_global_data(void)
>
> static int setup_mon_len(void)
> {
> -#ifdef __ARM__
> +#if defined(__ARM__) || defined(__MICROBLAZE__)
> gd->mon_len = (ulong)&__bss_end - (ulong)_start;
> #elif defined(CONFIG_SANDBOX)
> gd->mon_len = (ulong)&_end - (ulong)_init;
> @@ -906,7 +906,7 @@ static init_fnc_t init_sequence_f[] = {
> #if defined(CONFIG_ARM) || defined(CONFIG_X86)
> dram_init, /* configure available RAM banks */
> #endif
> -#if defined(CONFIG_MIPS) || defined(CONFIG_PPC)
> +#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_MICROBLAZE)
> init_func_ram,
> #endif
> #ifdef CONFIG_POST
> diff --git a/common/board_r.c b/common/board_r.c
> index e712902cff45..3e77720f2acb 100644
> --- a/common/board_r.c
> +++ b/common/board_r.c
> @@ -829,7 +829,7 @@ init_fnc_t init_sequence_r[] = {
> #if defined(CONFIG_ARM)
> initr_enable_interrupts,
> #endif
> -#ifdef CONFIG_X86
> +#if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE)
> timer_init, /* initialize timer */
> #endif
Could you use interrupt_init() immediately before?
> #if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT)
> diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
> index e6d8a7ae2c50..4c51059c1ba4 100644
> --- a/common/cmd_bdinfo.c
> +++ b/common/cmd_bdinfo.c
> @@ -183,8 +183,14 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> {
> bd_t *bd = gd->bd;
> - print_num("mem start ", (ulong)bd->bi_memstart);
> - print_lnum("mem size ", (u64)bd->bi_memsize);
> + int i;
> +
> + for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
> + print_num("DRAM bank", i);
> + print_num("-> start", bd->bi_dram[i].start);
> + print_num("-> size", bd->bi_dram[i].size);
> + }
> +
> print_num("flash start ", (ulong)bd->bi_flashstart);
> print_num("flash size ", (ulong)bd->bi_flashsize);
> print_num("flash offset ", (ulong)bd->bi_flashoffset);
> @@ -196,6 +202,9 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> print_eths();
> #endif
> printf("baudrate = %u bps\n", gd->baudrate);
> + print_num("relocaddr", gd->relocaddr);
> + print_num("reloc off", gd->reloc_off);
> +
> return 0;
> }
>
> diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
> index 2e1e64247fe0..622bc951045b 100644
> --- a/include/configs/microblaze-generic.h
> +++ b/include/configs/microblaze-generic.h
> @@ -106,62 +106,16 @@
> # define CONFIG_XILINX_TB_WATCHDOG
> #endif
>
> -/*
> - * memory layout - Example
> - * CONFIG_SYS_TEXT_BASE = 0x1200_0000; defined in config.mk
> - * CONFIG_SYS_SRAM_BASE = 0x1000_0000;
> - * CONFIG_SYS_SRAM_SIZE = 0x0400_0000; 64MB
> - *
> - * CONFIG_SYS_MONITOR_LEN = 0x40000
> - * CONFIG_SYS_MALLOC_LEN = 3 * CONFIG_SYS_MONITOR_LEN = 0xC0000
> - *
> - * CONFIG_SYS_GBL_DATA_OFFSET = 0x1000_0000 + 0x0400_0000 - 0x1000 = 0x13FF_F000
> - * CONFIG_SYS_MONITOR_BASE = 0x13FF_F000 - CONFIG_SYS_MONITOR_LEN = 0x13FB_F000
> - * CONFIG_SYS_MALLOC_BASE = 0x13FB_F000 - CONFIG_SYS_MALLOC_LEN = 0x13EF_F000
> - *
> - * 0x1000_0000 CONFIG_SYS_SDRAM_BASE
> - * MEMTEST_AREA 64kB
> - * FREE
> - * 0x1200_0000 CONFIG_SYS_TEXT_BASE
> - * U-BOOT code
> - * 0x1202_0000
> - * FREE
> - *
> - * STACK
> - * 0x13EF_F000 CONFIG_SYS_MALLOC_BASE
> - * MALLOC_AREA 768kB Alloc
> - * 0x13FB_F000 CONFIG_SYS_MONITOR_BASE
> - * MONITOR_CODE 256kB Env
> - * 0x13FF_F000 CONFIG_SYS_GBL_DATA_OFFSET
> - * GLOBAL_DATA 4kB bd, gd
> - * 0x1400_0000 CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_SDRAM_SIZE
> - */
> -
> +#ifndef CONFIG_OF_CONTROL
> /* ddr sdram - main memory */
> -#define CONFIG_SYS_SDRAM_BASE XILINX_RAM_START
> -#define CONFIG_SYS_SDRAM_SIZE XILINX_RAM_SIZE
> -#define CONFIG_SYS_MEMTEST_START CONFIG_SYS_SDRAM_BASE
> -#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_SDRAM_BASE + 0x1000)
> -
> -/* global pointer */
> -/* start of global data */
> -#define CONFIG_SYS_GBL_DATA_OFFSET \
> - (CONFIG_SYS_SDRAM_SIZE - GENERATED_GBL_DATA_SIZE)
> -
> -/* monitor code */
> -#define SIZE 0x40000
> -#define CONFIG_SYS_MONITOR_LEN SIZE
> -#define CONFIG_SYS_MONITOR_BASE \
> - (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET \
> - - CONFIG_SYS_MONITOR_LEN - GENERATED_BD_INFO_SIZE)
> -#define CONFIG_SYS_MONITOR_END \
> - (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
> -#define CONFIG_SYS_MALLOC_LEN (SIZE * 3)
> -#define CONFIG_SYS_MALLOC_BASE \
> - (CONFIG_SYS_MONITOR_BASE - CONFIG_SYS_MALLOC_LEN)
> -
> -/* stack */
> -#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_MALLOC_BASE
> +# define CONFIG_SYS_SDRAM_BASE XILINX_RAM_START
> +# define CONFIG_SYS_SDRAM_SIZE XILINX_RAM_SIZE
> +#endif
> +
> +#define CONFIG_SYS_MALLOC_LEN 0xC0000
> +
> +/* Stack location before relocation */
> +#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_TEXT_BASE
>
> /*
> * CFI flash memory layout - Example
> --
> 1.8.2.3
>
Regards,
Simon
^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 12/14] microblaze: Move architecture to use generic board init
2015-01-29 2:15 ` Simon Glass
@ 2015-01-29 14:20 ` Michal Simek
2015-01-29 15:45 ` Simon Glass
0 siblings, 1 reply; 19+ messages in thread
From: Michal Simek @ 2015-01-29 14:20 UTC (permalink / raw)
To: u-boot
Hi Simon,
On 01/29/2015 03:15 AM, Simon Glass wrote:
> Hi Michal,
>
> On 27 January 2015 at 08:20, Michal Simek <michal.simek@xilinx.com> wrote:
>> Compile code with -fPIC to get GOT. Do not build SPL
>> with fPIC because it increasing SPL size for nothing.
>>
>> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
>> ---
>>
...
>> -#if defined(CONFIG_MIPS) || defined(CONFIG_PPC)
>> +#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_MICROBLAZE)
>> static int init_func_ram(void)
>> {
>
> Can you use dram_init() instead?
No problem will do it in v2.
Where dram_init(void) should be declared?
I see that others have it in arch header. Maybe better to have
it in any shared location.
>> --- a/common/board_r.c
>> +++ b/common/board_r.c
>> @@ -829,7 +829,7 @@ init_fnc_t init_sequence_r[] = {
>> #if defined(CONFIG_ARM)
>> initr_enable_interrupts,
>> #endif
>> -#ifdef CONFIG_X86
>> +#if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE)
>> timer_init, /* initialize timer */
>> #endif
>
> Could you use interrupt_init() immediately before?
What do you mean by that?
Do you want to do timer_init in interrupt_init()?
Thanks,
Michal
^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 12/14] microblaze: Move architecture to use generic board init
2015-01-29 14:20 ` Michal Simek
@ 2015-01-29 15:45 ` Simon Glass
2015-01-30 10:13 ` Michal Simek
0 siblings, 1 reply; 19+ messages in thread
From: Simon Glass @ 2015-01-29 15:45 UTC (permalink / raw)
To: u-boot
Hi Michal,
On 29 January 2015 at 07:20, Michal Simek <michal.simek@xilinx.com> wrote:
> Hi Simon,
>
> On 01/29/2015 03:15 AM, Simon Glass wrote:
>> Hi Michal,
>>
>> On 27 January 2015 at 08:20, Michal Simek <michal.simek@xilinx.com> wrote:
>>> Compile code with -fPIC to get GOT. Do not build SPL
>>> with fPIC because it increasing SPL size for nothing.
>>>
>>> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
>>> ---
>>>
>
> ...
>
>>> -#if defined(CONFIG_MIPS) || defined(CONFIG_PPC)
>>> +#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_MICROBLAZE)
>>> static int init_func_ram(void)
>>> {
>>
>> Can you use dram_init() instead?
>
> No problem will do it in v2.
>
> Where dram_init(void) should be declared?
> I see that others have it in arch header. Maybe better to have
> it in any shared location.
Yes a shared location makes sense.
>
>>> --- a/common/board_r.c
>>> +++ b/common/board_r.c
>>> @@ -829,7 +829,7 @@ init_fnc_t init_sequence_r[] = {
>>> #if defined(CONFIG_ARM)
>>> initr_enable_interrupts,
>>> #endif
>>> -#ifdef CONFIG_X86
>>> +#if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE)
>>> timer_init, /* initialize timer */
>>> #endif
>>
>> Could you use interrupt_init() immediately before?
>
> What do you mean by that?
> Do you want to do timer_init in interrupt_init()?
Yes, then if we remove it from x86 also we can drop both #ifdefs. Do
you see any drawback with that?
Regards,
Simon
^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 12/14] microblaze: Move architecture to use generic board init
2015-01-29 15:45 ` Simon Glass
@ 2015-01-30 10:13 ` Michal Simek
2015-01-30 16:29 ` Simon Glass
0 siblings, 1 reply; 19+ messages in thread
From: Michal Simek @ 2015-01-30 10:13 UTC (permalink / raw)
To: u-boot
Hi Simon,
On 01/29/2015 04:45 PM, Simon Glass wrote:
> Hi Michal,
>
>
> On 29 January 2015 at 07:20, Michal Simek <michal.simek@xilinx.com> wrote:
>> Hi Simon,
>>
>> On 01/29/2015 03:15 AM, Simon Glass wrote:
>>> Hi Michal,
>>>
>>> On 27 January 2015 at 08:20, Michal Simek <michal.simek@xilinx.com> wrote:
>>>> Compile code with -fPIC to get GOT. Do not build SPL
>>>> with fPIC because it increasing SPL size for nothing.
>>>>
>>>> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
>>>> ---
>>>>
>>
>> ...
>>
>>>> -#if defined(CONFIG_MIPS) || defined(CONFIG_PPC)
>>>> +#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_MICROBLAZE)
>>>> static int init_func_ram(void)
>>>> {
>>>
>>> Can you use dram_init() instead?
>>
>> No problem will do it in v2.
>>
>> Where dram_init(void) should be declared?
>> I see that others have it in arch header. Maybe better to have
>> it in any shared location.
>
> Yes a shared location makes sense.
I have sent patch for it. Please review.
>
>>
>>>> --- a/common/board_r.c
>>>> +++ b/common/board_r.c
>>>> @@ -829,7 +829,7 @@ init_fnc_t init_sequence_r[] = {
>>>> #if defined(CONFIG_ARM)
>>>> initr_enable_interrupts,
>>>> #endif
>>>> -#ifdef CONFIG_X86
>>>> +#if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE)
>>>> timer_init, /* initialize timer */
>>>> #endif
>>>
>>> Could you use interrupt_init() immediately before?
>>
>> What do you mean by that?
>> Do you want to do timer_init in interrupt_init()?
>
> Yes, then if we remove it from x86 also we can drop both #ifdefs. Do
> you see any drawback with that?
timer_init looks like standard function which is used by x86 (board_r), arm, mips, blackfin.
(board_f)
Based on board_r.c PPC is doing timer_init in cpu_init_r.
For Microblaze my preference is to use this location because timer code is using
interrupts which are initialized above.
Adding timer_init to interrupt_init doesn't look right because then interrupt_init will hide
one init step.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150130/08b3fadb/attachment.sig>
^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH 12/14] microblaze: Move architecture to use generic board init
2015-01-30 10:13 ` Michal Simek
@ 2015-01-30 16:29 ` Simon Glass
0 siblings, 0 replies; 19+ messages in thread
From: Simon Glass @ 2015-01-30 16:29 UTC (permalink / raw)
To: u-boot
Hi Michal,
On 30 January 2015 at 03:13, Michal Simek <monstr@monstr.eu> wrote:
> Hi Simon,
>
> On 01/29/2015 04:45 PM, Simon Glass wrote:
>> Hi Michal,
>>
>>
>> On 29 January 2015 at 07:20, Michal Simek <michal.simek@xilinx.com> wrote:
>>> Hi Simon,
>>>
>>> On 01/29/2015 03:15 AM, Simon Glass wrote:
>>>> Hi Michal,
>>>>
>>>> On 27 January 2015 at 08:20, Michal Simek <michal.simek@xilinx.com> wrote:
>>>>> Compile code with -fPIC to get GOT. Do not build SPL
>>>>> with fPIC because it increasing SPL size for nothing.
>>>>>
>>>>> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
>>>>> ---
>>>>>
>>>
>>> ...
>>>
>>>>> -#if defined(CONFIG_MIPS) || defined(CONFIG_PPC)
>>>>> +#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_MICROBLAZE)
>>>>> static int init_func_ram(void)
>>>>> {
>>>>
>>>> Can you use dram_init() instead?
>>>
>>> No problem will do it in v2.
>>>
>>> Where dram_init(void) should be declared?
>>> I see that others have it in arch header. Maybe better to have
>>> it in any shared location.
>>
>> Yes a shared location makes sense.
>
> I have sent patch for it. Please review.
>
>>
>>>
>>>>> --- a/common/board_r.c
>>>>> +++ b/common/board_r.c
>>>>> @@ -829,7 +829,7 @@ init_fnc_t init_sequence_r[] = {
>>>>> #if defined(CONFIG_ARM)
>>>>> initr_enable_interrupts,
>>>>> #endif
>>>>> -#ifdef CONFIG_X86
>>>>> +#if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE)
>>>>> timer_init, /* initialize timer */
>>>>> #endif
>>>>
>>>> Could you use interrupt_init() immediately before?
>>>
>>> What do you mean by that?
>>> Do you want to do timer_init in interrupt_init()?
>>
>> Yes, then if we remove it from x86 also we can drop both #ifdefs. Do
>> you see any drawback with that?
>
> timer_init looks like standard function which is used by x86 (board_r), arm, mips, blackfin.
> (board_f)
>
> Based on board_r.c PPC is doing timer_init in cpu_init_r.
>
> For Microblaze my preference is to use this location because timer code is using
> interrupts which are initialized above.
>
> Adding timer_init to interrupt_init doesn't look right because then interrupt_init will hide
> one init step.
Fair enough, I agree they are different. One way or another we'll get
rid of the #ifdefs in those files one day...
Regards,
Simon
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2015-01-30 16:29 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-27 15:20 [U-Boot] [PATCH 01/14] microblaze: Fix stack usage in interrupt handler Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 02/14] microblaze: Show return address from exception Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 03/14] microblaze: Fix coding style in exception.c Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 04/14] microblaze: Remove DEBUG_INT macro and use debug() instead Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 05/14] microblaze: Fix coding style Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 06/14] microblaze: Add debug message about enabling interrupts Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 07/14] microblaze: Remove unneeded data section adding from DTB Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 08/14] microblaze: Use standard interrupt_init() function Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 09/14] microblaze: Remove unused asm label Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 10/14] microblaze: Fix gd_t address which is placed at the end of BRAM Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 11/14] microblaze: Enable SPL_NOR support when FLASH_BASE is setup Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 12/14] microblaze: Move architecture to use generic board init Michal Simek
2015-01-29 2:15 ` Simon Glass
2015-01-29 14:20 ` Michal Simek
2015-01-29 15:45 ` Simon Glass
2015-01-30 10:13 ` Michal Simek
2015-01-30 16:29 ` Simon Glass
2015-01-27 15:20 ` [U-Boot] [PATCH 13/14] microblaze: Speedup code copy Michal Simek
2015-01-27 15:20 ` [U-Boot] [PATCH 14/14] bdinfo: Show information about fdt blob via bdinfo 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.