s390x/cpumodel: add gen15 defintions

add several new features (msa9, sort, deflate, additional vector
instructions, new general purpose instructions) to generation 15.

Also disable csske and bpb from the default and base models >=15.
This will allow to migrate gen15 machines to future machines that
do not have these features.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Message-Id: <20190429090250.7648-9-borntraeger@de.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
Christian Borntraeger 2019-04-29 05:02:49 -04:00 committed by Cornelia Huck
parent afc7b8666b
commit caef62430f

View File

@ -13,6 +13,7 @@
#include <inttypes.h> #include <inttypes.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include "cpu_features_def.h" #include "cpu_features_def.h"
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) #define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
@ -419,6 +420,10 @@ static uint16_t base_GEN14_GA1[] = {
#define base_GEN14_GA2 EmptyFeat #define base_GEN14_GA2 EmptyFeat
static uint16_t base_GEN15_GA1[] = {
S390_FEAT_MISC_INSTRUCTION_EXT3,
};
/* Full features (in order of release) /* Full features (in order of release)
* Automatically includes corresponding base features. * Automatically includes corresponding base features.
* Full features are all features this hardware supports even if kvm/QEMU do not * Full features are all features this hardware supports even if kvm/QEMU do not
@ -548,6 +553,16 @@ static uint16_t full_GEN14_GA1[] = {
#define full_GEN14_GA2 EmptyFeat #define full_GEN14_GA2 EmptyFeat
static uint16_t full_GEN15_GA1[] = {
S390_FEAT_VECTOR_ENH2,
S390_FEAT_GROUP_ENH_SORT,
S390_FEAT_GROUP_DEFLATE_CONVERSION,
S390_FEAT_VECTOR_BCD_ENH,
S390_FEAT_GROUP_MSA_EXT_9,
S390_FEAT_GROUP_MSA_EXT_9_PCKMO,
S390_FEAT_ETOKEN,
};
/* Default features (in order of release) /* Default features (in order of release)
* Automatically includes corresponding base features. * Automatically includes corresponding base features.
* Default features are all features this version of QEMU supports for this * Default features are all features this version of QEMU supports for this
@ -624,6 +639,16 @@ static uint16_t default_GEN14_GA1[] = {
#define default_GEN14_GA2 EmptyFeat #define default_GEN14_GA2 EmptyFeat
static uint16_t default_GEN15_GA1[] = {
S390_FEAT_VECTOR_ENH2,
S390_FEAT_GROUP_ENH_SORT,
S390_FEAT_GROUP_DEFLATE_CONVERSION,
S390_FEAT_VECTOR_BCD_ENH,
S390_FEAT_GROUP_MSA_EXT_9,
S390_FEAT_GROUP_MSA_EXT_9_PCKMO,
S390_FEAT_ETOKEN,
};
/* QEMU (CPU model) features */ /* QEMU (CPU model) features */
static uint16_t qemu_V2_11[] = { static uint16_t qemu_V2_11[] = {
@ -740,6 +765,7 @@ static CpuFeatDefSpec CpuFeatDef[] = {
CPU_FEAT_INITIALIZER(GEN13_GA2), CPU_FEAT_INITIALIZER(GEN13_GA2),
CPU_FEAT_INITIALIZER(GEN14_GA1), CPU_FEAT_INITIALIZER(GEN14_GA1),
CPU_FEAT_INITIALIZER(GEN14_GA2), CPU_FEAT_INITIALIZER(GEN14_GA2),
CPU_FEAT_INITIALIZER(GEN15_GA1),
}; };
#define FEAT_GROUP_INITIALIZER(_name) \ #define FEAT_GROUP_INITIALIZER(_name) \
@ -808,6 +834,11 @@ static void set_bits(uint64_t list[], BitSpec bits)
} }
} }
static inline void clear_bit(uint64_t list[], unsigned long nr)
{
list[nr / 64] &= ~(1ULL << (nr % 64));
}
static void print_feature_defs(void) static void print_feature_defs(void)
{ {
uint64_t base_feat[S390_FEAT_MAX / 64 + 1] = {}; uint64_t base_feat[S390_FEAT_MAX / 64 + 1] = {};
@ -818,6 +849,12 @@ static void print_feature_defs(void)
printf("\n/* CPU model feature list data */\n"); printf("\n/* CPU model feature list data */\n");
for (i = 0; i < ARRAY_SIZE(CpuFeatDef); i++) { for (i = 0; i < ARRAY_SIZE(CpuFeatDef); i++) {
/* With gen15 CSSKE and BPB are deprecated */
if (strcmp(CpuFeatDef[i].name, "S390_FEAT_LIST_GEN15_GA1") == 0) {
clear_bit(base_feat, S390_FEAT_CONDITIONAL_SSKE);
clear_bit(default_feat, S390_FEAT_CONDITIONAL_SSKE);
clear_bit(default_feat, S390_FEAT_BPB);
}
set_bits(base_feat, CpuFeatDef[i].base_bits); set_bits(base_feat, CpuFeatDef[i].base_bits);
/* add the base to the default features */ /* add the base to the default features */
set_bits(default_feat, CpuFeatDef[i].base_bits); set_bits(default_feat, CpuFeatDef[i].base_bits);