Subject: Re: 486DLC CYRIX CACHE UNCHANGED message, what is it?
To: , <johnam@mail.kemper.org>
From: Michael VanLoon <mvanloon@MindBender.serv.net>
List: netbsd-users
Date: 11/26/1998 13:54:30
Geeze... someone is still using these?!  This code was added in later
'93 or early '94.  See below...

-----Original Message-----
From: dinsen@danbbs.dk <dinsen@danbbs.dk>
Date: Thursday, November 26, 1998 9:25 AM


>On Wed, 25 Nov 1998 08:55:34 -0600, you wrote:
>>I jut put a 486 80Mhz based webserver together for the local Boy
Scouts
>and
>>I get the message 486DLC CYRIX CACHE UNCHANGED within 3 lines of the
>kernel
>>boot.

>Although I don't know the details, I assume that it refers to the fact
>that the Cx486DLC has a special on-chip cache, that needs to be
>enabled to be used. The Cx486DLC was originally designed as a 386DX
>upgrade chip with 486 features. I think the message refers to the fact
>that NetBSD does'nt change the enabled/disabled state of this cache.
>I assume that if the BIOS recognizes the CPU (as mine does), it
>enables the cache.
>... just checked /sys/arch/i386/i386/machdep.c that prints the
>message:

>What do the CYRIX_CACHE_[REALLY_]WORKS defines mean? And what are they
>supposed to do besides changing the message? I think we need someone
>more knowing than us to answer the question :-)


Yes, this is pretty accurate.

The 486DLC was designed to be compatible with 386 motherboards (which
didn't have cache in the CPU), but the 486DLC had a 1K cache in the CPU.
On some motherboards, you partially enable this cache by putting it into
a mode where it would flush the cache whenever a non-CPU device (like a
bus-master SCSI card) locked the bus, assuming that some data might be
written that would potentially invalidate some data in the cache.  This
was kind-of a paranoid mode.

If you had a motherboard designed specifically for the 486DLC, with
bus-snooping support, however, the chip could be enabled completely,
allowing the cache to run without flush-on-bus-lock.  These boards, of
course, had a BIOS that would set the correct settings, meaning the
kernel didn't have to.

In the former case, since the chip was commonly in a 386 motherboard,
the BIOS would have no knowledge of the cache settings and would leave
them disabled, so the only way to use them was to have the kernel enable
them.

So, the default settings (don't change any cache settings) was intended
for motherboards that correctly set up the cache, and if not, leaving
the cache disabled for maximum reliability.

The CYRIX_CACHE_WORKS setting was for enabling the paranoid mode on 386
motherboards, so you got some benefit, but it was still fairly safe on
most decent motherboards.

The CYRIX_CACHE_REALLY_WORKS setting was for enabling the full-caching
mode on boards that didn't set it up correctly in the BIOS, but where
hardware support worked (or where there weren't any bus-master devices
in the system and you were willing to run in "risky" mode).

FYI...