Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Nov 1996 15:16:25 -0800
From:      Erich Boleyn <erich@uruk.org>
To:        Steve Passe <smp@csn.net>
Cc:        smp@freebsd.org
Subject:   Re: Can test again... 
Message-ID:  <E0vPGRt-0006oV-00@uruk.org>
In-Reply-To: Your message of "Sun, 17 Nov 1996 15:39:19 MST." <199611172239.PAA06234@clem.systemsix.com> 

next in thread | previous in thread | raw e-mail | index | archive | help

Hi Steve!  Thanks for responding so quickly on this topic.

Steve Passe <smp@csn.net> writes:

> > I grabbed the SMP tree, and have been hacking on it a bit.
> > 
> > What I've noticed so far are:
> > 
> >   --  mptable-2.0.2.c  AND  the kernel :  Both do the MPS floating pointer
> > 	probe wrong.  They are searching on 4-byte boundaries (it should
> > 	be 16-byte boundaries), and search too many areas.  This caused
> > 	my test machine to not be recognized correctly.
> > 
> > 	The proper probe sequence is to search (again, on 16-byte
> > 	boundaries):
> > 
> > 	(1)  If the EBDA is defined:
> > 		-- The first kilobyte of the EBDA
> > 	   else:
> > 		-- The last kilobyte of system base memory.
> > 	(2)  ROM space between 0xF0000 and 0xFFFFF.
> > 
> > 	If you find it anywhere else, it might be a false report (as
> > 	mentioned, it did on my test box).
> 
> I cleaned up the kernel to adhear to the letter of the MP spec., but left
> mptable.c more liberal.  The newest mptable.c is now on the SMP page.

I checked out the new "mptable.c", and it should work for most boxes.  There
is one problem left though.  The "last kilobyte of system base memory" should
really be stated as PHYSICAL base memory, not BIOS reported memory.

In other words, getting this value from the BIOS or from the BIOS data area
(at 0x413 in physical RAM) is invalid.  The only place to get this value
predictably is from the CMOS RTC values.  For example on my machine it
tried to check from 637K-638K, when it should have tried the 639K-640K
area.  I am fairly certain of this because version 1.4 of the MP Spec
(top of page 4-2) is ambiguous about what is reported at location (40:13h)
of the BIOS data area, it actually says to look at 639K-640K or 511K-512K,
and the RTC values are known to be the physical RAM amounts.

The probe sequence mentioned above (which is also in the sample Intel MPS
probe code I have) has been tried on a pretty big list of machines and
has always worked so far.

> general usage of mptable is now:
> 
> mptable -verbose -dmesg

...

Here is the output of the new mptable on my test box (an Intel Alder w/4
150MHz Pentium Pros):

-----------------------(start mptable_output)------------------------------

===============================================================================

MPTable, version 2.0.4

 looking for EBDA pointer @ 0x040e, found, searching EBDA @ 0x0009f800
 searching CMOS 'top of mem' @ 0x0009f400 (637K)
 searching default 'top of mem' @ 0x0009fc00 (639K)
 searching BIOS @ 0x000f0000

 MP FPS found in BIOS @ physical addr: 0x000f77e0

-------------------------------------------------------------------------------

MP Floating Pointer Structure:

  location:			BIOS
  physical address:		0x000f77e0
  signature:			'_MP_'
  length:			16 bytes
  version:			1.4
  checksum:			0x2a
  mode:				Virtual Wire

-------------------------------------------------------------------------------

MP Config Table Header:

  physical address:		0x000f77f0
  signature:			'PCMP'
  base table length:		300
  version:			1.4
  checksum:			0x14
  OEM ID:			'INTEL   '
  Product ID:			'ALDER       '
  OEM table pointer:		0x00000000
  OEM table size:		0
  entry count:			26
  local APIC address:		0xfec08000
  extended table length:	180
  extended table checksum:	76

-------------------------------------------------------------------------------

MP Config Base Table Entries:

--
Processors:	APIC ID	Version	State		Family	Model	Step	Flags
		 0	 0x11	 BSP, usable	 6	 1	 2	 0xfbff
		 4	 0x11	 AP, usable	 6	 1	 2	 0xfbff
		 1	 0x11	 AP, usable	 6	 1	 2	 0xfbff
		 2	 0x11	 AP, usable	 6	 1	 2	 0xfbff
--
Bus:		Bus ID	Type
		 0	 PCI   
		 1	 PCI   
		18	 EISA  
--
I/O APICs:	APIC ID	Version	State		Address
		14	 0x11	 usable		 0xfec00000
--
I/O Ints:	Type	Polarity    Trigger	Bus ID	 IRQ	APIC ID	INT#
		ExtINT	active-hi        edge	    18	   0	     14	   0
		INT	active-hi        edge	    18	   1	     14	   1
		INT	active-hi        edge	    18	   0	     14	   2
		INT	active-hi        edge	    18	   3	     14	   3
		INT	active-hi        edge	    18	   4	     14	   4
		INT	active-hi        edge	    18	   5	     14	   5
		INT	active-hi        edge	    18	   6	     14	   6
		INT	active-hi        edge	    18	   7	     14	   7
		INT	active-hi        edge	    18	   8	     14	   8
		INT	 conforms       level	    18	   9	     14	   9
		INT	active-hi        edge	    18	  10	     14	  10
		INT	active-hi        edge	    18	  11	     14	  11
		INT	active-hi        edge	    18	  12	     14	  12
		INT	active-hi        edge	    18	  13	     14	  13
		INT	active-hi        edge	    18	  14	     14	  14
		INT	 conforms       level	    18	  15	     14	  15
--
Local Ints:	Type	Polarity    Trigger	Bus ID	 IRQ	APIC ID	INT#
		ExtINT	active-hi        edge	    18	   0	    255	   0
		NMI	active-hi        edge	     0	 0:A	    255	   1

-------------------------------------------------------------------------------

MP Config Extended Table Entries:

--

 bus ID: 0 address type: memory address
 address base: 0xa0000
 address range: 0x20000
--

 bus ID: 1 address type: prefetch address
 address base: 0xfe900000
 address range: 0x100000
--

 bus ID: 1 address type: memory address
 address base: 0xfea00000
 address range: 0x100000
--

 bus ID: 1 address type: I/O address
 address base: 0xf000
 address range: 0x1000
--

 bus ID: 0 address type: memory address
 address base: 0x8000000
 address range: 0xf6900000
--

 bus ID: 0 address type: memory address
 address base: 0xfeb00000
 address range: 0x1500000
--

 bus ID: 0 address type: I/O address
 address base: 0x0
 address range: 0xf000
--

 bus ID: 18 bus info: 0x01 parent bus ID: 0--

 bus ID: 0 address modifier: add
 predefined range: 0x00000000--

 bus ID: 0 address modifier: add
 predefined range: 0x00000001--

 bus ID: 1 address modifier: subtract
 predefined range: 0x00000000--

 bus ID: 1 address modifier: subtract
 predefined range: 0x00000001
-------------------------------------------------------------------------------

dmesg output:

1991, 1993
	The Regents of the University of California.  All rights reserved.

FreeBSD 2.2-ALPHA #0: Wed Nov 13 15:29:19  1996
    jkh@time.cdrom.com:/usr/src/sys/compile/GENERIC
Calibrating clock(s) relative to mc146818A clock ... i586 clock: 150001401 Hz, i8254 clock: 1193195 Hz
CPU: Pentium Pro (147.00-MHz 686-class CPU)
  Origin = "GenuineIntel"  Id = 0x612  Stepping=2
  Features=0xfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,<b11>,MTRR,PGE,MCA,CMOV>
real memory  = 67108864 (65536K bytes)
avail memory = 62664704 (61196K bytes)
eisa0: <INT31c0 (System Board)>
Probing for devices on the EISA bus
ep0: <3Com 3C579-TP EISA Network Adapter> at 0x3000-0x300f, 0x3c80-0x3c89 irq 5
ep0: on eisa0 slot 3
ep0: aui/utp[*AUI*] address 00:20:af:0b:7e:e0
Probing for devices on PCI bus 0:
vga0 <VGA-compatible display device> rev 3 on pci0:12
chip0 <Intel 82375EB PCI-EISA bridge> rev 5 on pci0:14:0
pci0:15:0: Intel Corporation, device=0x0008, class=0xff, subclass=0x00 [no driver assigned]
pci0:15:1: Intel Corporation, device=0x0008, class=0xff, subclass=0x00 [no driver assigned]
pci0:15:2: Intel Corporation, device=0x0008, class=0xff, subclass=0x00 [no driver assigned]
pci0:15:3: Intel Corporation, device=0x0008, class=0xff, subclass=0x00 [no driver assigned]
pci0:15:4: Intel Corporation, device=0x0008, class=0xff, subclass=0x00 [no driver assigned]
pci0:15:5: Intel Corporation, device=0x0008, class=0xff, subclass=0x00 [no driver assigned]
pci0:15:6: Intel Corporation, device=0x0008, class=0xff, subclass=0x00 [no driver assigned]
pci0:15:7: Intel Corporation, device=0x0008, class=0xff, subclass=0x00 [no driver assigned]
chip1 <Intel 82450KX (Orion) PCI memory controller> rev 3 on pci0:25
chip2 <Intel 82450KX (Orion) PCI memory controller> rev 3 on pci0:26
Probing for devices on PCI bus 1:
ahc0 <Adaptec aic7870 SCSI host adapter> rev 3 int a irq 15 on pci1:11
ahc0: Using left over BIOS settings
ahc0: aic7870 Wide Channel, SCSI Id=7, 16 SCBs
ahc0 waiting for scsi devices to settle
(ahc0:0:0): "iomega jaz 1GB H.71" type 0 removable SCSI 2
sd0(ahc0:0:0): Direct-Access 
sd0(ahc0:0:0): ILLEGAL REQUEST asc:24,0 Invalid field in CDB
sd0 could not mode sense (4). Using ficticious geometry
1021MB (2091050 512 byte sectors)
(ahc0:1:0): "SEAGATE ST11950N 0009" type 0 fixed SCSI 2
sd1(ahc0:1:0): Direct-Access 1611MB (3301239 512 byte sectors)
(ahc0:2:0): "TOSHIBA CD-ROM XM-3501TA 2694" type 5 removable SCSI 2
cd0(ahc0:2:0): CD-ROM 
cd0(ahc0:2:0): NOT READY asc:3a,0 Medium not present
can't get the size
ahc1 <Adaptec aic7870 SCSI host adapter> rev 3 int a irq 9 on pci1:12
ahc1: aic7870 Wide Channel, SCSI Id=7, 16 SCBs
ahc1: Host Adapter Bios disabled.  Using default SCSI device parameters
ahc1 waiting for scsi devices to settle
Probing for devices on the ISA bus:
sc0 at 0x60-0x6f irq 1 on motherboard
sc0: VGA color <16 virtual consoles, flags=0x0>
ed0 not found at 0x280
ed1 not found at 0x300
fe0 not found at 0x300
sio0 at 0x3f8-0x3ff irq 4 on isa
sio0: type 16550A
sio1 at 0x2f8-0x2ff irq 3 on isa
sio1: type 16550A
sio2: disabled, not probed.
sio3: disabled, not probed.
lpt0 at 0x378-0x37f irq 7 on isa
lpt0: Interrupt-driven port
lp0: TCP/IP capable interface
lpt1 at 0x378-0x37f on isa
lpt1 not probed due to I/O address conflict with lpt0 at 0x378
mse0 not found at 0x23c
psm0: disabled, not probed.
fdc0 at 0x3f0-0x3f7 irq 6 drq 2 on isa
fdc0: NEC 72065B
fd0: 1.44MB 3.5in
wdc0 at 0x1f0-0x1f7 irq 14 on isa
wdc0: unit 0 (wd0): <WDC AC2850F>
wd0: 814MB (1667232 sectors), 1654 cyls, 16 heads, 63 S/T, 512 B/S
wdc1 not found at 0x170
bt0 not found at 0x330
uha0 not found at 0x330
aha0 not found at 0x330
aic0 not found at 0x340
nca0 not found at 0x1f88
nca1 not found at 0x350
sea0 not found
wt0 not found at 0x300
mcd0 not found at 0x300
matcdc0 not found at 0x230
scd0 not found at 0x230
ie0 not found at 0x360
ep0 not found at 0x300
ix0 not found at 0x300
le0 not found at 0x300
lnc0 not found at 0x280
ze0 not found at 0x300
zp0 not found at 0x300
npx0 on motherboard
npx0: INT 16 interface
apm0: disabled, not probed.
changing root device to sd0a

-------------------------------------------------------------------------------

# SMP kernel config file options:

options		SMP			# Symmetric MultiProcessor Kernel
#options		APIC_IO			# Symmetric (APIC) I/O
options		NCPU=4			# number of CPUs
options		NBUS=3			# number of busses
options		NAPIC=1			# number of IO APICs
options		NINTR=16		# number of INTs

===============================================================================

-----------------------(end mptable_output)--------------------------------

--
  Erich Stefan Boleyn                 \_ E-mail (preferred):  <erich@uruk.org>
Mad Genius wanna-be, CyberMuffin        \__      (finger me for other stats)
Web:  http://www.uruk.org/~erich/     Motto: "I'll live forever or die trying"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E0vPGRt-0006oV-00>