Bug 13706

Summary: FreeBSD identifies all 80486 processors as DX chips
Product: Base System Reporter: tedm <tedm>
Component: i386Assignee: freebsd-bugs (Nobody) <bugs>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: Unspecified   
Hardware: Any   
OS: Any   

Description tedm 1999-09-12 09:20:01 UTC
As far as I can tell, FreeBSD identifies all Intel 80486 chips as
80486DX chips, whether they are SX chips or DX chips.

Following is the dmsg output from a system that is a 486SX with
an 80487 "co-processor" chip installed, note the processor entry
right after the copyrights:

$ dmesg
Copyright (c) 1992-1998 FreeBSD Inc.
Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California.  All rights reserved.

FreeBSD 2.2.8-RELEASE #0: Thu Sep  2 14:40:10 PDT 1999
    tedm@van-radius.ipinc.net:/usr/src/sys/compile/VANRAD
CPU: i486DX (486-class CPU)
real memory  = 16777216 (16384K bytes)
avail memory = 14770176 (14424K bytes)
Probing for devices on the ISA bus:
sc0 at 0x60-0x6f irq 1 on motherboard
sc0: VGA color <16 virtual consoles, flags=0x0>
ed0 at 0x300-0x30f irq 5 maddr 0xc8000 msize 8192 on isa
ed0: address 02:60:8c:a9:17:75, type 3c503 (16 bit)
sio0 at 0x3f8-0x3ff irq 4 on isa
sio0: type 16450
sio1 at 0x2f8-0x2ff irq 3 on isa
sio1: type 16450
lpt0 at 0x378-0x37f irq 7 on isa
lpt0: Interrupt-driven port
lp0: TCP/IP capable interface
psm0 at 0x60-0x64 irq 12 on motherboard
psm0: model Generic PS/2 mouse, device ID 0
fdc0 at 0x3f0-0x3f7 irq 6 drq 2 on isa
fd0: 1.44MB 3.5in
fd1: 1.2MB 5.25in
wdc0 at 0x1f0-0x1f7 irq 14 flags 0x8000ff on isa
wdc0: unit 0 (wd0): <WDC AC2420H>, multi-block-16
wd0: 405MB (830760 sectors), 989 cyls, 15 heads, 56 S/T, 512 B/S
npx0 flags 0x1 on motherboard
npx0: INT 16 interface
$

Fix: 

Hopefully, everyone recompiling their kernels has read the instructions
to include co-processor emulation on 386 and 486SX chips.
How-To-Repeat: Well, I don't suppose anyone is still using 486 computers these days
so I'm not sure you can. ;-)  I do think I have a 486/33SX chip
around somewhere in case any of the developers wants me to send it to them.
Comment 1 mbehrens 1999-10-06 19:10:43 UTC
Didn't your dmesg come with two lines after the CPU: line, which look
like this (from my DX2/40 laptop):

CPU: i486 DX2 (486-class CPU)
  Origin = "GenuineIntel"  Id = 0x435  Stepping=5
  Features=0x3<FPU,VME>

From my 3.2-RELEASE sources (specifically, src/sys/i386/i386):

---
#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
        if(*cpu_vendor)
                printf("  Origin = \"%s\"",cpu_vendor);
        if(cpu_id)
                printf("  Id = 0x%x", cpu_id);

	.
	.	
	.

        /* Avoid ugly blank lines: only print newline when we have to.
*/
        if (*cpu_vendor || cpu_id)
                printf("\n");

#endif
---

This section of code has been updated but still showed Origin, Id, and
etc. back in 2.2.8.

I would think that making sure you have

cpu		"I486_CPU"

in your kernel config would at least get the appropriate information to
see why your SX chip isn't being detected correctly.
Comment 2 tedm 1999-10-06 19:44:46 UTC
Hmmm....   Question for you:  Do you actually _have_ a 486SX that you tested
this on?

On my Compaq Presario 486DX2/66 machine running 2.2.8 the output of dmesg
shows:

CPU: i486DX (486-class CPU)

This the only line - there is no additional line showing Origin or features.
Also, the CPU line does NOT show DX2, it only shows DX.

On a customer 486/25SX I see the exact same result, the CPU line shows
i486DX, _not_ i486SX, and there is no Origin or features line.

Both of those systems are running custom-built kernels with only the
cpu I486_CPU defined in the kernel config file.

On a system of mine running 3.2, Generic kernel, I see exactly the same
behavior.  I even went and built a custom kernel - and found EXACTLY THE
SAME BEHAVIOR!!!.  This was on yet another system running a 486DX2.

Ted


//--- forwarded letter -------------------------------------------------------
> X-Mailer: Mozilla 4.6 [en] (X11; I; Linux 2.2.5-22 i586)
> MIME-Version: 1.0
> Date: Wed, 06 Oct 99 14:10:43 -0400
> From: "Matt Behrens" <mbehrens@globaldsl.com>
> To: freebsd-gnats-submit@freebsd.org,
>     tedm@toybox.placo.com
> Subject: Re: i386/13706: FreeBSD identifies all 80486 processors as DX chips

> 
> Didn't your dmesg come with two lines after the CPU: line, which look
> like this (from my DX2/40 laptop):
> 
> CPU: i486 DX2 (486-class CPU)
>   Origin = "GenuineIntel"  Id = 0x435  Stepping=5
>   Features=0x3<FPU,VME>
> 
> >From my 3.2-RELEASE sources (specifically, src/sys/i386/i386):
> 
> ---
> #if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
>         if(*cpu_vendor)
>                 printf("  Origin = \"%s\"",cpu_vendor);
>         if(cpu_id)
>                 printf("  Id = 0x%x", cpu_id);
> 
> 	.
> 	.	
> 	.
> 
>         /* Avoid ugly blank lines: only print newline when we have to.
> */
>         if (*cpu_vendor || cpu_id)
>                 printf("\n");
> 
> #endif
> ---
> 
> This section of code has been updated but still showed Origin, Id, and
> etc. back in 2.2.8.
> 
> I would think that making sure you have
> 
> cpu		"I486_CPU"
> 
> in your kernel config would at least get the appropriate information to
> see why your SX chip isn't being detected correctly.
> 



//----------------------------------------------------------------------------
// Ted Mittelstaedt  - tedm@toybox.placo.com
// 
// Just because something CAN be done, doesn't mean that it SHOULD be done.
Comment 3 wilko freebsd_committer freebsd_triage 2001-11-24 09:32:50 UTC
State Changed
From-To: open->closed

Most likely solved in revision 1.72 of identcpu.c 
Lacking a 486SX I cannot verify this.