M bitsy/clock.c => bitsy/clock.c +1 -1
@@ 12,7 12,7 @@ typedef struct OSTimer
ulong osmr[4]; /* match registers */
ulong oscr; /* counter register */
ulong ossr; /* status register */
- ulong ower; /* watchdog enable register */
+ ulong ower; /* watchdog enable register */
ulong oier; /* timer interrupt enable register */
} OSTimer;
M bitsy/mmu.c => bitsy/mmu.c +1 -0
@@ 125,6 125,7 @@ mmurestart(void) {
/* enable mmu */
wbflush();
+ icacheinvalidate(); /* you never know ... (sape) */
mmuinvalidate();
mmuenable();
cacheflush();
M bitsy/power.c => bitsy/power.c +21 -18
@@ 51,8 51,9 @@ dumpitall(void)
iprint("dram: mdcnfg msc %lux %lux %lux mecr %lux\n",
memconfregs->msc0, memconfregs->msc1,memconfregs->msc2,
memconfregs->mecr);
-
-
+ iprint("powerregs: pmcr %lux pssr %lux pcfr %lux ppcr %lux pwer %lux pspr %lux pgsr %lux posr %lux\n",
+ powerregs->pmcr, powerregs->pssr, powerregs->pcfr, powerregs->ppcr,
+ powerregs->pwer, powerregs->pspr, powerregs->pgsr, powerregs->posr);
}
static void
@@ 76,12 77,12 @@ gpiosave(GPIOregs *to, GPIOregs *from)
static void
gpiorestore(GPIOregs *to, GPIOregs *from)
{
- to->rising = from->rising; // gpio intrs enabled
- to->falling= from->falling; // gpio intrs enabled
- to->altfunc = from->altfunc;
to->direction = from->direction;
+ to->altfunc = from->altfunc;
to->set = from->level & 0x0fffffff;
to->clear = ~from->level & 0x0fffffff;
+ to->rising = from->rising; // gpio intrs enabled
+ to->falling= from->falling; // gpio intrs enabled
}
void (*restart)(void) = nil;
@@ 143,19 144,19 @@ deepsleep(void) {
static int power_pl;
ulong xsp, xlink;
- power_pl = splhi();
- delay(50);
xlink = getcallerpc(&xlink);
/* Power down */
- iprint("entering suspend mode, sp = 0x%lux, pc = 0x%lux, psw = 0x%lux\n", &xsp, xlink, power_pl);
- dumpitall();
- uartpower(0);
- clockpower(0);
irpower(0);
audiopower(0);
screenpower(0);
µcpower(0);
+ power_pl = splhi();
+ iprint("entering suspend mode, sp = 0x%lux, pc = 0x%lux, psw = 0x%lux\n", &xsp, xlink, power_pl);
+ dumpitall();
+ delay(100);
+ uartpower(0);
rs232power(0);
+ clockpower(0);
gpiosave(&savedgpioregs, gpioregs);
intrcpy(&savedintrregs, intrregs);
cacheflush();
@@ 173,21 174,23 @@ deepsleep(void) {
intrregs->icip = (1<<IRQgpio0);
}
trapresume();
- rs232power(1);
- uartpower(1);
-// irpower(1);
-// audiopower(1);
clockpower(1);
gpclkregs->r0 = 1<<0;
- µcpower(1);
- screenpower(1);
+ rs232power(1);
+ uartpower(1);
dumpitall();
+ delay(100);
xlink = getcallerpc(&xlink);
iprint("\nresuming execution, sp = 0x%lux, pc = 0x%lux, psw = 0x%lux\n", &xsp, xlink, splhi());
- delay(800);
splx(power_pl);
+// irpower(1);
+// audiopower(1);
+ µcpower(1);
+ screenpower(1);
return;
}
+ wbflush();
+ delay(50);
sa1100_power_off();
/* no return */
}
M bitsy/trap.c => bitsy/trap.c +4 -0
@@ 213,6 213,10 @@ faultarm(Ureg *ureg, ulong va, int user, int read)
int n, insyscall;
char buf[ERRMAX];
+ if (up == nil) {
+ warnregs(ureg, "kernel fault");
+ panic("fault: nil up in faultarm, accessing 0x%lux\n", va);
+ }
insyscall = up->insyscall;
up->insyscall = 1;
n = fault(va, read);
M port/devdraw.c => port/devdraw.c +2 -2
@@ 255,7 255,7 @@ drawgen(Chan *c, char*, Dirtab*, int, int s, Dir *dp)
/*
* Third level.
*/
- path = c->qid.path&~(((1<<QSHIFT)-1)); /* slot component */
+ path = c->qid.path&~((1<<QSHIFT)-1); /* slot component */
q.vers = c->qid.vers;
q.type = QTFILE;
switch(s){
@@ 860,7 860,7 @@ initscreenimage(void)
}
screenimage->width = width;
- screenimage->clipr = screenimage->r;
+ screenimage->clipr = screenimage->r;
return 1;
}
M port/devpipe.c => port/devpipe.c +1 -1
@@ 90,9 90,9 @@ pipeattach(char *spec)
static int
pipegen(Chan *c, char*, Dirtab *tab, int ntab, int i, Dir *dp)
{
+ Qid q;
int len;
Pipe *p;
- Qid q;
if(i == DEVDOTDOT){
devdir(c, c->qid, "#|", 0, eve, DMDIR|0555, dp);