diff options
Diffstat (limited to 'arch/arm/boot/compressed/head.S')
-rw-r--r-- | arch/arm/boot/compressed/head.S | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 942fad97e447..e95a5989602a 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -353,7 +353,8 @@ not_relocated: mov r0, #0 | |||
353 | mov r0, #0 @ must be zero | 353 | mov r0, #0 @ must be zero |
354 | mov r1, r7 @ restore architecture number | 354 | mov r1, r7 @ restore architecture number |
355 | mov r2, r8 @ restore atags pointer | 355 | mov r2, r8 @ restore atags pointer |
356 | mov pc, r4 @ call kernel | 356 | ARM( mov pc, r4 ) @ call kernel |
357 | THUMB( bx r4 ) @ entry point is always ARM | ||
357 | 358 | ||
358 | .align 2 | 359 | .align 2 |
359 | .type LC0, #object | 360 | .type LC0, #object |
@@ -597,6 +598,8 @@ __common_mmu_cache_on: | |||
597 | sub pc, lr, r0, lsr #32 @ properly flush pipeline | 598 | sub pc, lr, r0, lsr #32 @ properly flush pipeline |
598 | #endif | 599 | #endif |
599 | 600 | ||
601 | #define PROC_ENTRY_SIZE (4*5) | ||
602 | |||
600 | /* | 603 | /* |
601 | * Here follow the relocatable cache support functions for the | 604 | * Here follow the relocatable cache support functions for the |
602 | * various processors. This is a generic hook for locating an | 605 | * various processors. This is a generic hook for locating an |
@@ -624,7 +627,7 @@ call_cache_fn: adr r12, proc_types | |||
624 | ARM( addeq pc, r12, r3 ) @ call cache function | 627 | ARM( addeq pc, r12, r3 ) @ call cache function |
625 | THUMB( addeq r12, r3 ) | 628 | THUMB( addeq r12, r3 ) |
626 | THUMB( moveq pc, r12 ) @ call cache function | 629 | THUMB( moveq pc, r12 ) @ call cache function |
627 | add r12, r12, #4*5 | 630 | add r12, r12, #PROC_ENTRY_SIZE |
628 | b 1b | 631 | b 1b |
629 | 632 | ||
630 | /* | 633 | /* |
@@ -794,6 +797,16 @@ proc_types: | |||
794 | 797 | ||
795 | .size proc_types, . - proc_types | 798 | .size proc_types, . - proc_types |
796 | 799 | ||
800 | /* | ||
801 | * If you get a "non-constant expression in ".if" statement" | ||
802 | * error from the assembler on this line, check that you have | ||
803 | * not accidentally written a "b" instruction where you should | ||
804 | * have written W(b). | ||
805 | */ | ||
806 | .if (. - proc_types) % PROC_ENTRY_SIZE != 0 | ||
807 | .error "The size of one or more proc_types entries is wrong." | ||
808 | .endif | ||
809 | |||
797 | /* | 810 | /* |
798 | * Turn off the Cache and MMU. ARMv3 does not support | 811 | * Turn off the Cache and MMU. ARMv3 does not support |
799 | * reading the control register, but ARMv4 does. | 812 | * reading the control register, but ARMv4 does. |