pruss
LPSC(13, 0, pruss, pll0_sysclk2, NULL, 0),
pruss_release_mem_region(prueth->pruss, &emac->dram);
pruss_cfg_gpimode(prueth->pruss, prueth->pru_id[slice],
pruss_cfg_xfr_enable(prueth->pruss, PRU_TYPE_PRU, true);
pruss_cfg_xfr_enable(prueth->pruss, PRU_TYPE_RTU, true);
ret = pruss_request_mem_region(prueth->pruss,
pruss_release_mem_region(prueth->pruss, &emac->dram);
struct pruss *pruss;
pruss = pruss_get(eth0_node ?
if (IS_ERR(pruss)) {
ret = PTR_ERR(pruss);
prueth->pruss = pruss;
ret = pruss_request_mem_region(pruss, PRUSS_MEM_SHRD_RAM2,
pruss_release_mem_region(prueth->pruss, &prueth->shram);
pruss_put(prueth->pruss);
pruss_release_mem_region(prueth->pruss, &prueth->shram);
pruss_put(prueth->pruss);
struct pruss *pruss;
pruss_release_mem_region(prueth->pruss, &prueth->shram);
pruss_put(prueth->pruss);
pruss_release_mem_region(prueth->pruss, &prueth->shram);
pruss_put(prueth->pruss);
ret = pruss_request_mem_region(prueth->pruss,
pruss_release_mem_region(prueth->pruss, &emac->dram);
struct pruss *pruss;
pruss = pruss_get(eth0_node ?
if (IS_ERR(pruss)) {
ret = PTR_ERR(pruss);
prueth->pruss = pruss;
ret = pruss_request_mem_region(pruss, PRUSS_MEM_SHRD_RAM2,
struct pruss *pruss;
pruss = pruss_get(prueth->pru0 ? prueth->pru0 : prueth->pru1);
if (IS_ERR(pruss)) {
ret = PTR_ERR(pruss);
prueth->pruss = pruss;
pruss_cfg_gpimode(pruss, pruss_id0, PRUSS_GPI_MODE_MII);
pruss_cfg_gpimode(pruss, pruss_id1, PRUSS_GPI_MODE_MII);
pruss_cfg_miirt_enable(pruss, true);
pruss_cfg_xfr_enable(pruss, PRU_TYPE_PRU, true);
ret = pruss_request_mem_region(pruss, pruss_mem_ids[i],
pruss_release_mem_region(pruss, &prueth->mem[i]);
pruss_put(prueth->pruss);
pruss_release_mem_region(prueth->pruss,
pruss_put(prueth->pruss);
struct pruss *pruss;
pru->pruss = platform_get_drvdata(ppdev);
struct pruss *pruss;
ret = pruss_cfg_get_gpmux(pru->pruss, pru->id, &pru->gpmux_save);
ret = pruss_cfg_set_gpmux(pru->pruss, pru->id, mux);
pruss_cfg_set_gpmux(pru->pruss, pru->id, pru->gpmux_save);
struct pruss *pruss = pru->pruss;
dram0 = pruss->mem_regions[PRUSS_MEM_DRAM0];
dram1 = pruss->mem_regions[PRUSS_MEM_DRAM1];
shrd_ram = pruss->mem_regions[PRUSS_MEM_SHRD_RAM2];
int pruss_request_mem_region(struct pruss *pruss, enum pruss_mem mem_id,
if (!pruss || !region || mem_id >= PRUSS_MEM_MAX)
mutex_lock(&pruss->lock);
if (pruss->mem_in_use[mem_id]) {
mutex_unlock(&pruss->lock);
*region = pruss->mem_regions[mem_id];
pruss->mem_in_use[mem_id] = region;
mutex_unlock(&pruss->lock);
int pruss_release_mem_region(struct pruss *pruss,
if (!pruss || !region)
mutex_lock(&pruss->lock);
if (pruss->mem_in_use[id] == region)
mutex_unlock(&pruss->lock);
pruss->mem_in_use[id] = NULL;
mutex_unlock(&pruss->lock);
int pruss_cfg_get_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 *mux)
ret = pruss_cfg_read(pruss, PRUSS_CFG_GPCFG(pru_id), &val);
int pruss_cfg_set_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 mux)
return pruss_cfg_update(pruss, PRUSS_CFG_GPCFG(pru_id),
int pruss_cfg_gpimode(struct pruss *pruss, enum pruss_pru_id pru_id,
return pruss_cfg_update(pruss, PRUSS_CFG_GPCFG(pru_id),
int pruss_cfg_miirt_enable(struct pruss *pruss, bool enable)
return pruss_cfg_update(pruss, PRUSS_CFG_MII_RT,
int pruss_cfg_xfr_enable(struct pruss *pruss, enum pru_type pru_type,
return pruss_cfg_update(pruss, PRUSS_CFG_SPP, mask, set);
static int pruss_clk_mux_setup(struct pruss *pruss, struct clk *clk_mux,
struct device *dev = pruss->dev;
reg = pruss->cfg_base + reg_offset;
static int pruss_clk_init(struct pruss *pruss, struct device_node *cfg_node)
struct device *dev = pruss->dev;
ret = pruss_clk_mux_setup(pruss, pruss->core_clk_mux,
ret = pruss_clk_mux_setup(pruss, pruss->iep_clk_mux, "iepclk-mux",
static int pruss_of_setup_memories(struct device *dev, struct pruss *pruss)
pruss->mem_regions[i].va = devm_ioremap(dev, res.start,
if (!pruss->mem_regions[i].va)
pruss->mem_regions[i].pa = res.start;
pruss->mem_regions[i].size = resource_size(&res);
mem_names[i], &pruss->mem_regions[i].pa,
pruss->mem_regions[i].size, pruss->mem_regions[i].va);
static int pruss_cfg_of_init(struct device *dev, struct pruss *pruss)
pruss->cfg_base = devm_ioremap(dev, res.start, resource_size(&res));
if (!pruss->cfg_base)
pruss->cfg_regmap = devm_regmap_init_mmio(dev, pruss->cfg_base,
if (IS_ERR(pruss->cfg_regmap))
return dev_err_probe(dev, PTR_ERR(pruss->cfg_regmap),
ret = pruss_clk_init(pruss, child);
struct pruss *pruss;
pruss = devm_kzalloc(dev, sizeof(*pruss), GFP_KERNEL);
if (!pruss)
pruss->dev = dev;
mutex_init(&pruss->lock);
ret = pruss_of_setup_memories(dev, pruss);
platform_set_drvdata(pdev, pruss);
ret = pruss_cfg_of_init(dev, pruss);
struct pruss *pruss_get(struct rproc *rproc)
struct pruss *pruss;
pruss = platform_get_drvdata(ppdev);
if (!pruss)
get_device(pruss->dev);
return pruss;
void pruss_put(struct pruss *pruss)
if (IS_ERR_OR_NULL(pruss))
put_device(pruss->dev);
static int pruss_cfg_read(struct pruss *pruss, unsigned int reg, unsigned int *val)
if (IS_ERR_OR_NULL(pruss))
return regmap_read(pruss->cfg_regmap, reg, val);
static int pruss_cfg_update(struct pruss *pruss, unsigned int reg,
if (IS_ERR_OR_NULL(pruss))
return regmap_update_bits(pruss->cfg_regmap, reg, mask, val);
struct pruss *pruss_get(struct rproc *rproc);
void pruss_put(struct pruss *pruss);
int pruss_request_mem_region(struct pruss *pruss, enum pruss_mem mem_id,
int pruss_release_mem_region(struct pruss *pruss,
int pruss_cfg_get_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 *mux);
int pruss_cfg_set_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 mux);
int pruss_cfg_gpimode(struct pruss *pruss, enum pruss_pru_id pru_id,
int pruss_cfg_miirt_enable(struct pruss *pruss, bool enable);
int pruss_cfg_xfr_enable(struct pruss *pruss, enum pru_type pru_type,
static inline struct pruss *pruss_get(struct rproc *rproc)
static inline void pruss_put(struct pruss *pruss) { }
static inline int pruss_request_mem_region(struct pruss *pruss,
static inline int pruss_release_mem_region(struct pruss *pruss,
static inline int pruss_cfg_get_gpmux(struct pruss *pruss,
static inline int pruss_cfg_set_gpmux(struct pruss *pruss,
static inline int pruss_cfg_gpimode(struct pruss *pruss,
static inline int pruss_cfg_miirt_enable(struct pruss *pruss, bool enable)
static inline int pruss_cfg_xfr_enable(struct pruss *pruss,