Lines Matching refs:pru

147 static inline u32 pru_control_read_reg(struct pru_rproc *pru, unsigned int reg)  in pru_control_read_reg()  argument
149 return readl_relaxed(pru->mem_regions[PRU_IOMEM_CTRL].va + reg); in pru_control_read_reg()
153 void pru_control_write_reg(struct pru_rproc *pru, unsigned int reg, u32 val) in pru_control_write_reg() argument
155 writel_relaxed(val, pru->mem_regions[PRU_IOMEM_CTRL].va + reg); in pru_control_write_reg()
159 void pru_control_set_reg(struct pru_rproc *pru, unsigned int reg, in pru_control_set_reg() argument
165 spin_lock_irqsave(&pru->rmw_lock, flags); in pru_control_set_reg()
167 val = pru_control_read_reg(pru, reg); in pru_control_set_reg()
170 pru_control_write_reg(pru, reg, val); in pru_control_set_reg()
172 spin_unlock_irqrestore(&pru->rmw_lock, flags); in pru_control_set_reg()
184 struct pru_rproc *pru = rproc->priv; in pru_rproc_set_firmware() local
187 fw_name = pru->fw_name; in pru_rproc_set_firmware()
242 struct pru_rproc *pru; in pru_rproc_get() local
251 pru = rproc->priv; in pru_rproc_get()
254 mutex_lock(&pru->lock); in pru_rproc_get()
256 if (pru->client_np) { in pru_rproc_get()
257 mutex_unlock(&pru->lock); in pru_rproc_get()
262 pru->client_np = np; in pru_rproc_get()
265 mutex_unlock(&pru->lock); in pru_rproc_get()
268 *pru_id = pru->id; in pru_rproc_get()
301 struct pru_rproc *pru; in pru_rproc_put() local
306 pru = rproc->priv; in pru_rproc_put()
310 mutex_lock(&pru->lock); in pru_rproc_put()
312 if (!pru->client_np) { in pru_rproc_put()
313 mutex_unlock(&pru->lock); in pru_rproc_put()
317 pru->client_np = NULL; in pru_rproc_put()
319 mutex_unlock(&pru->lock); in pru_rproc_put()
335 struct pru_rproc *pru = rproc->priv; in pru_rproc_set_ctable() local
358 pru_control_set_reg(pru, reg, mask, set); in pru_rproc_set_ctable()
364 static inline u32 pru_debug_read_reg(struct pru_rproc *pru, unsigned int reg) in pru_debug_read_reg() argument
366 return readl_relaxed(pru->mem_regions[PRU_IOMEM_DEBUG].va + reg); in pru_debug_read_reg()
372 struct pru_rproc *pru = rproc->priv; in regs_show() local
379 pru_control_read_reg(pru, PRU_CTRL_CTRL)); in regs_show()
380 pru_sts = pru_control_read_reg(pru, PRU_CTRL_STS); in regs_show()
383 pru_control_read_reg(pru, PRU_CTRL_WAKEUP_EN)); in regs_show()
385 pru_control_read_reg(pru, PRU_CTRL_CYCLE)); in regs_show()
387 pru_control_read_reg(pru, PRU_CTRL_STALL)); in regs_show()
389 pru_control_read_reg(pru, PRU_CTRL_CTBIR0)); in regs_show()
391 pru_control_read_reg(pru, PRU_CTRL_CTBIR1)); in regs_show()
393 pru_control_read_reg(pru, PRU_CTRL_CTPPR0)); in regs_show()
395 pru_control_read_reg(pru, PRU_CTRL_CTPPR1)); in regs_show()
398 pru_is_running = pru_control_read_reg(pru, PRU_CTRL_CTRL) & in regs_show()
407 i, pru_debug_read_reg(pru, PRU_DEBUG_GPREG(i)), in regs_show()
408 i, pru_debug_read_reg(pru, PRU_DEBUG_CT_REG(i))); in regs_show()
430 struct pru_rproc *pru = rproc->priv; in pru_rproc_debug_ss_set() local
434 if (!val && !pru->dbg_single_step) in pru_rproc_debug_ss_set()
437 reg_val = pru_control_read_reg(pru, PRU_CTRL_CTRL); in pru_rproc_debug_ss_set()
439 if (val && !pru->dbg_single_step) in pru_rproc_debug_ss_set()
440 pru->dbg_continuous = reg_val; in pru_rproc_debug_ss_set()
445 reg_val = pru->dbg_continuous; in pru_rproc_debug_ss_set()
447 pru->dbg_single_step = val; in pru_rproc_debug_ss_set()
448 pru_control_write_reg(pru, PRU_CTRL_CTRL, reg_val); in pru_rproc_debug_ss_set()
456 struct pru_rproc *pru = rproc->priv; in pru_rproc_debug_ss_get() local
458 *val = pru->dbg_single_step; in pru_rproc_debug_ss_get()
482 static void pru_dispose_irq_mapping(struct pru_rproc *pru) in pru_dispose_irq_mapping() argument
484 if (!pru->mapped_irq) in pru_dispose_irq_mapping()
487 while (pru->evt_count) { in pru_dispose_irq_mapping()
488 pru->evt_count--; in pru_dispose_irq_mapping()
489 if (pru->mapped_irq[pru->evt_count] > 0) in pru_dispose_irq_mapping()
490 irq_dispose_mapping(pru->mapped_irq[pru->evt_count]); in pru_dispose_irq_mapping()
493 kfree(pru->mapped_irq); in pru_dispose_irq_mapping()
494 pru->mapped_irq = NULL; in pru_dispose_irq_mapping()
504 struct pru_rproc *pru = rproc->priv; in pru_handle_intrmap() local
505 struct pru_irq_rsc *rsc = pru->pru_interrupt_map; in pru_handle_intrmap()
524 pru->pru_interrupt_map_sz) in pru_handle_intrmap()
527 pru->evt_count = rsc->num_evts; in pru_handle_intrmap()
528 pru->mapped_irq = kcalloc(pru->evt_count, sizeof(unsigned int), in pru_handle_intrmap()
530 if (!pru->mapped_irq) { in pru_handle_intrmap()
531 pru->evt_count = 0; in pru_handle_intrmap()
541 parent = of_get_parent(dev_of_node(pru->dev)); in pru_handle_intrmap()
543 kfree(pru->mapped_irq); in pru_handle_intrmap()
544 pru->mapped_irq = NULL; in pru_handle_intrmap()
545 pru->evt_count = 0; in pru_handle_intrmap()
552 kfree(pru->mapped_irq); in pru_handle_intrmap()
553 pru->mapped_irq = NULL; in pru_handle_intrmap()
554 pru->evt_count = 0; in pru_handle_intrmap()
560 for (i = 0; i < pru->evt_count; i++) { in pru_handle_intrmap()
568 pru->mapped_irq[i] = irq_create_fwspec_mapping(&fwspec); in pru_handle_intrmap()
569 if (!pru->mapped_irq[i]) { in pru_handle_intrmap()
582 pru_dispose_irq_mapping(pru); in pru_handle_intrmap()
591 struct pru_rproc *pru = rproc->priv; in pru_rproc_start() local
597 names[pru->data->type], pru->id, (rproc->bootaddr >> 2)); in pru_rproc_start()
604 pru->pru_interrupt_map = NULL; in pru_rproc_start()
605 pru->pru_interrupt_map_sz = 0; in pru_rproc_start()
610 pru_control_write_reg(pru, PRU_CTRL_CTRL, val); in pru_rproc_start()
618 struct pru_rproc *pru = rproc->priv; in pru_rproc_stop() local
622 dev_dbg(dev, "stopping %s%d\n", names[pru->data->type], pru->id); in pru_rproc_stop()
624 val = pru_control_read_reg(pru, PRU_CTRL_CTRL); in pru_rproc_stop()
626 pru_control_write_reg(pru, PRU_CTRL_CTRL, val); in pru_rproc_stop()
629 pru_dispose_irq_mapping(pru); in pru_rproc_stop()
643 static void *pru_d_da_to_va(struct pru_rproc *pru, u32 da, size_t len) in pru_d_da_to_va() argument
646 struct pruss *pruss = pru->pruss; in pru_d_da_to_va()
656 if (pru->id == PRUSS_PRU1) in pru_d_da_to_va()
683 static void *pru_i_da_to_va(struct pru_rproc *pru, u32 da, size_t len) in pru_i_da_to_va() argument
710 da + len <= PRU_IRAM_DA + pru->mem_regions[PRU_IOMEM_IRAM].size) { in pru_i_da_to_va()
712 va = (__force void *)(pru->mem_regions[PRU_IOMEM_IRAM].va + in pru_i_da_to_va()
726 struct pru_rproc *pru = rproc->priv; in pru_rproc_da_to_va() local
728 return pru_d_da_to_va(pru, da, len); in pru_rproc_da_to_va()
734 struct pru_rproc *pru = rproc->priv; in pru_da_to_va() local
738 va = pru_i_da_to_va(pru, da, len); in pru_da_to_va()
740 va = pru_d_da_to_va(pru, da, len); in pru_da_to_va()
796 struct pru_rproc *pru = rproc->priv; in pru_rproc_load_elf_segments() local
844 if (pru->data->is_k3) { in pru_rproc_load_elf_segments()
921 struct pru_rproc *pru = rproc->priv; in pru_rproc_parse_fw() local
945 pru->pru_interrupt_map = (struct pru_irq_rsc *)(elf_data + sh_offset); in pru_rproc_parse_fw()
946 pru->pru_interrupt_map_sz = elf_shdr_get_sh_size(class, shdr); in pru_rproc_parse_fw()
955 static int pru_rproc_set_id(struct pru_rproc *pru) in pru_rproc_set_id() argument
959 switch (pru->mem_regions[PRU_IOMEM_IRAM].pa & PRU_IRAM_ADDR_MASK) { in pru_rproc_set_id()
965 pru->id = PRUSS_PRU0; in pru_rproc_set_id()
972 pru->id = PRUSS_PRU1; in pru_rproc_set_id()
986 struct pru_rproc *pru; in pru_rproc_probe() local
1005 sizeof(*pru)); in pru_rproc_probe()
1028 pru = rproc->priv; in pru_rproc_probe()
1029 pru->dev = dev; in pru_rproc_probe()
1030 pru->data = data; in pru_rproc_probe()
1031 pru->pruss = platform_get_drvdata(ppdev); in pru_rproc_probe()
1032 pru->rproc = rproc; in pru_rproc_probe()
1033 pru->fw_name = fw_name; in pru_rproc_probe()
1034 pru->client_np = NULL; in pru_rproc_probe()
1035 spin_lock_init(&pru->rmw_lock); in pru_rproc_probe()
1036 mutex_init(&pru->lock); in pru_rproc_probe()
1041 pru->mem_regions[i].va = devm_ioremap_resource(dev, res); in pru_rproc_probe()
1042 if (IS_ERR(pru->mem_regions[i].va)) { in pru_rproc_probe()
1045 ret = PTR_ERR(pru->mem_regions[i].va); in pru_rproc_probe()
1048 pru->mem_regions[i].pa = res->start; in pru_rproc_probe()
1049 pru->mem_regions[i].size = resource_size(res); in pru_rproc_probe()
1052 mem_names[i], &pru->mem_regions[i].pa, in pru_rproc_probe()
1053 pru->mem_regions[i].size, pru->mem_regions[i].va); in pru_rproc_probe()
1056 ret = pru_rproc_set_id(pru); in pru_rproc_probe()
1062 ret = devm_rproc_add(dev, pru->rproc); in pru_rproc_probe()