diff options
author | Stefan Reinauer <reinauer@chromium.org> | 2012-04-03 16:07:56 -0700 |
---|---|---|
committer | Stefan Reinauer <stefan.reinauer@coreboot.org> | 2012-04-06 02:13:12 +0200 |
commit | 6293d307684215a040bef54f1fb8479bfec0755c (patch) | |
tree | 34f740a1fe90882bbf849ddd0c99a95509d2c33f /src/arch | |
parent | 61f4a744c0df43dbce816195b0e8ae12fc7b2479 (diff) | |
download | coreboot-6293d307684215a040bef54f1fb8479bfec0755c.tar.gz coreboot-6293d307684215a040bef54f1fb8479bfec0755c.tar.bz2 coreboot-6293d307684215a040bef54f1fb8479bfec0755c.zip |
Factor out function to find driver for a CPU
This function can be used outside of the normal CPU setup
Change-Id: I810c63b8aff868a6f69d5b992bea1cfae5a5996b
Signed-off-by: Duncan Laurie <dlaurie@google.com>
Signed-off-by: Stefan Reinauer <reinauer@google.com>
Reviewed-on: http://review.coreboot.org/868
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/x86/include/arch/cpu.h | 3 | ||||
-rw-r--r-- | src/arch/x86/lib/cpu.c | 18 |
2 files changed, 14 insertions, 7 deletions
diff --git a/src/arch/x86/include/arch/cpu.h b/src/arch/x86/include/arch/cpu.h index 891e62bbcb98..604abde86113 100644 --- a/src/arch/x86/include/arch/cpu.h +++ b/src/arch/x86/include/arch/cpu.h @@ -154,6 +154,9 @@ struct cpu_driver { struct cpu_device_id *id_table; }; +struct device; +struct cpu_driver *find_cpu_driver(struct device *cpu); + struct cpu_info { device_t cpu; unsigned long index; diff --git a/src/arch/x86/lib/cpu.c b/src/arch/x86/lib/cpu.c index fac523f90231..98ede068efaa 100644 --- a/src/arch/x86/lib/cpu.c +++ b/src/arch/x86/lib/cpu.c @@ -211,23 +211,27 @@ static void identify_cpu(struct device *cpu) } } -static void set_cpu_ops(struct device *cpu) +struct cpu_driver *find_cpu_driver(struct device *cpu) { struct cpu_driver *driver; - cpu->ops = 0; for (driver = cpu_drivers; driver < ecpu_drivers; driver++) { struct cpu_device_id *id; - for(id = driver->id_table; id->vendor != X86_VENDOR_INVALID; id++) { + for (id = driver->id_table; + id->vendor != X86_VENDOR_INVALID; id++) { if ((cpu->vendor == id->vendor) && (cpu->device == id->device)) { - goto found; + return driver; } } } - return; -found: - cpu->ops = driver->ops; + return NULL; +} + +static void set_cpu_ops(struct device *cpu) +{ + struct cpu_driver *driver = find_cpu_driver(cpu); + cpu->ops = driver ? driver->ops : NULL; } void cpu_initialize(void) |