--- a/sys/src/9/bcm/bootwifi.rc Wed Apr 22 10:31:48 2026 +++ b/sys/src/9/bcm/bootwifi.rc Sat Mar 20 09:55:10 2021 @@ -46,7 +46,12 @@ need fs need auth -factotum -u -s factotum -a $auth +switch ($service) { + case cpu + factotum -S -s factotum -a $auth + case terminal + factotum -u -s factotum -a $auth +} joinwifi ipconfig ether $wifi srv tcp!$fs!564 boot --- a/sys/src/9/bcm/clock.c Wed Apr 22 10:31:48 2026 +++ b/sys/src/9/bcm/clock.c Thu Aug 31 13:39:46 2023 @@ -32,7 +32,7 @@ SystimerFreq = 1*Mhz, MaxPeriod = SystimerFreq / HZ, - MinPeriod = 10, + MinPeriod = 100, }; @@ -121,7 +121,7 @@ { Systimers *tn; Armtimer *tm; - u32int t0, t1, tstart, tend; + u32int t0, t1, tstart; if(((cprdfeat1() >> 16) & 0xF) != 0) { /* generic timer supported */ @@ -139,10 +139,9 @@ do{ t0 = lcycles(); }while(tn->clo == tstart); - tend = tstart + 10000; do{ t1 = lcycles(); - }while(tn->clo != tend); + }while(tn->clo - tstart < 10000); t1 -= t0; m->cpuhz = 100 * t1; m->cpumhz = (m->cpuhz + Mhz/2 - 1) / Mhz; --- a/sys/src/9/bcm/emmc.c Wed Apr 22 10:31:48 2026 +++ b/sys/src/9/bcm/emmc.c Sun Mar 1 09:51:30 2026 @@ -294,14 +294,14 @@ int i; r = (u32int*)EMMCREGS; - WR(Interrupt, Cardintr); while(((i = r[Interrupt]) & Cardintr) == 0){ if(!wait) return 0; WR(Irpten, r[Irpten] | Cardintr); + WR(Irptmask, r[Irptmask] | Cardintr); sleep(&emmc.cardr, cardintready, 0); } - WR(Interrupt, Cardintr); + WR(Irptmask, r[Irptmask] & ~Cardintr); return i; } --- a/sys/src/9/bcm/main.c Thu Apr 23 14:39:22 2026 +++ b/sys/src/9/bcm/main.c Mon Apr 10 19:47:34 2023 @@ -517,7 +517,7 @@ uintptr pa; char *p; - if(0 && (p = getconf("service")) != nil){ + if((p = getconf("service")) != nil){ if(strcmp(p, "cpu") == 0) cpuserver = 1; else if(strcmp(p,"terminal") == 0) --- a/sys/src/9/bcm/mmu64.c Thu Apr 23 14:39:22 2026 +++ b/sys/src/9/bcm/mmu64.c Sat Mar 28 17:28:14 2026 @@ -390,7 +390,7 @@ if(page->cachectl[m->machno] == PG_TXTFLUSH){ /* pio() sets PG_TXTFLUSH whenever a text pg has been written */ - if(cankaddr(page->pa)) + if((page->pa & PTEHIMEM) == 0 && cankaddr(page->pa)) cachedwbse((void*)(page->pa|KZERO), BY2PG); cacheiinvse((void*)page->va, BY2PG); page->cachectl[m->machno] = PG_NOFLUSH; --- a/sys/src/9/bcm/screen.c Thu Apr 23 15:05:02 2026 +++ b/sys/src/9/bcm/screen.c Thu Mar 26 09:51:58 2026 @@ -373,6 +373,8 @@ uchar* attachscreen(Rectangle *r, ulong *chan, int* d, int *width, int *softscreen) { + if(gscreen == nil) + return nil; *r = gscreen->r; *d = gscreen->depth; *chan = gscreen->chan;