|
|
@@ -123,6 +123,18 @@ cpuid_feature_extract_field(u64 features, int field)
|
|
|
return cpuid_feature_extract_field_width(features, field, 4);
|
|
|
}
|
|
|
|
|
|
+static inline unsigned int __attribute_const__
|
|
|
+cpuid_feature_extract_unsigned_field_width(u64 features, int field, int width)
|
|
|
+{
|
|
|
+ return (u64)(features << (64 - width - field)) >> (64 - width);
|
|
|
+}
|
|
|
+
|
|
|
+static inline unsigned int __attribute_const__
|
|
|
+cpuid_feature_extract_unsigned_field(u64 features, int field)
|
|
|
+{
|
|
|
+ return cpuid_feature_extract_unsigned_field_width(features, field, 4);
|
|
|
+}
|
|
|
+
|
|
|
static inline u64 arm64_ftr_mask(struct arm64_ftr_bits *ftrp)
|
|
|
{
|
|
|
return (u64)GENMASK(ftrp->shift + ftrp->width - 1, ftrp->shift);
|