Re: Cyrix 6x86MX and Centaur C6 CPUs in 2.1.102

=?ISO-8859-1?Q?Andr=E9?= Derrick Balsa (
Mon, 18 May 1998 11:53:16 -0100

Hi Alan,

Alan Cox wrote:
> > The Cyrix 6x86MX has a fully compatible TSC implementation. However, it
> > also allows turning off the CPU when a Halt state is entered, something
> No it does not. The intel specification explicitly guarantees no time
> stamp will be repeated within 10 years under any circumstance. So cyrix
> almost has it right

If one doesn't _explicitly_ enable the Suspend-on-Halt feature (with
e.g. the set6x86 utility, which must be run as root), the Cyrix 6x86MX
behaves _exactly_ like the Intel CPUs after a hardware reset; just like
the Intel CPUs, it guarantees no timestamp will be repeated within 10
years under any circumstance.

Please check an earlier post by Rafael R. Reilova, who came up with a
neat demo code of this.

IMHO this is a trade-off. If one wants to have the processor dissipating
< 150mW when Linux is idle, one has to power down the 200MHz or so
64-bit TSC counter circuitry.

The Intel CPUs don't give you any choice.

The 6x86MX gives you the choice of lower dissipation and a stopped TSC,
or same-as-Intel dissipation and a counting TSC; it defaults to the
compatible higher dissipation mode, and the instructions that allow
turning on the Suspend-on-Halt feature can only be executed in cpl 0.

I wouldn't call this a bug. It's clearly an explicit design choice by
the Cyrix 6x86MX CPU designers. Unfortunately it's not correctly
documented in the 6x86MX Data Book.

> > The mod above also ignores the Centaur C6.
> > if ((boot_cpu_data.x86_capability & 16) && (boot_cpu_data.x86_vendor !=
> > X86_VENDOR_CYRIX) && (boot_cpu_data.x86_vendor != X86_VENDOR_CENTAUR)) {
> This is also slightly wrong. Only step 0 of the centaur C6 has the RDTSC
> power bug according to the errata documents. I think it should read
> the above + if the CENTAUR case & stepping==0)
> That sound right ?

100% correct. :)

The above should be:

if ((boot_cpu_data.x86_capability & 16) && (boot_cpu_data.x86_vendor !=
X86_VENDOR_CYRIX) && !((boot_cpu_data.x86_vendor == X86_VENDOR_CENTAUR)
&& (boot_cpu_data.x86_mask == 0))) {

André Balsa

BTW I have no connection with Cyrix or Centaur whatsoever. I just would
like to have the Linux 2.2 kernel as compatible with as many x86
compatible CPUs as possible, an ideal which is shared by all Linux

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to