xref: /netbsd-src/sys/arch/hpc/stand/hpcboot/arm/arm.asm (revision 569b7f924fd547a1a14b66aa1fdab30e6ee501c2)
1*569b7f92Snonaka;	$NetBSD: arm.asm,v 1.9 2010/04/06 16:20:28 nonaka Exp $
29173eae7Such;
39173eae7Such; Copyright (c) 2001 The NetBSD Foundation, Inc.
49173eae7Such; All rights reserved.
59173eae7Such;
69173eae7Such; This code is derived from software contributed to The NetBSD Foundation
79173eae7Such; by UCHIYAMA Yasushi.
89173eae7Such;
99173eae7Such; Redistribution and use in source and binary forms, with or without
109173eae7Such; modification, are permitted provided that the following conditions
119173eae7Such; are met:
129173eae7Such; 1. Redistributions of source code must retain the above copyright
139173eae7Such;    notice, this list of conditions and the following disclaimer.
149173eae7Such; 2. Redistributions in binary form must reproduce the above copyright
159173eae7Such;    notice, this list of conditions and the following disclaimer in the
169173eae7Such;    documentation and/or other materials provided with the distribution.
179173eae7Such;
189173eae7Such; THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
199173eae7Such; ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
209173eae7Such; TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
219173eae7Such; PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
229173eae7Such; BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
239173eae7Such; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
249173eae7Such; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
259173eae7Such; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
269173eae7Such; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
279173eae7Such; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
289173eae7Such; POSSIBILITY OF SUCH DAMAGE.
299173eae7Such;
309173eae7Such
319173eae7Such;
329173eae7Such;armasm.exe $(InputPath)
339173eae7Such;arm.obj
349173eae7Such;
359173eae7Such	; dummy buffer for WritebackDCache
36*569b7f92Snonaka	EXPORT	|dcachesize|	[DATA]
379173eae7Such	EXPORT	|dcachebuf|	[DATA]
389173eae7Such	AREA	|.data|, DATA
39*569b7f92Snonaka|dcachesize|
40*569b7f92Snonaka	DCD	8192	; for SA1100
419173eae7Such|dcachebuf|
42*569b7f92Snonaka	%	65536	; max D-cache size
439173eae7Such
449173eae7Such	AREA	|.text|, CODE, PIC
459173eae7Such
469173eae7Such	;
479173eae7Such	; Operation mode ops.
489173eae7Such	;
499173eae7Such	EXPORT	|SetSVCMode|
509173eae7Such|SetSVCMode| PROC
519173eae7Such	mrs	r0, cpsr
529173eae7Such	bic	r0, r0, #0x1f
539173eae7Such	orr	r0, r0, #0x13
549173eae7Such	msr	cpsr, r0
559173eae7Such	mov	pc, lr
569173eae7Such	ENDP  ; |SetSVCMode|
579173eae7Such	EXPORT	|SetSystemMode|
589173eae7Such|SetSystemMode| PROC
599173eae7Such	mrs	r0, cpsr
609173eae7Such	orr	r0, r0, #0x1f
619173eae7Such	msr	cpsr, r0
629173eae7Such	mov	pc, lr
639173eae7Such	ENDP  ; |SetSystemMode|
649173eae7Such
659173eae7Such	;
669173eae7Such	; Interrupt ops.
679173eae7Such	;
689173eae7Such	EXPORT	|DI|
699173eae7Such|DI| PROC
709173eae7Such	mrs	r0, cpsr
719173eae7Such	orr	r0, r0, #0xc0
729173eae7Such	msr	cpsr, r0
739173eae7Such	mov	pc, lr
749173eae7Such	ENDP  ; |DI|
759173eae7Such	EXPORT	|EI|
769173eae7Such|EI| PROC
779173eae7Such	mrs	r0, cpsr
789173eae7Such	bic	r0, r0, #0xc0
799173eae7Such	msr	cpsr, r0
809173eae7Such	mov	pc, lr
819173eae7Such	ENDP  ; |EI|
829173eae7Such
839173eae7Such	;
849173eae7Such	; Cache ops.
859173eae7Such	;
869173eae7Such	EXPORT	|InvalidateICache|
879173eae7Such|InvalidateICache| PROC
889173eae7Such	; c7	(CRn) Cache Control Register
899173eae7Such	; c5, 0	(CRm, opcode_2) Flush I
909173eae7Such	; r0	(Rd) ignored
919173eae7Such	mcr	p15, 0, r0, c7, c5, 0
929173eae7Such	mov	pc, lr
939173eae7Such	ENDP  ; |InvalidateICache|
949173eae7Such
959173eae7Such	EXPORT	|WritebackDCache|
969173eae7Such|WritebackDCache| PROC
97*569b7f92Snonaka	ldr	r0, [pc, #24]	; dcachebuf
98*569b7f92Snonaka	ldr	r1, [pc, #24]
99*569b7f92Snonaka	ldr	r1, [r1]	; dcache-size
100*569b7f92Snonaka	add	r1, r1, r0
1019173eae7Such|wbdc1|
1029173eae7Such	ldr	r2, [r0], #32	; line-size is 32byte.
1039173eae7Such	teq	r1, r0
1049173eae7Such	bne	|wbdc1|
1059173eae7Such	mov	pc, lr
1069173eae7Such	DCD	|dcachebuf|
107*569b7f92Snonaka	DCD	|dcachesize|
1089173eae7Such	ENDP  ; |WritebackDCache|
1099173eae7Such
1109173eae7Such	EXPORT	|InvalidateDCache|
1119173eae7Such|InvalidateDCache| PROC
1129173eae7Such	; c7	(CRn) Cache Control Register
1139173eae7Such	; c6, 0	(CRm, opcode_2) Flush D
1149173eae7Such	; r0	(Rd) ignored
1159173eae7Such	mcr	p15, 0, r0, c7, c6, 0
1169173eae7Such	mov	pc, lr
1179173eae7Such	ENDP  ; |InvalidateDCache|
1189173eae7Such
1199173eae7Such	EXPORT	|WritebackInvalidateDCache|
1209173eae7Such|WritebackInvalidateDCache| PROC
121*569b7f92Snonaka	ldr	r0, [pc, #28]	; dcachebuf
122*569b7f92Snonaka	ldr	r1, [pc, #28]
123*569b7f92Snonaka	ldr	r1, [r1]	; dcache-size
124*569b7f92Snonaka	add	r1, r1, r0
1259173eae7Such|wbidc1|
1269173eae7Such	ldr	r2, [r0], #32
1279173eae7Such	teq	r1, r0
1289173eae7Such	bne	|wbidc1|
1299173eae7Such	mcr	p15, 0, r0, c7, c6, 0
1309173eae7Such	mov	pc, lr
1319173eae7Such	DCD	|dcachebuf|
132*569b7f92Snonaka	DCD	|dcachesize|
1339173eae7Such	ENDP  ; |WritebackInvalidateDCache|
1349173eae7Such
1359173eae7Such	;
1369173eae7Such	; WriteBuffer ops
1379173eae7Such	;
1389173eae7Such	EXPORT	|WritebufferFlush|
1399173eae7Such|WritebufferFlush| PROC
1409173eae7Such	; c7	(CRn) Cache Control Register
1419173eae7Such	; c10, 4(CRm, opcode_2) Flush D
1429173eae7Such	; r0	(Rd) ignored
1439173eae7Such	mcr	p15, 0, r0, c7, c10, 4
1449173eae7Such	mov	pc, lr
1459173eae7Such	ENDP  ; |WritebufferFlush|
1469173eae7Such
1479173eae7Such	;
1489173eae7Such	;	TLB ops.
1499173eae7Such	;
1509173eae7Such	EXPORT	|FlushIDTLB|
1519173eae7Such|FlushIDTLB| PROC
1529173eae7Such	mcr	p15, 0, r0, c8, c7, 0
1539173eae7Such	mov	pc, lr
1549173eae7Such	ENDP  ; |FlushIDTLB|
1559173eae7Such
1569173eae7Such	EXPORT	|FlushITLB|
1579173eae7Such|FlushITLB| PROC
1589173eae7Such	mcr	p15, 0, r0, c8, c5, 0
1599173eae7Such	mov	pc, lr
1609173eae7Such	ENDP  ; |FlushITLB|
1619173eae7Such
1629173eae7Such	EXPORT	|FlushDTLB|
1639173eae7Such|FlushDTLB| PROC
1649173eae7Such	mcr	p15, 0, r0, c8, c6, 0
1659173eae7Such	mov	pc, lr
1669173eae7Such	ENDP  ; |FlushITLB|
1679173eae7Such
1689173eae7Such	EXPORT	|FlushDTLBS|
1699173eae7Such|FlushDTLBS| PROC
1709173eae7Such	mcr	p15, 0, r0, c8, c6, 1
1719173eae7Such	mov	pc, lr
1729173eae7Such	ENDP  ; |FlushITLBS|
1739173eae7Such
1749173eae7Such	;
1759173eae7Such	;	CurrentProgramStatusRegister access.
1769173eae7Such	;
1779173eae7Such	EXPORT	|GetCPSR|
1789173eae7Such|GetCPSR| PROC
1799173eae7Such	mrs	r0, cpsr
1809173eae7Such	mov	pc, lr
1819173eae7Such	ENDP  ; |GetCPSR|
1829173eae7Such
1839173eae7Such	EXPORT	|SetCPSR|
1849173eae7Such|SetCPSR| PROC
1859173eae7Such	msr	cpsr, r0
1869173eae7Such	mov	pc, lr
1879173eae7Such	ENDP  ; |SetCPSR|
1889173eae7Such
1899173eae7Such	;
1909173eae7Such	;	SA-1100 Coprocessor15 access.
1919173eae7Such	;
1929173eae7Such; Reg0	ID (R)
1939173eae7Such	EXPORT	|GetCop15Reg0|
1949173eae7Such|GetCop15Reg0| PROC
1959173eae7Such	mrc	p15, 0, r0, c0, c0, 0
1969173eae7Such	; 0x4401a119 (44|01 = version 4|A11 = SA1100|9 = E stepping)
1979173eae7Such	mov	pc, lr
1989173eae7Such	ENDP  ; |GetCop15Reg0|
1999173eae7Such
2009173eae7Such; Reg1	Control (R/W)
2019173eae7Such	EXPORT	|GetCop15Reg1|
2029173eae7Such|GetCop15Reg1| PROC
2039173eae7Such	mrc	p15, 0, r0, c1, c0, 0
2049173eae7Such	; 0xc007327f (||...........|||..||..|..|||||||)
2059173eae7Such	;	0 (1)MMU enabled
2069173eae7Such	;	1 (1)Address fault enabled
2079173eae7Such	;	2 (1)D-cache enabled
2089173eae7Such	;	3 (1)Write-buffer enabled
2099173eae7Such	;	7 (0)little-endian
2109173eae7Such	;	8 (0)MMU protection (System)
2119173eae7Such	;	9 (1)MMU protection (ROM)
2129173eae7Such	;	12 (1)I-cache enabled
2139173eae7Such	;	13 (1)Base address of interrupt vector is 0xffff0000
2149173eae7Such	mov	pc, lr
2159173eae7Such	ENDP  ; |GetCop15Reg1|
2169173eae7Such	EXPORT	|SetCop15Reg1|
2179173eae7Such|SetCop15Reg1| PROC
2189173eae7Such	mcr	p15, 0, r0, c1, c0, 0
2199173eae7Such	nop
2209173eae7Such	nop
2219173eae7Such	nop
2229173eae7Such	mov	pc, lr
2239173eae7Such	ENDP  ; |SetCop15Reg1|
2249173eae7Such
2259173eae7Such; Reg2	Translation table base (R/W)
2269173eae7Such	EXPORT	|GetCop15Reg2|
2279173eae7Such|GetCop15Reg2| PROC
2289173eae7Such	mrc	p15, 0, r0, c2, c0, 0
2299173eae7Such	mov	pc, lr
2309173eae7Such	ENDP  ; |GetCop15Reg2|
2319173eae7Such	EXPORT	|SetCop15Reg2|
2329173eae7Such|SetCop15Reg2| PROC
2339173eae7Such	mcr	p15, 0, r0, c2, c0, 0
2349173eae7Such	mov	pc, lr
2359173eae7Such	ENDP  ; |SetCop15Reg2|
2369173eae7Such
2379173eae7Such; Reg3	Domain access control (R/W)
2389173eae7Such	EXPORT	|GetCop15Reg3|
2399173eae7Such|GetCop15Reg3| PROC
2409173eae7Such	mrc	p15, 0, r0, c3, c0, 0
2419173eae7Such	mov	pc, lr
2429173eae7Such	ENDP  ; |GetCop15Reg3|
2439173eae7Such	EXPORT	|SetCop15Reg3|
2449173eae7Such|SetCop15Reg3| PROC
2459173eae7Such	mcr	p15, 0, r0, c3, c0, 0
2469173eae7Such	mov	pc, lr
2479173eae7Such	ENDP  ; |SetCop15Reg3|
2489173eae7Such
2499173eae7Such; Reg5	Fault status (R/W)
2509173eae7Such	EXPORT	|GetCop15Reg5|
2519173eae7Such|GetCop15Reg5| PROC
2529173eae7Such	mrc	p15, 0, r0, c5, c0, 0
2539173eae7Such	mov	pc, lr
2549173eae7Such	ENDP  ; |GetCop15Reg5|
2559173eae7Such
2569173eae7Such; Reg6	Fault address (R/W)
2579173eae7Such	EXPORT	|GetCop15Reg6|
2589173eae7Such|GetCop15Reg6| PROC
2599173eae7Such	mrc	p15, 0, r0, c6, c0, 0
2609173eae7Such	mov	pc, lr
2619173eae7Such	ENDP  ; |GetCop15Reg6|
2629173eae7Such
2639173eae7Such; Reg7	Cache operations (W)
2649173eae7Such	; -> Cache ops
2659173eae7Such; Reg8	TLB operations (Flush) (W)
2669173eae7Such	; -> TLB ops
2679173eae7Such; Reg9	Read buffer operations (W)
2689173eae7Such; Reg13	Process ID (R/W)
2699173eae7Such	EXPORT	|GetCop15Reg13|
2709173eae7Such|GetCop15Reg13| PROC
2719173eae7Such	mrc	p15, 0, r0, c13, c0, 0
2729173eae7Such	mov	pc, lr
2739173eae7Such	ENDP  ; |GetCop15Reg13|
2749173eae7Such	EXPORT	|SetCop15Reg13|
2759173eae7Such|SetCop15Reg13| PROC
2769173eae7Such	mcr	p15, 0, r0, c13, c0, 0
2779173eae7Such	mov	pc, lr
2789173eae7Such	ENDP  ; |SetCop15Reg13|
2799173eae7Such
2809173eae7Such; Reg14	Breakpoint (R/W)
2819173eae7Such	EXPORT	|GetCop15Reg14|
2829173eae7Such|GetCop15Reg14| PROC
2839173eae7Such	mrc	p15, 0, r0, c14, c0, 0
2849173eae7Such	mov	pc, lr
2859173eae7Such	ENDP  ; |GetCop15Reg14|
2869173eae7Such; Reg15	Test, clock, and idle (W)
2879173eae7Such
2889173eae7Such	END
289