MIPS: Enable IOREMAP_PROT config option for MIPS cpus
authorHassan Naveed <hnaveed@wavecomp.com>
Tue, 30 Oct 2018 01:27:41 +0000 (18:27 -0700)
committerPaul Burton <paul.burton@mips.com>
Mon, 5 Nov 2018 18:15:28 +0000 (10:15 -0800)
Allows the users of ptrace to access memory mapped by the ptraced process
using the same cache coherency attributes as the original process.
For example while using gdb with ioremap_prot() incorporated, both gdb and
the process being traced will have same cache coherency attributes.

Signed-off-by: Hassan Naveed <hnaveed@wavecomp.com>
Signed-off-by: Paul Burton <paul.burton@mips.com>
Patchwork: https://patchwork.linux-mips.org/patch/20955/
Cc: <linux-mips@linux-mips.org>
Documentation/features/vm/ioremap_prot/arch-support.txt
arch/mips/Kconfig
arch/mips/include/asm/io.h
arch/mips/include/asm/page.h

index 8527601a3739d38f5fe7d3f0d80d2e21d31d304b..326e4797bc6558b28ccb4e086acb6da11bb2dba4 100644 (file)
@@ -16,7 +16,7 @@
     |        ia64: | TODO |
     |        m68k: | TODO |
     |  microblaze: | TODO |
-    |        mips: | TODO |
+    |        mips: |  ok  |
     |       nds32: | TODO |
     |       nios2: | TODO |
     |    openrisc: | TODO |
index 8272ea4c72645777b0174907f621d57040857599..378525aaadccf8923f7ecf453e15fbd12130c181 100644 (file)
@@ -56,6 +56,7 @@ config MIPS
        select HAVE_FUNCTION_TRACER
        select HAVE_GENERIC_DMA_COHERENT
        select HAVE_IDE
+       select HAVE_IOREMAP_PROT
        select HAVE_IRQ_EXIT_ON_IRQ_STACK
        select HAVE_IRQ_TIME_ACCOUNTING
        select HAVE_KPROBES
index 266257d56fb6111fe54d2ebbb503fdfee10ebe46..b5322f7386bf482a2640a7255ada050255fb4bfa 100644 (file)
@@ -217,6 +217,18 @@ static inline void __iomem * __ioremap_mode(phys_addr_t offset, unsigned long si
 #undef __IS_LOW512
 }
 
+/*
+ * ioremap_prot     -   map bus memory into CPU space
+ * @offset:    bus address of the memory
+ * @size:      size of the resource to map
+
+ * ioremap_prot gives the caller control over cache coherency attributes (CCA)
+ */
+static inline void __iomem *ioremap_prot(phys_addr_t offset,
+               unsigned long size, unsigned long prot_val) {
+       return __ioremap_mode(offset, size, prot_val & _CACHE_MASK);
+}
+
 /*
  * ioremap     -   map bus memory into CPU space
  * @offset:    bus address of the memory
index e8cc328fce2d62cb49100d4135b7d4d91b1a4735..6b31c93b5eaad3bf4423779b188bc996f519071b 100644 (file)
@@ -154,6 +154,7 @@ typedef struct { unsigned long pgd; } pgd_t;
 typedef struct { unsigned long pgprot; } pgprot_t;
 #define pgprot_val(x)  ((x).pgprot)
 #define __pgprot(x)    ((pgprot_t) { (x) } )
+#define pte_pgprot(x)  __pgprot(pte_val(x) & ~_PFN_MASK)
 
 /*
  * On R4000-style MMUs where a TLB entry is mapping a adjacent even / odd