Lines Matching refs:spu
128 static struct spu_pdata *spu_pdata(struct spu *spu) in spu_pdata() argument
130 return spu->pdata; in spu_pdata()
162 static int __init construct_spu(struct spu *spu) in construct_spu() argument
171 &spu_pdata(spu)->priv2_addr, &problem_phys, in construct_spu()
173 &spu_pdata(spu)->shadow_addr, in construct_spu()
174 &spu_pdata(spu)->spe_id); in construct_spu()
175 spu->problem_phys = problem_phys; in construct_spu()
176 spu->local_store_phys = local_store_phys; in construct_spu()
187 static void spu_unmap(struct spu *spu) in spu_unmap() argument
189 iounmap(spu->priv2); in spu_unmap()
190 iounmap(spu->problem); in spu_unmap()
191 iounmap((__force u8 __iomem *)spu->local_store); in spu_unmap()
192 iounmap(spu_pdata(spu)->shadow); in spu_unmap()
205 static int __init setup_areas(struct spu *spu) in setup_areas() argument
210 spu_pdata(spu)->shadow = __ioremap(spu_pdata(spu)->shadow_addr, in setup_areas()
213 if (!spu_pdata(spu)->shadow) { in setup_areas()
218 spu->local_store = (__force void *)ioremap_prot(spu->local_store_phys, in setup_areas()
221 if (!spu->local_store) { in setup_areas()
227 spu->problem = ioremap(spu->problem_phys, in setup_areas()
230 if (!spu->problem) { in setup_areas()
235 spu->priv2 = ioremap(spu_pdata(spu)->priv2_addr, in setup_areas()
238 if (!spu->priv2) { in setup_areas()
243 dump_areas(spu_pdata(spu)->spe_id, spu_pdata(spu)->priv2_addr, in setup_areas()
244 spu->problem_phys, spu->local_store_phys, in setup_areas()
245 spu_pdata(spu)->shadow_addr); in setup_areas()
246 dump_areas(spu_pdata(spu)->spe_id, (unsigned long)spu->priv2, in setup_areas()
247 (unsigned long)spu->problem, (unsigned long)spu->local_store, in setup_areas()
248 (unsigned long)spu_pdata(spu)->shadow); in setup_areas()
253 spu_unmap(spu); in setup_areas()
258 static int __init setup_interrupts(struct spu *spu) in setup_interrupts() argument
262 result = ps3_spe_irq_setup(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id, in setup_interrupts()
263 0, &spu->irqs[0]); in setup_interrupts()
268 result = ps3_spe_irq_setup(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id, in setup_interrupts()
269 1, &spu->irqs[1]); in setup_interrupts()
274 result = ps3_spe_irq_setup(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id, in setup_interrupts()
275 2, &spu->irqs[2]); in setup_interrupts()
283 ps3_spe_irq_destroy(spu->irqs[1]); in setup_interrupts()
285 ps3_spe_irq_destroy(spu->irqs[0]); in setup_interrupts()
287 spu->irqs[0] = spu->irqs[1] = spu->irqs[2] = NO_IRQ; in setup_interrupts()
291 static int __init enable_spu(struct spu *spu) in enable_spu() argument
295 result = lv1_enable_logical_spe(spu_pdata(spu)->spe_id, in enable_spu()
296 spu_pdata(spu)->resource_id); in enable_spu()
304 result = setup_areas(spu); in enable_spu()
309 result = setup_interrupts(spu); in enable_spu()
317 spu_unmap(spu); in enable_spu()
319 lv1_disable_logical_spe(spu_pdata(spu)->spe_id, 0); in enable_spu()
324 static int ps3_destroy_spu(struct spu *spu) in ps3_destroy_spu() argument
328 pr_debug("%s:%d spu_%d\n", __func__, __LINE__, spu->number); in ps3_destroy_spu()
330 result = lv1_disable_logical_spe(spu_pdata(spu)->spe_id, 0); in ps3_destroy_spu()
333 ps3_spe_irq_destroy(spu->irqs[2]); in ps3_destroy_spu()
334 ps3_spe_irq_destroy(spu->irqs[1]); in ps3_destroy_spu()
335 ps3_spe_irq_destroy(spu->irqs[0]); in ps3_destroy_spu()
337 spu->irqs[0] = spu->irqs[1] = spu->irqs[2] = NO_IRQ; in ps3_destroy_spu()
339 spu_unmap(spu); in ps3_destroy_spu()
341 result = lv1_destruct_logical_spe(spu_pdata(spu)->spe_id); in ps3_destroy_spu()
344 kfree(spu->pdata); in ps3_destroy_spu()
345 spu->pdata = NULL; in ps3_destroy_spu()
350 static int __init ps3_create_spu(struct spu *spu, void *data) in ps3_create_spu() argument
354 pr_debug("%s:%d spu_%d\n", __func__, __LINE__, spu->number); in ps3_create_spu()
356 spu->pdata = kzalloc(sizeof(struct spu_pdata), in ps3_create_spu()
359 if (!spu->pdata) { in ps3_create_spu()
364 spu_pdata(spu)->resource_id = (unsigned long)data; in ps3_create_spu()
368 spu_pdata(spu)->cache.sr1 = 0x33; in ps3_create_spu()
370 result = construct_spu(spu); in ps3_create_spu()
377 result = enable_spu(spu); in ps3_create_spu()
385 while (in_be64(&spu_pdata(spu)->shadow->spe_execution_status) in ps3_create_spu()
393 ps3_destroy_spu(spu); in ps3_create_spu()
479 static void int_mask_and(struct spu *spu, int class, u64 mask) in int_mask_and() argument
484 old_mask = spu_int_mask_get(spu, class); in int_mask_and()
485 spu_int_mask_set(spu, class, old_mask & mask); in int_mask_and()
488 static void int_mask_or(struct spu *spu, int class, u64 mask) in int_mask_or() argument
492 old_mask = spu_int_mask_get(spu, class); in int_mask_or()
493 spu_int_mask_set(spu, class, old_mask | mask); in int_mask_or()
496 static void int_mask_set(struct spu *spu, int class, u64 mask) in int_mask_set() argument
498 spu_pdata(spu)->cache.masks[class] = mask; in int_mask_set()
499 lv1_set_spe_interrupt_mask(spu_pdata(spu)->spe_id, class, in int_mask_set()
500 spu_pdata(spu)->cache.masks[class]); in int_mask_set()
503 static u64 int_mask_get(struct spu *spu, int class) in int_mask_get() argument
505 return spu_pdata(spu)->cache.masks[class]; in int_mask_get()
508 static void int_stat_clear(struct spu *spu, int class, u64 stat) in int_stat_clear() argument
512 lv1_clear_spe_interrupt_status(spu_pdata(spu)->spe_id, class, in int_stat_clear()
516 static u64 int_stat_get(struct spu *spu, int class) in int_stat_get() argument
520 lv1_get_spe_interrupt_status(spu_pdata(spu)->spe_id, class, &stat); in int_stat_get()
524 static void cpu_affinity_set(struct spu *spu, int cpu) in cpu_affinity_set() argument
529 static u64 mfc_dar_get(struct spu *spu) in mfc_dar_get() argument
531 return in_be64(&spu_pdata(spu)->shadow->mfc_dar_RW); in mfc_dar_get()
534 static void mfc_dsisr_set(struct spu *spu, u64 dsisr) in mfc_dsisr_set() argument
539 static u64 mfc_dsisr_get(struct spu *spu) in mfc_dsisr_get() argument
541 return in_be64(&spu_pdata(spu)->shadow->mfc_dsisr_RW); in mfc_dsisr_get()
544 static void mfc_sdr_setup(struct spu *spu) in mfc_sdr_setup() argument
549 static void mfc_sr1_set(struct spu *spu, u64 sr1) in mfc_sr1_set() argument
556 BUG_ON((sr1 & allowed) != (spu_pdata(spu)->cache.sr1 & allowed)); in mfc_sr1_set()
558 spu_pdata(spu)->cache.sr1 = sr1; in mfc_sr1_set()
560 spu_pdata(spu)->spe_id, in mfc_sr1_set()
562 spu_pdata(spu)->cache.sr1); in mfc_sr1_set()
565 static u64 mfc_sr1_get(struct spu *spu) in mfc_sr1_get() argument
567 return spu_pdata(spu)->cache.sr1; in mfc_sr1_get()
570 static void mfc_tclass_id_set(struct spu *spu, u64 tclass_id) in mfc_tclass_id_set() argument
572 spu_pdata(spu)->cache.tclass_id = tclass_id; in mfc_tclass_id_set()
574 spu_pdata(spu)->spe_id, in mfc_tclass_id_set()
576 spu_pdata(spu)->cache.tclass_id); in mfc_tclass_id_set()
579 static u64 mfc_tclass_id_get(struct spu *spu) in mfc_tclass_id_get() argument
581 return spu_pdata(spu)->cache.tclass_id; in mfc_tclass_id_get()
584 static void tlb_invalidate(struct spu *spu) in tlb_invalidate() argument
589 static void resource_allocation_groupID_set(struct spu *spu, u64 id) in resource_allocation_groupID_set() argument
594 static u64 resource_allocation_groupID_get(struct spu *spu) in resource_allocation_groupID_get() argument
599 static void resource_allocation_enable_set(struct spu *spu, u64 enable) in resource_allocation_enable_set() argument
604 static u64 resource_allocation_enable_get(struct spu *spu) in resource_allocation_enable_get() argument