aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/platforms/cell/spu_priv1_mmio.c30
1 files changed, 12 insertions, 18 deletions
diff --git a/arch/powerpc/platforms/cell/spu_priv1_mmio.c b/arch/powerpc/platforms/cell/spu_priv1_mmio.c
index c805e63b7d5c..910a926b61a2 100644
--- a/arch/powerpc/platforms/cell/spu_priv1_mmio.c
+++ b/arch/powerpc/platforms/cell/spu_priv1_mmio.c
@@ -40,7 +40,6 @@
40static DEFINE_MUTEX(add_spumem_mutex); 40static DEFINE_MUTEX(add_spumem_mutex);
41 41
42struct spu_pdata { 42struct spu_pdata {
43 int nid;
44 struct device_node *devnode; 43 struct device_node *devnode;
45 struct spu_priv1 __iomem *priv1; 44 struct spu_priv1 __iomem *priv1;
46}; 45};
@@ -58,15 +57,6 @@ struct device_node *spu_devnode(struct spu *spu)
58 57
59EXPORT_SYMBOL_GPL(spu_devnode); 58EXPORT_SYMBOL_GPL(spu_devnode);
60 59
61static int __init find_spu_node_id(struct device_node *spe)
62{
63 const unsigned int *id;
64 struct device_node *cpu;
65 cpu = spe->parent->parent;
66 id = get_property(cpu, "node-id", NULL);
67 return id ? *id : 0;
68}
69
70static int __init cell_spuprop_present(struct spu *spu, struct device_node *spe, 60static int __init cell_spuprop_present(struct spu *spu, struct device_node *spe,
71 const char *prop) 61 const char *prop)
72{ 62{
@@ -87,7 +77,7 @@ static int __init cell_spuprop_present(struct spu *spu, struct device_node *spe,
87 start_pfn = p->address >> PAGE_SHIFT; 77 start_pfn = p->address >> PAGE_SHIFT;
88 nr_pages = ((unsigned long)p->len + PAGE_SIZE - 1) >> PAGE_SHIFT; 78 nr_pages = ((unsigned long)p->len + PAGE_SIZE - 1) >> PAGE_SHIFT;
89 79
90 pgdata = NODE_DATA(spu_get_pdata(spu)->nid); 80 pgdata = NODE_DATA(spu->node);
91 zone = pgdata->node_zones; 81 zone = pgdata->node_zones;
92 82
93 /* XXX rethink locking here */ 83 /* XXX rethink locking here */
@@ -140,6 +130,7 @@ static int __init spu_map_interrupts_old(struct spu *spu,
140{ 130{
141 unsigned int isrc; 131 unsigned int isrc;
142 const u32 *tmp; 132 const u32 *tmp;
133 int nid;
143 134
144 /* Get the interrupt source unit from the device-tree */ 135 /* Get the interrupt source unit from the device-tree */
145 tmp = get_property(np, "isrc", NULL); 136 tmp = get_property(np, "isrc", NULL);
@@ -147,8 +138,15 @@ static int __init spu_map_interrupts_old(struct spu *spu,
147 return -ENODEV; 138 return -ENODEV;
148 isrc = tmp[0]; 139 isrc = tmp[0];
149 140
141 tmp = get_property(np->parent->parent, "node-id", NULL);
142 if (!tmp) {
143 printk(KERN_WARNING "%s: can't find node-id\n", __FUNCTION__);
144 nid = spu->node;
145 } else
146 nid = tmp[0];
147
150 /* Add the node number */ 148 /* Add the node number */
151 isrc |= spu->node << IIC_IRQ_NODE_SHIFT; 149 isrc |= nid << IIC_IRQ_NODE_SHIFT;
152 150
153 /* Now map interrupts of all 3 classes */ 151 /* Now map interrupts of all 3 classes */
154 spu->irqs[0] = irq_create_mapping(NULL, IIC_IRQ_CLASS_0 | isrc); 152 spu->irqs[0] = irq_create_mapping(NULL, IIC_IRQ_CLASS_0 | isrc);
@@ -262,7 +260,7 @@ static int spu_map_resource(struct spu *spu, int nr,
262 start_pfn = resource.start >> PAGE_SHIFT; 260 start_pfn = resource.start >> PAGE_SHIFT;
263 nr_pages = (len + PAGE_SIZE - 1) >> PAGE_SHIFT; 261 nr_pages = (len + PAGE_SIZE - 1) >> PAGE_SHIFT;
264 262
265 pgdata = NODE_DATA(spu_get_pdata(spu)->nid); 263 pgdata = NODE_DATA(spu->node);
266 zone = pgdata->node_zones; 264 zone = pgdata->node_zones;
267 265
268 /* XXX rethink locking here */ 266 /* XXX rethink locking here */
@@ -360,7 +358,7 @@ static int __init of_create_spu(struct spu *spu, void *data)
360 } 358 }
361 spu_get_pdata(spu)->devnode = of_node_get(spe); 359 spu_get_pdata(spu)->devnode = of_node_get(spe);
362 360
363 spu->node = find_spu_node_id(spe); 361 spu->node = of_node_to_nid(spe);
364 if (spu->node >= MAX_NUMNODES) { 362 if (spu->node >= MAX_NUMNODES) {
365 printk(KERN_WARNING "SPE %s on node %d ignored," 363 printk(KERN_WARNING "SPE %s on node %d ignored,"
366 " node number too big\n", spe->full_name, spu->node); 364 " node number too big\n", spe->full_name, spu->node);
@@ -369,10 +367,6 @@ static int __init of_create_spu(struct spu *spu, void *data)
369 goto out_free; 367 goto out_free;
370 } 368 }
371 369
372 spu_get_pdata(spu)->nid = of_node_to_nid(spe);
373 if (spu_get_pdata(spu)->nid == -1)
374 spu_get_pdata(spu)->nid = 0;
375
376 ret = spu_map_device(spu); 370 ret = spu_map_device(spu);
377 /* try old method */ 371 /* try old method */
378 if (ret) 372 if (ret)