Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Apr 1999 10:26:48 -0700
From:      Ted Faber <faber@ISI.EDU>
To:        Ben Black <black@layer8.net>
Cc:        freebsd-hackers@freebsd.org, paul@originative.co.uk (Paul Richards)
Subject:   Re: PCnet/PCI still broken in -stable? 
Message-ID:  <199904211726.KAA15016@boreas.isi.edu>
In-Reply-To: Your message of "Wed, 21 Apr 1999 04:49:21 PDT." <19990421044920.J98028@layer8.net> 

next in thread | previous in thread | raw e-mail | index | archive | help
Ben Black wrote:
>I've got an IBM 325 server with integrated PCnet/PCI ethernet which
>worked fine under 3.1-release, but now does nothing but spew
>device timeout -- resetting messages in -stable.  I saw an exchange from
>September indicating a patch to fix a similar sounding problem.
>
>Any ideas?

Sure.  Try this.  I submitted a similar patch to Paul Richards, and
although it works for him in general, someone's having a problem with
a combination SCSI-PCnet/PCI ethernet so he hasn't committed it.

Paul: this patch is slightly different than the one I mailed you
originally.  For some reason, unfathomable to me now, the patch I sent
you has the driver becoming a bus master *after* it calls the pci
attach routine, not before.  This is almost certainly a bug, and I
wouldn't be surprised if it was causing the problems with the SCSI
card (of course, I wouldn't be surprised if it wasn't :-)).  Give this
new patch a try and see if it helps.

The patch is relative to the /sys directory on 3.1-RELEASE, but you
should be able to apply it manually if it doesn't work on -stable.

Let me know of any problems or comments.

*** pci/if_lnc_p.c.orig	Mon Mar  8 21:38:19 1999
--- pci/if_lnc_p.c	Wed Apr 21 10:13:39 1999
***************
*** 72,88 ****
  	int	unit;
  {
  	unsigned iobase;
  	void *lnc; /* device specific data for interrupt handler ... */
  
- 	/* pci_map_port correctly initializes bridge chips -- tvf */
- 
  	if ( !pci_map_port(config_id,PCI_MAP_REG_START,(u_short *)&iobase) )
  	    printf("lnc%d: pci_port_map_attach failed?!\n",unit);
  
  	lnc = lnc_attach_ne2100_pci(unit, iobase);
  	if (!lnc)
  		return;
- 
  	if(!(pci_map_int(config_id, lncintr_sc, (void *)lnc, &net_imask))) {
  		free (lnc, M_DEVBUF);
  		return;
--- 72,95 ----
  	int	unit;
  {
  	unsigned iobase;
+ 	unsigned data;	/* scratch to make this device a bus master*/
  	void *lnc; /* device specific data for interrupt handler ... */
  
  	if ( !pci_map_port(config_id,PCI_MAP_REG_START,(u_short *)&iobase) )
  	    printf("lnc%d: pci_port_map_attach failed?!\n",unit);
  
+ 
+ 	/* Make this device a bus master.  This was implictly done by 
+ 	   pci_map_port under 2.2.x -- tvf */
+ 
+ 	data = pci_cfgread(config_id, PCIR_COMMAND, 4);
+ 	data |= PCIM_CMD_PORTEN | PCIM_CMD_BUSMASTEREN;
+ 	pci_cfgwrite(config_id, PCIR_COMMAND, data, 4);
+ 
  	lnc = lnc_attach_ne2100_pci(unit, iobase);
+ 
  	if (!lnc)
  		return;
  	if(!(pci_map_int(config_id, lncintr_sc, (void *)lnc, &net_imask))) {
  		free (lnc, M_DEVBUF);
  		return;




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




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