aboutsummaryrefslogtreecommitdiffstats
path: root/arch/csky/mm/ioremap.c
diff options
context:
space:
mode:
authorGuo Ren <ren_guo@c-sky.com>2019-01-30 20:13:11 +0800
committerGuo Ren <ren_guo@c-sky.com>2019-02-13 09:48:14 +0800
commit76d21d186a65523b08ea5f70302e2c29ee8f6a8d (patch)
tree0b8d869eb706911f0a7c38cac4d26e25f218b622 /arch/csky/mm/ioremap.c
parentcsky: coding convention: Use task_stack_page (diff)
downloadlinux-dev-76d21d186a65523b08ea5f70302e2c29ee8f6a8d.tar.xz
linux-dev-76d21d186a65523b08ea5f70302e2c29ee8f6a8d.zip
csky: Fixup io-range page attribute for mmap("/dev/mem")
Some user space drivers need accessing IO address and IO remap need SO(strong order) page-attribute to make IO operation correct. So we need add SO-page-attr for all non-memory address. Signed-off-by: Guo Ren <ren_guo@c-sky.com> Reported-by: Fan Xiaodong <xiaodong.fan@boyahualu.com>
Diffstat (limited to '')
-rw-r--r--arch/csky/mm/ioremap.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/csky/mm/ioremap.c b/arch/csky/mm/ioremap.c
index cb7c03e5cd21..8473b6bdf512 100644
--- a/arch/csky/mm/ioremap.c
+++ b/arch/csky/mm/ioremap.c
@@ -46,3 +46,17 @@ void iounmap(void __iomem *addr)
vunmap((void *)((unsigned long)addr & PAGE_MASK));
}
EXPORT_SYMBOL(iounmap);
+
+pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
+ unsigned long size, pgprot_t vma_prot)
+{
+ if (!pfn_valid(pfn)) {
+ vma_prot.pgprot |= _PAGE_SO;
+ return pgprot_noncached(vma_prot);
+ } else if (file->f_flags & O_SYNC) {
+ return pgprot_noncached(vma_prot);
+ }
+
+ return vma_prot;
+}
+EXPORT_SYMBOL(phys_mem_access_prot);