Lines Matching refs:slim_rproc
58 static int slim_clk_get(struct st_slim_rproc *slim_rproc, struct device *dev) in slim_clk_get() argument
63 slim_rproc->clks[clk] = of_clk_get(dev->of_node, clk); in slim_clk_get()
64 if (IS_ERR(slim_rproc->clks[clk])) { in slim_clk_get()
65 err = PTR_ERR(slim_rproc->clks[clk]); in slim_clk_get()
68 slim_rproc->clks[clk] = NULL; in slim_clk_get()
77 clk_put(slim_rproc->clks[clk]); in slim_clk_get()
82 static void slim_clk_disable(struct st_slim_rproc *slim_rproc) in slim_clk_disable() argument
86 for (clk = 0; clk < ST_SLIM_MAX_CLK && slim_rproc->clks[clk]; clk++) in slim_clk_disable()
87 clk_disable_unprepare(slim_rproc->clks[clk]); in slim_clk_disable()
90 static int slim_clk_enable(struct st_slim_rproc *slim_rproc) in slim_clk_enable() argument
94 for (clk = 0; clk < ST_SLIM_MAX_CLK && slim_rproc->clks[clk]; clk++) { in slim_clk_enable()
95 ret = clk_prepare_enable(slim_rproc->clks[clk]); in slim_clk_enable()
104 clk_disable_unprepare(slim_rproc->clks[clk]); in slim_clk_enable()
115 struct st_slim_rproc *slim_rproc = rproc->priv; in slim_rproc_start() local
121 writel(val, slim_rproc->slimcore + SLIM_CLK_GATE_OFST); in slim_rproc_start()
124 writel(SLIM_STBUS_SYNC_DIS, slim_rproc->peri + SLIM_STBUS_SYNC_OFST); in slim_rproc_start()
128 slim_rproc->slimcore + SLIM_CLK_GATE_OFST); in slim_rproc_start()
131 writel(~0U, slim_rproc->peri + SLIM_INT_CLR_OFST); in slim_rproc_start()
132 writel(~0U, slim_rproc->peri + SLIM_CMD_CLR_OFST); in slim_rproc_start()
135 writel(~0U, slim_rproc->peri + SLIM_INT_MASK_OFST); in slim_rproc_start()
136 writel(~0U, slim_rproc->peri + SLIM_CMD_MASK_OFST); in slim_rproc_start()
139 writel(SLIM_EN_RUN, slim_rproc->slimcore + SLIM_EN_OFST); in slim_rproc_start()
141 hw_id = readl_relaxed(slim_rproc->slimcore + SLIM_ID_OFST); in slim_rproc_start()
142 hw_ver = readl_relaxed(slim_rproc->slimcore + SLIM_VER_OFST); in slim_rproc_start()
144 fw_rev = readl(slim_rproc->mem[ST_SLIM_DMEM].cpu_addr + in slim_rproc_start()
156 struct st_slim_rproc *slim_rproc = rproc->priv; in slim_rproc_stop() local
160 writel(0UL, slim_rproc->peri + SLIM_INT_MASK_OFST); in slim_rproc_stop()
161 writel(0UL, slim_rproc->peri + SLIM_CMD_MASK_OFST); in slim_rproc_stop()
164 writel(SLIM_CLK_GATE_DIS, slim_rproc->slimcore + SLIM_CLK_GATE_OFST); in slim_rproc_stop()
166 writel(!SLIM_EN_RUN, slim_rproc->slimcore + SLIM_EN_OFST); in slim_rproc_stop()
168 val = readl(slim_rproc->slimcore + SLIM_EN_OFST); in slim_rproc_stop()
179 struct st_slim_rproc *slim_rproc = rproc->priv; in slim_rproc_da_to_va() local
184 if (da != slim_rproc->mem[i].bus_addr) in slim_rproc_da_to_va()
187 if (len <= slim_rproc->mem[i].size) { in slim_rproc_da_to_va()
189 va = (__force void *)slim_rproc->mem[i].cpu_addr; in slim_rproc_da_to_va()
226 struct st_slim_rproc *slim_rproc; in st_slim_rproc_alloc() local
239 fw_name, sizeof(*slim_rproc)); in st_slim_rproc_alloc()
245 slim_rproc = rproc->priv; in st_slim_rproc_alloc()
246 slim_rproc->rproc = rproc; in st_slim_rproc_alloc()
253 slim_rproc->mem[i].cpu_addr = devm_ioremap_resource(dev, res); in st_slim_rproc_alloc()
254 if (IS_ERR(slim_rproc->mem[i].cpu_addr)) { in st_slim_rproc_alloc()
256 err = PTR_ERR(slim_rproc->mem[i].cpu_addr); in st_slim_rproc_alloc()
259 slim_rproc->mem[i].bus_addr = res->start; in st_slim_rproc_alloc()
260 slim_rproc->mem[i].size = resource_size(res); in st_slim_rproc_alloc()
264 slim_rproc->slimcore = devm_ioremap_resource(dev, res); in st_slim_rproc_alloc()
265 if (IS_ERR(slim_rproc->slimcore)) { in st_slim_rproc_alloc()
267 err = PTR_ERR(slim_rproc->slimcore); in st_slim_rproc_alloc()
272 slim_rproc->peri = devm_ioremap_resource(dev, res); in st_slim_rproc_alloc()
273 if (IS_ERR(slim_rproc->peri)) { in st_slim_rproc_alloc()
275 err = PTR_ERR(slim_rproc->peri); in st_slim_rproc_alloc()
279 err = slim_clk_get(slim_rproc, dev); in st_slim_rproc_alloc()
283 err = slim_clk_enable(slim_rproc); in st_slim_rproc_alloc()
296 return slim_rproc; in st_slim_rproc_alloc()
299 slim_clk_disable(slim_rproc); in st_slim_rproc_alloc()
301 for (i = 0; i < ST_SLIM_MAX_CLK && slim_rproc->clks[i]; i++) in st_slim_rproc_alloc()
302 clk_put(slim_rproc->clks[i]); in st_slim_rproc_alloc()
316 void st_slim_rproc_put(struct st_slim_rproc *slim_rproc) in st_slim_rproc_put() argument
320 if (!slim_rproc) in st_slim_rproc_put()
323 slim_clk_disable(slim_rproc); in st_slim_rproc_put()
325 for (clk = 0; clk < ST_SLIM_MAX_CLK && slim_rproc->clks[clk]; clk++) in st_slim_rproc_put()
326 clk_put(slim_rproc->clks[clk]); in st_slim_rproc_put()
328 rproc_del(slim_rproc->rproc); in st_slim_rproc_put()
329 rproc_free(slim_rproc->rproc); in st_slim_rproc_put()