|
@@ -247,50 +247,6 @@ static void __sysmmu_set_prefbuf(void __iomem *sfrbase, unsigned long base,
|
|
|
__raw_writel(size - 1 + base, sfrbase + REG_PB0_EADDR + idx * 8);
|
|
|
}
|
|
|
|
|
|
-void exynos_sysmmu_set_prefbuf(struct device *dev,
|
|
|
- unsigned long base0, unsigned long size0,
|
|
|
- unsigned long base1, unsigned long size1)
|
|
|
-{
|
|
|
- struct sysmmu_drvdata *data = dev_get_drvdata(dev->archdata.iommu);
|
|
|
- unsigned long flags;
|
|
|
- int i;
|
|
|
-
|
|
|
- BUG_ON((base0 + size0) <= base0);
|
|
|
- BUG_ON((size1 > 0) && ((base1 + size1) <= base1));
|
|
|
-
|
|
|
- read_lock_irqsave(&data->lock, flags);
|
|
|
- if (!is_sysmmu_active(data))
|
|
|
- goto finish;
|
|
|
-
|
|
|
- for (i = 0; i < data->nsfrs; i++) {
|
|
|
- if ((readl(data->sfrbases[i] + REG_MMU_VERSION) >> 28) == 3) {
|
|
|
- if (!sysmmu_block(data->sfrbases[i]))
|
|
|
- continue;
|
|
|
-
|
|
|
- if (size1 == 0) {
|
|
|
- if (size0 <= SZ_128K) {
|
|
|
- base1 = base0;
|
|
|
- size1 = size0;
|
|
|
- } else {
|
|
|
- size1 = size0 -
|
|
|
- ALIGN(size0 / 2, SZ_64K);
|
|
|
- size0 = size0 - size1;
|
|
|
- base1 = base0 + size0;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- __sysmmu_set_prefbuf(
|
|
|
- data->sfrbases[i], base0, size0, 0);
|
|
|
- __sysmmu_set_prefbuf(
|
|
|
- data->sfrbases[i], base1, size1, 1);
|
|
|
-
|
|
|
- sysmmu_unblock(data->sfrbases[i]);
|
|
|
- }
|
|
|
- }
|
|
|
-finish:
|
|
|
- read_unlock_irqrestore(&data->lock, flags);
|
|
|
-}
|
|
|
-
|
|
|
static void __set_fault_handler(struct sysmmu_drvdata *data,
|
|
|
sysmmu_fault_handler_t handler)
|
|
|
{
|