xref: /plan9/sys/src/9/omap/mem.h (revision 12009bff671a91993ae58f16dab833e809f4a6f3)
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