Lines Matching refs:qcom_iommu

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