summaryrefslogtreecommitdiffstats
path: root/arch/microblaze
diff options
context:
space:
mode:
authorH. Nikolaus Schaller <hns@goldelico.com>2011-02-24 13:21:40 +0100
committerH. Nikolaus Schaller <hns@goldelico.com>2011-02-24 13:21:40 +0100
commit67fa659acb97323da480a4a545560d4d27c5796a (patch)
tree648ab5e4cbcdf17bcfe0e79346e264c4f0187662 /arch/microblaze
parent872ca46bf7ec07388fc06e687875204663f6080e (diff)
parentc7977858dcf1f656cbe91ea0dc3cb9139c6a8cc8 (diff)
downloadbootable_bootloader_goldelico_gta04-67fa659acb97323da480a4a545560d4d27c5796a.zip
bootable_bootloader_goldelico_gta04-67fa659acb97323da480a4a545560d4d27c5796a.tar.gz
bootable_bootloader_goldelico_gta04-67fa659acb97323da480a4a545560d4d27c5796a.tar.bz2
git pull denx master
Diffstat (limited to 'arch/microblaze')
-rw-r--r--arch/microblaze/cpu/interrupts.c5
-rw-r--r--arch/microblaze/cpu/irq.S19
-rw-r--r--arch/microblaze/include/asm/asm.h2
-rw-r--r--arch/microblaze/lib/board.c10
4 files changed, 12 insertions, 24 deletions
diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
index e9d53c1..5a13211 100644
--- a/arch/microblaze/cpu/interrupts.c
+++ b/arch/microblaze/cpu/interrupts.c
@@ -41,8 +41,11 @@ void enable_interrupts (void)
int disable_interrupts (void)
{
+ unsigned int msr;
+
+ MFS(msr, rmsr);
MSRCLR(0x2);
- return 0;
+ return (msr & 0x2) != 0;
}
#ifdef CONFIG_SYS_INTC_0
diff --git a/arch/microblaze/cpu/irq.S b/arch/microblaze/cpu/irq.S
index 47bba36..8c76a73 100644
--- a/arch/microblaze/cpu/irq.S
+++ b/arch/microblaze/cpu/irq.S
@@ -60,7 +60,6 @@ _interrupt_handler:
addik r1, r1, -124
brlid r15, interrupt_handler
nop
- nop
addik r1, r1, 124
lwi r31, r1, -120
lwi r30, r1, -116
@@ -93,22 +92,6 @@ _interrupt_handler:
lwi r3, r1, -8
lwi r2, r1, -4
- /* enable_interrupt */
-#ifdef XILINX_USE_MSR_INSTR
- msrset r0, 2
-#else
- /* FIXME unstable in stressed mode - two irqs */
- nop
- addi r1, r1, -4
- swi r12, r1, 0
- mfs r12, rmsr
- ori r12, r12, 2
- mts rmsr, r12
- lwi r12, r1, 0
- addi r1, r1, 4
- nop
-#endif
- bra r14
- nop
+ rtid r14, 0
nop
.size _interrupt_handler,.-_interrupt_handler
diff --git a/arch/microblaze/include/asm/asm.h b/arch/microblaze/include/asm/asm.h
index deb23e0..c89e904 100644
--- a/arch/microblaze/include/asm/asm.h
+++ b/arch/microblaze/include/asm/asm.h
@@ -62,7 +62,7 @@
#define NOP __asm__ __volatile__ ("nop");
/* use machine status registe USE_MSR_REG */
-#ifdef XILINX_USE_MSR_INSTR
+#if XILINX_USE_MSR_INSTR == 1
#define MSRSET(val) \
__asm__ __volatile__ ("msrset r0," #val );
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index eeef579..c5f7ac4 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -90,16 +90,18 @@ void board_init (void)
{
bd_t *bd;
init_fnc_t **init_fnc_ptr;
- gd = (gd_t *) CONFIG_SYS_GBL_DATA_OFFSET;
+ 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;
#if defined(CONFIG_CMD_FLASH)
ulong flash_size = 0;
#endif
asm ("nop"); /* FIXME gd is not initialize - wait */
memset ((void *)gd, 0, GENERATED_GBL_DATA_SIZE);
- gd->bd = (bd_t *) (gd + 1); /* At end of global data */
+ memset ((void *)bd, 0, GENERATED_BD_INFO_SIZE);
+ gd->bd = bd;
gd->baudrate = CONFIG_BAUDRATE;
- bd = gd->bd;
bd->bi_baudrate = CONFIG_BAUDRATE;
bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
@@ -125,7 +127,7 @@ void board_init (void)
printf ("\tU-Boot Start:0x%08x\n", CONFIG_SYS_TEXT_BASE);
#if defined(CONFIG_CMD_FLASH)
- puts ("FLASH: ");
+ puts ("Flash: ");
bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
if (0 < (flash_size = flash_init ())) {
bd->bi_flashsize = flash_size;