Lines Matching full:smmu
15 #include "arm-smmu-v3.h"
108 "This allows to disable CMDQV HW and use default SMMU internal CMDQ.");
163 * @smmu: SMMUv3 device
174 struct arm_smmu_device smmu; member
267 __arm_smmu_cmdq_skip_err(&vintf->cmdqv->smmu, &vcmdq->cmdq); in tegra241_vintf0_handle_error()
318 tegra241_cmdqv_get_cmdq(struct arm_smmu_device *smmu, in tegra241_cmdqv_get_cmdq() argument
322 container_of(smmu, struct tegra241_cmdqv, smmu); in tegra241_cmdqv_get_cmdq()
330 /* Use SMMU CMDQ if VINTF0 is uninitialized */ in tegra241_cmdqv_get_cmdq()
346 /* Unsupported CMD goes for smmu->cmdq pathway */ in tegra241_cmdqv_get_cmdq()
457 static int tegra241_cmdqv_hw_reset(struct arm_smmu_device *smmu) in tegra241_cmdqv_hw_reset() argument
460 container_of(smmu, struct tegra241_cmdqv, smmu); in tegra241_cmdqv_hw_reset()
492 struct arm_smmu_device *smmu = &vcmdq->cmdqv->smmu; in tegra241_vcmdq_alloc_smmu_cmdq() local
501 /* Cap queue size to SMMU's IDR1.CMDQS and ensure natural alignment */ in tegra241_vcmdq_alloc_smmu_cmdq()
502 regval = readl_relaxed(smmu->base + ARM_SMMU_IDR1); in tegra241_vcmdq_alloc_smmu_cmdq()
507 ret = arm_smmu_init_one_queue(smmu, q, vcmdq->page0, in tegra241_vcmdq_alloc_smmu_cmdq()
520 return arm_smmu_cmdq_init(smmu, cmdq); in tegra241_vcmdq_alloc_smmu_cmdq()
655 static void tegra241_cmdqv_remove(struct arm_smmu_device *smmu) in tegra241_cmdqv_remove() argument
658 container_of(smmu, struct tegra241_cmdqv, smmu); in tegra241_cmdqv_remove()
677 put_device(cmdqv->dev); /* smmu->impl_dev */ in tegra241_cmdqv_remove()
751 static int tegra241_cmdqv_init_structures(struct arm_smmu_device *smmu) in tegra241_cmdqv_init_structures() argument
754 container_of(smmu, struct tegra241_cmdqv, smmu); in tegra241_cmdqv_init_structures()
780 smmu->impl_ops = &tegra241_cmdqv_impl_ops; in tegra241_cmdqv_init_structures()
789 __tegra241_cmdqv_probe(struct arm_smmu_device *smmu, struct resource *res, in __tegra241_cmdqv_probe() argument
802 static_assert(offsetof(struct tegra241_cmdqv, smmu) == 0); in __tegra241_cmdqv_probe()
806 dev_err(smmu->dev, "failed to ioremap\n"); in __tegra241_cmdqv_probe()
812 dev_info(smmu->dev, "Detected disable_cmdqv=true\n"); in __tegra241_cmdqv_probe()
817 cmdqv = devm_krealloc(smmu->dev, smmu, sizeof(*cmdqv), GFP_KERNEL); in __tegra241_cmdqv_probe()
820 new_smmu = &cmdqv->smmu; in __tegra241_cmdqv_probe()
824 cmdqv->dev = smmu->impl_dev; in __tegra241_cmdqv_probe()
870 struct arm_smmu_device *tegra241_cmdqv_probe(struct arm_smmu_device *smmu) in tegra241_cmdqv_probe() argument
876 if (!smmu->dev->of_node) in tegra241_cmdqv_probe()
877 res = tegra241_cmdqv_find_acpi_resource(smmu->impl_dev, &irq); in tegra241_cmdqv_probe()
881 new_smmu = __tegra241_cmdqv_probe(smmu, res, irq); in tegra241_cmdqv_probe()
888 dev_info(smmu->impl_dev, "Falling back to standard SMMU CMDQ\n"); in tegra241_cmdqv_probe()
889 smmu->options &= ~ARM_SMMU_OPT_TEGRA241_CMDQV; in tegra241_cmdqv_probe()
890 put_device(smmu->impl_dev); in tegra241_cmdqv_probe()