1154abd99SDavid du Colombier /* 2154abd99SDavid du Colombier * Program Status Registers 3154abd99SDavid du Colombier */ 4154abd99SDavid du Colombier #define PsrMusr 0x00000010 /* mode */ 5154abd99SDavid du Colombier #define PsrMfiq 0x00000011 6154abd99SDavid du Colombier #define PsrMirq 0x00000012 7154abd99SDavid du Colombier #define PsrMsvc 0x00000013 8154abd99SDavid du Colombier #define PsrMabt 0x00000017 9154abd99SDavid du Colombier #define PsrMund 0x0000001B 10154abd99SDavid du Colombier #define PsrMsys 0x0000001F 11154abd99SDavid du Colombier #define PsrMask 0x0000001F 12154abd99SDavid du Colombier 13154abd99SDavid du Colombier #define PsrDfiq 0x00000040 /* disable FIQ interrupts */ 14154abd99SDavid du Colombier #define PsrDirq 0x00000080 /* disable IRQ interrupts */ 15154abd99SDavid du Colombier 16154abd99SDavid du Colombier #define PsrV 0x10000000 /* overflow */ 17154abd99SDavid du Colombier #define PsrC 0x20000000 /* carry/borrow/extend */ 18154abd99SDavid du Colombier #define PsrZ 0x40000000 /* zero */ 19154abd99SDavid du Colombier #define PsrN 0x80000000 /* negative/less than */ 20154abd99SDavid du Colombier 21154abd99SDavid du Colombier /* 22154abd99SDavid du Colombier * Coprocessors 23154abd99SDavid du Colombier */ 24a0d13e95SDavid du Colombier #define CpFP 10 /* float FP, VFP cfg. */ 25a0d13e95SDavid du Colombier #define CpDFP 11 /* double FP */ 26154abd99SDavid du Colombier #define CpSC 15 /* System Control */ 27154abd99SDavid du Colombier 28154abd99SDavid du Colombier /* 29154abd99SDavid du Colombier * opcode 1 30154abd99SDavid du Colombier */ 31154abd99SDavid du Colombier #define CpDef 0 /* default */ 32154abd99SDavid du Colombier #define CpL2 1 /* L2 cache operations */ 33154abd99SDavid du Colombier 34154abd99SDavid du Colombier /* 35154abd99SDavid du Colombier * Primary (CRn) CpSC registers. 36154abd99SDavid du Colombier */ 37154abd99SDavid du Colombier #define CpID 0 /* ID and cache type */ 38154abd99SDavid du Colombier #define CpCONTROL 1 /* miscellaneous control */ 39154abd99SDavid du Colombier #define CpTTB 2 /* Translation Table Base */ 40154abd99SDavid du Colombier #define CpDAC 3 /* Domain Access Control */ 41154abd99SDavid du Colombier #define CpFSR 5 /* Fault Status */ 42154abd99SDavid du Colombier #define CpFAR 6 /* Fault Address */ 43154abd99SDavid du Colombier #define CpCACHE 7 /* cache/write buffer control */ 44154abd99SDavid du Colombier #define CpTLB 8 /* TLB control */ 45154abd99SDavid du Colombier #define CpCLD 9 /* Cache Lockdown */ 46154abd99SDavid du Colombier #define CpTLD 10 /* TLB Lockdown */ 47154abd99SDavid du Colombier #define CpPID 13 /* Process ID */ 48154abd99SDavid du Colombier #define CpTESTCFG 15 /* test config. (arm926) */ 49154abd99SDavid du Colombier 50154abd99SDavid du Colombier /* 51*b72bcbbfSDavid du Colombier * CpID Secondary (CRm) registers. 52*b72bcbbfSDavid du Colombier */ 53*b72bcbbfSDavid du Colombier #define CpIDidct 0 54*b72bcbbfSDavid du Colombier /* 55*b72bcbbfSDavid du Colombier * CpID op1==0 opcode2 fields. 56154abd99SDavid du Colombier */ 57154abd99SDavid du Colombier #define CpIDid 0 /* main ID */ 58154abd99SDavid du Colombier #define CpIDct 1 /* cache type */ 59154abd99SDavid du Colombier 60154abd99SDavid du Colombier /* 61154abd99SDavid du Colombier * CpCONTROL 62154abd99SDavid du Colombier */ 63154abd99SDavid du Colombier #define CpCmmu 0x00000001 /* M: MMU enable */ 64154abd99SDavid du Colombier #define CpCalign 0x00000002 /* A: alignment fault enable */ 65154abd99SDavid du Colombier #define CpCdcache 0x00000004 /* C: data cache on */ 66154abd99SDavid du Colombier #define CpCwb 0x00000008 /* W: write buffer turned on */ 67154abd99SDavid du Colombier #define CpCi32 0x00000010 /* P: 32-bit program space */ 68154abd99SDavid du Colombier #define CpCd32 0x00000020 /* D: 32-bit data space */ 69154abd99SDavid du Colombier #define CpCbe 0x00000080 /* B: big-endian operation */ 70154abd99SDavid du Colombier #define CpCsystem 0x00000100 /* S: system permission */ 71154abd99SDavid du Colombier #define CpCrom 0x00000200 /* R: ROM permission */ 72154abd99SDavid du Colombier #define CpCicache 0x00001000 /* I: instruction cache on */ 73154abd99SDavid du Colombier #define CpChv 0x00002000 /* V: high vectors */ 74154abd99SDavid du Colombier 75154abd99SDavid du Colombier /* 76154abd99SDavid du Colombier * CpCACHE Secondary (CRm) registers and opcode2 fields. 77154abd99SDavid du Colombier * In ARM-speak, 'flush' means invalidate and 'clean' means writeback. 78a0d13e95SDavid du Colombier * In arm arch v6, these must be available in user mode: 79a0d13e95SDavid du Colombier * CpCACHEinvi, CpCACHEwait (prefetch flush) 80a0d13e95SDavid du Colombier * CpCACHEwb, CpCACHEwait (DSB: data sync barrier) 81a0d13e95SDavid du Colombier * CpCACHEwb, CpCACHEdmbarr (DMB: data memory barrier) 82154abd99SDavid du Colombier */ 83154abd99SDavid du Colombier #define CpCACHEintr 0 /* interrupt */ 84154abd99SDavid du Colombier #define CpCACHEinvi 5 /* instruction */ 85154abd99SDavid du Colombier #define CpCACHEinvd 6 /* data */ 863d4c7aa0SDavid du Colombier #define CpCACHEinvu 7 /* unified (I+D) */ 873d4c7aa0SDavid du Colombier #define CpCACHEwb 10 /* writeback D */ 883d4c7aa0SDavid du Colombier #define CpCACHEwbu 11 /* writeback U (not 926ejs) */ 893d4c7aa0SDavid du Colombier #define CpCACHEwbi 14 /* writeback D + invalidate */ 903d4c7aa0SDavid du Colombier #define CpCACHEwbui 15 /* writeback U + inval (not 926ejs) */ 91154abd99SDavid du Colombier 923d4c7aa0SDavid du Colombier /* 933d4c7aa0SDavid du Colombier * the 926ejs manual says that we can't use CpCACHEall nor CpCACHEwait 943d4c7aa0SDavid du Colombier * for writeback operations on the 926ejs, except for CpCACHEwb + CpCACHEwait, 953d4c7aa0SDavid du Colombier * which means `drain write buffer'. 963d4c7aa0SDavid du Colombier */ 97154abd99SDavid du Colombier #define CpCACHEall 0 /* entire */ 98154abd99SDavid du Colombier #define CpCACHEse 1 /* single entry */ 99154abd99SDavid du Colombier #define CpCACHEsi 2 /* set/index */ 100154abd99SDavid du Colombier #define CpCACHEtest 3 /* test loop */ 101154abd99SDavid du Colombier #define CpCACHEwait 4 /* wait */ 102a0d13e95SDavid du Colombier #define CpCACHEdmbarr 5 /* wb: data memory barrier */ 103154abd99SDavid du Colombier 104154abd99SDavid du Colombier /* 105154abd99SDavid du Colombier * CpTLB Secondary (CRm) registers and opcode2 fields. 106154abd99SDavid du Colombier */ 107154abd99SDavid du Colombier #define CpTLBinvi 5 /* instruction */ 108154abd99SDavid du Colombier #define CpTLBinvd 6 /* data */ 109154abd99SDavid du Colombier #define CpTLBinvu 7 /* unified */ 110154abd99SDavid du Colombier 111154abd99SDavid du Colombier #define CpTLBinv 0 /* invalidate all */ 112154abd99SDavid du Colombier #define CpTLBinvse 1 /* invalidate single entry */ 113154abd99SDavid du Colombier 114154abd99SDavid du Colombier /* 115154abd99SDavid du Colombier * CpTESTCFG Secondary (CRm) registers and opcode2 fields; sheeva only. 116003c0964SDavid du Colombier * opcode1 == CpL2 (1). L2 cache operations block the CPU until finished. 117003c0964SDavid du Colombier * Specifically, write-back (clean) blocks until all dirty lines have been 118003c0964SDavid du Colombier * drained from the L2 buffers. 119154abd99SDavid du Colombier */ 120154abd99SDavid du Colombier #define CpTCl2cfg 1 121ffc08dc1SDavid du Colombier #define CpTCl2flush 9 /* cpu blocks until flush done */ 122154abd99SDavid du Colombier #define CpTCl2waylck 10 123154abd99SDavid du Colombier #define CpTCl2inv 11 124154abd99SDavid du Colombier #define CpTCl2perfctl 12 125154abd99SDavid du Colombier #define CpTCl2perfcnt 13 126154abd99SDavid du Colombier 127154abd99SDavid du Colombier /* CpTCl2cfg */ 128154abd99SDavid du Colombier #define CpTCl2conf 0 129154abd99SDavid du Colombier 1308a12d8dfSDavid du Colombier /* CpTCl2conf bits */ 1318a12d8dfSDavid du Colombier #define CpTCldcstream (1<<29) /* D cache streaming switch */ 1328a12d8dfSDavid du Colombier #define CpTCl2wralloc (1<<28) /* cache write allocate */ 1338a12d8dfSDavid du Colombier #define CpTCl2prefdis (1<<24) /* l2 cache prefetch disable */ 1348a12d8dfSDavid du Colombier #define CpTCl2ena (1<<22) /* l2 cache enable */ 1358a12d8dfSDavid du Colombier 136154abd99SDavid du Colombier /* CpTCl2flush & CpTCl2inv */ 137154abd99SDavid du Colombier #define CpTCl2all 0 138154abd99SDavid du Colombier #define CpTCl2seva 1 139154abd99SDavid du Colombier #define CpTCl2way 2 140154abd99SDavid du Colombier #define CpTCl2sepa 3 141154abd99SDavid du Colombier #define CpTCl2valow 4 142154abd99SDavid du Colombier #define CpTCl2vahigh 5 /* also triggers flush or inv */ 143154abd99SDavid du Colombier 144154abd99SDavid du Colombier /* CpTCl2flush 145154abd99SDavid du Colombier #define CpTCecccnt 6 /* ecc error count */ 146154abd99SDavid du Colombier #define CpTCeccthr 7 /* ecc error threshold */ 147154abd99SDavid du Colombier 148ffc08dc1SDavid du Colombier /* CpTCl2waylck */ 149ffc08dc1SDavid du Colombier #define CpTCl2waylock 7 150154abd99SDavid du Colombier 151154abd99SDavid du Colombier /* CpTCl2inv */ 152154abd99SDavid du Colombier #define CpTCl2erraddr 7 /* ecc error address */ 153154abd99SDavid du Colombier 154154abd99SDavid du Colombier /* CpTCl2perfctl */ 155154abd99SDavid du Colombier #define CpTCl2perf0ctl 0 156154abd99SDavid du Colombier #define CpTCl2perf1ctl 1 157154abd99SDavid du Colombier 158154abd99SDavid du Colombier /* CpTCl2perfcnt */ 159154abd99SDavid du Colombier #define CpTCl2perf0low 0 160154abd99SDavid du Colombier #define CpTCl2perf0high 1 161154abd99SDavid du Colombier #define CpTCl2perf1low 2 162154abd99SDavid du Colombier #define CpTCl2perf1high 3 163154abd99SDavid du Colombier 164154abd99SDavid du Colombier /* 16533cde4a6SDavid du Colombier * MMU page table entries. 166003c0964SDavid du Colombier * Mbo (0x10) bit is implementation-defined and mandatory on some pre-v7 arms. 167154abd99SDavid du Colombier */ 168003c0964SDavid du Colombier #define Mbo 0x10 /* must be 1 on earlier arms */ 16933cde4a6SDavid du Colombier #define Fault 0x00000000 /* L[12] pte: unmapped */ 170154abd99SDavid du Colombier 171003c0964SDavid du Colombier #define Coarse (Mbo|1) /* L1 */ 172003c0964SDavid du Colombier #define Section (Mbo|2) /* L1 1MB */ 173003c0964SDavid du Colombier #define Fine (Mbo|3) /* L1 */ 174154abd99SDavid du Colombier 175154abd99SDavid du Colombier #define Large 0x00000001u /* L2 64KB */ 176154abd99SDavid du Colombier #define Small 0x00000002u /* L2 4KB */ 177003c0964SDavid du Colombier #define Tiny 0x00000003u /* L2 1KB, deprecated */ 17833cde4a6SDavid du Colombier #define Buffered 0x00000004u /* L[12]: write-back not -thru */ 179154abd99SDavid du Colombier #define Cached 0x00000008u /* L[12] */ 180154abd99SDavid du Colombier 181154abd99SDavid du Colombier #define Dom0 0 182154abd99SDavid du Colombier #define Noaccess 0 /* AP, DAC */ 183154abd99SDavid du Colombier #define Krw 1 /* AP */ 184154abd99SDavid du Colombier #define Uro 2 /* AP */ 185154abd99SDavid du Colombier #define Urw 3 /* AP */ 186154abd99SDavid du Colombier #define Client 1 /* DAC */ 187154abd99SDavid du Colombier #define Manager 3 /* DAC */ 188154abd99SDavid du Colombier 189154abd99SDavid du Colombier #define AP(n, v) F((v), ((n)*2)+4, 2) 1908a12d8dfSDavid du Colombier #define L1AP(ap) (AP(3, (ap))) /* in L1, only Sections have AP */ 191154abd99SDavid du Colombier #define L2AP(ap) (AP(3, (ap))|AP(2, (ap))|AP(1, (ap))|AP(0, (ap))) /* pre-armv7 */ 192154abd99SDavid du Colombier #define DAC(n, v) F((v), (n)*2, 2) 193154abd99SDavid du Colombier 194003c0964SDavid du Colombier #define HVECTORS 0xffff0000 /* addr of vectors */ 195