Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Jun 1995 14:08:18 +0200
From:      esser@zpr.uni-koeln.de (Stefan Esser)
To:        hackers@freebsd.org
Subject:   Please give feedback: New PCI configuration mechanism test
Message-ID:  <199506121208.AA25186@FileServ1.MI.Uni-Koeln.DE>

next in thread | raw e-mail | index | archive | help
After some problems with the "Compaq Prosignia 300" 
I've taken a look at the PCI specification rev. 2.0
(don't have 2.1, yet, anybody able to check for 
major differences between 2.0 and 2.1 regarding 
configuration space accesses and especially changes 
to chapters 3.6.4.1.x).

The following patch should be tested on as many 
PCI motherboards as possible, since I don't want
to break PCI support for old systems with this 
patch.

I've tested it on a Saturn based i486 system and 
will try it on a Pentium later today.

Please report any problems with this patch !

There is a slight chance, that a chip set that 
supports PCI configuration mechanism 2 will be
erroneously detected as supporting mechanism 1.

If a PCI system stops working with this patch, 
I'd like to receive boot messages as written
by the working (i.e. unpatched) kernel.

Thanks in advance!

STefan

Index: /sys/i386/isa/pcibus.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/isa/pcibus.c,v
retrieving revision 1.8
diff -C2 -r1.8 pcibus.c
*** 1.8	1995/03/22 21:35:39
--- pcibus.c	1995/06/12 09:44:07
***************
*** 140,143 ****
--- 140,144 ----
  
  #define CONF1_ENABLE       0x80000000ul
+ #define CONF1_ENABLE_CHK   0xF0000000ul
  #define CONF1_ADDR_PORT    0x0cf8
  #define CONF1_DATA_PORT    0x0cfc
***************
*** 154,170 ****
  
  	/*---------------------------------------
- 	**      Configuration mode 2 ?
- 	**---------------------------------------
- 	*/
- 
- 	outb (CONF2_ENABLE_PORT,  0);
- 	outb (CONF2_FORWARD_PORT, 0);
- 	if (!inb (CONF2_ENABLE_PORT) && !inb (CONF2_FORWARD_PORT)) {
- 		pci_mechanism = 2;
- 		pci_maxdevice = 16;
- 		return;
- 	};
- 
- 	/*---------------------------------------
  	**      Configuration mode 1 ?
  	**---------------------------------------
--- 155,158 ----
***************
*** 172,176 ****
  
  	oldval = inl (CONF1_ADDR_PORT);
! 	outl (CONF1_ADDR_PORT, CONF1_ENABLE);
  	result = inl (CONF1_ADDR_PORT);
  	outl (CONF1_ADDR_PORT, oldval);
--- 160,164 ----
  
  	oldval = inl (CONF1_ADDR_PORT);
! 	outl (CONF1_ADDR_PORT, CONF1_ENABLE_CHK);
  	result = inl (CONF1_ADDR_PORT);
  	outl (CONF1_ADDR_PORT, oldval);
***************
*** 179,182 ****
--- 167,183 ----
  		pci_mechanism = 1;
  		pci_maxdevice = 32;
+ 		return;
+ 	};
+ 
+ 	/*---------------------------------------
+ 	**      Configuration mode 2 ?
+ 	**---------------------------------------
+ 	*/
+ 
+ 	outb (CONF2_ENABLE_PORT,  0);
+ 	outb (CONF2_FORWARD_PORT, 0);
+ 	if (!inb (CONF2_ENABLE_PORT) && !inb (CONF2_FORWARD_PORT)) {
+ 		pci_mechanism = 2;
+ 		pci_maxdevice = 16;
  		return;
  	};

-- 
 Stefan Esser				Internet:	<se@ZPR.Uni-Koeln.DE>
 Zentrum fuer Paralleles Rechnen	Tel:		+49 221 4706017
 Universitaet zu Koeln			FAX:		+49 221 4705160
 Weyertal 80
 50931 Koeln



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199506121208.AA25186>