MIPS: pgtable.h: Implement the pgprot_writecombine function for MIPS
authorMarkos Chandras <markos.chandras@imgtec.com>
Fri, 18 Jul 2014 09:51:33 +0000 (10:51 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 22 Sep 2014 11:35:53 +0000 (13:35 +0200)
Previously, the pgprot_writecombine function was simply defined
as pgprot_uncached in include/asm-generic/pgtable.h. This is not
optimal for cores that can actually do write-combine memory writes
so define this function to take into account the core's cache coherency
attribute to achieve such behavior.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/7403/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/pgtable.h

index df49a308085caa568c74e48a64a1eea0d7f2b845..d6d1928539b1a8ffdd93adda099d4a25f2ff2ee4 100644 (file)
@@ -366,6 +366,16 @@ static inline pgprot_t pgprot_noncached(pgprot_t _prot)
        return __pgprot(prot);
 }
 
+static inline pgprot_t pgprot_writecombine(pgprot_t _prot)
+{
+       unsigned long prot = pgprot_val(_prot);
+
+       /* cpu_data[0].writecombine is already shifted by _CACHE_SHIFT */
+       prot = (prot & ~_CACHE_MASK) | cpu_data[0].writecombine;
+
+       return __pgprot(prot);
+}
+
 /*
  * Conversion functions: convert a page and protection to a page entry,
  * and a page entry and page directory to the page they refer to.