linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] powerpc: Enable CPU feature sections for inline asm
  2009-04-24  6:24 [PATCH 0/2] powerpc: tlbie implementation PowerPC 2.06 Michael Neuling
  2009-04-24  6:24 ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
@ 2009-04-24  6:24 ` Michael Neuling
  1 sibling, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-24  6:24 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

powerpc: Enable CPU feature sections for inline asm

This adds the ability to do CPU feature sections for inline asm.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/feature-fixups.h |   25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/feature-fixups.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
@@ -8,8 +8,6 @@
  * 2 of the License, or (at your option) any later version.
  */
 
-#ifdef __ASSEMBLY__
-
 /*
  * Feature section common macros
  *
@@ -23,10 +21,12 @@
 /* 64 bits kernel, 32 bits code (ie. vdso32) */
 #define FTR_ENTRY_LONG		.llong
 #define FTR_ENTRY_OFFSET	.long 0xffffffff; .long
+#elif defined(CONFIG_PPC64)
+#define FTR_ENTRY_LONG		.llong
+#define FTR_ENTRY_OFFSET	.llong
 #else
-/* 64 bit kernel 64 bit code, or 32 bit kernel 32 bit code */
-#define FTR_ENTRY_LONG		PPC_LONG
-#define FTR_ENTRY_OFFSET	PPC_LONG
+#define FTR_ENTRY_LONG		.long
+#define FTR_ENTRY_OFFSET	.long
 #endif
 
 #define START_FTR_SECTION(label)	label##1:
@@ -141,6 +141,21 @@ label##5:					       	\
 #define ALT_FW_FTR_SECTION_END_IFCLR(msk)	\
 	ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
 
+#ifndef __ASSEMBLY__
+
+#define ASM_FTR_IF_X(string, estring, msk, val)			\
+	stringify_in_c(BEGIN_FTR_SECTION)			\
+	string "; "						\
+	stringify_in_c(FTR_SECTION_ELSE)			\
+	estring "; "						\
+	stringify_in_c(ALT_FTR_SECTION_END((msk), (val)))
+
+#define ASM_FTR_IFSET(string, estring, msk)			\
+	ASM_FTR_IF_X(string, estring, (msk), (msk))
+
+#define ASM_FTR_IFCLR(string, estring, msk)			\
+	ASM_FTR_IF_X(string, estring, (msk), 0)
+
 #endif /* __ASSEMBLY__ */
 
 /* LWSYNC feature sections */

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

* [PATCH 0/2] powerpc: tlbie implementation PowerPC 2.06
@ 2009-04-24  6:24 Michael Neuling
  2009-04-24  6:24 ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
  2009-04-24  6:24 ` [PATCH 1/2] powerpc: Enable CPU feature sections for inline asm Michael Neuling
  0 siblings, 2 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-24  6:24 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

These patches implement the new PowerPC 2.06 tlbie mnemonics

Signed-off-by: Michael Neuling <mikey@neuling.org>
--- 
It's friday afternoon & I'm drinking beer, so odds are that these
patches are complete crap.

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

* [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-24  6:24 [PATCH 0/2] powerpc: tlbie implementation PowerPC 2.06 Michael Neuling
@ 2009-04-24  6:24 ` Michael Neuling
  2009-04-27  1:20   ` Benjamin Herrenschmidt
                     ` (2 more replies)
  2009-04-24  6:24 ` [PATCH 1/2] powerpc: Enable CPU feature sections for inline asm Michael Neuling
  1 sibling, 3 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-24  6:24 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

This adds the PowerPC 2.06 tlbie mnemonics and keeps backwards
compatibilty for CPUs before 2.06.

Only useful for bare metal systems.  

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---
As they say, better out than in....
---

 arch/powerpc/include/asm/cputable.h |    3 ++-
 arch/powerpc/mm/hash_native_64.c    |   13 +++++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/cputable.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/cputable.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/cputable.h
@@ -195,6 +195,7 @@ extern const char *powerpc_base_platform
 #define CPU_FTR_SAO			LONG_ASM_CONST(0x0020000000000000)
 #define CPU_FTR_CP_USE_DCBTZ		LONG_ASM_CONST(0x0040000000000000)
 #define CPU_FTR_UNALIGNED_LD_STD	LONG_ASM_CONST(0x0080000000000000)
+#define CPU_FTR_TLBIE_206		LONG_ASM_CONST(0x0100000000000000)
 
 #ifndef __ASSEMBLY__
 
@@ -409,7 +410,7 @@ extern const char *powerpc_base_platform
 	    CPU_FTR_MMCRA | CPU_FTR_SMT | \
 	    CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \
 	    CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \
-	    CPU_FTR_DSCR | CPU_FTR_SAO)
+	    CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_TLBIE_206)
 #define CPU_FTRS_CELL	(CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
 	    CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
 	    CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \
Index: linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/mm/hash_native_64.c
+++ linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
@@ -38,6 +38,9 @@
 
 static DEFINE_SPINLOCK(native_tlbie_lock);
 
+#define TLBIE(lp,a) \
+	stringify_in_c(.long 0x7c000264 | ((a) << 11) | ((lp) << 21))
+
 static inline void __tlbie(unsigned long va, int psize, int ssize)
 {
 	unsigned int penc;
@@ -49,14 +52,19 @@ static inline void __tlbie(unsigned long
 	case MMU_PAGE_4K:
 		va &= ~0xffful;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,0" : : "r" (va) : "memory");
+ 		asm volatile(ASM_FTR_IFCLR("tlbie %0,0", TLBIE(%1,%0), %2)
+			     : : "r" (va), "r"(0), "i" (CPU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	default:
 		penc = mmu_psize_defs[psize].penc;
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,1" : : "r" (va) : "memory");
+		va |= 1; /* L */
+ 		asm volatile(ASM_FTR_IFCLR("tlbie %0,1", TLBIE(%1,%0), %2)
+			     : : "r" (va), "r"(0), "i" (CPU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	}
 }
@@ -80,6 +88,7 @@ static inline void __tlbiel(unsigned lon
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
+		va |= 1; /* L */
 		asm volatile(".long 0x7c000224 | (%0 << 11) | (1 << 21)"
 			     : : "r"(va) : "memory");
 		break;

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

* Re: [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-24  6:24 ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
@ 2009-04-27  1:20   ` Benjamin Herrenschmidt
  2009-04-27 19:30   ` Kumar Gala
  2009-04-27 19:31   ` Kumar Gala
  2 siblings, 0 replies; 36+ messages in thread
From: Benjamin Herrenschmidt @ 2009-04-27  1:20 UTC (permalink / raw)
  To: Michael Neuling; +Cc: linuxppc-dev, Paul Mackerras, Milton Miller

On Fri, 2009-04-24 at 16:24 +1000, Michael Neuling wrote:
> From: Milton Miller <miltonm@bga.com>
> 
> This adds the PowerPC 2.06 tlbie mnemonics and keeps backwards
> compatibilty for CPUs before 2.06.
> 
> Only useful for bare metal systems.  

I'd rather stick that in mmu features rather than cpu features to
save space in the later...

Cheers,
Ben.

> Signed-off-by: Milton Miller <miltonm@bga.com>
> Signed-off-by: Michael Neuling <mikey@neuling.org>
> ---
> As they say, better out than in....
> ---
> 
>  arch/powerpc/include/asm/cputable.h |    3 ++-
>  arch/powerpc/mm/hash_native_64.c    |   13 +++++++++++--
>  2 files changed, 13 insertions(+), 3 deletions(-)
> 
> Index: linux-2.6-ozlabs/arch/powerpc/include/asm/cputable.h
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/cputable.h
> +++ linux-2.6-ozlabs/arch/powerpc/include/asm/cputable.h
> @@ -195,6 +195,7 @@ extern const char *powerpc_base_platform
>  #define CPU_FTR_SAO			LONG_ASM_CONST(0x0020000000000000)
>  #define CPU_FTR_CP_USE_DCBTZ		LONG_ASM_CONST(0x0040000000000000)
>  #define CPU_FTR_UNALIGNED_LD_STD	LONG_ASM_CONST(0x0080000000000000)
> +#define CPU_FTR_TLBIE_206		LONG_ASM_CONST(0x0100000000000000)
>  
>  #ifndef __ASSEMBLY__
>  
> @@ -409,7 +410,7 @@ extern const char *powerpc_base_platform
>  	    CPU_FTR_MMCRA | CPU_FTR_SMT | \
>  	    CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \
>  	    CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \
> -	    CPU_FTR_DSCR | CPU_FTR_SAO)
> +	    CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_TLBIE_206)
>  #define CPU_FTRS_CELL	(CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
>  	    CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
>  	    CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \
> Index: linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/mm/hash_native_64.c
> +++ linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
> @@ -38,6 +38,9 @@
>  
>  static DEFINE_SPINLOCK(native_tlbie_lock);
>  
> +#define TLBIE(lp,a) \
> +	stringify_in_c(.long 0x7c000264 | ((a) << 11) | ((lp) << 21))
> +
>  static inline void __tlbie(unsigned long va, int psize, int ssize)
>  {
>  	unsigned int penc;
> @@ -49,14 +52,19 @@ static inline void __tlbie(unsigned long
>  	case MMU_PAGE_4K:
>  		va &= ~0xffful;
>  		va |= ssize << 8;
> -		asm volatile("tlbie %0,0" : : "r" (va) : "memory");
> + 		asm volatile(ASM_FTR_IFCLR("tlbie %0,0", TLBIE(%1,%0), %2)
> +			     : : "r" (va), "r"(0), "i" (CPU_FTR_TLBIE_206)
> +			     : "memory");
>  		break;
>  	default:
>  		penc = mmu_psize_defs[psize].penc;
>  		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
>  		va |= penc << 12;
>  		va |= ssize << 8;
> -		asm volatile("tlbie %0,1" : : "r" (va) : "memory");
> +		va |= 1; /* L */
> + 		asm volatile(ASM_FTR_IFCLR("tlbie %0,1", TLBIE(%1,%0), %2)
> +			     : : "r" (va), "r"(0), "i" (CPU_FTR_TLBIE_206)
> +			     : "memory");
>  		break;
>  	}
>  }
> @@ -80,6 +88,7 @@ static inline void __tlbiel(unsigned lon
>  		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
>  		va |= penc << 12;
>  		va |= ssize << 8;
> +		va |= 1; /* L */
>  		asm volatile(".long 0x7c000224 | (%0 << 11) | (1 << 21)"
>  			     : : "r"(va) : "memory");
>  		break;

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

* Re: [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-24  6:24 ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
  2009-04-27  1:20   ` Benjamin Herrenschmidt
@ 2009-04-27 19:30   ` Kumar Gala
  2009-04-27 19:31   ` Kumar Gala
  2 siblings, 0 replies; 36+ messages in thread
From: Kumar Gala @ 2009-04-27 19:30 UTC (permalink / raw)
  To: Michael Neuling; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev


On Apr 24, 2009, at 1:24 AM, Michael Neuling wrote:

> Index: linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/mm/hash_native_64.c
> +++ linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
> @@ -38,6 +38,9 @@
>
> static DEFINE_SPINLOCK(native_tlbie_lock);
>
> +#define TLBIE(lp,a) \
> +	stringify_in_c(.long 0x7c000264 | ((a) << 11) | ((lp) << 21))
> +

Put this ppc-opcode.h now that we have it.

- k

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

* Re: [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-24  6:24 ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
  2009-04-27  1:20   ` Benjamin Herrenschmidt
  2009-04-27 19:30   ` Kumar Gala
@ 2009-04-27 19:31   ` Kumar Gala
  2009-04-27 19:46     ` Kumar Gala
  2 siblings, 1 reply; 36+ messages in thread
From: Kumar Gala @ 2009-04-27 19:31 UTC (permalink / raw)
  To: Michael Neuling; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev


On Apr 24, 2009, at 1:24 AM, Michael Neuling wrote:

> Index: linux-2.6-ozlabs/arch/powerpc/include/asm/cputable.h
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/cputable.h
> +++ linux-2.6-ozlabs/arch/powerpc/include/asm/cputable.h
> @@ -195,6 +195,7 @@ extern const char *powerpc_base_platform
> #define CPU_FTR_SAO			LONG_ASM_CONST(0x0020000000000000)
> #define CPU_FTR_CP_USE_DCBTZ		LONG_ASM_CONST(0x0040000000000000)
> #define CPU_FTR_UNALIGNED_LD_STD	LONG_ASM_CONST(0x0080000000000000)
> +#define CPU_FTR_TLBIE_206		LONG_ASM_CONST(0x0100000000000000)
>
> #ifndef __ASSEMBLY__
>
> @@ -409,7 +410,7 @@ extern const char *powerpc_base_platform
> 	    CPU_FTR_MMCRA | CPU_FTR_SMT | \
> 	    CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \
> 	    CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \
> -	    CPU_FTR_DSCR | CPU_FTR_SAO)
> +	    CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_TLBIE_206)
> #define CPU_FTRS_CELL	(CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
> 	    CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
> 	    CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \

I think our preference is to use MMU features for such things now  
instead of burning a cpu feature for it.

- k

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

* Re: [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-27 19:31   ` Kumar Gala
@ 2009-04-27 19:46     ` Kumar Gala
  2009-04-28  5:03       ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  0 siblings, 1 reply; 36+ messages in thread
From: Kumar Gala @ 2009-04-27 19:46 UTC (permalink / raw)
  To: Kumar Gala; +Cc: linuxppc-dev, Michael Neuling, Paul Mackerras, Milton Miller


On Apr 27, 2009, at 2:31 PM, Kumar Gala wrote:

>
> On Apr 24, 2009, at 1:24 AM, Michael Neuling wrote:
>
>> Index: linux-2.6-ozlabs/arch/powerpc/include/asm/cputable.h
>> ===================================================================
>> --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/cputable.h
>> +++ linux-2.6-ozlabs/arch/powerpc/include/asm/cputable.h
>> @@ -195,6 +195,7 @@ extern const char *powerpc_base_platform
>> #define CPU_FTR_SAO			LONG_ASM_CONST(0x0020000000000000)
>> #define CPU_FTR_CP_USE_DCBTZ		LONG_ASM_CONST(0x0040000000000000)
>> #define CPU_FTR_UNALIGNED_LD_STD	LONG_ASM_CONST(0x0080000000000000)
>> +#define CPU_FTR_TLBIE_206		LONG_ASM_CONST(0x0100000000000000)
>>
>> #ifndef __ASSEMBLY__
>>
>> @@ -409,7 +410,7 @@ extern const char *powerpc_base_platform
>> 	    CPU_FTR_MMCRA | CPU_FTR_SMT | \
>> 	    CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \
>> 	    CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \
>> -	    CPU_FTR_DSCR | CPU_FTR_SAO)
>> +	    CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_TLBIE_206)
>> #define CPU_FTRS_CELL	(CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
>> 	    CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
>> 	    CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \
>
> I think our preference is to use MMU features for such things now  
> instead of burning a cpu feature for it.

I see Ben has already made this comment.. so I just second his notion.

- k

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

* [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06
  2009-04-27 19:46     ` Kumar Gala
@ 2009-04-28  5:03       ` Michael Neuling
  2009-04-28  5:03         ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
  2009-04-28  5:03         ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
  0 siblings, 2 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-28  5:03 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

These patches implement the PowerPC ISA 2.06 tlbie mnemonics

Signed-off-by: Michael Neuling <mikey@neuling.org>
--- 
This version attempts to address issues raised by Kumar and Benh.
- Moves from CPU_FTR to MMU_FTR
- Moves #define of tlbie to ppc-opcode.h

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

* [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm
  2009-04-28  5:03       ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
@ 2009-04-28  5:03         ` Michael Neuling
  2009-04-28  5:03         ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
  1 sibling, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-28  5:03 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

powerpc: Enable MMU feature sections for inline asm

This adds the ability to do MMU feature sections for inline asm.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/feature-fixups.h |   25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/feature-fixups.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
@@ -8,8 +8,6 @@
  * 2 of the License, or (at your option) any later version.
  */
 
-#ifdef __ASSEMBLY__
-
 /*
  * Feature section common macros
  *
@@ -23,10 +21,12 @@
 /* 64 bits kernel, 32 bits code (ie. vdso32) */
 #define FTR_ENTRY_LONG		.llong
 #define FTR_ENTRY_OFFSET	.long 0xffffffff; .long
+#elif defined(CONFIG_PPC64)
+#define FTR_ENTRY_LONG		.llong
+#define FTR_ENTRY_OFFSET	.llong
 #else
-/* 64 bit kernel 64 bit code, or 32 bit kernel 32 bit code */
-#define FTR_ENTRY_LONG		PPC_LONG
-#define FTR_ENTRY_OFFSET	PPC_LONG
+#define FTR_ENTRY_LONG		.long
+#define FTR_ENTRY_OFFSET	.long
 #endif
 
 #define START_FTR_SECTION(label)	label##1:
@@ -141,6 +141,21 @@ label##5:					       	\
 #define ALT_FW_FTR_SECTION_END_IFCLR(msk)	\
 	ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
 
+#ifndef __ASSEMBLY__
+
+#define ASM_MMU_FTR_IF_X(string, estring, msk, val)		\
+	stringify_in_c(BEGIN_MMU_FTR_SECTION)			\
+	string "; "						\
+	stringify_in_c(MMU_FTR_SECTION_ELSE)			\
+	estring "; "						\
+	stringify_in_c(ALT_MMU_FTR_SECTION_END((msk), (val)))
+
+#define ASM_MMU_FTR_IFSET(string, estring, msk)			\
+	ASM_MMU_FTR_IF_X(string, estring, (msk), (msk))
+
+#define ASM_MMU_FTR_IFCLR(string, estring, msk)			\
+	ASM_MMU_FTR_IF_X(string, estring, (msk), 0)
+
 #endif /* __ASSEMBLY__ */
 
 /* LWSYNC feature sections */

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

* [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-28  5:03       ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  2009-04-28  5:03         ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
@ 2009-04-28  5:03         ` Michael Neuling
  2009-04-28 12:05           ` Kumar Gala
  1 sibling, 1 reply; 36+ messages in thread
From: Michael Neuling @ 2009-04-28  5:03 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

This adds the PowerPC 2.06 tlbie mnemonics and keeps backwards
compatibilty for CPUs before 2.06.

Only useful for bare metal systems.  

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/ppc-opcode.h |    3 +++
 arch/powerpc/kernel/cputable.c        |    6 ++++--
 arch/powerpc/mm/hash_native_64.c      |   11 +++++++++--
 3 files changed, 16 insertions(+), 4 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
@@ -79,4 +79,7 @@
 #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
 					__PPC_WC(w))
 
+#define TLBIE(lp,a) \
+	stringify_in_c(.long 0x7c000264 | ((a) << 11) | ((lp) << 21))
+
 #endif /* _ASM_POWERPC_PPC_OPCODE_H */
Index: linux-2.6-ozlabs/arch/powerpc/kernel/cputable.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/kernel/cputable.c
+++ linux-2.6-ozlabs/arch/powerpc/kernel/cputable.c
@@ -425,7 +425,8 @@ static struct cpu_spec __initdata cpu_sp
 		.cpu_name		= "POWER7 (architected)",
 		.cpu_features		= CPU_FTRS_POWER7,
 		.cpu_user_features	= COMMON_USER_POWER7,
-		.mmu_features		= MMU_FTR_HPTE_TABLE,
+		.mmu_features		= MMU_FTR_HPTE_TABLE |
+			MMU_FTR_TLBIE_206,
 		.icache_bsize		= 128,
 		.dcache_bsize		= 128,
 		.machine_check		= machine_check_generic,
@@ -438,7 +439,8 @@ static struct cpu_spec __initdata cpu_sp
 		.cpu_name		= "POWER7 (raw)",
 		.cpu_features		= CPU_FTRS_POWER7,
 		.cpu_user_features	= COMMON_USER_POWER7,
-		.mmu_features		= MMU_FTR_HPTE_TABLE,
+		.mmu_features		= MMU_FTR_HPTE_TABLE |
+			MMU_FTR_TLBIE_206,
 		.icache_bsize		= 128,
 		.dcache_bsize		= 128,
 		.num_pmcs		= 6,
Index: linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/mm/hash_native_64.c
+++ linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
@@ -27,6 +27,7 @@
 #include <asm/cputable.h>
 #include <asm/udbg.h>
 #include <asm/kexec.h>
+#include <asm/ppc-opcode.h>
 
 #ifdef DEBUG_LOW
 #define DBG_LOW(fmt...) udbg_printf(fmt)
@@ -49,14 +50,19 @@ static inline void __tlbie(unsigned long
 	case MMU_PAGE_4K:
 		va &= ~0xffful;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,0" : : "r" (va) : "memory");
+ 		asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,0", TLBIE(%1,%0), %2)
+			     : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	default:
 		penc = mmu_psize_defs[psize].penc;
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,1" : : "r" (va) : "memory");
+		va |= 1; /* L */
+ 		asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,1", TLBIE(%1,%0), %2)
+			     : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	}
 }
@@ -80,6 +86,7 @@ static inline void __tlbiel(unsigned lon
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
+		va |= 1; /* L */
 		asm volatile(".long 0x7c000224 | (%0 << 11) | (1 << 21)"
 			     : : "r"(va) : "memory");
 		break;

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

* Re: [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-28  5:03         ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
@ 2009-04-28 12:05           ` Kumar Gala
  2009-04-28 12:40             ` Michael Neuling
  2009-04-28 12:45             ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  0 siblings, 2 replies; 36+ messages in thread
From: Kumar Gala @ 2009-04-28 12:05 UTC (permalink / raw)
  To: Michael Neuling; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev


On Apr 28, 2009, at 12:03 AM, Michael Neuling wrote:

> From: Milton Miller <miltonm@bga.com>
>
> This adds the PowerPC 2.06 tlbie mnemonics and keeps backwards
> compatibilty for CPUs before 2.06.
>
> Only useful for bare metal systems.
>
> Signed-off-by: Milton Miller <miltonm@bga.com>
> Signed-off-by: Michael Neuling <mikey@neuling.org>
> ---
>
> arch/powerpc/include/asm/ppc-opcode.h |    3 +++
> arch/powerpc/kernel/cputable.c        |    6 ++++--
> arch/powerpc/mm/hash_native_64.c      |   11 +++++++++--

did you miss the update to mmu.h to add MMU_FTR_TLBIE_206?

> 3 files changed, 16 insertions(+), 4 deletions(-)
>
> Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
> +++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> @@ -79,4 +79,7 @@
> #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
> 					__PPC_WC(w))
>
> +#define TLBIE(lp,a) \
> +	stringify_in_c(.long 0x7c000264 | ((a) << 11) | ((lp) << 21))
> +

Can you match the format of the file and define a PPC_INST_TLBIE

- k

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

* Re: [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-28 12:05           ` Kumar Gala
@ 2009-04-28 12:40             ` Michael Neuling
  2009-04-28 12:45             ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  1 sibling, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-28 12:40 UTC (permalink / raw)
  To: Kumar Gala; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev

Kumar,

> > From: Milton Miller <miltonm@bga.com>
> >
> > This adds the PowerPC 2.06 tlbie mnemonics and keeps backwards
> > compatibilty for CPUs before 2.06.
> >
> > Only useful for bare metal systems.
> >
> > Signed-off-by: Milton Miller <miltonm@bga.com>
> > Signed-off-by: Michael Neuling <mikey@neuling.org>
> > ---
> >
> > arch/powerpc/include/asm/ppc-opcode.h |    3 +++
> > arch/powerpc/kernel/cputable.c        |    6 ++++--
> > arch/powerpc/mm/hash_native_64.c      |   11 +++++++++--
> 
> did you miss the update to mmu.h to add MMU_FTR_TLBIE_206?

Yep a missing quilt add.  Thanks

> 
> > 3 files changed, 16 insertions(+), 4 deletions(-)
> >
> > Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> > ===================================================================
> > --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
> > +++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> > @@ -79,4 +79,7 @@
> > #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
> > 					__PPC_WC(w))
> >
> > +#define TLBIE(lp,a) \
> > +	stringify_in_c(.long 0x7c000264 | ((a) << 11) | ((lp) << 21))
> > +
> 
> Can you match the format of the file and define a PPC_INST_TLBIE

Sorry, I obviously just stuck my crap in there without looking at the
nice macros I could use.

Repost coming.

Mikey

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

* [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06
  2009-04-28 12:05           ` Kumar Gala
  2009-04-28 12:40             ` Michael Neuling
@ 2009-04-28 12:45             ` Michael Neuling
  2009-04-28 12:45               ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
  2009-04-28 12:45               ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
  1 sibling, 2 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-28 12:45 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

These patches implement the PowerPC ISA 2.06 tlbie mnemonics

Signed-off-by: Michael Neuling <mikey@neuling.org>
--- 
This version attempts to address issues raised by Kumar.
- Add missing mmu.h
- Follow the bouncing ball in ppc-opcode.h for #define PPC_TLBIE 

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

* [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm
  2009-04-28 12:45             ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
@ 2009-04-28 12:45               ` Michael Neuling
  2009-04-28 12:45               ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
  1 sibling, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-28 12:45 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

powerpc: Enable MMU feature sections for inline asm

This adds the ability to do MMU feature sections for inline asm.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/feature-fixups.h |   25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/feature-fixups.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
@@ -8,8 +8,6 @@
  * 2 of the License, or (at your option) any later version.
  */
 
-#ifdef __ASSEMBLY__
-
 /*
  * Feature section common macros
  *
@@ -23,10 +21,12 @@
 /* 64 bits kernel, 32 bits code (ie. vdso32) */
 #define FTR_ENTRY_LONG		.llong
 #define FTR_ENTRY_OFFSET	.long 0xffffffff; .long
+#elif defined(CONFIG_PPC64)
+#define FTR_ENTRY_LONG		.llong
+#define FTR_ENTRY_OFFSET	.llong
 #else
-/* 64 bit kernel 64 bit code, or 32 bit kernel 32 bit code */
-#define FTR_ENTRY_LONG		PPC_LONG
-#define FTR_ENTRY_OFFSET	PPC_LONG
+#define FTR_ENTRY_LONG		.long
+#define FTR_ENTRY_OFFSET	.long
 #endif
 
 #define START_FTR_SECTION(label)	label##1:
@@ -141,6 +141,21 @@ label##5:					       	\
 #define ALT_FW_FTR_SECTION_END_IFCLR(msk)	\
 	ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
 
+#ifndef __ASSEMBLY__
+
+#define ASM_MMU_FTR_IF_X(string, estring, msk, val)		\
+	stringify_in_c(BEGIN_MMU_FTR_SECTION)			\
+	string "; "						\
+	stringify_in_c(MMU_FTR_SECTION_ELSE)			\
+	estring "; "						\
+	stringify_in_c(ALT_MMU_FTR_SECTION_END((msk), (val)))
+
+#define ASM_MMU_FTR_IFSET(string, estring, msk)			\
+	ASM_MMU_FTR_IF_X(string, estring, (msk), (msk))
+
+#define ASM_MMU_FTR_IFCLR(string, estring, msk)			\
+	ASM_MMU_FTR_IF_X(string, estring, (msk), 0)
+
 #endif /* __ASSEMBLY__ */
 
 /* LWSYNC feature sections */

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

* [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-28 12:45             ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  2009-04-28 12:45               ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
@ 2009-04-28 12:45               ` Michael Neuling
  2009-04-28 13:21                 ` Kumar Gala
  1 sibling, 1 reply; 36+ messages in thread
From: Michael Neuling @ 2009-04-28 12:45 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

This adds the PowerPC 2.06 tlbie mnemonics and keeps backwards
compatibilty for CPUs before 2.06.

Only useful for bare metal systems.  

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/mmu.h        |    5 +++++
 arch/powerpc/include/asm/ppc-opcode.h |    4 ++++
 arch/powerpc/kernel/cputable.c        |    6 ++++--
 arch/powerpc/mm/hash_native_64.c      |   13 +++++++++++--
 4 files changed, 24 insertions(+), 4 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/mmu.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
@@ -58,6 +58,11 @@
  */
 #define MMU_FTR_TLBILX_EARLY_OPCODE	ASM_CONST(0x00400000)
 
+/* This indicates that the processor uses the ISA 2.06 server tlbie
+ * mnemonics
+ */
+#define MMU_FTR_TLBIE_206		ASM_CONST(0x00800000)
+
 #ifndef __ASSEMBLY__
 #include <asm/cputable.h>
 
Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
@@ -46,10 +46,12 @@
 #define PPC_INST_TLBILX			0x7c000024
 #define PPC_INST_TLBILX_EARLY		0x7c000626
 #define PPC_INST_WAIT			0x7c00007c
+#define PPC_INST_TLBIE			0x7c000264
 
 /* macros to insert fields into opcodes */
 #define __PPC_RA(a)	((a & 0x1f) << 16)
 #define __PPC_RB(b)	((b & 0x1f) << 11)
+#define __PPC_RS(s)	((s & 0x1f) << 21)
 #define __PPC_T_TLB(t)	((t & 0x3) << 21)
 #define __PPC_WC(w)	((w & 0x3) << 21)
 
@@ -78,5 +80,7 @@
 #define PPC_TLBILX_VA_EARLY(a, b)	PPC_TLBILX_EARLY(3, a, b)
 #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
 					__PPC_WC(w))
+#define PPC_TLBIE(lp,a) 	stringify_in_c(.long PPC_INST_TLBIE | \
+					       __PPC_RB(a) | __PPC_RS(lp))
 
 #endif /* _ASM_POWERPC_PPC_OPCODE_H */
Index: linux-2.6-ozlabs/arch/powerpc/kernel/cputable.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/kernel/cputable.c
+++ linux-2.6-ozlabs/arch/powerpc/kernel/cputable.c
@@ -425,7 +425,8 @@ static struct cpu_spec __initdata cpu_sp
 		.cpu_name		= "POWER7 (architected)",
 		.cpu_features		= CPU_FTRS_POWER7,
 		.cpu_user_features	= COMMON_USER_POWER7,
-		.mmu_features		= MMU_FTR_HPTE_TABLE,
+		.mmu_features		= MMU_FTR_HPTE_TABLE |
+			MMU_FTR_TLBIE_206,
 		.icache_bsize		= 128,
 		.dcache_bsize		= 128,
 		.machine_check		= machine_check_generic,
@@ -438,7 +439,8 @@ static struct cpu_spec __initdata cpu_sp
 		.cpu_name		= "POWER7 (raw)",
 		.cpu_features		= CPU_FTRS_POWER7,
 		.cpu_user_features	= COMMON_USER_POWER7,
-		.mmu_features		= MMU_FTR_HPTE_TABLE,
+		.mmu_features		= MMU_FTR_HPTE_TABLE |
+			MMU_FTR_TLBIE_206,
 		.icache_bsize		= 128,
 		.dcache_bsize		= 128,
 		.num_pmcs		= 6,
Index: linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/mm/hash_native_64.c
+++ linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
@@ -27,6 +27,7 @@
 #include <asm/cputable.h>
 #include <asm/udbg.h>
 #include <asm/kexec.h>
+#include <asm/ppc-opcode.h>
 
 #ifdef DEBUG_LOW
 #define DBG_LOW(fmt...) udbg_printf(fmt)
@@ -49,14 +50,21 @@ static inline void __tlbie(unsigned long
 	case MMU_PAGE_4K:
 		va &= ~0xffful;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,0" : : "r" (va) : "memory");
+ 		asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,0", PPC_TLBIE(%1,%0),
+					       %2)
+			     : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	default:
 		penc = mmu_psize_defs[psize].penc;
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,1" : : "r" (va) : "memory");
+		va |= 1; /* L */
+ 		asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,1", PPC_TLBIE(%1,%0),
+					       %2)
+			     : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	}
 }
@@ -80,6 +88,7 @@ static inline void __tlbiel(unsigned lon
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
+		va |= 1; /* L */
 		asm volatile(".long 0x7c000224 | (%0 << 11) | (1 << 21)"
 			     : : "r"(va) : "memory");
 		break;

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

* Re: [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-28 12:45               ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
@ 2009-04-28 13:21                 ` Kumar Gala
  2009-04-29  0:16                   ` Michael Neuling
  2009-04-29  0:26                   ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  0 siblings, 2 replies; 36+ messages in thread
From: Kumar Gala @ 2009-04-28 13:21 UTC (permalink / raw)
  To: Michael Neuling; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev


On Apr 28, 2009, at 7:45 AM, Michael Neuling wrote:

> Index: linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/mmu.h
> +++ linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
> @@ -58,6 +58,11 @@
>  */
> #define MMU_FTR_TLBILX_EARLY_OPCODE	ASM_CONST(0x00400000)
>
> +/* This indicates that the processor uses the ISA 2.06 server tlbie
> + * mnemonics
> + */
> +#define MMU_FTR_TLBIE_206		ASM_CONST(0x00800000)
> +
> #ifndef __ASSEMBLY__
> #include <asm/cputable.h>

You aren't going to like me, but I just got rid of  
MMU_FTR_TLBILX_EARLY_OPCODE and thus freed up 0x00400000.  So a) patch  
will probably bitch when being applied by Ben b) we should use  
0x00400000.

(suggest pulling in paulus/merge as that has the "revert" patch that  
removes MMU_FTR_TLBILX_EARLY_OPCODE - and paul's sent a pull request  
to linus for it.)

- k

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

* Re: [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-28 13:21                 ` Kumar Gala
@ 2009-04-29  0:16                   ` Michael Neuling
  2009-04-29  0:26                   ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  1 sibling, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-29  0:16 UTC (permalink / raw)
  To: Kumar Gala; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev

> > Index: linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
> > ===================================================================
> > --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/mmu.h
> > +++ linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
> > @@ -58,6 +58,11 @@
> >  */
> > #define MMU_FTR_TLBILX_EARLY_OPCODE	ASM_CONST(0x00400000)
> >
> > +/* This indicates that the processor uses the ISA 2.06 server tlbie
> > + * mnemonics
> > + */
> > +#define MMU_FTR_TLBIE_206		ASM_CONST(0x00800000)
> > +
> > #ifndef __ASSEMBLY__
> > #include <asm/cputable.h>
> 
> You aren't going to like me, but I just got rid of  
> MMU_FTR_TLBILX_EARLY_OPCODE and thus freed up 0x00400000.  So a) patch  
> will probably bitch when being applied by Ben b) we should use  
> 0x00400000.

Kuuuuumaaaaar!!!! :-)

> (suggest pulling in paulus/merge as that has the "revert" patch that  
> removes MMU_FTR_TLBILX_EARLY_OPCODE - and paul's sent a pull request  
> to linus for it.)

OK, new patches coming.

Mikey

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

* [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06
  2009-04-28 13:21                 ` Kumar Gala
  2009-04-29  0:16                   ` Michael Neuling
@ 2009-04-29  0:26                   ` Michael Neuling
  2009-04-29  0:26                     ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
  2009-04-29  0:26                     ` Michael Neuling
  1 sibling, 2 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-29  0:26 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

These patches implement the PowerPC ISA 2.06 tlbie mnemonics

Signed-off-by: Michael Neuling <mikey@neuling.org>
--- 
Moves MMU_FTR_TLBIE_206 down one bit as the item before has now been
removed.  Thanks to Kumar for noticing. 

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

* [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm
  2009-04-29  0:26                   ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
@ 2009-04-29  0:26                     ` Michael Neuling
  2009-04-29  0:52                       ` Michael Ellerman
  2009-04-29  0:26                     ` Michael Neuling
  1 sibling, 1 reply; 36+ messages in thread
From: Michael Neuling @ 2009-04-29  0:26 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

powerpc: Enable MMU feature sections for inline asm

This adds the ability to do MMU feature sections for inline asm.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/feature-fixups.h |   25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/feature-fixups.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
@@ -8,8 +8,6 @@
  * 2 of the License, or (at your option) any later version.
  */
 
-#ifdef __ASSEMBLY__
-
 /*
  * Feature section common macros
  *
@@ -23,10 +21,12 @@
 /* 64 bits kernel, 32 bits code (ie. vdso32) */
 #define FTR_ENTRY_LONG		.llong
 #define FTR_ENTRY_OFFSET	.long 0xffffffff; .long
+#elif defined(CONFIG_PPC64)
+#define FTR_ENTRY_LONG		.llong
+#define FTR_ENTRY_OFFSET	.llong
 #else
-/* 64 bit kernel 64 bit code, or 32 bit kernel 32 bit code */
-#define FTR_ENTRY_LONG		PPC_LONG
-#define FTR_ENTRY_OFFSET	PPC_LONG
+#define FTR_ENTRY_LONG		.long
+#define FTR_ENTRY_OFFSET	.long
 #endif
 
 #define START_FTR_SECTION(label)	label##1:
@@ -141,6 +141,21 @@ label##5:					       	\
 #define ALT_FW_FTR_SECTION_END_IFCLR(msk)	\
 	ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
 
+#ifndef __ASSEMBLY__
+
+#define ASM_MMU_FTR_IF_X(string, estring, msk, val)		\
+	stringify_in_c(BEGIN_MMU_FTR_SECTION)			\
+	string "; "						\
+	stringify_in_c(MMU_FTR_SECTION_ELSE)			\
+	estring "; "						\
+	stringify_in_c(ALT_MMU_FTR_SECTION_END((msk), (val)))
+
+#define ASM_MMU_FTR_IFSET(string, estring, msk)			\
+	ASM_MMU_FTR_IF_X(string, estring, (msk), (msk))
+
+#define ASM_MMU_FTR_IFCLR(string, estring, msk)			\
+	ASM_MMU_FTR_IF_X(string, estring, (msk), 0)
+
 #endif /* __ASSEMBLY__ */
 
 /* LWSYNC feature sections */

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

* [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-29  0:26                   ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  2009-04-29  0:26                     ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
@ 2009-04-29  0:26                     ` Michael Neuling
  1 sibling, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-29  0:26 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

This adds the PowerPC 2.06 tlbie mnemonics and keeps backwards
compatibilty for CPUs before 2.06.

Only useful for bare metal systems.  

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/mmu.h        |    5 +++++
 arch/powerpc/include/asm/ppc-opcode.h |    4 ++++
 arch/powerpc/kernel/cputable.c        |    6 ++++--
 arch/powerpc/mm/hash_native_64.c      |   13 +++++++++++--
 4 files changed, 24 insertions(+), 4 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/mmu.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
@@ -52,6 +52,11 @@
  */
 #define MMU_FTR_NEED_DTLB_SW_LRU	ASM_CONST(0x00200000)
 
+/* This indicates that the processor uses the ISA 2.06 server tlbie
+ * mnemonics
+ */
+#define MMU_FTR_TLBIE_206		ASM_CONST(0x00400000)
+
 #ifndef __ASSEMBLY__
 #include <asm/cputable.h>
 
Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
@@ -45,10 +45,12 @@
 #define PPC_INST_STSWX			0x7c00052a
 #define PPC_INST_TLBILX			0x7c000024
 #define PPC_INST_WAIT			0x7c00007c
+#define PPC_INST_TLBIE			0x7c000264
 
 /* macros to insert fields into opcodes */
 #define __PPC_RA(a)	((a & 0x1f) << 16)
 #define __PPC_RB(b)	((b & 0x1f) << 11)
+#define __PPC_RS(s)	((s & 0x1f) << 21)
 #define __PPC_T_TLB(t)	((t & 0x3) << 21)
 #define __PPC_WC(w)	((w & 0x3) << 21)
 
@@ -69,5 +71,7 @@
 #define PPC_TLBILX_VA(a, b)	PPC_TLBILX(3, a, b)
 #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
 					__PPC_WC(w))
+#define PPC_TLBIE(lp,a) 	stringify_in_c(.long PPC_INST_TLBIE | \
+					       __PPC_RB(a) | __PPC_RS(lp))
 
 #endif /* _ASM_POWERPC_PPC_OPCODE_H */
Index: linux-2.6-ozlabs/arch/powerpc/kernel/cputable.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/kernel/cputable.c
+++ linux-2.6-ozlabs/arch/powerpc/kernel/cputable.c
@@ -425,7 +425,8 @@ static struct cpu_spec __initdata cpu_sp
 		.cpu_name		= "POWER7 (architected)",
 		.cpu_features		= CPU_FTRS_POWER7,
 		.cpu_user_features	= COMMON_USER_POWER7,
-		.mmu_features		= MMU_FTR_HPTE_TABLE,
+		.mmu_features		= MMU_FTR_HPTE_TABLE |
+			MMU_FTR_TLBIE_206,
 		.icache_bsize		= 128,
 		.dcache_bsize		= 128,
 		.machine_check		= machine_check_generic,
@@ -438,7 +439,8 @@ static struct cpu_spec __initdata cpu_sp
 		.cpu_name		= "POWER7 (raw)",
 		.cpu_features		= CPU_FTRS_POWER7,
 		.cpu_user_features	= COMMON_USER_POWER7,
-		.mmu_features		= MMU_FTR_HPTE_TABLE,
+		.mmu_features		= MMU_FTR_HPTE_TABLE |
+			MMU_FTR_TLBIE_206,
 		.icache_bsize		= 128,
 		.dcache_bsize		= 128,
 		.num_pmcs		= 6,
Index: linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/mm/hash_native_64.c
+++ linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
@@ -27,6 +27,7 @@
 #include <asm/cputable.h>
 #include <asm/udbg.h>
 #include <asm/kexec.h>
+#include <asm/ppc-opcode.h>
 
 #ifdef DEBUG_LOW
 #define DBG_LOW(fmt...) udbg_printf(fmt)
@@ -49,14 +50,21 @@ static inline void __tlbie(unsigned long
 	case MMU_PAGE_4K:
 		va &= ~0xffful;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,0" : : "r" (va) : "memory");
+ 		asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,0", PPC_TLBIE(%1,%0),
+					       %2)
+			     : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	default:
 		penc = mmu_psize_defs[psize].penc;
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,1" : : "r" (va) : "memory");
+		va |= 1; /* L */
+ 		asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,1", PPC_TLBIE(%1,%0),
+					       %2)
+			     : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	}
 }
@@ -80,6 +88,7 @@ static inline void __tlbiel(unsigned lon
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
+		va |= 1; /* L */
 		asm volatile(".long 0x7c000224 | (%0 << 11) | (1 << 21)"
 			     : : "r"(va) : "memory");
 		break;

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

* Re: [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm
  2009-04-29  0:26                     ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
@ 2009-04-29  0:52                       ` Michael Ellerman
  2009-04-29  7:20                         ` [PATCH 0/2] powerpc: Cleanup code in ppc-opcode.h Michael Neuling
  0 siblings, 1 reply; 36+ messages in thread
From: Michael Ellerman @ 2009-04-29  0:52 UTC (permalink / raw)
  To: Michael Neuling; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev

[-- Attachment #1: Type: text/plain, Size: 2168 bytes --]

On Wed, 2009-04-29 at 10:26 +1000, Michael Neuling wrote:
> From: Milton Miller <miltonm@bga.com>
> 
> powerpc: Enable MMU feature sections for inline asm
> 
> This adds the ability to do MMU feature sections for inline asm.
> 
> Signed-off-by: Milton Miller <miltonm@bga.com>
> Signed-off-by: Michael Neuling <mikey@neuling.org>
> ---
> 
>  arch/powerpc/include/asm/feature-fixups.h |   25 ++++++++++++++++++++-----
>  1 file changed, 20 insertions(+), 5 deletions(-)
> 
> Index: linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/feature-fixups.h
> +++ linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
> @@ -8,8 +8,6 @@
>   * 2 of the License, or (at your option) any later version.
>   */
>  
> -#ifdef __ASSEMBLY__
> -
>  /*
>   * Feature section common macros
>   *
> @@ -23,10 +21,12 @@
>  /* 64 bits kernel, 32 bits code (ie. vdso32) */
>  #define FTR_ENTRY_LONG		.llong
>  #define FTR_ENTRY_OFFSET	.long 0xffffffff; .long
> +#elif defined(CONFIG_PPC64)
> +#define FTR_ENTRY_LONG		.llong
> +#define FTR_ENTRY_OFFSET	.llong
>  #else
> -/* 64 bit kernel 64 bit code, or 32 bit kernel 32 bit code */
> -#define FTR_ENTRY_LONG		PPC_LONG
> -#define FTR_ENTRY_OFFSET	PPC_LONG
> +#define FTR_ENTRY_LONG		.long
> +#define FTR_ENTRY_OFFSET	.long
>  #endif

This is a bit of a pity, I take it you can't nest stringify_in_c(). It
is probably worth a comment here about why you're not using PPC_LONG,
otherwise someone will try and "clean it up".

> @@ -141,6 +141,21 @@ label##5:					       	\
>  #define ALT_FW_FTR_SECTION_END_IFCLR(msk)	\
>  	ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
>  
> +#ifndef __ASSEMBLY__
> +
> +#define ASM_MMU_FTR_IF_X(string, estring, msk, val)		\
> +	stringify_in_c(BEGIN_MMU_FTR_SECTION)			\
> +	string "; "						\
> +	stringify_in_c(MMU_FTR_SECTION_ELSE)			\
> +	estring "; "						\
> +	stringify_in_c(ALT_MMU_FTR_SECTION_END((msk), (val)))

Just call it ASM_MMU_FTR_IF() ?  And "string" and "estring" don't mean
much to me.

cheers

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

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

* [PATCH 2/2] powerpc: Move VSX load/stores into ppc-opcode.h
  2009-04-29  7:20                         ` [PATCH 0/2] powerpc: Cleanup code in ppc-opcode.h Michael Neuling
@ 2009-04-29  7:20                           ` Michael Neuling
  2009-04-29 12:38                             ` Kumar Gala
  2009-04-29  7:20                           ` [PATCH 1/2] powerpc: Cleanup macros in ppc-opcode.h Michael Neuling
  2009-04-29  7:27                           ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  2 siblings, 1 reply; 36+ messages in thread
From: Michael Neuling @ 2009-04-29  7:20 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

Move VSX load/stores into ppc-opcode.h

Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/ppc-opcode.h |    9 +++++++++
 arch/powerpc/include/asm/ppc_asm.h    |   10 ----------
 2 files changed, 9 insertions(+), 10 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
@@ -49,6 +49,7 @@
 /* macros to insert fields into opcodes */
 #define __PPC_RA(a)	(((a) & 0x1f) << 16)
 #define __PPC_RB(b)	(((b) & 0x1f) << 11)
+#define __PPC_XS(s)	((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5))
 #define __PPC_T_TLB(t)	(((t) & 0x3) << 21)
 #define __PPC_WC(w)	(((w) & 0x3) << 21)
 
@@ -70,4 +71,12 @@
 #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
 					__PPC_WC(w))
 
+/*
+ * Define what the VSX XX1 form instructions will look like, then add
+ * the 128 bit load store instructions based on that.
+ */
+#define VSX_XX1(s, a, b)	(__PPC_XS(s) | __PPC_RA(a) | __PPC_RB(b))
+#define STXVD2X(s, a, b)	.long (0x7c000798 | VSX_XX1((s), (a), (b)))
+#define LXVD2X(s, a, b)		.long (0x7c000698 | VSX_XX1((s), (a), (b)))
+
 #endif /* _ASM_POWERPC_PPC_OPCODE_H */
Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc_asm.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc_asm.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc_asm.h
@@ -75,16 +75,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_PURR);				
 				REST_10GPRS(22, base)
 #endif
 
-/*
- * Define what the VSX XX1 form instructions will look like, then add
- * the 128 bit load store instructions based on that.
- */
-#define VSX_XX1(xs, ra, rb)	(((xs) & 0x1f) << 21 | ((ra) << 16) |  \
-				 ((rb) << 11) | (((xs) >> 5)))
-
-#define STXVD2X(xs, ra, rb)	.long (0x7c000798 | VSX_XX1((xs), (ra), (rb)))
-#define LXVD2X(xs, ra, rb)	.long (0x7c000698 | VSX_XX1((xs), (ra), (rb)))
-
 #define SAVE_2GPRS(n, base)	SAVE_GPR(n, base); SAVE_GPR(n+1, base)
 #define SAVE_4GPRS(n, base)	SAVE_2GPRS(n, base); SAVE_2GPRS(n+2, base)
 #define SAVE_8GPRS(n, base)	SAVE_4GPRS(n, base); SAVE_4GPRS(n+4, base)

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

* [PATCH 0/2] powerpc: Cleanup code in ppc-opcode.h
  2009-04-29  0:52                       ` Michael Ellerman
@ 2009-04-29  7:20                         ` Michael Neuling
  2009-04-29  7:20                           ` [PATCH 2/2] powerpc: Move VSX load/stores into ppc-opcode.h Michael Neuling
                                             ` (2 more replies)
  0 siblings, 3 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-29  7:20 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

Cleanup some code in ppc-opcode.h

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

* [PATCH 1/2] powerpc: Cleanup macros in ppc-opcode.h
  2009-04-29  7:20                         ` [PATCH 0/2] powerpc: Cleanup code in ppc-opcode.h Michael Neuling
  2009-04-29  7:20                           ` [PATCH 2/2] powerpc: Move VSX load/stores into ppc-opcode.h Michael Neuling
@ 2009-04-29  7:20                           ` Michael Neuling
  2009-04-29  7:27                           ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  2 siblings, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-29  7:20 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

Macros need to be more braces happy

Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/ppc-opcode.h |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
@@ -47,10 +47,10 @@
 #define PPC_INST_WAIT			0x7c00007c
 
 /* macros to insert fields into opcodes */
-#define __PPC_RA(a)	((a & 0x1f) << 16)
-#define __PPC_RB(b)	((b & 0x1f) << 11)
-#define __PPC_T_TLB(t)	((t & 0x3) << 21)
-#define __PPC_WC(w)	((w & 0x3) << 21)
+#define __PPC_RA(a)	(((a) & 0x1f) << 16)
+#define __PPC_RB(b)	(((b) & 0x1f) << 11)
+#define __PPC_T_TLB(t)	(((t) & 0x3) << 21)
+#define __PPC_WC(w)	(((w) & 0x3) << 21)
 
 /* Deal with instructions that older assemblers aren't aware of */
 #define	PPC_DCBAL(a, b)		stringify_in_c(.long PPC_INST_DCBAL | \

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

* [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06
  2009-04-29  7:20                         ` [PATCH 0/2] powerpc: Cleanup code in ppc-opcode.h Michael Neuling
  2009-04-29  7:20                           ` [PATCH 2/2] powerpc: Move VSX load/stores into ppc-opcode.h Michael Neuling
  2009-04-29  7:20                           ` [PATCH 1/2] powerpc: Cleanup macros in ppc-opcode.h Michael Neuling
@ 2009-04-29  7:27                           ` Michael Neuling
  2009-04-29  7:27                             ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
  2009-04-29  7:27                             ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
  2 siblings, 2 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-29  7:27 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

These patches implement the PowerPC ISA 2.06 tlbie mnemonics

Signed-off-by: Michael Neuling <mikey@neuling.org>
--- 
Built ontop of ppc-opcode cleanup patches
Renamed somethings to be more logical based on comments from mpe.

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

* [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm
  2009-04-29  7:27                           ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
@ 2009-04-29  7:27                             ` Michael Neuling
  2009-04-29  7:27                             ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
  1 sibling, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-29  7:27 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

powerpc: Enable MMU feature sections for inline asm

This adds the ability to do MMU feature sections for inline asm.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/feature-fixups.h |   25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/feature-fixups.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
@@ -8,8 +8,6 @@
  * 2 of the License, or (at your option) any later version.
  */
 
-#ifdef __ASSEMBLY__
-
 /*
  * Feature section common macros
  *
@@ -23,10 +21,12 @@
 /* 64 bits kernel, 32 bits code (ie. vdso32) */
 #define FTR_ENTRY_LONG		.llong
 #define FTR_ENTRY_OFFSET	.long 0xffffffff; .long
+#elif defined(CONFIG_PPC64)
+#define FTR_ENTRY_LONG		.llong
+#define FTR_ENTRY_OFFSET	.llong
 #else
-/* 64 bit kernel 64 bit code, or 32 bit kernel 32 bit code */
-#define FTR_ENTRY_LONG		PPC_LONG
-#define FTR_ENTRY_OFFSET	PPC_LONG
+#define FTR_ENTRY_LONG		.long
+#define FTR_ENTRY_OFFSET	.long
 #endif
 
 #define START_FTR_SECTION(label)	label##1:
@@ -141,6 +141,21 @@ label##5:					       	\
 #define ALT_FW_FTR_SECTION_END_IFCLR(msk)	\
 	ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
 
+#ifndef __ASSEMBLY__
+
+#define ASM_MMU_FTR_IF(section_if, section_else, msk, val)	\
+	stringify_in_c(BEGIN_MMU_FTR_SECTION)			\
+	section_if "; "						\
+	stringify_in_c(MMU_FTR_SECTION_ELSE)			\
+	section_else "; "					\
+	stringify_in_c(ALT_MMU_FTR_SECTION_END((msk), (val)))
+
+#define ASM_MMU_FTR_IFSET(section_if, section_else, msk)	\
+	ASM_MMU_FTR_IF(section_if, section_else, (msk), (msk))
+
+#define ASM_MMU_FTR_IFCLR(section_if, section_else, msk)	\
+	ASM_MMU_FTR_IF(section_if, section_else, (msk), 0)
+
 #endif /* __ASSEMBLY__ */
 
 /* LWSYNC feature sections */

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

* [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics
  2009-04-29  7:27                           ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
  2009-04-29  7:27                             ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
@ 2009-04-29  7:27                             ` Michael Neuling
  1 sibling, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-29  7:27 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

This adds the PowerPC 2.06 tlbie mnemonics and keeps backwards
compatibilty for CPUs before 2.06.

Only useful for bare metal systems.  

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/mmu.h        |    5 +++++
 arch/powerpc/include/asm/ppc-opcode.h |    4 ++++
 arch/powerpc/kernel/cputable.c        |    6 ++++--
 arch/powerpc/mm/hash_native_64.c      |   13 +++++++++++--
 4 files changed, 24 insertions(+), 4 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/mmu.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
@@ -52,6 +52,11 @@
  */
 #define MMU_FTR_NEED_DTLB_SW_LRU	ASM_CONST(0x00200000)
 
+/* This indicates that the processor uses the ISA 2.06 server tlbie
+ * mnemonics
+ */
+#define MMU_FTR_TLBIE_206		ASM_CONST(0x00400000)
+
 #ifndef __ASSEMBLY__
 #include <asm/cputable.h>
 
Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
@@ -45,10 +45,12 @@
 #define PPC_INST_STSWX			0x7c00052a
 #define PPC_INST_TLBILX			0x7c000024
 #define PPC_INST_WAIT			0x7c00007c
+#define PPC_INST_TLBIE			0x7c000264
 
 /* macros to insert fields into opcodes */
 #define __PPC_RA(a)	(((a) & 0x1f) << 16)
 #define __PPC_RB(b)	(((b) & 0x1f) << 11)
+#define __PPC_RS(s)	(((s) & 0x1f) << 21)
 #define __PPC_XS(s)	((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5))
 #define __PPC_T_TLB(t)	(((t) & 0x3) << 21)
 #define __PPC_WC(w)	(((w) & 0x3) << 21)
@@ -70,6 +72,8 @@
 #define PPC_TLBILX_VA(a, b)	PPC_TLBILX(3, a, b)
 #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
 					__PPC_WC(w))
+#define PPC_TLBIE(lp,a) 	stringify_in_c(.long PPC_INST_TLBIE | \
+					       __PPC_RB(a) | __PPC_RS(lp))
 
 /*
  * Define what the VSX XX1 form instructions will look like, then add
Index: linux-2.6-ozlabs/arch/powerpc/kernel/cputable.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/kernel/cputable.c
+++ linux-2.6-ozlabs/arch/powerpc/kernel/cputable.c
@@ -425,7 +425,8 @@ static struct cpu_spec __initdata cpu_sp
 		.cpu_name		= "POWER7 (architected)",
 		.cpu_features		= CPU_FTRS_POWER7,
 		.cpu_user_features	= COMMON_USER_POWER7,
-		.mmu_features		= MMU_FTR_HPTE_TABLE,
+		.mmu_features		= MMU_FTR_HPTE_TABLE |
+			MMU_FTR_TLBIE_206,
 		.icache_bsize		= 128,
 		.dcache_bsize		= 128,
 		.machine_check		= machine_check_generic,
@@ -438,7 +439,8 @@ static struct cpu_spec __initdata cpu_sp
 		.cpu_name		= "POWER7 (raw)",
 		.cpu_features		= CPU_FTRS_POWER7,
 		.cpu_user_features	= COMMON_USER_POWER7,
-		.mmu_features		= MMU_FTR_HPTE_TABLE,
+		.mmu_features		= MMU_FTR_HPTE_TABLE |
+			MMU_FTR_TLBIE_206,
 		.icache_bsize		= 128,
 		.dcache_bsize		= 128,
 		.num_pmcs		= 6,
Index: linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/mm/hash_native_64.c
+++ linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
@@ -27,6 +27,7 @@
 #include <asm/cputable.h>
 #include <asm/udbg.h>
 #include <asm/kexec.h>
+#include <asm/ppc-opcode.h>
 
 #ifdef DEBUG_LOW
 #define DBG_LOW(fmt...) udbg_printf(fmt)
@@ -49,14 +50,21 @@ static inline void __tlbie(unsigned long
 	case MMU_PAGE_4K:
 		va &= ~0xffful;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,0" : : "r" (va) : "memory");
+ 		asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,0", PPC_TLBIE(%1,%0),
+					       %2)
+			     : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	default:
 		penc = mmu_psize_defs[psize].penc;
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,1" : : "r" (va) : "memory");
+		va |= 1; /* L */
+ 		asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,1", PPC_TLBIE(%1,%0),
+					       %2)
+			     : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	}
 }
@@ -80,6 +88,7 @@ static inline void __tlbiel(unsigned lon
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
+		va |= 1; /* L */
 		asm volatile(".long 0x7c000224 | (%0 << 11) | (1 << 21)"
 			     : : "r"(va) : "memory");
 		break;

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

* Re: [PATCH 2/2] powerpc: Move VSX load/stores into ppc-opcode.h
  2009-04-29  7:20                           ` [PATCH 2/2] powerpc: Move VSX load/stores into ppc-opcode.h Michael Neuling
@ 2009-04-29 12:38                             ` Kumar Gala
  2009-04-30  0:24                               ` Michael Neuling
  0 siblings, 1 reply; 36+ messages in thread
From: Kumar Gala @ 2009-04-29 12:38 UTC (permalink / raw)
  To: Michael Neuling; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev


On Apr 29, 2009, at 2:20 AM, Michael Neuling wrote:

> Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
> +++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> @@ -49,6 +49,7 @@
> /* macros to insert fields into opcodes */
> #define __PPC_RA(a)	(((a) & 0x1f) << 16)
> #define __PPC_RB(b)	(((b) & 0x1f) << 11)
> +#define __PPC_XS(s)	((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5))
> #define __PPC_T_TLB(t)	(((t) & 0x3) << 21)
> #define __PPC_WC(w)	(((w) & 0x3) << 21)
>
> @@ -70,4 +71,12 @@
> #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
> 					__PPC_WC(w))
>
> +/*
> + * Define what the VSX XX1 form instructions will look like, then add
> + * the 128 bit load store instructions based on that.
> + */
> +#define VSX_XX1(s, a, b)	(__PPC_XS(s) | __PPC_RA(a) | __PPC_RB(b))
> +#define STXVD2X(s, a, b)	.long (0x7c000798 | VSX_XX1((s), (a), (b)))
> +#define LXVD2X(s, a, b)		.long (0x7c000698 | VSX_XX1((s), (a), (b)))
> +

previous gripe of matching style of file for the .long 0x7c000798

- k

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

* Re: [PATCH 2/2] powerpc: Move VSX load/stores into ppc-opcode.h
  2009-04-29 12:38                             ` Kumar Gala
@ 2009-04-30  0:24                               ` Michael Neuling
  2009-04-30  6:58                                 ` [PATCH 0/4] powerpc: tlbie implementation for PowerPC ISA 2.06 and cleanups for ppc-opcode.h Michael Neuling
  0 siblings, 1 reply; 36+ messages in thread
From: Michael Neuling @ 2009-04-30  0:24 UTC (permalink / raw)
  To: Kumar Gala; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev

> > Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> > ===================================================================
> > --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
> > +++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> > @@ -49,6 +49,7 @@
> > /* macros to insert fields into opcodes */
> > #define __PPC_RA(a)	(((a) & 0x1f) << 16)
> > #define __PPC_RB(b)	(((b) & 0x1f) << 11)
> > +#define __PPC_XS(s)	((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5))
> > #define __PPC_T_TLB(t)	(((t) & 0x3) << 21)
> > #define __PPC_WC(w)	(((w) & 0x3) << 21)
> >
> > @@ -70,4 +71,12 @@
> > #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
> > 					__PPC_WC(w))
> >
> > +/*
> > + * Define what the VSX XX1 form instructions will look like, then add
> > + * the 128 bit load store instructions based on that.
> > + */
> > +#define VSX_XX1(s, a, b)	(__PPC_XS(s) | __PPC_RA(a) | __PPC_RB(b))
> > +#define STXVD2X(s, a, b)	.long (0x7c000798 | VSX_XX1((s), (a), (b)))
> > +#define LXVD2X(s, a, b)		.long (0x7c000698 | VSX_XX1((s), (a), (
b)))
> > +
> 
> previous gripe of matching style of file for the .long 0x7c000798

Sorry, yes.  

I also didn't sort the PPC_INST_* alphabetically for the tlbie patch.

Mikey

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

* [PATCH 0/4] powerpc: tlbie implementation for PowerPC ISA 2.06 and cleanups for ppc-opcode.h
  2009-04-30  0:24                               ` Michael Neuling
@ 2009-04-30  6:58                                 ` Michael Neuling
  2009-04-30  6:58                                   ` [PATCH 1/4] powerpc: Cleanup macros in ppc-opcode.h Michael Neuling
                                                     ` (3 more replies)
  0 siblings, 4 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-30  6:58 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

These patches implement the tlbie instruction for PowerPC ISA 2.06 and a few cleanups for ppc-opcode.h

Signed-off-by: Michael Neuling <mikey@neuling.org>
--- 
Fixed coding style for moved VSX instructions.  
Correctly alphabetized the newly added instructions.

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

* [PATCH 3/4] powerpc: Enable MMU feature sections for inline asm
  2009-04-30  6:58                                 ` [PATCH 0/4] powerpc: tlbie implementation for PowerPC ISA 2.06 and cleanups for ppc-opcode.h Michael Neuling
                                                     ` (2 preceding siblings ...)
  2009-04-30  6:58                                   ` [PATCH 2/4] powerpc: Move VSX load/stores into ppc-opcode.h Michael Neuling
@ 2009-04-30  6:58                                   ` Michael Neuling
  3 siblings, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-30  6:58 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

powerpc: Enable MMU feature sections for inline asm

This adds the ability to do MMU feature sections for inline asm.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/feature-fixups.h |   25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/feature-fixups.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/feature-fixups.h
@@ -8,8 +8,6 @@
  * 2 of the License, or (at your option) any later version.
  */
 
-#ifdef __ASSEMBLY__
-
 /*
  * Feature section common macros
  *
@@ -23,10 +21,12 @@
 /* 64 bits kernel, 32 bits code (ie. vdso32) */
 #define FTR_ENTRY_LONG		.llong
 #define FTR_ENTRY_OFFSET	.long 0xffffffff; .long
+#elif defined(CONFIG_PPC64)
+#define FTR_ENTRY_LONG		.llong
+#define FTR_ENTRY_OFFSET	.llong
 #else
-/* 64 bit kernel 64 bit code, or 32 bit kernel 32 bit code */
-#define FTR_ENTRY_LONG		PPC_LONG
-#define FTR_ENTRY_OFFSET	PPC_LONG
+#define FTR_ENTRY_LONG		.long
+#define FTR_ENTRY_OFFSET	.long
 #endif
 
 #define START_FTR_SECTION(label)	label##1:
@@ -141,6 +141,21 @@ label##5:					       	\
 #define ALT_FW_FTR_SECTION_END_IFCLR(msk)	\
 	ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
 
+#ifndef __ASSEMBLY__
+
+#define ASM_MMU_FTR_IF(section_if, section_else, msk, val)	\
+	stringify_in_c(BEGIN_MMU_FTR_SECTION)			\
+	section_if "; "						\
+	stringify_in_c(MMU_FTR_SECTION_ELSE)			\
+	section_else "; "					\
+	stringify_in_c(ALT_MMU_FTR_SECTION_END((msk), (val)))
+
+#define ASM_MMU_FTR_IFSET(section_if, section_else, msk)	\
+	ASM_MMU_FTR_IF(section_if, section_else, (msk), (msk))
+
+#define ASM_MMU_FTR_IFCLR(section_if, section_else, msk)	\
+	ASM_MMU_FTR_IF(section_if, section_else, (msk), 0)
+
 #endif /* __ASSEMBLY__ */
 
 /* LWSYNC feature sections */

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

* [PATCH 1/4] powerpc: Cleanup macros in ppc-opcode.h
  2009-04-30  6:58                                 ` [PATCH 0/4] powerpc: tlbie implementation for PowerPC ISA 2.06 and cleanups for ppc-opcode.h Michael Neuling
@ 2009-04-30  6:58                                   ` Michael Neuling
  2009-04-30 11:27                                     ` Kumar Gala
  2009-04-30  6:58                                   ` [PATCH 4/4] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
                                                     ` (2 subsequent siblings)
  3 siblings, 1 reply; 36+ messages in thread
From: Michael Neuling @ 2009-04-30  6:58 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

Make macros more braces happy.

Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/ppc-opcode.h |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
@@ -47,10 +47,10 @@
 #define PPC_INST_WAIT			0x7c00007c
 
 /* macros to insert fields into opcodes */
-#define __PPC_RA(a)	((a & 0x1f) << 16)
-#define __PPC_RB(b)	((b & 0x1f) << 11)
-#define __PPC_T_TLB(t)	((t & 0x3) << 21)
-#define __PPC_WC(w)	((w & 0x3) << 21)
+#define __PPC_RA(a)	(((a) & 0x1f) << 16)
+#define __PPC_RB(b)	(((b) & 0x1f) << 11)
+#define __PPC_T_TLB(t)	(((t) & 0x3) << 21)
+#define __PPC_WC(w)	(((w) & 0x3) << 21)
 
 /* Deal with instructions that older assemblers aren't aware of */
 #define	PPC_DCBAL(a, b)		stringify_in_c(.long PPC_INST_DCBAL | \

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

* [PATCH 2/4] powerpc: Move VSX load/stores into ppc-opcode.h
  2009-04-30  6:58                                 ` [PATCH 0/4] powerpc: tlbie implementation for PowerPC ISA 2.06 and cleanups for ppc-opcode.h Michael Neuling
  2009-04-30  6:58                                   ` [PATCH 1/4] powerpc: Cleanup macros in ppc-opcode.h Michael Neuling
  2009-04-30  6:58                                   ` [PATCH 4/4] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
@ 2009-04-30  6:58                                   ` Michael Neuling
  2009-04-30 11:28                                     ` Kumar Gala
  2009-04-30  6:58                                   ` [PATCH 3/4] powerpc: Enable MMU feature sections for inline asm Michael Neuling
  3 siblings, 1 reply; 36+ messages in thread
From: Michael Neuling @ 2009-04-30  6:58 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

Cleans up the VSX load/store instructions by moving them into
ppc-opcode.h.

Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/ppc-opcode.h |   13 +++++++++++++
 arch/powerpc/include/asm/ppc_asm.h    |   10 ----------
 2 files changed, 13 insertions(+), 10 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
@@ -25,6 +25,7 @@
 #define PPC_INST_LSWI			0x7c0004aa
 #define PPC_INST_LSWX			0x7c00042a
 #define PPC_INST_LWSYNC			0x7c2004ac
+#define PPC_INST_LXVD2X			0x7c000698
 #define PPC_INST_MCRXR			0x7c000400
 #define PPC_INST_MCRXR_MASK		0xfc0007fe
 #define PPC_INST_MFSPR_PVR		0x7c1f42a6
@@ -43,12 +44,14 @@
 
 #define PPC_INST_STSWI			0x7c0005aa
 #define PPC_INST_STSWX			0x7c00052a
+#define PPC_INST_STXVD2X		0x7c000798
 #define PPC_INST_TLBILX			0x7c000024
 #define PPC_INST_WAIT			0x7c00007c
 
 /* macros to insert fields into opcodes */
 #define __PPC_RA(a)	(((a) & 0x1f) << 16)
 #define __PPC_RB(b)	(((b) & 0x1f) << 11)
+#define __PPC_XS(s)	((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5))
 #define __PPC_T_TLB(t)	(((t) & 0x3) << 21)
 #define __PPC_WC(w)	(((w) & 0x3) << 21)
 
@@ -70,4 +73,14 @@
 #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
 					__PPC_WC(w))
 
+/*
+ * Define what the VSX XX1 form instructions will look like, then add
+ * the 128 bit load store instructions based on that.
+ */
+#define VSX_XX1(s, a, b)	(__PPC_XS(s) | __PPC_RA(a) | __PPC_RB(b))
+#define STXVD2X(s, a, b)	stringify_in_c(.long PPC_INST_STXVD2X | \
+					       VSX_XX1((s), (a), (b)))
+#define LXVD2X(s, a, b)		stringify_in_c(.long PPC_INST_LXVD2X | \
+					       VSX_XX1((s), (a), (b)))
+
 #endif /* _ASM_POWERPC_PPC_OPCODE_H */
Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc_asm.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc_asm.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc_asm.h
@@ -76,16 +76,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_PURR);				
 				REST_10GPRS(22, base)
 #endif
 
-/*
- * Define what the VSX XX1 form instructions will look like, then add
- * the 128 bit load store instructions based on that.
- */
-#define VSX_XX1(xs, ra, rb)	(((xs) & 0x1f) << 21 | ((ra) << 16) |  \
-				 ((rb) << 11) | (((xs) >> 5)))
-
-#define STXVD2X(xs, ra, rb)	.long (0x7c000798 | VSX_XX1((xs), (ra), (rb)))
-#define LXVD2X(xs, ra, rb)	.long (0x7c000698 | VSX_XX1((xs), (ra), (rb)))
-
 #define SAVE_2GPRS(n, base)	SAVE_GPR(n, base); SAVE_GPR(n+1, base)
 #define SAVE_4GPRS(n, base)	SAVE_2GPRS(n, base); SAVE_2GPRS(n+2, base)
 #define SAVE_8GPRS(n, base)	SAVE_4GPRS(n, base); SAVE_4GPRS(n+4, base)

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

* [PATCH 4/4] powerpc: Add 2.06 tlbie mnemonics
  2009-04-30  6:58                                 ` [PATCH 0/4] powerpc: tlbie implementation for PowerPC ISA 2.06 and cleanups for ppc-opcode.h Michael Neuling
  2009-04-30  6:58                                   ` [PATCH 1/4] powerpc: Cleanup macros in ppc-opcode.h Michael Neuling
@ 2009-04-30  6:58                                   ` Michael Neuling
  2009-04-30  6:58                                   ` [PATCH 2/4] powerpc: Move VSX load/stores into ppc-opcode.h Michael Neuling
  2009-04-30  6:58                                   ` [PATCH 3/4] powerpc: Enable MMU feature sections for inline asm Michael Neuling
  3 siblings, 0 replies; 36+ messages in thread
From: Michael Neuling @ 2009-04-30  6:58 UTC (permalink / raw)
  To: Michael Neuling, Paul Mackerras, Benjamin Herrenschmidt
  Cc: linuxppc-dev, Milton Miller

From: Milton Miller <miltonm@bga.com>

This adds the PowerPC 2.06 tlbie mnemonics and keeps backwards
compatibilty for CPUs before 2.06.

Only useful for bare metal systems.  

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---

 arch/powerpc/include/asm/mmu.h        |    5 +++++
 arch/powerpc/include/asm/ppc-opcode.h |    4 ++++
 arch/powerpc/kernel/cputable.c        |    6 ++++--
 arch/powerpc/mm/hash_native_64.c      |   13 +++++++++++--
 4 files changed, 24 insertions(+), 4 deletions(-)

Index: linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/mmu.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/mmu.h
@@ -52,6 +52,11 @@
  */
 #define MMU_FTR_NEED_DTLB_SW_LRU	ASM_CONST(0x00200000)
 
+/* This indicates that the processor uses the ISA 2.06 server tlbie
+ * mnemonics
+ */
+#define MMU_FTR_TLBIE_206		ASM_CONST(0x00400000)
+
 #ifndef __ASSEMBLY__
 #include <asm/cputable.h>
 
Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
+++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
@@ -45,12 +45,14 @@
 #define PPC_INST_STSWI			0x7c0005aa
 #define PPC_INST_STSWX			0x7c00052a
 #define PPC_INST_STXVD2X		0x7c000798
+#define PPC_INST_TLBIE			0x7c000264
 #define PPC_INST_TLBILX			0x7c000024
 #define PPC_INST_WAIT			0x7c00007c
 
 /* macros to insert fields into opcodes */
 #define __PPC_RA(a)	(((a) & 0x1f) << 16)
 #define __PPC_RB(b)	(((b) & 0x1f) << 11)
+#define __PPC_RS(s)	(((s) & 0x1f) << 21)
 #define __PPC_XS(s)	((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5))
 #define __PPC_T_TLB(t)	(((t) & 0x3) << 21)
 #define __PPC_WC(w)	(((w) & 0x3) << 21)
@@ -72,6 +74,8 @@
 #define PPC_TLBILX_VA(a, b)	PPC_TLBILX(3, a, b)
 #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
 					__PPC_WC(w))
+#define PPC_TLBIE(lp,a) 	stringify_in_c(.long PPC_INST_TLBIE | \
+					       __PPC_RB(a) | __PPC_RS(lp))
 
 /*
  * Define what the VSX XX1 form instructions will look like, then add
Index: linux-2.6-ozlabs/arch/powerpc/kernel/cputable.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/kernel/cputable.c
+++ linux-2.6-ozlabs/arch/powerpc/kernel/cputable.c
@@ -425,7 +425,8 @@ static struct cpu_spec __initdata cpu_sp
 		.cpu_name		= "POWER7 (architected)",
 		.cpu_features		= CPU_FTRS_POWER7,
 		.cpu_user_features	= COMMON_USER_POWER7,
-		.mmu_features		= MMU_FTR_HPTE_TABLE,
+		.mmu_features		= MMU_FTR_HPTE_TABLE |
+			MMU_FTR_TLBIE_206,
 		.icache_bsize		= 128,
 		.dcache_bsize		= 128,
 		.machine_check		= machine_check_generic,
@@ -438,7 +439,8 @@ static struct cpu_spec __initdata cpu_sp
 		.cpu_name		= "POWER7 (raw)",
 		.cpu_features		= CPU_FTRS_POWER7,
 		.cpu_user_features	= COMMON_USER_POWER7,
-		.mmu_features		= MMU_FTR_HPTE_TABLE,
+		.mmu_features		= MMU_FTR_HPTE_TABLE |
+			MMU_FTR_TLBIE_206,
 		.icache_bsize		= 128,
 		.dcache_bsize		= 128,
 		.num_pmcs		= 6,
Index: linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/mm/hash_native_64.c
+++ linux-2.6-ozlabs/arch/powerpc/mm/hash_native_64.c
@@ -27,6 +27,7 @@
 #include <asm/cputable.h>
 #include <asm/udbg.h>
 #include <asm/kexec.h>
+#include <asm/ppc-opcode.h>
 
 #ifdef DEBUG_LOW
 #define DBG_LOW(fmt...) udbg_printf(fmt)
@@ -49,14 +50,21 @@ static inline void __tlbie(unsigned long
 	case MMU_PAGE_4K:
 		va &= ~0xffful;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,0" : : "r" (va) : "memory");
+ 		asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,0", PPC_TLBIE(%1,%0),
+					       %2)
+			     : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	default:
 		penc = mmu_psize_defs[psize].penc;
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
-		asm volatile("tlbie %0,1" : : "r" (va) : "memory");
+		va |= 1; /* L */
+ 		asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,1", PPC_TLBIE(%1,%0),
+					       %2)
+			     : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206)
+			     : "memory");
 		break;
 	}
 }
@@ -80,6 +88,7 @@ static inline void __tlbiel(unsigned lon
 		va &= ~((1ul << mmu_psize_defs[psize].shift) - 1);
 		va |= penc << 12;
 		va |= ssize << 8;
+		va |= 1; /* L */
 		asm volatile(".long 0x7c000224 | (%0 << 11) | (1 << 21)"
 			     : : "r"(va) : "memory");
 		break;

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

* Re: [PATCH 1/4] powerpc: Cleanup macros in ppc-opcode.h
  2009-04-30  6:58                                   ` [PATCH 1/4] powerpc: Cleanup macros in ppc-opcode.h Michael Neuling
@ 2009-04-30 11:27                                     ` Kumar Gala
  0 siblings, 0 replies; 36+ messages in thread
From: Kumar Gala @ 2009-04-30 11:27 UTC (permalink / raw)
  To: Michael Neuling; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev


On Apr 30, 2009, at 1:58 AM, Michael Neuling wrote:

> Make macros more braces happy.
>
> Signed-off-by: Michael Neuling <mikey@neuling.org>
> ---
>
> arch/powerpc/include/asm/ppc-opcode.h |    8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)

Acked-by: Kumar Gala <galak@kernel.crashing.org>

- k

>
>
> Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
> +++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> @@ -47,10 +47,10 @@
> #define PPC_INST_WAIT			0x7c00007c
>
> /* macros to insert fields into opcodes */
> -#define __PPC_RA(a)	((a & 0x1f) << 16)
> -#define __PPC_RB(b)	((b & 0x1f) << 11)
> -#define __PPC_T_TLB(t)	((t & 0x3) << 21)
> -#define __PPC_WC(w)	((w & 0x3) << 21)
> +#define __PPC_RA(a)	(((a) & 0x1f) << 16)
> +#define __PPC_RB(b)	(((b) & 0x1f) << 11)
> +#define __PPC_T_TLB(t)	(((t) & 0x3) << 21)
> +#define __PPC_WC(w)	(((w) & 0x3) << 21)
>
> /* Deal with instructions that older assemblers aren't aware of */
> #define	PPC_DCBAL(a, b)		stringify_in_c(.long PPC_INST_DCBAL | \

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

* Re: [PATCH 2/4] powerpc: Move VSX load/stores into ppc-opcode.h
  2009-04-30  6:58                                   ` [PATCH 2/4] powerpc: Move VSX load/stores into ppc-opcode.h Michael Neuling
@ 2009-04-30 11:28                                     ` Kumar Gala
  0 siblings, 0 replies; 36+ messages in thread
From: Kumar Gala @ 2009-04-30 11:28 UTC (permalink / raw)
  To: Michael Neuling; +Cc: Paul Mackerras, Milton Miller, linuxppc-dev


On Apr 30, 2009, at 1:58 AM, Michael Neuling wrote:

> Cleans up the VSX load/store instructions by moving them into
> ppc-opcode.h.
>
> Signed-off-by: Michael Neuling <mikey@neuling.org>
> ---
>

Acked-by: Kumar Gala <galak@kernel.crashing.org>

- k


> arch/powerpc/include/asm/ppc-opcode.h |   13 +++++++++++++
> arch/powerpc/include/asm/ppc_asm.h    |   10 ----------
> 2 files changed, 13 insertions(+), 10 deletions(-)
>
> Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc-opcode.h
> +++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc-opcode.h
> @@ -25,6 +25,7 @@
> #define PPC_INST_LSWI			0x7c0004aa
> #define PPC_INST_LSWX			0x7c00042a
> #define PPC_INST_LWSYNC			0x7c2004ac
> +#define PPC_INST_LXVD2X			0x7c000698
> #define PPC_INST_MCRXR			0x7c000400
> #define PPC_INST_MCRXR_MASK		0xfc0007fe
> #define PPC_INST_MFSPR_PVR		0x7c1f42a6
> @@ -43,12 +44,14 @@
>
> #define PPC_INST_STSWI			0x7c0005aa
> #define PPC_INST_STSWX			0x7c00052a
> +#define PPC_INST_STXVD2X		0x7c000798
> #define PPC_INST_TLBILX			0x7c000024
> #define PPC_INST_WAIT			0x7c00007c
>
> /* macros to insert fields into opcodes */
> #define __PPC_RA(a)	(((a) & 0x1f) << 16)
> #define __PPC_RB(b)	(((b) & 0x1f) << 11)
> +#define __PPC_XS(s)	((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5))
> #define __PPC_T_TLB(t)	(((t) & 0x3) << 21)
> #define __PPC_WC(w)	(((w) & 0x3) << 21)
>
> @@ -70,4 +73,14 @@
> #define PPC_WAIT(w)		stringify_in_c(.long PPC_INST_WAIT | \
> 					__PPC_WC(w))
>
> +/*
> + * Define what the VSX XX1 form instructions will look like, then add
> + * the 128 bit load store instructions based on that.
> + */
> +#define VSX_XX1(s, a, b)	(__PPC_XS(s) | __PPC_RA(a) | __PPC_RB(b))
> +#define STXVD2X(s, a, b)	stringify_in_c(.long PPC_INST_STXVD2X | \
> +					       VSX_XX1((s), (a), (b)))
> +#define LXVD2X(s, a, b)		stringify_in_c(.long PPC_INST_LXVD2X | \
> +					       VSX_XX1((s), (a), (b)))
> +
> #endif /* _ASM_POWERPC_PPC_OPCODE_H */
> Index: linux-2.6-ozlabs/arch/powerpc/include/asm/ppc_asm.h
> ===================================================================
> --- linux-2.6-ozlabs.orig/arch/powerpc/include/asm/ppc_asm.h
> +++ linux-2.6-ozlabs/arch/powerpc/include/asm/ppc_asm.h
> @@ -76,16 +76,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_PURR);				
> 				REST_10GPRS(22, base)
> #endif
>
> -/*
> - * Define what the VSX XX1 form instructions will look like, then add
> - * the 128 bit load store instructions based on that.
> - */
> -#define VSX_XX1(xs, ra, rb)	(((xs) & 0x1f) << 21 | ((ra) << 16) |  \
> -				 ((rb) << 11) | (((xs) >> 5)))
> -
> -#define STXVD2X(xs, ra, rb)	.long (0x7c000798 | VSX_XX1((xs), (ra),  
> (rb)))
> -#define LXVD2X(xs, ra, rb)	.long (0x7c000698 | VSX_XX1((xs), (ra),  
> (rb)))
> -
> #define SAVE_2GPRS(n, base)	SAVE_GPR(n, base); SAVE_GPR(n+1, base)
> #define SAVE_4GPRS(n, base)	SAVE_2GPRS(n, base); SAVE_2GPRS(n+2, base)
> #define SAVE_8GPRS(n, base)	SAVE_4GPRS(n, base); SAVE_4GPRS(n+4, base)

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

end of thread, other threads:[~2009-04-30 11:28 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-04-24  6:24 [PATCH 0/2] powerpc: tlbie implementation PowerPC 2.06 Michael Neuling
2009-04-24  6:24 ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
2009-04-27  1:20   ` Benjamin Herrenschmidt
2009-04-27 19:30   ` Kumar Gala
2009-04-27 19:31   ` Kumar Gala
2009-04-27 19:46     ` Kumar Gala
2009-04-28  5:03       ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
2009-04-28  5:03         ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
2009-04-28  5:03         ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
2009-04-28 12:05           ` Kumar Gala
2009-04-28 12:40             ` Michael Neuling
2009-04-28 12:45             ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
2009-04-28 12:45               ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
2009-04-28 12:45               ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
2009-04-28 13:21                 ` Kumar Gala
2009-04-29  0:16                   ` Michael Neuling
2009-04-29  0:26                   ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
2009-04-29  0:26                     ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
2009-04-29  0:52                       ` Michael Ellerman
2009-04-29  7:20                         ` [PATCH 0/2] powerpc: Cleanup code in ppc-opcode.h Michael Neuling
2009-04-29  7:20                           ` [PATCH 2/2] powerpc: Move VSX load/stores into ppc-opcode.h Michael Neuling
2009-04-29 12:38                             ` Kumar Gala
2009-04-30  0:24                               ` Michael Neuling
2009-04-30  6:58                                 ` [PATCH 0/4] powerpc: tlbie implementation for PowerPC ISA 2.06 and cleanups for ppc-opcode.h Michael Neuling
2009-04-30  6:58                                   ` [PATCH 1/4] powerpc: Cleanup macros in ppc-opcode.h Michael Neuling
2009-04-30 11:27                                     ` Kumar Gala
2009-04-30  6:58                                   ` [PATCH 4/4] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
2009-04-30  6:58                                   ` [PATCH 2/4] powerpc: Move VSX load/stores into ppc-opcode.h Michael Neuling
2009-04-30 11:28                                     ` Kumar Gala
2009-04-30  6:58                                   ` [PATCH 3/4] powerpc: Enable MMU feature sections for inline asm Michael Neuling
2009-04-29  7:20                           ` [PATCH 1/2] powerpc: Cleanup macros in ppc-opcode.h Michael Neuling
2009-04-29  7:27                           ` [PATCH 0/2] powerpc: tlbie implementation for PowerPC ISA 2.06 Michael Neuling
2009-04-29  7:27                             ` [PATCH 1/2] powerpc: Enable MMU feature sections for inline asm Michael Neuling
2009-04-29  7:27                             ` [PATCH 2/2] powerpc: Add 2.06 tlbie mnemonics Michael Neuling
2009-04-29  0:26                     ` Michael Neuling
2009-04-24  6:24 ` [PATCH 1/2] powerpc: Enable CPU feature sections for inline asm Michael Neuling

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).