| Index: emcore/trunk/target/ipodnano4g/mmu.c | 
| — | — | @@ -28,6 +28,9 @@ | 
| 29 | 29 | void clean_dcache() | 
| 30 | 30 | { | 
| 31 | 31 | asm volatile( | 
|  | 32 | +        "MOV R0, #0                \n\t" | 
|  | 33 | +        "MCR p15, 0, R0,c7,c10,0   \n\t" | 
|  | 34 | +        "MCR p15, 0, R0,c7,c10,4   \n\t" | 
| 32 | 35 | "MOV PC, LR                \n\t" | 
| 33 | 36 | ); | 
| 34 | 37 | } | 
| — | — | @@ -35,6 +38,9 @@ | 
| 36 | 39 | void invalidate_dcache() | 
| 37 | 40 | { | 
| 38 | 41 | asm volatile( | 
|  | 42 | +        "MOV R0, #0                \n\t" | 
|  | 43 | +        "MCR p15, 0, R0,c7,c14,0   \n\t" | 
|  | 44 | +        "MCR p15, 0, R0,c7,c10,4   \n\t" | 
| 39 | 45 | "MOV PC, LR                \n\t" | 
| 40 | 46 | ); | 
| 41 | 47 | } | 
| — | — | @@ -42,6 +48,9 @@ | 
| 43 | 49 | void invalidate_icache() | 
| 44 | 50 | { | 
| 45 | 51 | asm volatile( | 
|  | 52 | +        "MOV R0, #0                \n\t" | 
|  | 53 | +        "MCR p15, 0, R0,c7,c5,0    \n\t" | 
|  | 54 | +        "MCR p15, 0, R0,c7,c5,4    \n\t" | 
| 46 | 55 | "MOV PC, LR                \n\t" | 
| 47 | 56 | ); | 
| 48 | 57 | } | 
| Index: emcore/trunk/target/ipodnano4g/crt0.S | 
| — | — | @@ -41,8 +41,51 @@ | 
| 42 | 42 | .section .initcode,"ax",%progbits | 
| 43 | 43 | .global _start | 
| 44 | 44 | _start: | 
| 45 |  | -	ldr	r0, =0x00450878
 | 
| 46 |  | -	mcr	p15, 0, r0,c1,c0,0
 | 
|  | 45 | +	mrc	p15, 0, r0,c1,c0 | 
|  | 46 | +	bic	r0, r0, #0x200 | 
|  | 47 | +	orr	r0, r0, #0x100 | 
|  | 48 | +	mcr	p15, 0, r0,c1,c0 | 
|  | 49 | +	mov	r0, #0x7fffffff | 
|  | 50 | +	mcr	p15, 0, r0,c3,c0 | 
|  | 51 | +	mov	r0, #0x22000000 | 
|  | 52 | +	orr	r1, r0, #0x00000100 | 
|  | 53 | +	orr	r0, r0, #0x0003c000 | 
|  | 54 | +	orr	r1, r1, #0x000000fe | 
|  | 55 | +	add	r2, r0, #0x200 | 
|  | 56 | +	mov	r3, #0 | 
|  | 57 | +	str	r1, [r0], #4 | 
|  | 58 | +.mmuloop1: | 
|  | 59 | +	str	r3, [r0], #4 | 
|  | 60 | +	cmp	r0, r2 | 
|  | 61 | +	bne	.mmuloop1 | 
|  | 62 | +	add	r0, r0, #0x080 | 
|  | 63 | +	add	r2, r0, #0x580 | 
|  | 64 | +.mmuloop2: | 
|  | 65 | +	str	r3, [r0], #4 | 
|  | 66 | +	cmp	r0, r2 | 
|  | 67 | +	bne	.mmuloop2 | 
|  | 68 | +	add	r0, r0, #0x4 | 
|  | 69 | +	add	r2, r0, #0x7c | 
|  | 70 | +.mmuloop3: | 
|  | 71 | +	str	r3, [r0], #4 | 
|  | 72 | +	cmp	r0, r2 | 
|  | 73 | +	bne	.mmuloop3 | 
|  | 74 | +	add	r0, r0, #0x4 | 
|  | 75 | +	add	r2, r0, #0x500 | 
|  | 76 | +	add	r2, r2, #0x7c | 
|  | 77 | +.mmuloop4: | 
|  | 78 | +	str	r3, [r0], #4 | 
|  | 79 | +	cmp	r0, r2 | 
|  | 80 | +	bne	.mmuloop4 | 
|  | 81 | +	add	r0, r0, #0x200 | 
|  | 82 | +	add	r2, r0, #0x3000 | 
|  | 83 | +.mmuloop5: | 
|  | 84 | +	str	r3, [r0], #4 | 
|  | 85 | +	cmp	r0, r2 | 
|  | 86 | +	bne	.mmuloop5 | 
|  | 87 | +	mrc	p15, 0, r0,c1,c0 | 
|  | 88 | +	orr	r0, r0, #5 | 
|  | 89 | +	mcr	p15, 0, r0,c1,c0 | 
| 47 | 90 | ldr	r0, =_sramsource | 
| 48 | 91 | ldr	r1, =_sramstart | 
| 49 | 92 | ldr	r2, =_sramend | 
| — | — | @@ -72,17 +115,15 @@ | 
| 73 | 116 | cmp	r1, r0 | 
| 74 | 117 | strhi	r2, [r0], #4 | 
| 75 | 118 | bhi	.clearbss | 
| 76 |  | -	ldr	r1, =0x38200000
 | 
| 77 |  | -	ldr	r0, [r1]
 | 
| 78 |  | -	orr	r0, r0, #1
 | 
| 79 |  | -	bic	r0, r0, #0x10000
 | 
| 80 |  | -	str	r0, [r1]
 | 
| 81 | 119 | mov	r0, #0 | 
| 82 |  | -	mcr	p15, 0, r0,c7,c5,0
 | 
| 83 |  | -	add	r1, r1, #0x00c00000
 | 
|  | 120 | +	mcr	p15, 0, r0,c7,c10,0 @ clean data cache | 
|  | 121 | +	mcr	p15, 0, r0,c7,c10,4 @ drain write buffer | 
|  | 122 | +	mcr	p15, 0, r0,c7,c5,0  @ invalidate instruction cache | 
|  | 123 | +	mcr	p15, 0, r0,c7,c5,4  @ flush prefetch buffer | 
|  | 124 | +	ldr	r1, =0x38e00000 | 
| 84 | 125 | add	r2, r1, #0x00001000 | 
| 85 | 126 | add	r3, r1, #0x00002000 | 
| 86 |  | -	sub	r4, r0, #1
 | 
|  | 127 | +	mov	r4, #-1 | 
| 87 | 128 | str	r4, [r1,#0x14] | 
| 88 | 129 | str	r4, [r2,#0x14] | 
| 89 | 130 | str	r4, [r1,#0xf00] | 
| — | — | @@ -89,12 +130,6 @@ | 
| 90 | 131 | str	r4, [r2,#0xf00] | 
| 91 | 132 | str	r4, [r3,#0x08] | 
| 92 | 133 | str	r4, [r3,#0x0c] | 
| 93 |  | -	str	r0, [r1,#0x14]
 | 
| 94 |  | -	str	r0, [r2,#0x14]
 | 
| 95 |  | -	mov	r0, #0
 | 
| 96 |  | -	ldr	r1, =0x3c500000
 | 
| 97 |  | -	str	r0, [r1,#0x48]
 | 
| 98 |  | -	str	r0, [r1,#0x4c]
 | 
| 99 | 134 | msr	cpsr_c, #0xd2 | 
| 100 | 135 | ldr	sp, =_irqstackend | 
| 101 | 136 | msr	cpsr_c, #0xd7 | 
| — | — | @@ -127,6 +162,7 @@ | 
| 128 | 163 | str	r0, [r1] | 
| 129 | 164 | hang: | 
| 130 | 165 | msr	cpsr_c, #0xd3 | 
|  | 166 | +	mov	r0, #0 | 
| 131 | 167 | mcr	p15, 0, r0,c7,c0,4 | 
| 132 | 168 | b	hang | 
| 133 | 169 | .size reset, .-reset | 
| — | — | @@ -192,7 +228,7 @@ | 
| 193 | 229 | sub	sp, sp, #0x44 | 
| 194 | 230 | mov	r0, #0 | 
| 195 | 231 | adr	r1, prefetch_abort_text | 
| 196 |  | -	mrc	p15, 0, r3,c5,c0,1
 | 
|  | 232 | +	mrc	p15, 0, r3,c5,c0 | 
| 197 | 233 | mov	r4, r3,lsr#4 | 
| 198 | 234 | and	r4, r4, #0xf | 
| 199 | 235 | and	r5, r3, #0xf | 
| — | — | @@ -292,12 +328,7 @@ | 
| 293 | 329 | .type read_usec_timer, %function | 
| 294 | 330 | read_usec_timer: | 
| 295 | 331 | ldr	r0, val_3c700000 | 
| 296 |  | -	ldr	r1, [r0,#0x80]
 | 
| 297 |  | -	ldr	r0, [r0,#0x84]
 | 
| 298 |  | -	mov	r0, r0,lsr#5
 | 
| 299 |  | -	orr	r0, r0, r1,lsl#27
 | 
| 300 |  | -	add	r0, r0, r0,asr#2
 | 
| 301 |  | -	add	r0, r0, r0,asr#6
 | 
|  | 332 | +	ldr	r0, [r0,#0xb4] | 
| 302 | 333 | bx	lr | 
| 303 | 334 | .size read_usec_timer, .-read_usec_timer | 
| 304 | 335 |  |