diff options
Diffstat (limited to 'arch/ppc/kernel')
-rw-r--r-- | arch/ppc/kernel/Makefile | 7 | ||||
-rw-r--r-- | arch/ppc/kernel/asm-offsets.c | 1 | ||||
-rw-r--r-- | arch/ppc/kernel/head.S | 2 | ||||
-rw-r--r-- | arch/ppc/kernel/pci.c | 4 | ||||
-rw-r--r-- | arch/ppc/kernel/process.c | 6 | ||||
-rw-r--r-- | arch/ppc/kernel/setup.c | 7 | ||||
-rw-r--r-- | arch/ppc/kernel/traps.c | 16 |
7 files changed, 33 insertions, 10 deletions
diff --git a/arch/ppc/kernel/Makefile b/arch/ppc/kernel/Makefile index 74b30978619f..59b6b62d1120 100644 --- a/arch/ppc/kernel/Makefile +++ b/arch/ppc/kernel/Makefile | |||
@@ -10,12 +10,11 @@ extra-$(CONFIG_FSL_BOOKE) := head_fsl_booke.o | |||
10 | extra-$(CONFIG_8xx) := head_8xx.o | 10 | extra-$(CONFIG_8xx) := head_8xx.o |
11 | extra-$(CONFIG_6xx) += idle_6xx.o | 11 | extra-$(CONFIG_6xx) += idle_6xx.o |
12 | extra-$(CONFIG_POWER4) += idle_power4.o | 12 | extra-$(CONFIG_POWER4) += idle_power4.o |
13 | extra-$(CONFIG_PPC_FPU) += fpu.o | ||
14 | extra-y += vmlinux.lds | 13 | extra-y += vmlinux.lds |
15 | 14 | ||
16 | obj-y := entry.o traps.o irq.o idle.o time.o misc.o \ | 15 | obj-y := entry.o traps.o irq.o idle.o time.o misc.o \ |
17 | process.o signal.o ptrace.o align.o \ | 16 | process.o signal.o ptrace.o align.o \ |
18 | semaphore.o syscalls.o setup.o \ | 17 | syscalls.o setup.o \ |
19 | cputable.o ppc_htab.o perfmon.o | 18 | cputable.o ppc_htab.o perfmon.o |
20 | obj-$(CONFIG_6xx) += l2cr.o cpu_setup_6xx.o | 19 | obj-$(CONFIG_6xx) += l2cr.o cpu_setup_6xx.o |
21 | obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o | 20 | obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o |
@@ -26,7 +25,6 @@ obj-$(CONFIG_PCI) += pci.o | |||
26 | obj-$(CONFIG_KGDB) += ppc-stub.o | 25 | obj-$(CONFIG_KGDB) += ppc-stub.o |
27 | obj-$(CONFIG_SMP) += smp.o smp-tbsync.o | 26 | obj-$(CONFIG_SMP) += smp.o smp-tbsync.o |
28 | obj-$(CONFIG_TAU) += temp.o | 27 | obj-$(CONFIG_TAU) += temp.o |
29 | obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o | ||
30 | ifndef CONFIG_E200 | 28 | ifndef CONFIG_E200 |
31 | obj-$(CONFIG_FSL_BOOKE) += perfmon_fsl_booke.o | 29 | obj-$(CONFIG_FSL_BOOKE) += perfmon_fsl_booke.o |
32 | endif | 30 | endif |
@@ -37,9 +35,6 @@ obj-$(CONFIG_8xx) += softemu8xx.o | |||
37 | endif | 35 | endif |
38 | 36 | ||
39 | # These are here while we do the architecture merge | 37 | # These are here while we do the architecture merge |
40 | vecemu-y += ../../powerpc/kernel/vecemu.o | ||
41 | vector-y += ../../powerpc/kernel/vector.o | ||
42 | fpu-y += ../../powerpc/kernel/fpu.o | ||
43 | 38 | ||
44 | else | 39 | else |
45 | obj-y := irq.o idle.o time.o \ | 40 | obj-y := irq.o idle.o time.o \ |
diff --git a/arch/ppc/kernel/asm-offsets.c b/arch/ppc/kernel/asm-offsets.c index d9ad1d776d0e..7972db1f6570 100644 --- a/arch/ppc/kernel/asm-offsets.c +++ b/arch/ppc/kernel/asm-offsets.c | |||
@@ -141,6 +141,7 @@ main(void) | |||
141 | DEFINE(pbe_orig_address, offsetof(struct pbe, orig_address)); | 141 | DEFINE(pbe_orig_address, offsetof(struct pbe, orig_address)); |
142 | DEFINE(pbe_next, offsetof(struct pbe, next)); | 142 | DEFINE(pbe_next, offsetof(struct pbe, next)); |
143 | 143 | ||
144 | DEFINE(TASK_SIZE, TASK_SIZE); | ||
144 | DEFINE(NUM_USER_SEGMENTS, TASK_SIZE>>28); | 145 | DEFINE(NUM_USER_SEGMENTS, TASK_SIZE>>28); |
145 | return 0; | 146 | return 0; |
146 | } | 147 | } |
diff --git a/arch/ppc/kernel/head.S b/arch/ppc/kernel/head.S index 2c3a1d34e3c7..5b43987a943b 100644 --- a/arch/ppc/kernel/head.S +++ b/arch/ppc/kernel/head.S | |||
@@ -467,7 +467,7 @@ FPUnavailable: | |||
467 | EXCEPTION_PROLOG | 467 | EXCEPTION_PROLOG |
468 | bne load_up_fpu /* if from user, just load it up */ | 468 | bne load_up_fpu /* if from user, just load it up */ |
469 | addi r3,r1,STACK_FRAME_OVERHEAD | 469 | addi r3,r1,STACK_FRAME_OVERHEAD |
470 | EXC_XFER_EE_LITE(0x800, KernelFP) | 470 | EXC_XFER_EE_LITE(0x800, kernel_fp_unavailable_exception) |
471 | 471 | ||
472 | /* Decrementer */ | 472 | /* Decrementer */ |
473 | EXCEPTION(0x900, Decrementer, timer_interrupt, EXC_XFER_LITE) | 473 | EXCEPTION(0x900, Decrementer, timer_interrupt, EXC_XFER_LITE) |
diff --git a/arch/ppc/kernel/pci.c b/arch/ppc/kernel/pci.c index 6600fd485b50..163276be7cc5 100644 --- a/arch/ppc/kernel/pci.c +++ b/arch/ppc/kernel/pci.c | |||
@@ -1034,6 +1034,10 @@ static ssize_t pci_show_devspec(struct device *dev, struct device_attribute *att | |||
1034 | } | 1034 | } |
1035 | static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL); | 1035 | static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL); |
1036 | 1036 | ||
1037 | #else /* CONFIG_PPC_OF */ | ||
1038 | void pcibios_make_OF_bus_map(void) | ||
1039 | { | ||
1040 | } | ||
1037 | #endif /* CONFIG_PPC_OF */ | 1041 | #endif /* CONFIG_PPC_OF */ |
1038 | 1042 | ||
1039 | /* Add sysfs properties */ | 1043 | /* Add sysfs properties */ |
diff --git a/arch/ppc/kernel/process.c b/arch/ppc/kernel/process.c index 82de66e4db6d..0870e5553453 100644 --- a/arch/ppc/kernel/process.c +++ b/arch/ppc/kernel/process.c | |||
@@ -557,14 +557,16 @@ int sys_clone(unsigned long clone_flags, unsigned long usp, | |||
557 | return do_fork(clone_flags, usp, regs, 0, parent_tidp, child_tidp); | 557 | return do_fork(clone_flags, usp, regs, 0, parent_tidp, child_tidp); |
558 | } | 558 | } |
559 | 559 | ||
560 | int sys_fork(int p1, int p2, int p3, int p4, int p5, int p6, | 560 | int sys_fork(unsigned long p1, unsigned long p2, unsigned long p3, |
561 | unsigned long p4, unsigned long p5, unsigned long p6, | ||
561 | struct pt_regs *regs) | 562 | struct pt_regs *regs) |
562 | { | 563 | { |
563 | CHECK_FULL_REGS(regs); | 564 | CHECK_FULL_REGS(regs); |
564 | return do_fork(SIGCHLD, regs->gpr[1], regs, 0, NULL, NULL); | 565 | return do_fork(SIGCHLD, regs->gpr[1], regs, 0, NULL, NULL); |
565 | } | 566 | } |
566 | 567 | ||
567 | int sys_vfork(int p1, int p2, int p3, int p4, int p5, int p6, | 568 | int sys_vfork(unsigned long p1, unsigned long p2, unsigned long p3, |
569 | unsigned long p4, unsigned long p5, unsigned long p6, | ||
568 | struct pt_regs *regs) | 570 | struct pt_regs *regs) |
569 | { | 571 | { |
570 | CHECK_FULL_REGS(regs); | 572 | CHECK_FULL_REGS(regs); |
diff --git a/arch/ppc/kernel/setup.c b/arch/ppc/kernel/setup.c index fae6335193ef..6bcb85d2b7fd 100644 --- a/arch/ppc/kernel/setup.c +++ b/arch/ppc/kernel/setup.c | |||
@@ -87,6 +87,9 @@ extern void chrp_init(unsigned long r3, unsigned long r4, | |||
87 | dev_t boot_dev; | 87 | dev_t boot_dev; |
88 | #endif /* CONFIG_PPC_MULTIPLATFORM */ | 88 | #endif /* CONFIG_PPC_MULTIPLATFORM */ |
89 | 89 | ||
90 | int have_of; | ||
91 | EXPORT_SYMBOL(have_of); | ||
92 | |||
90 | #ifdef __DO_IRQ_CANON | 93 | #ifdef __DO_IRQ_CANON |
91 | int ppc_do_canonicalize_irqs; | 94 | int ppc_do_canonicalize_irqs; |
92 | EXPORT_SYMBOL(ppc_do_canonicalize_irqs); | 95 | EXPORT_SYMBOL(ppc_do_canonicalize_irqs); |
@@ -420,6 +423,8 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5, | |||
420 | } | 423 | } |
421 | #endif | 424 | #endif |
422 | 425 | ||
426 | have_of = 1; | ||
427 | |||
423 | /* prom_init has already been called from __start */ | 428 | /* prom_init has already been called from __start */ |
424 | if (boot_infos) | 429 | if (boot_infos) |
425 | relocate_nodes(); | 430 | relocate_nodes(); |
@@ -735,7 +740,7 @@ void __init setup_arch(char **cmdline_p) | |||
735 | #endif | 740 | #endif |
736 | 741 | ||
737 | #ifdef CONFIG_XMON | 742 | #ifdef CONFIG_XMON |
738 | xmon_map_scc(); | 743 | xmon_init(1); |
739 | if (strstr(cmd_line, "xmon")) | 744 | if (strstr(cmd_line, "xmon")) |
740 | xmon(NULL); | 745 | xmon(NULL); |
741 | #endif /* CONFIG_XMON */ | 746 | #endif /* CONFIG_XMON */ |
diff --git a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c index 26606aa33de6..3145e9773db9 100644 --- a/arch/ppc/kernel/traps.c +++ b/arch/ppc/kernel/traps.c | |||
@@ -44,6 +44,11 @@ | |||
44 | #include <asm/perfmon.h> | 44 | #include <asm/perfmon.h> |
45 | 45 | ||
46 | #ifdef CONFIG_XMON | 46 | #ifdef CONFIG_XMON |
47 | extern int xmon_bpt(struct pt_regs *regs); | ||
48 | extern int xmon_sstep(struct pt_regs *regs); | ||
49 | extern int xmon_iabr_match(struct pt_regs *regs); | ||
50 | extern int xmon_dabr_match(struct pt_regs *regs); | ||
51 | |||
47 | void (*debugger)(struct pt_regs *regs) = xmon; | 52 | void (*debugger)(struct pt_regs *regs) = xmon; |
48 | int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt; | 53 | int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt; |
49 | int (*debugger_sstep)(struct pt_regs *regs) = xmon_sstep; | 54 | int (*debugger_sstep)(struct pt_regs *regs) = xmon_sstep; |
@@ -814,6 +819,17 @@ void TAUException(struct pt_regs *regs) | |||
814 | } | 819 | } |
815 | #endif /* CONFIG_INT_TAU */ | 820 | #endif /* CONFIG_INT_TAU */ |
816 | 821 | ||
822 | /* | ||
823 | * FP unavailable trap from kernel - print a message, but let | ||
824 | * the task use FP in the kernel until it returns to user mode. | ||
825 | */ | ||
826 | void kernel_fp_unavailable_exception(struct pt_regs *regs) | ||
827 | { | ||
828 | regs->msr |= MSR_FP; | ||
829 | printk(KERN_ERR "floating point used in kernel (task=%p, pc=%lx)\n", | ||
830 | current, regs->nip); | ||
831 | } | ||
832 | |||
817 | void altivec_unavailable_exception(struct pt_regs *regs) | 833 | void altivec_unavailable_exception(struct pt_regs *regs) |
818 | { | 834 | { |
819 | static int kernel_altivec_count; | 835 | static int kernel_altivec_count; |