Lines Matching refs:mdev
24 struct komeda_dev *mdev = sf->private; in komeda_register_show() local
29 pm_runtime_get_sync(mdev->dev); in komeda_register_show()
31 if (mdev->funcs->dump_register) in komeda_register_show()
32 mdev->funcs->dump_register(mdev, sf); in komeda_register_show()
34 for (i = 0; i < mdev->n_pipelines; i++) in komeda_register_show()
35 komeda_pipeline_dump_register(mdev->pipelines[i], sf); in komeda_register_show()
37 pm_runtime_put(mdev->dev); in komeda_register_show()
44 static void komeda_debugfs_init(struct komeda_dev *mdev) in komeda_debugfs_init() argument
49 mdev->debugfs_root = debugfs_create_dir("komeda", NULL); in komeda_debugfs_init()
50 debugfs_create_file("register", 0444, mdev->debugfs_root, in komeda_debugfs_init()
51 mdev, &komeda_register_fops); in komeda_debugfs_init()
52 debugfs_create_x16("err_verbosity", 0664, mdev->debugfs_root, in komeda_debugfs_init()
53 &mdev->err_verbosity); in komeda_debugfs_init()
59 struct komeda_dev *mdev = dev_to_mdev(dev); in core_id_show() local
61 return sysfs_emit(buf, "0x%08x\n", mdev->chip.core_id); in core_id_show()
68 struct komeda_dev *mdev = dev_to_mdev(dev); in config_id_show() local
69 struct komeda_pipeline *pipe = mdev->pipelines[0]; in config_id_show()
76 config_id.n_pipelines = mdev->n_pipelines; in config_id_show()
91 struct komeda_dev *mdev = dev_to_mdev(dev); in aclk_hz_show() local
93 return sysfs_emit(buf, "%lu\n", clk_get_rate(mdev->aclk)); in aclk_hz_show()
133 static int komeda_parse_dt(struct device *dev, struct komeda_dev *mdev) in komeda_parse_dt() argument
141 mdev->irq = platform_get_irq(pdev, 0); in komeda_parse_dt()
142 if (mdev->irq < 0) { in komeda_parse_dt()
144 return mdev->irq; in komeda_parse_dt()
155 if (pipe_id >= mdev->n_pipelines) { in komeda_parse_dt()
160 mdev->pipelines[pipe_id]->of_node = of_node_get(child); in komeda_parse_dt()
164 for (pipe_id = 0; pipe_id < mdev->n_pipelines; pipe_id++) { in komeda_parse_dt()
165 pipe = mdev->pipelines[pipe_id]; in komeda_parse_dt()
184 struct komeda_dev *mdev; in komeda_dev_create() local
191 mdev = devm_kzalloc(dev, sizeof(*mdev), GFP_KERNEL); in komeda_dev_create()
192 if (!mdev) in komeda_dev_create()
195 mutex_init(&mdev->lock); in komeda_dev_create()
197 mdev->dev = dev; in komeda_dev_create()
198 mdev->reg_base = devm_platform_ioremap_resource(pdev, 0); in komeda_dev_create()
199 if (IS_ERR(mdev->reg_base)) { in komeda_dev_create()
201 err = PTR_ERR(mdev->reg_base); in komeda_dev_create()
202 mdev->reg_base = NULL; in komeda_dev_create()
206 mdev->aclk = devm_clk_get(dev, "aclk"); in komeda_dev_create()
207 if (IS_ERR(mdev->aclk)) { in komeda_dev_create()
209 err = PTR_ERR(mdev->aclk); in komeda_dev_create()
210 mdev->aclk = NULL; in komeda_dev_create()
214 clk_prepare_enable(mdev->aclk); in komeda_dev_create()
216 mdev->funcs = komeda_identify(mdev->reg_base, &mdev->chip); in komeda_dev_create()
217 if (!mdev->funcs) { in komeda_dev_create()
224 MALIDP_CORE_ID_PRODUCT_ID(mdev->chip.core_id), in komeda_dev_create()
225 MALIDP_CORE_ID_MAJOR(mdev->chip.core_id), in komeda_dev_create()
226 MALIDP_CORE_ID_MINOR(mdev->chip.core_id)); in komeda_dev_create()
228 mdev->funcs->init_format_table(mdev); in komeda_dev_create()
230 err = mdev->funcs->enum_resources(mdev); in komeda_dev_create()
236 err = komeda_parse_dt(dev, mdev); in komeda_dev_create()
242 err = komeda_assemble_pipelines(mdev); in komeda_dev_create()
250 mdev->iommu = iommu_get_domain_for_dev(mdev->dev); in komeda_dev_create()
251 if (!mdev->iommu) in komeda_dev_create()
254 clk_disable_unprepare(mdev->aclk); in komeda_dev_create()
262 mdev->err_verbosity = KOMEDA_DEV_PRINT_ERR_EVENTS; in komeda_dev_create()
264 komeda_debugfs_init(mdev); in komeda_dev_create()
266 return mdev; in komeda_dev_create()
269 clk_disable_unprepare(mdev->aclk); in komeda_dev_create()
271 komeda_dev_destroy(mdev); in komeda_dev_create()
275 void komeda_dev_destroy(struct komeda_dev *mdev) in komeda_dev_destroy() argument
277 struct device *dev = mdev->dev; in komeda_dev_destroy()
278 const struct komeda_dev_funcs *funcs = mdev->funcs; in komeda_dev_destroy()
283 debugfs_remove_recursive(mdev->debugfs_root); in komeda_dev_destroy()
285 if (mdev->aclk) in komeda_dev_destroy()
286 clk_prepare_enable(mdev->aclk); in komeda_dev_destroy()
288 for (i = 0; i < mdev->n_pipelines; i++) { in komeda_dev_destroy()
289 komeda_pipeline_destroy(mdev, mdev->pipelines[i]); in komeda_dev_destroy()
290 mdev->pipelines[i] = NULL; in komeda_dev_destroy()
293 mdev->n_pipelines = 0; in komeda_dev_destroy()
298 funcs->cleanup(mdev); in komeda_dev_destroy()
300 if (mdev->reg_base) { in komeda_dev_destroy()
301 devm_iounmap(dev, mdev->reg_base); in komeda_dev_destroy()
302 mdev->reg_base = NULL; in komeda_dev_destroy()
305 if (mdev->aclk) { in komeda_dev_destroy()
306 clk_disable_unprepare(mdev->aclk); in komeda_dev_destroy()
307 devm_clk_put(dev, mdev->aclk); in komeda_dev_destroy()
308 mdev->aclk = NULL; in komeda_dev_destroy()
311 devm_kfree(dev, mdev); in komeda_dev_destroy()
314 int komeda_dev_resume(struct komeda_dev *mdev) in komeda_dev_resume() argument
316 clk_prepare_enable(mdev->aclk); in komeda_dev_resume()
318 mdev->funcs->enable_irq(mdev); in komeda_dev_resume()
320 if (mdev->iommu && mdev->funcs->connect_iommu) in komeda_dev_resume()
321 if (mdev->funcs->connect_iommu(mdev)) in komeda_dev_resume()
327 int komeda_dev_suspend(struct komeda_dev *mdev) in komeda_dev_suspend() argument
329 if (mdev->iommu && mdev->funcs->disconnect_iommu) in komeda_dev_suspend()
330 if (mdev->funcs->disconnect_iommu(mdev)) in komeda_dev_suspend()
333 mdev->funcs->disable_irq(mdev); in komeda_dev_suspend()
335 clk_disable_unprepare(mdev->aclk); in komeda_dev_suspend()