1*74a4d8c2SCharles.Forsyth /* 2*74a4d8c2SCharles.Forsyth * Memory and machine-specific definitions. Used in C and assembler. 3*74a4d8c2SCharles.Forsyth */ 4*74a4d8c2SCharles.Forsyth 5*74a4d8c2SCharles.Forsyth /* 6*74a4d8c2SCharles.Forsyth * Sizes 7*74a4d8c2SCharles.Forsyth */ 8*74a4d8c2SCharles.Forsyth 9*74a4d8c2SCharles.Forsyth #define BI2BY 8 /* bits per byte */ 10*74a4d8c2SCharles.Forsyth #define BI2WD 32 /* bits per word */ 11*74a4d8c2SCharles.Forsyth #define BY2WD 4 /* bytes per word */ 12*74a4d8c2SCharles.Forsyth #define BY2V 8 /* bytes per double word */ 13*74a4d8c2SCharles.Forsyth #define BY2PG 4096 /* bytes per page */ 14*74a4d8c2SCharles.Forsyth #define WD2PG (BY2PG/BY2WD) /* words per page */ 15*74a4d8c2SCharles.Forsyth #define PGSHIFT 12 /* log(BY2PG) */ 16*74a4d8c2SCharles.Forsyth #define ROUND(s, sz) (((s)+(sz-1))&~(sz-1)) 17*74a4d8c2SCharles.Forsyth #define PGROUND(s) ROUND(s, BY2PG) 18*74a4d8c2SCharles.Forsyth #define CACHELINELOG 4 19*74a4d8c2SCharles.Forsyth #define CACHELINESZ (1<<CACHELINELOG) 20*74a4d8c2SCharles.Forsyth 21*74a4d8c2SCharles.Forsyth #define MAXMACH 1 /* max # cpus system can run */ 22*74a4d8c2SCharles.Forsyth #define MACHSIZE BY2PG 23*74a4d8c2SCharles.Forsyth 24*74a4d8c2SCharles.Forsyth /* 25*74a4d8c2SCharles.Forsyth * Time 26*74a4d8c2SCharles.Forsyth */ 27*74a4d8c2SCharles.Forsyth #define HZ 100 /* clock frequency */ 28*74a4d8c2SCharles.Forsyth #define MS2HZ (1000/HZ) /* millisec per clock tick */ 29*74a4d8c2SCharles.Forsyth #define TK2SEC(t) ((t)/HZ) /* ticks to seconds */ 30*74a4d8c2SCharles.Forsyth #define MS2TK(t) ((t)/MS2HZ) /* milliseconds to ticks */ 31*74a4d8c2SCharles.Forsyth #define MHz 1000000 32*74a4d8c2SCharles.Forsyth 33*74a4d8c2SCharles.Forsyth /* 34*74a4d8c2SCharles.Forsyth * MSR bits 35*74a4d8c2SCharles.Forsyth */ 36*74a4d8c2SCharles.Forsyth 37*74a4d8c2SCharles.Forsyth #define POW 0x40000 /* enable power mgmt */ 38*74a4d8c2SCharles.Forsyth #define TGPR 0x20000 /* GPR0-3 remapped; 603/603e specific */ 39*74a4d8c2SCharles.Forsyth #define ILE 0x10000 /* interrupts little endian */ 40*74a4d8c2SCharles.Forsyth #define EE 0x08000 /* enable external/decrementer interrupts */ 41*74a4d8c2SCharles.Forsyth #define PR 0x04000 /* =1, user mode */ 42*74a4d8c2SCharles.Forsyth #define FPE 0x02000 /* enable floating point */ 43*74a4d8c2SCharles.Forsyth #define ME 0x01000 /* enable machine check exceptions */ 44*74a4d8c2SCharles.Forsyth #define FE0 0x00800 45*74a4d8c2SCharles.Forsyth #define SE 0x00400 /* single-step trace */ 46*74a4d8c2SCharles.Forsyth #define BE 0x00200 /* branch trace */ 47*74a4d8c2SCharles.Forsyth #define FE1 0x00100 48*74a4d8c2SCharles.Forsyth #define MSR_IP 0x00040 /* =0, vector to nnnnn; =1, vector to FFFnnnnn */ 49*74a4d8c2SCharles.Forsyth #define IR 0x00020 /* enable instruction address translation */ 50*74a4d8c2SCharles.Forsyth #define DR 0x00010 /* enable data address translation */ 51*74a4d8c2SCharles.Forsyth #define RI 0x00002 /* exception is recoverable */ 52*74a4d8c2SCharles.Forsyth #define LE 0x00001 /* little endian mode */ 53*74a4d8c2SCharles.Forsyth 54*74a4d8c2SCharles.Forsyth #define KMSR (ME|FE0|FE1|FPE) 55*74a4d8c2SCharles.Forsyth #define UMSR (KMSR|PR|EE|IR|DR) 56*74a4d8c2SCharles.Forsyth 57*74a4d8c2SCharles.Forsyth /* 58*74a4d8c2SCharles.Forsyth * Magic registers 59*74a4d8c2SCharles.Forsyth */ 60*74a4d8c2SCharles.Forsyth 61*74a4d8c2SCharles.Forsyth #define MACH 30 /* R30 is m-> */ 62*74a4d8c2SCharles.Forsyth #define USER 29 /* R29 is up-> */ 63*74a4d8c2SCharles.Forsyth #define IOMEMR 28 /* R28 will be iomem-> */ 64*74a4d8c2SCharles.Forsyth 65*74a4d8c2SCharles.Forsyth /* 66*74a4d8c2SCharles.Forsyth * Fundamental addresses 67*74a4d8c2SCharles.Forsyth */ 68*74a4d8c2SCharles.Forsyth 69*74a4d8c2SCharles.Forsyth #define UREGSIZE ((8+32)*4) 70*74a4d8c2SCharles.Forsyth 71*74a4d8c2SCharles.Forsyth /* 72*74a4d8c2SCharles.Forsyth * MMU 73*74a4d8c2SCharles.Forsyth */ 74*74a4d8c2SCharles.Forsyth 75*74a4d8c2SCharles.Forsyth /* L1 table entry and Mx_TWC flags */ 76*74a4d8c2SCharles.Forsyth #define PTEVALID (1<<0) 77*74a4d8c2SCharles.Forsyth #define PTEWT (1<<1) /* write through */ 78*74a4d8c2SCharles.Forsyth #define PTE4K (0<<2) 79*74a4d8c2SCharles.Forsyth #define PTE512K (1<<2) 80*74a4d8c2SCharles.Forsyth #define PTE8MB (3<<2) 81*74a4d8c2SCharles.Forsyth #define PTEG (1<<4) /* guarded */ 82*74a4d8c2SCharles.Forsyth 83*74a4d8c2SCharles.Forsyth /* L2 table entry and Mx_RPN flags (also PTEVALID) */ 84*74a4d8c2SCharles.Forsyth #define PTECI (1<<1) /* cache inhibit */ 85*74a4d8c2SCharles.Forsyth #define PTESH (1<<2) /* page is shared; ASID ignored */ 86*74a4d8c2SCharles.Forsyth #define PTELPS (1<<3) /* large page size */ 87*74a4d8c2SCharles.Forsyth #define PTEWRITE 0x9F0 88*74a4d8c2SCharles.Forsyth 89*74a4d8c2SCharles.Forsyth /* TLB and MxEPN flag */ 90*74a4d8c2SCharles.Forsyth #define TLBVALID (1<<9) 91*74a4d8c2SCharles.Forsyth 92*74a4d8c2SCharles.Forsyth /* 93*74a4d8c2SCharles.Forsyth * Address spaces 94*74a4d8c2SCharles.Forsyth */ 95*74a4d8c2SCharles.Forsyth 96*74a4d8c2SCharles.Forsyth #define KUSEG 0x00000000 97*74a4d8c2SCharles.Forsyth #define KSEG0 0x20000000 98*74a4d8c2SCharles.Forsyth #define KSEGM 0xE0000000 /* mask to check which seg */ 99*74a4d8c2SCharles.Forsyth 100*74a4d8c2SCharles.Forsyth #define KZERO KSEG0 /* base of kernel address space */ 101*74a4d8c2SCharles.Forsyth #define KTZERO (KZERO+0x3000) /* first address in kernel text */ 102*74a4d8c2SCharles.Forsyth #define KSTACK 8192 /* Size of kernel stack */ 103*74a4d8c2SCharles.Forsyth 104*74a4d8c2SCharles.Forsyth #define CONFADDR (KZERO|0x200000) /* where qboot leaves configuration info */ 105*74a4d8c2SCharles.Forsyth 106*74a4d8c2SCharles.Forsyth /* 107*74a4d8c2SCharles.Forsyth * Exception codes (trap vectors) 108*74a4d8c2SCharles.Forsyth */ 109*74a4d8c2SCharles.Forsyth #define CRESET 0x01 110*74a4d8c2SCharles.Forsyth #define CMCHECK 0x02 111*74a4d8c2SCharles.Forsyth #define CDSI 0x03 112*74a4d8c2SCharles.Forsyth #define CISI 0x04 113*74a4d8c2SCharles.Forsyth #define CEI 0x05 114*74a4d8c2SCharles.Forsyth #define CALIGN 0x06 115*74a4d8c2SCharles.Forsyth #define CPROG 0x07 116*74a4d8c2SCharles.Forsyth #define CFPU 0x08 117*74a4d8c2SCharles.Forsyth #define CDEC 0x09 118*74a4d8c2SCharles.Forsyth #define CSYSCALL 0x0C 119*74a4d8c2SCharles.Forsyth #define CTRACE 0x0D 120*74a4d8c2SCharles.Forsyth #define CFPA 0x0E 121*74a4d8c2SCharles.Forsyth /* rest are power-implementation dependent (8xx) */ 122*74a4d8c2SCharles.Forsyth #define CEMU 0x10 123*74a4d8c2SCharles.Forsyth #define CIMISS 0x11 124*74a4d8c2SCharles.Forsyth #define CDMISS 0x12 125*74a4d8c2SCharles.Forsyth #define CITLBE 0x13 126*74a4d8c2SCharles.Forsyth #define CDTLBE 0x14 127*74a4d8c2SCharles.Forsyth #define CDBREAK 0x1C 128*74a4d8c2SCharles.Forsyth #define CIBREAK 0x1D 129*74a4d8c2SCharles.Forsyth #define CPBREAK 0x1E 130*74a4d8c2SCharles.Forsyth #define CDPORT 0x1F 131*74a4d8c2SCharles.Forsyth 132*74a4d8c2SCharles.Forsyth /* 133*74a4d8c2SCharles.Forsyth * MPC8xx physical addresses 134*74a4d8c2SCharles.Forsyth */ 135*74a4d8c2SCharles.Forsyth 136*74a4d8c2SCharles.Forsyth /* those encouraged by mpc8bug */ 137*74a4d8c2SCharles.Forsyth #define PHYSDRAM 0x00000000 138*74a4d8c2SCharles.Forsyth #define PHYSBCSR 0x02100000 139*74a4d8c2SCharles.Forsyth #define PHYSIMM 0x02200000 140*74a4d8c2SCharles.Forsyth #define PHYSFLASH 0x02800000 141*74a4d8c2SCharles.Forsyth 142*74a4d8c2SCharles.Forsyth /* remaining ones are our choice */ 143*74a4d8c2SCharles.Forsyth #define PHYSSDRAM 0x03000000 144*74a4d8c2SCharles.Forsyth #define PHYSPCMCIA 0x04000000 145*74a4d8c2SCharles.Forsyth #define PCMCIALEN (8*MB) /* chosen to allow mapping by single TLB entry */ 146*74a4d8c2SCharles.Forsyth #define ISAIO (KZERO|PHYSPCMCIA) /* for inb.s */ 147*74a4d8c2SCharles.Forsyth 148*74a4d8c2SCharles.Forsyth /* 149*74a4d8c2SCharles.Forsyth * MPC8xx dual-ported CPM memory physical addresses 150*74a4d8c2SCharles.Forsyth */ 151*74a4d8c2SCharles.Forsyth #define PHYSDPRAM (PHYSIMM+0x2000) 152*74a4d8c2SCharles.Forsyth #define DPLEN1 0x200 153*74a4d8c2SCharles.Forsyth #define DPLEN2 0x400 154*74a4d8c2SCharles.Forsyth #define DPLEN3 0x800 155*74a4d8c2SCharles.Forsyth #define DPBASE (PHYSDPRAM+DPLEN1) 156*74a4d8c2SCharles.Forsyth 157*74a4d8c2SCharles.Forsyth #define KEEP_ALIVE_KEY 0x55ccaa33 /* clock and rtc register key */ 158