Lines Matching refs:spu
40 struct device_node *spu_devnode(struct spu *spu) in spu_devnode() argument
42 return spu->devnode; in spu_devnode()
70 static void spu_unmap(struct spu *spu) in spu_unmap() argument
73 iounmap(spu->priv1); in spu_unmap()
74 iounmap(spu->priv2); in spu_unmap()
75 iounmap(spu->problem); in spu_unmap()
76 iounmap((__force u8 __iomem *)spu->local_store); in spu_unmap()
79 static int __init spu_map_interrupts_old(struct spu *spu, in spu_map_interrupts_old() argument
95 nid = spu->node; in spu_map_interrupts_old()
103 spu->irqs[0] = irq_create_mapping(NULL, IIC_IRQ_CLASS_0 | isrc); in spu_map_interrupts_old()
104 spu->irqs[1] = irq_create_mapping(NULL, IIC_IRQ_CLASS_1 | isrc); in spu_map_interrupts_old()
105 spu->irqs[2] = irq_create_mapping(NULL, IIC_IRQ_CLASS_2 | isrc); in spu_map_interrupts_old()
108 return spu->irqs[2] == NO_IRQ ? -EINVAL : 0; in spu_map_interrupts_old()
111 static void __iomem * __init spu_map_prop_old(struct spu *spu, in spu_map_prop_old() argument
128 static int __init spu_map_device_old(struct spu *spu) in spu_map_device_old() argument
130 struct device_node *node = spu->devnode; in spu_map_device_old()
135 spu->name = of_get_property(node, "name", NULL); in spu_map_device_old()
136 if (!spu->name) in spu_map_device_old()
142 spu->local_store_phys = *(unsigned long *)prop; in spu_map_device_old()
145 spu->local_store = (void __force *) in spu_map_device_old()
146 spu_map_prop_old(spu, node, "local-store"); in spu_map_device_old()
147 if (!spu->local_store) in spu_map_device_old()
153 spu->problem_phys = *(unsigned long *)prop; in spu_map_device_old()
155 spu->problem = spu_map_prop_old(spu, node, "problem"); in spu_map_device_old()
156 if (!spu->problem) in spu_map_device_old()
159 spu->priv2 = spu_map_prop_old(spu, node, "priv2"); in spu_map_device_old()
160 if (!spu->priv2) in spu_map_device_old()
164 spu->priv1 = spu_map_prop_old(spu, node, "priv1"); in spu_map_device_old()
165 if (!spu->priv1) in spu_map_device_old()
173 spu_unmap(spu); in spu_map_device_old()
178 static int __init spu_map_interrupts(struct spu *spu, struct device_node *np) in spu_map_interrupts() argument
193 spu->irqs[i] = irq_create_of_mapping(&oirq); in spu_map_interrupts()
194 if (spu->irqs[i] == NO_IRQ) { in spu_map_interrupts()
203 spu->name); in spu_map_interrupts()
205 if (spu->irqs[i] != NO_IRQ) in spu_map_interrupts()
206 irq_dispose_mapping(spu->irqs[i]); in spu_map_interrupts()
211 static int spu_map_resource(struct spu *spu, int nr, in spu_map_resource() argument
214 struct device_node *np = spu->devnode; in spu_map_resource()
231 static int __init spu_map_device(struct spu *spu) in spu_map_device() argument
233 struct device_node *np = spu->devnode; in spu_map_device()
236 spu->name = of_get_property(np, "name", NULL); in spu_map_device()
237 if (!spu->name) in spu_map_device()
240 ret = spu_map_resource(spu, 0, (void __iomem**)&spu->local_store, in spu_map_device()
241 &spu->local_store_phys); in spu_map_device()
247 ret = spu_map_resource(spu, 1, (void __iomem**)&spu->problem, in spu_map_device()
248 &spu->problem_phys); in spu_map_device()
254 ret = spu_map_resource(spu, 2, (void __iomem**)&spu->priv2, NULL); in spu_map_device()
261 ret = spu_map_resource(spu, 3, in spu_map_device()
262 (void __iomem**)&spu->priv1, NULL); in spu_map_device()
270 spu->local_store_phys, spu->local_store); in spu_map_device()
272 spu->problem_phys, spu->problem); in spu_map_device()
273 pr_debug(" priv2 : 0x%p\n", spu->priv2); in spu_map_device()
274 pr_debug(" priv1 : 0x%p\n", spu->priv1); in spu_map_device()
279 spu_unmap(spu); in spu_map_device()
281 pr_debug("failed to map spe %s: %d\n", spu->name, ret); in spu_map_device()
305 static int __init of_create_spu(struct spu *spu, void *data) in of_create_spu() argument
311 spu->devnode = of_node_get(spe); in of_create_spu()
312 spu->spe_id = find_spu_unit_number(spe); in of_create_spu()
314 spu->node = of_node_to_nid(spe); in of_create_spu()
315 if (spu->node >= MAX_NUMNODES) { in of_create_spu()
317 " node number too big\n", spe->full_name, spu->node); in of_create_spu()
323 ret = spu_map_device(spu); in of_create_spu()
330 ret = spu_map_device_old(spu); in of_create_spu()
333 spu->name); in of_create_spu()
338 ret = spu_map_interrupts(spu, spe); in of_create_spu()
345 ret = spu_map_interrupts_old(spu, spe); in of_create_spu()
348 spu->name); in of_create_spu()
353 pr_debug("Using SPE %s %p %p %p %p %d\n", spu->name, in of_create_spu()
354 spu->local_store, spu->problem, spu->priv1, in of_create_spu()
355 spu->priv2, spu->number); in of_create_spu()
359 spu_unmap(spu); in of_create_spu()
364 static int of_destroy_spu(struct spu *spu) in of_destroy_spu() argument
366 spu_unmap(spu); in of_destroy_spu()
367 of_node_put(spu->devnode); in of_destroy_spu()
386 static struct spu *spu_lookup_reg(int node, u32 reg) in spu_lookup_reg()
388 struct spu *spu; in spu_lookup_reg() local
391 list_for_each_entry(spu, &cbe_spu_info[node].spus, cbe_list) { in spu_lookup_reg()
392 spu_reg = of_get_property(spu_devnode(spu), "reg", NULL); in spu_lookup_reg()
394 return spu; in spu_lookup_reg()
402 struct spu *last_spu, *spu; in init_affinity_qs20_harcoded() local
409 spu = spu_lookup_reg(node, reg); in init_affinity_qs20_harcoded()
410 if (!spu) in init_affinity_qs20_harcoded()
412 spu->has_mem_affinity = qs20_reg_memory[reg]; in init_affinity_qs20_harcoded()
414 list_add_tail(&spu->aff_list, in init_affinity_qs20_harcoded()
416 last_spu = spu; in init_affinity_qs20_harcoded()
434 static struct spu *devnode_spu(int cbe, struct device_node *dn) in devnode_spu()
436 struct spu *spu; in devnode_spu() local
438 list_for_each_entry(spu, &cbe_spu_info[cbe].spus, cbe_list) in devnode_spu()
439 if (spu_devnode(spu) == dn) in devnode_spu()
440 return spu; in devnode_spu()
444 static struct spu *
447 struct spu *spu; in neighbour_spu() local
452 list_for_each_entry(spu, &cbe_spu_info[cbe].spus, cbe_list) { in neighbour_spu()
453 spu_dn = spu_devnode(spu); in neighbour_spu()
459 return spu; in neighbour_spu()
467 struct spu *spu, *last_spu; in init_affinity_node() local
474 last_spu = list_first_entry(&cbe_spu_info[cbe].spus, struct spu, in init_affinity_node()
499 spu = devnode_spu(cbe, vic_dn); in init_affinity_node()
508 spu = neighbour_spu(cbe, vic_dn, last_spu_dn); in init_affinity_node()
509 if (!spu) in init_affinity_node()
513 spu->has_mem_affinity = 1; in init_affinity_node()
518 list_add_tail(&spu->aff_list, &last_spu->aff_list); in init_affinity_node()
519 last_spu = spu; in init_affinity_node()