All pastes #553285 Raw Edit

ARM Assembler

public text v1 · immutable
·published 2007-06-09 17:24 UTC
rendered paste body
		.macro	CPWAIT		mrc	p15, 0, r0, c2, c0, 0		mov	r0, r0		sub	pc, pc, #4		.endm@disable_interrupts:@		mov r0, #0x40000000@		orr r0, r0, #0xd00000@		mov r1, #0@		str r1, [r0, #4]	@ ICMR@		str r1, [r0, #8]	@ ICLR@		str r1, [r0, #0xa0]	@ ICMR2@		str r1, [r0, #0xa4]	@ ICLR2disable_interrupts:		mrs    r0, cpsr		orr    r0, r0, #0xc0		msr    cpsr_c, r0		b	flush_cache		.space  32junkdata:	.space 0x10000		@ Spare space for data cache flushflush_cache:		mov	r0, #0x92000000		@ VIRT_START		orr	r0, #junkdata		add	r1, r0, #0x10000	1:	ldr	r2, [r0], #32		teq	r0, r1		bne	1b		mov	r0, #0		mcr	p15, 0, r0, c7, c10, 4	@ Drain write buffer		mcr	p15, 0, r0, c8, c7, 0	@ Invalidate I+D TLB		mcr	p15, 0, r0, c7, c7, 0	@ Invalidate I+D caches & BTB		CPWAITturn_off_mapping:		ldr	r2, =0x90092880		@ arm 1M page table entry for 0xa2000000		mov	r3, #0xa2000000		@ point to phys page 0xa2000000		orr	r3, r3, #0x400		orr	r3, r3, #0xa		str	r3, [r2]		@ write 0xa200040a to 0x90092880		@ Force MMU update and invalidate I cache		mov	r0, #0		mcr	p15, 0, r0, c7, c10, 4	@ Drain write buffer		mcr	p15, 0, r0, c8, c7, 0	@ Invalidate I+D TLB		mcr	p15, 0, r0, c7, c5, 0	@ Invalidate I cache & BTB		CPWAITjump_to_shared:	@ Jump to code with shared virtual/physical mapping		mov	r0, #0xa2000000		@ PHYS_START		orr	r0, r0, #0x10000		add	r0, r0, #disable_mmu - 0x10000		mov	pc, r0			@ jump to PHYS_START + disable_mmudisable_mmu:	@ Code is running at a vm address that is the same as its		@ physical address.  Now disable the MMU.		mrc	p15, 0, r0, c1, c0, 0		bic	r0, r0, #5		@ MMU & Dcache off		bic	r0, r0, #0x1000         @ Icache off		mcr	p15, 0, r0, c1, c0, 0	@ disable the MMU & caches		CPWAIT		mov	r0, #0		mcr	p15, 0, r0, c13, c0, 0	@ clear PID		mcr	p15, 0, r0, c8, c7, 0	@ invalidate I+D TLB		mcr	p15, 0, r0, c7, c5, 0	@ Invalidate I cache & BTB		CPWAITturn_on_backlight:		ldr	r0, =0x40B00000			@ PWM_CTRL0		mov	r1, #1		str	r1, [r0]			@ PWM_CTRL0 = 1		str	r1, [r0, #4]			@ PWM_PWDUTY0 = 0xc7		str	r1, [r0, #8]			@ PWM_PERVAL0 = 0xc8		mov	r0, #0x0c000000			@ CPLD		ldr	r1, [r0, #4]		orr	r2, r1, #0x80			@ CPLD+4[7] = BL_POWER		str	r2, [r0, #4]		ldr	r0, =0x41300004			@ CKEN		ldr	r1, [r0]		orr	r2, r1, #1			@ CKEN0_PWM0		bic	r2, r2, #0x400			@ USBHOST		bic	r2, r2, #0x800			@ USB		bic	r2, r2, #0x1000			@ MMC		bic	r2, r2, #0x2000			@ FICP		bic	r2, r2, #0x80000		@ KEYPAD		bic	r2, r2, #0x800000		@ SSP1		bic	r2, r2, #0x1000000		@ CAMERA		str	r2, [r0]kernel_params:		mov	r0, #0		ldr	r1, =875		@ MTYPE = MAGICIAN		ldr	r2, =0xa0000100		@ PHYS+0x100 (TAGS)		@ MMU is now disabled.  Call kernel.		ldr	r0, =0xa3008000		mov     pc, r0			@ PHYS+0x8000