aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ppc/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ppc/kernel')
-rw-r--r--arch/ppc/kernel/Makefile7
-rw-r--r--arch/ppc/kernel/asm-offsets.c1
-rw-r--r--arch/ppc/kernel/head.S2
-rw-r--r--arch/ppc/kernel/pci.c4
-rw-r--r--arch/ppc/kernel/process.c6
-rw-r--r--arch/ppc/kernel/setup.c7
-rw-r--r--arch/ppc/kernel/traps.c16
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
10extra-$(CONFIG_8xx) := head_8xx.o 10extra-$(CONFIG_8xx) := head_8xx.o
11extra-$(CONFIG_6xx) += idle_6xx.o 11extra-$(CONFIG_6xx) += idle_6xx.o
12extra-$(CONFIG_POWER4) += idle_power4.o 12extra-$(CONFIG_POWER4) += idle_power4.o
13extra-$(CONFIG_PPC_FPU) += fpu.o
14extra-y += vmlinux.lds 13extra-y += vmlinux.lds
15 14
16obj-y := entry.o traps.o irq.o idle.o time.o misc.o \ 15obj-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
20obj-$(CONFIG_6xx) += l2cr.o cpu_setup_6xx.o 19obj-$(CONFIG_6xx) += l2cr.o cpu_setup_6xx.o
21obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o 20obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o
@@ -26,7 +25,6 @@ obj-$(CONFIG_PCI) += pci.o
26obj-$(CONFIG_KGDB) += ppc-stub.o 25obj-$(CONFIG_KGDB) += ppc-stub.o
27obj-$(CONFIG_SMP) += smp.o smp-tbsync.o 26obj-$(CONFIG_SMP) += smp.o smp-tbsync.o
28obj-$(CONFIG_TAU) += temp.o 27obj-$(CONFIG_TAU) += temp.o
29obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o
30ifndef CONFIG_E200 28ifndef CONFIG_E200
31obj-$(CONFIG_FSL_BOOKE) += perfmon_fsl_booke.o 29obj-$(CONFIG_FSL_BOOKE) += perfmon_fsl_booke.o
32endif 30endif
@@ -37,9 +35,6 @@ obj-$(CONFIG_8xx) += softemu8xx.o
37endif 35endif
38 36
39# These are here while we do the architecture merge 37# These are here while we do the architecture merge
40vecemu-y += ../../powerpc/kernel/vecemu.o
41vector-y += ../../powerpc/kernel/vector.o
42fpu-y += ../../powerpc/kernel/fpu.o
43 38
44else 39else
45obj-y := irq.o idle.o time.o \ 40obj-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}
1035static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL); 1035static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL);
1036 1036
1037#else /* CONFIG_PPC_OF */
1038void 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
560int sys_fork(int p1, int p2, int p3, int p4, int p5, int p6, 560int 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
567int sys_vfork(int p1, int p2, int p3, int p4, int p5, int p6, 568int 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,
87dev_t boot_dev; 87dev_t boot_dev;
88#endif /* CONFIG_PPC_MULTIPLATFORM */ 88#endif /* CONFIG_PPC_MULTIPLATFORM */
89 89
90int have_of;
91EXPORT_SYMBOL(have_of);
92
90#ifdef __DO_IRQ_CANON 93#ifdef __DO_IRQ_CANON
91int ppc_do_canonicalize_irqs; 94int ppc_do_canonicalize_irqs;
92EXPORT_SYMBOL(ppc_do_canonicalize_irqs); 95EXPORT_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
47extern int xmon_bpt(struct pt_regs *regs);
48extern int xmon_sstep(struct pt_regs *regs);
49extern int xmon_iabr_match(struct pt_regs *regs);
50extern int xmon_dabr_match(struct pt_regs *regs);
51
47void (*debugger)(struct pt_regs *regs) = xmon; 52void (*debugger)(struct pt_regs *regs) = xmon;
48int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt; 53int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt;
49int (*debugger_sstep)(struct pt_regs *regs) = xmon_sstep; 54int (*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 */
826void 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
817void altivec_unavailable_exception(struct pt_regs *regs) 833void altivec_unavailable_exception(struct pt_regs *regs)
818{ 834{
819 static int kernel_altivec_count; 835 static int kernel_altivec_count;