Commit 49c8ca18 authored by Dean Gaudet's avatar Dean Gaudet Committed by Linus Torvalds

[PATCH] transmeta efficeon support and cpuid update

This patch adds efficeon as a cpu option, and makes a small update to the
transmeta cpuid code.  (i wasn't sure if the various doc files are UTF-8...
if they are, then the e should be a U-275 ;)

The compile options may not be ideal, but they're probably close.  i used
-march=pentium3, but -march=pentium4 would have been good enough too.

The cpuid update teaches transmeta.c about the extended processor revision
present in cpuid level 0x80860002...  the external documentation does not
indicate how to break apart this field, and instructs only that the 32-bit
value should be printed in hex (alas).
Signed-off-by: default avatardean gaudet <dean@arctic.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 35bafd11
...@@ -65,6 +65,7 @@ Intel Pentium 4, Intel Xeon ...@@ -65,6 +65,7 @@ Intel Pentium 4, Intel Xeon
Intel Pentium M (Centrino) Intel Pentium M (Centrino)
National Semiconductors Geode GX National Semiconductors Geode GX
Transmeta Crusoe Transmeta Crusoe
Transmeta Efficeon
VIA Cyrix 3 / C3 VIA Cyrix 3 / C3
various processors on some ACPI 2.0-compatible systems [*] various processors on some ACPI 2.0-compatible systems [*]
......
...@@ -179,6 +179,7 @@ config M386 ...@@ -179,6 +179,7 @@ config M386
- "K6" for the AMD K6, K6-II and K6-III (aka K6-3D). - "K6" for the AMD K6, K6-II and K6-III (aka K6-3D).
- "Athlon" for the AMD K7 family (Athlon/Duron/Thunderbird). - "Athlon" for the AMD K7 family (Athlon/Duron/Thunderbird).
- "Crusoe" for the Transmeta Crusoe series. - "Crusoe" for the Transmeta Crusoe series.
- "Efficeon" for the Transmeta Efficeon series.
- "Winchip-C6" for original IDT Winchip. - "Winchip-C6" for original IDT Winchip.
- "Winchip-2" for IDT Winchip 2. - "Winchip-2" for IDT Winchip 2.
- "Winchip-2A" for IDT Winchips with 3dNow! capabilities. - "Winchip-2A" for IDT Winchips with 3dNow! capabilities.
...@@ -281,6 +282,11 @@ config MCRUSOE ...@@ -281,6 +282,11 @@ config MCRUSOE
like a 586 with TSC, and sets some GCC optimization flags (like a like a 586 with TSC, and sets some GCC optimization flags (like a
Pentium Pro with no alignment requirements). Pentium Pro with no alignment requirements).
config MEFFICEON
bool "Efficeon"
help
Select this for a Transmeta Efficeon processor.
config MWINCHIPC6 config MWINCHIPC6
bool "Winchip-C6" bool "Winchip-C6"
help help
...@@ -354,7 +360,7 @@ config X86_L1_CACHE_SHIFT ...@@ -354,7 +360,7 @@ config X86_L1_CACHE_SHIFT
int int
default "7" if MPENTIUM4 || X86_GENERIC default "7" if MPENTIUM4 || X86_GENERIC
default "4" if X86_ELAN || M486 || M386 default "4" if X86_ELAN || M486 || M386
default "5" if MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCRUSOE || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 default "5" if MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2
default "6" if MK7 || MK8 || MPENTIUMM default "6" if MK7 || MK8 || MPENTIUMM
config RWSEM_GENERIC_SPINLOCK config RWSEM_GENERIC_SPINLOCK
...@@ -404,17 +410,17 @@ config X86_ALIGNMENT_16 ...@@ -404,17 +410,17 @@ config X86_ALIGNMENT_16
config X86_GOOD_APIC config X86_GOOD_APIC
bool bool
depends on MK7 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || MK8 depends on MK7 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || MK8 || MEFFICEON
default y default y
config X86_INTEL_USERCOPY config X86_INTEL_USERCOPY
bool bool
depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 || MEFFICEON
default y default y
config X86_USE_PPRO_CHECKSUM config X86_USE_PPRO_CHECKSUM
bool bool
depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MEFFICEON
default y default y
config X86_USE_3DNOW config X86_USE_3DNOW
...@@ -549,7 +555,7 @@ config X86_IO_APIC ...@@ -549,7 +555,7 @@ config X86_IO_APIC
config X86_TSC config X86_TSC
bool bool
depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2) && !X86_NUMAQ depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2) && !X86_NUMAQ
default y default y
config X86_MCE config X86_MCE
......
...@@ -42,6 +42,7 @@ cflags-$(CONFIG_MK6) += -march=k6 ...@@ -42,6 +42,7 @@ cflags-$(CONFIG_MK6) += -march=k6
cflags-$(CONFIG_MK7) += $(call cc-option,-march=athlon,-march=i686 $(align)-functions=4) cflags-$(CONFIG_MK7) += $(call cc-option,-march=athlon,-march=i686 $(align)-functions=4)
cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8,$(call cc-option,-march=athlon,-march=i686 $(align)-functions=4)) cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8,$(call cc-option,-march=athlon,-march=i686 $(align)-functions=4))
cflags-$(CONFIG_MCRUSOE) += -march=i686 $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0 cflags-$(CONFIG_MCRUSOE) += -march=i686 $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0
cflags-$(CONFIG_MEFFICEON) += $(call cc-option,-march=pentium3,-march=i686) $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0
cflags-$(CONFIG_MWINCHIPC6) += $(call cc-option,-march=winchip-c6,-march=i586) cflags-$(CONFIG_MWINCHIPC6) += $(call cc-option,-march=winchip-c6,-march=i586)
cflags-$(CONFIG_MWINCHIP2) += $(call cc-option,-march=winchip2,-march=i586) cflags-$(CONFIG_MWINCHIP2) += $(call cc-option,-march=winchip2,-march=i586)
cflags-$(CONFIG_MWINCHIP3D) += $(call cc-option,-march=winchip2,-march=i586) cflags-$(CONFIG_MWINCHIP3D) += $(call cc-option,-march=winchip2,-march=i586)
......
...@@ -71,6 +71,7 @@ CONFIG_MPENTIUM4=y ...@@ -71,6 +71,7 @@ CONFIG_MPENTIUM4=y
# CONFIG_MK7 is not set # CONFIG_MK7 is not set
# CONFIG_MK8 is not set # CONFIG_MK8 is not set
# CONFIG_MCRUSOE is not set # CONFIG_MCRUSOE is not set
# CONFIG_MEFFICEON is not set
# CONFIG_MWINCHIPC6 is not set # CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP2 is not set # CONFIG_MWINCHIP2 is not set
# CONFIG_MWINCHIP3D is not set # CONFIG_MWINCHIP3D is not set
......
...@@ -186,8 +186,8 @@ config X86_LONGRUN ...@@ -186,8 +186,8 @@ config X86_LONGRUN
tristate "Transmeta LongRun" tristate "Transmeta LongRun"
depends on CPU_FREQ depends on CPU_FREQ
help help
This adds the CPUFreq driver for Transmeta Crusoe processors which This adds the CPUFreq driver for Transmeta Crusoe and Efficeon processors
support LongRun. which support LongRun.
For details, take a look at <file:Documentation/cpu-freq/>. For details, take a look at <file:Documentation/cpu-freq/>.
......
...@@ -308,7 +308,7 @@ static void __exit longrun_exit(void) ...@@ -308,7 +308,7 @@ static void __exit longrun_exit(void)
MODULE_AUTHOR ("Dominik Brodowski <linux@brodo.de>"); MODULE_AUTHOR ("Dominik Brodowski <linux@brodo.de>");
MODULE_DESCRIPTION ("LongRun driver for Transmeta Crusoe processors."); MODULE_DESCRIPTION ("LongRun driver for Transmeta Crusoe and Efficeon processors.");
MODULE_LICENSE ("GPL"); MODULE_LICENSE ("GPL");
module_init(longrun_init); module_init(longrun_init);
......
...@@ -8,7 +8,7 @@ static void __init init_transmeta(struct cpuinfo_x86 *c) ...@@ -8,7 +8,7 @@ static void __init init_transmeta(struct cpuinfo_x86 *c)
{ {
unsigned int cap_mask, uk, max, dummy; unsigned int cap_mask, uk, max, dummy;
unsigned int cms_rev1, cms_rev2; unsigned int cms_rev1, cms_rev2;
unsigned int cpu_rev, cpu_freq, cpu_flags; unsigned int cpu_rev, cpu_freq, cpu_flags, new_cpu_rev;
char cpu_info[65]; char cpu_info[65];
get_model_name(c); /* Same as AMD/Cyrix */ get_model_name(c); /* Same as AMD/Cyrix */
...@@ -16,8 +16,10 @@ static void __init init_transmeta(struct cpuinfo_x86 *c) ...@@ -16,8 +16,10 @@ static void __init init_transmeta(struct cpuinfo_x86 *c)
/* Print CMS and CPU revision */ /* Print CMS and CPU revision */
max = cpuid_eax(0x80860000); max = cpuid_eax(0x80860000);
cpu_rev = 0;
if ( max >= 0x80860001 ) { if ( max >= 0x80860001 ) {
cpuid(0x80860001, &dummy, &cpu_rev, &cpu_freq, &cpu_flags); cpuid(0x80860001, &dummy, &cpu_rev, &cpu_freq, &cpu_flags);
if (cpu_rev != 0x02000000) {
printk(KERN_INFO "CPU: Processor revision %u.%u.%u.%u, %u MHz\n", printk(KERN_INFO "CPU: Processor revision %u.%u.%u.%u, %u MHz\n",
(cpu_rev >> 24) & 0xff, (cpu_rev >> 24) & 0xff,
(cpu_rev >> 16) & 0xff, (cpu_rev >> 16) & 0xff,
...@@ -25,8 +27,13 @@ static void __init init_transmeta(struct cpuinfo_x86 *c) ...@@ -25,8 +27,13 @@ static void __init init_transmeta(struct cpuinfo_x86 *c)
cpu_rev & 0xff, cpu_rev & 0xff,
cpu_freq); cpu_freq);
} }
}
if ( max >= 0x80860002 ) { if ( max >= 0x80860002 ) {
cpuid(0x80860002, &dummy, &cms_rev1, &cms_rev2, &dummy); cpuid(0x80860002, &new_cpu_rev, &cms_rev1, &cms_rev2, &dummy);
if (cpu_rev == 0x02000000) {
printk(KERN_INFO "CPU: Processor revision %08X, %u MHz\n",
new_cpu_rev, cpu_freq);
}
printk(KERN_INFO "CPU: Code Morphing Software revision %u.%u.%u-%u-%u\n", printk(KERN_INFO "CPU: Code Morphing Software revision %u.%u.%u-%u-%u\n",
(cms_rev1 >> 24) & 0xff, (cms_rev1 >> 24) & 0xff,
(cms_rev1 >> 16) & 0xff, (cms_rev1 >> 16) & 0xff,
......
...@@ -40,6 +40,8 @@ struct mod_arch_specific ...@@ -40,6 +40,8 @@ struct mod_arch_specific
#define MODULE_PROC_FAMILY "ELAN " #define MODULE_PROC_FAMILY "ELAN "
#elif defined CONFIG_MCRUSOE #elif defined CONFIG_MCRUSOE
#define MODULE_PROC_FAMILY "CRUSOE " #define MODULE_PROC_FAMILY "CRUSOE "
#elif defined CONFIG_MEFFICEON
#define MODULE_PROC_FAMILY "EFFICEON "
#elif defined CONFIG_MWINCHIPC6 #elif defined CONFIG_MWINCHIPC6
#define MODULE_PROC_FAMILY "WINCHIPC6 " #define MODULE_PROC_FAMILY "WINCHIPC6 "
#elif defined CONFIG_MWINCHIP2 #elif defined CONFIG_MWINCHIP2
......
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