Lines Matching refs:pre

125 	struct ipu_pre *pre;  in ipu_pre_lookup_by_phandle()  local
128 list_for_each_entry(pre, &ipu_pre_list, list) { in ipu_pre_lookup_by_phandle()
129 if (pre_node == pre->dev->of_node) { in ipu_pre_lookup_by_phandle()
131 device_link_add(dev, pre->dev, in ipu_pre_lookup_by_phandle()
134 return pre; in ipu_pre_lookup_by_phandle()
144 int ipu_pre_get(struct ipu_pre *pre) in ipu_pre_get() argument
148 if (pre->in_use) in ipu_pre_get()
152 writel(0, pre->regs + IPU_PRE_CTRL); in ipu_pre_get()
159 writel(val, pre->regs + IPU_PRE_CTRL); in ipu_pre_get()
161 pre->in_use = true; in ipu_pre_get()
165 void ipu_pre_put(struct ipu_pre *pre) in ipu_pre_put() argument
167 writel(IPU_PRE_CTRL_SFTRST, pre->regs + IPU_PRE_CTRL); in ipu_pre_put()
169 pre->in_use = false; in ipu_pre_put()
172 void ipu_pre_configure(struct ipu_pre *pre, unsigned int width, in ipu_pre_configure() argument
182 pre->safe_window_end = height - 2; in ipu_pre_configure()
184 pre->safe_window_end = DIV_ROUND_UP(height, 4) - 1; in ipu_pre_configure()
186 writel(bufaddr, pre->regs + IPU_PRE_CUR_BUF); in ipu_pre_configure()
187 writel(bufaddr, pre->regs + IPU_PRE_NEXT_BUF); in ipu_pre_configure()
194 writel(val, pre->regs + IPU_PRE_PREFETCH_ENG_CTRL); in ipu_pre_configure()
198 writel(val, pre->regs + IPU_PRE_PREFETCH_ENG_INPUT_SIZE); in ipu_pre_configure()
201 writel(val, pre->regs + IPU_PRE_PREFETCH_ENG_PITCH); in ipu_pre_configure()
206 writel(val, pre->regs + IPU_PRE_STORE_ENG_CTRL); in ipu_pre_configure()
210 writel(val, pre->regs + IPU_PRE_STORE_ENG_SIZE); in ipu_pre_configure()
213 writel(val, pre->regs + IPU_PRE_STORE_ENG_PITCH); in ipu_pre_configure()
215 writel(pre->buffer_paddr, pre->regs + IPU_PRE_STORE_ENG_ADDR); in ipu_pre_configure()
217 val = readl(pre->regs + IPU_PRE_TPR_CTRL); in ipu_pre_configure()
227 writel(val, pre->regs + IPU_PRE_TPR_CTRL); in ipu_pre_configure()
229 val = readl(pre->regs + IPU_PRE_CTRL); in ipu_pre_configure()
236 writel(val, pre->regs + IPU_PRE_CTRL); in ipu_pre_configure()
239 void ipu_pre_update(struct ipu_pre *pre, unsigned int bufaddr) in ipu_pre_update() argument
245 writel(bufaddr, pre->regs + IPU_PRE_NEXT_BUF); in ipu_pre_update()
249 dev_warn(pre->dev, "timeout waiting for PRE safe window\n"); in ipu_pre_update()
253 val = readl(pre->regs + IPU_PRE_STORE_ENG_STATUS); in ipu_pre_update()
257 } while (current_yblock == 0 || current_yblock >= pre->safe_window_end); in ipu_pre_update()
259 writel(IPU_PRE_CTRL_SDW_UPDATE, pre->regs + IPU_PRE_CTRL_SET); in ipu_pre_update()
262 u32 ipu_pre_get_baddr(struct ipu_pre *pre) in ipu_pre_get_baddr() argument
264 return (u32)pre->buffer_paddr; in ipu_pre_get_baddr()
271 struct ipu_pre *pre; in ipu_pre_probe() local
273 pre = devm_kzalloc(dev, sizeof(*pre), GFP_KERNEL); in ipu_pre_probe()
274 if (!pre) in ipu_pre_probe()
278 pre->regs = devm_ioremap_resource(&pdev->dev, res); in ipu_pre_probe()
279 if (IS_ERR(pre->regs)) in ipu_pre_probe()
280 return PTR_ERR(pre->regs); in ipu_pre_probe()
282 pre->clk_axi = devm_clk_get(dev, "axi"); in ipu_pre_probe()
283 if (IS_ERR(pre->clk_axi)) in ipu_pre_probe()
284 return PTR_ERR(pre->clk_axi); in ipu_pre_probe()
286 pre->iram = of_gen_pool_get(dev->of_node, "fsl,iram", 0); in ipu_pre_probe()
287 if (!pre->iram) in ipu_pre_probe()
295 pre->buffer_virt = gen_pool_dma_alloc(pre->iram, IPU_PRE_MAX_WIDTH * in ipu_pre_probe()
297 &pre->buffer_paddr); in ipu_pre_probe()
298 if (!pre->buffer_virt) in ipu_pre_probe()
301 clk_prepare_enable(pre->clk_axi); in ipu_pre_probe()
303 pre->dev = dev; in ipu_pre_probe()
304 platform_set_drvdata(pdev, pre); in ipu_pre_probe()
306 list_add(&pre->list, &ipu_pre_list); in ipu_pre_probe()
315 struct ipu_pre *pre = platform_get_drvdata(pdev); in ipu_pre_remove() local
318 list_del(&pre->list); in ipu_pre_remove()
322 clk_disable_unprepare(pre->clk_axi); in ipu_pre_remove()
324 if (pre->buffer_virt) in ipu_pre_remove()
325 gen_pool_free(pre->iram, (unsigned long)pre->buffer_virt, in ipu_pre_remove()