aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Dooks <ben.dooks@codethink.co.uk>2016-06-08 14:31:10 -0400
committerJoerg Roedel <jroedel@suse.de>2016-06-21 05:59:03 -0400
commit6ae5343c26f9cba5e9ef8ba6f23b5bb255ebc798 (patch)
tree800bcdf19e1ee43cd5dcb2eef6000f6c5e696bf4
parent96f6655700d16d1bae8ef49db6ce28607ebee6f3 (diff)
iommu/exynos: update to use iommu big-endian
Add initial support for big endian by always writing the pte in le32. Note, revisit if hardware capable of doing big endian fetches. Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> Acked-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
-rw-r--r--drivers/iommu/exynos-iommu.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
index 633e6d023c0d..33dcc29ec200 100644
--- a/drivers/iommu/exynos-iommu.c
+++ b/drivers/iommu/exynos-iommu.c
@@ -54,6 +54,10 @@ typedef u32 sysmmu_pte_t;
54#define lv2ent_small(pent) ((*(pent) & 2) == 2) 54#define lv2ent_small(pent) ((*(pent) & 2) == 2)
55#define lv2ent_large(pent) ((*(pent) & 3) == 1) 55#define lv2ent_large(pent) ((*(pent) & 3) == 1)
56 56
57#ifdef CONFIG_BIG_ENDIAN
58#warning "revisit driver if we can enable big-endian ptes"
59#endif
60
57/* 61/*
58 * v1.x - v3.x SYSMMU supports 32bit physical and 32bit virtual address spaces 62 * v1.x - v3.x SYSMMU supports 32bit physical and 32bit virtual address spaces
59 * v5.0 introduced support for 36bit physical address space by shifting 63 * v5.0 introduced support for 36bit physical address space by shifting
@@ -710,7 +714,7 @@ static inline void update_pte(sysmmu_pte_t *ent, sysmmu_pte_t val)
710{ 714{
711 dma_sync_single_for_cpu(dma_dev, virt_to_phys(ent), sizeof(*ent), 715 dma_sync_single_for_cpu(dma_dev, virt_to_phys(ent), sizeof(*ent),
712 DMA_TO_DEVICE); 716 DMA_TO_DEVICE);
713 *ent = val; 717 *ent = cpu_to_le32(val);
714 dma_sync_single_for_device(dma_dev, virt_to_phys(ent), sizeof(*ent), 718 dma_sync_single_for_device(dma_dev, virt_to_phys(ent), sizeof(*ent),
715 DMA_TO_DEVICE); 719 DMA_TO_DEVICE);
716} 720}