From 59b36f1026090ea9b39ca2bc8386c8addf1b03d6 Mon Sep 17 00:00:00 2001 From: Anton Kochkov Date: Sat, 21 Jul 2012 07:29:48 +0400 Subject: [PATCH] msrtool: Factor out cpuid() from target probe functions into main() Almost all probe functions called cpuid(). Those calls are replaced by a single cpuid() call in main() and a new parameter to the target probe functions with the cpuid() result. The vendor_t and struct cpuid_t definitions are moved closer to the top of msrtool.h and the vendor_t enum is reformatted to simplify addition of further values. Change-Id: Icd615636207499cfa46b8b99bf819ef8ca2d97c0 Signed-off-by: Anton Kochkov Signed-off-by: Peter Stuge Reviewed-on: http://review.coreboot.org/1259 Tested-by: build bot (Jenkins) --- util/msrtool/cs5536.c | 2 +- util/msrtool/geodegx2.c | 3 +- util/msrtool/geodelx.c | 3 +- util/msrtool/intel_core1.c | 3 +- util/msrtool/intel_core2_early.c | 3 +- util/msrtool/intel_core2_later.c | 3 +- util/msrtool/intel_nehalem.c | 3 +- util/msrtool/intel_pentium3.c | 3 +- util/msrtool/intel_pentium3_early.c | 3 +- util/msrtool/intel_pentium4_early.c | 3 +- util/msrtool/intel_pentium4_later.c | 3 +- util/msrtool/k8.c | 3 +- util/msrtool/msrtool.c | 3 +- util/msrtool/msrtool.h | 52 +++++++++++++++-------------- 14 files changed, 41 insertions(+), 49 deletions(-) diff --git a/util/msrtool/cs5536.c b/util/msrtool/cs5536.c index 666a93aa6b..656383d1a4 100644 --- a/util/msrtool/cs5536.c +++ b/util/msrtool/cs5536.c @@ -19,7 +19,7 @@ #include "msrtool.h" -int cs5536_probe(const struct targetdef *target) { +int cs5536_probe(const struct targetdef *target, const struct cpuid_t *id) { return (NULL != pci_dev_find(0x1022, 0x2090)); } diff --git a/util/msrtool/geodegx2.c b/util/msrtool/geodegx2.c index ae5d887c2d..29d1a13c8f 100644 --- a/util/msrtool/geodegx2.c +++ b/util/msrtool/geodegx2.c @@ -20,8 +20,7 @@ #include "msrtool.h" -int geodegx2_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int geodegx2_probe(const struct targetdef *target, const struct cpuid_t *id) { return 5 == id->family && 5 == id->model; } diff --git a/util/msrtool/geodelx.c b/util/msrtool/geodelx.c index 063e0311b4..a8b685fa65 100644 --- a/util/msrtool/geodelx.c +++ b/util/msrtool/geodelx.c @@ -19,8 +19,7 @@ #include "msrtool.h" -int geodelx_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int geodelx_probe(const struct targetdef *target, const struct cpuid_t *id) { return 5 == id->family && 10 == id->model; } diff --git a/util/msrtool/intel_core1.c b/util/msrtool/intel_core1.c index 1ebc7df7df..73e09fd424 100644 --- a/util/msrtool/intel_core1.c +++ b/util/msrtool/intel_core1.c @@ -19,8 +19,7 @@ #include "msrtool.h" -int intel_core1_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int intel_core1_probe(const struct targetdef *target, const struct cpuid_t *id) { return ((0x6 == id->family) && (0xe == id->model)); } diff --git a/util/msrtool/intel_core2_early.c b/util/msrtool/intel_core2_early.c index 674d7db8da..84711b6123 100644 --- a/util/msrtool/intel_core2_early.c +++ b/util/msrtool/intel_core2_early.c @@ -19,8 +19,7 @@ #include "msrtool.h" -int intel_core2_early_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int intel_core2_early_probe(const struct targetdef *target, const struct cpuid_t *id) { return ((0x6 == id->family) && (0xf == id->model)); } diff --git a/util/msrtool/intel_core2_later.c b/util/msrtool/intel_core2_later.c index 1c06c43557..541907a809 100644 --- a/util/msrtool/intel_core2_later.c +++ b/util/msrtool/intel_core2_later.c @@ -19,8 +19,7 @@ #include "msrtool.h" -int intel_core2_later_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int intel_core2_later_probe(const struct targetdef *target, const struct cpuid_t *id) { return ((0x6 == id->family)&(0x17 == id->model)); } diff --git a/util/msrtool/intel_nehalem.c b/util/msrtool/intel_nehalem.c index e69fe57001..0ffc72dd74 100644 --- a/util/msrtool/intel_nehalem.c +++ b/util/msrtool/intel_nehalem.c @@ -19,8 +19,7 @@ #include "msrtool.h" -int intel_nehalem_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int intel_nehalem_probe(const struct targetdef *target, const struct cpuid_t *id) { return ((0x6 == id->family) && ( (0x1a == id->model) || (0x1e == id->model) || diff --git a/util/msrtool/intel_pentium3.c b/util/msrtool/intel_pentium3.c index 442ae3d323..05fbbf66d7 100644 --- a/util/msrtool/intel_pentium3.c +++ b/util/msrtool/intel_pentium3.c @@ -19,8 +19,7 @@ #include "msrtool.h" -int intel_pentium3_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int intel_pentium3_probe(const struct targetdef *target, const struct cpuid_t *id) { return ((0x6 == id->family) && ( (0xa == id->model) || (0xb == id->model) diff --git a/util/msrtool/intel_pentium3_early.c b/util/msrtool/intel_pentium3_early.c index ced303778b..b5ee345a42 100644 --- a/util/msrtool/intel_pentium3_early.c +++ b/util/msrtool/intel_pentium3_early.c @@ -19,8 +19,7 @@ #include "msrtool.h" -int intel_pentium3_early_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int intel_pentium3_early_probe(const struct targetdef *target, const struct cpuid_t *id) { return ((0x6 == id->family) && ( (0x7 == id->model) || (0x8 == id->model) diff --git a/util/msrtool/intel_pentium4_early.c b/util/msrtool/intel_pentium4_early.c index cb6c53e4da..0c6b83bfaa 100644 --- a/util/msrtool/intel_pentium4_early.c +++ b/util/msrtool/intel_pentium4_early.c @@ -19,8 +19,7 @@ #include "msrtool.h" -int intel_pentium4_early_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int intel_pentium4_early_probe(const struct targetdef *target, const struct cpuid_t *id) { return ((0xf == id->family) && (0x2 == id->model)); } diff --git a/util/msrtool/intel_pentium4_later.c b/util/msrtool/intel_pentium4_later.c index 7c077eef49..7b7148f891 100644 --- a/util/msrtool/intel_pentium4_later.c +++ b/util/msrtool/intel_pentium4_later.c @@ -19,8 +19,7 @@ #include "msrtool.h" -int intel_pentium4_later_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int intel_pentium4_later_probe(const struct targetdef *target, const struct cpuid_t *id) { return ((0xf == id->family) && ( (0x3 == id->model) || (0x4 == id->model) diff --git a/util/msrtool/k8.c b/util/msrtool/k8.c index 6d2500d40a..6154db5cfb 100644 --- a/util/msrtool/k8.c +++ b/util/msrtool/k8.c @@ -19,8 +19,7 @@ #include "msrtool.h" -int k8_probe(const struct targetdef *target) { - struct cpuid_t *id = cpuid(); +int k8_probe(const struct targetdef *target, const struct cpuid_t *id) { return 0xF == id->family; } diff --git a/util/msrtool/msrtool.c b/util/msrtool/msrtool.c index 433fc32e43..434d332126 100644 --- a/util/msrtool/msrtool.c +++ b/util/msrtool/msrtool.c @@ -270,6 +270,7 @@ int main(int argc, char *argv[]) { int ret = 1; const struct sysdef *s; const struct targetdef *t; + const struct cpuid_t *id = cpuid(); uint8_t tn, listmsrs = 0, listknown = 0, input = 0; uint32_t addr = 0; const char *streamfn = NULL, *difffn = NULL; @@ -357,7 +358,7 @@ int main(int argc, char *argv[]) { else for (t = alltargets; !TARGET_ISEOT(*t); t++) { printf_verbose("Probing for target %s: %s\n", t->name, t->prettyname); - if (!t->probe(t)) + if (!t->probe(t, id)) continue; printf_quiet("Detected target %s: %s\n", t->name, t->prettyname); add_target(t); diff --git a/util/msrtool/msrtool.h b/util/msrtool/msrtool.h index 73671e5ad3..2c13862bf0 100644 --- a/util/msrtool/msrtool.h +++ b/util/msrtool/msrtool.h @@ -97,10 +97,24 @@ struct msrdef { #define MAX_CORES 8 +typedef enum { + VENDOR_INTEL = 1, + VENDOR_AMD = 2, +} vendor_t; + +struct cpuid_t { + uint8_t family; + uint8_t model; + uint8_t stepping; + uint8_t ext_family; + uint8_t ext_model; + vendor_t vendor; +}; + struct targetdef { const char *name; const char *prettyname; - int (*probe)(const struct targetdef *target); + int (*probe)(const struct targetdef *target, const struct cpuid_t *id); const struct msrdef *msrs; }; @@ -126,18 +140,6 @@ struct sysdef { #define SYSTEM_EOT .name = NULL #define SYSTEM_ISEOT(s) (NULL == (s).name) -typedef enum { VENDOR_INTEL = 1, VENDOR_AMD = 2 } vendor_t; - -struct cpuid_t { - uint8_t family; - uint8_t model; - uint8_t stepping; - uint8_t ext_family; - uint8_t ext_model; - vendor_t vendor; -}; - - extern const struct sysdef *sys; extern uint8_t targets_found; @@ -201,51 +203,51 @@ extern int freebsd_rdmsr(uint8_t cpu, uint32_t addr, struct msr *val); /** target externs **/ /* geodegx2.c */ -extern int geodegx2_probe(const struct targetdef *t); +extern int geodegx2_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef geodegx2_msrs[]; /* geodelx.c */ -extern int geodelx_probe(const struct targetdef *t); +extern int geodelx_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef geodelx_msrs[]; /* cs5536.c */ -extern int cs5536_probe(const struct targetdef *t); +extern int cs5536_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef cs5536_msrs[]; /* k8.c */ -extern int k8_probe(const struct targetdef *t); +extern int k8_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef k8_msrs[]; /* intel_pentium3_early.c */ -extern int intel_pentium3_early_probe(const struct targetdef *t); +extern int intel_pentium3_early_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef intel_pentium3_early_msrs[]; /* intel_pentium3.c */ -extern int intel_pentium3_probe(const struct targetdef *t); +extern int intel_pentium3_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef intel_pentium3_msrs[]; /* intel_core1.c */ -extern int intel_core1_probe(const struct targetdef *t); +extern int intel_core1_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef intel_core1_msrs[]; /* intel_core2_early.c */ -extern int intel_core2_early_probe(const struct targetdef *t); +extern int intel_core2_early_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef intel_core2_early_msrs[]; /* intel_core2_later.c */ -extern int intel_core2_later_probe(const struct targetdef *t); +extern int intel_core2_later_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef intel_core2_later_msrs[]; /* intel_pentium4_early.c */ -extern int intel_pentium4_early_probe(const struct targetdef *t); +extern int intel_pentium4_early_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef intel_pentium4_early_msrs[]; /* intel_pentium4_later.c */ -extern int intel_pentium4_later_probe(const struct targetdef *t); +extern int intel_pentium4_later_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef intel_pentium4_later_msrs[]; /* intel_nehalem.c */ -extern int intel_nehalem_probe(const struct targetdef *t); +extern int intel_nehalem_probe(const struct targetdef *t, const struct cpuid_t *id); extern const struct msrdef intel_nehalem_msrs[]; #endif /* MSRTOOL_H */