Lines Matching defs:rproc
100 * @rproc: remoteproc pointer for this PRU core
119 struct rproc *rproc;
165 * @rproc: the rproc instance of the PRU
170 static int pru_rproc_set_firmware(struct rproc *rproc, const char *fw_name)
172 struct pru_rproc *pru = rproc->priv;
177 return rproc_set_firmware(rproc, fw_name);
180 static struct rproc *__pru_rproc_get(struct device_node *np, int index)
182 struct rproc *rproc;
190 rproc = rproc_get_by_phandle(rproc_phandle);
191 if (!rproc) {
196 /* make sure it is PRU rproc */
197 if (!is_pru_rproc(rproc->dev.parent)) {
198 rproc_put(rproc);
202 return rproc;
206 * pru_rproc_get() - get the PRU rproc instance from a device node
212 * index @index and returns the rproc handle for a valid PRU remote processor if
213 * found. The function allows only one user to own the PRU rproc resource at a
214 * time. Caller must call pru_rproc_put() when done with using the rproc, not
220 * Return: rproc handle on success, and an ERR_PTR on failure using one
226 struct rproc *pru_rproc_get(struct device_node *np, int index,
229 struct rproc *rproc;
236 rproc = __pru_rproc_get(np, index);
237 if (IS_ERR(rproc))
238 return rproc;
240 pru = rproc->priv;
241 dev = &rproc->dev;
252 rproc->sysfs_read_only = true;
279 ret = pru_rproc_set_firmware(rproc, fw_name);
286 return rproc;
289 rproc_put(rproc);
293 pru_rproc_put(rproc);
299 * pru_rproc_put() - release the PRU rproc resource
300 * @rproc: the rproc resource to release
302 * Releases the PRU rproc resource and makes it available to other
305 void pru_rproc_put(struct rproc *rproc)
309 if (IS_ERR_OR_NULL(rproc) || !is_pru_rproc(rproc->dev.parent))
312 pru = rproc->priv;
316 pru_rproc_set_firmware(rproc, NULL);
326 rproc->sysfs_read_only = false;
329 rproc_put(rproc);
335 * @rproc: the rproc instance of the PRU
341 int pru_rproc_set_ctable(struct rproc *rproc, enum pru_ctable_idx c, u32 addr)
343 struct pru_rproc *pru = rproc->priv;
349 if (IS_ERR_OR_NULL(rproc))
352 if (!rproc->dev.parent || !is_pru_rproc(rproc->dev.parent))
379 struct rproc *rproc = s->private;
380 struct pru_rproc *pru = rproc->priv;
437 struct rproc *rproc = data;
438 struct pru_rproc *pru = rproc->priv;
463 struct rproc *rproc = data;
464 struct pru_rproc *pru = rproc->priv;
479 static void pru_rproc_create_debug_entries(struct rproc *rproc)
481 if (!rproc->dbg_dir)
484 debugfs_create_file("regs", 0400, rproc->dbg_dir,
485 rproc, ®s_fops);
486 debugfs_create_file("single_step", 0600, rproc->dbg_dir,
487 rproc, &pru_rproc_debug_ss_fops);
509 static int pru_handle_intrmap(struct rproc *rproc)
511 struct device *dev = rproc->dev.parent;
512 struct pru_rproc *pru = rproc->priv;
596 static int pru_rproc_start(struct rproc *rproc)
598 struct device *dev = &rproc->dev;
599 struct pru_rproc *pru = rproc->priv;
605 names[pru->data->type], pru->id, (rproc->bootaddr >> 2));
607 ret = pru_handle_intrmap(rproc);
617 val = CTRL_CTRL_EN | ((rproc->bootaddr >> 2) << 16);
623 static int pru_rproc_stop(struct rproc *rproc)
625 struct device *dev = &rproc->dev;
626 struct pru_rproc *pru = rproc->priv;
731 static void *pru_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, bool *is_iomem)
733 struct pru_rproc *pru = rproc->priv;
739 static void *pru_da_to_va(struct rproc *rproc, u64 da, size_t len, bool is_iram)
741 struct pru_rproc *pru = rproc->priv;
801 pru_rproc_load_elf_segments(struct rproc *rproc, const struct firmware *fw)
803 struct pru_rproc *pru = rproc->priv;
804 struct device *dev = &rproc->dev;
844 ptr = pru_da_to_va(rproc, da, memsz, is_iram);
925 static int pru_rproc_parse_fw(struct rproc *rproc, const struct firmware *fw)
927 struct device *dev = &rproc->dev;
928 struct pru_rproc *pru = rproc->priv;
936 ret = rproc_elf_load_rsc_table(rproc, fw);
938 dev_dbg(&rproc->dev, "no resource table found for this fw\n");
995 struct rproc *rproc = NULL;
1011 rproc = devm_rproc_alloc(dev, pdev->name, &pru_rproc_ops, fw_name,
1013 if (!rproc) {
1018 rproc->ops->load = pru_rproc_load_elf_segments;
1021 rproc->ops->parse_fw = pru_rproc_parse_fw;
1024 rproc->recovery_disabled = true;
1033 rproc->auto_boot = false;
1035 pru = rproc->priv;
1039 pru->rproc = rproc;
1067 platform_set_drvdata(pdev, rproc);
1069 ret = devm_rproc_add(dev, pru->rproc);
1075 pru_rproc_create_debug_entries(rproc);
1077 dev_dbg(dev, "PRU rproc node %pOF probed successfully\n", np);
1085 struct rproc *rproc = platform_get_drvdata(pdev);
1087 dev_dbg(dev, "%s: removing rproc %s\n", __func__, rproc->name);