Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
b11ec63a
Commit
b11ec63a
authored
Jun 27, 2024
by
Rafael J. Wysocki
Browse files
Options
Browse Files
Download
Plain Diff
Merge back cpufreq material for v6.11.
parents
a1ff5978
acfc429e
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
205 additions
and
142 deletions
+205
-142
Documentation/admin-guide/pm/amd-pstate.rst
Documentation/admin-guide/pm/amd-pstate.rst
+1
-1
arch/x86/include/asm/cpufeatures.h
arch/x86/include/asm/cpufeatures.h
+1
-0
arch/x86/kernel/cpu/scattered.c
arch/x86/kernel/cpu/scattered.c
+1
-0
drivers/cpufreq/Kconfig.x86
drivers/cpufreq/Kconfig.x86
+1
-0
drivers/cpufreq/amd-pstate.c
drivers/cpufreq/amd-pstate.c
+121
-64
drivers/cpufreq/amd-pstate.h
drivers/cpufreq/amd-pstate.h
+1
-0
drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq.c
+23
-25
drivers/cpufreq/intel_pstate.c
drivers/cpufreq/intel_pstate.c
+52
-48
drivers/cpufreq/speedstep-centrino.c
drivers/cpufreq/speedstep-centrino.c
+4
-4
No files found.
Documentation/admin-guide/pm/amd-pstate.rst
View file @
b11ec63a
...
...
@@ -406,7 +406,7 @@ control its functionality at the system level. They are located in the
``/sys/devices/system/cpu/amd_pstate/`` directory and affect all CPUs.
``status``
Operation mode of the driver: "active", "passive" or "disable".
Operation mode of the driver: "active", "passive"
, "guided"
or "disable".
"active"
The driver is functional and in the ``active mode``
...
...
arch/x86/include/asm/cpufeatures.h
View file @
b11ec63a
...
...
@@ -470,6 +470,7 @@
#define X86_FEATURE_BHI_CTRL (21*32+ 2)
/* "" BHI_DIS_S HW control available */
#define X86_FEATURE_CLEAR_BHB_HW (21*32+ 3)
/* "" BHI_DIS_S HW control enabled */
#define X86_FEATURE_CLEAR_BHB_LOOP_ON_VMEXIT (21*32+ 4)
/* "" Clear branch history at vmexit using SW loop */
#define X86_FEATURE_FAST_CPPC (21*32 + 5)
/* "" AMD Fast CPPC */
/*
* BUG word(s)
...
...
arch/x86/kernel/cpu/scattered.c
View file @
b11ec63a
...
...
@@ -45,6 +45,7 @@ static const struct cpuid_bit cpuid_bits[] = {
{
X86_FEATURE_HW_PSTATE
,
CPUID_EDX
,
7
,
0x80000007
,
0
},
{
X86_FEATURE_CPB
,
CPUID_EDX
,
9
,
0x80000007
,
0
},
{
X86_FEATURE_PROC_FEEDBACK
,
CPUID_EDX
,
11
,
0x80000007
,
0
},
{
X86_FEATURE_FAST_CPPC
,
CPUID_EDX
,
15
,
0x80000007
,
0
},
{
X86_FEATURE_MBA
,
CPUID_EBX
,
6
,
0x80000008
,
0
},
{
X86_FEATURE_SMBA
,
CPUID_EBX
,
2
,
0x80000020
,
0
},
{
X86_FEATURE_BMEC
,
CPUID_EBX
,
3
,
0x80000020
,
0
},
...
...
drivers/cpufreq/Kconfig.x86
View file @
b11ec63a
...
...
@@ -71,6 +71,7 @@ config X86_AMD_PSTATE_DEFAULT_MODE
config X86_AMD_PSTATE_UT
tristate "selftest for AMD Processor P-State driver"
depends on X86 && ACPI_PROCESSOR
depends on X86_AMD_PSTATE
default n
help
This kernel module is used for testing. It's safe to say M here.
...
...
drivers/cpufreq/amd-pstate.c
View file @
b11ec63a
This diff is collapsed.
Click to expand it.
drivers/cpufreq/amd-pstate.h
View file @
b11ec63a
...
...
@@ -99,6 +99,7 @@ struct amd_cpudata {
u32
policy
;
u64
cppc_cap1_cached
;
bool
suspended
;
s16
epp_default
;
};
#endif
/* _LINUX_AMD_PSTATE_H */
drivers/cpufreq/cpufreq.c
View file @
b11ec63a
...
...
@@ -608,16 +608,15 @@ EXPORT_SYMBOL_GPL(cpufreq_policy_transition_delay_us);
static
ssize_t
show_boost
(
struct
kobject
*
kobj
,
struct
kobj_attribute
*
attr
,
char
*
buf
)
{
return
s
printf
(
buf
,
"%d
\n
"
,
cpufreq_driver
->
boost_enabled
);
return
s
ysfs_emit
(
buf
,
"%d
\n
"
,
cpufreq_driver
->
boost_enabled
);
}
static
ssize_t
store_boost
(
struct
kobject
*
kobj
,
struct
kobj_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
int
ret
,
enable
;
bool
enable
;
ret
=
sscanf
(
buf
,
"%d"
,
&
enable
);
if
(
ret
!=
1
||
enable
<
0
||
enable
>
1
)
if
(
kstrtobool
(
buf
,
&
enable
))
return
-
EINVAL
;
if
(
cpufreq_boost_trigger_state
(
enable
))
{
...
...
@@ -641,10 +640,10 @@ static ssize_t show_local_boost(struct cpufreq_policy *policy, char *buf)
static
ssize_t
store_local_boost
(
struct
cpufreq_policy
*
policy
,
const
char
*
buf
,
size_t
count
)
{
int
ret
,
enable
;
int
ret
;
bool
enable
;
ret
=
kstrtoint
(
buf
,
10
,
&
enable
);
if
(
ret
||
enable
<
0
||
enable
>
1
)
if
(
kstrtobool
(
buf
,
&
enable
))
return
-
EINVAL
;
if
(
!
cpufreq_driver
->
boost_enabled
)
...
...
@@ -739,7 +738,7 @@ static struct cpufreq_governor *cpufreq_parse_governor(char *str_governor)
static ssize_t show_##file_name \
(struct cpufreq_policy *policy, char *buf) \
{ \
return s
printf
(buf, "%u\n", policy->object); \
return s
ysfs_emit
(buf, "%u\n", policy->object); \
}
show_one
(
cpuinfo_min_freq
,
cpuinfo
.
min_freq
);
...
...
@@ -760,11 +759,11 @@ static ssize_t show_scaling_cur_freq(struct cpufreq_policy *policy, char *buf)
freq
=
arch_freq_get_on_cpu
(
policy
->
cpu
);
if
(
freq
)
ret
=
s
printf
(
buf
,
"%u
\n
"
,
freq
);
ret
=
s
ysfs_emit
(
buf
,
"%u
\n
"
,
freq
);
else
if
(
cpufreq_driver
->
setpolicy
&&
cpufreq_driver
->
get
)
ret
=
s
printf
(
buf
,
"%u
\n
"
,
cpufreq_driver
->
get
(
policy
->
cpu
));
ret
=
s
ysfs_emit
(
buf
,
"%u
\n
"
,
cpufreq_driver
->
get
(
policy
->
cpu
));
else
ret
=
s
printf
(
buf
,
"%u
\n
"
,
policy
->
cur
);
ret
=
s
ysfs_emit
(
buf
,
"%u
\n
"
,
policy
->
cur
);
return
ret
;
}
...
...
@@ -798,9 +797,9 @@ static ssize_t show_cpuinfo_cur_freq(struct cpufreq_policy *policy,
unsigned
int
cur_freq
=
__cpufreq_get
(
policy
);
if
(
cur_freq
)
return
s
printf
(
buf
,
"%u
\n
"
,
cur_freq
);
return
s
ysfs_emit
(
buf
,
"%u
\n
"
,
cur_freq
);
return
s
printf
(
buf
,
"<unknown>
\n
"
);
return
s
ysfs_emit
(
buf
,
"<unknown>
\n
"
);
}
/*
...
...
@@ -809,12 +808,11 @@ static ssize_t show_cpuinfo_cur_freq(struct cpufreq_policy *policy,
static
ssize_t
show_scaling_governor
(
struct
cpufreq_policy
*
policy
,
char
*
buf
)
{
if
(
policy
->
policy
==
CPUFREQ_POLICY_POWERSAVE
)
return
s
printf
(
buf
,
"powersave
\n
"
);
return
s
ysfs_emit
(
buf
,
"powersave
\n
"
);
else
if
(
policy
->
policy
==
CPUFREQ_POLICY_PERFORMANCE
)
return
s
printf
(
buf
,
"performance
\n
"
);
return
s
ysfs_emit
(
buf
,
"performance
\n
"
);
else
if
(
policy
->
governor
)
return
scnprintf
(
buf
,
CPUFREQ_NAME_PLEN
,
"%s
\n
"
,
policy
->
governor
->
name
);
return
sysfs_emit
(
buf
,
"%s
\n
"
,
policy
->
governor
->
name
);
return
-
EINVAL
;
}
...
...
@@ -873,7 +871,7 @@ static ssize_t show_scaling_available_governors(struct cpufreq_policy *policy,
struct
cpufreq_governor
*
t
;
if
(
!
has_target
())
{
i
+=
s
printf
(
buf
,
"performance powersave"
);
i
+=
s
ysfs_emit
(
buf
,
"performance powersave"
);
goto
out
;
}
...
...
@@ -882,11 +880,11 @@ static ssize_t show_scaling_available_governors(struct cpufreq_policy *policy,
if
(
i
>=
(
ssize_t
)
((
PAGE_SIZE
/
sizeof
(
char
))
-
(
CPUFREQ_NAME_LEN
+
2
)))
break
;
i
+=
s
cnprintf
(
&
buf
[
i
],
CPUFREQ_NAME_PLEN
,
"%s "
,
t
->
name
);
i
+=
s
ysfs_emit_at
(
buf
,
i
,
"%s "
,
t
->
name
);
}
mutex_unlock
(
&
cpufreq_governor_mutex
);
out:
i
+=
s
printf
(
&
buf
[
i
]
,
"
\n
"
);
i
+=
s
ysfs_emit_at
(
buf
,
i
,
"
\n
"
);
return
i
;
}
...
...
@@ -896,7 +894,7 @@ ssize_t cpufreq_show_cpus(const struct cpumask *mask, char *buf)
unsigned
int
cpu
;
for_each_cpu
(
cpu
,
mask
)
{
i
+=
s
cnprintf
(
&
buf
[
i
],
(
PAGE_SIZE
-
i
-
2
)
,
"%u "
,
cpu
);
i
+=
s
ysfs_emit_at
(
buf
,
i
,
"%u "
,
cpu
);
if
(
i
>=
(
PAGE_SIZE
-
5
))
break
;
}
...
...
@@ -904,7 +902,7 @@ ssize_t cpufreq_show_cpus(const struct cpumask *mask, char *buf)
/* Remove the extra space at the end */
i
--
;
i
+=
s
printf
(
&
buf
[
i
]
,
"
\n
"
);
i
+=
s
ysfs_emit_at
(
buf
,
i
,
"
\n
"
);
return
i
;
}
EXPORT_SYMBOL_GPL
(
cpufreq_show_cpus
);
...
...
@@ -947,7 +945,7 @@ static ssize_t store_scaling_setspeed(struct cpufreq_policy *policy,
static
ssize_t
show_scaling_setspeed
(
struct
cpufreq_policy
*
policy
,
char
*
buf
)
{
if
(
!
policy
->
governor
||
!
policy
->
governor
->
show_setspeed
)
return
s
printf
(
buf
,
"<unsupported>
\n
"
);
return
s
ysfs_emit
(
buf
,
"<unsupported>
\n
"
);
return
policy
->
governor
->
show_setspeed
(
policy
,
buf
);
}
...
...
@@ -961,8 +959,8 @@ static ssize_t show_bios_limit(struct cpufreq_policy *policy, char *buf)
int
ret
;
ret
=
cpufreq_driver
->
bios_limit
(
policy
->
cpu
,
&
limit
);
if
(
!
ret
)
return
s
printf
(
buf
,
"%u
\n
"
,
limit
);
return
s
printf
(
buf
,
"%u
\n
"
,
policy
->
cpuinfo
.
max_freq
);
return
s
ysfs_emit
(
buf
,
"%u
\n
"
,
limit
);
return
s
ysfs_emit
(
buf
,
"%u
\n
"
,
policy
->
cpuinfo
.
max_freq
);
}
cpufreq_freq_attr_ro_perm
(
cpuinfo_cur_freq
,
0400
);
...
...
drivers/cpufreq/intel_pstate.c
View file @
b11ec63a
...
...
@@ -300,6 +300,7 @@ static struct cpufreq_driver *intel_pstate_driver __read_mostly;
#define HYBRID_SCALING_FACTOR 78741
#define HYBRID_SCALING_FACTOR_MTL 80000
#define HYBRID_SCALING_FACTOR_LNL 86957
static
int
hybrid_scaling_factor
=
HYBRID_SCALING_FACTOR
;
...
...
@@ -1631,7 +1632,7 @@ void notify_hwp_interrupt(void)
unsigned
long
flags
;
u64
value
;
if
(
!
hwp_active
||
!
boot_cpu_has
(
X86_FEATURE_HWP_NOTIFY
))
if
(
!
hwp_active
||
!
cpu_feature_enabled
(
X86_FEATURE_HWP_NOTIFY
))
return
;
rdmsrl_safe
(
MSR_HWP_STATUS
,
&
value
);
...
...
@@ -1659,7 +1660,7 @@ static void intel_pstate_disable_hwp_interrupt(struct cpudata *cpudata)
{
bool
cancel_work
;
if
(
!
boot_cpu_has
(
X86_FEATURE_HWP_NOTIFY
))
if
(
!
cpu_feature_enabled
(
X86_FEATURE_HWP_NOTIFY
))
return
;
/* wrmsrl_on_cpu has to be outside spinlock as this can result in IPC */
...
...
@@ -2367,54 +2368,54 @@ static const struct pstate_funcs knl_funcs = {
.
get_val
=
core_get_val
,
};
#define X86_MATCH(model, policy) \
X86_MATCH_VENDOR_FAM_MODEL_FEATURE(INTEL, 6, INTEL_FAM6_##model, \
X86_FEATURE_APERFMPERF, &policy)
#define X86_MATCH(vfm, policy) \
X86_MATCH_VFM_FEATURE(vfm, X86_FEATURE_APERFMPERF, &policy)
static
const
struct
x86_cpu_id
intel_pstate_cpu_ids
[]
=
{
X86_MATCH
(
SANDYBRIDGE
,
core_funcs
),
X86_MATCH
(
SANDYBRIDGE_X
,
core_funcs
),
X86_MATCH
(
ATOM_SILVERMONT
,
silvermont_funcs
),
X86_MATCH
(
IVYBRIDGE
,
core_funcs
),
X86_MATCH
(
HASWELL
,
core_funcs
),
X86_MATCH
(
BROADWELL
,
core_funcs
),
X86_MATCH
(
IVYBRIDGE_X
,
core_funcs
),
X86_MATCH
(
HASWELL_X
,
core_funcs
),
X86_MATCH
(
HASWELL_L
,
core_funcs
),
X86_MATCH
(
HASWELL_G
,
core_funcs
),
X86_MATCH
(
BROADWELL_G
,
core_funcs
),
X86_MATCH
(
ATOM_AIRMONT
,
airmont_funcs
),
X86_MATCH
(
SKYLAKE_L
,
core_funcs
),
X86_MATCH
(
BROADWELL_X
,
core_funcs
),
X86_MATCH
(
SKYLAKE
,
core_funcs
),
X86_MATCH
(
BROADWELL_D
,
core_funcs
),
X86_MATCH
(
XEON_PHI_KNL
,
knl_funcs
),
X86_MATCH
(
XEON_PHI_KNM
,
knl_funcs
),
X86_MATCH
(
ATOM_GOLDMONT
,
core_funcs
),
X86_MATCH
(
ATOM_GOLDMONT_PLUS
,
core_funcs
),
X86_MATCH
(
SKYLAKE_X
,
core_funcs
),
X86_MATCH
(
COMETLAKE
,
core_funcs
),
X86_MATCH
(
ICELAKE_X
,
core_funcs
),
X86_MATCH
(
TIGERLAKE
,
core_funcs
),
X86_MATCH
(
SAPPHIRERAPIDS_X
,
core_funcs
),
X86_MATCH
(
EMERALDRAPIDS_X
,
core_funcs
),
X86_MATCH
(
INTEL_
SANDYBRIDGE
,
core_funcs
),
X86_MATCH
(
INTEL_SANDYBRIDGE_X
,
core_funcs
),
X86_MATCH
(
INTEL_
ATOM_SILVERMONT
,
silvermont_funcs
),
X86_MATCH
(
I
NTEL_I
VYBRIDGE
,
core_funcs
),
X86_MATCH
(
INTEL_
HASWELL
,
core_funcs
),
X86_MATCH
(
INTEL_
BROADWELL
,
core_funcs
),
X86_MATCH
(
I
NTEL_I
VYBRIDGE_X
,
core_funcs
),
X86_MATCH
(
INTEL_
HASWELL_X
,
core_funcs
),
X86_MATCH
(
INTEL_
HASWELL_L
,
core_funcs
),
X86_MATCH
(
INTEL_
HASWELL_G
,
core_funcs
),
X86_MATCH
(
INTEL_
BROADWELL_G
,
core_funcs
),
X86_MATCH
(
INTEL_
ATOM_AIRMONT
,
airmont_funcs
),
X86_MATCH
(
INTEL_
SKYLAKE_L
,
core_funcs
),
X86_MATCH
(
INTEL_
BROADWELL_X
,
core_funcs
),
X86_MATCH
(
INTEL_
SKYLAKE
,
core_funcs
),
X86_MATCH
(
INTEL_
BROADWELL_D
,
core_funcs
),
X86_MATCH
(
INTEL_
XEON_PHI_KNL
,
knl_funcs
),
X86_MATCH
(
INTEL_
XEON_PHI_KNM
,
knl_funcs
),
X86_MATCH
(
INTEL_ATOM_GOLDMONT
,
core_funcs
),
X86_MATCH
(
INTEL_
ATOM_GOLDMONT_PLUS
,
core_funcs
),
X86_MATCH
(
INTEL_
SKYLAKE_X
,
core_funcs
),
X86_MATCH
(
INTEL_
COMETLAKE
,
core_funcs
),
X86_MATCH
(
I
NTEL_I
CELAKE_X
,
core_funcs
),
X86_MATCH
(
INTEL_
TIGERLAKE
,
core_funcs
),
X86_MATCH
(
INTEL_
SAPPHIRERAPIDS_X
,
core_funcs
),
X86_MATCH
(
INTEL_EMERALDRAPIDS_X
,
core_funcs
),
{}
};
MODULE_DEVICE_TABLE
(
x86cpu
,
intel_pstate_cpu_ids
);
#ifdef CONFIG_ACPI
static
const
struct
x86_cpu_id
intel_pstate_cpu_oob_ids
[]
__initconst
=
{
X86_MATCH
(
BROADWELL_D
,
core_funcs
),
X86_MATCH
(
BROADWELL_X
,
core_funcs
),
X86_MATCH
(
SKYLAKE_X
,
core_funcs
),
X86_MATCH
(
ICELAKE_X
,
core_funcs
),
X86_MATCH
(
SAPPHIRERAPIDS_X
,
core_funcs
),
X86_MATCH
(
INTEL_BROADWELL_D
,
core_funcs
),
X86_MATCH
(
INTEL_BROADWELL_X
,
core_funcs
),
X86_MATCH
(
INTEL_SKYLAKE_X
,
core_funcs
),
X86_MATCH
(
INTEL_ICELAKE_X
,
core_funcs
),
X86_MATCH
(
INTEL_SAPPHIRERAPIDS_X
,
core_funcs
),
X86_MATCH
(
INTEL_EMERALDRAPIDS_X
,
core_funcs
),
{}
};
#endif
static
const
struct
x86_cpu_id
intel_pstate_cpu_ee_disable_ids
[]
=
{
X86_MATCH
(
KABYLAKE
,
core_funcs
),
X86_MATCH
(
INTEL_
KABYLAKE
,
core_funcs
),
{}
};
...
...
@@ -3350,14 +3351,13 @@ static inline void intel_pstate_request_control_from_smm(void) {}
#define INTEL_PSTATE_HWP_BROADWELL 0x01
#define X86_MATCH_HWP(model, hwp_mode) \
X86_MATCH_VENDOR_FAM_MODEL_FEATURE(INTEL, 6, INTEL_FAM6_##model, \
X86_FEATURE_HWP, hwp_mode)
#define X86_MATCH_HWP(vfm, hwp_mode) \
X86_MATCH_VFM_FEATURE(vfm, X86_FEATURE_HWP, hwp_mode)
static
const
struct
x86_cpu_id
hwp_support_ids
[]
__initconst
=
{
X86_MATCH_HWP
(
BROADWELL_X
,
INTEL_PSTATE_HWP_BROADWELL
),
X86_MATCH_HWP
(
BROADWELL_D
,
INTEL_PSTATE_HWP_BROADWELL
),
X86_MATCH_HWP
(
ANY
,
0
),
X86_MATCH_HWP
(
INTEL_
BROADWELL_X
,
INTEL_PSTATE_HWP_BROADWELL
),
X86_MATCH_HWP
(
INTEL_
BROADWELL_D
,
INTEL_PSTATE_HWP_BROADWELL
),
X86_MATCH_HWP
(
INTEL_
ANY
,
0
),
{}
};
...
...
@@ -3390,15 +3390,19 @@ static const struct x86_cpu_id intel_epp_default[] = {
* which can result in one core turbo frequency for
* AlderLake Mobile CPUs.
*/
X86_MATCH_INTEL_FAM6_MODEL
(
ALDERLAKE_L
,
HWP_SET_DEF_BALANCE_PERF_EPP
(
102
)),
X86_MATCH_INTEL_FAM6_MODEL
(
SAPPHIRERAPIDS_X
,
HWP_SET_DEF_BALANCE_PERF_EPP
(
32
)),
X86_MATCH_INTEL_FAM6_MODEL
(
METEORLAKE_L
,
HWP_SET_EPP_VALUES
(
HWP_EPP_POWERSAVE
,
HWP_EPP_BALANCE_POWERSAVE
,
115
,
16
)),
X86_MATCH_VFM
(
INTEL_ALDERLAKE_L
,
HWP_SET_DEF_BALANCE_PERF_EPP
(
102
)),
X86_MATCH_VFM
(
INTEL_SAPPHIRERAPIDS_X
,
HWP_SET_DEF_BALANCE_PERF_EPP
(
32
)),
X86_MATCH_VFM
(
INTEL_METEORLAKE_L
,
HWP_SET_EPP_VALUES
(
HWP_EPP_POWERSAVE
,
179
,
64
,
16
)),
X86_MATCH_VFM
(
INTEL_ARROWLAKE
,
HWP_SET_EPP_VALUES
(
HWP_EPP_POWERSAVE
,
179
,
64
,
16
)),
{}
};
static
const
struct
x86_cpu_id
intel_hybrid_scaling_factor
[]
=
{
X86_MATCH_INTEL_FAM6_MODEL
(
METEORLAKE_L
,
HYBRID_SCALING_FACTOR_MTL
),
X86_MATCH_VFM
(
INTEL_METEORLAKE_L
,
HYBRID_SCALING_FACTOR_MTL
),
X86_MATCH_VFM
(
INTEL_ARROWLAKE
,
HYBRID_SCALING_FACTOR_MTL
),
X86_MATCH_VFM
(
INTEL_LUNARLAKE_M
,
HYBRID_SCALING_FACTOR_LNL
),
{}
};
...
...
drivers/cpufreq/speedstep-centrino.c
View file @
b11ec63a
...
...
@@ -520,10 +520,10 @@ static struct cpufreq_driver centrino_driver = {
* or ASCII model IDs.
*/
static
const
struct
x86_cpu_id
centrino_ids
[]
=
{
X86_MATCH_V
ENDOR_FAM_MODEL_FEATURE
(
INTEL
,
6
,
9
,
X86_FEATURE_EST
,
NULL
),
X86_MATCH_V
ENDOR_FAM_MODEL_FEATURE
(
INTEL
,
6
,
13
,
X86_FEATURE_EST
,
NULL
),
X86_MATCH_V
ENDOR_FAM_MODEL_FEATURE
(
INTEL
,
15
,
3
,
X86_FEATURE_EST
,
NULL
),
X86_MATCH_V
ENDOR_FAM_MODEL_FEATURE
(
INTEL
,
15
,
4
,
X86_FEATURE_EST
,
NULL
),
X86_MATCH_V
FM_FEATURE
(
IFM
(
6
,
9
)
,
X86_FEATURE_EST
,
NULL
),
X86_MATCH_V
FM_FEATURE
(
IFM
(
6
,
13
)
,
X86_FEATURE_EST
,
NULL
),
X86_MATCH_V
FM_FEATURE
(
IFM
(
15
,
3
)
,
X86_FEATURE_EST
,
NULL
),
X86_MATCH_V
FM_FEATURE
(
IFM
(
15
,
4
)
,
X86_FEATURE_EST
,
NULL
),
{}
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment