diff options
Diffstat (limited to 'arch/arm/boot')
-rw-r--r-- | arch/arm/boot/compressed/head.S | 18 | ||||
-rw-r--r-- | arch/arm/boot/compressed/misc.c | 15 | ||||
-rw-r--r-- | arch/arm/boot/compressed/vmlinux.lds.in | 5 |
3 files changed, 38 insertions, 0 deletions
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index def02483286a..b371fba1b954 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -27,6 +27,12 @@ | |||
27 | .macro writeb, ch, rb | 27 | .macro writeb, ch, rb |
28 | mcr p14, 0, \ch, c0, c5, 0 | 28 | mcr p14, 0, \ch, c0, c5, 0 |
29 | .endm | 29 | .endm |
30 | #elif defined(CONFIG_CPU_XSCALE) | ||
31 | .macro loadsp, rb | ||
32 | .endm | ||
33 | .macro writeb, ch, rb | ||
34 | mcr p14, 0, \ch, c8, c0, 0 | ||
35 | .endm | ||
30 | #else | 36 | #else |
31 | .macro loadsp, rb | 37 | .macro loadsp, rb |
32 | .endm | 38 | .endm |
@@ -644,6 +650,18 @@ proc_types: | |||
644 | b __armv4_mmu_cache_off | 650 | b __armv4_mmu_cache_off |
645 | b __armv4_mmu_cache_flush | 651 | b __armv4_mmu_cache_flush |
646 | 652 | ||
653 | .word 0x56158000 @ PXA168 | ||
654 | .word 0xfffff000 | ||
655 | b __armv4_mmu_cache_on | ||
656 | b __armv4_mmu_cache_off | ||
657 | b __armv5tej_mmu_cache_flush | ||
658 | |||
659 | .word 0x56056930 | ||
660 | .word 0xff0ffff0 @ PXA935 | ||
661 | b __armv4_mmu_cache_on | ||
662 | b __armv4_mmu_cache_off | ||
663 | b __armv4_mmu_cache_flush | ||
664 | |||
647 | .word 0x56050000 @ Feroceon | 665 | .word 0x56050000 @ Feroceon |
648 | .word 0xff0f0000 | 666 | .word 0xff0f0000 |
649 | b __armv4_mmu_cache_on | 667 | b __armv4_mmu_cache_on |
diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c index 3fc08413fff0..393c81641314 100644 --- a/arch/arm/boot/compressed/misc.c +++ b/arch/arm/boot/compressed/misc.c | |||
@@ -46,6 +46,21 @@ static void icedcc_putc(int ch) | |||
46 | 46 | ||
47 | asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch)); | 47 | asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch)); |
48 | } | 48 | } |
49 | #elif defined(CONFIG_CPU_XSCALE) | ||
50 | |||
51 | static void icedcc_putc(int ch) | ||
52 | { | ||
53 | int status, i = 0x4000000; | ||
54 | |||
55 | do { | ||
56 | if (--i < 0) | ||
57 | return; | ||
58 | |||
59 | asm volatile ("mrc p14, 0, %0, c14, c0, 0" : "=r" (status)); | ||
60 | } while (status & (1 << 28)); | ||
61 | |||
62 | asm("mcr p14, 0, %0, c8, c0, 0" : : "r" (ch)); | ||
63 | } | ||
49 | 64 | ||
50 | #else | 65 | #else |
51 | 66 | ||
diff --git a/arch/arm/boot/compressed/vmlinux.lds.in b/arch/arm/boot/compressed/vmlinux.lds.in index 153a07e7222b..a5924b9b88bd 100644 --- a/arch/arm/boot/compressed/vmlinux.lds.in +++ b/arch/arm/boot/compressed/vmlinux.lds.in | |||
@@ -11,6 +11,11 @@ OUTPUT_ARCH(arm) | |||
11 | ENTRY(_start) | 11 | ENTRY(_start) |
12 | SECTIONS | 12 | SECTIONS |
13 | { | 13 | { |
14 | /DISCARD/ : { | ||
15 | *(.ARM.exidx*) | ||
16 | *(.ARM.extab*) | ||
17 | } | ||
18 | |||
14 | . = TEXT_START; | 19 | . = TEXT_START; |
15 | _text = .; | 20 | _text = .; |
16 | 21 | ||