summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/alpha/console/Makefile7
-rw-r--r--system/alpha/console/dbmentry.S9
-rw-r--r--system/alpha/console/printf.c4
3 files changed, 14 insertions, 6 deletions
diff --git a/system/alpha/console/Makefile b/system/alpha/console/Makefile
index e29c02b1a..7f705dd8c 100644
--- a/system/alpha/console/Makefile
+++ b/system/alpha/console/Makefile
@@ -35,8 +35,8 @@ AS=$(CROSS_COMPILE)as
LD=$(CROSS_COMPILE)ld
DBMENTRY= fffffc0000010000
-CFLAGS=-I . -I ../h -I$(M5)/dev -fno-builtin -Wa,-m21164
-OBJS=dbmentry.o printf.o paljtokern.o paljtoslave.o console.o
+CFLAGS=-I . -I ../h -I$(M5)/dev -I$(M5)/util/m5/ -fno-builtin -Wa,-m21164
+OBJS=dbmentry.o printf.o paljtokern.o paljtoslave.o console.o m5op.o
### Make sure that the M5 variable is set ###
ifndef M5
@@ -45,6 +45,9 @@ endif
all: console
+m5op.o: $(M5)/util/m5/m5op.S
+ $(CC) $(CFLAGS) -nostdinc -o $@ -c $<
+
%.o: %.S
$(CC) $(CFLAGS) -nostdinc -o $@ -c $<
diff --git a/system/alpha/console/dbmentry.S b/system/alpha/console/dbmentry.S
index c8a3691e3..e8316390f 100644
--- a/system/alpha/console/dbmentry.S
+++ b/system/alpha/console/dbmentry.S
@@ -81,7 +81,9 @@ _entry:
bis zero,8,t4
mulq t4,v0,t4
addq t3,t4,t3
-cpuwait: ldq t4, 0(t3)
+ ldah a0, 3(zero) # load arg0 with 65536*3
+cpuwait: .long 0x6000002 # jsr quiesceNs
+ ldq t4, 0(t3)
beq t4, cpuwait
bis t4,t4,sp
@@ -220,8 +222,9 @@ SlaveSpin: # using any stack space
mov a0, t0 # cpu number
mov a1, t1 # cpu rpb pointer (virtual)
mov a2, t2 # what to spin on
-
-test: ldl t3, 0(t2)
+ ldah a0, 3(zero) # load arg0 with 65536
+test: .long 0x6000002 # jsr quiesceNs # wait 65us*3
+ ldl t3, 0(t2)
beq t3, test
zapnot t1,0x1f,a0 # make rpb physical
call_pal PAL_SWPCTX_ENTRY # switch to pcb
diff --git a/system/alpha/console/printf.c b/system/alpha/console/printf.c
index 0e665a434..b958476fb 100644
--- a/system/alpha/console/printf.c
+++ b/system/alpha/console/printf.c
@@ -54,6 +54,8 @@
#include <sys/types.h>
#include <stdarg.h>
+#include <stdint.h>
+#include "m5op.h"
/* The string s is terminated by a '\0' */
void
@@ -320,5 +322,5 @@ panic(const char *f, ...)
}
va_end(ap); /* clean up */
- while(1);
+ m5_panic();
}