18e32b400SDavid du Colombier /* 28e32b400SDavid du Colombier * Memory and machine-specific definitions. Used in C and assembler. 38e32b400SDavid du Colombier */ 48e32b400SDavid du Colombier #define KiB 1024u /* Kibi 0x0000000000000400 */ 58e32b400SDavid du Colombier #define MiB 1048576u /* Mebi 0x0000000000100000 */ 68e32b400SDavid du Colombier #define GiB 1073741824u /* Gibi 000000000040000000 */ 78e32b400SDavid du Colombier 88e32b400SDavid du Colombier /* 98e32b400SDavid du Colombier * Not sure where these macros should go. 108e32b400SDavid du Colombier * This probably isn't right but will do for now. 118e32b400SDavid du Colombier * The macro names are problematic too. 128e32b400SDavid du Colombier */ 138e32b400SDavid du Colombier /* 14*12009bffSDavid du Colombier * In BITN(o), 'o' is the bit offset in the register. 158e32b400SDavid du Colombier * For multi-bit fields use F(v, o, w) where 'v' is the value 168e32b400SDavid du Colombier * of the bit-field of width 'w' with LSb at bit offset 'o'. 178e32b400SDavid du Colombier */ 18*12009bffSDavid du Colombier #define BITN(o) (1<<(o)) 198e32b400SDavid du Colombier #define F(v, o, w) (((v) & ((1<<(w))-1))<<(o)) 208e32b400SDavid du Colombier 218e32b400SDavid du Colombier /* 228e32b400SDavid du Colombier * Sizes 238e32b400SDavid du Colombier */ 24b1c4f505SDavid du Colombier #define BY2PG (4*KiB) /* bytes per page */ 25b1c4f505SDavid du Colombier #define PGSHIFT 12 /* log(BY2PG) */ 268e32b400SDavid du Colombier 278e32b400SDavid du Colombier #define MAXMACH 1 /* max # cpus system can run */ 28b1c4f505SDavid du Colombier #define MACHSIZE BY2PG 298e32b400SDavid du Colombier 308e32b400SDavid du Colombier #define KSTKSIZE (16*KiB) /* was 8K */ 318e32b400SDavid du Colombier #define STACKALIGN(sp) ((sp) & ~3) /* bug: assure with alloc */ 328e32b400SDavid du Colombier 338e32b400SDavid du Colombier /* 348e32b400SDavid du Colombier * Address spaces. 358e32b400SDavid du Colombier * KTZERO is used by kprof and dumpstack (if any). 368e32b400SDavid du Colombier * 378e32b400SDavid du Colombier * KZERO (0xc0000000) is mapped to physical 0x80000000 (start of dram). 388e32b400SDavid du Colombier * u-boot claims to occupy the first 3 MB of dram, but we're willing to 398e32b400SDavid du Colombier * step on it once we're loaded. Expect plan9.ini in the first 64K past 3MB. 408e32b400SDavid du Colombier * 418e32b400SDavid du Colombier * L2 PTEs are stored in 1K before Mach (11K to 12K above KZERO). 428e32b400SDavid du Colombier * cpu0's Mach struct is at L1 - MACHSIZE(4K) to L1 (12K to 16K above KZERO). 438e32b400SDavid du Colombier * L1 PTEs are stored from L1 to L1+32K (16K to 48K above KZERO). 448e32b400SDavid du Colombier * KTZERO may be anywhere after that (but probably shouldn't collide with 458e32b400SDavid du Colombier * u-boot). 468e32b400SDavid du Colombier * This should leave over 8K from KZERO to L2 PTEs. 478e32b400SDavid du Colombier */ 488e32b400SDavid du Colombier #define KSEG0 0xC0000000 /* kernel segment */ 498e32b400SDavid du Colombier /* mask to check segment; good for 512MB dram */ 508e32b400SDavid du Colombier #define KSEGM 0xE0000000 518e32b400SDavid du Colombier #define KZERO KSEG0 /* kernel address space */ 528e32b400SDavid du Colombier #define L1 (KZERO+16*KiB) /* tt ptes: 16KiB aligned */ 538e32b400SDavid du Colombier #define CONFADDR (KZERO+0x300000) /* unparsed plan9.ini */ 548e32b400SDavid du Colombier /* KTZERO must match loadaddr in mkfile */ 558e32b400SDavid du Colombier #define KTZERO (KZERO+0x310000) /* kernel text start */ 568e32b400SDavid du Colombier 578e32b400SDavid du Colombier #define UZERO 0 /* user segment */ 588e32b400SDavid du Colombier #define UTZERO (UZERO+BY2PG) /* user text start */ 598e32b400SDavid du Colombier #define UTROUND(t) ROUNDUP((t), BY2PG) 608e32b400SDavid du Colombier /* moved USTKTOP down to 512MB to keep MMIO space out of user space. */ 618e32b400SDavid du Colombier #define USTKTOP 0x20000000 /* user segment end +1 */ 628e32b400SDavid du Colombier #define USTKSIZE (8*1024*1024) /* user stack size */ 638e32b400SDavid du Colombier #define TSTKTOP (USTKTOP-USTKSIZE) /* sysexec temporary stack */ 648e32b400SDavid du Colombier #define TSTKSIZ 256 658e32b400SDavid du Colombier 668e32b400SDavid du Colombier /* address at which to copy and execute rebootcode */ 678e32b400SDavid du Colombier #define REBOOTADDR KADDR(0x100) 688e32b400SDavid du Colombier 698e32b400SDavid du Colombier /* 708e32b400SDavid du Colombier * Legacy... 718e32b400SDavid du Colombier */ 728e32b400SDavid du Colombier #define BLOCKALIGN 32 /* only used in allocb.c */ 738e32b400SDavid du Colombier #define KSTACK KSTKSIZE 748e32b400SDavid du Colombier 758e32b400SDavid du Colombier /* 768e32b400SDavid du Colombier * Sizes 778e32b400SDavid du Colombier */ 788e32b400SDavid du Colombier #define BI2BY 8 /* bits per byte */ 798e32b400SDavid du Colombier #define BY2SE 4 808e32b400SDavid du Colombier #define BY2WD 4 818e32b400SDavid du Colombier #define BY2V 8 /* only used in xalloc.c */ 828e32b400SDavid du Colombier 838e32b400SDavid du Colombier #define CACHELINESZ 64 /* bytes per cache line */ 848e32b400SDavid du Colombier #define PTEMAPMEM (1024*1024) 858e32b400SDavid du Colombier #define PTEPERTAB (PTEMAPMEM/BY2PG) 868e32b400SDavid du Colombier #define SEGMAPSIZE 1984 /* magic 16*124 */ 878e32b400SDavid du Colombier #define SSEGMAPSIZE 16 /* magic */ 888e32b400SDavid du Colombier #define PPN(x) ((x)&~(BY2PG-1)) /* pure page number? */ 898e32b400SDavid du Colombier 908e32b400SDavid du Colombier /* 918e32b400SDavid du Colombier * With a little work these move to port. 928e32b400SDavid du Colombier */ 938e32b400SDavid du Colombier #define PTEVALID (1<<0) 948e32b400SDavid du Colombier #define PTERONLY 0 958e32b400SDavid du Colombier #define PTEWRITE (1<<1) 968e32b400SDavid du Colombier #define PTEUNCACHED (1<<2) 978e32b400SDavid du Colombier #define PTEKERNEL (1<<3) 988e32b400SDavid du Colombier 998e32b400SDavid du Colombier /* 1008e32b400SDavid du Colombier * Physical machine information from here on. 1018e32b400SDavid du Colombier */ 1026a4b89feSDavid du Colombier 1036a4b89feSDavid du Colombier /* gpmc-controlled address space 0—1G */ 104b3b810bfSDavid du Colombier #define PHYSNAND 1 /* cs0 is onenand flash */ 1058e32b400SDavid du Colombier #define PHYSETHER 0x2c000000 1068e32b400SDavid du Colombier 1078e32b400SDavid du Colombier #define PHYSIO 0x48000000 /* L4 ctl */ 1088e32b400SDavid du Colombier 1098e32b400SDavid du Colombier #define PHYSSCM 0x48002000 /* system control module */ 110b3b810bfSDavid du Colombier 1118e32b400SDavid du Colombier /* core control pad cfg 0x48002030—0x480021e4, */ 1128e32b400SDavid du Colombier /* core control d2d pad cfg 0x480021e4—0x48002264 */ 1138e32b400SDavid du Colombier #define PHYSSCMPCONF 0x48002270 /* general device config */ 1148e32b400SDavid du Colombier #define PHYSOMAPSTS 0x4800244c /* standalone short: has l2 size */ 1158e32b400SDavid du Colombier /* core control pad cfg (2) 0x480025d8—0x480025fc */ 1168e32b400SDavid du Colombier #define PHYSSWBOOTCFG 0x48002910 /* sw booting config */ 1178e32b400SDavid du Colombier /* wakeup control pad cfg 0x48002a00—0x48002a54 */ 118b3b810bfSDavid du Colombier 1198e32b400SDavid du Colombier #define PHYSSCMMPU 0x48004900 /* actually CPU */ 1208e32b400SDavid du Colombier #define PHYSSCMCORE 0x48004a00 1218e32b400SDavid du Colombier #define PHYSSCMWKUP 0x48004c00 1228e32b400SDavid du Colombier #define PHYSSCMPLL 0x48004d00 /* clock ctl for dpll[3-5] */ 1237fdb4909SDavid du Colombier #define PHYSSCMDSS 0x48004e00 1248e32b400SDavid du Colombier #define PHYSSCMPER 0x48005000 1258e32b400SDavid du Colombier #define PHYSSCMUSB 0x48005400 1268e32b400SDavid du Colombier 1278e32b400SDavid du Colombier #define PHYSL4CORE 0x48040100 /* l4 ap */ 1287fdb4909SDavid du Colombier #define PHYSDSS 0x48050000 /* start of dss registers */ 1297fdb4909SDavid du Colombier #define PHYSDISPC 0x48050400 1307fdb4909SDavid du Colombier #define PHYSGFX 0x48050480 /* part of dispc */ 1317fdb4909SDavid du Colombier 1328e32b400SDavid du Colombier #define PHYSSDMA 0x48056000 /* system dma */ 1338e32b400SDavid du Colombier #define PHYSDMA 0x48060000 1348e32b400SDavid du Colombier 1358e32b400SDavid du Colombier #define PHYSUSBTLL 0x48062000 /* usb: transceiver-less link */ 1368e32b400SDavid du Colombier #define PHYSUHH 0x48064000 /* usb: `high-speed usb host' ctlr or subsys */ 1378e32b400SDavid du Colombier #define PHYSOHCI 0x48064400 /* usb 1.0: slow */ 1388e32b400SDavid du Colombier #define PHYSEHCI 0x48064800 /* usb 2.0: medium */ 1398e32b400SDavid du Colombier #define PHYSUART0 0x4806a000 1408e32b400SDavid du Colombier #define PHYSUART1 0x4806c000 1417fdb4909SDavid du Colombier #define PHYSMMCHS1 0x4809c000 /* mmc/sdio */ 1428e32b400SDavid du Colombier #define PHYSUSBOTG 0x480ab000 /* on-the-go usb */ 1437fdb4909SDavid du Colombier #define PHYSMMCHS3 0x480ad000 1447fdb4909SDavid du Colombier #define PHYSMMCHS2 0x480b4000 1458e32b400SDavid du Colombier 1468e32b400SDavid du Colombier #define PHYSINTC 0x48200000 /* interrupt controller */ 1478e32b400SDavid du Colombier 1488e32b400SDavid du Colombier #define PHYSPRMIVA2 0x48206000 /* prm iva2 regs */ 1498e32b400SDavid du Colombier /* 48306d40 sys_clkin_sel */ 1508e32b400SDavid du Colombier #define PHYSPRMGLBL 0x48307200 /* prm global regs */ 1518e32b400SDavid du Colombier #define PHYSPRMWKUSB 0x48307400 1528e32b400SDavid du Colombier 1538e32b400SDavid du Colombier #define PHYSCNTRL 0x4830a200 /* SoC id, etc. */ 1548e32b400SDavid du Colombier #define PHYSWDT1 0x4830c000 /* wdt1, not on GP omaps */ 1557fdb4909SDavid du Colombier 1567fdb4909SDavid du Colombier #define PHYSGPIO1 0x48310000 /* contains dss gpio */ 1577fdb4909SDavid du Colombier 1588e32b400SDavid du Colombier #define PHYSWDOG 0x48314000 /* watchdog timer, wdt2 */ 1598e32b400SDavid du Colombier #define PHYSWDT2 0x48314000 /* watchdog timer, wdt2 */ 1608e32b400SDavid du Colombier #define PHYSTIMER1 0x48318000 1618e32b400SDavid du Colombier 1628e32b400SDavid du Colombier #define PHYSL4WKUP 0x48328100 /* l4 wkup */ 1638e32b400SDavid du Colombier #define PHYSL4PER 0x49000100 /* l4 per */ 1648e32b400SDavid du Colombier 1658e32b400SDavid du Colombier #define PHYSCONS 0x49020000 /* uart console (third one) */ 1668e32b400SDavid du Colombier 1678e32b400SDavid du Colombier #define PHYSWDT3 0x49030000 /* wdt3 */ 1688e32b400SDavid du Colombier #define PHYSTIMER2 0x49032000 1698e32b400SDavid du Colombier #define PHYSTIMER3 0x49034000 1708e32b400SDavid du Colombier #define PHYSGPIO5 0x49056000 1718e32b400SDavid du Colombier #define PHYSGPIO6 0x49058000 /* contains igep ether gpio */ 1728e32b400SDavid du Colombier 1738e32b400SDavid du Colombier #define PHYSIOEND 0x49100000 /* end of PHYSIO identity map */ 1748e32b400SDavid du Colombier 1758e32b400SDavid du Colombier #define PHYSL4EMU 0x54006100 /* l4 emu */ 1768e32b400SDavid du Colombier #define PHYSL4PROT 0x54728000 /* l4 protection regs */ 1778e32b400SDavid du Colombier 1788e32b400SDavid du Colombier #define PHYSL3 0x68000000 /* l3 interconnect control */ 179490c40c5SDavid du Colombier #define PHYSL3GPMCCFG 0x68002000 /* l3 gpmc target port agent cfg */ 1808e32b400SDavid du Colombier #define PHYSL3USB 0x68004000 /* l3 regs for usb */ 1818e32b400SDavid du Colombier #define PHYSL3USBOTG 0x68004400 /* l3 regs for usb otg */ 182490c40c5SDavid du Colombier /* (target port) protection registers */ 183490c40c5SDavid du Colombier #define PHYSL3PMRT 0x68010000 /* l3 PM register target prot. */ 184490c40c5SDavid du Colombier #define PHYSL3GPMCPM 0x68012400 /* l3 gpmc target port protection */ 185490c40c5SDavid du Colombier #define PHYSL3OCTRAM 0x68012800 /* l3 ocm ram */ 186490c40c5SDavid du Colombier #define PHYSL3OCTROM 0x68012c00 /* l3 ocm rom */ 187490c40c5SDavid du Colombier #define PHYSL3MAD2D 0x68013000 /* l3 die-to-die */ 188490c40c5SDavid du Colombier #define PHYSL3IVA 0x68014000 /* l3 die-to-die */ 1898e32b400SDavid du Colombier 1908e32b400SDavid du Colombier #define PHYSSMS 0x6c000000 /* cfg regs: sms addr space 2 */ 1918e32b400SDavid du Colombier #define PHYSDRC 0x6d000000 /* sdram ctlr, addr space 3 */ 192fe25a076SDavid du Colombier #define PHYSGPMC 0x6e000000 /* flash, non-dram memory ctlr */ 1938e32b400SDavid du Colombier 1948e32b400SDavid du Colombier #define PHYSDRAM 0x80000000 1958e32b400SDavid du Colombier 196b3b810bfSDavid du Colombier #define VIRTNAND 0x20000000 /* fixed by u-boot */ 1978e32b400SDavid du Colombier #define VIRTIO PHYSIO 198