aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-10-31 11:14:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-31 11:14:15 -0400
commitf891caf28febf9d4129716e848227148654b5993 (patch)
treeadf5afe6eecb0ad6c0c10d5c69b3937da675eb5e /arch/powerpc/platforms
parent1fe01cb57c6272577ebb107a03253484f6dabe7c (diff)
parent5663a1232bd557b4b2141ad345dd56785fa51c2a (diff)
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (23 commits) Revert "powerpc: Sync RPA note in zImage with kernel's RPA note" powerpc: Fix compile errors with CONFIG_BUG=n powerpc: Fix format string warning in arch/powerpc/boot/main.c powerpc: Fix bug in kernel copy of libfdt's fdt_subnode_offset_namelen() powerpc: Remove duplicate DMA entry from mpc8313erdb device tree powerpc/cell/OProfile: Fix on-stack array size in activate spu profiling function powerpc/mpic: Fix regression caused by change of default IRQ affinity powerpc: Update remaining dma_mapping_ops to use map/unmap_page powerpc/pci: Fix unmapping of IO space on 64-bit powerpc/pci: Properly allocate bus resources for hotplug PHBs OF-device: Don't overwrite numa_node in device registration powerpc: Fix swapcontext system for VSX + old ucontext size powerpc: Fix compiler warning for the relocatable kernel powerpc: Work around ld bug in older binutils powerpc/ppc64/kdump: Better flag for running relocatable powerpc: Use is_kdump_kernel() powerpc: Kexec exit should not use magic numbers powerpc/44x: Update 44x defconfigs powerpc/40x: Update 40x defconfigs powerpc: enable heap randomization for linkstations ...
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r--arch/powerpc/platforms/40x/Kconfig2
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_ds.c3
-rw-r--r--arch/powerpc/platforms/86xx/pic.c3
-rw-r--r--arch/powerpc/platforms/cell/iommu.c37
-rw-r--r--arch/powerpc/platforms/cell/ras.c6
-rw-r--r--arch/powerpc/platforms/embedded6xx/linkstation.c14
-rw-r--r--arch/powerpc/platforms/iseries/iommu.c7
-rw-r--r--arch/powerpc/platforms/ps3/system-bus.c36
-rw-r--r--arch/powerpc/platforms/pseries/iommu.c4
-rw-r--r--arch/powerpc/platforms/pseries/pci_dlpar.c2
10 files changed, 67 insertions, 47 deletions
diff --git a/arch/powerpc/platforms/40x/Kconfig b/arch/powerpc/platforms/40x/Kconfig
index 65730275e012..14e027f5be66 100644
--- a/arch/powerpc/platforms/40x/Kconfig
+++ b/arch/powerpc/platforms/40x/Kconfig
@@ -35,7 +35,7 @@ config EP405
35config HCU4 35config HCU4
36 bool "Hcu4" 36 bool "Hcu4"
37 depends on 40x 37 depends on 40x
38 default y 38 default n
39 select 405GPR 39 select 405GPR
40 help 40 help
41 This option enables support for the Nestal Maschinen HCU4 board. 41 This option enables support for the Nestal Maschinen HCU4 board.
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ds.c b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
index 483b65cbabae..613bf8c2e30d 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
@@ -78,7 +78,8 @@ void __init mpc85xx_ds_pic_init(void)
78 78
79 mpic = mpic_alloc(np, r.start, 79 mpic = mpic_alloc(np, r.start,
80 MPIC_PRIMARY | MPIC_WANTS_RESET | 80 MPIC_PRIMARY | MPIC_WANTS_RESET |
81 MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS, 81 MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS |
82 MPIC_SINGLE_DEST_CPU,
82 0, 256, " OpenPIC "); 83 0, 256, " OpenPIC ");
83 BUG_ON(mpic == NULL); 84 BUG_ON(mpic == NULL);
84 of_node_put(np); 85 of_node_put(np);
diff --git a/arch/powerpc/platforms/86xx/pic.c b/arch/powerpc/platforms/86xx/pic.c
index 8881c5de500d..668275d9e668 100644
--- a/arch/powerpc/platforms/86xx/pic.c
+++ b/arch/powerpc/platforms/86xx/pic.c
@@ -44,7 +44,8 @@ void __init mpc86xx_init_irq(void)
44 44
45 mpic = mpic_alloc(np, res.start, 45 mpic = mpic_alloc(np, res.start,
46 MPIC_PRIMARY | MPIC_WANTS_RESET | 46 MPIC_PRIMARY | MPIC_WANTS_RESET |
47 MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS, 47 MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS |
48 MPIC_SINGLE_DEST_CPU,
48 0, 256, " MPIC "); 49 0, 256, " MPIC ");
49 of_node_put(np); 50 of_node_put(np);
50 BUG_ON(mpic == NULL); 51 BUG_ON(mpic == NULL);
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c
index ef92e7146215..3168272ab0d7 100644
--- a/arch/powerpc/platforms/cell/iommu.c
+++ b/arch/powerpc/platforms/cell/iommu.c
@@ -593,31 +593,30 @@ static void dma_fixed_free_coherent(struct device *dev, size_t size,
593 dma_direct_ops.free_coherent(dev, size, vaddr, dma_handle); 593 dma_direct_ops.free_coherent(dev, size, vaddr, dma_handle);
594} 594}
595 595
596static dma_addr_t dma_fixed_map_single(struct device *dev, void *ptr, 596static dma_addr_t dma_fixed_map_page(struct device *dev, struct page *page,
597 size_t size, 597 unsigned long offset, size_t size,
598 enum dma_data_direction direction, 598 enum dma_data_direction direction,
599 struct dma_attrs *attrs) 599 struct dma_attrs *attrs)
600{ 600{
601 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)) 601 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs))
602 return dma_direct_ops.map_single(dev, ptr, size, direction, 602 return dma_direct_ops.map_page(dev, page, offset, size,
603 attrs); 603 direction, attrs);
604 else 604 else
605 return iommu_map_single(dev, cell_get_iommu_table(dev), ptr, 605 return iommu_map_page(dev, cell_get_iommu_table(dev), page,
606 size, device_to_mask(dev), direction, 606 offset, size, device_to_mask(dev),
607 attrs); 607 direction, attrs);
608} 608}
609 609
610static void dma_fixed_unmap_single(struct device *dev, dma_addr_t dma_addr, 610static void dma_fixed_unmap_page(struct device *dev, dma_addr_t dma_addr,
611 size_t size, 611 size_t size, enum dma_data_direction direction,
612 enum dma_data_direction direction, 612 struct dma_attrs *attrs)
613 struct dma_attrs *attrs)
614{ 613{
615 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs)) 614 if (iommu_fixed_is_weak == dma_get_attr(DMA_ATTR_WEAK_ORDERING, attrs))
616 dma_direct_ops.unmap_single(dev, dma_addr, size, direction, 615 dma_direct_ops.unmap_page(dev, dma_addr, size, direction,
617 attrs); 616 attrs);
618 else 617 else
619 iommu_unmap_single(cell_get_iommu_table(dev), dma_addr, size, 618 iommu_unmap_page(cell_get_iommu_table(dev), dma_addr, size,
620 direction, attrs); 619 direction, attrs);
621} 620}
622 621
623static int dma_fixed_map_sg(struct device *dev, struct scatterlist *sg, 622static int dma_fixed_map_sg(struct device *dev, struct scatterlist *sg,
@@ -652,12 +651,12 @@ static int dma_set_mask_and_switch(struct device *dev, u64 dma_mask);
652struct dma_mapping_ops dma_iommu_fixed_ops = { 651struct dma_mapping_ops dma_iommu_fixed_ops = {
653 .alloc_coherent = dma_fixed_alloc_coherent, 652 .alloc_coherent = dma_fixed_alloc_coherent,
654 .free_coherent = dma_fixed_free_coherent, 653 .free_coherent = dma_fixed_free_coherent,
655 .map_single = dma_fixed_map_single,
656 .unmap_single = dma_fixed_unmap_single,
657 .map_sg = dma_fixed_map_sg, 654 .map_sg = dma_fixed_map_sg,
658 .unmap_sg = dma_fixed_unmap_sg, 655 .unmap_sg = dma_fixed_unmap_sg,
659 .dma_supported = dma_fixed_dma_supported, 656 .dma_supported = dma_fixed_dma_supported,
660 .set_dma_mask = dma_set_mask_and_switch, 657 .set_dma_mask = dma_set_mask_and_switch,
658 .map_page = dma_fixed_map_page,
659 .unmap_page = dma_fixed_unmap_page,
661}; 660};
662 661
663static void cell_dma_dev_setup_fixed(struct device *dev); 662static void cell_dma_dev_setup_fixed(struct device *dev);
diff --git a/arch/powerpc/platforms/cell/ras.c b/arch/powerpc/platforms/cell/ras.c
index 665af1c4195b..fdf088f2430e 100644
--- a/arch/powerpc/platforms/cell/ras.c
+++ b/arch/powerpc/platforms/cell/ras.c
@@ -13,15 +13,15 @@
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/smp.h> 14#include <linux/smp.h>
15#include <linux/reboot.h> 15#include <linux/reboot.h>
16#include <linux/kexec.h>
17#include <linux/crash_dump.h>
16 18
17#include <asm/reg.h> 19#include <asm/reg.h>
18#include <asm/io.h> 20#include <asm/io.h>
19#include <asm/prom.h> 21#include <asm/prom.h>
20#include <asm/kexec.h>
21#include <asm/machdep.h> 22#include <asm/machdep.h>
22#include <asm/rtas.h> 23#include <asm/rtas.h>
23#include <asm/cell-regs.h> 24#include <asm/cell-regs.h>
24#include <asm/kdump.h>
25 25
26#include "ras.h" 26#include "ras.h"
27 27
@@ -112,7 +112,7 @@ static int __init cbe_ptcal_enable_on_node(int nid, int order)
112 int ret = -ENOMEM; 112 int ret = -ENOMEM;
113 unsigned long addr; 113 unsigned long addr;
114 114
115 if (__kdump_flag) 115 if (is_kdump_kernel())
116 rtas_call(ptcal_stop_tok, 1, 1, NULL, nid); 116 rtas_call(ptcal_stop_tok, 1, 1, NULL, nid);
117 117
118 area = kmalloc(sizeof(*area), GFP_KERNEL); 118 area = kmalloc(sizeof(*area), GFP_KERNEL);
diff --git a/arch/powerpc/platforms/embedded6xx/linkstation.c b/arch/powerpc/platforms/embedded6xx/linkstation.c
index eb5d74e26fe9..2ca7be65c2d2 100644
--- a/arch/powerpc/platforms/embedded6xx/linkstation.c
+++ b/arch/powerpc/platforms/embedded6xx/linkstation.c
@@ -13,6 +13,7 @@
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/initrd.h> 14#include <linux/initrd.h>
15#include <linux/mtd/physmap.h> 15#include <linux/mtd/physmap.h>
16#include <linux/of_platform.h>
16 17
17#include <asm/time.h> 18#include <asm/time.h>
18#include <asm/prom.h> 19#include <asm/prom.h>
@@ -54,6 +55,19 @@ static struct mtd_partition linkstation_physmap_partitions[] = {
54 }, 55 },
55}; 56};
56 57
58static __initdata struct of_device_id of_bus_ids[] = {
59 { .type = "soc", },
60 { .compatible = "simple-bus", },
61 {},
62};
63
64static int __init declare_of_platform_devices(void)
65{
66 of_platform_bus_probe(NULL, of_bus_ids, NULL);
67 return 0;
68}
69machine_device_initcall(linkstation, declare_of_platform_devices);
70
57static int __init linkstation_add_bridge(struct device_node *dev) 71static int __init linkstation_add_bridge(struct device_node *dev)
58{ 72{
59#ifdef CONFIG_PCI 73#ifdef CONFIG_PCI
diff --git a/arch/powerpc/platforms/iseries/iommu.c b/arch/powerpc/platforms/iseries/iommu.c
index bb464d1211b2..bbe828f1b885 100644
--- a/arch/powerpc/platforms/iseries/iommu.c
+++ b/arch/powerpc/platforms/iseries/iommu.c
@@ -215,14 +215,15 @@ EXPORT_SYMBOL_GPL(iseries_hv_free);
215dma_addr_t iseries_hv_map(void *vaddr, size_t size, 215dma_addr_t iseries_hv_map(void *vaddr, size_t size,
216 enum dma_data_direction direction) 216 enum dma_data_direction direction)
217{ 217{
218 return iommu_map_single(NULL, &vio_iommu_table, vaddr, size, 218 return iommu_map_page(NULL, &vio_iommu_table, virt_to_page(vaddr),
219 DMA_32BIT_MASK, direction, NULL); 219 (unsigned long)vaddr % PAGE_SIZE, size,
220 DMA_32BIT_MASK, direction, NULL);
220} 221}
221 222
222void iseries_hv_unmap(dma_addr_t dma_handle, size_t size, 223void iseries_hv_unmap(dma_addr_t dma_handle, size_t size,
223 enum dma_data_direction direction) 224 enum dma_data_direction direction)
224{ 225{
225 iommu_unmap_single(&vio_iommu_table, dma_handle, size, direction, NULL); 226 iommu_unmap_page(&vio_iommu_table, dma_handle, size, direction, NULL);
226} 227}
227 228
228void __init iommu_vio_init(void) 229void __init iommu_vio_init(void)
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index a789bf58ca8b..661e9f77ebf6 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -555,18 +555,19 @@ static void ps3_free_coherent(struct device *_dev, size_t size, void *vaddr,
555} 555}
556 556
557/* Creates TCEs for a user provided buffer. The user buffer must be 557/* Creates TCEs for a user provided buffer. The user buffer must be
558 * contiguous real kernel storage (not vmalloc). The address of the buffer 558 * contiguous real kernel storage (not vmalloc). The address passed here
559 * passed here is the kernel (virtual) address of the buffer. The buffer 559 * comprises a page address and offset into that page. The dma_addr_t
560 * need not be page aligned, the dma_addr_t returned will point to the same 560 * returned will point to the same byte within the page as was passed in.
561 * byte within the page as vaddr.
562 */ 561 */
563 562
564static dma_addr_t ps3_sb_map_single(struct device *_dev, void *ptr, size_t size, 563static dma_addr_t ps3_sb_map_page(struct device *_dev, struct page *page,
565 enum dma_data_direction direction, struct dma_attrs *attrs) 564 unsigned long offset, size_t size, enum dma_data_direction direction,
565 struct dma_attrs *attrs)
566{ 566{
567 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); 567 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
568 int result; 568 int result;
569 unsigned long bus_addr; 569 unsigned long bus_addr;
570 void *ptr = page_address(page) + offset;
570 571
571 result = ps3_dma_map(dev->d_region, (unsigned long)ptr, size, 572 result = ps3_dma_map(dev->d_region, (unsigned long)ptr, size,
572 &bus_addr, 573 &bus_addr,
@@ -580,15 +581,16 @@ static dma_addr_t ps3_sb_map_single(struct device *_dev, void *ptr, size_t size,
580 return bus_addr; 581 return bus_addr;
581} 582}
582 583
583static dma_addr_t ps3_ioc0_map_single(struct device *_dev, void *ptr, 584static dma_addr_t ps3_ioc0_map_page(struct device *_dev, struct page *page,
584 size_t size, 585 unsigned long offset, size_t size,
585 enum dma_data_direction direction, 586 enum dma_data_direction direction,
586 struct dma_attrs *attrs) 587 struct dma_attrs *attrs)
587{ 588{
588 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); 589 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
589 int result; 590 int result;
590 unsigned long bus_addr; 591 unsigned long bus_addr;
591 u64 iopte_flag; 592 u64 iopte_flag;
593 void *ptr = page_address(page) + offset;
592 594
593 iopte_flag = IOPTE_M; 595 iopte_flag = IOPTE_M;
594 switch (direction) { 596 switch (direction) {
@@ -615,7 +617,7 @@ static dma_addr_t ps3_ioc0_map_single(struct device *_dev, void *ptr,
615 return bus_addr; 617 return bus_addr;
616} 618}
617 619
618static void ps3_unmap_single(struct device *_dev, dma_addr_t dma_addr, 620static void ps3_unmap_page(struct device *_dev, dma_addr_t dma_addr,
619 size_t size, enum dma_data_direction direction, struct dma_attrs *attrs) 621 size_t size, enum dma_data_direction direction, struct dma_attrs *attrs)
620{ 622{
621 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); 623 struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
@@ -689,21 +691,21 @@ static int ps3_dma_supported(struct device *_dev, u64 mask)
689static struct dma_mapping_ops ps3_sb_dma_ops = { 691static struct dma_mapping_ops ps3_sb_dma_ops = {
690 .alloc_coherent = ps3_alloc_coherent, 692 .alloc_coherent = ps3_alloc_coherent,
691 .free_coherent = ps3_free_coherent, 693 .free_coherent = ps3_free_coherent,
692 .map_single = ps3_sb_map_single,
693 .unmap_single = ps3_unmap_single,
694 .map_sg = ps3_sb_map_sg, 694 .map_sg = ps3_sb_map_sg,
695 .unmap_sg = ps3_sb_unmap_sg, 695 .unmap_sg = ps3_sb_unmap_sg,
696 .dma_supported = ps3_dma_supported 696 .dma_supported = ps3_dma_supported,
697 .map_page = ps3_sb_map_page,
698 .unmap_page = ps3_unmap_page,
697}; 699};
698 700
699static struct dma_mapping_ops ps3_ioc0_dma_ops = { 701static struct dma_mapping_ops ps3_ioc0_dma_ops = {
700 .alloc_coherent = ps3_alloc_coherent, 702 .alloc_coherent = ps3_alloc_coherent,
701 .free_coherent = ps3_free_coherent, 703 .free_coherent = ps3_free_coherent,
702 .map_single = ps3_ioc0_map_single,
703 .unmap_single = ps3_unmap_single,
704 .map_sg = ps3_ioc0_map_sg, 704 .map_sg = ps3_ioc0_map_sg,
705 .unmap_sg = ps3_ioc0_unmap_sg, 705 .unmap_sg = ps3_ioc0_unmap_sg,
706 .dma_supported = ps3_dma_supported 706 .dma_supported = ps3_dma_supported,
707 .map_page = ps3_ioc0_map_page,
708 .unmap_page = ps3_unmap_page,
707}; 709};
708 710
709/** 711/**
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index d56491d182d3..c90817acb472 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -32,6 +32,7 @@
32#include <linux/string.h> 32#include <linux/string.h>
33#include <linux/pci.h> 33#include <linux/pci.h>
34#include <linux/dma-mapping.h> 34#include <linux/dma-mapping.h>
35#include <linux/crash_dump.h>
35#include <asm/io.h> 36#include <asm/io.h>
36#include <asm/prom.h> 37#include <asm/prom.h>
37#include <asm/rtas.h> 38#include <asm/rtas.h>
@@ -44,7 +45,6 @@
44#include <asm/tce.h> 45#include <asm/tce.h>
45#include <asm/ppc-pci.h> 46#include <asm/ppc-pci.h>
46#include <asm/udbg.h> 47#include <asm/udbg.h>
47#include <asm/kdump.h>
48 48
49#include "plpar_wrappers.h" 49#include "plpar_wrappers.h"
50 50
@@ -292,7 +292,7 @@ static void iommu_table_setparms(struct pci_controller *phb,
292 292
293 tbl->it_base = (unsigned long)__va(*basep); 293 tbl->it_base = (unsigned long)__va(*basep);
294 294
295 if (!__kdump_flag) 295 if (!is_kdump_kernel())
296 memset((void *)tbl->it_base, 0, *sizep); 296 memset((void *)tbl->it_base, 0, *sizep);
297 297
298 tbl->it_busno = phb->bus->number; 298 tbl->it_busno = phb->bus->number;
diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c
index 21a6d55418f1..31481dc485de 100644
--- a/arch/powerpc/platforms/pseries/pci_dlpar.c
+++ b/arch/powerpc/platforms/pseries/pci_dlpar.c
@@ -189,6 +189,7 @@ struct pci_controller * __devinit init_phb_dynamic(struct device_node *dn)
189{ 189{
190 struct pci_controller *phb; 190 struct pci_controller *phb;
191 int primary; 191 int primary;
192 struct pci_bus *b;
192 193
193 primary = list_empty(&hose_list); 194 primary = list_empty(&hose_list);
194 phb = pcibios_alloc_controller(dn); 195 phb = pcibios_alloc_controller(dn);
@@ -203,6 +204,7 @@ struct pci_controller * __devinit init_phb_dynamic(struct device_node *dn)
203 eeh_add_device_tree_early(dn); 204 eeh_add_device_tree_early(dn);
204 205
205 scan_phb(phb); 206 scan_phb(phb);
207 pcibios_allocate_bus_resources(phb->bus);
206 pcibios_fixup_new_pci_devices(phb->bus); 208 pcibios_fixup_new_pci_devices(phb->bus);
207 pci_bus_add_devices(phb->bus); 209 pci_bus_add_devices(phb->bus);
208 eeh_add_device_tree_late(phb->bus); 210 eeh_add_device_tree_late(phb->bus);