aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorDmitry Adamushko <dmitry.adamushko@gmail.com>2008-09-23 16:56:35 -0400
committerIngo Molnar <mingo@elte.hu>2008-09-24 04:32:37 -0400
commit2f9284e4e3be7b0b4d8d0638f9805603069a762d (patch)
tree7d47a26674a5120cc930c4fcea5bfead7b79c28b /arch
parente6aa0f07cb5e81a7cbeaf3be6e2101234c2f0d30 (diff)
x86, microcode_amd: cleanup, mark request_microcode_user() as unsupported
(1) mark mc_size in generic_load_microcode() as unitialized_var to avoid gcc's (false) warning; (2) mark request_microcode_user() as unsupported. The required changes can be added later. Note, we don't break any user-space interfaces here, as there were no kernels with support for AMD-specific ucode update yet. The ucode has to be updated via 'firmware'. Signed-off-by: Dmitry Adamushko <dmitry.adamushko@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kernel/microcode_amd.c36
1 files changed, 4 insertions, 32 deletions
diff --git a/arch/x86/kernel/microcode_amd.c b/arch/x86/kernel/microcode_amd.c
index 829415208ff8..7a1f8eeac2c7 100644
--- a/arch/x86/kernel/microcode_amd.c
+++ b/arch/x86/kernel/microcode_amd.c
@@ -120,29 +120,7 @@ static int get_matching_microcode(int cpu, void *mc, int rev)
120 unsigned int equiv_cpu_id = 0x00; 120 unsigned int equiv_cpu_id = 0x00;
121 unsigned int i = 0; 121 unsigned int i = 0;
122 122
123 /*
124 * FIXME! dimm: do we need this? Why an update via /dev/... is different
125 * from the one via firmware?
126 *
127 * This is a tricky part. We might be called from a write operation
128 * to the device file instead of the usual process of firmware
129 * loading. This routine needs to be able to distinguish both
130 * cases. This is done by checking if there alread is a equivalent
131 * CPU table installed. If not, we're written through
132 * /dev/cpu/microcode.
133 * Since we ignore all checks. The error case in which going through
134 * firmware loading and that table is not loaded has already been
135 * checked earlier.
136 */
137 BUG_ON(equiv_cpu_table == NULL); 123 BUG_ON(equiv_cpu_table == NULL);
138#if 0
139 if (equiv_cpu_table == NULL) {
140 printk(KERN_INFO "microcode: CPU%d microcode update with "
141 "version 0x%x (current=0x%x)\n",
142 cpu, mc_header->patch_id, uci->cpu_sig.rev);
143 goto out;
144 }
145#endif
146 current_cpu_id = cpuid_eax(0x00000001); 124 current_cpu_id = cpuid_eax(0x00000001);
147 125
148 while (equiv_cpu_table[i].installed_cpu != 0) { 126 while (equiv_cpu_table[i].installed_cpu != 0) {
@@ -362,7 +340,7 @@ static int generic_load_microcode(int cpu, void *data, size_t size,
362 leftover = size - offset; 340 leftover = size - offset;
363 341
364 while (leftover) { 342 while (leftover) {
365 unsigned int mc_size; 343 unsigned int uninitialized_var(mc_size);
366 struct microcode_header_amd *mc_header; 344 struct microcode_header_amd *mc_header;
367 345
368 mc = get_next_ucode(ucode_ptr, leftover, get_ucode_data, &mc_size); 346 mc = get_next_ucode(ucode_ptr, leftover, get_ucode_data, &mc_size);
@@ -428,17 +406,11 @@ static int request_microcode_fw(int cpu, struct device *device)
428 return ret; 406 return ret;
429} 407}
430 408
431static int get_ucode_user(void *to, const void *from, size_t n)
432{
433 return copy_from_user(to, from, n);
434}
435
436static int request_microcode_user(int cpu, const void __user *buf, size_t size) 409static int request_microcode_user(int cpu, const void __user *buf, size_t size)
437{ 410{
438 /* We should bind the task to the CPU */ 411 printk(KERN_WARNING "microcode: AMD microcode update via /dev/cpu/microcode"
439 BUG_ON(cpu != raw_smp_processor_id()); 412 "is not supported\n");
440 413 return -1;
441 return generic_load_microcode(cpu, (void*)buf, size, &get_ucode_user);
442} 414}
443 415
444static void microcode_fini_cpu_amd(int cpu) 416static void microcode_fini_cpu_amd(int cpu)