Commit edc05e6d authored by Ingo Molnar's avatar Ingo Molnar

x86: more coding style fixes in centaur.c

no code changed:

 arch/x86/kernel/cpu/centaur.o:
    text    data     bss     dec     hex filename
    1031     324       0    1355     54b centaur.o.before
    1031     324       0    1355     54b centaur.o.after

 md5:
  4f306a7f980b58eb69c4bdcfcde565f1  centaur.o.before.asm
  4f306a7f980b58eb69c4bdcfcde565f1  centaur.o.after.asm
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 29a9994b
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/msr.h> #include <asm/msr.h>
#include <asm/e820.h> #include <asm/e820.h>
#include <asm/mtrr.h> #include <asm/mtrr.h>
#include "cpu.h" #include "cpu.h"
#ifdef CONFIG_X86_OOSTORE #ifdef CONFIG_X86_OOSTORE
...@@ -12,8 +14,10 @@ ...@@ -12,8 +14,10 @@
static u32 __cpuinit power2(u32 x) static u32 __cpuinit power2(u32 x)
{ {
u32 s = 1; u32 s = 1;
while(s <= x)
while (s <= x)
s <<= 1; s <<= 1;
return s >>= 1; return s >>= 1;
} }
...@@ -21,7 +25,6 @@ static u32 __cpuinit power2(u32 x) ...@@ -21,7 +25,6 @@ static u32 __cpuinit power2(u32 x)
/* /*
* Set up an actual MCR * Set up an actual MCR
*/ */
static void __cpuinit centaur_mcr_insert(int reg, u32 base, u32 size, int key) static void __cpuinit centaur_mcr_insert(int reg, u32 base, u32 size, int key)
{ {
u32 lo, hi; u32 lo, hi;
...@@ -39,12 +42,11 @@ static void __cpuinit centaur_mcr_insert(int reg, u32 base, u32 size, int key) ...@@ -39,12 +42,11 @@ static void __cpuinit centaur_mcr_insert(int reg, u32 base, u32 size, int key)
* *
* Shortcut: We know you can't put 4Gig of RAM on a winchip * Shortcut: We know you can't put 4Gig of RAM on a winchip
*/ */
static u32 __cpuinit ramtop(void)
static u32 __cpuinit ramtop(void) /* 16388 */
{ {
int i;
u32 top = 0;
u32 clip = 0xFFFFFFFFUL; u32 clip = 0xFFFFFFFFUL;
u32 top = 0;
int i;
for (i = 0; i < e820.nr_map; i++) { for (i = 0; i < e820.nr_map; i++) {
unsigned long start, end; unsigned long start, end;
...@@ -55,10 +57,9 @@ static u32 __cpuinit ramtop(void) /* 16388 */ ...@@ -55,10 +57,9 @@ static u32 __cpuinit ramtop(void) /* 16388 */
* Don't MCR over reserved space. Ignore the ISA hole * Don't MCR over reserved space. Ignore the ISA hole
* we frob around that catastrophe already * we frob around that catastrophe already
*/ */
if (e820.map[i].type == E820_RESERVED) {
if (e820.map[i].type == E820_RESERVED) if (e820.map[i].addr >= 0x100000UL &&
{ e820.map[i].addr < clip)
if (e820.map[i].addr >= 0x100000UL && e820.map[i].addr < clip)
clip = e820.map[i].addr; clip = e820.map[i].addr;
continue; continue;
} }
...@@ -69,19 +70,19 @@ static u32 __cpuinit ramtop(void) /* 16388 */ ...@@ -69,19 +70,19 @@ static u32 __cpuinit ramtop(void) /* 16388 */
if (end > top) if (end > top)
top = end; top = end;
} }
/* Everything below 'top' should be RAM except for the ISA hole. /*
Because of the limited MCR's we want to map NV/ACPI into our * Everything below 'top' should be RAM except for the ISA hole.
MCR range for gunk in RAM * Because of the limited MCR's we want to map NV/ACPI into our
* MCR range for gunk in RAM
Clip might cause us to MCR insufficient RAM but that is an *
acceptable failure mode and should only bite obscure boxes with * Clip might cause us to MCR insufficient RAM but that is an
a VESA hole at 15Mb * acceptable failure mode and should only bite obscure boxes with
* a VESA hole at 15Mb
The second case Clip sometimes kicks in is when the EBDA is marked *
as reserved. Again we fail safe with reasonable results * The second case Clip sometimes kicks in is when the EBDA is marked
* as reserved. Again we fail safe with reasonable results
*/ */
if (top > clip)
if(top > clip)
top = clip; top = clip;
return top; return top;
...@@ -90,7 +91,6 @@ static u32 __cpuinit ramtop(void) /* 16388 */ ...@@ -90,7 +91,6 @@ static u32 __cpuinit ramtop(void) /* 16388 */
/* /*
* Compute a set of MCR's to give maximum coverage * Compute a set of MCR's to give maximum coverage
*/ */
static int __cpuinit centaur_mcr_compute(int nr, int key) static int __cpuinit centaur_mcr_compute(int nr, int key)
{ {
u32 mem = ramtop(); u32 mem = ramtop();
...@@ -100,27 +100,25 @@ static int __cpuinit centaur_mcr_compute(int nr, int key) ...@@ -100,27 +100,25 @@ static int __cpuinit centaur_mcr_compute(int nr, int key)
u32 floor = 0; u32 floor = 0;
int ct = 0; int ct = 0;
while (ct < nr) while (ct < nr) {
{
u32 fspace = 0; u32 fspace = 0;
u32 high;
u32 low;
/* /*
* Find the largest block we will fill going upwards * Find the largest block we will fill going upwards
*/ */
high = power2(mem-top);
u32 high = power2(mem-top);
/* /*
* Find the largest block we will fill going downwards * Find the largest block we will fill going downwards
*/ */
low = base/2;
u32 low = base/2;
/* /*
* Don't fill below 1Mb going downwards as there * Don't fill below 1Mb going downwards as there
* is an ISA hole in the way. * is an ISA hole in the way.
*/ */
if (base <= 1024*1024) if (base <= 1024*1024)
low = 0; low = 0;
...@@ -139,34 +137,31 @@ static int __cpuinit centaur_mcr_compute(int nr, int key) ...@@ -139,34 +137,31 @@ static int __cpuinit centaur_mcr_compute(int nr, int key)
/* /*
* Now install the largest coverage we get * Now install the largest coverage we get
*/ */
if (fspace > high && fspace > low) {
if (fspace > high && fspace > low)
{
centaur_mcr_insert(ct, floor, fspace, key); centaur_mcr_insert(ct, floor, fspace, key);
floor += fspace; floor += fspace;
} } else if (high > low) {
else if (high > low) {
centaur_mcr_insert(ct, top, high, key); centaur_mcr_insert(ct, top, high, key);
top += high; top += high;
} } else if (low > 0) {
else if (low > 0) {
base -= low; base -= low;
centaur_mcr_insert(ct, base, low, key); centaur_mcr_insert(ct, base, low, key);
} } else
else break; break;
ct++; ct++;
} }
/* /*
* We loaded ct values. We now need to set the mask. The caller * We loaded ct values. We now need to set the mask. The caller
* must do this bit. * must do this bit.
*/ */
return ct; return ct;
} }
static void __cpuinit centaur_create_optimal_mcr(void) static void __cpuinit centaur_create_optimal_mcr(void)
{ {
int used;
int i; int i;
/* /*
* Allocate up to 6 mcrs to mark as much of ram as possible * Allocate up to 6 mcrs to mark as much of ram as possible
* as write combining and weak write ordered. * as write combining and weak write ordered.
...@@ -177,12 +172,11 @@ static void __cpuinit centaur_create_optimal_mcr(void) ...@@ -177,12 +172,11 @@ static void __cpuinit centaur_create_optimal_mcr(void)
* Load the registers with type 31 - full write combining, all * Load the registers with type 31 - full write combining, all
* writes weakly ordered. * writes weakly ordered.
*/ */
int used = centaur_mcr_compute(6, 31); used = centaur_mcr_compute(6, 31);
/* /*
* Wipe unused MCRs * Wipe unused MCRs
*/ */
for (i = used; i < 8; i++) for (i = used; i < 8; i++)
wrmsr(MSR_IDT_MCR0+i, 0, 0); wrmsr(MSR_IDT_MCR0+i, 0, 0);
} }
...@@ -190,6 +184,7 @@ static void __cpuinit centaur_create_optimal_mcr(void) ...@@ -190,6 +184,7 @@ static void __cpuinit centaur_create_optimal_mcr(void)
static void __cpuinit winchip2_create_optimal_mcr(void) static void __cpuinit winchip2_create_optimal_mcr(void)
{ {
u32 lo, hi; u32 lo, hi;
int used;
int i; int i;
/* /*
...@@ -201,13 +196,11 @@ static void __cpuinit winchip2_create_optimal_mcr(void) ...@@ -201,13 +196,11 @@ static void __cpuinit winchip2_create_optimal_mcr(void)
* 16 - weak read ordering * 16 - weak read ordering
* 1 - write combining * 1 - write combining
*/ */
used = centaur_mcr_compute(6, 25);
int used = centaur_mcr_compute(6, 25);
/* /*
* Mark the registers we are using. * Mark the registers we are using.
*/ */
rdmsr(MSR_IDT_MCR_CTRL, lo, hi); rdmsr(MSR_IDT_MCR_CTRL, lo, hi);
for (i = 0; i < used; i++) for (i = 0; i < used; i++)
lo |= 1<<(9+i); lo |= 1<<(9+i);
...@@ -224,7 +217,6 @@ static void __cpuinit winchip2_create_optimal_mcr(void) ...@@ -224,7 +217,6 @@ static void __cpuinit winchip2_create_optimal_mcr(void)
/* /*
* Handle the MCR key on the Winchip 2. * Handle the MCR key on the Winchip 2.
*/ */
static void __cpuinit winchip2_unprotect_mcr(void) static void __cpuinit winchip2_unprotect_mcr(void)
{ {
u32 lo, hi; u32 lo, hi;
...@@ -301,9 +293,7 @@ static void __cpuinit init_c3(struct cpuinfo_x86 *c) ...@@ -301,9 +293,7 @@ static void __cpuinit init_c3(struct cpuinfo_x86 *c)
display_cacheinfo(c); display_cacheinfo(c);
} }
static void __cpuinit init_centaur(struct cpuinfo_x86 *c) enum {
{
enum {
ECX8 = 1<<1, ECX8 = 1<<1,
EIERRINT = 1<<2, EIERRINT = 1<<2,
DPM = 1<<3, DPM = 1<<3,
...@@ -322,7 +312,10 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c) ...@@ -322,7 +312,10 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
ERETSTK = 1<<16, ERETSTK = 1<<16,
E2MMX = 1<<19, E2MMX = 1<<19,
EAMD3D = 1<<20, EAMD3D = 1<<20,
}; };
static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
{
char *name; char *name;
u32 fcr_set = 0; u32 fcr_set = 0;
...@@ -330,12 +323,13 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c) ...@@ -330,12 +323,13 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
u32 lo, hi, newlo; u32 lo, hi, newlo;
u32 aa, bb, cc, dd; u32 aa, bb, cc, dd;
/* Bit 31 in normal CPUID used for nonstandard 3DNow ID; /*
3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ * Bit 31 in normal CPUID used for nonstandard 3DNow ID;
* 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway
*/
clear_bit(0*32+31, c->x86_capability); clear_bit(0*32+31, c->x86_capability);
switch (c->x86) { switch (c->x86) {
case 5: case 5:
switch (c->x86_model) { switch (c->x86_model) {
case 4: case 4:
...@@ -346,15 +340,16 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c) ...@@ -346,15 +340,16 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
clear_bit(X86_FEATURE_TSC, c->x86_capability); clear_bit(X86_FEATURE_TSC, c->x86_capability);
#ifdef CONFIG_X86_OOSTORE #ifdef CONFIG_X86_OOSTORE
centaur_create_optimal_mcr(); centaur_create_optimal_mcr();
/* Enable /*
write combining on non-stack, non-string * Enable:
write combining on string, all types * write combining on non-stack, non-string
weak write ordering * write combining on string, all types
* weak write ordering
The C6 original lacks weak read order *
* The C6 original lacks weak read order
Note 0x120 is write only on Winchip 1 */ *
* Note 0x120 is write only on Winchip 1
*/
wrmsr(MSR_IDT_MCR_CTRL, 0x01F0001F, 0); wrmsr(MSR_IDT_MCR_CTRL, 0x01F0001F, 0);
#endif #endif
break; break;
...@@ -370,16 +365,18 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c) ...@@ -370,16 +365,18 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
name = "2B"; name = "2B";
break; break;
} }
fcr_set = ECX8|DSMC|DTLOCK|EMMX|EBRPRED|ERETSTK|E2MMX|EAMD3D; fcr_set = ECX8|DSMC|DTLOCK|EMMX|EBRPRED|ERETSTK|
E2MMX|EAMD3D;
fcr_clr = DPDC; fcr_clr = DPDC;
#ifdef CONFIG_X86_OOSTORE #ifdef CONFIG_X86_OOSTORE
winchip2_unprotect_mcr(); winchip2_unprotect_mcr();
winchip2_create_optimal_mcr(); winchip2_create_optimal_mcr();
rdmsr(MSR_IDT_MCR_CTRL, lo, hi); rdmsr(MSR_IDT_MCR_CTRL, lo, hi);
/* Enable /*
write combining on non-stack, non-string * Enable:
write combining on string, all types * write combining on non-stack, non-string
weak write ordering * write combining on string, all types
* weak write ordering
*/ */
lo |= 31; lo |= 31;
wrmsr(MSR_IDT_MCR_CTRL, lo, hi); wrmsr(MSR_IDT_MCR_CTRL, lo, hi);
...@@ -388,16 +385,18 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c) ...@@ -388,16 +385,18 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
break; break;
case 9: case 9:
name = "3"; name = "3";
fcr_set = ECX8|DSMC|DTLOCK|EMMX|EBRPRED|ERETSTK|E2MMX|EAMD3D; fcr_set = ECX8|DSMC|DTLOCK|EMMX|EBRPRED|ERETSTK|
E2MMX|EAMD3D;
fcr_clr = DPDC; fcr_clr = DPDC;
#ifdef CONFIG_X86_OOSTORE #ifdef CONFIG_X86_OOSTORE
winchip2_unprotect_mcr(); winchip2_unprotect_mcr();
winchip2_create_optimal_mcr(); winchip2_create_optimal_mcr();
rdmsr(MSR_IDT_MCR_CTRL, lo, hi); rdmsr(MSR_IDT_MCR_CTRL, lo, hi);
/* Enable /*
write combining on non-stack, non-string * Enable:
write combining on string, all types * write combining on non-stack, non-string
weak write ordering * write combining on string, all types
* weak write ordering
*/ */
lo |= 31; lo |= 31;
wrmsr(MSR_IDT_MCR_CTRL, lo, hi); wrmsr(MSR_IDT_MCR_CTRL, lo, hi);
...@@ -412,7 +411,8 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c) ...@@ -412,7 +411,8 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
newlo = (lo|fcr_set) & (~fcr_clr); newlo = (lo|fcr_set) & (~fcr_clr);
if (newlo != lo) { if (newlo != lo) {
printk(KERN_INFO "Centaur FCR was 0x%X now 0x%X\n", lo, newlo); printk(KERN_INFO "Centaur FCR was 0x%X now 0x%X\n",
lo, newlo);
wrmsr(MSR_IDT_FCR1, newlo, hi); wrmsr(MSR_IDT_FCR1, newlo, hi);
} else { } else {
printk(KERN_INFO "Centaur FCR is 0x%X\n", lo); printk(KERN_INFO "Centaur FCR is 0x%X\n", lo);
...@@ -440,16 +440,20 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c) ...@@ -440,16 +440,20 @@ static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
} }
} }
static unsigned int __cpuinit centaur_size_cache(struct cpuinfo_x86 *c, unsigned int size) static unsigned int __cpuinit
centaur_size_cache(struct cpuinfo_x86 *c, unsigned int size)
{ {
/* VIA C3 CPUs (670-68F) need further shifting. */ /* VIA C3 CPUs (670-68F) need further shifting. */
if ((c->x86 == 6) && ((c->x86_model == 7) || (c->x86_model == 8))) if ((c->x86 == 6) && ((c->x86_model == 7) || (c->x86_model == 8)))
size >>= 8; size >>= 8;
/* VIA also screwed up Nehemiah stepping 1, and made /*
it return '65KB' instead of '64KB' * There's also an erratum in Nehemiah stepping 1, which
- Note, it seems this may only be in engineering samples. */ * returns '65KB' instead of '64KB'
if ((c->x86 == 6) && (c->x86_model == 9) && (c->x86_mask == 1) && (size == 65)) * - Note, it seems this may only be in engineering samples.
*/
if ((c->x86 == 6) && (c->x86_model == 9) &&
(c->x86_mask == 1) && (size == 65))
size -= 1; size -= 1;
return size; return size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment