Lines Matching refs:mmu
40 struct ipmmu_vmsa_device *mmu; member
51 struct ipmmu_vmsa_device *mmu; member
188 static u32 ipmmu_read(struct ipmmu_vmsa_device *mmu, unsigned int offset) in ipmmu_read() argument
190 return ioread32(mmu->base + offset); in ipmmu_read()
193 static void ipmmu_write(struct ipmmu_vmsa_device *mmu, unsigned int offset, in ipmmu_write() argument
196 iowrite32(data, mmu->base + offset); in ipmmu_write()
201 return ipmmu_read(domain->mmu, domain->context_id * IM_CTX_SIZE + reg); in ipmmu_ctx_read()
207 ipmmu_write(domain->mmu, domain->context_id * IM_CTX_SIZE + reg, data); in ipmmu_ctx_write()
222 dev_err_ratelimited(domain->mmu->dev, in ipmmu_tlb_sync()
247 struct ipmmu_vmsa_device *mmu = domain->mmu; in ipmmu_utlb_enable() local
255 ipmmu_write(mmu, IMUASID(utlb), 0); in ipmmu_utlb_enable()
257 ipmmu_write(mmu, IMUCTR(utlb), in ipmmu_utlb_enable()
268 struct ipmmu_vmsa_device *mmu = domain->mmu; in ipmmu_utlb_disable() local
270 ipmmu_write(mmu, IMUCTR(utlb), 0); in ipmmu_utlb_disable()
320 domain->cfg.iommu_dev = domain->mmu->dev; in ipmmu_domain_init_context()
392 struct ipmmu_vmsa_device *mmu = domain->mmu; in ipmmu_domain_irq() local
412 dev_err_ratelimited(mmu->dev, "Multiple TLB hits @0x%08x\n", in ipmmu_domain_irq()
415 dev_err_ratelimited(mmu->dev, "Page Table Walk Abort @0x%08x\n", in ipmmu_domain_irq()
427 if (!report_iommu_fault(&domain->io_domain, mmu->dev, iova, 0)) in ipmmu_domain_irq()
430 dev_err_ratelimited(mmu->dev, in ipmmu_domain_irq()
439 struct ipmmu_vmsa_device *mmu = dev; in ipmmu_irq() local
443 if (!mmu->mapping) in ipmmu_irq()
446 io_domain = mmu->mapping->domain; in ipmmu_irq()
489 struct ipmmu_vmsa_device *mmu = archdata->mmu; in ipmmu_attach_device() local
495 if (!mmu) { in ipmmu_attach_device()
502 if (!domain->mmu) { in ipmmu_attach_device()
504 domain->mmu = mmu; in ipmmu_attach_device()
506 } else if (domain->mmu != mmu) { in ipmmu_attach_device()
512 dev_name(mmu->dev), dev_name(domain->mmu->dev)); in ipmmu_attach_device()
571 static int ipmmu_find_utlbs(struct ipmmu_vmsa_device *mmu, struct device *dev, in ipmmu_find_utlbs() argument
587 if (args.np != mmu->dev->of_node || args.args_count != 1) in ipmmu_find_utlbs()
599 struct ipmmu_vmsa_device *mmu; in ipmmu_add_device() local
625 list_for_each_entry(mmu, &ipmmu_devices, list) { in ipmmu_add_device()
626 ret = ipmmu_find_utlbs(mmu, dev, utlbs, num_utlbs); in ipmmu_add_device()
642 if (utlbs[i] >= mmu->num_utlbs) { in ipmmu_add_device()
671 archdata->mmu = mmu; in ipmmu_add_device()
685 if (!mmu->mapping) { in ipmmu_add_device()
691 dev_err(mmu->dev, "failed to create ARM IOMMU mapping\n"); in ipmmu_add_device()
696 mmu->mapping = mapping; in ipmmu_add_device()
700 ret = arm_iommu_attach_device(dev, mmu->mapping); in ipmmu_add_device()
709 arm_iommu_release_mapping(mmu->mapping); in ipmmu_add_device()
753 static void ipmmu_device_reset(struct ipmmu_vmsa_device *mmu) in ipmmu_device_reset() argument
759 ipmmu_write(mmu, i * IM_CTX_SIZE + IMCTR, 0); in ipmmu_device_reset()
764 struct ipmmu_vmsa_device *mmu; in ipmmu_probe() local
774 mmu = devm_kzalloc(&pdev->dev, sizeof(*mmu), GFP_KERNEL); in ipmmu_probe()
775 if (!mmu) { in ipmmu_probe()
780 mmu->dev = &pdev->dev; in ipmmu_probe()
781 mmu->num_utlbs = 32; in ipmmu_probe()
785 mmu->base = devm_ioremap_resource(&pdev->dev, res); in ipmmu_probe()
786 if (IS_ERR(mmu->base)) in ipmmu_probe()
787 return PTR_ERR(mmu->base); in ipmmu_probe()
801 mmu->base += IM_NS_ALIAS_OFFSET; in ipmmu_probe()
810 dev_name(&pdev->dev), mmu); in ipmmu_probe()
816 ipmmu_device_reset(mmu); in ipmmu_probe()
825 list_add(&mmu->list, &ipmmu_devices); in ipmmu_probe()
828 platform_set_drvdata(pdev, mmu); in ipmmu_probe()
835 struct ipmmu_vmsa_device *mmu = platform_get_drvdata(pdev); in ipmmu_remove() local
838 list_del(&mmu->list); in ipmmu_remove()
841 arm_iommu_release_mapping(mmu->mapping); in ipmmu_remove()
843 ipmmu_device_reset(mmu); in ipmmu_remove()