All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] Add pgprot_writecombine function for MIPS
@ 2014-07-18  9:51 ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-07-18  9:51 UTC (permalink / raw)
  To: linux-mips; +Cc: Markos Chandras

Hi,

This patchset implements the pgprot_writecombine function for MIPS

Markos Chandras (4):
  MIPS: pgtable-bits: Move the CCA bits out of the core's ifdef blocks
  MIPS: pgtable-bits: Define the CCA bit for WC writes on Ingenic cores
  MIPS: cpu-probe: Set the write-combine CCA value on per core basis
  MIPS: pgtable.h: Implement the pgprot_writecombine function for MIPS

 arch/mips/include/asm/cpu-info.h     |  5 ++++
 arch/mips/include/asm/pgtable-bits.h | 44 ++++++++++++++++++++++++------------
 arch/mips/include/asm/pgtable.h      | 10 ++++++++
 arch/mips/kernel/cpu-probe.c         | 21 +++++++++++++++++
 4 files changed, 65 insertions(+), 15 deletions(-)

-- 
2.0.0

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 0/4] Add pgprot_writecombine function for MIPS
@ 2014-07-18  9:51 ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-07-18  9:51 UTC (permalink / raw)
  To: linux-mips; +Cc: Markos Chandras

Hi,

This patchset implements the pgprot_writecombine function for MIPS

Markos Chandras (4):
  MIPS: pgtable-bits: Move the CCA bits out of the core's ifdef blocks
  MIPS: pgtable-bits: Define the CCA bit for WC writes on Ingenic cores
  MIPS: cpu-probe: Set the write-combine CCA value on per core basis
  MIPS: pgtable.h: Implement the pgprot_writecombine function for MIPS

 arch/mips/include/asm/cpu-info.h     |  5 ++++
 arch/mips/include/asm/pgtable-bits.h | 44 ++++++++++++++++++++++++------------
 arch/mips/include/asm/pgtable.h      | 10 ++++++++
 arch/mips/kernel/cpu-probe.c         | 21 +++++++++++++++++
 4 files changed, 65 insertions(+), 15 deletions(-)

-- 
2.0.0

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 1/4] MIPS: pgtable-bits: Move the CCA bits out of the core's ifdef blocks
@ 2014-07-18  9:51   ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-07-18  9:51 UTC (permalink / raw)
  To: linux-mips; +Cc: Markos Chandras

Define all the CCA bits outside the ifdef blocks for specific cores
but also allow cores to override them if necessary.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
---
 arch/mips/include/asm/pgtable-bits.h | 41 ++++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 16 deletions(-)

diff --git a/arch/mips/include/asm/pgtable-bits.h b/arch/mips/include/asm/pgtable-bits.h
index e592f3687d6f..011b0dcf306e 100644
--- a/arch/mips/include/asm/pgtable-bits.h
+++ b/arch/mips/include/asm/pgtable-bits.h
@@ -224,38 +224,47 @@ static inline uint64_t pte_to_entrylo(unsigned long pte_val)
 #if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX)
 
 #define _CACHE_CACHABLE_NONCOHERENT 0
+#define _CACHE_UNCACHED_ACCELERATED _CACHE_UNCACHED
 
 #elif defined(CONFIG_CPU_SB1)
 
 /* No penalty for being coherent on the SB1, so just
    use it for "noncoherent" spaces, too.  Shouldn't hurt. */
 
-#define _CACHE_UNCACHED		    (2<<_CACHE_SHIFT)
-#define _CACHE_CACHABLE_COW	    (5<<_CACHE_SHIFT)
 #define _CACHE_CACHABLE_NONCOHERENT (5<<_CACHE_SHIFT)
-#define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT)
 
 #elif defined(CONFIG_CPU_LOONGSON3)
 
 /* Using COHERENT flag for NONCOHERENT doesn't hurt. */
 
-#define _CACHE_UNCACHED             (2<<_CACHE_SHIFT)  /* LOONGSON       */
 #define _CACHE_CACHABLE_NONCOHERENT (3<<_CACHE_SHIFT)  /* LOONGSON       */
 #define _CACHE_CACHABLE_COHERENT    (3<<_CACHE_SHIFT)  /* LOONGSON-3     */
-#define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT)  /* LOONGSON       */
 
-#else
-
-#define _CACHE_CACHABLE_NO_WA	    (0<<_CACHE_SHIFT)  /* R4600 only	  */
-#define _CACHE_CACHABLE_WA	    (1<<_CACHE_SHIFT)  /* R4600 only	  */
-#define _CACHE_UNCACHED		    (2<<_CACHE_SHIFT)  /* R4[0246]00	  */
-#define _CACHE_CACHABLE_NONCOHERENT (3<<_CACHE_SHIFT)  /* R4[0246]00	  */
-#define _CACHE_CACHABLE_CE	    (4<<_CACHE_SHIFT)  /* R4[04]00MC only */
-#define _CACHE_CACHABLE_COW	    (5<<_CACHE_SHIFT)  /* R4[04]00MC only */
-#define _CACHE_CACHABLE_COHERENT    (5<<_CACHE_SHIFT)  /* MIPS32R2 CMP	  */
-#define _CACHE_CACHABLE_CUW	    (6<<_CACHE_SHIFT)  /* R4[04]00MC only */
-#define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT)  /* R10000 only	  */
+#endif
 
+#ifndef _CACHE_CACHABLE_NO_WA
+#define _CACHE_CACHABLE_NO_WA		(0<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_CACHABLE_WA
+#define _CACHE_CACHABLE_WA		(1<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_UNCACHED
+#define _CACHE_UNCACHED			(2<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_CACHABLE_NONCOHERENT
+#define _CACHE_CACHABLE_NONCOHERENT	(3<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_CACHABLE_CE
+#define _CACHE_CACHABLE_CE		(4<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_CACHABLE_COW
+#define _CACHE_CACHABLE_COW		(5<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_CACHABLE_CUW
+#define _CACHE_CACHABLE_CUW		(6<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_UNCACHED_ACCELERATED
+#define _CACHE_UNCACHED_ACCELERATED	(7<<_CACHE_SHIFT)
 #endif
 
 #define __READABLE	(_PAGE_SILENT_READ | _PAGE_ACCESSED | (cpu_has_rixi ? 0 : _PAGE_READ))
-- 
2.0.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 1/4] MIPS: pgtable-bits: Move the CCA bits out of the core's ifdef blocks
@ 2014-07-18  9:51   ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-07-18  9:51 UTC (permalink / raw)
  To: linux-mips; +Cc: Markos Chandras

Define all the CCA bits outside the ifdef blocks for specific cores
but also allow cores to override them if necessary.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
---
 arch/mips/include/asm/pgtable-bits.h | 41 ++++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 16 deletions(-)

diff --git a/arch/mips/include/asm/pgtable-bits.h b/arch/mips/include/asm/pgtable-bits.h
index e592f3687d6f..011b0dcf306e 100644
--- a/arch/mips/include/asm/pgtable-bits.h
+++ b/arch/mips/include/asm/pgtable-bits.h
@@ -224,38 +224,47 @@ static inline uint64_t pte_to_entrylo(unsigned long pte_val)
 #if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX)
 
 #define _CACHE_CACHABLE_NONCOHERENT 0
+#define _CACHE_UNCACHED_ACCELERATED _CACHE_UNCACHED
 
 #elif defined(CONFIG_CPU_SB1)
 
 /* No penalty for being coherent on the SB1, so just
    use it for "noncoherent" spaces, too.  Shouldn't hurt. */
 
-#define _CACHE_UNCACHED		    (2<<_CACHE_SHIFT)
-#define _CACHE_CACHABLE_COW	    (5<<_CACHE_SHIFT)
 #define _CACHE_CACHABLE_NONCOHERENT (5<<_CACHE_SHIFT)
-#define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT)
 
 #elif defined(CONFIG_CPU_LOONGSON3)
 
 /* Using COHERENT flag for NONCOHERENT doesn't hurt. */
 
-#define _CACHE_UNCACHED             (2<<_CACHE_SHIFT)  /* LOONGSON       */
 #define _CACHE_CACHABLE_NONCOHERENT (3<<_CACHE_SHIFT)  /* LOONGSON       */
 #define _CACHE_CACHABLE_COHERENT    (3<<_CACHE_SHIFT)  /* LOONGSON-3     */
-#define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT)  /* LOONGSON       */
 
-#else
-
-#define _CACHE_CACHABLE_NO_WA	    (0<<_CACHE_SHIFT)  /* R4600 only	  */
-#define _CACHE_CACHABLE_WA	    (1<<_CACHE_SHIFT)  /* R4600 only	  */
-#define _CACHE_UNCACHED		    (2<<_CACHE_SHIFT)  /* R4[0246]00	  */
-#define _CACHE_CACHABLE_NONCOHERENT (3<<_CACHE_SHIFT)  /* R4[0246]00	  */
-#define _CACHE_CACHABLE_CE	    (4<<_CACHE_SHIFT)  /* R4[04]00MC only */
-#define _CACHE_CACHABLE_COW	    (5<<_CACHE_SHIFT)  /* R4[04]00MC only */
-#define _CACHE_CACHABLE_COHERENT    (5<<_CACHE_SHIFT)  /* MIPS32R2 CMP	  */
-#define _CACHE_CACHABLE_CUW	    (6<<_CACHE_SHIFT)  /* R4[04]00MC only */
-#define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT)  /* R10000 only	  */
+#endif
 
+#ifndef _CACHE_CACHABLE_NO_WA
+#define _CACHE_CACHABLE_NO_WA		(0<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_CACHABLE_WA
+#define _CACHE_CACHABLE_WA		(1<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_UNCACHED
+#define _CACHE_UNCACHED			(2<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_CACHABLE_NONCOHERENT
+#define _CACHE_CACHABLE_NONCOHERENT	(3<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_CACHABLE_CE
+#define _CACHE_CACHABLE_CE		(4<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_CACHABLE_COW
+#define _CACHE_CACHABLE_COW		(5<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_CACHABLE_CUW
+#define _CACHE_CACHABLE_CUW		(6<<_CACHE_SHIFT)
+#endif
+#ifndef _CACHE_UNCACHED_ACCELERATED
+#define _CACHE_UNCACHED_ACCELERATED	(7<<_CACHE_SHIFT)
 #endif
 
 #define __READABLE	(_PAGE_SILENT_READ | _PAGE_ACCESSED | (cpu_has_rixi ? 0 : _PAGE_READ))
-- 
2.0.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 2/4] MIPS: pgtable-bits: Define the CCA bit for WC writes on Ingenic cores
@ 2014-07-18  9:51   ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-07-18  9:51 UTC (permalink / raw)
  To: linux-mips; +Cc: Markos Chandras

Ingenic uses the CCA:1 bit to achieve write-combine memory writes.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
---
As found in the following git repository
https://github.com/IngenicSemiconductor/KERNEL-WARRIOR/blob/master/arch/mips/include/asm/pgtable.h#L342
---
 arch/mips/include/asm/pgtable-bits.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/mips/include/asm/pgtable-bits.h b/arch/mips/include/asm/pgtable-bits.h
index 011b0dcf306e..e747bfa0be7e 100644
--- a/arch/mips/include/asm/pgtable-bits.h
+++ b/arch/mips/include/asm/pgtable-bits.h
@@ -240,6 +240,11 @@ static inline uint64_t pte_to_entrylo(unsigned long pte_val)
 #define _CACHE_CACHABLE_NONCOHERENT (3<<_CACHE_SHIFT)  /* LOONGSON       */
 #define _CACHE_CACHABLE_COHERENT    (3<<_CACHE_SHIFT)  /* LOONGSON-3     */
 
+#elif defined(CONFIG_MACH_JZ4740)
+
+/* Ingenic uses the WA bit to achieve write-combine memory writes */
+#define _CACHE_UNCACHED_ACCELERATED (1<<_CACHE_SHIFT)
+
 #endif
 
 #ifndef _CACHE_CACHABLE_NO_WA
-- 
2.0.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 2/4] MIPS: pgtable-bits: Define the CCA bit for WC writes on Ingenic cores
@ 2014-07-18  9:51   ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-07-18  9:51 UTC (permalink / raw)
  To: linux-mips; +Cc: Markos Chandras

Ingenic uses the CCA:1 bit to achieve write-combine memory writes.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
---
As found in the following git repository
https://github.com/IngenicSemiconductor/KERNEL-WARRIOR/blob/master/arch/mips/include/asm/pgtable.h#L342
---
 arch/mips/include/asm/pgtable-bits.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/mips/include/asm/pgtable-bits.h b/arch/mips/include/asm/pgtable-bits.h
index 011b0dcf306e..e747bfa0be7e 100644
--- a/arch/mips/include/asm/pgtable-bits.h
+++ b/arch/mips/include/asm/pgtable-bits.h
@@ -240,6 +240,11 @@ static inline uint64_t pte_to_entrylo(unsigned long pte_val)
 #define _CACHE_CACHABLE_NONCOHERENT (3<<_CACHE_SHIFT)  /* LOONGSON       */
 #define _CACHE_CACHABLE_COHERENT    (3<<_CACHE_SHIFT)  /* LOONGSON-3     */
 
+#elif defined(CONFIG_MACH_JZ4740)
+
+/* Ingenic uses the WA bit to achieve write-combine memory writes */
+#define _CACHE_UNCACHED_ACCELERATED (1<<_CACHE_SHIFT)
+
 #endif
 
 #ifndef _CACHE_CACHABLE_NO_WA
-- 
2.0.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 3/4] MIPS: cpu-probe: Set the write-combine CCA value on per core basis
@ 2014-07-18  9:51   ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-07-18  9:51 UTC (permalink / raw)
  To: linux-mips; +Cc: Markos Chandras

Different cores use different CCA values to achieve write-combine
memory writes. For cores that do not support write-combine we
set the default value to CCA:2 (uncached, non-coherent) which is the
default value as set by the kernel.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
---
 arch/mips/include/asm/cpu-info.h |  5 +++++
 arch/mips/kernel/cpu-probe.c     | 21 +++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h
index 47d5967ce7ef..7747bc7eafaa 100644
--- a/arch/mips/include/asm/cpu-info.h
+++ b/arch/mips/include/asm/cpu-info.h
@@ -78,6 +78,11 @@ struct cpuinfo_mips {
 #define NUM_WATCH_REGS 4
 	u16			watch_reg_masks[NUM_WATCH_REGS];
 	unsigned int		kscratch_mask; /* Usable KScratch mask. */
+	/*
+	 * Cache Coherency attribute for write-combine memory writes.
+	 * (shifted by _CACHE_SHIFT)
+	 */
+	unsigned int		writecombine;
 } __attribute__((aligned(SMP_CACHE_BYTES)));
 
 extern struct cpuinfo_mips cpu_data[];
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
index d74f957c561e..f85c2c6670f5 100644
--- a/arch/mips/kernel/cpu-probe.c
+++ b/arch/mips/kernel/cpu-probe.c
@@ -27,6 +27,7 @@
 #include <asm/msa.h>
 #include <asm/watch.h>
 #include <asm/elf.h>
+#include <asm/pgtable-bits.h>
 #include <asm/spram.h>
 #include <asm/uaccess.h>
 
@@ -737,6 +738,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
 			break;
 		case PRID_REV_LOONGSON3A:
 			c->cputype = CPU_LOONGSON3;
+			c->writecombine = _CACHE_UNCACHED_ACCELERATED;
 			__cpu_name[cpu] = "ICT Loongson-3";
 			set_elf_platform(cpu, "loongson3a");
 			break;
@@ -765,67 +767,83 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
 
 static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
 {
+	c->writecombine = _CACHE_UNCACHED_ACCELERATED;
 	switch (c->processor_id & PRID_IMP_MASK) {
 	case PRID_IMP_4KC:
 		c->cputype = CPU_4KC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 4Kc";
 		break;
 	case PRID_IMP_4KEC:
 	case PRID_IMP_4KECR2:
 		c->cputype = CPU_4KEC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 4KEc";
 		break;
 	case PRID_IMP_4KSC:
 	case PRID_IMP_4KSD:
 		c->cputype = CPU_4KSC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 4KSc";
 		break;
 	case PRID_IMP_5KC:
 		c->cputype = CPU_5KC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 5Kc";
 		break;
 	case PRID_IMP_5KE:
 		c->cputype = CPU_5KE;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 5KE";
 		break;
 	case PRID_IMP_20KC:
 		c->cputype = CPU_20KC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 20Kc";
 		break;
 	case PRID_IMP_24K:
 		c->cputype = CPU_24K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 24Kc";
 		break;
 	case PRID_IMP_24KE:
 		c->cputype = CPU_24K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 24KEc";
 		break;
 	case PRID_IMP_25KF:
 		c->cputype = CPU_25KF;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 25Kc";
 		break;
 	case PRID_IMP_34K:
 		c->cputype = CPU_34K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 34Kc";
 		break;
 	case PRID_IMP_74K:
 		c->cputype = CPU_74K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 74Kc";
 		break;
 	case PRID_IMP_M14KC:
 		c->cputype = CPU_M14KC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS M14Kc";
 		break;
 	case PRID_IMP_M14KEC:
 		c->cputype = CPU_M14KEC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS M14KEc";
 		break;
 	case PRID_IMP_1004K:
 		c->cputype = CPU_1004K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 1004Kc";
 		break;
 	case PRID_IMP_1074K:
 		c->cputype = CPU_1074K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 1074Kc";
 		break;
 	case PRID_IMP_INTERAPTIV_UP:
@@ -899,6 +917,7 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c, unsigned int cpu)
 {
 	decode_configs(c);
 
+	c->writecombine = _CACHE_UNCACHED_ACCELERATED;
 	switch (c->processor_id & PRID_IMP_MASK) {
 	case PRID_IMP_SB1:
 		c->cputype = CPU_SB1;
@@ -1030,6 +1049,7 @@ static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu)
 	switch (c->processor_id & PRID_IMP_MASK) {
 	case PRID_IMP_JZRISC:
 		c->cputype = CPU_JZRISC;
+		c->writecombine = _CACHE_UNCACHED_ACCELERATED;
 		__cpu_name[cpu] = "Ingenic JZRISC";
 		break;
 	default:
@@ -1136,6 +1156,7 @@ void cpu_probe(void)
 	c->processor_id = PRID_IMP_UNKNOWN;
 	c->fpu_id	= FPIR_IMP_NONE;
 	c->cputype	= CPU_UNKNOWN;
+	c->writecombine = _CACHE_UNCACHED;
 
 	c->processor_id = read_c0_prid();
 	switch (c->processor_id & PRID_COMP_MASK) {
-- 
2.0.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 3/4] MIPS: cpu-probe: Set the write-combine CCA value on per core basis
@ 2014-07-18  9:51   ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-07-18  9:51 UTC (permalink / raw)
  To: linux-mips; +Cc: Markos Chandras

Different cores use different CCA values to achieve write-combine
memory writes. For cores that do not support write-combine we
set the default value to CCA:2 (uncached, non-coherent) which is the
default value as set by the kernel.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
---
 arch/mips/include/asm/cpu-info.h |  5 +++++
 arch/mips/kernel/cpu-probe.c     | 21 +++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h
index 47d5967ce7ef..7747bc7eafaa 100644
--- a/arch/mips/include/asm/cpu-info.h
+++ b/arch/mips/include/asm/cpu-info.h
@@ -78,6 +78,11 @@ struct cpuinfo_mips {
 #define NUM_WATCH_REGS 4
 	u16			watch_reg_masks[NUM_WATCH_REGS];
 	unsigned int		kscratch_mask; /* Usable KScratch mask. */
+	/*
+	 * Cache Coherency attribute for write-combine memory writes.
+	 * (shifted by _CACHE_SHIFT)
+	 */
+	unsigned int		writecombine;
 } __attribute__((aligned(SMP_CACHE_BYTES)));
 
 extern struct cpuinfo_mips cpu_data[];
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
index d74f957c561e..f85c2c6670f5 100644
--- a/arch/mips/kernel/cpu-probe.c
+++ b/arch/mips/kernel/cpu-probe.c
@@ -27,6 +27,7 @@
 #include <asm/msa.h>
 #include <asm/watch.h>
 #include <asm/elf.h>
+#include <asm/pgtable-bits.h>
 #include <asm/spram.h>
 #include <asm/uaccess.h>
 
@@ -737,6 +738,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
 			break;
 		case PRID_REV_LOONGSON3A:
 			c->cputype = CPU_LOONGSON3;
+			c->writecombine = _CACHE_UNCACHED_ACCELERATED;
 			__cpu_name[cpu] = "ICT Loongson-3";
 			set_elf_platform(cpu, "loongson3a");
 			break;
@@ -765,67 +767,83 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
 
 static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
 {
+	c->writecombine = _CACHE_UNCACHED_ACCELERATED;
 	switch (c->processor_id & PRID_IMP_MASK) {
 	case PRID_IMP_4KC:
 		c->cputype = CPU_4KC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 4Kc";
 		break;
 	case PRID_IMP_4KEC:
 	case PRID_IMP_4KECR2:
 		c->cputype = CPU_4KEC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 4KEc";
 		break;
 	case PRID_IMP_4KSC:
 	case PRID_IMP_4KSD:
 		c->cputype = CPU_4KSC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 4KSc";
 		break;
 	case PRID_IMP_5KC:
 		c->cputype = CPU_5KC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 5Kc";
 		break;
 	case PRID_IMP_5KE:
 		c->cputype = CPU_5KE;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 5KE";
 		break;
 	case PRID_IMP_20KC:
 		c->cputype = CPU_20KC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 20Kc";
 		break;
 	case PRID_IMP_24K:
 		c->cputype = CPU_24K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 24Kc";
 		break;
 	case PRID_IMP_24KE:
 		c->cputype = CPU_24K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 24KEc";
 		break;
 	case PRID_IMP_25KF:
 		c->cputype = CPU_25KF;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 25Kc";
 		break;
 	case PRID_IMP_34K:
 		c->cputype = CPU_34K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 34Kc";
 		break;
 	case PRID_IMP_74K:
 		c->cputype = CPU_74K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 74Kc";
 		break;
 	case PRID_IMP_M14KC:
 		c->cputype = CPU_M14KC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS M14Kc";
 		break;
 	case PRID_IMP_M14KEC:
 		c->cputype = CPU_M14KEC;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS M14KEc";
 		break;
 	case PRID_IMP_1004K:
 		c->cputype = CPU_1004K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 1004Kc";
 		break;
 	case PRID_IMP_1074K:
 		c->cputype = CPU_1074K;
+		c->writecombine = _CACHE_UNCACHED;
 		__cpu_name[cpu] = "MIPS 1074Kc";
 		break;
 	case PRID_IMP_INTERAPTIV_UP:
@@ -899,6 +917,7 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c, unsigned int cpu)
 {
 	decode_configs(c);
 
+	c->writecombine = _CACHE_UNCACHED_ACCELERATED;
 	switch (c->processor_id & PRID_IMP_MASK) {
 	case PRID_IMP_SB1:
 		c->cputype = CPU_SB1;
@@ -1030,6 +1049,7 @@ static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu)
 	switch (c->processor_id & PRID_IMP_MASK) {
 	case PRID_IMP_JZRISC:
 		c->cputype = CPU_JZRISC;
+		c->writecombine = _CACHE_UNCACHED_ACCELERATED;
 		__cpu_name[cpu] = "Ingenic JZRISC";
 		break;
 	default:
@@ -1136,6 +1156,7 @@ void cpu_probe(void)
 	c->processor_id = PRID_IMP_UNKNOWN;
 	c->fpu_id	= FPIR_IMP_NONE;
 	c->cputype	= CPU_UNKNOWN;
+	c->writecombine = _CACHE_UNCACHED;
 
 	c->processor_id = read_c0_prid();
 	switch (c->processor_id & PRID_COMP_MASK) {
-- 
2.0.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 4/4] MIPS: pgtable.h: Implement the pgprot_writecombine function for MIPS
@ 2014-07-18  9:51   ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-07-18  9:51 UTC (permalink / raw)
  To: linux-mips; +Cc: Markos Chandras

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>
---
 arch/mips/include/asm/pgtable.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
index 539ddd148bbb..08f82e99ea8f 100644
--- a/arch/mips/include/asm/pgtable.h
+++ b/arch/mips/include/asm/pgtable.h
@@ -338,6 +338,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.
-- 
2.0.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 4/4] MIPS: pgtable.h: Implement the pgprot_writecombine function for MIPS
@ 2014-07-18  9:51   ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-07-18  9:51 UTC (permalink / raw)
  To: linux-mips; +Cc: Markos Chandras

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>
---
 arch/mips/include/asm/pgtable.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
index 539ddd148bbb..08f82e99ea8f 100644
--- a/arch/mips/include/asm/pgtable.h
+++ b/arch/mips/include/asm/pgtable.h
@@ -338,6 +338,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.
-- 
2.0.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH 3/4] MIPS: cpu-probe: Set the write-combine CCA value on per core basis
  2014-07-18  9:51   ` Markos Chandras
  (?)
@ 2014-08-04 22:54   ` Florian Fainelli
  2014-08-12  7:23       ` Markos Chandras
  -1 siblings, 1 reply; 15+ messages in thread
From: Florian Fainelli @ 2014-08-04 22:54 UTC (permalink / raw)
  To: Markos Chandras, linux-mips

Hi Markos,

On 07/18/2014 02:51 AM, Markos Chandras wrote:
> Different cores use different CCA values to achieve write-combine
> memory writes. For cores that do not support write-combine we
> set the default value to CCA:2 (uncached, non-coherent) which is the
> default value as set by the kernel.
> 
> Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
> ---
[snip]
			break;
> @@ -765,67 +767,83 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
>  
>  static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
>  {
> +	c->writecombine = _CACHE_UNCACHED_ACCELERATED;

Why do we set this writecombine setting by default, when later we are
going to override writecombine on a per-cpu basic.

In the end, we have the following:

cpu_probe()
	c->writecombine = _CACHE_UNCACHED;

	cpu_probe_mips()
		c->writecombine = _CACHE_UNCACHED_ACCELERATED:
		... per-cpu case ...
		c->writecombine = _CACHE_UNCACHED;

Can't we just eliminate the various assignments in cpu_probe_mips() and
only override c->writecombine if _CACHE_UNCACHED is not suitable?


>  	switch (c->processor_id & PRID_IMP_MASK) {
>  	case PRID_IMP_4KC:
>  		c->cputype = CPU_4KC;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 4Kc";
>  		break;
>  	case PRID_IMP_4KEC:
>  	case PRID_IMP_4KECR2:
>  		c->cputype = CPU_4KEC;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 4KEc";
>  		break;
>  	case PRID_IMP_4KSC:
>  	case PRID_IMP_4KSD:
>  		c->cputype = CPU_4KSC;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 4KSc";
>  		break;
>  	case PRID_IMP_5KC:
>  		c->cputype = CPU_5KC;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 5Kc";
>  		break;
>  	case PRID_IMP_5KE:
>  		c->cputype = CPU_5KE;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 5KE";
>  		break;
>  	case PRID_IMP_20KC:
>  		c->cputype = CPU_20KC;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 20Kc";
>  		break;
>  	case PRID_IMP_24K:
>  		c->cputype = CPU_24K;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 24Kc";
>  		break;
>  	case PRID_IMP_24KE:
>  		c->cputype = CPU_24K;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 24KEc";
>  		break;
>  	case PRID_IMP_25KF:
>  		c->cputype = CPU_25KF;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 25Kc";
>  		break;
>  	case PRID_IMP_34K:
>  		c->cputype = CPU_34K;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 34Kc";
>  		break;
>  	case PRID_IMP_74K:
>  		c->cputype = CPU_74K;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 74Kc";
>  		break;
>  	case PRID_IMP_M14KC:
>  		c->cputype = CPU_M14KC;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS M14Kc";
>  		break;
>  	case PRID_IMP_M14KEC:
>  		c->cputype = CPU_M14KEC;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS M14KEc";
>  		break;
>  	case PRID_IMP_1004K:
>  		c->cputype = CPU_1004K;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 1004Kc";
>  		break;
>  	case PRID_IMP_1074K:
>  		c->cputype = CPU_1074K;
> +		c->writecombine = _CACHE_UNCACHED;
>  		__cpu_name[cpu] = "MIPS 1074Kc";
>  		break;
>  	case PRID_IMP_INTERAPTIV_UP:
> @@ -899,6 +917,7 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c, unsigned int cpu)
>  {
>  	decode_configs(c);
>  
> +	c->writecombine = _CACHE_UNCACHED_ACCELERATED;
>  	switch (c->processor_id & PRID_IMP_MASK) {
>  	case PRID_IMP_SB1:
>  		c->cputype = CPU_SB1;
> @@ -1030,6 +1049,7 @@ static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu)
>  	switch (c->processor_id & PRID_IMP_MASK) {
>  	case PRID_IMP_JZRISC:
>  		c->cputype = CPU_JZRISC;
> +		c->writecombine = _CACHE_UNCACHED_ACCELERATED;
>  		__cpu_name[cpu] = "Ingenic JZRISC";
>  		break;
>  	default:
> @@ -1136,6 +1156,7 @@ void cpu_probe(void)
>  	c->processor_id = PRID_IMP_UNKNOWN;
>  	c->fpu_id	= FPIR_IMP_NONE;
>  	c->cputype	= CPU_UNKNOWN;
> +	c->writecombine = _CACHE_UNCACHED;



>  
>  	c->processor_id = read_c0_prid();
>  	switch (c->processor_id & PRID_COMP_MASK) {
> 

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 3/4] MIPS: cpu-probe: Set the write-combine CCA value on per core basis
@ 2014-08-12  7:23       ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-08-12  7:23 UTC (permalink / raw)
  To: Florian Fainelli; +Cc: linux-mips

Hi Florian,

On Mon, Aug 04, 2014 at 03:54:49PM -0700, Florian Fainelli wrote:
> Hi Markos,
> 
> On 07/18/2014 02:51 AM, Markos Chandras wrote:
> > Different cores use different CCA values to achieve write-combine
> > memory writes. For cores that do not support write-combine we
> > set the default value to CCA:2 (uncached, non-coherent) which is the
> > default value as set by the kernel.
> > 
> > Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
> > ---
> [snip]
> 			break;
> > @@ -765,67 +767,83 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
> >  
> >  static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
> >  {
> > +	c->writecombine = _CACHE_UNCACHED_ACCELERATED;
> 
> Why do we set this writecombine setting by default, when later we are
> going to override writecombine on a per-cpu basic.
> 
> In the end, we have the following:
> 
> cpu_probe()
> 	c->writecombine = _CACHE_UNCACHED;
> 
> 	cpu_probe_mips()
> 		c->writecombine = _CACHE_UNCACHED_ACCELERATED:
> 		... per-cpu case ...
> 		c->writecombine = _CACHE_UNCACHED;
> 
> Can't we just eliminate the various assignments in cpu_probe_mips() and
> only override c->writecombine if _CACHE_UNCACHED is not suitable?
> 
The reason I did it like this, is that new cores (eg *Aptiv family) will use
_CACHE_UNCACHED_ACCELERATED and that's why it's the 'default' option for
the MIPS cores. _CACHE_UNCACHED is only suitable for old cores.
The way it is right now, allows us to not have to set this option whenever we
add support for a new core since it will inherit the default option.

-- 
markos

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 3/4] MIPS: cpu-probe: Set the write-combine CCA value on per core basis
@ 2014-08-12  7:23       ` Markos Chandras
  0 siblings, 0 replies; 15+ messages in thread
From: Markos Chandras @ 2014-08-12  7:23 UTC (permalink / raw)
  To: Florian Fainelli; +Cc: linux-mips

Hi Florian,

On Mon, Aug 04, 2014 at 03:54:49PM -0700, Florian Fainelli wrote:
> Hi Markos,
> 
> On 07/18/2014 02:51 AM, Markos Chandras wrote:
> > Different cores use different CCA values to achieve write-combine
> > memory writes. For cores that do not support write-combine we
> > set the default value to CCA:2 (uncached, non-coherent) which is the
> > default value as set by the kernel.
> > 
> > Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
> > ---
> [snip]
> 			break;
> > @@ -765,67 +767,83 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
> >  
> >  static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
> >  {
> > +	c->writecombine = _CACHE_UNCACHED_ACCELERATED;
> 
> Why do we set this writecombine setting by default, when later we are
> going to override writecombine on a per-cpu basic.
> 
> In the end, we have the following:
> 
> cpu_probe()
> 	c->writecombine = _CACHE_UNCACHED;
> 
> 	cpu_probe_mips()
> 		c->writecombine = _CACHE_UNCACHED_ACCELERATED:
> 		... per-cpu case ...
> 		c->writecombine = _CACHE_UNCACHED;
> 
> Can't we just eliminate the various assignments in cpu_probe_mips() and
> only override c->writecombine if _CACHE_UNCACHED is not suitable?
> 
The reason I did it like this, is that new cores (eg *Aptiv family) will use
_CACHE_UNCACHED_ACCELERATED and that's why it's the 'default' option for
the MIPS cores. _CACHE_UNCACHED is only suitable for old cores.
The way it is right now, allows us to not have to set this option whenever we
add support for a new core since it will inherit the default option.

-- 
markos

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 3/4] MIPS: cpu-probe: Set the write-combine CCA value on per core basis
  2014-08-12  7:23       ` Markos Chandras
  (?)
@ 2014-08-12 18:02       ` Florian Fainelli
  -1 siblings, 0 replies; 15+ messages in thread
From: Florian Fainelli @ 2014-08-12 18:02 UTC (permalink / raw)
  To: Markos Chandras; +Cc: Linux-MIPS

Hi Markos,

2014-08-12 0:23 GMT-07:00 Markos Chandras <markos.chandras@imgtec.com>:
> Hi Florian,
>
> On Mon, Aug 04, 2014 at 03:54:49PM -0700, Florian Fainelli wrote:
>> Hi Markos,
>>
>> On 07/18/2014 02:51 AM, Markos Chandras wrote:
>> > Different cores use different CCA values to achieve write-combine
>> > memory writes. For cores that do not support write-combine we
>> > set the default value to CCA:2 (uncached, non-coherent) which is the
>> > default value as set by the kernel.
>> >
>> > Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
>> > ---
>> [snip]
>>                       break;
>> > @@ -765,67 +767,83 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
>> >
>> >  static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
>> >  {
>> > +   c->writecombine = _CACHE_UNCACHED_ACCELERATED;
>>
>> Why do we set this writecombine setting by default, when later we are
>> going to override writecombine on a per-cpu basic.
>>
>> In the end, we have the following:
>>
>> cpu_probe()
>>       c->writecombine = _CACHE_UNCACHED;
>>
>>       cpu_probe_mips()
>>               c->writecombine = _CACHE_UNCACHED_ACCELERATED:
>>               ... per-cpu case ...
>>               c->writecombine = _CACHE_UNCACHED;
>>
>> Can't we just eliminate the various assignments in cpu_probe_mips() and
>> only override c->writecombine if _CACHE_UNCACHED is not suitable?
>>
> The reason I did it like this, is that new cores (eg *Aptiv family) will use
> _CACHE_UNCACHED_ACCELERATED and that's why it's the 'default' option for
> the MIPS cores. _CACHE_UNCACHED is only suitable for old cores.
> The way it is right now, allows us to not have to set this option whenever we
> add support for a new core since it will inherit the default option.

Ok, that makes sense, although we currently have more _CACHE_UNCACHED
platforms supported than _CACHE_UNCACHED_ACCELERATED, so maybe once
you reach a critical number of Aptiv cores or with similar caching
settings, we can reverse the tendency by then? This is not a strong
objection, I was just looking at a way to minimize the changes.
-- 
Florian

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 0/4] Add pgprot_writecombine function for MIPS
  2014-07-18  9:51 ` Markos Chandras
                   ` (4 preceding siblings ...)
  (?)
@ 2014-08-27 11:16 ` Ralf Baechle
  -1 siblings, 0 replies; 15+ messages in thread
From: Ralf Baechle @ 2014-08-27 11:16 UTC (permalink / raw)
  To: Markos Chandras; +Cc: linux-mips

On Fri, Jul 18, 2014 at 10:51:29AM +0100, Markos Chandras wrote:

> This patchset implements the pgprot_writecombine function for MIPS
> 
> Markos Chandras (4):
>   MIPS: pgtable-bits: Move the CCA bits out of the core's ifdef blocks
>   MIPS: pgtable-bits: Define the CCA bit for WC writes on Ingenic cores
>   MIPS: cpu-probe: Set the write-combine CCA value on per core basis
>   MIPS: pgtable.h: Implement the pgprot_writecombine function for MIPS

A good thing - but I'd really like to see the entire long-winded #ifdefed
list of cache modes in <asm/pgtable-bits.h> to be removed but I guess
that's left for a future patch.

  Ralf

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2014-08-27 11:16 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-18  9:51 [PATCH 0/4] Add pgprot_writecombine function for MIPS Markos Chandras
2014-07-18  9:51 ` Markos Chandras
2014-07-18  9:51 ` [PATCH 1/4] MIPS: pgtable-bits: Move the CCA bits out of the core's ifdef blocks Markos Chandras
2014-07-18  9:51   ` Markos Chandras
2014-07-18  9:51 ` [PATCH 2/4] MIPS: pgtable-bits: Define the CCA bit for WC writes on Ingenic cores Markos Chandras
2014-07-18  9:51   ` Markos Chandras
2014-07-18  9:51 ` [PATCH 3/4] MIPS: cpu-probe: Set the write-combine CCA value on per core basis Markos Chandras
2014-07-18  9:51   ` Markos Chandras
2014-08-04 22:54   ` Florian Fainelli
2014-08-12  7:23     ` Markos Chandras
2014-08-12  7:23       ` Markos Chandras
2014-08-12 18:02       ` Florian Fainelli
2014-07-18  9:51 ` [PATCH 4/4] MIPS: pgtable.h: Implement the pgprot_writecombine function for MIPS Markos Chandras
2014-07-18  9:51   ` Markos Chandras
2014-08-27 11:16 ` [PATCH 0/4] Add " Ralf Baechle

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.