diff options
author | Ben Dooks <ben.dooks@codethink.co.uk> | 2016-06-08 14:31:10 -0400 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2016-06-21 05:59:03 -0400 |
commit | 6ae5343c26f9cba5e9ef8ba6f23b5bb255ebc798 (patch) | |
tree | 800bcdf19e1ee43cd5dcb2eef6000f6c5e696bf4 | |
parent | 96f6655700d16d1bae8ef49db6ce28607ebee6f3 (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.c | 6 |
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 | } |