diff options
Diffstat (limited to 'arch/arm/boot/compressed/head.S')
-rw-r--r-- | arch/arm/boot/compressed/head.S | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 84a1e0496a3c..77d614232d81 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -624,6 +624,12 @@ proc_types: | |||
624 | b __armv4_mmu_cache_off | 624 | b __armv4_mmu_cache_off |
625 | b __armv4_mmu_cache_flush | 625 | b __armv4_mmu_cache_flush |
626 | 626 | ||
627 | .word 0x56056930 | ||
628 | .word 0xff0ffff0 @ PXA935 | ||
629 | b __armv4_mmu_cache_on | ||
630 | b __armv4_mmu_cache_off | ||
631 | b __armv4_mmu_cache_flush | ||
632 | |||
627 | .word 0x56050000 @ Feroceon | 633 | .word 0x56050000 @ Feroceon |
628 | .word 0xff0f0000 | 634 | .word 0xff0f0000 |
629 | b __armv4_mmu_cache_on | 635 | b __armv4_mmu_cache_on |
@@ -717,6 +723,9 @@ __armv7_mmu_cache_off: | |||
717 | bl __armv7_mmu_cache_flush | 723 | bl __armv7_mmu_cache_flush |
718 | mov r0, #0 | 724 | mov r0, #0 |
719 | mcr p15, 0, r0, c8, c7, 0 @ invalidate whole TLB | 725 | mcr p15, 0, r0, c8, c7, 0 @ invalidate whole TLB |
726 | mcr p15, 0, r0, c7, c5, 6 @ invalidate BTC | ||
727 | mcr p15, 0, r0, c7, c10, 4 @ DSB | ||
728 | mcr p15, 0, r0, c7, c5, 4 @ ISB | ||
720 | mov pc, r12 | 729 | mov pc, r12 |
721 | 730 | ||
722 | __arm6_mmu_cache_off: | 731 | __arm6_mmu_cache_off: |
@@ -778,12 +787,13 @@ __armv6_mmu_cache_flush: | |||
778 | __armv7_mmu_cache_flush: | 787 | __armv7_mmu_cache_flush: |
779 | mrc p15, 0, r10, c0, c1, 5 @ read ID_MMFR1 | 788 | mrc p15, 0, r10, c0, c1, 5 @ read ID_MMFR1 |
780 | tst r10, #0xf << 16 @ hierarchical cache (ARMv7) | 789 | tst r10, #0xf << 16 @ hierarchical cache (ARMv7) |
781 | beq hierarchical | ||
782 | mov r10, #0 | 790 | mov r10, #0 |
791 | beq hierarchical | ||
783 | mcr p15, 0, r10, c7, c14, 0 @ clean+invalidate D | 792 | mcr p15, 0, r10, c7, c14, 0 @ clean+invalidate D |
784 | b iflush | 793 | b iflush |
785 | hierarchical: | 794 | hierarchical: |
786 | stmfd sp!, {r0-r5, r7, r9-r11} | 795 | mcr p15, 0, r10, c7, c10, 5 @ DMB |
796 | stmfd sp!, {r0-r5, r7, r9, r11} | ||
787 | mrc p15, 1, r0, c0, c0, 1 @ read clidr | 797 | mrc p15, 1, r0, c0, c0, 1 @ read clidr |
788 | ands r3, r0, #0x7000000 @ extract loc from clidr | 798 | ands r3, r0, #0x7000000 @ extract loc from clidr |
789 | mov r3, r3, lsr #23 @ left align loc bit field | 799 | mov r3, r3, lsr #23 @ left align loc bit field |
@@ -820,12 +830,14 @@ skip: | |||
820 | cmp r3, r10 | 830 | cmp r3, r10 |
821 | bgt loop1 | 831 | bgt loop1 |
822 | finished: | 832 | finished: |
833 | ldmfd sp!, {r0-r5, r7, r9, r11} | ||
823 | mov r10, #0 @ swith back to cache level 0 | 834 | mov r10, #0 @ swith back to cache level 0 |
824 | mcr p15, 2, r10, c0, c0, 0 @ select current cache level in cssr | 835 | mcr p15, 2, r10, c0, c0, 0 @ select current cache level in cssr |
825 | ldmfd sp!, {r0-r5, r7, r9-r11} | ||
826 | iflush: | 836 | iflush: |
837 | mcr p15, 0, r10, c7, c10, 4 @ DSB | ||
827 | mcr p15, 0, r10, c7, c5, 0 @ invalidate I+BTB | 838 | mcr p15, 0, r10, c7, c5, 0 @ invalidate I+BTB |
828 | mcr p15, 0, r10, c7, c10, 4 @ drain WB | 839 | mcr p15, 0, r10, c7, c10, 4 @ DSB |
840 | mcr p15, 0, r10, c7, c5, 4 @ ISB | ||
829 | mov pc, lr | 841 | mov pc, lr |
830 | 842 | ||
831 | __armv5tej_mmu_cache_flush: | 843 | __armv5tej_mmu_cache_flush: |