Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Feb 1996 21:22:33 -0800
From:      "Justin T. Gibbs" <gibbs@freefall.freebsd.org>
To:        Richard J Kuhns <rjk@sparcmill.grauel.com>
Cc:        freebsd-stable@freebsd.org
Subject:   Re: One problem && one question 
Message-ID:  <199602140522.VAA08632@freefall.freebsd.org>
In-Reply-To: Your message of "Tue, 13 Feb 1996 14:27:19 %2B0500." <9602131927.AA23929@sparcmill.grauel.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
>Justin T. Gibbs writes:
> > >Justin T. Gibbs writes:
> > ><Buslogic id info>  int a irq 10 pci 0:13
> > >  mapreg[10] type 1 addr 0x00006000 size ffff0004
> > >bt0: Invalid base address
> > 
> > boot -v with the old kernel and then use dmesg to retrieve the info.
> > 
>
>That works fine for any ``working'' kernel; apparently none of the boot
>messages from a non-working kernel end up in the circular buffer dmesg
>uses.  IE, if I boot-working then boot-nonworking then boot-working and run
>dmesg, I get the messages from the 2 boot-working kernels only.

How would you expect the dmesg buffer to be written to disk if the
probe for your disk controller isn't successful? 8-)

> > When you get a chance, try this one.  Now that I'm not editing over a link
> > with 50% packet loss, its much easier to check my work. :)
> > 
>
>I tried it; I'm afraid it made no difference.  By the way, here's one more
>line from the (failing) pci-probe:
>
>bt0: uses 4 bytes of I/O space from 6000 upto 6003

Ahh.  It did make a difference.  Unfortunately, when I was cleaning
up the bt driver, I assumed that the PCI probe would always return
one of the ISA compatibility addresses.  As Rod pointed out, this is
not always the case.  This patch should do the trick

>--
>Rich Kuhns			rjk@grauel.com
>PO Box 6249
>100 Sawmill Road
>Lafayette, IN  47903
>(317)477-6000 x319

--
Justin T. Gibbs
===========================================
  FreeBSD: Turning PCs into workstations
===========================================

Index: i386/scsi/bt.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/scsi/bt.c,v
retrieving revision 1.5
diff -c -r1.5 bt.c
*** bt.c	1996/01/25 23:03:07	1.5
--- bt.c	1996/02/14 05:03:01
***************
*** 462,471 ****
  			}
  		}
  	}
- 	if (i >= sizeof(found)/sizeof(struct bt_found)) {
- 		printf("bt%d: Invalid base address\n", unit);
- 		return NULL;    
- 	}
  	
  	bt = malloc(sizeof(struct bt_data), M_DEVBUF, M_NOWAIT);
  	if (!bt) {
--- 462,467 ----
Index: i386/pci/bt9xx.c
===================================================================
RCS file: /usr/cvs/src/sys/pci/bt9xx.c,v
retrieving revision 1.4
diff -c -r1.4 bt9xx.c
*** bt9xx.c	1996/01/23 21:46:57	1.4
--- bt9xx.c	1996/02/13 15:46:23
***************
*** 35,42 ****
  #include <i386/scsi/btreg.h>
  
  /* XXX Need more device IDs */
! #define PCI_BASEADR0	PCI_MAP_REG_START
! #define PCI_DEVICE_ID_BUSLOGIC_946	0x104B1040ul
  
  static char* bt_pci_probe __P((pcici_t tag, pcidi_t type));
  static void bt_pci_attach __P((pcici_t config_id, int unit));
--- 35,41 ----
  #include <i386/scsi/btreg.h>
  
  /* XXX Need more device IDs */
! #define PCI_DEVICE_ID_BUSLOGIC_946	0x1040104Bul
  
  static char* bt_pci_probe __P((pcici_t tag, pcidi_t type));
  static void bt_pci_attach __P((pcici_t config_id, int unit));
***************
*** 70,86 ****
  	pcici_t config_id;
  	int	unit;
  {
  	u_long io_port;
  	unsigned opri = 0;
  	struct bt_data *bt;
  
!         if(!(io_port = pci_conf_read(config_id, PCI_BASEADR0)))
  		return;
- 	/*
- 	 * The first bit of PCI_BASEADR0 is always
- 	 * set hence we mask it off.
- 	 */
- 	io_port &= 0xfffffffe;
  
  	if(!(bt = bt_alloc(unit, io_port)))
  		return;  /* XXX PCI code should take return status */
--- 69,89 ----
  	pcici_t config_id;
  	int	unit;
  {
+ 	u_char reg;
  	u_long io_port;
  	unsigned opri = 0;
  	struct bt_data *bt;
  
! 	for(reg = PCI_MAP_REG_START; reg < PCI_MAP_REG_END; reg+=4) {
! 	        io_port = pci_conf_read(config_id, reg);
! 		if ((io_port&~7)==0) continue;
! 		if(io_port & PCI_MAP_IO) {
! 			io_port &= ~PCI_MAP_IO;
! 			break;
! 		}
! 	}
! 	if(reg == PCI_MAP_REG_END)
  		return;
  
  	if(!(bt = bt_alloc(unit, io_port)))
  		return;  /* XXX PCI code should take return status */



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