Lines Matching refs:ipmmu

27 static void ipmmu_reg_write(struct shmobile_ipmmu *ipmmu, unsigned long reg_off,  in ipmmu_reg_write()  argument
30 iowrite32(data, ipmmu->ipmmu_base + reg_off); in ipmmu_reg_write()
33 void ipmmu_tlb_flush(struct shmobile_ipmmu *ipmmu) in ipmmu_tlb_flush() argument
35 if (!ipmmu) in ipmmu_tlb_flush()
38 spin_lock(&ipmmu->flush_lock); in ipmmu_tlb_flush()
39 if (ipmmu->tlb_enabled) in ipmmu_tlb_flush()
40 ipmmu_reg_write(ipmmu, IMCTR1, IMCTR1_FLUSH | IMCTR1_TLBEN); in ipmmu_tlb_flush()
42 ipmmu_reg_write(ipmmu, IMCTR1, IMCTR1_FLUSH); in ipmmu_tlb_flush()
43 spin_unlock(&ipmmu->flush_lock); in ipmmu_tlb_flush()
46 void ipmmu_tlb_set(struct shmobile_ipmmu *ipmmu, unsigned long phys, int size, in ipmmu_tlb_set() argument
49 if (!ipmmu) in ipmmu_tlb_set()
52 spin_lock(&ipmmu->flush_lock); in ipmmu_tlb_set()
55 ipmmu->tlb_enabled = 0; in ipmmu_tlb_set()
58 ipmmu_reg_write(ipmmu, IMTTBCR, 1); in ipmmu_tlb_set()
59 ipmmu->tlb_enabled = 1; in ipmmu_tlb_set()
62 ipmmu_reg_write(ipmmu, IMTTBCR, 2); in ipmmu_tlb_set()
63 ipmmu->tlb_enabled = 1; in ipmmu_tlb_set()
66 ipmmu_reg_write(ipmmu, IMTTBCR, 3); in ipmmu_tlb_set()
67 ipmmu->tlb_enabled = 1; in ipmmu_tlb_set()
70 ipmmu_reg_write(ipmmu, IMTTBCR, 4); in ipmmu_tlb_set()
71 ipmmu->tlb_enabled = 1; in ipmmu_tlb_set()
74 ipmmu_reg_write(ipmmu, IMTTBCR, 5); in ipmmu_tlb_set()
75 ipmmu->tlb_enabled = 1; in ipmmu_tlb_set()
78 ipmmu_reg_write(ipmmu, IMTTBCR, 6); in ipmmu_tlb_set()
79 ipmmu->tlb_enabled = 1; in ipmmu_tlb_set()
82 ipmmu_reg_write(ipmmu, IMTTBCR, 7); in ipmmu_tlb_set()
83 ipmmu->tlb_enabled = 1; in ipmmu_tlb_set()
86 ipmmu_reg_write(ipmmu, IMTTBR, phys); in ipmmu_tlb_set()
87 ipmmu_reg_write(ipmmu, IMASID, asid); in ipmmu_tlb_set()
88 spin_unlock(&ipmmu->flush_lock); in ipmmu_tlb_set()
93 struct shmobile_ipmmu *ipmmu; in ipmmu_probe() local
97 ipmmu = devm_kzalloc(&pdev->dev, sizeof(*ipmmu), GFP_KERNEL); in ipmmu_probe()
98 if (!ipmmu) { in ipmmu_probe()
102 spin_lock_init(&ipmmu->flush_lock); in ipmmu_probe()
103 ipmmu->dev = &pdev->dev; in ipmmu_probe()
106 ipmmu->ipmmu_base = devm_ioremap_resource(&pdev->dev, res); in ipmmu_probe()
107 if (IS_ERR(ipmmu->ipmmu_base)) in ipmmu_probe()
108 return PTR_ERR(ipmmu->ipmmu_base); in ipmmu_probe()
110 ipmmu->dev_names = pdata->dev_names; in ipmmu_probe()
111 ipmmu->num_dev_names = pdata->num_dev_names; in ipmmu_probe()
112 platform_set_drvdata(pdev, ipmmu); in ipmmu_probe()
113 ipmmu_reg_write(ipmmu, IMCTR1, 0x0); /* disable TLB */ in ipmmu_probe()
114 ipmmu_reg_write(ipmmu, IMCTR2, 0x0); /* disable PMB */ in ipmmu_probe()
115 return ipmmu_iommu_init(ipmmu); in ipmmu_probe()