1458db832SDavid du Colombier /* 2458db832SDavid du Colombier * Memory and machine-specific definitions. Used in C and assembler. 3458db832SDavid du Colombier */ 4458db832SDavid du Colombier 5458db832SDavid du Colombier #ifdef ucuconf 6458db832SDavid du Colombier #include "ucu.h" 7fe853e23SDavid du Colombier #else 8458db832SDavid du Colombier #include "blast.h" 9458db832SDavid du Colombier #endif 10458db832SDavid du Colombier 11458db832SDavid du Colombier /* 12458db832SDavid du Colombier * Sizes 13458db832SDavid du Colombier */ 14458db832SDavid du Colombier 15458db832SDavid du Colombier #define BI2BY 8 /* bits per byte */ 16458db832SDavid du Colombier #define BI2WD 32 /* bits per word */ 17458db832SDavid du Colombier #define BY2WD 4 /* bytes per word */ 18458db832SDavid du Colombier #define BY2V 8 /* bytes per vlong */ 19458db832SDavid du Colombier #define BY2PG 4096 /* bytes per page */ 20458db832SDavid du Colombier #define WD2PG (BY2PG/BY2WD) /* words per page */ 21458db832SDavid du Colombier #define PGSHIFT 12 /* log(BY2PG) */ 22458db832SDavid du Colombier #define CACHELINELOG 5 23458db832SDavid du Colombier #define CACHELINESZ (1<<CACHELINELOG) 24458db832SDavid du Colombier #define BLOCKALIGN CACHELINESZ 25458db832SDavid du Colombier 26458db832SDavid du Colombier #define MHz 1000000 27458db832SDavid du Colombier 28458db832SDavid du Colombier #define BY2PTE 8 /* bytes per pte entry */ 29458db832SDavid du Colombier #define BY2PTEG 64 /* bytes per pte group */ 30458db832SDavid du Colombier 31458db832SDavid du Colombier #define MAXMACH 1 /* max # cpus system can run */ 32458db832SDavid du Colombier #define MACHSIZE BY2PG 33458db832SDavid du Colombier #define KSTACK 4096 /* Size of kernel stack */ 34458db832SDavid du Colombier 35458db832SDavid du Colombier /* 36458db832SDavid du Colombier * Time 37458db832SDavid du Colombier */ 38fe853e23SDavid du Colombier #define HZ 1000 /* clock frequency */ 39458db832SDavid du Colombier #define TK2SEC(t) ((t)/HZ) /* ticks to seconds */ 40458db832SDavid du Colombier 41458db832SDavid du Colombier /* 42458db832SDavid du Colombier * Standard PPC Special Purpose Registers (OEA and VEA) 43458db832SDavid du Colombier */ 44458db832SDavid du Colombier #define DSISR 18 45458db832SDavid du Colombier #define DAR 19 /* Data Address Register */ 46458db832SDavid du Colombier #define DEC 22 /* Decrementer */ 47458db832SDavid du Colombier #define SDR1 25 48458db832SDavid du Colombier #define SRR0 26 /* Saved Registers (exception) */ 49458db832SDavid du Colombier #define SRR1 27 50fe853e23SDavid du Colombier #define TBRL 268 51fe853e23SDavid du Colombier #define TBRU 269 /* Time base Upper/Lower (Reading) */ 52458db832SDavid du Colombier #define SPRG0 272 /* Supervisor Private Registers */ 53458db832SDavid du Colombier #define SPRG1 273 54458db832SDavid du Colombier #define SPRG2 274 55458db832SDavid du Colombier #define SPRG3 275 56458db832SDavid du Colombier #define SPRG4 276 57458db832SDavid du Colombier #define SPRG5 277 58458db832SDavid du Colombier #define SPRG6 278 59458db832SDavid du Colombier #define SPRG7 279 60458db832SDavid du Colombier #define ASR 280 /* Address Space Register */ 61458db832SDavid du Colombier #define EAR 282 /* External Access Register (optional) */ 62458db832SDavid du Colombier #define TBWU 284 /* Time base Upper/Lower (Writing) */ 63458db832SDavid du Colombier #define TBWL 285 64458db832SDavid du Colombier #define PVR 287 /* Processor Version */ 65458db832SDavid du Colombier #define IABR 1010 /* Instruction Address Breakpoint Register (optional) */ 66458db832SDavid du Colombier #define DABR 1013 /* Data Address Breakpoint Register (optional) */ 67458db832SDavid du Colombier #define FPECR 1022 /* Floating-Point Exception Cause Register (optional) */ 68458db832SDavid du Colombier #define PIR 1023 /* Processor Identification Register (optional) */ 69458db832SDavid du Colombier 70458db832SDavid du Colombier #define IBATU(i) (528+2*(i)) /* Instruction BAT register (upper) */ 71458db832SDavid du Colombier #define IBATL(i) (529+2*(i)) /* Instruction BAT register (lower) */ 72458db832SDavid du Colombier #define DBATU(i) (536+2*(i)) /* Data BAT register (upper) */ 73458db832SDavid du Colombier #define DBATL(i) (537+2*(i)) /* Data BAT register (lower) */ 74458db832SDavid du Colombier 75458db832SDavid du Colombier /* 76458db832SDavid du Colombier * PPC604e-specific Special Purpose Registers (OEA) 77458db832SDavid du Colombier */ 78458db832SDavid du Colombier #define MMCR0 952 /* Monitor Control Register 0 */ 79458db832SDavid du Colombier #define PMC1 953 /* Performance Monitor Counter 1 */ 80458db832SDavid du Colombier #define PMC2 954 /* Performance Monitor Counter 2 */ 81458db832SDavid du Colombier #define SIA 955 /* Sampled Instruction Address */ 82458db832SDavid du Colombier #define MMCR1 956 /* Monitor Control Register 0 */ 83458db832SDavid du Colombier #define PMC3 957 /* Performance Monitor Counter 3 */ 84458db832SDavid du Colombier #define PMC4 958 /* Performance Monitor Counter 4 */ 85458db832SDavid du Colombier #define SDA 959 /* Sampled Data Address */ 86458db832SDavid du Colombier /* 87458db832SDavid du Colombier * PPC603e-specific Special Purpose Registers 88458db832SDavid du Colombier */ 89458db832SDavid du Colombier #define DMISS 976 /* Data Miss Address Register */ 90458db832SDavid du Colombier #define DCMP 977 /* Data Miss Address Register */ 91458db832SDavid du Colombier #define HASH1 978 92458db832SDavid du Colombier #define HASH2 979 93458db832SDavid du Colombier #define IMISS 980 /* Instruction Miss Address Register */ 94458db832SDavid du Colombier #define iCMP 981 /* Instruction Miss Address Register */ 95458db832SDavid du Colombier #define RPA 982 96458db832SDavid du Colombier #define HID0 1008 /* Hardware Implementation Dependent Register 0 */ 97458db832SDavid du Colombier #define HID1 1009 /* Hardware Implementation Dependent Register 1 */ 98458db832SDavid du Colombier /* 99458db832SDavid du Colombier * PowerQUICC II (MPC 8260) Special Purpose Registers 100458db832SDavid du Colombier */ 101458db832SDavid du Colombier #define HID2 1011 /* Hardware Implementation Dependent Register 2 */ 102458db832SDavid du Colombier 103458db832SDavid du Colombier #define BIT(i) (1<<(31-(i))) /* Silly backwards register bit numbering scheme */ 104458db832SDavid du Colombier #define SBIT(n) ((ushort)1<<(15-(n))) 105458db832SDavid du Colombier #define RBIT(b,n) (1<<(8*sizeof(n)-1-(b))) 106458db832SDavid du Colombier 107458db832SDavid du Colombier /* 108458db832SDavid du Colombier * Bit encodings for Machine State Register (MSR) 109458db832SDavid du Colombier */ 110458db832SDavid du Colombier #define MSR_POW BIT(13) /* Enable Power Management */ 111458db832SDavid du Colombier #define MSR_TGPR BIT(14) /* Temporary GPR Registers in use (603e) */ 112458db832SDavid du Colombier #define MSR_ILE BIT(15) /* Interrupt Little-Endian enable */ 113458db832SDavid du Colombier #define MSR_EE BIT(16) /* External Interrupt enable */ 114458db832SDavid du Colombier #define MSR_PR BIT(17) /* Supervisor/User privilege */ 115458db832SDavid du Colombier #define MSR_FP BIT(18) /* Floating Point enable */ 116458db832SDavid du Colombier #define MSR_ME BIT(19) /* Machine Check enable */ 117458db832SDavid du Colombier #define MSR_FE0 BIT(20) /* Floating Exception mode 0 */ 118458db832SDavid du Colombier #define MSR_SE BIT(21) /* Single Step (optional) */ 119458db832SDavid du Colombier #define MSR_BE BIT(22) /* Branch Trace (optional) */ 120458db832SDavid du Colombier #define MSR_FE1 BIT(23) /* Floating Exception mode 1 */ 121458db832SDavid du Colombier #define MSR_IP BIT(25) /* Exception prefix 0x000/0xFFF */ 122458db832SDavid du Colombier #define MSR_IR BIT(26) /* Instruction MMU enable */ 123458db832SDavid du Colombier #define MSR_DR BIT(27) /* Data MMU enable */ 124458db832SDavid du Colombier #define MSR_PM BIT(29) /* Performance Monitor marked mode (604e specific) */ 125458db832SDavid du Colombier #define MSR_RI BIT(30) /* Recoverable Exception */ 126458db832SDavid du Colombier #define MSR_LE BIT(31) /* Little-Endian enable */ 127458db832SDavid du Colombier /* SRR1 bits for TLB operations */ 128458db832SDavid du Colombier #define MSR_SR0 0xf0000000 /* Saved bits from CR register */ 129458db832SDavid du Colombier #define MSR_KEY BIT(12) /* Copy of Ks or Kp bit */ 130458db832SDavid du Colombier #define MSR_IMISS BIT(13) /* It was an I miss */ 131458db832SDavid du Colombier #define MSR_WAY BIT(14) /* TLB set to be replaced */ 132458db832SDavid du Colombier #define MSR_STORE BIT(15) /* Miss caused by a store */ 133458db832SDavid du Colombier 134458db832SDavid du Colombier /* 135458db832SDavid du Colombier * Exception codes (trap vectors) 136458db832SDavid du Colombier */ 137458db832SDavid du Colombier #define CRESET 0x01 138458db832SDavid du Colombier #define CMCHECK 0x02 139458db832SDavid du Colombier #define CDSI 0x03 140458db832SDavid du Colombier #define CISI 0x04 141458db832SDavid du Colombier #define CEI 0x05 142458db832SDavid du Colombier #define CALIGN 0x06 143458db832SDavid du Colombier #define CPROG 0x07 144458db832SDavid du Colombier #define CFPU 0x08 145458db832SDavid du Colombier #define CDEC 0x09 146458db832SDavid du Colombier #define CSYSCALL 0x0C 147458db832SDavid du Colombier #define CTRACE 0x0D /* optional */ 148458db832SDavid du Colombier #define CFPA 0x0E /* not implemented in 603e */ 149458db832SDavid du Colombier 150458db832SDavid du Colombier /* PPC603e-specific: */ 151458db832SDavid du Colombier #define CIMISS 0x10 /* Instruction TLB miss */ 152458db832SDavid du Colombier #define CLMISS 0x11 /* Data load TLB miss */ 153458db832SDavid du Colombier #define CSMISS 0x12 /* Data store TLB miss */ 154458db832SDavid du Colombier #define CIBREAK 0x13 155458db832SDavid du Colombier #define CSMI 0x14 156458db832SDavid du Colombier 157458db832SDavid du Colombier /* 158458db832SDavid du Colombier * Magic registers 159458db832SDavid du Colombier */ 160458db832SDavid du Colombier 161458db832SDavid du Colombier #define MACH 30 /* R30 is m-> */ 162458db832SDavid du Colombier #define USER 29 /* R29 is up-> */ 163458db832SDavid du Colombier 164458db832SDavid du Colombier 165458db832SDavid du Colombier /* 166458db832SDavid du Colombier * virtual MMU 167458db832SDavid du Colombier */ 168458db832SDavid du Colombier #define PTEMAPMEM (1024*1024) 169458db832SDavid du Colombier #define PTEPERTAB (PTEMAPMEM/BY2PG) 170458db832SDavid du Colombier #define SEGMAPSIZE 1984 171458db832SDavid du Colombier #define SSEGMAPSIZE 16 172458db832SDavid du Colombier #define PPN(x) ((x)&~(BY2PG-1)) 173458db832SDavid du Colombier 174458db832SDavid du Colombier /* 175458db832SDavid du Colombier * First pte word 176458db832SDavid du Colombier */ 177458db832SDavid du Colombier #define PTE0(v, vsid, h, va) (((v)<<31)|((vsid)<<7)|((h)<<6)|(((va)>>22)&0x3f)) 178458db832SDavid du Colombier 179458db832SDavid du Colombier /* 180458db832SDavid du Colombier * Second pte word; WIMG & PP(RW/RO) common to page table and BATs 181458db832SDavid du Colombier */ 182458db832SDavid du Colombier #define PTE1_R BIT(23) 183458db832SDavid du Colombier #define PTE1_C BIT(24) 184458db832SDavid du Colombier 185458db832SDavid du Colombier #define PTE1_W BIT(25) 186458db832SDavid du Colombier #define PTE1_I BIT(26) 187458db832SDavid du Colombier #define PTE1_M BIT(27) 188458db832SDavid du Colombier #define PTE1_G BIT(28) 189458db832SDavid du Colombier 190458db832SDavid du Colombier #define PTE1_RW BIT(30) 191458db832SDavid du Colombier #define PTE1_RO BIT(31) 192458db832SDavid du Colombier 193458db832SDavid du Colombier /* HID0 register bits */ 194458db832SDavid du Colombier #define HID_ICE BIT(16) 195458db832SDavid du Colombier #define HID_DCE BIT(17) 196458db832SDavid du Colombier #define HID_ILOCK BIT(18) 197458db832SDavid du Colombier #define HID_DLOCK BIT(19) 198458db832SDavid du Colombier #define HID_ICFI BIT(20) 199458db832SDavid du Colombier #define HID_DCFI BIT(21) 200458db832SDavid du Colombier #define HID_IFEM BIT(24) 201458db832SDavid du Colombier 202458db832SDavid du Colombier /* 203458db832SDavid du Colombier * Address spaces 204458db832SDavid du Colombier */ 205458db832SDavid du Colombier 206458db832SDavid du Colombier #define KZERO 0x80000000 /* base of kernel address space */ 207458db832SDavid du Colombier #define KTZERO 0x80100000 /* first address in kernel text */ 208458db832SDavid du Colombier #define UZERO 0 /* base of user address space */ 209458db832SDavid du Colombier #define UTZERO (UZERO+BY2PG) /* first address in user text */ 210*12009bffSDavid du Colombier #define UTROUND(t) ROUNDUP((t), 0x100000) 211458db832SDavid du Colombier #define USTKTOP (TSTKTOP-TSTKSIZ*BY2PG) /* byte just beyond user stack */ 212458db832SDavid du Colombier #define TSTKTOP KZERO /* top of temporary stack */ 213458db832SDavid du Colombier #define TSTKSIZ 100 214458db832SDavid du Colombier #define USTKSIZE (4*1024*1024) /* size of user stack */ 215458db832SDavid du Colombier #define UREGSIZE ((8+40)*4) 216458db832SDavid du Colombier #define MACHADDR (KTZERO-MAXMACH*MACHSIZE) 217458db832SDavid du Colombier #define MACHPADDR (MACHADDR&~KZERO) 218458db832SDavid du Colombier #define MACHP(n) ((Mach *)(MACHADDR+(n)*MACHSIZE)) 219458db832SDavid du Colombier 220458db832SDavid du Colombier #define isphys(x) (((ulong)x&KZERO)!=0) 221458db832SDavid du Colombier 222458db832SDavid du Colombier /* 223458db832SDavid du Colombier * MPC8xx addresses 224458db832SDavid du Colombier */ 225458db832SDavid du Colombier #define INTMEM 0xf0000000 226458db832SDavid du Colombier #define IOMEM (INTMEM+0x10000) 227458db832SDavid du Colombier 228458db832SDavid du Colombier #define getpgcolor(a) 0 229