From mboxrd@z Thu Jan 1 00:00:00 1970 From: Florian Schirmer Subject: [PATCH][3/4] b44: Add support for PHY-less cards Date: Sun, 29 Aug 2004 22:36:47 +0200 Sender: netdev-bounce@oss.sgi.com Message-ID: <200408292236.49864.jolt@tuxbox.org> References: <200408292218.00756.jolt@tuxbox.org> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart12312557.6IaqflfA8j"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Cc: jgarzik@pobox.com, linux-kernel@vger.kernel.org, netdev@oss.sgi.com Return-path: To: Pekka Pietikainen In-Reply-To: <200408292218.00756.jolt@tuxbox.org> Errors-to: netdev-bounce@oss.sgi.com List-Id: netdev.vger.kernel.org --nextPart12312557.6IaqflfA8j Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi, add support for PHY-less cards by using a special magic PHY address. This i= s compatible with the way Broadcom drivers handle that. We don't have to wa= ste a flags bit for that. Regards, Florian Signed-off-by: Florian Schirmer =2D-- linux/drivers/net/b44.c-old3 2004-08-29 16:59:24.000000000 +0200 +++ linux/drivers/net/b44.c 2004-08-29 17:24:23.000000000 +0200 @@ -273,6 +273,9 @@ static int b44_readphy(struct b44 *bp, i { int err; =20 + if (bp->phy_addr =3D=3D B44_PHY_ADDR_NO_PHY) + return 0; + bw32(B44_EMAC_ISTAT, EMAC_INT_MII); bw32(B44_MDIO_DATA, (MDIO_DATA_SB_START | (MDIO_OP_READ << MDIO_DATA_OP_SHIFT) | @@ -287,6 +290,9 @@ static int b44_readphy(struct b44 *bp, i =20 static int b44_writephy(struct b44 *bp, int reg, u32 val) { + if (bp->phy_addr =3D=3D B44_PHY_ADDR_NO_PHY) + return 0; + bw32(B44_EMAC_ISTAT, EMAC_INT_MII); bw32(B44_MDIO_DATA, (MDIO_DATA_SB_START | (MDIO_OP_WRITE << MDIO_DATA_OP_SHIFT) | @@ -325,6 +331,9 @@ static int b44_phy_reset(struct b44 *bp) u32 val; int err; =20 + if (bp->phy_addr =3D=3D B44_PHY_ADDR_NO_PHY) + return 0; + err =3D b44_writephy(bp, MII_BMCR, BMCR_RESET); if (err) return err; @@ -395,6 +404,9 @@ static int b44_setup_phy(struct b44 *bp) u32 val; int err; =20 + if (bp->phy_addr =3D=3D B44_PHY_ADDR_NO_PHY) + return 0; + if ((err =3D b44_readphy(bp, B44_MII_ALEDCTRL, &val)) !=3D 0) goto out; if ((err =3D b44_writephy(bp, B44_MII_ALEDCTRL, @@ -487,6 +499,19 @@ static void b44_check_phy(struct b44 *bp { u32 bmsr, aux; =20 + if (bp->phy_addr =3D=3D B44_PHY_ADDR_NO_PHY) { + bp->flags |=3D B44_FLAG_100_BASE_T; + bp->flags |=3D B44_FLAG_FULL_DUPLEX; + if (!netif_carrier_ok(bp->dev)) { + u32 val =3D br32(B44_TX_CTRL); + val |=3D TX_CTRL_DUPLEX; + bw32(B44_TX_CTRL, val); + netif_carrier_on(bp->dev); + b44_link_report(bp); + } + return; + } + if (!b44_readphy(bp, MII_BMSR, &bmsr) && !b44_readphy(bp, B44_MII_AUXCTRL, &aux) && (bmsr !=3D 0xffff)) { =2D-- linux/drivers/net/b44.h-old3 2004-08-29 17:06:44.000000000 +0200 +++ linux/drivers/net/b44.h 2004-08-29 17:24:53.000000000 +0200 @@ -362,6 +362,7 @@ struct ring_info { }; =20 #define B44_MCAST_TABLE_SIZE 32 +#define B44_PHY_ADDR_NO_PHY 30 =20 /* SW copy of device statistics, kept up to date by periodic timer * which probes HW values. Must have same relative layout as HW --nextPart12312557.6IaqflfA8j Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.5 (GNU/Linux) iD8DBQBBMj5hXRF2vHoIlBsRAttxAJ4zmhJ2mzkKRYQod8/VBf+rSl7pjwCgnY9m usmukrWJH1G5rPOy1iEnJKA= =/mCv -----END PGP SIGNATURE----- --nextPart12312557.6IaqflfA8j--