aboutsummaryrefslogtreecommitdiff
path: root/cpu/microblaze
diff options
context:
space:
mode:
authorMichal Simek <monstr@monstr.eu>2007-05-07 23:58:31 +0200
committerMichal Simek <monstr@monstr.eu>2007-05-07 23:58:31 +0200
commitfb05f6da35ea1c15c553abe6f23f656bf18dc5db (patch)
tree97d017c2c93576570338cd2a5d2034981f131bc8 /cpu/microblaze
parenta7bac7e9b57ba948051beb19ec5be3a75ce75383 (diff)
new: USE_MSR_INTR support
Diffstat (limited to 'cpu/microblaze')
-rwxr-xr-x[-rw-r--r--]cpu/microblaze/cache.c9
-rwxr-xr-x[-rw-r--r--]cpu/microblaze/interrupts.c4
-rwxr-xr-x[-rw-r--r--]cpu/microblaze/irq.S14
3 files changed, 21 insertions, 6 deletions
diff --git a/cpu/microblaze/cache.c b/cpu/microblaze/cache.c
index 683044cae..4f36a84ec 100644..100755
--- a/cpu/microblaze/cache.c
+++ b/cpu/microblaze/cache.c
@@ -23,6 +23,7 @@
*/
#include <common.h>
+#include <asm/asm.h>
#if (CONFIG_COMMANDS & CFG_CMD_CACHE)
@@ -47,18 +48,18 @@ int icache_status (void)
}
void icache_enable (void) {
- __asm__ __volatile__ ("msrset r0, 0x80");
+ MSRSET(0x20);
}
void icache_disable(void) {
- __asm__ __volatile__ ("msrclr r0, 0x80");
+ MSRCLR(0x20);
}
void dcache_enable (void) {
- __asm__ __volatile__ ("msrset r0, 0x20");
+ MSRSET(0x80);
}
void dcache_disable(void) {
- __asm__ __volatile__ ("msrclr r0, 0x20");
+ MSRCLR(0x80);
}
#endif
diff --git a/cpu/microblaze/interrupts.c b/cpu/microblaze/interrupts.c
index dd6a0c777..b61153f8e 100644..100755
--- a/cpu/microblaze/interrupts.c
+++ b/cpu/microblaze/interrupts.c
@@ -36,12 +36,12 @@ extern void microblaze_enable_interrupts (void);
void enable_interrupts (void)
{
- __asm__ __volatile__ ("msrset r0, 0x2");
+ MSRSET(0x2);
}
int disable_interrupts (void)
{
- __asm__ __volatile__ ("msrclr r0, 0x2");
+ MSRCLR(0x2);
return 0;
}
diff --git a/cpu/microblaze/irq.S b/cpu/microblaze/irq.S
index 393d6e8dd..e1fc19046 100644..100755
--- a/cpu/microblaze/irq.S
+++ b/cpu/microblaze/irq.S
@@ -23,6 +23,7 @@
*/
#include <config.h>
+#include <asm/asm.h>
.text
.global _interrupt_handler
_interrupt_handler:
@@ -151,7 +152,20 @@ _interrupt_handler:
addi r1, 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
nop