1*529c1f20SDavid du Colombier /* 2*529c1f20SDavid du Colombier * Memory and machine-specific definitions. Used in C and assembler. 3*529c1f20SDavid du Colombier */ 4*529c1f20SDavid du Colombier 5*529c1f20SDavid du Colombier /* 6*529c1f20SDavid du Colombier * Sizes 7*529c1f20SDavid du Colombier */ 8*529c1f20SDavid du Colombier #define BI2BY 8 /* bits per byte */ 9*529c1f20SDavid du Colombier #define BI2WD 32 /* bits per word */ 10*529c1f20SDavid du Colombier #define BY2WD 4 /* bytes per word */ 11*529c1f20SDavid du Colombier #define BY2V 8 /* bytes per double word */ 12*529c1f20SDavid du Colombier #define BY2PG 4096 /* bytes per page */ 13*529c1f20SDavid du Colombier #define WD2PG (BY2PG/BY2WD) /* words per page */ 14*529c1f20SDavid du Colombier #define PGSHIFT 12 /* log(BY2PG) */ 15*529c1f20SDavid du Colombier #define ROUND(s, sz) (((s)+(sz-1))&~(sz-1)) 16*529c1f20SDavid du Colombier #define PGROUND(s) ROUND(s, BY2PG) 17*529c1f20SDavid du Colombier #define BLOCKALIGN 8 18*529c1f20SDavid du Colombier 19*529c1f20SDavid du Colombier #define MAXMACH 1 /* max # cpus system can run */ 20*529c1f20SDavid du Colombier 21*529c1f20SDavid du Colombier /* 22*529c1f20SDavid du Colombier * Time 23*529c1f20SDavid du Colombier */ 24*529c1f20SDavid du Colombier #define HZ (20) /* clock frequency */ 25*529c1f20SDavid du Colombier #define MS2HZ (1000/HZ) /* millisec per clock tick */ 26*529c1f20SDavid du Colombier #define TK2SEC(t) ((t)/HZ) /* ticks to seconds */ 27*529c1f20SDavid du Colombier #define TK2MS(t) ((((ulong)(t))*1000)/HZ) /* ticks to milliseconds */ 28*529c1f20SDavid du Colombier #define MS2TK(t) ((((ulong)(t))*HZ)/1000) /* milliseconds to ticks */ 29*529c1f20SDavid du Colombier 30*529c1f20SDavid du Colombier /* 31*529c1f20SDavid du Colombier * Virtual addresses: 32*529c1f20SDavid du Colombier * 33*529c1f20SDavid du Colombier * We direct map all discovered DRAM and the area twixt 0xe0000000 and 34*529c1f20SDavid du Colombier * 0xe8000000 used to provide zeros for cache flushing. 35*529c1f20SDavid du Colombier * 36*529c1f20SDavid du Colombier * Flash is mapped to 0xb0000000 and special registers are mapped 37*529c1f20SDavid du Colombier * on demand to areas starting at 0xa0000000. 38*529c1f20SDavid du Colombier * 39*529c1f20SDavid du Colombier * The direct mapping is convenient but not necessary. It means 40*529c1f20SDavid du Colombier * that we don't have to turn on the MMU till well into the 41*529c1f20SDavid du Colombier * kernel. This can be changed by providing a mapping in l.s 42*529c1f20SDavid du Colombier * before calling main. 43*529c1f20SDavid du Colombier */ 44*529c1f20SDavid du Colombier #define UZERO 0 /* base of user address space */ 45*529c1f20SDavid du Colombier #define UTZERO (UZERO+BY2PG) /* first address in user text */ 46*529c1f20SDavid du Colombier #define KZERO 0xC0000000 /* base of kernel address space */ 47*529c1f20SDavid du Colombier #define KTZERO 0xC0008000 /* first address in kernel text */ 48*529c1f20SDavid du Colombier #define EMEMZERO 0x90000000 /* 256 meg for add on memory */ 49*529c1f20SDavid du Colombier #define EMEMTOP 0xA0000000 /* ... */ 50*529c1f20SDavid du Colombier #define REGZERO 0xA0000000 /* 128 meg for mapspecial regs */ 51*529c1f20SDavid du Colombier #define REGTOP 0xA8000000 /* ... */ 52*529c1f20SDavid du Colombier #define FLASHZERO 0xB0000000 /* 128 meg for flash */ 53*529c1f20SDavid du Colombier #define FLASHTOP 0xB8000000 /* ... */ 54*529c1f20SDavid du Colombier #define DRAMZERO 0xC0000000 /* 128 meg for dram */ 55*529c1f20SDavid du Colombier #define DRAMTOP 0xC8000000 /* ... */ 56*529c1f20SDavid du Colombier #define UCDRAMZERO 0xC8000000 /* 128 meg for dram (uncached/unbuffered) */ 57*529c1f20SDavid du Colombier #define UCDRAMTOP 0xD0000000 /* ... */ 58*529c1f20SDavid du Colombier #define NULLZERO 0xE0000000 /* 128 meg for cache flush zeroes */ 59*529c1f20SDavid du Colombier #define NULLTOP 0xE8000000 /* ... */ 60*529c1f20SDavid du Colombier #define USTKTOP 0x2000000 /* byte just beyond user stack */ 61*529c1f20SDavid du Colombier #define USTKSIZE (8*1024*1024) /* size of user stack */ 62*529c1f20SDavid du Colombier #define TSTKTOP (USTKTOP-USTKSIZE) /* end of new stack in sysexec */ 63*529c1f20SDavid du Colombier #define TSTKSIZ 100 64*529c1f20SDavid du Colombier #define MACHADDR (KZERO+0x00001000) 65*529c1f20SDavid du Colombier #define EVECTORS 0xFFFF0000 /* virt base of exception vectors */ 66*529c1f20SDavid du Colombier 67*529c1f20SDavid du Colombier #define KSTACK (16*1024) /* Size of kernel stack */ 68*529c1f20SDavid du Colombier 69*529c1f20SDavid du Colombier /* 70*529c1f20SDavid du Colombier * Offsets into flash 71*529c1f20SDavid du Colombier */ 72*529c1f20SDavid du Colombier #define Flash_bootldr (FLASHZERO+0x0) /* boot loader */ 73*529c1f20SDavid du Colombier #define Flash_kernel (FLASHZERO+0x10000) /* boot kernel */ 74*529c1f20SDavid du Colombier #define Flash_tar (FLASHZERO+0x100000) /* tar file containing fs.sac */ 75*529c1f20SDavid du Colombier 76*529c1f20SDavid du Colombier /* 77*529c1f20SDavid du Colombier * virtual MMU 78*529c1f20SDavid du Colombier */ 79*529c1f20SDavid du Colombier #define PTEMAPMEM (1024*1024) 80*529c1f20SDavid du Colombier #define PTEPERTAB (PTEMAPMEM/BY2PG) 81*529c1f20SDavid du Colombier #define SEGMAPSIZE 1984 82*529c1f20SDavid du Colombier #define SSEGMAPSIZE 16 83*529c1f20SDavid du Colombier #define PPN(x) ((x)&~(BY2PG-1)) 84*529c1f20SDavid du Colombier 85*529c1f20SDavid du Colombier /* 86*529c1f20SDavid du Colombier * SA1110 definitions 87*529c1f20SDavid du Colombier */ 88*529c1f20SDavid du Colombier 89*529c1f20SDavid du Colombier /* 90*529c1f20SDavid du Colombier * memory physical addresses 91*529c1f20SDavid du Colombier */ 92*529c1f20SDavid du Colombier #define PHYSFLASH0 0x00000000 93*529c1f20SDavid du Colombier #define PHYSDRAM0 0xC0000000 94*529c1f20SDavid du Colombier #define PHYSNULL0 0xE0000000 95*529c1f20SDavid du Colombier 96*529c1f20SDavid du Colombier /* 97*529c1f20SDavid du Colombier * peripheral control module physical addresses 98*529c1f20SDavid du Colombier */ 99*529c1f20SDavid du Colombier #define USBREGS 0x80000000 /* serial port 0 - USB */ 100*529c1f20SDavid du Colombier #define UART1REGS 0x80010000 /* serial port 1 - UART */ 101*529c1f20SDavid du Colombier #define GPCLKREGS 0x80020060 /* serial port 1 - general purpose clock */ 102*529c1f20SDavid du Colombier #define UART2REGS 0x80030000 /* serial port 2 - low speed IR */ 103*529c1f20SDavid du Colombier #define HSSPREGS 0x80040060 /* serial port 2 - high speed IR */ 104*529c1f20SDavid du Colombier #define UART3REGS 0x80050000 /* serial port 3 - RS232 UART */ 105*529c1f20SDavid du Colombier #define MCPREGS 0x80060000 /* serial port 4 - multimedia comm port */ 106*529c1f20SDavid du Colombier #define SSPREGS 0x80070060 /* serial port 4 - synchronous serial port */ 107*529c1f20SDavid du Colombier #define OSTIMERREGS 0x90000000 /* operating system timer registers */ 108*529c1f20SDavid du Colombier #define POWERREGS 0x90020000 /* power management */ 109*529c1f20SDavid du Colombier #define GPIOREGS 0x90040000 /* 28 general purpose IO pins */ 110*529c1f20SDavid du Colombier #define INTRREGS 0x90050000 /* interrupt registers */ 111*529c1f20SDavid du Colombier #define PPCREGS 0x90060000 /* peripheral pin controller */ 112*529c1f20SDavid du Colombier #define MEMCONFREGS 0xA0000000 /* memory configuration */ 113*529c1f20SDavid du Colombier #define LCDREGS 0xB0100000 /* display */ 114*529c1f20SDavid du Colombier 115*529c1f20SDavid du Colombier /* 116*529c1f20SDavid du Colombier * PCMCIA addresses 117*529c1f20SDavid du Colombier */ 118*529c1f20SDavid du Colombier #define PHYSPCM0REGS 0x20000000 119*529c1f20SDavid du Colombier #define PYHSPCM0ATTR 0x28000000 120*529c1f20SDavid du Colombier #define PYHSPCM0MEM 0x2C000000 121*529c1f20SDavid du Colombier #define PHYSPCM1REGS 0x30000000 122*529c1f20SDavid du Colombier #define PYHSPCM1ATTR 0x38000000 123*529c1f20SDavid du Colombier #define PYHSPCM1MEM 0x3C000000 124*529c1f20SDavid du Colombier 125*529c1f20SDavid du Colombier /* 126*529c1f20SDavid du Colombier * Program Status Registers 127*529c1f20SDavid du Colombier */ 128*529c1f20SDavid du Colombier #define PsrMusr 0x00000010 /* mode */ 129*529c1f20SDavid du Colombier #define PsrMfiq 0x00000011 130*529c1f20SDavid du Colombier #define PsrMirq 0x00000012 131*529c1f20SDavid du Colombier #define PsrMsvc 0x00000013 132*529c1f20SDavid du Colombier #define PsrMabt 0x00000017 133*529c1f20SDavid du Colombier #define PsrMund 0x0000001B 134*529c1f20SDavid du Colombier #define PsrMask 0x0000001F 135*529c1f20SDavid du Colombier 136*529c1f20SDavid du Colombier #define PsrDfiq 0x00000040 /* disable FIQ interrupts */ 137*529c1f20SDavid du Colombier #define PsrDirq 0x00000080 /* disable IRQ interrupts */ 138*529c1f20SDavid du Colombier 139*529c1f20SDavid du Colombier #define PsrV 0x10000000 /* overflow */ 140*529c1f20SDavid du Colombier #define PsrC 0x20000000 /* carry/borrow/extend */ 141*529c1f20SDavid du Colombier #define PsrZ 0x40000000 /* zero */ 142*529c1f20SDavid du Colombier #define PsrN 0x80000000 /* negative/less than */ 143*529c1f20SDavid du Colombier 144*529c1f20SDavid du Colombier /* 145*529c1f20SDavid du Colombier * Coprocessors 146*529c1f20SDavid du Colombier */ 147*529c1f20SDavid du Colombier #define CpMMU 15 148*529c1f20SDavid du Colombier #define CpPWR 15 149*529c1f20SDavid du Colombier 150*529c1f20SDavid du Colombier /* 151*529c1f20SDavid du Colombier * Internal MMU coprocessor registers 152*529c1f20SDavid du Colombier */ 153*529c1f20SDavid du Colombier #define CpCPUID 0 /* R: */ 154*529c1f20SDavid du Colombier #define CpControl 1 /* R: */ 155*529c1f20SDavid du Colombier #define CpTTB 2 /* RW: translation table base */ 156*529c1f20SDavid du Colombier #define CpDAC 3 /* RW: domain access control */ 157*529c1f20SDavid du Colombier #define CpFSR 5 /* RW: fault status */ 158*529c1f20SDavid du Colombier #define CpFAR 6 /* RW: fault address */ 159*529c1f20SDavid du Colombier #define CpCacheFlush 7 /* W: cache flushing, wb draining*/ 160*529c1f20SDavid du Colombier #define CpTLBFlush 8 /* W: TLB flushing */ 161*529c1f20SDavid du Colombier #define CpRBFlush 9 /* W: Read Buffer ops */ 162*529c1f20SDavid du Colombier #define CpPID 13 /* RW: PID for virtual mapping */ 163*529c1f20SDavid du Colombier #define CpBpt 14 /* W: Breakpoint register */ 164*529c1f20SDavid du Colombier #define CpTest 15 /* W: Test, Clock and Idle Control */ 165*529c1f20SDavid du Colombier 166*529c1f20SDavid du Colombier /* 167*529c1f20SDavid du Colombier * CpControl 168*529c1f20SDavid du Colombier */ 169*529c1f20SDavid du Colombier #define CpCmmuena 0x00000001 /* M: MMU enable */ 170*529c1f20SDavid du Colombier #define CpCalign 0x00000002 /* A: alignment fault enable */ 171*529c1f20SDavid du Colombier #define CpCdcache 0x00000004 /* C: data cache on */ 172*529c1f20SDavid du Colombier #define CpCwb 0x00000008 /* W: write buffer turned on */ 173*529c1f20SDavid du Colombier #define CpCi32 0x00000010 /* P: 32-bit program space */ 174*529c1f20SDavid du Colombier #define CpCd32 0x00000020 /* D: 32-bit data space */ 175*529c1f20SDavid du Colombier #define CpCbe 0x00000080 /* B: big-endian operation */ 176*529c1f20SDavid du Colombier #define CpCsystem 0x00000100 /* S: system permission */ 177*529c1f20SDavid du Colombier #define CpCrom 0x00000200 /* R: ROM permission */ 178*529c1f20SDavid du Colombier #define CpCicache 0x00001000 /* I: instruction cache on */ 179*529c1f20SDavid du Colombier #define CpCvivec 0x00002000 /* X: virtual interrupt vector adjust */ 180*529c1f20SDavid du Colombier 181*529c1f20SDavid du Colombier /* 182*529c1f20SDavid du Colombier * fault codes 183*529c1f20SDavid du Colombier */ 184*529c1f20SDavid du Colombier #define FCterm 0x2 /* terminal */ 185*529c1f20SDavid du Colombier #define FCvec 0x0 /* vector */ 186*529c1f20SDavid du Colombier #define FCalignf 0x1 /* unaligned full word data access */ 187*529c1f20SDavid du Colombier #define FCalignh 0x3 /* unaligned half word data access */ 188*529c1f20SDavid du Colombier #define FCl1abort 0xc /* level 1 external abort on translation */ 189*529c1f20SDavid du Colombier #define FCl2abort 0xe /* level 2 external abort on translation */ 190*529c1f20SDavid du Colombier #define FCtransSec 0x5 /* section translation */ 191*529c1f20SDavid du Colombier #define FCtransPage 0x7 /* page translation */ 192*529c1f20SDavid du Colombier #define FCdomainSec 0x9 /* section domain */ 193*529c1f20SDavid du Colombier #define FCdomainPage 0x11 /* page domain */ 194*529c1f20SDavid du Colombier #define FCpermSec 0x9 /* section permissions */ 195*529c1f20SDavid du Colombier #define FCpermPage 0x11 /* page permissions */ 196*529c1f20SDavid du Colombier #define FCabortLFSec 0x4 /* external abort on linefetch for section */ 197*529c1f20SDavid du Colombier #define FCabortLFPage 0x6 /* external abort on linefetch for page */ 198*529c1f20SDavid du Colombier #define FCabortNLFSec 0x8 /* external abort on non-linefetch for section */ 199*529c1f20SDavid du Colombier #define FCabortNLFPage 0xa /* external abort on non-linefetch for page */ 200*529c1f20SDavid du Colombier 201*529c1f20SDavid du Colombier /* 202*529c1f20SDavid du Colombier * PTE bits used by fault.h. mmu.c translates them to real values. 203*529c1f20SDavid du Colombier */ 204*529c1f20SDavid du Colombier #define PTEVALID (1<<0) 205*529c1f20SDavid du Colombier #define PTERONLY 0 /* this is implied by the absence of PTEWRITE */ 206*529c1f20SDavid du Colombier #define PTEWRITE (1<<1) 207*529c1f20SDavid du Colombier #define PTEUNCACHED (1<<2) 208*529c1f20SDavid du Colombier #define PTEKERNEL (1<<3) /* no user access */ 209*529c1f20SDavid du Colombier 210*529c1f20SDavid du Colombier /* 211*529c1f20SDavid du Colombier * H3650 specific definitions 212*529c1f20SDavid du Colombier */ 213*529c1f20SDavid du Colombier #define EGPIOREGS 0x49000000 /* Additional GPIO register */ 214