Lines Matching refs:slim_rproc
62 static int slim_clk_get(struct st_slim_rproc *slim_rproc, struct device *dev) in slim_clk_get() argument
67 slim_rproc->clks[clk] = of_clk_get(dev->of_node, clk); in slim_clk_get()
68 if (IS_ERR(slim_rproc->clks[clk])) { in slim_clk_get()
69 err = PTR_ERR(slim_rproc->clks[clk]); in slim_clk_get()
72 slim_rproc->clks[clk] = NULL; in slim_clk_get()
81 clk_put(slim_rproc->clks[clk]); in slim_clk_get()
86 static void slim_clk_disable(struct st_slim_rproc *slim_rproc) in slim_clk_disable() argument
90 for (clk = 0; clk < ST_SLIM_MAX_CLK && slim_rproc->clks[clk]; clk++) in slim_clk_disable()
91 clk_disable_unprepare(slim_rproc->clks[clk]); in slim_clk_disable()
94 static int slim_clk_enable(struct st_slim_rproc *slim_rproc) in slim_clk_enable() argument
98 for (clk = 0; clk < ST_SLIM_MAX_CLK && slim_rproc->clks[clk]; clk++) { in slim_clk_enable()
99 ret = clk_prepare_enable(slim_rproc->clks[clk]); in slim_clk_enable()
108 clk_disable_unprepare(slim_rproc->clks[clk]); in slim_clk_enable()
119 struct st_slim_rproc *slim_rproc = rproc->priv; in slim_rproc_start() local
125 writel(val, slim_rproc->slimcore + SLIM_CLK_GATE_OFST); in slim_rproc_start()
128 writel(SLIM_STBUS_SYNC_DIS, slim_rproc->peri + SLIM_STBUS_SYNC_OFST); in slim_rproc_start()
132 slim_rproc->slimcore + SLIM_CLK_GATE_OFST); in slim_rproc_start()
135 writel(~0U, slim_rproc->peri + SLIM_INT_CLR_OFST); in slim_rproc_start()
136 writel(~0U, slim_rproc->peri + SLIM_CMD_CLR_OFST); in slim_rproc_start()
139 writel(~0U, slim_rproc->peri + SLIM_INT_MASK_OFST); in slim_rproc_start()
140 writel(~0U, slim_rproc->peri + SLIM_CMD_MASK_OFST); in slim_rproc_start()
143 writel(SLIM_EN_RUN, slim_rproc->slimcore + SLIM_EN_OFST); in slim_rproc_start()
145 hw_id = readl_relaxed(slim_rproc->slimcore + SLIM_ID_OFST); in slim_rproc_start()
146 hw_ver = readl_relaxed(slim_rproc->slimcore + SLIM_VER_OFST); in slim_rproc_start()
148 fw_rev = readl(slim_rproc->mem[ST_SLIM_DMEM].cpu_addr + in slim_rproc_start()
160 struct st_slim_rproc *slim_rproc = rproc->priv; in slim_rproc_stop() local
164 writel(0UL, slim_rproc->peri + SLIM_INT_MASK_OFST); in slim_rproc_stop()
165 writel(0UL, slim_rproc->peri + SLIM_CMD_MASK_OFST); in slim_rproc_stop()
168 writel(SLIM_CLK_GATE_DIS, slim_rproc->slimcore + SLIM_CLK_GATE_OFST); in slim_rproc_stop()
170 writel(!SLIM_EN_RUN, slim_rproc->slimcore + SLIM_EN_OFST); in slim_rproc_stop()
172 val = readl(slim_rproc->slimcore + SLIM_EN_OFST); in slim_rproc_stop()
183 struct st_slim_rproc *slim_rproc = rproc->priv; in slim_rproc_da_to_va() local
188 if (da != slim_rproc->mem[i].bus_addr) in slim_rproc_da_to_va()
191 if (len <= slim_rproc->mem[i].size) { in slim_rproc_da_to_va()
193 va = (__force void *)slim_rproc->mem[i].cpu_addr; in slim_rproc_da_to_va()
230 struct st_slim_rproc *slim_rproc; in st_slim_rproc_alloc() local
243 fw_name, sizeof(*slim_rproc)); in st_slim_rproc_alloc()
249 slim_rproc = rproc->priv; in st_slim_rproc_alloc()
250 slim_rproc->rproc = rproc; in st_slim_rproc_alloc()
257 slim_rproc->mem[i].cpu_addr = devm_ioremap_resource(dev, res); in st_slim_rproc_alloc()
258 if (IS_ERR(slim_rproc->mem[i].cpu_addr)) { in st_slim_rproc_alloc()
260 err = PTR_ERR(slim_rproc->mem[i].cpu_addr); in st_slim_rproc_alloc()
263 slim_rproc->mem[i].bus_addr = res->start; in st_slim_rproc_alloc()
264 slim_rproc->mem[i].size = resource_size(res); in st_slim_rproc_alloc()
268 slim_rproc->slimcore = devm_ioremap_resource(dev, res); in st_slim_rproc_alloc()
269 if (IS_ERR(slim_rproc->slimcore)) { in st_slim_rproc_alloc()
271 err = PTR_ERR(slim_rproc->slimcore); in st_slim_rproc_alloc()
276 slim_rproc->peri = devm_ioremap_resource(dev, res); in st_slim_rproc_alloc()
277 if (IS_ERR(slim_rproc->peri)) { in st_slim_rproc_alloc()
279 err = PTR_ERR(slim_rproc->peri); in st_slim_rproc_alloc()
283 err = slim_clk_get(slim_rproc, dev); in st_slim_rproc_alloc()
287 err = slim_clk_enable(slim_rproc); in st_slim_rproc_alloc()
300 return slim_rproc; in st_slim_rproc_alloc()
303 slim_clk_disable(slim_rproc); in st_slim_rproc_alloc()
305 for (i = 0; i < ST_SLIM_MAX_CLK && slim_rproc->clks[i]; i++) in st_slim_rproc_alloc()
306 clk_put(slim_rproc->clks[i]); in st_slim_rproc_alloc()
320 void st_slim_rproc_put(struct st_slim_rproc *slim_rproc) in st_slim_rproc_put() argument
324 if (!slim_rproc) in st_slim_rproc_put()
327 slim_clk_disable(slim_rproc); in st_slim_rproc_put()
329 for (clk = 0; clk < ST_SLIM_MAX_CLK && slim_rproc->clks[clk]; clk++) in st_slim_rproc_put()
330 clk_put(slim_rproc->clks[clk]); in st_slim_rproc_put()
332 rproc_del(slim_rproc->rproc); in st_slim_rproc_put()
333 rproc_free(slim_rproc->rproc); in st_slim_rproc_put()