Lines Matching refs:pruss
26 #include "pruss.h"
39 * pruss_get() - get the pruss for a given PRU remoteproc
42 * Finds the parent pruss device for a PRU given the @rproc handle of the
43 * PRU remote processor. This function increments the pruss device's refcount,
44 * so always use pruss_put() to decrement it back once pruss isn't needed
51 * Return: pruss handle on success, and an ERR_PTR on failure using one
56 struct pruss *pruss_get(struct rproc *rproc)
58 struct pruss *pruss;
72 pruss = platform_get_drvdata(ppdev);
73 if (!pruss)
76 get_device(pruss->dev);
78 return pruss;
83 * pruss_put() - decrement pruss device's usecount
84 * @pruss: pruss handle
89 void pruss_put(struct pruss *pruss)
91 if (IS_ERR_OR_NULL(pruss))
94 put_device(pruss->dev);
100 * @pruss: the pruss instance
112 int pruss_request_mem_region(struct pruss *pruss, enum pruss_mem mem_id,
115 if (!pruss || !region || mem_id >= PRUSS_MEM_MAX)
118 mutex_lock(&pruss->lock);
120 if (pruss->mem_in_use[mem_id]) {
121 mutex_unlock(&pruss->lock);
125 *region = pruss->mem_regions[mem_id];
126 pruss->mem_in_use[mem_id] = region;
128 mutex_unlock(&pruss->lock);
136 * @pruss: the pruss instance
145 int pruss_release_mem_region(struct pruss *pruss,
150 if (!pruss || !region)
153 mutex_lock(&pruss->lock);
157 if (pruss->mem_in_use[id] == region)
162 mutex_unlock(&pruss->lock);
166 pruss->mem_in_use[id] = NULL;
168 mutex_unlock(&pruss->lock);
176 * @pruss: pruss instance
182 int pruss_cfg_get_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 *mux)
190 ret = pruss_cfg_read(pruss, PRUSS_CFG_GPCFG(pru_id), &val);
200 * @pruss: pruss instance
206 int pruss_cfg_set_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 mux)
212 return pruss_cfg_update(pruss, PRUSS_CFG_GPCFG(pru_id),
220 * @pruss: the pruss instance handle
229 int pruss_cfg_gpimode(struct pruss *pruss, enum pruss_pru_id pru_id,
235 return pruss_cfg_update(pruss, PRUSS_CFG_GPCFG(pru_id),
243 * @pruss: the pruss instance
250 int pruss_cfg_miirt_enable(struct pruss *pruss, bool enable)
254 return pruss_cfg_update(pruss, PRUSS_CFG_MII_RT,
261 * @pruss: the pruss instance
267 int pruss_cfg_xfr_enable(struct pruss *pruss, enum pru_type pru_type,
285 return pruss_cfg_update(pruss, PRUSS_CFG_SPP, mask, set);
302 static int pruss_clk_mux_setup(struct pruss *pruss, struct clk *clk_mux,
306 struct device *dev = pruss->dev;
348 reg = pruss->cfg_base + reg_offset;
381 static int pruss_clk_init(struct pruss *pruss, struct device_node *cfg_node)
385 struct device *dev = pruss->dev;
397 ret = pruss_clk_mux_setup(pruss, pruss->core_clk_mux,
405 ret = pruss_clk_mux_setup(pruss, pruss->iep_clk_mux, "iepclk-mux",
424 static int pruss_cfg_of_init(struct device *dev, struct pruss *pruss)
442 pruss->cfg_base = devm_ioremap(dev, res.start, resource_size(&res));
443 if (!pruss->cfg_base) {
452 pruss->cfg_regmap = devm_regmap_init_mmio(dev, pruss->cfg_base,
455 if (IS_ERR(pruss->cfg_regmap)) {
457 PTR_ERR(pruss->cfg_regmap));
458 ret = PTR_ERR(pruss->cfg_regmap);
462 ret = pruss_clk_init(pruss, child);
476 struct pruss *pruss;
490 pruss = devm_kzalloc(dev, sizeof(*pruss), GFP_KERNEL);
491 if (!pruss)
494 pruss->dev = dev;
495 mutex_init(&pruss->lock);
523 pruss->mem_regions[i].va = devm_ioremap(dev, res.start,
525 if (!pruss->mem_regions[i].va) {
531 pruss->mem_regions[i].pa = res.start;
532 pruss->mem_regions[i].size = resource_size(&res);
535 mem_names[i], &pruss->mem_regions[i].pa,
536 pruss->mem_regions[i].size, pruss->mem_regions[i].va);
540 platform_set_drvdata(pdev, pruss);
549 ret = pruss_cfg_of_init(dev, pruss);
594 { .compatible = "ti,am3356-pruss" },
597 { .compatible = "ti,am5728-pruss" },
598 { .compatible = "ti,k2g-pruss" },
602 { .compatible = "ti,am625-pruss", .data = &am65x_j721e_pruss_data, },
609 .name = "pruss",