Skip to contentSkip to conversation

powerpc: Add AT_HWCAP2 to indicate V.CRYPTO category support

PATCH In review Benjamin Herrenschmidt 2 participants 3 messages Jun 10, 2014 – Jun 12, 2014 PowerPC

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 powerpc: Add AT_HWCAP2 to indicate V.CRYPTO category support

The Vector Crypto category instructions are supported by current POWER8 chips, advertise them to userspace using a specific bit to properly differentiate with chips of the same architecture level that might not have them.

--

arch/powerpc/include/uapi/asm/cputable.h +1 -0
index 5b76579..de2c0e4 100644
@@ -41,5 +41,6 @@
 #define PPC_FEATURE2_EBB		0x10000000
 #define PPC_FEATURE2_ISEL		0x08000000
 #define PPC_FEATURE2_TAR		0x04000000
+#define PPC_FEATURE2_VEC_CRYPTO		0x02000000
 
 #endif /* _UAPI__ASM_POWERPC_CPUTABLE_H */
arch/powerpc/kernel/cputable.c +2 -1
index c1faade..11da04a 100644
@@ -109,7 +109,8 @@ extern void __restore_cpu_e6500(void);
 				 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
 #define COMMON_USER2_POWER8	(PPC_FEATURE2_ARCH_2_07 | \
 				 PPC_FEATURE2_HTM_COMP | PPC_FEATURE2_DSCR | \
-				 PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR)
+				 PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \
+				 PPC_FEATURE2_VEC_CRYPTO)
 #define COMMON_USER_PA6T	(COMMON_USER_PPC64 | PPC_FEATURE_PA6T |\
 				 PPC_FEATURE_TRUE_LE | \
 				 PPC_FEATURE_HAS_ALTIVEC_COMP)
#1 lore raw

The precedent we have used is that features that refer to ISA Categories include _HAS_ following the PPC_FEATURE[2]. So GLIBC specifies in hwcap.h:

/* Feature definitions in AT_HWCAP2. */
#define PPC_FEATURE2_ARCH_2_07 0x80000000 /* ISA 2.07 */
#define PPC_FEATURE2_HAS_HTM 0x40000000 /* Hardware Transactional
Memory */
#define PPC_FEATURE2_HAS_DSCR 0x20000000 /* Data Stream Control
Register */

#define PPC_FEATURE2_HAS_EBB       0x10000000 /* Event Base Branching */
#define PPC_FEATURE2_HAS_ISEL      0x08000000 /* Integer Select */
#define PPC_FEATURE2_HAS_TAR       0x04000000 /* Target Address Register */

This was carried from the original AT_HWCAP defines.

$ grep _HAS_ ./sysdeps/powerpc/bits/hwcap.h
#define PPC_FEATURE_HAS_ALTIVEC	    0x10000000 /* SIMD/Vector Unit.  */
#define PPC_FEATURE_HAS_FPU	    0x08000000 /* Floating Point Unit.  */
#define PPC_FEATURE_HAS_MMU	    0x04000000 /* Memory Management Unit.  */
#define PPC_FEATURE_HAS_4xxMAC	    0x02000000 /* 4xx Multiply
Accumulator.  */
#define PPC_FEATURE_HAS_SPE	    0x00800000 /* Signal Processing ext.  */
#define PPC_FEATURE_HAS_EFP_SINGLE  0x00400000 /* SPE Float.  */
#define PPC_FEATURE_HAS_EFP_DOUBLE  0x00200000 /* SPE Double.  */
#define PPC_FEATURE_HAS_DFP	    0x00000400 /* Decimal FP Unit */
#define PPC_FEATURE_HAS_VSX	    0x00000080 /* P7 Vector Extension.  */

So could we agree on PPC_FEATURE2_HAS_VEC_CRYPTO or the shorter PPC_FEATURE2_HAS_VCRYPTO?

Steven J. Munroe
Linux on Power Toolchain Architect
IBM Corporation, Linux Technology Center

From: Benjamin Herrenschmidt <[email protected]>
To: [email protected]
Cc: Steve Munroe/Rochester/IBM@IBMUS, Hanns-Joachim Uhl
<[email protected]>, Diane Brent/Poughkeepsie/IBM@IBMUS, Jeffrey Scheel/Rochester/IBM@IBMUS, Adhemerval Zanella <[email protected]>
Date: 06/10/2014 12:05 AM
Subject: [PATCH] powerpc: Add AT_HWCAP2 to indicate V.CRYPTO category
support

The Vector Crypto category instructions are supported by current POWER8 chips, advertise them to userspace using a specific bit to properly differentiate with chips of the same architecture level that might not have them.

--

(quoted diff) +0 -0

b/arch/powerpc/include/uapi/asm/cputable.h
index 5b76579..de2c0e4 100644

arch/powerpc/include/uapi/asm/cputable.h +1 -0
@@ -41,5 +41,6 @@
 #define PPC_FEATURE2_EBB		 		 0x10000000
 #define PPC_FEATURE2_ISEL		 		 0x08000000
 #define PPC_FEATURE2_TAR		 		 0x04000000
+#define PPC_FEATURE2_VEC_CRYPTO		 		 0x02000000
 
 #endif /* _UAPI__ASM_POWERPC_CPUTABLE_H */
(quoted diff) +0 -0

b/arch/powerpc/kernel/cputable.c
index c1faade..11da04a 100644

arch/powerpc/kernel/cputable.c +0 -0
@@ -109,7 +109,8 @@ extern void __restore_cpu_e6500(void);
 

PPC_FEATURE_PSERIES_PERFMON_COMPAT)
#define COMMON_USER2_POWER8 (PPC_FEATURE2_ARCH_2_07 | \
PPC_FEATURE2_HTM_COMP |
PPC_FEATURE2_DSCR | \
- PPC_FEATURE2_ISEL |
PPC_FEATURE2_TAR)
+ PPC_FEATURE2_ISEL |
PPC_FEATURE2_TAR | \
+ PPC_FEATURE2_VEC_CRYPTO)
#define COMMON_USER_PA6T (COMMON_USER_PPC64 | PPC_FEATURE_PA6T
|\
PPC_FEATURE_TRUE_LE | \

PPC_FEATURE_HAS_ALTIVEC_COMP)

#2 lore raw
Quoted 8 lines · Steve Munroe

The precedent we have used is that features that refer to ISA Categories include _HAS_ following the PPC_FEATURE[2]. So GLIBC specifies in hwcap.h:

/* Feature definitions in AT_HWCAP2. */
#define PPC_FEATURE2_ARCH_2_07 0x80000000 /* ISA 2.07 */
#define PPC_FEATURE2_HAS_HTM 0x40000000 /* Hardware Transactional
Memory */
#define PPC_FEATURE2_HAS_DSCR 0x20000000 /* Data Stream Control
Register */

Quoted 5 lines
#define PPC_FEATURE2_HAS_EBB       0x10000000 /* Event Base Branching */
#define PPC_FEATURE2_HAS_ISEL      0x08000000 /* Integer Select */
#define PPC_FEATURE2_HAS_TAR       0x04000000 /* Target Address Register */

This was carried from the original AT_HWCAP defines.

Off, they don't have the "HAS" in the kernel definitions...

Quoted 11 lines
$ grep _HAS_ ./sysdeps/powerpc/bits/hwcap.h
#define PPC_FEATURE_HAS_ALTIVEC    0x10000000 /* SIMD/Vector Unit.  */
#define PPC_FEATURE_HAS_FPU    0x08000000 /* Floating Point Unit.  */
#define PPC_FEATURE_HAS_MMU    0x04000000 /* Memory Management Unit.  */
#define PPC_FEATURE_HAS_4xxMAC    0x02000000 /* 4xx Multiply Accumulator.  */
#define PPC_FEATURE_HAS_SPE    0x00800000 /* Signal Processing ext.  */
#define PPC_FEATURE_HAS_EFP_SINGLE  0x00400000 /* SPE Float.  */
#define PPC_FEATURE_HAS_EFP_DOUBLE  0x00200000 /* SPE Double.  */
#define PPC_FEATURE_HAS_DFP    0x00000400 /* Decimal FP Unit */
#define PPC_FEATURE_HAS_VSX    0x00000080 /* P7 Vector Extension.  */
Quoted 1 line

So could we agree on PPC_FEATURE2_HAS_VEC_CRYPTO or the shorter PPC_FEATURE2_HAS_VCRYPTO?

Well, I made it consistent with the other HWCAP2 bits exposed by the kernel which seem to differ from the glibc versions :-(

In any case, I've merged it but I can do a follow up patch that adds the _HAS_ everywhere, hopefully nobody in userspace use the kernel definition and they use the glibc one instead.

In that case, go for VCRYPTO.

Cheers,
Ben.

Quoted 56 lines

Steven J. Munroe
Linux on Power Toolchain Architect
IBM Corporation, Linux Technology Center

Inactive hide details for Benjamin Herrenschmidt ---06/10/2014 12:05:07 AM---The Vector Crypto category instructions are supporBenjamin Herrenschmidt ---06/10/2014 12:05:07 AM---The Vector Crypto category instructions are supported by current POWER8 chips, advertise them to use

From: Benjamin Herrenschmidt <[email protected]>
To: [email protected]
Cc: Steve Munroe/Rochester/IBM@IBMUS, Hanns-Joachim Uhl <[email protected]>, Diane Brent/Poughkeepsie/IBM@IBMUS, Jeffrey Scheel/Rochester/IBM@IBMUS, Adhemerval Zanella <[email protected]>
Date: 06/10/2014 12:05 AM
Subject: [PATCH] powerpc: Add AT_HWCAP2 to indicate V.CRYPTO category support

______________________________________________________________________

The Vector Crypto category instructions are supported by current POWER8 chips, advertise them to userspace using a specific bit to properly differentiate with chips of the same architecture level that might not have them.

--

arch/powerpc/include/uapi/asm/cputable.h +1 -0
index 5b76579..de2c0e4 100644
@@ -41,5 +41,6 @@
 #define PPC_FEATURE2_EBB 0x10000000
 #define PPC_FEATURE2_ISEL 0x08000000
 #define PPC_FEATURE2_TAR 0x04000000
+#define PPC_FEATURE2_VEC_CRYPTO 0x02000000
 
 #endif /* _UAPI__ASM_POWERPC_CPUTABLE_H */
arch/powerpc/kernel/cputable.c +2 -1
index c1faade..11da04a 100644
@@ -109,7 +109,8 @@ extern void __restore_cpu_e6500(void);
 PPC_FEATURE_PSERIES_PERFMON_COMPAT)
 #define COMMON_USER2_POWER8 (PPC_FEATURE2_ARCH_2_07 | \
 PPC_FEATURE2_HTM_COMP | PPC_FEATURE2_DSCR | \
-  PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR)
+  PPC_FEATURE2_ISEL | PPC_FEATURE2_TAR | \
+  PPC_FEATURE2_VEC_CRYPTO)
 #define COMMON_USER_PA6T (COMMON_USER_PPC64 | PPC_FEATURE_PA6T |\
 PPC_FEATURE_TRUE_LE | \
 PPC_FEATURE_HAS_ALTIVEC_COMP)