• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/powerpc/platforms/cell/

Lines Matching defs:spu

2  * spu management operations for of based platforms
32 #include <asm/spu.h>
40 struct device_node *spu_devnode(struct spu *spu)
42 return spu->devnode;
70 static void spu_unmap(struct spu *spu)
73 iounmap(spu->priv1);
74 iounmap(spu->priv2);
75 iounmap(spu->problem);
76 iounmap((__force u8 __iomem *)spu->local_store);
79 static int __init spu_map_interrupts_old(struct spu *spu,
95 nid = spu->node;
103 spu->irqs[0] = irq_create_mapping(NULL, IIC_IRQ_CLASS_0 | isrc);
104 spu->irqs[1] = irq_create_mapping(NULL, IIC_IRQ_CLASS_1 | isrc);
105 spu->irqs[2] = irq_create_mapping(NULL, IIC_IRQ_CLASS_2 | isrc);
108 return spu->irqs[2] == NO_IRQ ? -EINVAL : 0;
111 static void __iomem * __init spu_map_prop_old(struct spu *spu,
128 static int __init spu_map_device_old(struct spu *spu)
130 struct device_node *node = spu->devnode;
135 spu->name = of_get_property(node, "name", NULL);
136 if (!spu->name)
142 spu->local_store_phys = *(unsigned long *)prop;
145 spu->local_store = (void __force *)
146 spu_map_prop_old(spu, node, "local-store");
147 if (!spu->local_store)
153 spu->problem_phys = *(unsigned long *)prop;
155 spu->problem = spu_map_prop_old(spu, node, "problem");
156 if (!spu->problem)
159 spu->priv2 = spu_map_prop_old(spu, node, "priv2");
160 if (!spu->priv2)
164 spu->priv1 = spu_map_prop_old(spu, node, "priv1");
165 if (!spu->priv1)
173 spu_unmap(spu);
178 static int __init spu_map_interrupts(struct spu *spu, struct device_node *np)
193 spu->irqs[i] = irq_create_of_mapping(oirq.controller,
195 if (spu->irqs[i] == NO_IRQ) {
203 pr_debug("failed to map irq %x for spu %s\n", *oirq.specifier,
204 spu->name);
206 if (spu->irqs[i] != NO_IRQ)
207 irq_dispose_mapping(spu->irqs[i]);
212 static int spu_map_resource(struct spu *spu, int nr,
215 struct device_node *np = spu->devnode;
232 static int __init spu_map_device(struct spu *spu)
234 struct device_node *np = spu->devnode;
237 spu->name = of_get_property(np, "name", NULL);
238 if (!spu->name)
241 ret = spu_map_resource(spu, 0, (void __iomem**)&spu->local_store,
242 &spu->local_store_phys);
248 ret = spu_map_resource(spu, 1, (void __iomem**)&spu->problem,
249 &spu->problem_phys);
255 ret = spu_map_resource(spu, 2, (void __iomem**)&spu->priv2, NULL);
262 ret = spu_map_resource(spu, 3,
263 (void __iomem**)&spu->priv1, NULL);
271 spu->local_store_phys, spu->local_store);
273 spu->problem_phys, spu->problem);
274 pr_debug(" priv2 : 0x%p\n", spu->priv2);
275 pr_debug(" priv1 : 0x%p\n", spu->priv1);
280 spu_unmap(spu);
282 pr_debug("failed to map spe %s: %d\n", spu->name, ret);
306 static int __init of_create_spu(struct spu *spu, void *data)
312 spu->devnode = of_node_get(spe);
313 spu->spe_id = find_spu_unit_number(spe);
315 spu->node = of_node_to_nid(spe);
316 if (spu->node >= MAX_NUMNODES) {
318 " node number too big\n", spe->full_name, spu->node);
324 ret = spu_map_device(spu);
331 ret = spu_map_device_old(spu);
334 spu->name);
339 ret = spu_map_interrupts(spu, spe);
346 ret = spu_map_interrupts_old(spu, spe);
349 spu->name);
354 pr_debug("Using SPE %s %p %p %p %p %d\n", spu->name,
355 spu->local_store, spu->problem, spu->priv1,
356 spu->priv2, spu->number);
360 spu_unmap(spu);
365 static int of_destroy_spu(struct spu *spu)
367 spu_unmap(spu);
368 of_node_put(spu->devnode);
387 static struct spu *spu_lookup_reg(int node, u32 reg)
389 struct spu *spu;
392 list_for_each_entry(spu, &cbe_spu_info[node].spus, cbe_list) {
393 spu_reg = of_get_property(spu_devnode(spu), "reg", NULL);
395 return spu;
403 struct spu *last_spu, *spu;
410 spu = spu_lookup_reg(node, reg);
411 if (!spu)
413 spu->has_mem_affinity = qs20_reg_memory[reg];
415 list_add_tail(&spu->aff_list,
417 last_spu = spu;
435 static struct spu *devnode_spu(int cbe, struct device_node *dn)
437 struct spu *spu;
439 list_for_each_entry(spu, &cbe_spu_info[cbe].spus, cbe_list)
440 if (spu_devnode(spu) == dn)
441 return spu;
445 static struct spu *
448 struct spu *spu;
453 list_for_each_entry(spu, &cbe_spu_info[cbe].spus, cbe_list) {
454 spu_dn = spu_devnode(spu);
460 return spu;
468 struct spu *spu, *last_spu;
475 last_spu = list_first_entry(&cbe_spu_info[cbe].spus, struct spu,
483 * Walk through each phandle in vicinity property of the spu
500 spu = devnode_spu(cbe, vic_dn);
509 spu = neighbour_spu(cbe, vic_dn, last_spu_dn);
510 if (!spu)
514 spu->has_mem_affinity = 1;
519 list_add_tail(&spu->aff_list, &last_spu->aff_list);
520 last_spu = spu;