Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Nov 2002 07:56:25 -0800 (PST)
From:      Jeff Seeman <danger@e-lated.org>
To:        Willy Offermans <W.K.Offermans@TUe.nl>
Cc:        FreeBSD-STABLE <freebsd-stable@FreeBSD.ORG>
Subject:   Re: SiS 900 ethernetcard
Message-ID:  <20021118075303.N95407-200000@omen.e-lated.org>
In-Reply-To: <20021118143925.GA85552@tom.chem.tue.nl>

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

[-- Attachment #1 --]
Hi there,

I had the same problem about 6 months ago, and someone posted a patch that
did the trick. I have no idea who made the patch so I can't give credit.

It's attached, hope it works.

Jeff Seeman
Technical Instructor

-------------------------------------------------------------------
**** FreeBSD-Advocate ----------------------- jeff@e-lated.org ****
-------------------------------------------------------------------

On Mon, 18 Nov 2002, Willy Offermans wrote:

> Dear FreeBSD friends,
>
> I have bought a nice laptop computer (Gericom Masterpiece 25340 XL).
> It has an ethernet card inside, based on SiS 900 chip.
> During boot, FreeBSD can detect the card, but cannot assign an MAC
> address, nor initializing the card. I receive following messages:
>
> ....
> sis0: <SiS 900 10/100BaseTX> port 0xf800-0xf8ff mem 0xe8005000-0xe8005fff irq 4 at device 4.0 on pci0
> sis0: Ethernet address: ff:ff:ff:ff:ff:ff
> sis0: MII without any PHY!
> device_probe_and_attach: sis0 attach returned 6
> ....
>
> Does anybody know to solve this problem?
>
> --
> Met vriendelijke groeten,
> With kind regards,
>
> Willy
>
> *************************************
> W.K. Offermans
> Eindhoven University of Technology
> Department of Chemical Engineering
> Laboratory of Catalysis (SKA)
> building ST-W 4.27, PO Box 513
> 5600 MB  Eindhoven, Netherlands
> Tel: 0(031) 40 247 37 81
> Fax: 0(031) 40 247 50 32
> Home: 0(031) 45 544 49 99
> e-mail: w.k.offermans@tue.nl
> http://www.catalysis.nl
>
>        If you are bored playing with Bill Gates' toy, start to work with a real operating system
>                        Feel free, feel FreeBSD .... (www.FreeBSD.org)
>
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-stable" in the body of the message
>

[-- Attachment #2 --]
*** /sys/pci/if_sisreg.h	Thu Feb 28 14:39:32 2002
--- if_sisreg.h	Mon Jul  1 00:19:19 2002
***************
*** 124,129 ****
--- 124,151 ----
  #define SIS_EECMD_READ		0x180
  #define SIS_EECMD_ERASE		0x1c0
  
+ #define	SIS_NOENPHY	/* don't use Enhanced PHY Access Register */
+ #ifdef	SIS_NOENPHY
+ #define	SIS_MII_FRAME_START	0x4000
+ #define	SIS_MII_FRAME_OP_READ	0x2000
+ #define	SIS_MII_FRAME_OP_WRITE	0x1000
+ #define	SIS_MII_FRAME_PMD(phy)	((phy & 0x1F) << 7)
+ #define	SIS_MII_FRAME_REG(reg)	((reg & 0x1F) << 2)
+ #define	SIS_MII_FRAME_LINE_READ	0x0000
+ #define	SIS_MII_FRAME_LINE_WRITE	0x0002
+ #define SIS_MII_FRAME_READ(phy, reg)				\
+ 	(SIS_MII_FRAME_START | SIS_MII_FRAME_OP_READ		\
+ 	 | SIS_MII_FRAME_PMD(phy) | SIS_MII_FRAME_REG(reg)	\
+ 	 | SIS_MII_FRAME_LINE_READ)
+ #define SIS_MII_FRAME_WRITE(phy, reg)				\
+ 	(SIS_MII_FRAME_START | SIS_MII_FRAME_OP_WRITE		\
+ 	 | SIS_MII_FRAME_PMD(phy) | SIS_MII_FRAME_REG(reg)	\
+ 	 | SIS_MII_FRAME_LINE_WRITE)
+ #define	SIS_MII_MDC		0x00000040
+ #define	SIS_MII_MDDIR		0x00000020
+ #define	SIS_MII_MDIO		0x00000010
+ #endif	/* SIS_NOENPHY */
+ 
  #define SIS_EE_NODEADDR		0x8
  #define NS_EE_NODEADDR		0x6
  
*** /sys/pci/if_sis.c	Thu Feb 28 14:39:32 2002
--- if_sis.c	Mon Jul  1 00:11:11 2002
***************
*** 475,480 ****
--- 475,483 ----
  {
  	struct sis_softc	*sc;
  	int			i, val = 0;
+ #ifdef	SIS_NOENPHY
+ 	int			frame_hdr = SIS_MII_FRAME_READ(phy, reg);
+ #endif
  
  	sc = device_get_softc(dev);
  
***************
*** 501,506 ****
--- 504,536 ----
  	    sc->sis_rev < SIS_REV_635 && phy != 0)
  		return(0);
  
+ #ifdef	SIS_NOENPHY
+ 	sis_eeprom_idle(sc);
+ 
+ 	for (i = (1 << 15); i; i >>= 1) {
+ 		int dataval = SIS_MII_MDDIR;
+ 		if (frame_hdr & i) {
+ 			dataval |= SIS_MII_MDIO;
+ 		}
+ 		CSR_WRITE_4(sc, SIS_EECTL, dataval);
+ 		sis_delay(sc);
+ 		CSR_WRITE_4(sc, SIS_EECTL, (dataval | SIS_MII_MDC));
+ 		sis_delay(sc);
+ 	}
+ 
+ 	for (i = (1 << 15); i; i >>= 1) {
+ 		CSR_WRITE_4(sc, SIS_EECTL, 0);
+ 		sis_delay(sc);
+ 		if (CSR_READ_4(sc, SIS_EECTL) & SIS_MII_MDIO) {
+ 			val |= i;
+ 		}
+ 		CSR_WRITE_4(sc, SIS_EECTL, SIS_MII_MDC);
+ 		sis_delay(sc);
+ 	}
+ 	CSR_WRITE_4(sc, SIS_EECTL, 0);
+ 
+ 	sis_eeprom_idle(sc);
+ #else	/* SIS_NOENPHY */
  	CSR_WRITE_4(sc, SIS_PHYCTL, (phy << 11) | (reg << 6) | SIS_PHYOP_READ);
  	SIS_SETBIT(sc, SIS_PHYCTL, SIS_PHYCTL_ACCESS);
  
***************
*** 518,523 ****
--- 548,554 ----
  
  	if (val == 0xFFFF)
  		return(0);
+ #endif	/* SIS_NOENPHY */
  
  	return(val);
  }
***************
*** 528,533 ****
--- 559,567 ----
  {
  	struct sis_softc	*sc;
  	int			i;
+ #ifdef	SIS_NOENPHY
+ 	int			frame_hdr = SIS_MII_FRAME_WRITE(phy, reg);
+ #endif	/* SIS_NOENPHY */
  
  	sc = device_get_softc(dev);
  
***************
*** 538,546 ****
  		return(0);
  	}
  
! 	if (sc->sis_type == SIS_TYPE_900 && phy != 0)
  		return(0);
  
  	CSR_WRITE_4(sc, SIS_PHYCTL, (data << 16) | (phy << 11) |
  	    (reg << 6) | SIS_PHYOP_WRITE);
  	SIS_SETBIT(sc, SIS_PHYCTL, SIS_PHYCTL_ACCESS);
--- 572,618 ----
  		return(0);
  	}
  
! 	if (sc->sis_type == SIS_TYPE_900 &&
! 	    sc->sis_rev < SIS_REV_635 && phy != 0)
  		return(0);
  
+ #ifdef	SIS_NOENPHY
+ 	sis_eeprom_idle(sc);
+ 
+ 	for (i = (1 << 15); i; i >>= 1) {
+ 		int dataval = SIS_MII_MDDIR;
+ 		if (frame_hdr & i) {
+ 			dataval |= SIS_MII_MDIO;
+ 		}
+ 		CSR_WRITE_4(sc, SIS_EECTL, dataval);
+ 		sis_delay(sc);
+ 		CSR_WRITE_4(sc, SIS_EECTL, (dataval | SIS_MII_MDC));
+ 		sis_delay(sc);
+ 	}
+ 	sis_delay(sc);
+ 
+ 	for (i = (1 << 15); i; i >>= 1) {
+ 		int dataval = SIS_MII_MDDIR;
+ 		if (data & i) {
+ 			dataval |= SIS_MII_MDIO;
+ 		}
+ 		CSR_WRITE_4(sc, SIS_EECTL, dataval);
+ 		sis_delay(sc);
+ 		CSR_WRITE_4(sc, SIS_EECTL, (dataval | SIS_MII_MDC));
+ 		sis_delay(sc);
+ 	}
+ 	sis_delay(sc);
+ 
+ 	for (i = 2; i > 0; i --) {
+ 		CSR_WRITE_4(sc, SIS_EECTL, 0);
+ 		sis_delay(sc);
+ 		CSR_WRITE_4(sc, SIS_EECTL, SIS_MII_MDC);
+ 		sis_delay(sc);
+ 	}
+ 	CSR_WRITE_4(sc, SIS_EECTL, 0);
+ 
+ 	sis_eeprom_idle(sc);
+ #else	/* SIS_NOENPHY */
  	CSR_WRITE_4(sc, SIS_PHYCTL, (data << 16) | (phy << 11) |
  	    (reg << 6) | SIS_PHYOP_WRITE);
  	SIS_SETBIT(sc, SIS_PHYCTL, SIS_PHYCTL_ACCESS);
***************
*** 552,557 ****
--- 624,630 ----
  
  	if (i == SIS_TIMEOUT)
  		printf("sis%d: PHY failed to come ready\n", sc->sis_unit);
+ #endif	/* SIS_NOENPHY */
  
  	return(0);
  }

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