2 * omap3530 machine assist, definitions
5 * loader uses R11 as scratch.
11 #undef B /* B is for 'botch' */
13 #define KADDR(pa) (KZERO | ((pa) & ~KSEGM))
14 #define PADDR(va) (PHYSDRAM | ((va) & ~KSEGM))
16 #define L1X(va) (((((va))>>20) & 0x0fff)<<2)
18 #define MACHADDR (L1-MACHSIZE)
20 #define PTEDRAM (Dom0|L1AP(Krw)|Section|Cached|Buffered)
21 #define PTEIO (Dom0|L1AP(Krw)|Section)
23 #define DOUBLEMAPMBS 256 /* megabytes of low dram to double-map */
26 #define DELAY(label, mloops) \
27 MOVW $((mloops)*1000000), R0; \
32 /* wave at the user; clobbers R0, R1 & R6; needs R12 (SB) set */
44 #define SMC WORD $0xe1600070 /* low 4-bits are call # (trustzone) */
45 /* flush branch-target cache; zeroes R0 (cortex) */
48 MCR CpSC, 0, R0, C(CpCACHE), C(CpCACHEinvi), CpCACHEflushbtc
49 /* flush one entry of the branch-target cache, va in R0 (cortex) */
51 MCR CpSC, 0, R0, C(CpCACHE), C(CpCACHEinvi), CpCACHEflushbtse
53 /* arm v7 arch defines these */
54 #define WFI WORD $0xe320f003 /* wait for interrupt */
55 #define DMB WORD $0xf57ff05f /* data mem. barrier; last f = SY */
56 #define DSB WORD $0xf57ff04f /* data synch. barrier; last f = SY */
57 #define ISB WORD $0xf57ff06f /* instr. sync. barrier; last f = SY */
58 #define NOOP WORD $0xe320f000
59 #define CLZ(s, d) WORD $(0xe16f0f10 | (d) << 12 | (s)) /* count leading 0s */
60 #define CPSIE WORD $0xf1080080 /* intr enable: zeroes I bit */
61 #define CPSID WORD $0xf10c0080 /* intr disable: sets I bit */
64 #define VMRS(fp, cpu) WORD $(0xeef00a10 | (fp)<<16 | (cpu)<<12) /* FP → arm */
65 #define VMSR(cpu, fp) WORD $(0xeee00a10 | (fp)<<16 | (cpu)<<12) /* arm → FP */
68 * a popular code sequence used to write a pte for va is:
70 * MOVW R(n), TTB[LnX(va)]
71 * // clean the cache line
73 * // invalidate tlb entry for va
79 #define BARRIERS FLBTC; DSB; ISB
82 * invoked with PTE bits in R2, pa in R3, PTE pointed to by R4.
83 * fill PTE pointed to by R4 and increment R4 past it.
84 * increment R3 by a MB. clobbers R1.
87 ORR R3, R2, R1; /* pte bits in R2, pa in R3 */ \
89 ADD $4, R4; /* bump PTE address */ \
90 ADD $MiB, R3; /* bump pa */ \
92 /* zero PTE pointed to by R4 and increment R4 past it. assumes R0 is 0. */
95 ADD $4, R4; /* bump PTE address */