Lines Matching refs:kproc
112 struct k3_dsp_rproc *kproc = container_of(client, struct k3_dsp_rproc, in k3_dsp_rproc_mbox_callback() local
114 struct device *dev = kproc->rproc->dev.parent; in k3_dsp_rproc_mbox_callback()
115 const char *name = kproc->rproc->name; in k3_dsp_rproc_mbox_callback()
135 if (msg > kproc->rproc->max_notifyid) { in k3_dsp_rproc_mbox_callback()
140 if (rproc_vq_interrupt(kproc->rproc, msg) == IRQ_NONE) in k3_dsp_rproc_mbox_callback()
153 struct k3_dsp_rproc *kproc = rproc->priv; in k3_dsp_rproc_kick() local
159 ret = mbox_send_message(kproc->mbox, (void *)msg); in k3_dsp_rproc_kick()
166 static int k3_dsp_rproc_reset(struct k3_dsp_rproc *kproc) in k3_dsp_rproc_reset() argument
168 struct device *dev = kproc->dev; in k3_dsp_rproc_reset()
171 ret = reset_control_assert(kproc->reset); in k3_dsp_rproc_reset()
177 if (kproc->data->uses_lreset) in k3_dsp_rproc_reset()
180 ret = kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, in k3_dsp_rproc_reset()
181 kproc->ti_sci_id); in k3_dsp_rproc_reset()
184 if (reset_control_deassert(kproc->reset)) in k3_dsp_rproc_reset()
192 static int k3_dsp_rproc_release(struct k3_dsp_rproc *kproc) in k3_dsp_rproc_release() argument
194 struct device *dev = kproc->dev; in k3_dsp_rproc_release()
197 if (kproc->data->uses_lreset) in k3_dsp_rproc_release()
200 ret = kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, in k3_dsp_rproc_release()
201 kproc->ti_sci_id); in k3_dsp_rproc_release()
208 ret = reset_control_deassert(kproc->reset); in k3_dsp_rproc_release()
211 if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, in k3_dsp_rproc_release()
212 kproc->ti_sci_id)) in k3_dsp_rproc_release()
230 struct k3_dsp_rproc *kproc = rproc->priv; in k3_dsp_rproc_prepare() local
231 struct device *dev = kproc->dev; in k3_dsp_rproc_prepare()
234 ret = kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, in k3_dsp_rproc_prepare()
235 kproc->ti_sci_id); in k3_dsp_rproc_prepare()
254 struct k3_dsp_rproc *kproc = rproc->priv; in k3_dsp_rproc_unprepare() local
255 struct device *dev = kproc->dev; in k3_dsp_rproc_unprepare()
258 ret = kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, in k3_dsp_rproc_unprepare()
259 kproc->ti_sci_id); in k3_dsp_rproc_unprepare()
275 struct k3_dsp_rproc *kproc = rproc->priv; in k3_dsp_rproc_start() local
276 struct mbox_client *client = &kproc->client; in k3_dsp_rproc_start()
277 struct device *dev = kproc->dev; in k3_dsp_rproc_start()
287 kproc->mbox = mbox_request_channel(client, 0); in k3_dsp_rproc_start()
288 if (IS_ERR(kproc->mbox)) { in k3_dsp_rproc_start()
291 PTR_ERR(kproc->mbox)); in k3_dsp_rproc_start()
302 ret = mbox_send_message(kproc->mbox, (void *)RP_MBOX_ECHO_REQUEST); in k3_dsp_rproc_start()
309 if (boot_addr & (kproc->data->boot_align_addr - 1)) { in k3_dsp_rproc_start()
311 boot_addr, kproc->data->boot_align_addr); in k3_dsp_rproc_start()
317 ret = ti_sci_proc_set_config(kproc->tsp, boot_addr, 0, 0); in k3_dsp_rproc_start()
321 ret = k3_dsp_rproc_release(kproc); in k3_dsp_rproc_start()
328 mbox_free_channel(kproc->mbox); in k3_dsp_rproc_start()
340 struct k3_dsp_rproc *kproc = rproc->priv; in k3_dsp_rproc_stop() local
342 mbox_free_channel(kproc->mbox); in k3_dsp_rproc_stop()
344 k3_dsp_rproc_reset(kproc); in k3_dsp_rproc_stop()
359 struct k3_dsp_rproc *kproc = rproc->priv; in k3_dsp_rproc_da_to_va() local
369 for (i = 0; i < kproc->num_mems; i++) { in k3_dsp_rproc_da_to_va()
370 bus_addr = kproc->mem[i].bus_addr; in k3_dsp_rproc_da_to_va()
371 dev_addr = kproc->mem[i].dev_addr; in k3_dsp_rproc_da_to_va()
372 size = kproc->mem[i].size; in k3_dsp_rproc_da_to_va()
379 va = kproc->mem[i].cpu_addr + offset; in k3_dsp_rproc_da_to_va()
387 va = kproc->mem[i].cpu_addr + offset; in k3_dsp_rproc_da_to_va()
394 for (i = 0; i < kproc->num_rmems; i++) { in k3_dsp_rproc_da_to_va()
395 dev_addr = kproc->rmem[i].dev_addr; in k3_dsp_rproc_da_to_va()
396 size = kproc->rmem[i].size; in k3_dsp_rproc_da_to_va()
400 va = kproc->rmem[i].cpu_addr + offset; in k3_dsp_rproc_da_to_va()
416 struct k3_dsp_rproc *kproc) in k3_dsp_rproc_of_get_memories() argument
418 const struct k3_dsp_dev_data *data = kproc->data; in k3_dsp_rproc_of_get_memories()
424 num_mems = kproc->data->num_mems; in k3_dsp_rproc_of_get_memories()
425 kproc->mem = devm_kcalloc(kproc->dev, num_mems, in k3_dsp_rproc_of_get_memories()
426 sizeof(*kproc->mem), GFP_KERNEL); in k3_dsp_rproc_of_get_memories()
427 if (!kproc->mem) in k3_dsp_rproc_of_get_memories()
446 kproc->mem[i].cpu_addr = devm_ioremap_wc(dev, res->start, in k3_dsp_rproc_of_get_memories()
448 if (IS_ERR(kproc->mem[i].cpu_addr)) { in k3_dsp_rproc_of_get_memories()
451 return PTR_ERR(kproc->mem[i].cpu_addr); in k3_dsp_rproc_of_get_memories()
453 kproc->mem[i].bus_addr = res->start; in k3_dsp_rproc_of_get_memories()
454 kproc->mem[i].dev_addr = data->mems[i].dev_addr; in k3_dsp_rproc_of_get_memories()
455 kproc->mem[i].size = resource_size(res); in k3_dsp_rproc_of_get_memories()
458 data->mems[i].name, &kproc->mem[i].bus_addr, in k3_dsp_rproc_of_get_memories()
459 kproc->mem[i].size, kproc->mem[i].cpu_addr, in k3_dsp_rproc_of_get_memories()
460 kproc->mem[i].dev_addr); in k3_dsp_rproc_of_get_memories()
462 kproc->num_mems = num_mems; in k3_dsp_rproc_of_get_memories()
467 static int k3_dsp_reserved_mem_init(struct k3_dsp_rproc *kproc) in k3_dsp_reserved_mem_init() argument
469 struct device *dev = kproc->dev; in k3_dsp_reserved_mem_init()
498 kproc->rmem = kcalloc(num_rmems, sizeof(*kproc->rmem), GFP_KERNEL); in k3_dsp_reserved_mem_init()
499 if (!kproc->rmem) { in k3_dsp_reserved_mem_init()
520 kproc->rmem[i].bus_addr = rmem->base; in k3_dsp_reserved_mem_init()
522 kproc->rmem[i].dev_addr = (u32)rmem->base; in k3_dsp_reserved_mem_init()
523 kproc->rmem[i].size = rmem->size; in k3_dsp_reserved_mem_init()
524 kproc->rmem[i].cpu_addr = ioremap_wc(rmem->base, rmem->size); in k3_dsp_reserved_mem_init()
525 if (!kproc->rmem[i].cpu_addr) { in k3_dsp_reserved_mem_init()
533 i + 1, &kproc->rmem[i].bus_addr, in k3_dsp_reserved_mem_init()
534 kproc->rmem[i].size, kproc->rmem[i].cpu_addr, in k3_dsp_reserved_mem_init()
535 kproc->rmem[i].dev_addr); in k3_dsp_reserved_mem_init()
537 kproc->num_rmems = num_rmems; in k3_dsp_reserved_mem_init()
543 iounmap(kproc->rmem[i].cpu_addr); in k3_dsp_reserved_mem_init()
544 kfree(kproc->rmem); in k3_dsp_reserved_mem_init()
546 of_reserved_mem_device_release(kproc->dev); in k3_dsp_reserved_mem_init()
550 static void k3_dsp_reserved_mem_exit(struct k3_dsp_rproc *kproc) in k3_dsp_reserved_mem_exit() argument
554 for (i = 0; i < kproc->num_rmems; i++) in k3_dsp_reserved_mem_exit()
555 iounmap(kproc->rmem[i].cpu_addr); in k3_dsp_reserved_mem_exit()
556 kfree(kproc->rmem); in k3_dsp_reserved_mem_exit()
558 of_reserved_mem_device_release(kproc->dev); in k3_dsp_reserved_mem_exit()
592 struct k3_dsp_rproc *kproc; in k3_dsp_rproc_probe() local
610 sizeof(*kproc)); in k3_dsp_rproc_probe()
620 kproc = rproc->priv; in k3_dsp_rproc_probe()
621 kproc->rproc = rproc; in k3_dsp_rproc_probe()
622 kproc->dev = dev; in k3_dsp_rproc_probe()
623 kproc->data = data; in k3_dsp_rproc_probe()
625 kproc->ti_sci = ti_sci_get_by_phandle(np, "ti,sci"); in k3_dsp_rproc_probe()
626 if (IS_ERR(kproc->ti_sci)) { in k3_dsp_rproc_probe()
627 ret = PTR_ERR(kproc->ti_sci); in k3_dsp_rproc_probe()
632 kproc->ti_sci = NULL; in k3_dsp_rproc_probe()
636 ret = of_property_read_u32(np, "ti,sci-dev-id", &kproc->ti_sci_id); in k3_dsp_rproc_probe()
642 kproc->reset = devm_reset_control_get_exclusive(dev, NULL); in k3_dsp_rproc_probe()
643 if (IS_ERR(kproc->reset)) { in k3_dsp_rproc_probe()
644 ret = PTR_ERR(kproc->reset); in k3_dsp_rproc_probe()
649 kproc->tsp = k3_dsp_rproc_of_get_tsp(dev, kproc->ti_sci); in k3_dsp_rproc_probe()
650 if (IS_ERR(kproc->tsp)) { in k3_dsp_rproc_probe()
653 ret = PTR_ERR(kproc->tsp); in k3_dsp_rproc_probe()
657 ret = ti_sci_proc_request(kproc->tsp); in k3_dsp_rproc_probe()
663 ret = k3_dsp_rproc_of_get_memories(pdev, kproc); in k3_dsp_rproc_probe()
667 ret = k3_dsp_reserved_mem_init(kproc); in k3_dsp_rproc_probe()
678 ret = reset_control_status(kproc->reset); in k3_dsp_rproc_probe()
685 k3_dsp_rproc_reset(kproc); in k3_dsp_rproc_probe()
696 platform_set_drvdata(pdev, kproc); in k3_dsp_rproc_probe()
701 k3_dsp_reserved_mem_exit(kproc); in k3_dsp_rproc_probe()
703 ret1 = ti_sci_proc_release(kproc->tsp); in k3_dsp_rproc_probe()
707 kfree(kproc->tsp); in k3_dsp_rproc_probe()
709 ret1 = ti_sci_put_handle(kproc->ti_sci); in k3_dsp_rproc_probe()
719 struct k3_dsp_rproc *kproc = platform_get_drvdata(pdev); in k3_dsp_rproc_remove() local
723 rproc_del(kproc->rproc); in k3_dsp_rproc_remove()
725 ret = ti_sci_proc_release(kproc->tsp); in k3_dsp_rproc_remove()
729 kfree(kproc->tsp); in k3_dsp_rproc_remove()
731 ret = ti_sci_put_handle(kproc->ti_sci); in k3_dsp_rproc_remove()
735 k3_dsp_reserved_mem_exit(kproc); in k3_dsp_rproc_remove()
736 rproc_free(kproc->rproc); in k3_dsp_rproc_remove()