kern/96806 : [bge] [patch] Correction of kernel panic with Broadcom chip BCM5714C and other updates

Yoshiaki Uchikawa yoshiaki at kt.rim.or.jp
Wed May 24 12:30:44 UTC 2006


The following reply was made to PR kern/96806; it has been noted by GNATS.

From: Yoshiaki Uchikawa <yoshiaki at kt.rim.or.jp>
To: freebsd-bugs at FreeBSD.org
Cc:  
Subject: Re: kern/96806 : [bge] [patch] Correction of kernel panic with
 Broadcom chip BCM5714C and other updates
Date: Tue, 23 May 2006 16:40:24 GMT

 The following reply was made to PR kern/96806; it has been noted by GNATS.
 
 From: Yoshiaki Uchikawa <yoshiaki at kt.rim.or.jp>
 To: bug-followup at FreeBSD.org, tedm at ipinc.net
 Cc:  
 Subject: Re: kern/96806 : [bge] [patch] Correction of kernel panic with
  Broadcom chip BCM5714C and other updates
 Date: Wed, 24 May 2006 01:38:53 +0900 (JST)
 
  Hi,
  
  I used kern/96806 patch on IBM e326m.
  But, I have same problem as kern/94863 reported, occcurred.
  
    bge1: discard frame w/o leading ethernet header (len 4294967292 pkt len
   4294967292)
  
    And:
    Fatal trap 12: page fault while in kernel mode
    :
    :
  
  
   It seems there a part of initialization lack with kern/96806
   patch.
   I performed the one-line addition to if_bge.c .
   It seems to operate very well.
  
  --- if_bge.c.orig	Sat Mar  4 18:34:48 2006
  +++ if_bge.c	Fri Jan 14 16:25:09 2005
  @@ -152,16 +152,28 @@
   		"Broadcom BCM5704C Dual Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5704S,
   		"Broadcom BCM5704S Dual Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5704S_2,
  +		"Broadcom BCM5704S v2 Dual Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5705,
   		"Broadcom BCM5705 Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5705K,
   		"Broadcom BCM5705K Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5705F,
  +		"Broadcom BCM5705F Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5705M,
   		"Broadcom BCM5705M Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5705M_ALT,
   		"Broadcom BCM5705M Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5714C,
   		"Broadcom BCM5714C Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5714S,
  +		"Broadcom BCM5714S Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5715,
  +		"Broadcom BCM5715 Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5715S,
  +		"Broadcom BCM5715S Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5720,
  +		"Broadcom BCM5720 Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5721,
   		"Broadcom BCM5721 Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5750,
  @@ -170,10 +182,22 @@
   		"Broadcom BCM5750M Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5751,
   		"Broadcom BCM5751 Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5751F,
  +		"Broadcom BCM5751F Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5751M,
   		"Broadcom BCM5751M Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5752,
   		"Broadcom BCM5752 Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5753F,
  +		"Broadcom BCM5753F Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5753M,
  +		"Broadcom BCM5753M Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5780,
  +		"Broadcom BCM5780 Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5780S,
  +		"Broadcom BCM5780S Gigabit Ethernet" },
  +	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5781,
  +		"Broadcom BCM5781 Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5782,
   		"Broadcom BCM5782 Gigabit Ethernet" },
   	{ BCOM_VENDORID, BCOM_DEVICEID_BCM5788,
  @@ -1048,30 +1072,35 @@
   	/* Set up the PCI DMA control register. */
   	if (sc->bge_pcie) {
   		dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD |
  -		    (0xf << BGE_PCIDMARWCTL_RD_WAT_SHIFT) |
  -		    (0x2 << BGE_PCIDMARWCTL_WR_WAT_SHIFT);
  +		    (0x180000);
   	} else if (pci_read_config(sc->bge_dev, BGE_PCI_PCISTATE, 4) &
   	    BGE_PCISTATE_PCI_BUSMODE) {
   		/* Conventional PCI bus */
  -		dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD |
  -		    (0x7 << BGE_PCIDMARWCTL_RD_WAT_SHIFT) |
  -		    (0x7 << BGE_PCIDMARWCTL_WR_WAT_SHIFT) |
  -		    (0x0F);
  +			if (sc->bge_asicrev == BGE_ASICREV_BCM5705 ||
  +					BGE_ASICREV_BCM5750) {
  +                          dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD |
  +                                (0x3F0000); }
  +         else 
  +			  dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD |
  +				(0x3F000F);
   	} else {
   		/* PCI-X bus */
   		/*
   		 * The 5704 uses a different encoding of read/write
   		 * watermarks.
   		 */
  -		if (sc->bge_asicrev == BGE_ASICREV_BCM5704)
  +		if (sc->bge_asicrev == BGE_ASICREV_BCM5704 || BGE_ASICREV_BCM5703)
   			dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD |
  -			    (0x7 << BGE_PCIDMARWCTL_RD_WAT_SHIFT) |
  -			    (0x3 << BGE_PCIDMARWCTL_WR_WAT_SHIFT);
  -		else
  +			    (0x9F0000);
  +		else if (sc->bge_asicrev == BGE_ASICREV_BCM5780)
  +			dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD |
  +			    (0x144000);
  +		else if (sc->bge_asicrev == BGE_ASICREV_BCM5714)
  +			dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD |
  +			    (0x148000);
  +		else 
   			dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD |
  -			    (0x3 << BGE_PCIDMARWCTL_RD_WAT_SHIFT) |
  -			    (0x3 << BGE_PCIDMARWCTL_WR_WAT_SHIFT) |
  -			    (0x0F);
  +			    (0x1B000F);
   
   		/*
   		 * 5703 and 5704 need ONEDMA_AT_ONCE as a workaround
  @@ -2103,7 +2132,8 @@
   	 * on this chip.
   	 */
   	if (sc->bge_asicrev == BGE_ASICREV_BCM5714 || 
  -            sc->bge_asicrev == BGE_ASICREV_BCM5752)
  +            sc->bge_asicrev == BGE_ASICREV_BCM5752 || 
  +            sc->bge_asicrev == BGE_ASICREV_BCM5780)
   		sc->bge_asicrev = BGE_ASICREV_BCM5750;
   
   	/*
  
  --
    yoshiaki at kt.rim.or.jp
    Yoshiaki UCHIKAWA
 _______________________________________________
 freebsd-bugs at freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
 To unsubscribe, send any mail to "freebsd-bugs-unsubscribe at freebsd.org"


More information about the freebsd-bugs mailing list