Lines Matching refs:qcom_iommu
84 struct qcom_iommu_dev *qcom_iommu = d->iommu; in to_ctx() local
85 if (!qcom_iommu) in to_ctx()
87 return qcom_iommu->ctxs[asid]; in to_ctx()
217 struct qcom_iommu_dev *qcom_iommu, in qcom_iommu_init_domain() argument
236 .iommu_dev = qcom_iommu->dev, in qcom_iommu_init_domain()
239 qcom_domain->iommu = qcom_iommu; in qcom_iommu_init_domain()
244 dev_err(qcom_iommu->dev, "failed to allocate pagetable ops\n"); in qcom_iommu_init_domain()
258 ret = qcom_scm_restore_sec_cfg(qcom_iommu->sec_id, ctx->asid); in qcom_iommu_init_domain()
260 dev_err(qcom_iommu->dev, "secure init failed: %d\n", ret); in qcom_iommu_init_domain()
365 struct qcom_iommu_dev *qcom_iommu = dev_iommu_priv_get(dev); in qcom_iommu_attach_dev() local
369 if (!qcom_iommu) { in qcom_iommu_attach_dev()
375 pm_runtime_get_sync(qcom_iommu->dev); in qcom_iommu_attach_dev()
376 ret = qcom_iommu_init_domain(domain, qcom_iommu, dev); in qcom_iommu_attach_dev()
377 pm_runtime_put_sync(qcom_iommu->dev); in qcom_iommu_attach_dev()
385 if (qcom_domain->iommu != qcom_iommu) in qcom_iommu_attach_dev()
397 struct qcom_iommu_dev *qcom_iommu = dev_iommu_priv_get(dev); in qcom_iommu_identity_attach() local
407 pm_runtime_get_sync(qcom_iommu->dev); in qcom_iommu_identity_attach()
416 pm_runtime_put_sync(qcom_iommu->dev); in qcom_iommu_identity_attach()
528 struct qcom_iommu_dev *qcom_iommu = dev_iommu_priv_get(dev); in qcom_iommu_probe_device() local
531 if (!qcom_iommu) in qcom_iommu_probe_device()
539 link = device_link_add(dev, qcom_iommu->dev, DL_FLAG_PM_RUNTIME); in qcom_iommu_probe_device()
541 dev_err(qcom_iommu->dev, "Unable to create device link between %s and %s\n", in qcom_iommu_probe_device()
542 dev_name(qcom_iommu->dev), dev_name(dev)); in qcom_iommu_probe_device()
546 return &qcom_iommu->iommu; in qcom_iommu_probe_device()
552 struct qcom_iommu_dev *qcom_iommu; in qcom_iommu_of_xlate() local
567 qcom_iommu = platform_get_drvdata(iommu_pdev); in qcom_iommu_of_xlate()
572 if (WARN_ON(asid > qcom_iommu->max_asid) || in qcom_iommu_of_xlate()
573 WARN_ON(qcom_iommu->ctxs[asid] == NULL)) { in qcom_iommu_of_xlate()
579 dev_iommu_priv_set(dev, qcom_iommu); in qcom_iommu_of_xlate()
585 if (WARN_ON(qcom_iommu != dev_iommu_priv_get(dev))) { in qcom_iommu_of_xlate()
686 struct qcom_iommu_dev *qcom_iommu = dev_get_drvdata(dev->parent); in qcom_iommu_ctx_probe() local
733 qcom_iommu->ctxs[ctx->asid] = ctx; in qcom_iommu_ctx_probe()
740 struct qcom_iommu_dev *qcom_iommu = dev_get_drvdata(pdev->dev.parent); in qcom_iommu_ctx_remove() local
745 qcom_iommu->ctxs[ctx->asid] = NULL; in qcom_iommu_ctx_remove()
765 static bool qcom_iommu_has_secure_context(struct qcom_iommu_dev *qcom_iommu) in qcom_iommu_has_secure_context() argument
769 for_each_child_of_node(qcom_iommu->dev->of_node, child) { in qcom_iommu_has_secure_context()
783 struct qcom_iommu_dev *qcom_iommu; in qcom_iommu_device_probe() local
795 qcom_iommu = devm_kzalloc(dev, struct_size(qcom_iommu, ctxs, max_asid + 1), in qcom_iommu_device_probe()
797 if (!qcom_iommu) in qcom_iommu_device_probe()
799 qcom_iommu->max_asid = max_asid; in qcom_iommu_device_probe()
800 qcom_iommu->dev = dev; in qcom_iommu_device_probe()
804 qcom_iommu->local_base = devm_ioremap_resource(dev, res); in qcom_iommu_device_probe()
805 if (IS_ERR(qcom_iommu->local_base)) in qcom_iommu_device_probe()
806 return PTR_ERR(qcom_iommu->local_base); in qcom_iommu_device_probe()
814 qcom_iommu->clks[CLK_IFACE].clk = clk; in qcom_iommu_device_probe()
821 qcom_iommu->clks[CLK_BUS].clk = clk; in qcom_iommu_device_probe()
828 qcom_iommu->clks[CLK_TBU].clk = clk; in qcom_iommu_device_probe()
831 &qcom_iommu->sec_id)) { in qcom_iommu_device_probe()
836 if (qcom_iommu_has_secure_context(qcom_iommu)) { in qcom_iommu_device_probe()
844 platform_set_drvdata(pdev, qcom_iommu); in qcom_iommu_device_probe()
855 ret = iommu_device_sysfs_add(&qcom_iommu->iommu, dev, NULL, in qcom_iommu_device_probe()
862 ret = iommu_device_register(&qcom_iommu->iommu, &qcom_iommu_ops, dev); in qcom_iommu_device_probe()
868 if (qcom_iommu->local_base) { in qcom_iommu_device_probe()
870 writel_relaxed(0xffffffff, qcom_iommu->local_base + SMMU_INTR_SEL_NS); in qcom_iommu_device_probe()
883 struct qcom_iommu_dev *qcom_iommu = platform_get_drvdata(pdev); in qcom_iommu_device_remove() local
887 iommu_device_sysfs_remove(&qcom_iommu->iommu); in qcom_iommu_device_remove()
888 iommu_device_unregister(&qcom_iommu->iommu); in qcom_iommu_device_remove()
893 struct qcom_iommu_dev *qcom_iommu = dev_get_drvdata(dev); in qcom_iommu_resume() local
896 ret = clk_bulk_prepare_enable(CLK_NUM, qcom_iommu->clks); in qcom_iommu_resume()
901 return qcom_scm_restore_sec_cfg(qcom_iommu->sec_id, 0); in qcom_iommu_resume()
908 struct qcom_iommu_dev *qcom_iommu = dev_get_drvdata(dev); in qcom_iommu_suspend() local
910 clk_bulk_disable_unprepare(CLK_NUM, qcom_iommu->clks); in qcom_iommu_suspend()