diff options
Diffstat (limited to 'arch/arm/kernel')
| -rw-r--r-- | arch/arm/kernel/Makefile | 3 | ||||
| -rw-r--r-- | arch/arm/kernel/entry-armv.S | 21 | ||||
| -rw-r--r-- | arch/arm/kernel/head.S | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/isa.c | 63 | ||||
| -rw-r--r-- | arch/arm/kernel/traps.c | 2 |
5 files changed, 57 insertions, 34 deletions
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index f0c0cdb1c183..1320a0efca73 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile | |||
| @@ -13,12 +13,11 @@ obj-y := compat.o entry-armv.o entry-common.o irq.o \ | |||
| 13 | obj-$(CONFIG_APM) += apm.o | 13 | obj-$(CONFIG_APM) += apm.o |
| 14 | obj-$(CONFIG_ISA_DMA_API) += dma.o | 14 | obj-$(CONFIG_ISA_DMA_API) += dma.o |
| 15 | obj-$(CONFIG_ARCH_ACORN) += ecard.o | 15 | obj-$(CONFIG_ARCH_ACORN) += ecard.o |
| 16 | obj-$(CONFIG_FOOTBRIDGE) += isa.o | ||
| 17 | obj-$(CONFIG_FIQ) += fiq.o | 16 | obj-$(CONFIG_FIQ) += fiq.o |
| 18 | obj-$(CONFIG_MODULES) += armksyms.o module.o | 17 | obj-$(CONFIG_MODULES) += armksyms.o module.o |
| 19 | obj-$(CONFIG_ARTHUR) += arthur.o | 18 | obj-$(CONFIG_ARTHUR) += arthur.o |
| 20 | obj-$(CONFIG_ISA_DMA) += dma-isa.o | 19 | obj-$(CONFIG_ISA_DMA) += dma-isa.o |
| 21 | obj-$(CONFIG_PCI) += bios32.o | 20 | obj-$(CONFIG_PCI) += bios32.o isa.o |
| 22 | obj-$(CONFIG_SMP) += smp.o | 21 | obj-$(CONFIG_SMP) += smp.o |
| 23 | obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o | 22 | obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o |
| 24 | 23 | ||
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 7ea5f01dfc7b..de4e33137901 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
| @@ -634,6 +634,14 @@ ENTRY(__switch_to) | |||
| 634 | * purpose. | 634 | * purpose. |
| 635 | */ | 635 | */ |
| 636 | 636 | ||
| 637 | .macro usr_ret, reg | ||
| 638 | #ifdef CONFIG_ARM_THUMB | ||
| 639 | bx \reg | ||
| 640 | #else | ||
| 641 | mov pc, \reg | ||
| 642 | #endif | ||
| 643 | .endm | ||
| 644 | |||
| 637 | .align 5 | 645 | .align 5 |
| 638 | .globl __kuser_helper_start | 646 | .globl __kuser_helper_start |
| 639 | __kuser_helper_start: | 647 | __kuser_helper_start: |
| @@ -675,7 +683,7 @@ __kuser_memory_barrier: @ 0xffff0fa0 | |||
| 675 | #if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP) | 683 | #if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP) |
| 676 | mcr p15, 0, r0, c7, c10, 5 @ dmb | 684 | mcr p15, 0, r0, c7, c10, 5 @ dmb |
| 677 | #endif | 685 | #endif |
| 678 | mov pc, lr | 686 | usr_ret lr |
| 679 | 687 | ||
| 680 | .align 5 | 688 | .align 5 |
| 681 | 689 | ||
| @@ -778,7 +786,7 @@ __kuser_cmpxchg: @ 0xffff0fc0 | |||
| 778 | mov r0, #-1 | 786 | mov r0, #-1 |
| 779 | adds r0, r0, #0 | 787 | adds r0, r0, #0 |
| 780 | #endif | 788 | #endif |
| 781 | mov pc, lr | 789 | usr_ret lr |
| 782 | 790 | ||
| 783 | #else | 791 | #else |
| 784 | 792 | ||
| @@ -792,7 +800,7 @@ __kuser_cmpxchg: @ 0xffff0fc0 | |||
| 792 | #ifdef CONFIG_SMP | 800 | #ifdef CONFIG_SMP |
| 793 | mcr p15, 0, r0, c7, c10, 5 @ dmb | 801 | mcr p15, 0, r0, c7, c10, 5 @ dmb |
| 794 | #endif | 802 | #endif |
| 795 | mov pc, lr | 803 | usr_ret lr |
| 796 | 804 | ||
| 797 | #endif | 805 | #endif |
| 798 | 806 | ||
| @@ -834,16 +842,11 @@ __kuser_cmpxchg: @ 0xffff0fc0 | |||
| 834 | __kuser_get_tls: @ 0xffff0fe0 | 842 | __kuser_get_tls: @ 0xffff0fe0 |
| 835 | 843 | ||
| 836 | #if !defined(CONFIG_HAS_TLS_REG) && !defined(CONFIG_TLS_REG_EMUL) | 844 | #if !defined(CONFIG_HAS_TLS_REG) && !defined(CONFIG_TLS_REG_EMUL) |
| 837 | |||
| 838 | ldr r0, [pc, #(16 - 8)] @ TLS stored at 0xffff0ff0 | 845 | ldr r0, [pc, #(16 - 8)] @ TLS stored at 0xffff0ff0 |
| 839 | mov pc, lr | ||
| 840 | |||
| 841 | #else | 846 | #else |
| 842 | |||
| 843 | mrc p15, 0, r0, c13, c0, 3 @ read TLS register | 847 | mrc p15, 0, r0, c13, c0, 3 @ read TLS register |
| 844 | mov pc, lr | ||
| 845 | |||
| 846 | #endif | 848 | #endif |
| 849 | usr_ret lr | ||
| 847 | 850 | ||
| 848 | .rep 5 | 851 | .rep 5 |
| 849 | .word 0 @ pad up to __kuser_helper_version | 852 | .word 0 @ pad up to __kuser_helper_version |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 4fe386eea4b4..5365d4e5949e 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
| @@ -118,7 +118,7 @@ ENTRY(secondary_startup) | |||
| 118 | sub r4, r4, r5 @ mmu has been enabled | 118 | sub r4, r4, r5 @ mmu has been enabled |
| 119 | ldr r4, [r7, r4] @ get secondary_data.pgdir | 119 | ldr r4, [r7, r4] @ get secondary_data.pgdir |
| 120 | adr lr, __enable_mmu @ return address | 120 | adr lr, __enable_mmu @ return address |
| 121 | add pc, r10, #12 @ initialise processor | 121 | add pc, r10, #PROCINFO_INITFUNC @ initialise processor |
| 122 | @ (return control reg) | 122 | @ (return control reg) |
| 123 | 123 | ||
| 124 | /* | 124 | /* |
diff --git a/arch/arm/kernel/isa.c b/arch/arm/kernel/isa.c index 685c3e591a7e..54bbd9fe255c 100644 --- a/arch/arm/kernel/isa.c +++ b/arch/arm/kernel/isa.c | |||
| @@ -3,21 +3,14 @@ | |||
| 3 | * | 3 | * |
| 4 | * Copyright (C) 1999 Phil Blundell | 4 | * Copyright (C) 1999 Phil Blundell |
| 5 | * | 5 | * |
| 6 | * ISA shared memory and I/O port support | ||
| 7 | */ | ||
| 8 | |||
| 9 | /* | ||
| 10 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
| 11 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
| 12 | * as published by the Free Software Foundation; either version | 8 | * as published by the Free Software Foundation; either version |
| 13 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
| 10 | * | ||
| 11 | * ISA shared memory and I/O port support, and is required to support | ||
| 12 | * iopl, inb, outb and friends in userspace via glibc emulation. | ||
| 14 | */ | 13 | */ |
| 15 | |||
| 16 | /* | ||
| 17 | * Nothing about this is actually ARM specific. One day we could move | ||
| 18 | * it into kernel/resource.c or some place like that. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #include <linux/stddef.h> | 14 | #include <linux/stddef.h> |
| 22 | #include <linux/types.h> | 15 | #include <linux/types.h> |
| 23 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
| @@ -27,21 +20,49 @@ | |||
| 27 | static unsigned int isa_membase, isa_portbase, isa_portshift; | 20 | static unsigned int isa_membase, isa_portbase, isa_portshift; |
| 28 | 21 | ||
| 29 | static ctl_table ctl_isa_vars[4] = { | 22 | static ctl_table ctl_isa_vars[4] = { |
| 30 | {BUS_ISA_MEM_BASE, "membase", &isa_membase, | 23 | { |
| 31 | sizeof(isa_membase), 0444, NULL, &proc_dointvec}, | 24 | .ctl_name = BUS_ISA_MEM_BASE, |
| 32 | {BUS_ISA_PORT_BASE, "portbase", &isa_portbase, | 25 | .procname = "membase", |
| 33 | sizeof(isa_portbase), 0444, NULL, &proc_dointvec}, | 26 | .data = &isa_membase, |
| 34 | {BUS_ISA_PORT_SHIFT, "portshift", &isa_portshift, | 27 | .maxlen = sizeof(isa_membase), |
| 35 | sizeof(isa_portshift), 0444, NULL, &proc_dointvec}, | 28 | .mode = 0444, |
| 36 | {0} | 29 | .proc_handler = &proc_dointvec, |
| 30 | }, { | ||
| 31 | .ctl_name = BUS_ISA_PORT_BASE, | ||
| 32 | .procname = "portbase", | ||
| 33 | .data = &isa_portbase, | ||
| 34 | .maxlen = sizeof(isa_portbase), | ||
| 35 | .mode = 0444, | ||
| 36 | .proc_handler = &proc_dointvec, | ||
| 37 | }, { | ||
| 38 | .ctl_name = BUS_ISA_PORT_SHIFT, | ||
| 39 | .procname = "portshift", | ||
| 40 | .data = &isa_portshift, | ||
| 41 | .maxlen = sizeof(isa_portshift), | ||
| 42 | .mode = 0444, | ||
| 43 | .proc_handler = &proc_dointvec, | ||
| 44 | }, {0} | ||
| 37 | }; | 45 | }; |
| 38 | 46 | ||
| 39 | static struct ctl_table_header *isa_sysctl_header; | 47 | static struct ctl_table_header *isa_sysctl_header; |
| 40 | 48 | ||
| 41 | static ctl_table ctl_isa[2] = {{CTL_BUS_ISA, "isa", NULL, 0, 0555, ctl_isa_vars}, | 49 | static ctl_table ctl_isa[2] = { |
| 42 | {0}}; | 50 | { |
| 43 | static ctl_table ctl_bus[2] = {{CTL_BUS, "bus", NULL, 0, 0555, ctl_isa}, | 51 | .ctl_name = CTL_BUS_ISA, |
| 44 | {0}}; | 52 | .procname = "isa", |
| 53 | .mode = 0555, | ||
| 54 | .child = ctl_isa_vars, | ||
| 55 | }, {0} | ||
| 56 | }; | ||
| 57 | |||
| 58 | static ctl_table ctl_bus[2] = { | ||
| 59 | { | ||
| 60 | .ctl_name = CTL_BUS, | ||
| 61 | .procname = "bus", | ||
| 62 | .mode = 0555, | ||
| 63 | .child = ctl_isa, | ||
| 64 | }, {0} | ||
| 65 | }; | ||
| 45 | 66 | ||
| 46 | void __init | 67 | void __init |
| 47 | register_isa_ports(unsigned int membase, unsigned int portbase, unsigned int portshift) | 68 | register_isa_ports(unsigned int membase, unsigned int portbase, unsigned int portshift) |
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 4e29dd03e582..aeeed806f991 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
| @@ -233,7 +233,7 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err) | |||
| 233 | spin_unlock_irq(&die_lock); | 233 | spin_unlock_irq(&die_lock); |
| 234 | 234 | ||
| 235 | if (panic_on_oops) | 235 | if (panic_on_oops) |
| 236 | panic("Fatal exception: panic_on_oops"); | 236 | panic("Fatal exception"); |
| 237 | 237 | ||
| 238 | do_exit(SIGSEGV); | 238 | do_exit(SIGSEGV); |
| 239 | } | 239 | } |
