Lines Matching refs:ksproc

70 static void keystone_rproc_dsp_reset(struct keystone_rproc *ksproc)  in keystone_rproc_dsp_reset()  argument
72 reset_control_assert(ksproc->reset); in keystone_rproc_dsp_reset()
76 static int keystone_rproc_dsp_boot(struct keystone_rproc *ksproc, u32 boot_addr) in keystone_rproc_dsp_boot() argument
81 dev_err(ksproc->dev, "invalid boot address 0x%x, must be aligned on a 1KB boundary\n", in keystone_rproc_dsp_boot()
86 ret = regmap_write(ksproc->dev_ctrl, ksproc->boot_offset, boot_addr); in keystone_rproc_dsp_boot()
88 dev_err(ksproc->dev, "regmap_write of boot address failed, status = %d\n", in keystone_rproc_dsp_boot()
93 reset_control_deassert(ksproc->reset); in keystone_rproc_dsp_boot()
111 struct keystone_rproc *ksproc = dev_id; in keystone_rproc_exception_interrupt() local
113 rproc_report_crash(ksproc->rproc, RPROC_FATAL_ERROR); in keystone_rproc_exception_interrupt()
143 struct keystone_rproc *ksproc = in handle_event() local
146 rproc_vq_interrupt(ksproc->rproc, 0); in handle_event()
147 rproc_vq_interrupt(ksproc->rproc, 1); in handle_event()
155 struct keystone_rproc *ksproc = dev_id; in keystone_rproc_vring_interrupt() local
157 schedule_work(&ksproc->workqueue); in keystone_rproc_vring_interrupt()
171 struct keystone_rproc *ksproc = rproc->priv; in keystone_rproc_start() local
174 INIT_WORK(&ksproc->workqueue, handle_event); in keystone_rproc_start()
176 ret = request_irq(ksproc->irq_ring, keystone_rproc_vring_interrupt, 0, in keystone_rproc_start()
177 dev_name(ksproc->dev), ksproc); in keystone_rproc_start()
179 dev_err(ksproc->dev, "failed to enable vring interrupt, ret = %d\n", in keystone_rproc_start()
184 ret = request_irq(ksproc->irq_fault, keystone_rproc_exception_interrupt, in keystone_rproc_start()
185 0, dev_name(ksproc->dev), ksproc); in keystone_rproc_start()
187 dev_err(ksproc->dev, "failed to enable exception interrupt, ret = %d\n", in keystone_rproc_start()
192 ret = keystone_rproc_dsp_boot(ksproc, rproc->bootaddr); in keystone_rproc_start()
199 free_irq(ksproc->irq_fault, ksproc); in keystone_rproc_start()
201 free_irq(ksproc->irq_ring, ksproc); in keystone_rproc_start()
202 flush_work(&ksproc->workqueue); in keystone_rproc_start()
215 struct keystone_rproc *ksproc = rproc->priv; in keystone_rproc_stop() local
217 keystone_rproc_dsp_reset(ksproc); in keystone_rproc_stop()
218 free_irq(ksproc->irq_fault, ksproc); in keystone_rproc_stop()
219 free_irq(ksproc->irq_ring, ksproc); in keystone_rproc_stop()
220 flush_work(&ksproc->workqueue); in keystone_rproc_stop()
233 struct keystone_rproc *ksproc = rproc->priv; in keystone_rproc_kick() local
235 if (WARN_ON(ksproc->kick_gpio < 0)) in keystone_rproc_kick()
238 gpio_set_value(ksproc->kick_gpio, 1); in keystone_rproc_kick()
251 struct keystone_rproc *ksproc = rproc->priv; in keystone_rproc_da_to_va() local
261 for (i = 0; i < ksproc->num_mems; i++) { in keystone_rproc_da_to_va()
262 bus_addr = ksproc->mem[i].bus_addr; in keystone_rproc_da_to_va()
263 dev_addr = ksproc->mem[i].dev_addr; in keystone_rproc_da_to_va()
264 size = ksproc->mem[i].size; in keystone_rproc_da_to_va()
271 va = ksproc->mem[i].cpu_addr + offset; in keystone_rproc_da_to_va()
279 va = ksproc->mem[i].cpu_addr + offset; in keystone_rproc_da_to_va()
296 struct keystone_rproc *ksproc) in keystone_rproc_of_get_memories() argument
305 ksproc->mem = devm_kcalloc(ksproc->dev, num_mems, in keystone_rproc_of_get_memories()
306 sizeof(*ksproc->mem), GFP_KERNEL); in keystone_rproc_of_get_memories()
307 if (!ksproc->mem) in keystone_rproc_of_get_memories()
313 ksproc->mem[i].cpu_addr = devm_ioremap_resource(dev, res); in keystone_rproc_of_get_memories()
314 if (IS_ERR(ksproc->mem[i].cpu_addr)) { in keystone_rproc_of_get_memories()
317 return PTR_ERR(ksproc->mem[i].cpu_addr); in keystone_rproc_of_get_memories()
319 ksproc->mem[i].bus_addr = res->start; in keystone_rproc_of_get_memories()
320 ksproc->mem[i].dev_addr = in keystone_rproc_of_get_memories()
322 ksproc->mem[i].size = resource_size(res); in keystone_rproc_of_get_memories()
325 memset((__force void *)ksproc->mem[i].cpu_addr, 0, in keystone_rproc_of_get_memories()
326 ksproc->mem[i].size); in keystone_rproc_of_get_memories()
328 ksproc->num_mems = num_mems; in keystone_rproc_of_get_memories()
334 struct keystone_rproc *ksproc) in keystone_rproc_of_get_dev_syscon() argument
345 ksproc->dev_ctrl = in keystone_rproc_of_get_dev_syscon()
347 if (IS_ERR(ksproc->dev_ctrl)) { in keystone_rproc_of_get_dev_syscon()
348 ret = PTR_ERR(ksproc->dev_ctrl); in keystone_rproc_of_get_dev_syscon()
353 &ksproc->boot_offset)) { in keystone_rproc_of_get_dev_syscon()
365 struct keystone_rproc *ksproc; in keystone_rproc_probe() local
392 sizeof(*ksproc)); in keystone_rproc_probe()
397 ksproc = rproc->priv; in keystone_rproc_probe()
398 ksproc->rproc = rproc; in keystone_rproc_probe()
399 ksproc->dev = dev; in keystone_rproc_probe()
401 ret = keystone_rproc_of_get_dev_syscon(pdev, ksproc); in keystone_rproc_probe()
405 ksproc->reset = devm_reset_control_get_exclusive(dev, NULL); in keystone_rproc_probe()
406 if (IS_ERR(ksproc->reset)) { in keystone_rproc_probe()
407 ret = PTR_ERR(ksproc->reset); in keystone_rproc_probe()
420 ret = keystone_rproc_of_get_memories(pdev, ksproc); in keystone_rproc_probe()
424 ksproc->irq_ring = platform_get_irq_byname(pdev, "vring"); in keystone_rproc_probe()
425 if (ksproc->irq_ring < 0) { in keystone_rproc_probe()
426 ret = ksproc->irq_ring; in keystone_rproc_probe()
430 ksproc->irq_fault = platform_get_irq_byname(pdev, "exception"); in keystone_rproc_probe()
431 if (ksproc->irq_fault < 0) { in keystone_rproc_probe()
432 ret = ksproc->irq_fault; in keystone_rproc_probe()
436 ksproc->kick_gpio = of_get_named_gpio_flags(np, "kick-gpios", 0, NULL); in keystone_rproc_probe()
437 if (ksproc->kick_gpio < 0) { in keystone_rproc_probe()
438 ret = ksproc->kick_gpio; in keystone_rproc_probe()
448 ret = reset_control_status(ksproc->reset); in keystone_rproc_probe()
454 keystone_rproc_dsp_reset(ksproc); in keystone_rproc_probe()
464 platform_set_drvdata(pdev, ksproc); in keystone_rproc_probe()
481 struct keystone_rproc *ksproc = platform_get_drvdata(pdev); in keystone_rproc_remove() local
483 rproc_del(ksproc->rproc); in keystone_rproc_remove()
486 rproc_free(ksproc->rproc); in keystone_rproc_remove()