aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2005-09-28 06:28:14 -0400
committerPaul Mackerras <paulus@samba.org>2005-09-28 06:28:14 -0400
commit20c8c2106305729e7d5e06f6c3d390e965a3dd34 (patch)
tree23ae68e9ed3c7bdb1fccb19a761904a67c671f57 /arch/powerpc
parenta3a9e99e36b2897b3e038869e61f363d62434086 (diff)
powerpc: Fixes to get the merged kernel to boot on powermac.
This merges ppc_ksyms.c, puts back the actual do_execve call in sys_execve, makes init_MMU call find_end_of_memory rather than ppc_md.find_end_of_memory (every platform has a device tree with a /memory node now, right?) and fixes some problems with the mpic initialization on newworld powermacs. Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/kernel/Makefile2
-rw-r--r--arch/powerpc/kernel/ppc_ksyms.c338
-rw-r--r--arch/powerpc/kernel/process.c2
-rw-r--r--arch/powerpc/mm/init.c2
-rw-r--r--arch/powerpc/platforms/powermac/pmac_pic.c17
5 files changed, 359 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index 62c4a51a23d7..58c130b10ec8 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -14,5 +14,5 @@ extra-$(CONFIG_PPC_FPU) += fpu.o
14extra-y += vmlinux.lds 14extra-y += vmlinux.lds
15 15
16obj-y := semaphore.o traps.o process.o 16obj-y := semaphore.o traps.o process.o
17 17obj-$(CONFIG_MODULES) += ppc_ksyms.o
18obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o 18obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c
new file mode 100644
index 000000000000..7bfa0f0121ff
--- /dev/null
+++ b/arch/powerpc/kernel/ppc_ksyms.c
@@ -0,0 +1,338 @@
1#include <linux/config.h>
2#include <linux/module.h>
3#include <linux/threads.h>
4#include <linux/smp.h>
5#include <linux/sched.h>
6#include <linux/elfcore.h>
7#include <linux/string.h>
8#include <linux/interrupt.h>
9#include <linux/tty.h>
10#include <linux/vt_kern.h>
11#include <linux/nvram.h>
12#include <linux/console.h>
13#include <linux/irq.h>
14#include <linux/pci.h>
15#include <linux/delay.h>
16#include <linux/ide.h>
17#include <linux/pm.h>
18#include <linux/bitops.h>
19
20#include <asm/page.h>
21#include <asm/semaphore.h>
22#include <asm/processor.h>
23#include <asm/uaccess.h>
24#include <asm/io.h>
25#include <asm/ide.h>
26#include <asm/atomic.h>
27#include <asm/checksum.h>
28#include <asm/pgtable.h>
29#include <asm/tlbflush.h>
30#include <linux/adb.h>
31#include <linux/cuda.h>
32#include <linux/pmu.h>
33#include <asm/prom.h>
34#include <asm/system.h>
35#include <asm/pci-bridge.h>
36#include <asm/irq.h>
37#include <asm/pmac_feature.h>
38#include <asm/dma.h>
39#include <asm/machdep.h>
40#include <asm/hw_irq.h>
41#include <asm/nvram.h>
42#include <asm/mmu_context.h>
43#include <asm/backlight.h>
44#include <asm/time.h>
45#include <asm/cputable.h>
46#include <asm/btext.h>
47#include <asm/div64.h>
48#include <asm/xmon.h>
49
50#ifdef CONFIG_8xx
51#include <asm/commproc.h>
52#endif
53
54extern void transfer_to_handler(void);
55extern void do_IRQ(struct pt_regs *regs);
56extern void MachineCheckException(struct pt_regs *regs);
57extern void AlignmentException(struct pt_regs *regs);
58extern void ProgramCheckException(struct pt_regs *regs);
59extern void SingleStepException(struct pt_regs *regs);
60extern int do_signal(sigset_t *, struct pt_regs *);
61extern int pmac_newworld;
62extern int sys_sigreturn(struct pt_regs *regs);
63
64long long __ashrdi3(long long, int);
65long long __ashldi3(long long, int);
66long long __lshrdi3(long long, int);
67
68extern unsigned long mm_ptov (unsigned long paddr);
69
70EXPORT_SYMBOL(clear_pages);
71EXPORT_SYMBOL(clear_user_page);
72EXPORT_SYMBOL(do_signal);
73EXPORT_SYMBOL(transfer_to_handler);
74EXPORT_SYMBOL(do_IRQ);
75EXPORT_SYMBOL(MachineCheckException);
76EXPORT_SYMBOL(AlignmentException);
77EXPORT_SYMBOL(ProgramCheckException);
78EXPORT_SYMBOL(SingleStepException);
79EXPORT_SYMBOL(sys_sigreturn);
80EXPORT_SYMBOL(ppc_n_lost_interrupts);
81EXPORT_SYMBOL(ppc_lost_interrupts);
82
83EXPORT_SYMBOL(ISA_DMA_THRESHOLD);
84EXPORT_SYMBOL(DMA_MODE_READ);
85EXPORT_SYMBOL(DMA_MODE_WRITE);
86#if defined(CONFIG_PPC_PREP)
87EXPORT_SYMBOL(_prep_type);
88EXPORT_SYMBOL(ucSystemType);
89#endif
90
91#if !defined(__INLINE_BITOPS)
92EXPORT_SYMBOL(set_bit);
93EXPORT_SYMBOL(clear_bit);
94EXPORT_SYMBOL(change_bit);
95EXPORT_SYMBOL(test_and_set_bit);
96EXPORT_SYMBOL(test_and_clear_bit);
97EXPORT_SYMBOL(test_and_change_bit);
98#endif /* __INLINE_BITOPS */
99
100EXPORT_SYMBOL(strcpy);
101EXPORT_SYMBOL(strncpy);
102EXPORT_SYMBOL(strcat);
103EXPORT_SYMBOL(strncat);
104EXPORT_SYMBOL(strchr);
105EXPORT_SYMBOL(strrchr);
106EXPORT_SYMBOL(strpbrk);
107EXPORT_SYMBOL(strstr);
108EXPORT_SYMBOL(strlen);
109EXPORT_SYMBOL(strnlen);
110EXPORT_SYMBOL(strcmp);
111EXPORT_SYMBOL(strncmp);
112EXPORT_SYMBOL(strcasecmp);
113EXPORT_SYMBOL(__div64_32);
114
115EXPORT_SYMBOL(csum_partial);
116EXPORT_SYMBOL(csum_partial_copy_generic);
117EXPORT_SYMBOL(ip_fast_csum);
118EXPORT_SYMBOL(csum_tcpudp_magic);
119
120EXPORT_SYMBOL(__copy_tofrom_user);
121EXPORT_SYMBOL(__clear_user);
122EXPORT_SYMBOL(__strncpy_from_user);
123EXPORT_SYMBOL(__strnlen_user);
124
125EXPORT_SYMBOL(_insb);
126EXPORT_SYMBOL(_outsb);
127EXPORT_SYMBOL(_insw);
128EXPORT_SYMBOL(_outsw);
129EXPORT_SYMBOL(_insl);
130EXPORT_SYMBOL(_outsl);
131EXPORT_SYMBOL(_insw_ns);
132EXPORT_SYMBOL(_outsw_ns);
133EXPORT_SYMBOL(_insl_ns);
134EXPORT_SYMBOL(_outsl_ns);
135EXPORT_SYMBOL(iopa);
136EXPORT_SYMBOL(mm_ptov);
137EXPORT_SYMBOL(ioremap);
138#ifdef CONFIG_44x
139EXPORT_SYMBOL(ioremap64);
140#endif
141EXPORT_SYMBOL(__ioremap);
142EXPORT_SYMBOL(iounmap);
143EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */
144
145#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
146EXPORT_SYMBOL(ppc_ide_md);
147#endif
148
149#ifdef CONFIG_PCI
150EXPORT_SYMBOL(isa_io_base);
151EXPORT_SYMBOL(isa_mem_base);
152EXPORT_SYMBOL(pci_dram_offset);
153EXPORT_SYMBOL(pci_alloc_consistent);
154EXPORT_SYMBOL(pci_free_consistent);
155EXPORT_SYMBOL(pci_bus_io_base);
156EXPORT_SYMBOL(pci_bus_io_base_phys);
157EXPORT_SYMBOL(pci_bus_mem_base_phys);
158EXPORT_SYMBOL(pci_bus_to_hose);
159EXPORT_SYMBOL(pci_resource_to_bus);
160EXPORT_SYMBOL(pci_phys_to_bus);
161EXPORT_SYMBOL(pci_bus_to_phys);
162#endif /* CONFIG_PCI */
163
164#ifdef CONFIG_NOT_COHERENT_CACHE
165EXPORT_SYMBOL(flush_dcache_all);
166#endif
167
168EXPORT_SYMBOL(start_thread);
169EXPORT_SYMBOL(kernel_thread);
170
171EXPORT_SYMBOL(flush_instruction_cache);
172EXPORT_SYMBOL(giveup_fpu);
173#ifdef CONFIG_PPC64
174EXPORT_SYMBOL(__flush_icache_range);
175#else
176EXPORT_SYMBOL(flush_icache_range);
177#endif
178EXPORT_SYMBOL(flush_dcache_range);
179EXPORT_SYMBOL(flush_icache_user_range);
180EXPORT_SYMBOL(flush_dcache_page);
181EXPORT_SYMBOL(flush_tlb_kernel_range);
182EXPORT_SYMBOL(flush_tlb_page);
183EXPORT_SYMBOL(_tlbie);
184#ifdef CONFIG_ALTIVEC
185EXPORT_SYMBOL(last_task_used_altivec);
186EXPORT_SYMBOL(giveup_altivec);
187#endif /* CONFIG_ALTIVEC */
188#ifdef CONFIG_SPE
189EXPORT_SYMBOL(last_task_used_spe);
190EXPORT_SYMBOL(giveup_spe);
191#endif /* CONFIG_SPE */
192#ifdef CONFIG_SMP
193EXPORT_SYMBOL(smp_call_function);
194EXPORT_SYMBOL(smp_hw_index);
195#endif
196
197EXPORT_SYMBOL(ppc_md);
198
199#ifdef CONFIG_ADB
200EXPORT_SYMBOL(adb_request);
201EXPORT_SYMBOL(adb_register);
202EXPORT_SYMBOL(adb_unregister);
203EXPORT_SYMBOL(adb_poll);
204EXPORT_SYMBOL(adb_try_handler_change);
205#endif /* CONFIG_ADB */
206#ifdef CONFIG_ADB_CUDA
207EXPORT_SYMBOL(cuda_request);
208EXPORT_SYMBOL(cuda_poll);
209#endif /* CONFIG_ADB_CUDA */
210#ifdef CONFIG_PPC_MULTIPLATFORM
211EXPORT_SYMBOL(_machine);
212#endif
213#ifdef CONFIG_PPC_PMAC
214EXPORT_SYMBOL(sys_ctrler);
215EXPORT_SYMBOL(pmac_newworld);
216#endif
217#ifdef CONFIG_PPC_OF
218EXPORT_SYMBOL(find_devices);
219EXPORT_SYMBOL(find_type_devices);
220EXPORT_SYMBOL(find_compatible_devices);
221EXPORT_SYMBOL(find_path_device);
222EXPORT_SYMBOL(device_is_compatible);
223EXPORT_SYMBOL(machine_is_compatible);
224EXPORT_SYMBOL(find_all_nodes);
225EXPORT_SYMBOL(get_property);
226EXPORT_SYMBOL(request_OF_resource);
227EXPORT_SYMBOL(release_OF_resource);
228EXPORT_SYMBOL(pci_busdev_to_OF_node);
229EXPORT_SYMBOL(pci_device_to_OF_node);
230EXPORT_SYMBOL(pci_device_from_OF_node);
231EXPORT_SYMBOL(of_find_node_by_name);
232EXPORT_SYMBOL(of_find_node_by_type);
233EXPORT_SYMBOL(of_find_compatible_node);
234EXPORT_SYMBOL(of_find_node_by_path);
235EXPORT_SYMBOL(of_find_all_nodes);
236EXPORT_SYMBOL(of_get_parent);
237EXPORT_SYMBOL(of_get_next_child);
238EXPORT_SYMBOL(of_node_get);
239EXPORT_SYMBOL(of_node_put);
240#endif /* CONFIG_PPC_OF */
241#if defined(CONFIG_BOOTX_TEXT)
242EXPORT_SYMBOL(btext_update_display);
243#endif
244#if defined(CONFIG_SCSI) && defined(CONFIG_PPC_PMAC)
245EXPORT_SYMBOL(note_scsi_host);
246#endif
247#ifdef CONFIG_VT
248EXPORT_SYMBOL(kd_mksound);
249#endif
250EXPORT_SYMBOL(to_tm);
251
252EXPORT_SYMBOL(pm_power_off);
253
254EXPORT_SYMBOL(__ashrdi3);
255EXPORT_SYMBOL(__ashldi3);
256EXPORT_SYMBOL(__lshrdi3);
257EXPORT_SYMBOL(memcpy);
258EXPORT_SYMBOL(cacheable_memcpy);
259EXPORT_SYMBOL(memset);
260EXPORT_SYMBOL(memmove);
261EXPORT_SYMBOL(memscan);
262EXPORT_SYMBOL(memcmp);
263EXPORT_SYMBOL(memchr);
264
265#if defined(CONFIG_FB_VGA16_MODULE)
266EXPORT_SYMBOL(screen_info);
267#endif
268
269EXPORT_SYMBOL(__delay);
270EXPORT_SYMBOL(timer_interrupt);
271EXPORT_SYMBOL(irq_desc);
272EXPORT_SYMBOL(tb_ticks_per_jiffy);
273EXPORT_SYMBOL(get_wchan);
274EXPORT_SYMBOL(console_drivers);
275
276#ifdef CONFIG_PPC_ISERIES
277EXPORT_SYMBOL(local_irq_disable);
278EXPORT_SYMBOL(local_irq_enable);
279EXPORT_SYMBOL(local_get_flags);
280#endif
281
282#ifdef CONFIG_XMON
283EXPORT_SYMBOL(xmon);
284EXPORT_SYMBOL(xmon_printf);
285#endif
286EXPORT_SYMBOL(__up);
287EXPORT_SYMBOL(__down);
288EXPORT_SYMBOL(__down_interruptible);
289
290#if defined(CONFIG_KGDB) || defined(CONFIG_XMON)
291extern void (*debugger)(struct pt_regs *regs);
292extern int (*debugger_bpt)(struct pt_regs *regs);
293extern int (*debugger_sstep)(struct pt_regs *regs);
294extern int (*debugger_iabr_match)(struct pt_regs *regs);
295extern int (*debugger_dabr_match)(struct pt_regs *regs);
296extern void (*debugger_fault_handler)(struct pt_regs *regs);
297
298EXPORT_SYMBOL(debugger);
299EXPORT_SYMBOL(debugger_bpt);
300EXPORT_SYMBOL(debugger_sstep);
301EXPORT_SYMBOL(debugger_iabr_match);
302EXPORT_SYMBOL(debugger_dabr_match);
303EXPORT_SYMBOL(debugger_fault_handler);
304#endif
305
306#ifdef CONFIG_8xx
307EXPORT_SYMBOL(cpm_install_handler);
308EXPORT_SYMBOL(cpm_free_handler);
309#endif /* CONFIG_8xx */
310#if defined(CONFIG_8xx) || defined(CONFIG_40x) || defined(CONFIG_85xx) ||\
311 defined(CONFIG_83xx)
312EXPORT_SYMBOL(__res);
313#endif
314
315EXPORT_SYMBOL(next_mmu_context);
316EXPORT_SYMBOL(set_context);
317EXPORT_SYMBOL_GPL(__handle_mm_fault); /* For MOL */
318EXPORT_SYMBOL(disarm_decr);
319#ifdef CONFIG_PPC_STD_MMU
320extern long mol_trampoline;
321EXPORT_SYMBOL(mol_trampoline); /* For MOL */
322EXPORT_SYMBOL(flush_hash_pages); /* For MOL */
323#ifdef CONFIG_SMP
324extern int mmu_hash_lock;
325EXPORT_SYMBOL(mmu_hash_lock); /* For MOL */
326#endif /* CONFIG_SMP */
327extern long *intercept_table;
328EXPORT_SYMBOL(intercept_table);
329#endif /* CONFIG_PPC_STD_MMU */
330EXPORT_SYMBOL(cur_cpu_spec);
331#ifdef CONFIG_PPC_PMAC
332extern unsigned long agp_special_page;
333EXPORT_SYMBOL(agp_special_page);
334#endif
335#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
336EXPORT_SYMBOL(__mtdcr);
337EXPORT_SYMBOL(__mfdcr);
338#endif
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index f5a9d2a84fa1..e3946769dd8e 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -601,6 +601,8 @@ int sys_execve(unsigned long a0, unsigned long a1, unsigned long a2,
601 flush_fp_to_thread(current); 601 flush_fp_to_thread(current);
602 flush_altivec_to_thread(current); 602 flush_altivec_to_thread(current);
603 flush_spe_to_thread(current); 603 flush_spe_to_thread(current);
604 error = do_execve(filename, (char __user * __user *) a1,
605 (char __user * __user *) a2, regs);
604 if (error == 0) { 606 if (error == 0) {
605 task_lock(current); 607 task_lock(current);
606 current->ptrace &= ~PT_DTRACE; 608 current->ptrace &= ~PT_DTRACE;
diff --git a/arch/powerpc/mm/init.c b/arch/powerpc/mm/init.c
index f4d983a6e521..3a81ef15c67e 100644
--- a/arch/powerpc/mm/init.c
+++ b/arch/powerpc/mm/init.c
@@ -239,7 +239,7 @@ void __init MMU_init(void)
239 if (boot_mem_size) 239 if (boot_mem_size)
240 total_memory = boot_mem_size; 240 total_memory = boot_mem_size;
241 else 241 else
242 total_memory = ppc_md.find_end_of_memory(); 242 total_memory = find_end_of_memory();
243 243
244 if (__max_memory && total_memory > __max_memory) 244 if (__max_memory && total_memory > __max_memory)
245 total_memory = __max_memory; 245 total_memory = __max_memory;
diff --git a/arch/powerpc/platforms/powermac/pmac_pic.c b/arch/powerpc/platforms/powermac/pmac_pic.c
index bf3e1899a4cc..a6b1b577e19f 100644
--- a/arch/powerpc/platforms/powermac/pmac_pic.c
+++ b/arch/powerpc/platforms/powermac/pmac_pic.c
@@ -424,6 +424,8 @@ void __init pmac_pic_init(void)
424 424
425 printk(KERN_INFO "PowerMac using OpenPIC irq controller at 0x%08x\n", 425 printk(KERN_INFO "PowerMac using OpenPIC irq controller at 0x%08x\n",
426 (unsigned int)irqctrler->addrs[0].address); 426 (unsigned int)irqctrler->addrs[0].address);
427 ppc_md.get_irq = mpic_get_irq;
428 pmac_call_feature(PMAC_FTR_ENABLE_MPIC, irqctrler, 0, 0);
427 429
428 prom_get_irq_senses(senses, 0, 128); 430 prom_get_irq_senses(senses, 0, 128);
429 mpic1 = mpic_alloc(irqctrler->addrs[0].address, 431 mpic1 = mpic_alloc(irqctrler->addrs[0].address,
@@ -452,7 +454,22 @@ void __init pmac_pic_init(void)
452 mpic_setup_cascade(irqctrler2->intrs[0].line, 454 mpic_setup_cascade(irqctrler2->intrs[0].line,
453 pmac_u3_cascade, mpic2); 455 pmac_u3_cascade, mpic2);
454 } 456 }
457#ifdef CONFIG_XMON
458 {
459 struct device_node* pswitch;
460 int nmi_irq;
461
462 pswitch = find_devices("programmer-switch");
463 if (pswitch && pswitch->n_intrs) {
464 nmi_irq = pswitch->intrs[0].line;
465 openpic_init_nmi_irq(nmi_irq);
466 setup_irq(nmi_irq, &xmon_action);
467 }
468 }
469#endif /* CONFIG_XMON */
470 return;
455 } 471 }
472 irqctrler = NULL;
456 473
457 /* Get the level/edge settings, assume if it's not 474 /* Get the level/edge settings, assume if it's not
458 * a Grand Central nor an OHare, then it's an Heathrow 475 * a Grand Central nor an OHare, then it's an Heathrow