ref: 7d45ee4f6adc378fb6244c73abe8e46fe636beae
parent: 76e4f7caf9440f3ebb667b801fa55f5bc1c4be08
author: cinap_lenrek <[email protected]>
date: Thu May 5 12:35:25 EDT 2016
remove unmaintained omap4 (pandaboard) kernel
--- a/sys/src/9/mkfile
+++ b/sys/src/9/mkfile
@@ -3,7 +3,6 @@
kw\
mtx\
omap\
- omap4\
pc\
pc64\
ppc\
--- a/sys/src/9/omap4/arch.c
+++ /dev/null
@@ -1,175 +1,0 @@
-#include "u.h"
-#include "ureg.h"
-#include "../port/lib.h"
-#include "../port/error.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "io.h"
-#include "arm.h"
-#include "tos.h"
-
-void (*proctrace)(Proc *, int, vlong);
-
-uintptr
-userpc(void)
-{
- return dbgpc(up);
-}
-
-uintptr
-dbgpc(Proc *p)
-{
- Ureg *ureg;
-
- ureg = p->dbgreg;
- if(ureg == 0)
- return 0;
- return ureg->pc;
-}
-
-void
-setkernur(Ureg *ureg, Proc *p)
-{
- ureg->pc = p->sched.pc;
- ureg->sp = p->sched.sp+4;
- ureg->r14 = (ulong) sched;
-}
-
-void
-setregisters(Ureg *, char *, char *, int)
-{
-}
-
-void
-procsave(Proc *p)
-{
- uvlong t;
-
- cycles(&t);
- p->pcycles += t;
-}
-
-void
-procrestore(Proc *p)
-{
- uvlong t;
-
- cycles(&t);
- p->pcycles -= t;
-}
-
-void
-procfork(Proc *)
-{
-}
-
-void
-procsetup(Proc *p)
-{
- p->fpstate = FPinit;
-}
-
-static void
-linkproc(void)
-{
- spllo();
- up->kpfun(up->kparg);
- pexit("kproc exiting", 0);
-}
-
-void
-kprocchild(Proc *p, void (*func)(void *), void *arg)
-{
- p->sched.pc = (ulong) linkproc;
- p->sched.sp = (ulong) p->kstack + KSTACK;
- p->kpfun = func;
- p->kparg = arg;
-}
-
-void
-forkchild(Proc *p, Ureg *ureg)
-{
- Ureg *cureg;
-
- p->sched.sp = (ulong) p->kstack + KSTACK - (sizeof(Ureg) + 8);
- p->sched.pc = (ulong) forkret;
- cureg = (Ureg*) (p->sched.sp + 8);
- memmove(cureg, ureg, sizeof(Ureg));
- cureg->r0 = 0;
- p->psstate = 0;
- p->insyscall = 0;
-}
-
-uintptr
-execregs(uintptr entry, ulong ssize, ulong nargs)
-{
- ulong *sp;
- Ureg *ureg;
-
- sp = (ulong *) (USTKTOP - ssize);
- *--sp = nargs;
-
- ureg = up->dbgreg;
- memset(ureg, 0, sizeof *ureg);
- ureg->psr = PsrMusr;
- ureg->sp = (ulong) sp;
- ureg->pc = entry;
- return USTKTOP - sizeof(Tos);
-}
-
-void
-evenaddr(uintptr addr)
-{
- if(addr & 3){
- postnote(up, 1, "sys: odd address", NDebug);
- error(Ebadarg);
- }
-}
-
-void
-_dumpstack(ulong sp, ulong pc)
-{
- int x;
- uintptr l, v, i, estack;
-
- x = 0;
- x += iprint("ktrace /arm/s9panda %#.8lux %#.8lux <<EOF\n",
- pc, sp);
- i = 0;
- if(up
- && (uintptr)&l >= (uintptr)up->kstack
- && (uintptr)&l <= (uintptr)up->kstack+KSTACK)
- estack = (uintptr)up->kstack+KSTACK;
- else if((uintptr)&l >= (uintptr)(KTZERO - BY2PG)
- && (uintptr)&l <= (uintptr)KTZERO)
- estack = (uintptr)KTZERO;
- else
- return;
- x += iprint("estackx %p\n", estack);
-
- for(l = (uintptr)&l; l < estack; l += sizeof(uintptr)){
- v = *(uintptr*)l;
- if((KTZERO < v && v < (uintptr)etext) || estack-l < 32){
- x += iprint("%.8p=%.8p ", l, v);
- i++;
- }
- if(i == 4){
- i = 0;
- x += iprint("\n");
- }
- }
- if(i)
- iprint("\n");
- iprint("EOF\n");
-}
-
-void
-printureg(Ureg *ureg)
-{
- print("R0 %.8ulx R1 %.8ulx R2 %.8ulx R3 %.8ulx\n", ureg->r0, ureg->r1, ureg->r2, ureg->r3);
- print("R4 %.8ulx R5 %.8ulx R6 %.8ulx R7 %.8ulx\n", ureg->r4, ureg->r5, ureg->r6, ureg->r7);
- print("R8 %.8ulx R9 %.8ulx R10 %.8ulx R11 %.8ulx\n", ureg->r8, ureg->r9, ureg->r10, ureg->r11);
- print("R12 %.8ulx R13 %.8ulx R14 %.8ulx R15 %.8ulx\n", ureg->r12, ureg->r13, ureg->r14, ureg->pc);
- print("PSR %.8ulx exception %ld\n", ureg->psr, ureg->type);
-}
--- a/sys/src/9/omap4/arm.h
+++ /dev/null
@@ -1,248 +1,0 @@
-/*
- * arm-specific definitions for cortex-a8
- * these are used in C and assembler
- *
- * `cortex' refers specifically to the cortex-a8.
- */
-
-/*
- * Program Status Registers
- */
-#define PsrMusr 0x00000010 /* mode */
-#define PsrMfiq 0x00000011
-#define PsrMirq 0x00000012
-#define PsrMsvc 0x00000013 /* `protected mode for OS' */
-#define PsrMmon 0x00000016 /* `secure monitor' (trustzone hyper) */
-#define PsrMabt 0x00000017
-#define PsrMund 0x0000001B
-#define PsrMsys 0x0000001F /* `privileged user mode for OS' (trustzone) */
-#define PsrMask 0x0000001F
-
-#define PsrDfiq 0x00000040 /* disable FIQ interrupts */
-#define PsrDirq 0x00000080 /* disable IRQ interrupts */
-
-#define PsrOK 0xF80F0000 /* user processes may touch these */
-
-#define PsrV 0x10000000 /* overflow */
-#define PsrC 0x20000000 /* carry/borrow/extend */
-#define PsrZ 0x40000000 /* zero */
-#define PsrN 0x80000000 /* negative/less than */
-
-/*
- * Coprocessors
- */
-#define CpFP 10 /* float FP, VFP cfg. */
-#define CpDFP 11 /* double FP */
-#define CpSC 15 /* System Control */
-
-/*
- * Primary (CRn) CpSC registers.
- */
-#define CpID 0 /* ID and cache type */
-#define CpCONTROL 1 /* miscellaneous control */
-#define CpTTB 2 /* Translation Table Base(s) */
-#define CpDAC 3 /* Domain Access Control */
-#define CpFSR 5 /* Fault Status */
-#define CpFAR 6 /* Fault Address */
-#define CpCACHE 7 /* cache/write buffer control */
-#define CpTLB 8 /* TLB control */
-#define CpCLD 9 /* L2 Cache Lockdown, op1==1 */
-#define CpTLD 10 /* TLB Lockdown, with op2 */
-#define CpVECS 12 /* vector bases, op1==0, Crm==0, op2s (cortex) */
-#define CpPID 13 /* Process ID */
-#define CpDTLB 15 /* TLB, L1 cache stuff (cortex) */
-
-/*
- * CpTTB op1==0, Crm==0 opcode2 values.
- */
-#define CpTTB0 0
-#define CpTTB1 1 /* cortex */
-#define CpTTBctl 2 /* cortex */
-
-/*
- * CpID Secondary (CRm) registers.
- */
-#define CpIDidct 0
-
-/*
- * CpID op1==0 opcode2 fields.
- * the cortex has more op1 codes for cache size, etc.
- */
-#define CpIDid 0 /* main ID */
-#define CpIDct 1 /* cache type */
-#define CpIDtlb 3 /* tlb type (cortex) */
-#define CpIDmpid 5 /* multiprocessor id (cortex) */
-
-/* CpIDid op1 values */
-#define CpIDcsize 1 /* cache size (cortex) */
-#define CpIDcssel 2 /* cache size select (cortex) */
-
-/*
- * CpCONTROL op2 codes, op1==0, Crm==0.
- */
-#define CpMainctl 0
-#define CpAuxctl 1
-#define CpCPaccess 2
-
-/*
- * CpCONTROL: op1==0, CRm==0, op2==CpMainctl.
- * main control register.
- * cortex/armv7 has more ops and CRm values.
- */
-#define CpCmmu 0x00000001 /* M: MMU enable */
-#define CpCalign 0x00000002 /* A: alignment fault enable */
-#define CpCdcache 0x00000004 /* C: data cache on */
-#define CpCsbo (3<<22|1<<18|1<<16|017<<3) /* must be 1 (armv7) */
-#define CpCsbz (CpCtre|1<<26|CpCve|1<<15|7<<7) /* must be 0 (armv7) */
-#define CpCsw (1<<10) /* SW: SWP(B) enable (deprecated in v7) */
-#define CpCpredict 0x00000800 /* Z: branch prediction (armv7) */
-#define CpCicache 0x00001000 /* I: instruction cache on */
-#define CpChv 0x00002000 /* V: high vectors */
-#define CpCrr (1<<14) /* RR: round robin vs random cache replacement */
-#define CpCha (1<<17) /* HA: hw access flag enable */
-#define CpCdz (1<<19) /* DZ: divide by zero fault enable */
-#define CpCfi (1<<21) /* FI: fast intrs */
-#define CpCve (1<<24) /* VE: intr vectors enable */
-#define CpCee (1<<25) /* EE: exception endianness */
-#define CpCnmfi (1<<27) /* NMFI: non-maskable fast intrs. */
-#define CpCtre (1<<28) /* TRE: TEX remap enable */
-#define CpCafe (1<<29) /* AFE: access flag (ttb) enable */
-
-/*
- * CpCONTROL: op1==0, CRm==0, op2==CpAuxctl.
- * Auxiliary control register on cortex at least.
- */
-#define CpACcachenopipe (1<<20) /* don't pipeline cache maint. */
-#define CpACcp15serial (1<<18) /* serialise CP1[45] ops. */
-#define CpACcp15waitidle (1<<17) /* CP1[45] wait-on-idle */
-#define CpACcp15pipeflush (1<<16) /* CP1[45] flush pipeline */
-#define CpACneonissue1 (1<<12) /* neon single issue */
-#define CpACldstissue1 (1<<11) /* force single issue ld, st */
-#define CpACissue1 (1<<10) /* force single issue */
-#define CpACnobsm (1<<7) /* no branch size mispredicts */
-#define CpACibe (1<<6) /* cp15 invalidate & btb enable */
-#define CpACl1neon (1<<5) /* cache neon (FP) data in L1 cache */
-#define CpACasa (1<<4) /* enable speculative accesses */
-#define CpACl1pe (1<<3) /* l1 cache parity enable */
-#define CpACl2en (1<<1) /* l2 cache enable; default 1 */
-/*
- * CpCONTROL Secondary (CRm) registers and opcode2 fields.
- */
-#define CpCONTROLscr 1
-
-#define CpSCRscr 0
-
-/*
- * CpCACHE Secondary (CRm) registers and opcode2 fields. op1==0.
- * In ARM-speak, 'flush' means invalidate and 'clean' means writeback.
- */
-#define CpCACHEintr 0 /* interrupt (op2==4) */
-#define CpCACHEisi 1 /* inner-sharable I cache (v7) */
-#define CpCACHEpaddr 4 /* 0: phys. addr (cortex) */
-#define CpCACHEinvi 5 /* instruction, branch table */
-#define CpCACHEinvd 6 /* data or unified */
-// #define CpCACHEinvu 7 /* unified (not on cortex) */
-#define CpCACHEva2pa 8 /* va -> pa translation (cortex) */
-#define CpCACHEwb 10 /* writeback */
-#define CpCACHEinvdse 11 /* data or unified by mva */
-#define CpCACHEwbi 14 /* writeback+invalidate */
-
-#define CpCACHEall 0 /* entire (not for invd nor wb(i) on cortex) */
-#define CpCACHEse 1 /* single entry */
-#define CpCACHEsi 2 /* set/index (set/way) */
-#define CpCACHEtest 3 /* test loop */
-#define CpCACHEwait 4 /* wait (prefetch flush on cortex) */
-#define CpCACHEdmbarr 5 /* wb only (cortex) */
-#define CpCACHEflushbtc 6 /* flush branch-target cache (cortex) */
-#define CpCACHEflushbtse 7 /* ⋯ or just one entry in it (cortex) */
-
-/*
- * CpTLB Secondary (CRm) registers and opcode2 fields.
- */
-#define CpTLBinvi 5 /* instruction */
-#define CpTLBinvd 6 /* data */
-#define CpTLBinvu 7 /* unified */
-
-#define CpTLBinv 0 /* invalidate all */
-#define CpTLBinvse 1 /* invalidate single entry */
-#define CpTBLasid 2 /* by ASID (cortex) */
-
-/*
- * CpCLD Secondary (CRm) registers and opcode2 fields for op1==0. (cortex)
- */
-#define CpCLDena 12 /* enables */
-#define CpCLDcyc 13 /* cycle counter */
-#define CpCLDuser 14 /* user enable */
-
-#define CpCLDenapmnc 0
-#define CpCLDenacyc 1
-
-/*
- * CpCLD Secondary (CRm) registers and opcode2 fields for op1==1.
- */
-#define CpCLDl2 0 /* l2 cache */
-
-#define CpCLDl2aux 2 /* auxiliary control */
-
-/*
- * l2 cache aux. control
- */
-#define CpCl2ecc (1<<28) /* use ecc, not parity */
-#define CpCl2noldforw (1<<27) /* no ld forwarding */
-#define CpCl2nowrcomb (1<<25) /* no write combining */
-#define CpCl2nowralldel (1<<24) /* no write allocate delay */
-#define CpCl2nowrallcomb (1<<23) /* no write allocate combine */
-#define CpCl2nowralloc (1<<22) /* no write allocate */
-#define CpCl2eccparity (1<<21) /* enable ecc or parity */
-#define CpCl2inner (1<<16) /* inner cacheability */
-/* other bits are tag ram & data ram latencies */
-
-/*
- * CpTLD Secondary (CRm) registers and opcode2 fields.
- */
-#define CpTLDlock 0 /* TLB lockdown registers */
-#define CpTLDpreload 1 /* TLB preload */
-
-#define CpTLDi 0 /* TLB instr. lockdown reg. */
-#define CpTLDd 1 /* " data " " */
-
-/*
- * CpVECS Secondary (CRm) registers and opcode2 fields.
- */
-#define CpVECSbase 0
-
-#define CpVECSnorm 0 /* (non-)secure base addr */
-#define CpVECSmon 1 /* secure monitor base addr */
-
-/*
- * MMU page table entries.
- */
-#define Fault 0x00000000 /* L[12] pte: unmapped */
-
-#define Coarse (1) /* L1 */
-#define Section (2) /* L1 1MB */
-#define Fine (3) /* L1 */
-
-#define Large 0x00000001 /* L2 64KB */
-#define Small 0x00000002 /* L2 4KB */
-#define Tiny 0x00000003 /* L2 1KB: not in v7 */
-#define Buffered 0x00000004 /* L[12]: write-back not -thru */
-#define Cached 0x00000008 /* L[12] */
-#define ExecuteNever (1<<4)
-
-#define Noaccess 0 /* AP, DAC */
-#define Krw 1 /* AP */
-/* armv7 deprecates AP[2] == 1 & AP[1:0] == 2 (Uro), prefers 3 (new in v7) */
-#define Uro 2 /* AP */
-#define Urw 3 /* AP */
-#define Client 1 /* DAC */
-#define Manager 3 /* DAC */
-
-#define AP(n, v) F((v), ((n)*2)+4, 2)
-#define L1AP(ap) (AP(3, (ap)))
-#define L2AP(ap) (AP(0, (ap))) /* armv7 */
-#define DAC(n, v) F((v), (n)*2, 2)
-
-#define HVECTORS 0xffff0000
-#define PTEDRAM (L1AP(Krw)|Section|Cached|Buffered)
-#define PTEIO (ExecuteNever)
--- a/sys/src/9/omap4/arm.s
+++ /dev/null
@@ -1,31 +1,0 @@
-#include "arm.h"
-
-/* arm v7 arch defines these */
-#define WFI WORD $0xe320f003 /* wait for interrupt */
-#define DMB WORD $0xf57ff05f /* data mem. barrier; last f = SY */
-#define DSB WORD $0xf57ff04f /* data synch. barrier; last f = SY */
-#define ISB WORD $0xf57ff06f /* instr. sync. barrier; last f = SY */
-#define NOOP WORD $0xe320f000
-#define CLZ(s, d) WORD $(0xe16f0f10 | (d) << 12 | (s)) /* count leading 0s */
-#define CPSIE WORD $0xf1080080 /* intr enable: zeroes I bit */
-#define CPSID WORD $0xf10c0080 /* intr disable: sets I bit */
-
-#define EWAVE(n)\
- MOVW $0x48020000, R0; \
- MOVW $n, R1; \
- MOVW R1, (R0);
-
-#define WAVE(n)\
- MOVW $0xE0000000, R0; \
- MOVW $n, R1; \
- MOVW R1, (R0);
-
-#define LDREX(a,r) WORD $(0xe<<28|0x01900f9f | (a)<<16 | (r)<<12)
-#define STREX(a,v,r) WORD $(0xe<<28|0x01800f90 | (a)<<16 | (r)<<12 | (v)<<0)
-#define CLREX WORD $0xf57ff01f
-
-#define BARRIERS\
- MOVW $0, R11; \
- MCR CpSC, 0, R11, C(CpCACHE), C(CpCACHEinvi), CpCACHEflushbtc; \
- DSB; \
- ISB;
--- a/sys/src/9/omap4/clock.c
+++ /dev/null
@@ -1,123 +1,0 @@
-#include "u.h"
-#include "ureg.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "io.h"
-
-extern uchar *periph;
-ulong *global, *local;
-enum {
- PERIPHCLK = 506965000,
- MaxPeriod = PERIPHCLK / (256 * 100),
- MinPeriod = MaxPeriod / 100,
-} ;
-
-void
-globalclockinit(void)
-{
- global = (ulong*) (periph + 0x200);
- local = (ulong*) (periph + 0x600);
- global[2] &= 0xFFFF00F0;
- global[0] = 0;
- global[1] = 0;
- global[2] |= 1;
-}
-
-void
-cycles(uvlong *x)
-{
- ulong hi, newhi, lo, *y;
-
- newhi = global[1];
- do{
- hi = newhi;
- lo = global[0];
- }while((newhi = global[1]) != hi);
- y = (ulong *) x;
- y[0] = lo;
- y[1] = hi;
-}
-
-uvlong
-fastticks(uvlong *hz)
-{
- uvlong ret;
-
- if(hz != nil)
- *hz = PERIPHCLK;
- cycles(&ret);
- return ret;
-}
-
-ulong
-µs(void)
-{
- return fastticks2us(fastticks(nil));
-}
-
-
-ulong
-perfticks(void)
-{
- return global[0];
-}
-
-void
-clocktick(Ureg* ureg, void *)
-{
- timerintr(ureg, 0);
-}
-
-void
-localclockinit(void)
-{
- local[2] = 0xFF06;
- intenable(29, clocktick, nil);
- timerset(0);
-}
-
-void
-timerset(uvlong val)
-{
- uvlong now, ticks;
-
- if(val == 0)
- ticks = MaxPeriod;
- else{
- cycles(&now);
- ticks = (val - now) / 256;
- if(ticks < MinPeriod)
- ticks = MinPeriod;
- if(ticks > MaxPeriod)
- ticks = MaxPeriod;
- }
- local[2] &= ~1;
- local[0] = local[1] = ticks;
- local[2] |= 1;
-}
-
-static void
-waituntil(uvlong n)
-{
- uvlong now, then;
-
- cycles(&now);
- then = now + n;
- while(now < then)
- cycles(&now);
-}
-
-void
-microdelay(int n)
-{
- waituntil(((uvlong)n) * PERIPHCLK / 1000000);
-}
-
-void
-delay(int n)
-{
- waituntil(((uvlong)n) * PERIPHCLK / 1000);
-}
-
--- a/sys/src/9/omap4/dat.h
+++ /dev/null
@@ -1,150 +1,0 @@
-typedef struct Lock Lock;
-typedef struct Label Label;
-typedef struct Ureg Ureg;
-typedef struct Mach Mach;
-typedef struct FPsave FPsave;
-typedef struct Notsave Notsave;
-typedef struct PMMU PMMU;
-typedef struct Confmem Confmem;
-typedef struct Conf Conf;
-typedef struct Proc Proc;
-typedef struct ISAConf ISAConf;
-typedef uvlong Tval;
-typedef void KMap;
-#define VA(k) ((uintptr)(k))
-#define kmap(p) (KMap*)((p)->pa|kseg0)
-#define kunmap(k)
-
-#pragma incomplete Ureg
-
-struct Lock
-{
- ulong key;
- u32int sr;
- uintptr pc;
- Proc* p;
- Mach* m;
- int isilock;
-};
-
-struct Label
-{
- ulong sp;
- ulong pc;
-};
-
-struct FPsave
-{
- ulong status;
- ulong control;
- ulong regs[8][3];
- int fpstate;
-};
-
-enum
-{
- FPinit,
- FPactive,
- FPinactive,
-};
-
-struct Notsave
-{
- int emptiness;
-};
-
-struct PMMU
-{
- ulong l1[USTKTOP / MiB];
-};
-
-#include "../port/portdat.h"
-
-struct Mach
-{
- int machno; /* physical id of processor */
- uintptr splpc; /* pc of last caller to splhi */
-
- Proc* proc; /* current process */
- Proc* externup;
-
- int flushmmu; /* flush current proc mmu state */
-
- ulong ticks; /* of the clock since boot time */
- Label sched; /* scheduler wakeup */
- Lock alarmlock; /* access to alarm list */
- void* alarm; /* alarms bound to this clock */
- int inclockintr;
-
- Proc* readied; /* for runproc */
- ulong schedticks; /* next forced context switch */
-
- int cputype;
- ulong delayloop;
-
- /* stats */
- int tlbfault;
- int tlbpurge;
- int pfault;
- int cs;
- int syscall;
- int load;
- int intr;
- uvlong fastclock; /* last sampled value */
- uvlong inidle; /* time spent in idlehands() */
- ulong spuriousintr;
- int lastintr;
- int ilockdepth;
- Perf perf;
- uvlong cyclefreq; /* Frequency of user readable cycle counter */
-
-};
-
-struct Confmem
-{
- uintptr base;
- usize npage;
- uintptr limit;
- uintptr kbase;
- uintptr klimit;
-};
-
-struct Conf
-{
- ulong nmach; /* processors */
- ulong nproc; /* processes */
- Confmem mem[1]; /* physical memory */
- ulong npage; /* total physical pages of memory */
- usize upages; /* user page pool */
- ulong copymode; /* 0 is copy on write, 1 is copy on reference */
- ulong ialloc; /* max interrupt time allocation in bytes */
- ulong pipeqsize; /* size in bytes of pipe queues */
- ulong nimage; /* number of page cache image headers */
- ulong nswap; /* number of swap pages */
- int nswppo; /* max # of pageouts per segment pass */
- ulong hz; /* processor cycle freq */
- ulong mhz;
- int monitor; /* flag */
-};
-
-struct
-{
- Lock;
- int machs; /* bitmap of active CPUs */
- int exiting; /* shutdown */
-}active;
-
-extern Mach *m;
-#define up (((Mach*)MACHADDR)->externup)
-extern Mach* machaddr[MAXMACH];
-#define MACHP(n) (machaddr[n])
-extern uintptr kseg0;
-
-#define AOUT_MAGIC (E_MAGIC)
-#define NCOLOR 1
-
-struct ISAConf
-{
- char *type;
- ulong port, irq;
-};
--- a/sys/src/9/omap4/fns.h
+++ /dev/null
@@ -1,41 +1,0 @@
-#include "../port/portfns.h"
-
-#define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1]))
-#define getpgcolor(x) 0
-#define kmapinval()
-#define checkmmu(a,b)
-#define userureg(ur) (((ur)->psr & 0x1F) == 0x10)
-
-extern void procsave(Proc *);
-extern void procrestore(Proc *);
-extern void idlehands(void);
-extern void coherence(void);
-extern int tas(void*);
-extern int cmpswap(long*, long, long);
-extern void evenaddr(uintptr);
-extern void procsetup(Proc*);
-extern void procfork(Proc*);
-extern uintptr cankaddr(uintptr);
-extern void* KADDR(ulong);
-extern ulong paddr(void *);
-extern void cycles(uvlong *);
-extern void markidle(int);
-#define PADDR(x) paddr((void*)(x))
-
-void mmuinit(void);
-void flushtlb(void);
-void trapinit(void);
-void* vmap(ulong, ulong);
-void vunmap(void*, ulong);
-void printureg(Ureg*);
-void fillureguser(Ureg*);
-void touser(Ureg*);
-void links(void);
-void globalclockinit(void);
-void localclockinit(void);
-void intenable(int, void(*)(Ureg*, void *), void *);
-void uartinit(void);
-void irqroute(int, void(*)(Ureg*, void *), void *);
-void gpioinit(void);
-void setgpio(int, int);
-void gpiomode(int, int);
--- a/sys/src/9/omap4/init9.s
+++ /dev/null
@@ -1,25 +1,0 @@
-/*
- * This is the same as the C programme:
- *
- * void
- * main(char* argv0)
- * {
- * startboot(argv0, &argv0);
- * }
- *
- * It is in assembler because SB needs to be
- * set and doing this in C drags in too many
- * other routines.
- */
-TEXT main(SB), 1, $8
- MOVW $setR12(SB), R12 /* load the SB */
- MOVW $boot(SB), R0
-
- ADD $12, R13, R1 /* pointer to 0(FP) */
-
- MOVW R0, 4(R13) /* pass argc, argv */
- MOVW R1, 8(R13)
-
- BL startboot(SB)
-_loop:
- B _loop
--- a/sys/src/9/omap4/l.s
+++ /dev/null
@@ -1,281 +1,0 @@
-#include "arm.s"
-#include "mem.h"
-
-TEXT _start(SB), 1, $-4
- MOVW $setR12(SB), R12
- ADD $(PHYSDRAM - KZERO), R12
-
- MOVW $(PsrDirq | PsrDfiq | PsrMsvc), CPSR
-
- MOVW $0x48020014, R1
-uartloop:
- MOVW (R1), R0
- AND.S $(1<<6), R0
- B.EQ uartloop
-
- EWAVE('\r')
- EWAVE('\n')
-
- MRC CpSC, 0, R1, C(CpCONTROL), C(0), CpMainctl
- BIC $(CpCmmu), R1
- MCR CpSC, 0, R1, C(CpCONTROL), C(0), CpMainctl
-
- EWAVE('P')
-
- MOVW $KZERO, R1
- MOVW $(PHYSDRAM|PTEDRAM), R2
- MOVW $256, R3
- BL _mapmbs(SB)
- MOVW $PHYSDRAM, R1
- MOVW $(PHYSDRAM|PTEDRAM), R2
- MOVW $256, R3
- BL _mapmbs(SB)
- MOVW $0x48000000, R1
- MOVW $(0x48000000| L1AP(Krw) | Section | PTEIO), R2
- MOVW $1, R3
- BL _mapmbs(SB)
-
- EWAVE('l')
-
- MOVW $L1PT, R1
- MCR CpSC, 0, R1, C(CpTTB), C(0), CpTTB0
- MCR CpSC, 0, R1, C(CpTTB), C(0), CpTTB1
-
- EWAVE('a')
-
- MOVW $Client, R1
- MCR CpSC, 0, R1, C(CpDAC), C(0)
- MOVW $0, R1
- MCR CpSC, 0, R1, C(CpPID), C(0x0)
-
- EWAVE('n')
-
- MRC CpSC, 0, R1, C(CpCONTROL), C(0), CpMainctl
- ORR $(CpCmmu|CpChv|CpCsw|CpCicache), R1
- MCR CpSC, 0, R1, C(CpCONTROL), C(0), CpMainctl
-
- EWAVE(' ')
-
- BL _jumphi(SB)
-
- EWAVE('9')
-
- MOVW $setR12(SB), R12
- MOVW $KTZERO, R13
-
- EWAVE(' ')
-
- BL main(SB)
-a:
- WFI
- B a
- BL _div(SB) /* hack */
-
-/* R1: virtual start, R2: physical start, R3: number of MB */
-TEXT _mapmbs(SB), 1, $-4
- MOVW $L1PT, R11
- ADD R1>>18, R11, R1
-mapmbsl:
- MOVW.P R2, 4(R1)
- ADD $MiB, R2
- SUB.S $1, R3
- B.NE mapmbsl
- MOVW R14, PC
-
-TEXT _jumphi(SB), 1, $-4
- ADD $(KZERO - PHYSDRAM), R14
- MOVW R14, PC
-
-TEXT coherence(SB), 1, $-4
- BARRIERS
- RET
-
-TEXT splhi(SB), 1, $-4
- MOVW CPSR, R0
- CPSID
- MOVW $(MACHADDR + 4), R11
- MOVW R14, (R11)
- RET
-
-TEXT spllo(SB), 1, $-4
- MOVW CPSR, R0
- CPSIE
- RET
-
-TEXT splx(SB), 1, $-4
- MOVW CPSR, R1
- MOVW R0, CPSR
- MOVW R1, R0
- RET
-
-TEXT islo(SB), 1, $-4
- MOVW CPSR, R0
- AND $PsrDirq, R0
- EOR $PsrDirq, R0
- RET
-
-TEXT tas(SB), $-4
-TEXT _tas(SB), $-4
-spintas:
- LDREX(0,1)
- CMP.S $0, R1
- B.NE tasnope
- MOVW $1, R3
- STREX(0,3,2)
- CMP.S $0, R2
- B.NE spintas
-tasnope:
- CLREX
- MOVW R1, R0
- RET
-
-TEXT cmpswap(SB), $-4
- MOVW 4(FP), R3
- MOVW 8(FP), R4
-casspin:
- LDREX(0,1)
- CMP.S R3, R1
- B.NE casfail
- STREX(0,1,2)
- CMP.S $0, R2
- B.NE casspin
- MOVW $1, R0
- RET
-casfail:
- CLREX
- MOVW $0, R0
- RET
-
-TEXT setlabel(SB), 1, $-4
- MOVW R13, 0(R0)
- MOVW R14, 4(R0)
- MOVW $0, R0
- RET
-
-TEXT gotolabel(SB), 1, $-4
- MOVW 0(R0), R13
- MOVW 4(R0), R14
- MOVW $1, R0
- RET
-
-TEXT idlehands(SB), 1, $-4
- BARRIERS
- WFI
- RET
-
-TEXT flushtlb(SB), $-4
- BARRIERS
- MCR CpSC, 0, R1, C(8), C(7), 0
- RET
-
-#define TRAP(n,a)\
- SUB $n, R14;\
- WORD $0xf96d0513;\
- WORD $0xf10e0093;\
- MOVW R14, -8(R13);\
- MOVW $a, R14;\
- MOVW R14, -4(R13);\
- B _trap(SB)
-
-TEXT _reset(SB), 1, $-4
- TRAP(4, 0)
-TEXT _undefined(SB), 1, $-4
- TRAP(4, 1)
-TEXT _prefabort(SB), 1, $-4
- TRAP(4, 3)
-TEXT _dataabort(SB), 1, $-4
- TRAP(8, 4)
-TEXT _wtftrap(SB), 1, $-4
- TRAP(4, 5)
-TEXT _irq(SB), 1, $-4
- TRAP(4, 6)
-TEXT _fiq(SB), 1, $-4
- TRAP(4, 7)
-
-TEXT _trap(SB), 1, $-4
- SUB $64, R13
- MOVM.IA [R0-R12], (R13)
- MOVW $setR12(SB), R12
- MOVW 64(R13), R0
- MOVW 68(R13), R1
- MOVW R0, 68(R13)
- MOVW R1, 64(R13)
- ADD $72, R13, R0
- MOVW R0, 52(R13)
- MOVW R13, R0
- SUB $8, R13
- BL trap(SB)
- MOVW 72(R13), R0
- AND $PsrMask, R0
- CMP $PsrMusr, R0
- B.EQ _forkret
- ADD $8, R13
- MOVW 68(R13), R0
- MOVW R0, 60(R13)
- MOVW 64(R13), R0
- MOVW R0, SPSR
- MOVW R13, R0
- ADD $72, R13
- WORD $0xE8D0FFFF
-
-TEXT _syscall(SB), 1, $-4
- WORD $0xf96d0513
- WORD $0xf10e0093
- SUB $64, R13
- MOVM.IA.S [R0-R14], (R13)
- MOVW $setR12(SB), R12
- MOVW 64(R13), R0
- MOVW 68(R13), R1
- MOVW R0, 68(R13)
- MOVW R1, 64(R13)
- MOVW R13, R0
- SUB $8, R13
- BL syscall(SB)
-
-TEXT forkret(SB), 1, $-4
-_forkret:
- ADD $8, R13
- MOVW R13, R0
- ADD $72, R13
-
-TEXT touser(SB), 1, $-4
- ADD $52, R0
- MOVM.IA.S (R0), [R13-R14]
- SUB $52, R0
- MOVW 68(R0), R1
- MOVW R1, 52(R0)
- MOVW 64(R0), R1
- MOVW R1, SPSR
- WORD $0xE8D09FFF
-
-TEXT fillureguser(SB), $-4
- ADD $52, R0
- MOVM.IA.S [R13-R14], (R0)
- RET
-
-
-TEXT dumpstack(SB), 0, $8
- MOVW R14, 8(R13)
- ADD $12, R13, R0
- BL _dumpstack(SB)
- RET
-
-TEXT getdfsr(SB), 0, $-4
- MRC CpSC, 0, R0, C(5), C(0), 0
- RET
-
-TEXT getifsr(SB), 0, $-4
- MRC CpSC, 0, R0, C(5), C(0), 1
- RET
-
-TEXT getdfar(SB), 0, $-4
- MRC CpSC, 0, R0, C(6), C(0), 0
- RET
-
-TEXT getifar(SB), 0, $-4
- MRC CpSC, 0, R0, C(6), C(0), 2
- RET
-
-TEXT getr13(SB), 0, $-4
- MOVW R13, R0
- RET
--- a/sys/src/9/omap4/main.c
+++ /dev/null
@@ -1,199 +1,0 @@
-#include "u.h"
-#include "ureg.h"
-#include "pool.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "io.h"
-#include "init.h"
-#include "tos.h"
-#include "arm.h"
-
-ulong *uart = (ulong *) 0x48020000;
-#define wave(x) (*uart = (char) (x))
-uintptr kseg0 = KZERO;
-uchar *sp;
-
-Mach *m;
-Mach *machaddr[MAXMACH];
-Conf conf;
-
-void
-machinit(void)
-{
- machaddr[0] = m = KADDR(FIRSTMACH);
- memset(m, 0, sizeof(Mach));
- active.machs = conf.nmach = 1;
- active.exiting = 0;
- up = nil;
-
- conf.mem[0].base = ROUNDUP(PADDR(end), BY2PG);
- conf.mem[0].limit = ROUNDDN(PHYSDRAM + DRAMSIZ, BY2PG);
- conf.mem[0].npage = (conf.mem[0].limit - conf.mem[0].base) / BY2PG;
- conf.npage = conf.mem[0].npage;
- conf.upages = conf.npage - 64 * MiB / BY2PG;
- conf.nproc = 100;
- conf.pipeqsize = 32768;
- conf.nimage = 200;
- conf.ialloc = 65536;
-}
-
-void
-init0(void)
-{
- Ureg ureg;
-
- spllo();
- up->nerrlab = 0;
- up->slash = namec("#/", Atodir, 0, 0);
- pathclose(up->slash->path);
- up->slash->path = newpath("/");
- up->dot = cclone(up->slash);
- chandevinit();
- if(!waserror()){
- ksetenv("terminal", "generic /sys/src/9/omap4/panda", 0);
- ksetenv("cputype", "arm", 0);
- ksetenv("service", "cpu", 0);
- ksetenv("console", "0", 0);
- poperror();
- }
- kproc("alarm", alarmkproc, 0);
- memset(&ureg, 0, sizeof ureg);
- ureg.pc = UTZERO + 32;
- ureg.r13 = (ulong) sp;
- ureg.psr = PsrMusr;
- touser(&ureg);
-}
-
-static uchar *
-pusharg(char *p)
-{
- int n;
-
- n = strlen(p) + 1;
- sp -= n;
- memmove(sp, p, n);
- return sp;
-}
-
-static void
-bootargs(void *base)
-{
- int ac, i;
- uchar *av[32], **lsp;
- sp = (uchar*)base + BY2PG - sizeof(Tos);
-
- ac = 0;
- av[ac++] = pusharg("boot");
- sp = (uchar *) ROUNDDN((ulong)sp, 4);
- sp -= (ac + 1) * 4;
- lsp = (uchar **) sp;
- for(i = 0; i < ac; i++)
- lsp[i] = av[i] + ((USTKTOP - BY2PG) - (ulong) base);
- lsp[i] = 0;
- sp += (USTKTOP - BY2PG) - (ulong)base;
- sp -= BY2WD;
-}
-
-void
-userinit(void)
-{
- Proc *p;
- Segment *s;
- Page *pg;
- void *v;
-
- p = newproc();
- p->pgrp = newpgrp();
- p->egrp = smalloc(sizeof(Egrp));
- p->egrp->ref = 1;
- p->fgrp = dupfgrp(nil);
- p->rgrp = newrgrp();
- p->procmode = 0640;
-
- kstrdup(&eve, "");
- kstrdup(&p->text, "*init*");
- kstrdup(&p->user, eve);
-
- procsetup(p);
-
- p->sched.pc = (ulong)init0;
- p->sched.sp = (ulong)p->kstack + KSTACK - sizeof(Sargs) - BY2WD;
-
- s = newseg(SG_STACK, USTKTOP - USTKSIZE, USTKSIZE / BY2PG);
- p->seg[SSEG] = s;
- pg = newpage(0, 0, USTKTOP - BY2PG);
- v = vmap(pg->pa, BY2PG);
- memset(v, 0, BY2PG);
- segpage(s, pg);
- bootargs(v);
- vunmap(v, BY2PG);
-
- s = newseg(SG_TEXT, UTZERO, 1);
- s->flushme++;
- p->seg[TSEG] = s;
- pg = newpage(0, 0, UTZERO);
- pg->txtflush = ~0;
- segpage(s, pg);
- v = vmap(pg->pa, BY2PG);
- memset(v, 0, BY2PG);
- memmove(v, initcode, sizeof initcode);
- vunmap(v, BY2PG);
-
- ready(p);
-}
-
-void
-main()
-{
- extern int ehcidebug;
-
- wave('f');
- memset(edata, 0, end - edata);
- wave('r');
- machinit();
- wave('o');
- mmuinit();
- gpioinit();
- wave('m');
- trapinit();
- uartinit();
- print(" Bell Labs\n");
- xinit();
- globalclockinit();
- localclockinit();
- timersinit();
- procinit0();
- pageinit();
- swapinit();
- initseg();
- quotefmtinstall();
- ehcidebug = 1;
- links();
- chandevreset();
- userinit();
- schedinit();
-}
-
-void
-exit(int)
-{
- uartputs("resting\n", 9);
- splhi();
- while(1)
- idlehands();
-}
-
-void
-reboot()
-{
- exit(0);
-}
-
-void
-rdb()
-{
- panic("rdb");
-}
-
--- a/sys/src/9/omap4/mem.h
+++ /dev/null
@@ -1,66 +1,0 @@
-#define KiB 1024u /* Kibi 0x0000000000000400 */
-#define MiB 1048576u /* Mebi 0x0000000000100000 */
-#define GiB 1073741824u /* Gibi 000000000040000000 */
-
-#define HOWMANY(x, y) (((x)+((y)-1))/(y))
-#define ROUNDUP(x, y) (HOWMANY((x), (y))*(y)) /* ceiling */
-#define ROUNDDN(x, y) (((x)/(y))*(y)) /* floor */
-#define MIN(a, b) ((a) < (b)? (a): (b))
-#define MAX(a, b) ((a) > (b)? (a): (b))
-#define PGROUND(s) ROUNDUP(s, BY2PG)
-#define ROUND(s, sz) (((s)+(sz-1))&~(sz-1))
-#define PPN(x) ((x)&~(BY2PG-1))
-#define F(v, o, w) (((v) & ((1<<(w))-1))<<(o))
-
-#define FMASK(o, w) (((1<<(w))-1)<<(o))
-
-#define KZERO 0xF0000000
-#define KTZERO 0xF2000000
-#define VECTORS 0xFFFF0000
-#define MACHADDR 0xFFFF1000
-
-#define UZERO 0
-#define UTZERO BY2PG
-#define USTKTOP 0xE0000000
-
-/* we map MMIO somewhere here */
-#define IZERO 0xE0000000
-#define NIOPAGES ROUNDDN((KZERO - IZERO) / BY2PG, 256)
-
-#define KSTKSIZ (16*KiB)
-#define KSTACK KSTKSIZ
-#define USTKSIZE (8*MiB)
-
-#define HZ (100) /* clock frequency */
-#define MS2HZ (1000/HZ) /* millisec per clock tick */
-
-#define MAXSYSARG 7
-#define MAXMACH 2
-
-#define BI2BY 8
-#define BY2WD 4
-#define BY2V 8
-#define BY2PG 4096
-#define PGSHIFT 12
-#define PTEMAPMEM 1048576
-#define PTEPERTAB (PTEMAPMEM/BY2PG)
-#define SEGMAPSIZE 1984
-#define SSEGMAPSIZE 16
-#define BLOCKALIGN 32
-
-#define PTEVALID (1<<0)
-#define PTERONLY 0
-#define PTEWRITE (1<<1)
-#define PTEUNCACHED (1<<2)
-#define PTEKERNEL (1<<3)
-
-#define PHYSDRAM 0x80000000
-#define DRAMSIZ (1024 * MiB)
-
-#define L1PT PHYSDRAM
-#define L1SIZ (16 * KiB)
-#define IOPT (L1PT + L1SIZ)
-#define L2SIZ (1 * KiB)
-#define PRIVL2 (IOPT + L2SIZ * (NIOPAGES / 256))
-#define PHYSVECTORS ROUNDUP(PRIVL2 + L2SIZ, BY2PG)
-#define FIRSTMACH (PHYSVECTORS + BY2PG)
--- a/sys/src/9/omap4/mkfile
+++ /dev/null
@@ -1,103 +1,0 @@
-CONF=panda
-CONFLIST=panda
-
-loadaddr=0xF2000000
-
-objtype=arm
-</$objtype/mkfile
-p=9
-
-DEVS=`{rc ../port/mkdevlist $CONF}
-
-PORT=\
- alarm.$O\
- alloc.$O\
- allocb.$O\
- auth.$O\
- cache.$O\
- chan.$O\
- dev.$O\
- edf.$O\
- fault.$O\
- gpio.$O\
- mul64fract.$O\
- rebootcmd.$O\
- page.$O\
- parse.$O\
- pgrp.$O\
- portclock.$O\
- print.$O\
- proc.$O\
- qio.$O\
- qlock.$O\
- segment.$O\
- swap.$O\
- syscallfmt.$O\
- sysfile.$O\
- sysproc.$O\
- taslock.$O\
- tod.$O\
- xalloc.$O\
- random.$O\
-
-OBJ=\
- l.$O\
- main.$O\
- mmu.$O\
- clock.$O\
- arch.$O\
- trap.$O\
- syscall.$O\
- $CONF.root.$O\
- $CONF.rootc.$O\
- $DEVS\
- $PORT\
-
-LIB=\
- /$objtype/lib/libmemlayer.a\
- /$objtype/lib/libmemdraw.a\
- /$objtype/lib/libdraw.a\
- /$objtype/lib/libip.a\
- /$objtype/lib/libsec.a\
- /$objtype/lib/libmp.a\
- /$objtype/lib/libc.a\
-
-9:V: $p$CONF s$p$CONF
-
-$p$CONF:DQ: $CONF.c $OBJ $LIB mkfile
- $CC $CFLAGS '-DKERNDATE='`{date -n} $CONF.c
- echo '# linking raw kernel'
- $LD -o $target -H0 -P -R4096 -T$loadaddr -l $OBJ $CONF.$O $LIB
-
-s$p$CONF:DQ: $CONF.$O $OBJ $LIB
- echo '# linking kernel with symbols'
-# $LD -o $target -R4096 -T$loadaddr -l -a $OBJ $CONF.$O $LIB >$target.list
- $LD -o $target -R4096 -T$loadaddr -l $OBJ $CONF.$O $LIB
- size $target
-
-$p$CONF.gz:D: $p$CONF
- gzip -9 <$p$CONF >$target
-
-$OBJ: $HFILES
-
-l.$O: arm.s
-
-install:V: /$objtype/$p$CONF
-
-/$objtype/$p$CONF:D: $p$CONF s$p$CONF
- cp $p$CONF s$p$CONF /$objtype
-
-<../boot/bootmkfile
-<../port/portmkfile
-<|../port/mkbootrules $CONF
-
-CFLAGS= -I. -I../port $CFLAGS # hack to compile private sysproc.c (e.g.)
-
-init.h:D: ../port/initcode.c init9.s
- $CC ../port/initcode.c
- $AS init9.s
- $LD -l -R1 -s -o init.out init9.$O initcode.$O /$objtype/lib/libc.a
- {echo 'uchar initcode[]={'
- xd -1x <init.out |
- sed -e 's/^[0-9a-f]+ //' -e 's/ ([0-9a-f][0-9a-f])/0x\1,/g'
- echo '};'} > init.h
--- a/sys/src/9/omap4/mmu.c
+++ /dev/null
@@ -1,243 +1,0 @@
-#include "u.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "io.h"
-#include "arm.h"
-
-char iopages[NIOPAGES / 8];
-Lock iopagelock;
-uchar *periph;
-
-static int
-isfree(int i)
-{
- return (iopages[i / 8] & (1 << (i % 8))) == 0;
-}
-
-static void
-freeio(int i)
-{
- iopages[i / 8] &= ~(1 << (i % 8));
-}
-
-static int
-getiopages(int n)
-{
- int i, j;
-
- lock(&iopagelock);
- for(i = 0; i <= NIOPAGES - n; i++){
- for(j = 0; j < n; j++)
- if(!isfree(i + j))
- goto next;
- for(j = 0; j < n; j++)
- iopages[(i + j) / 8] |= (1 << ((i + j) % 8));
- unlock(&iopagelock);
- return i;
- next: ;
- }
- panic("out of i/o pages");
- return 0;
-}
-
-static void
-putiopages(int i, int n)
-{
- lock(&iopagelock);
- while(n--)
- freeio(i++);
- unlock(&iopagelock);
-}
-
-void *
-vmap(ulong phys, ulong length)
-{
- ulong virt, off, *l2;
-
- off = phys % BY2PG;
- length = (ROUNDUP(phys + length, BY2PG) - ROUNDDN(phys, BY2PG)) / BY2PG;
- if(length == 0)
- return nil;
- phys = ROUNDDN(phys, BY2PG);
- virt = getiopages(length);
- l2 = KADDR(IOPT);
- l2 += virt;
- while(length--){
- *l2++ = phys | L2AP(Krw) | Small | PTEIO;
- phys += BY2PG;
- }
- flushtlb();
- return (void *) (IZERO + BY2PG * virt + off);
-}
-
-void
-vunmap(void *virt, ulong length)
-{
- ulong v, *l2;
-
- if((ulong)virt < IZERO || (ulong)virt >= IZERO + NIOPAGES * BY2PG)
- panic("vunmap: virt=%p", virt);
- v = (ROUNDDN((ulong) virt, BY2PG) - IZERO) / BY2PG;
- length = (ROUNDUP(((ulong) virt) + length, BY2PG) - ROUNDDN((ulong) virt, BY2PG)) / BY2PG;
- if(length == 0)
- return;
- l2 = KADDR(IOPT);
- l2 += v;
- lock(&iopagelock);
- while(length--){
- *l2++ = 0;
- freeio(v++);
- }
- unlock(&iopagelock);
- flushtlb();
-}
-
-void
-markidle(int n)
-{
- setgpio(7 + m->machno, !n);
-}
-
-void
-mmuinit(void)
-{
- ulong *l1, l2, *pl2;
- int i, n;
- extern ulong *uart;
-
- l1 = KADDR(L1PT);
- l2 = IOPT;
- n = NIOPAGES / 256;
- memset(KADDR(l2), 0, n * L2SIZ);
- for(i = 0; i < n; i++){
- l1[(IZERO / MiB) + i] = l2 | Coarse;
- l2 += L2SIZ;
- }
- uart = vmap((ulong) uart, BY2PG);
- periph = vmap(0x48240000, 2 * BY2PG);
- memset(l1, 0, sizeof(ulong) * (IZERO / MiB));
- l1[4095] = PRIVL2 | Coarse;
- pl2 = KADDR(PRIVL2);
- for(i = 0; i < 240; i++)
- pl2[i] = (0x8FF00000 + i * BY2PG) | L2AP(Krw) | Small | Cached | Buffered;
- pl2[240] = PHYSVECTORS | L2AP(Krw) | Small | Cached | Buffered;
- pl2[241] = FIRSTMACH | L2AP(Krw) | Small | Cached | Buffered;
- flushtlb();
- m = (Mach *) MACHADDR;
-}
-
-void
-mmuswitch(Proc *p)
-{
- ulong *l1;
-
- l1 = KADDR(L1PT);
- memmove(l1, p->l1, sizeof p->l1);
- flushtlb();
-}
-
-void
-putmmu(uintptr va, uintptr pa, Page *)
-{
- ulong *l1a, *l1b, *l2;
- int l1o, l2o;
-
- l1o = va / MiB;
- l2o = (va % MiB) / BY2PG;
- l1a = KADDR(L1PT);
- l1b = up->l1;
- if(l1a[l1o] == 0){
- if((pa & PTEVALID) == 0)
- return;
- l2 = xspanalloc(L2SIZ, L2SIZ, 0);
- l1a[l1o] = l1b[l1o] = PADDR(l2) | Coarse;
- } else
- l2 = KADDR(ROUNDDN(l1a[l1o], L2SIZ));
- l2 += l2o;
- if((pa & PTEVALID) == 0){
- *l2 = 0;
- flushtlb();
- return;
- }
- *l2 = ROUNDDN(pa, BY2PG) | Small;
- if((pa & PTEWRITE) == 0)
- *l2 |= L2AP(Uro);
- else
- *l2 |= L2AP(Urw);
- if((pa & PTEUNCACHED) == 0)
- *l2 |= Buffered | Cached;
- flushtlb();
-}
-
-void
-flushmmu(void)
-{
- int s, i;
- ulong p;
- ulong *l1;
-
- l1 = KADDR(L1PT);
- s = splhi();
- for(i = 0; i < nelem(up->l1); i++){
- p = l1[i];
- if(p & Small)
- free(KADDR(ROUNDDN(p, BY2PG)));
- }
- memset(up->l1, 0, sizeof up->l1);
- memset(l1, 0, sizeof up->l1);
- flushtlb();
- splx(s);
-}
-
-void
-mmurelease(Proc *p)
-{
- int i;
- ulong pg;
-
- if(p == up){
- flushmmu();
- return;
- }
- for(i = 0; i < nelem(p->l1); i++){
- pg = p->l1[i];
- if(pg & Small)
- free(KADDR(ROUNDDN(pg, BY2PG)));
- }
- memset(p->l1, 0, sizeof p->l1);
-}
-
-void
-countpagerefs()
-{
- panic("countpagerefs");
-}
-
-void*
-KADDR(ulong pa)
-{
- if(pa < (ulong)PHYSDRAM || pa > (ulong)(PHYSDRAM + VECTORS - KZERO))
- panic("kaddr: pa=%#.8lux, pc=%p", pa, getcallerpc(&pa));
- return (void*)(pa + KZERO - PHYSDRAM);
-}
-
-ulong
-paddr(void* v)
-{
- ulong va;
-
- va = (ulong) v;
- if(va < KZERO)
- panic("paddr: v=%p", v);
- return va - KZERO + PHYSDRAM;
-}
-
-ulong
-cankaddr(ulong arg)
-{
- if(arg < PHYSDRAM || arg > (ulong)(PHYSDRAM + VECTORS - KZERO))
- return 0;
- return PHYSDRAM - KZERO - arg;
-}
--- a/sys/src/9/omap4/panda
+++ /dev/null
@@ -1,73 +1,0 @@
-# panda board
-dev
- root
- cons
- env
- pipe
- proc
- mnt
- srv
- shr
- dup
-# arch
-# ssl
-# tls
-# bridge log
-# sdp thwack unthwack
-# cap
-# kprof
-# aoe
-# sd
-# fs
-# flash
-
-# ether netif
- ip arp chandial ip ipv6 ipaux iproute netlog nullmedium pktmedium ptclbsum inferno
-
-# draw screen
-# dss
-# mouse
-
- uart
-# usb
-
-link
-# archoma
- ethermedium
-# flashigep
-# loopbackmedium
- netdevmedium
-
-# usbohci
-# usbehci usbehciomap
-
-ip
- tcp
- udp
- ipifc
- icmp
- icmp6
- ipmux
- gre
- esp
-
-misc
-# rdb
-# coproc
-# dma
-# mouse
-# sdaoe sdscsi
-# softfpu
-# uarti8250
-# ucalloc
-# ucallocb
- uartomap
-
-port
- int cpuserver = 1;
-
-bootdir
- /$objtype/bin/paqfs
- /$objtype/bin/auth/factotum
- bootfs.paq
- boot
--- a/sys/src/9/omap4/trap.c
+++ /dev/null
@@ -1,385 +1,0 @@
-#include "u.h"
-#include "ureg.h"
-#include "../port/lib.h"
-#include "../port/error.h"
-#include "../port/systab.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "io.h"
-#include "arm.h"
-#include "tos.h"
-
-extern uchar *periph;
-ulong *intc, *intd;
-void (*irqhandler[MAXMACH][256])(Ureg *, void *);
-void *irqaux[MAXMACH][256];
-
-static char *trapname[] = {
- "reset", /* wtf */
- "undefined instruction",
- "supervisor call",
- "prefetch abort",
- "data abort",
- "IRQ",
- "FIQ",
-};
-
-void
-trapinit(void)
-{
- extern void _dataabort(), _undefined(), _prefabort(), _irq(), _fiq(), _reset(), _wtftrap(), _syscall();
- int i;
- ulong *trapv;
-
- trapv = (ulong *) 0xFFFF0000;
- for(i = 0; i < 8; i++)
- trapv[i] = 0xE59FF018;
- trapv[8] = (ulong) _reset;
- trapv[9] = (ulong) _undefined;
- trapv[10] = (ulong) _syscall;
- trapv[11] = (ulong) _prefabort;
- trapv[12] = (ulong) _dataabort;
- trapv[13] = (ulong) _wtftrap;
- trapv[14] = (ulong) _irq;
- trapv[15] = (ulong) _fiq;
-
- intc = (ulong *) (periph + 0x100);
- intc[1] = 0;
- intc[0] |= 1;
- intd = (ulong *) (periph + 0x1000);
- intd[0] |= 1;
-}
-
-void
-intenable(int i, void (*fn)(Ureg *, void *), void *aux)
-{
- intd[0x40 + (i / 32)] = 1 << (i % 32);
- irqhandler[m->machno][i] = fn;
- irqaux[m->machno][i] = aux;
-}
-
-void
-irqroute(int i, void (*fn)(Ureg *, void *), void *aux)
-{
- ulong x, y, z;
-
- if(irqhandler[m->machno][i] != nil){
- print("irqroute: irq already used: i=%d pc=%#p newfn=%#p oldfn=%#p\n", i, getcallerpc(&i), fn, irqhandler[m->machno][i]);
- return;
- }
- intenable(32 + i, fn, aux);
- x = intd[0x208 + i/4];
- y = 0xFF << ((i%4) * 8);
- z = 1 << (m->machno + (i%4) * 8);
- x = (x & ~y) | z;
- intd[0x208 + i/4] = x;
-}
-
-void
-faultarm(Ureg *ureg)
-{
- ulong addr, sr;
- int user, n, read, nsys;
- extern ulong getdfsr(void), getifsr(void), getdfar(void), getifar(void);
- char buf[ERRMAX];
-
- user = (ureg->psr & PsrMask) == PsrMusr;
- read = 1;
- if(ureg->type == 3){
- sr = getifsr();
- addr = getifar();
- }else{
- sr = getdfsr();
- addr = getdfar();
- if(sr & (1<<11))
- read = 0;
- }
- if(!user && addr >= KZERO){
- kernel:
- serialoq = nil;
- printureg(ureg);
- panic("kernel fault: addr=%#.8lux pc=%#.8lux lr=%#.8lux sr=%#.8lux", addr, ureg->pc, ureg->r14, sr);
- }
- if(up == nil){
- serialoq = nil;
- printureg(ureg);
- panic("%s fault: up=nil addr=%#.8lux pc=%#.8lux sr=%#.8lux", user ? "user" : "kernel", addr, ureg->pc, sr);
- }
- nsys = up->insyscall;
- up->insyscall = 1;
- n = fault(addr, read);
- if(n < 0){
- if(!user)
- goto kernel;
- spllo();
- sprint(buf, "sys: trap: fault %s addr=0x%lux", read ? "read" : "write", addr);
- postnote(up, 1, buf, NDebug);
- }
- up->insyscall = nsys;
-}
-
-void
-updatetos(void)
-{
- Tos *tos;
- uvlong t;
-
- tos = (Tos*) (USTKTOP - sizeof(Tos));
- cycles(&t);
- tos->kcycles += t - up->kentry;
- tos->pcycles = t + up->pcycles;
- tos->pid = up->pid;
-}
-
-int
-notify(Ureg *ureg)
-{
- int l;
- ulong s, sp;
- Note *n;
-
- if(up->procctl)
- procctl();
- if(up->nnote == 0)
- return 0;
- s = spllo();
- qlock(&up->debug);
- up->notepending = 0;
- n = &up->note[0];
- if(strncmp(n->msg, "sys:", 4) == 0){
- l = strlen(n->msg);
- if(l > ERRMAX-15)
- l = ERRMAX-15;
- sprint(n->msg + l, " pc=0x%.8lux", ureg->pc);
- }
- if(n->flag != NUser && (up->notified || up->notify == 0)){
- qunlock(&up->debug);
- if(n->flag == NDebug)
- pprint("suicide: %s\n", n->msg);
- pexit(n->msg, n->flag != NDebug);
- }
- if(up->notified){
- qunlock(&up->debug);
- splhi();
- return 0;
- }
- if(!up->notify){
- qunlock(&up->debug);
- pexit(n->msg, n->flag != NDebug);
- }
- sp = ureg->sp;
- sp -= 256 + sizeof(Ureg);
- if(!okaddr((uintptr)up->notify, 1, 0)
- || !okaddr(sp - ERRMAX - 4 * BY2WD, sizeof(Ureg) + ERRMAX + 4 * BY2WD, 1)){
- qunlock(&up->debug);
- pprint("suicide: bad address in notify\n");
- pexit("Suicide", 0);
- }
-
- memmove((void *) sp, ureg, sizeof(Ureg));
- ((void**)sp)[-1] = up->ureg;
- up->ureg = (void *) sp;
- sp -= BY2WD + ERRMAX;
- memmove((void *) sp, up->note[0].msg, ERRMAX);
- sp -= 3 * BY2WD;
- ((ulong*)sp)[2] = sp + 3 * BY2WD;
- ((Ureg**)sp)[1] = up->ureg;
- ((ulong*)sp)[0] = 0;
- memset(ureg, 0, sizeof *ureg);
- ureg->psr = PsrMusr;
- ureg->sp = sp;
- ureg->pc = (ulong) up->notify;
- up->notified = 1;
- up->nnote--;
- memmove(&up->lastnote, &up->note[0], sizeof(Note));
- memmove(&up->note[0], &up->note[1], up->nnote * sizeof(Note));
-
- qunlock(&up->debug);
- splx(s);
- return 1;
-}
-
-void
-noted(Ureg *ureg, ulong arg0)
-{
- Ureg *nureg;
- ulong oureg, sp;
-
- qlock(&up->debug);
- if(arg0 != NRSTR && !up->notified){
- qunlock(&up->debug);
- pprint("call to noted() when not notified\n");
- pexit("Suicide", 0);
- }
- up->notified = 0;
-
- nureg = up->ureg;
- oureg = (ulong) nureg;
- if(!okaddr(oureg - BY2WD, BY2WD + sizeof(Ureg), 0)){
- qunlock(&up->debug);
- pprint("bad ureg in noted or call to noted when not notified\n");
- pexit("Suicide", 0);
- }
- nureg->psr = nureg->psr & PsrOK | ureg->psr & ~PsrOK;
- memmove(ureg, nureg, sizeof(Ureg));
-
- if(!okaddr(nureg->pc, 1, 0) && !okaddr(nureg->sp, BY2WD, 0)
- && (arg0 == NCONT || arg0 == NRSTR || arg0 == NSAVE)){
- qunlock(&up->debug);
- pprint("suicide: trap in noted\n");
- pexit("Suicide", 0);
- }
- switch(arg0){
- case NCONT:
- case NRSTR:
- up->ureg = (Ureg *) (*(ulong *)(oureg - BY2WD));
- qunlock(&up->debug);
- break;
-
- case NSAVE:
- qunlock(&up->debug);
- sp = oureg - 4 * BY2WD - ERRMAX;
- splhi();
- ureg->sp = sp;
- ((ulong *) sp)[1] = oureg;
- ((ulong *) sp)[0] = 0;
- break;
-
- default:
- up->lastnote.flag = NDebug;
- /* fallthrough */
-
- case NDFLT:
- qunlock(&up->debug);
- if(up->lastnote.flag == NDebug)
- pprint("suicide: %s\n", up->lastnote.msg);
- pexit(up->lastnote.msg, up->lastnote.flag != NDebug);
- }
-}
-
-void
-trap(Ureg *ureg)
-{
- int user, intn, x;
- char buf[ERRMAX];
-
- user = (ureg->psr & PsrMask) == PsrMusr;
- if(user){
- fillureguser(ureg);
- up->dbgreg = ureg;
- cycles(&up->kentry);
- }
- switch(ureg->type){
- case 3:
- case 4:
- faultarm(ureg);
- break;
- case 6:
- x = intc[3];
- intn = x & 0x3FF;
- if(irqhandler[m->machno][intn] != nil)
- irqhandler[m->machno][intn](ureg, irqaux[m->machno][intn]);
- else
- print("unexpected interrupt %d\n", intn);
- intc[4] = x;
- if(intn != 29)
- preempted();
- splhi();
- if(up && up->delaysched && (intn == 29)){
- sched();
- splhi();
- }
- break;
- default:
- if(user){
- spllo();
- sprint("sys: trap: %s", trapname[ureg->type]);
- postnote(up, 1, buf, NDebug);
- }else{
- serialoq = nil;
- printureg(ureg);
- panic("%s", trapname[ureg->type]);
- }
- }
- if(user){
- if(up->procctl || up->nnote)
- notify(ureg);
- updatetos();
- up->dbgreg = nil;
- }
-}
-
-void
-syscall(Ureg *ureg)
-{
- int scall, ret;
- ulong s, sp;
- char *e;
- vlong startns, stopns;
-
- m->syscall++;
- up->insyscall = 1;
- up->pc = ureg->pc;
- up->dbgreg = ureg;
- cycles(&up->kentry);
- scall = ureg->r0;
- up->scallnr = scall;
- spllo();
-
- sp = ureg->sp;
- up->nerrlab = 0;
- ret = -1;
- if(!waserror()){
- validaddr(sp, sizeof(Sargs) + BY2WD, 0);
- up->s = *((Sargs*)(sp + BY2WD));
- if(up->procctl == Proc_tracesyscall){
- syscallfmt(scall, ureg->pc, (va_list)up->s.args);
- s = splhi();
- up->procctl = Proc_stopme;
- procctl();
- splx(s);
- startns = todget(nil);
- }
- if(scall >= nsyscall){
- postnote(up, 1, "sys: bad syscall", NDebug);
- error(Ebadarg);
- }
- up->psstate = sysctab[scall];
- ret = systab[scall]((va_list)up->s.args);
- poperror();
- }else{
- e = up->syserrstr;
- up->syserrstr = up->errstr;
- up->errstr = e;
- }
- if(up->nerrlab != 0)
- panic("error stack");
- ureg->r0 = ret;
-
- if(up->procctl == Proc_tracesyscall){
- stopns = todget(nil);
- sysretfmt(scall, (va_list)up->s.args, ret, startns, stopns);
- s = splhi();
- up->procctl = Proc_stopme;
- procctl();
- splx(s);
- }
-
- up->insyscall = 0;
- up->psstate = nil;
-
- if(scall == NOTED)
- noted(ureg, *((ulong*)up->s.args));
- if(scall != RFORK && (up->procctl || up->nnote)){
- splhi();
- notify(ureg);
- }
- splhi();
- if(up->delaysched){
- sched();
- splhi();
- }
- updatetos();
- up->dbgreg = nil;
-}
--- a/sys/src/9/omap4/uartomap.c
+++ /dev/null
@@ -1,263 +1,0 @@
-#include "u.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "io.h"
-
-extern ulong *uart;
-extern PhysUart omapphysuart;
-static Uart puart = {
- .phys = &omapphysuart,
- .bits = 8,
- .stop = 1,
- .baud = 115200,
- .parity = 'n',
-};
-
-static Uart *
-omappnp(void)
-{
- return &puart;
-}
-
-static void
-omapkick(Uart *u)
-{
- int x;
-
- x = splhi();
- while((uart[17] & 1) == 0){
- if(u->op >= u->oe)
- if(uartstageoutput(u) == 0){
- uart[1] &= ~(1<<1);
- break;
- }
- uart[0] = *u->op++;
- uart[1] |= (1<<1);
- }
- splx(x);
-}
-
-void
-omapinterrupt(Ureg *, void *)
-{
- ulong st;
-
- st = uart[2];
- if((st & 1) != 0)
- return;
- switch((st >> 1) & 0x1F){
- case 0:
- case 16:
- puart.cts = (uart[6] & (1<<4)) != 0;
- puart.dsr = (uart[6] & (1<<5)) != 0;
- puart.dcd = (uart[6] & (1<<7)) != 0;
- break;
- case 1:
- uartkick(&puart);
- break;
- case 2:
- case 6:
- while(uart[5] & 1)
- uartrecv(&puart, uart[0]);
- break;
- default:
- print("unknown UART interrupt %uld\n", (st>>1) & 0x1F);
- uartkick(&puart);
- }
-}
-
-static void
-omapenable(Uart *u, int ie)
-{
- while(uart[5] & (1<<6))
- ;
- if(ie){
- irqroute(74, omapinterrupt, u);
- uart[1] = (1<<0);
- }
-}
-
-static void
-omapdisable(Uart *)
-{
- uart[1] = 0;
-}
-
-static void
-omapdobreak(Uart *, int ms)
-{
- if(ms <= 0)
- ms = 200;
-
- uart[3] |= (1<<6);
- tsleep(&up->sleep, return0, 0, ms);
- uart[3] &= ~(1<<6);
-}
-
-static int
-omapbaud(Uart *u, int baud)
-{
- int val;
-
- if(baud <= 0)
- return -1;
-
- val = (48000000 / 16) / baud;
- uart[3] |= (1<<7);
- uart[0] = val & 0xFF;
- uart[1] = (val >> 8) & 0xFF;
- uart[3] &= ~(1<<7);
- u->baud = baud;
- return 0;
-}
-
-static int
-omapbits(Uart *u, int bits)
-{
- if(bits < 5 || bits > 8)
- return -1;
-
- uart[3] = (uart[3] & ~3) | (bits - 5);
- u->bits = bits;
- return 0;
-}
-
-static int
-omapstop(Uart *u, int stop)
-{
- if(stop < 1 || stop > 2)
- return -1;
-
- uart[3] &= ~4;
- if(stop == 2)
- uart[3] |= 4;
- u->stop = stop;
- return 0;
-}
-
-static int
-omapparity(Uart *u, int parity)
-{
- uart[3] &= ~0x38;
- switch(parity){
- case 'n':
- break;
- case 'o':
- uart[3] |= (1<<3);
- case 'e':
- uart[3] |= (1<<3) | (1<<4);
- break;
- default:
- return -1;
- }
- u->parity = parity;
- return 0;
-}
-
-static void
-omapmodemctl(Uart *u, int on)
-{
- if(on){
- u->modem = 1;
- u->cts = (uart[6] & (1<<4)) != 0;
- uart[1] |= (1<<6);
- }else{
- u->modem = 0;
- u->cts = 1;
- }
-}
-
-static void
-omaprts(Uart *, int i)
-{
- uart[4] = (uart[4] & ~2) | (i << 1);
-}
-
-static void
-omapdtr(Uart *, int i)
-{
- uart[4] = (uart[4] & ~1) | i;
-}
-
-static long
-omapstatus(Uart* u, void* buf, long n, long offset)
-{
- char *p;
- ulong msr;
-
- msr = uart[6];
- p = malloc(READSTR);
- snprint(p, READSTR,
- "b%d c%d d%d e%d l%d m%d p%c r%d s%d\n"
- "dev(%d) type(%d) framing(%d) overruns(%d) "
- "berr(%d) serr(%d)%s%s%s%s\n",
-
- u->baud,
- u->hup_dcd,
- u->dsr,
- u->hup_dsr,
- u->bits,
- u->modem,
- u->parity,
- (uart[3] & 2) != 0,
- u->stop,
-
- u->dev,
- u->type,
- u->ferr,
- u->oerr,
- u->berr,
- u->serr,
- (msr & (1<<4)) ? " cts": "",
- (msr & (1<<5)) ? " dsr": "",
- (msr & (1<<7)) ? " dcd": "",
- (msr & (1<<6)) ? " ri": ""
- );
- n = readstr(offset, buf, n, p);
- free(p);
-
- return n;
-}
-
-static int
-omapgetc(Uart *)
-{
- while((uart[5] & 1) == 0)
- ;
- return uart[0];
-}
-
-static void
-omapputc(Uart *, int c)
-{
- while(uart[17] & 1)
- ;
- uart[0] = c;
-}
-
-PhysUart omapphysuart = {
- .name = "omap4430 uart",
- .pnp = omappnp,
- .getc = omapgetc,
- .putc = omapputc,
- .enable = omapenable,
- .disable = omapdisable,
- .kick = omapkick,
- .rts = omaprts,
- .parity = omapparity,
- .baud = omapbaud,
- .bits = omapbits,
- .stop = omapstop,
- .modemctl = omapmodemctl,
- .dtr = omapdtr,
- .status = omapstatus,
-};
-
-void
-uartinit(void)
-{
- consuart = &puart;
- puart.console = 1;
-}