int sprd_iommu_mm_disable(struct sprd_iommu_dev *dev)
{
	sprd_iommu_disable(dev);
	clk_disable(dev->mmu_clock);
	clk_disable(dev->mmu_mclock);
	return 0;
}
Пример #2
0
int sprd_iommu_gsp0_iova_unmap(struct sprd_iommu_dev *dev, unsigned long iova,
				size_t iova_length)
{
	int err = -1;

	mutex_lock(&dev->mutex_map);
	err = sprd_iommu_iova_unmap(dev, iova, iova_length);

	dev->map_count--;
	if (0 == dev->map_count)
		sprd_iommu_disable(dev);
	mutex_unlock(&dev->mutex_map);

	return err;
}
Пример #3
0
int sprd_iommu_mm_disable(struct sprd_iommu_dev *dev)
{
	printk("%s line:%d\n",__FUNCTION__,__LINE__);

	sprd_iommu_disable(dev);

	mutex_lock(&dev->mutex_pgt);
	iommu_mm_reg_write(dev->init_data->ctrl_reg,MMU_TLB_EN(0),MMU_TLB_EN_MASK);
	iommu_mm_reg_write(dev->init_data->ctrl_reg,MMU_EN(0),MMU_EN_MASK);
	mutex_unlock(&dev->mutex_pgt);

#ifdef CONFIG_OF
	clk_disable_unprepare(dev->mmu_clock);
	if (dev->mmu_mclock)
		clk_disable_unprepare(dev->mmu_mclock);
#else
	clk_disable(dev->mmu_clock);
	clk_disable(dev->mmu_mclock);
#endif
	return 0;
}