Deleted Added
full compact
ciphy.c (164830) ciphy.c (170365)
1/*-
2 * Copyright (c) 2004
3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30 * THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2004
3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30 * THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD: head/sys/dev/mii/ciphy.c 164830 2006-12-02 19:36:25Z marius $");
34__FBSDID("$FreeBSD: head/sys/dev/mii/ciphy.c 170365 2007-06-06 06:55:49Z yongari $");
35
36/*
37 * Driver for the Cicada CS8201 10/100/1000 copper PHY.
38 */
39
40#include <sys/param.h>
41#include <sys/systm.h>
42#include <sys/kernel.h>

--- 43 unchanged lines hidden (view full) ---

86static void ciphy_status(struct mii_softc *);
87static void ciphy_reset(struct mii_softc *);
88static void ciphy_fixup(struct mii_softc *);
89
90static const struct mii_phydesc ciphys[] = {
91 MII_PHY_DESC(CICADA, CS8201),
92 MII_PHY_DESC(CICADA, CS8201A),
93 MII_PHY_DESC(CICADA, CS8201B),
35
36/*
37 * Driver for the Cicada CS8201 10/100/1000 copper PHY.
38 */
39
40#include <sys/param.h>
41#include <sys/systm.h>
42#include <sys/kernel.h>

--- 43 unchanged lines hidden (view full) ---

86static void ciphy_status(struct mii_softc *);
87static void ciphy_reset(struct mii_softc *);
88static void ciphy_fixup(struct mii_softc *);
89
90static const struct mii_phydesc ciphys[] = {
91 MII_PHY_DESC(CICADA, CS8201),
92 MII_PHY_DESC(CICADA, CS8201A),
93 MII_PHY_DESC(CICADA, CS8201B),
94 MII_PHY_DESC(VITESSE, VSC8601),
94 MII_PHY_END
95};
96
97static int
98ciphy_probe(device_t dev)
99{
100
101 return (mii_phy_dev_probe(dev, ciphys, BUS_PROBE_DEFAULT));

--- 247 unchanged lines hidden (view full) ---

349#define PHY_CLRBIT(x, y, z) \
350 PHY_WRITE(x, y, (PHY_READ(x, y) & ~(z)))
351
352static void
353ciphy_fixup(struct mii_softc *sc)
354{
355 uint16_t model;
356 uint16_t status, speed;
95 MII_PHY_END
96};
97
98static int
99ciphy_probe(device_t dev)
100{
101
102 return (mii_phy_dev_probe(dev, ciphys, BUS_PROBE_DEFAULT));

--- 247 unchanged lines hidden (view full) ---

350#define PHY_CLRBIT(x, y, z) \
351 PHY_WRITE(x, y, (PHY_READ(x, y) & ~(z)))
352
353static void
354ciphy_fixup(struct mii_softc *sc)
355{
356 uint16_t model;
357 uint16_t status, speed;
358 uint16_t val;
357
358 model = MII_MODEL(PHY_READ(sc, CIPHY_MII_PHYIDR2));
359 status = PHY_READ(sc, CIPHY_MII_AUXCSR);
360 speed = status & CIPHY_AUXCSR_SPEED;
361
359
360 model = MII_MODEL(PHY_READ(sc, CIPHY_MII_PHYIDR2));
361 status = PHY_READ(sc, CIPHY_MII_AUXCSR);
362 speed = status & CIPHY_AUXCSR_SPEED;
363
364 if (strcmp(device_get_name(device_get_parent(sc->mii_dev)),
365 "nfe") == 0) {
366 /* need to set for 2.5V RGMII for NVIDIA adapters */
367 val = PHY_READ(sc, CIPHY_MII_ECTL1);
368 val &= ~(CIPHY_ECTL1_IOVOL | CIPHY_ECTL1_INTSEL);
369 val |= (CIPHY_IOVOL_2500MV | CIPHY_INTSEL_RGMII);
370 PHY_WRITE(sc, CIPHY_MII_ECTL1, val);
371 /* From Linux. */
372 val = PHY_READ(sc, CIPHY_MII_AUXCSR);
373 val |= CIPHY_AUXCSR_MDPPS;
374 PHY_WRITE(sc, CIPHY_MII_AUXCSR, val);
375 val = PHY_READ(sc, CIPHY_MII_10BTCSR);
376 val |= CIPHY_10BTCSR_ECHO;
377 PHY_WRITE(sc, CIPHY_MII_10BTCSR, val);
378 }
379
362 switch (model) {
363 case MII_MODEL_CICADA_CS8201:
364
365 /* Turn off "aux mode" (whatever that means) */
366 PHY_SETBIT(sc, CIPHY_MII_AUXCSR, CIPHY_AUXCSR_MDPPS);
367
368 /*
369 * Work around speed polling bug in VT3119/VT3216

--- 21 unchanged lines hidden (view full) ---

391 if ((speed == CIPHY_SPEED10 || speed == CIPHY_SPEED100) &&
392 (status & CIPHY_AUXCSR_FDX)) {
393 PHY_SETBIT(sc, CIPHY_MII_10BTCSR, CIPHY_10BTCSR_ECHO);
394 } else {
395 PHY_CLRBIT(sc, CIPHY_MII_10BTCSR, CIPHY_10BTCSR_ECHO);
396 }
397
398 break;
380 switch (model) {
381 case MII_MODEL_CICADA_CS8201:
382
383 /* Turn off "aux mode" (whatever that means) */
384 PHY_SETBIT(sc, CIPHY_MII_AUXCSR, CIPHY_AUXCSR_MDPPS);
385
386 /*
387 * Work around speed polling bug in VT3119/VT3216

--- 21 unchanged lines hidden (view full) ---

409 if ((speed == CIPHY_SPEED10 || speed == CIPHY_SPEED100) &&
410 (status & CIPHY_AUXCSR_FDX)) {
411 PHY_SETBIT(sc, CIPHY_MII_10BTCSR, CIPHY_10BTCSR_ECHO);
412 } else {
413 PHY_CLRBIT(sc, CIPHY_MII_10BTCSR, CIPHY_10BTCSR_ECHO);
414 }
415
416 break;
417 case MII_MODEL_VITESSE_VSC8601:
418 break;
399 default:
400 device_printf(sc->mii_dev, "unknown CICADA PHY model %x\n",
401 model);
402 break;
403 }
404}
419 default:
420 device_printf(sc->mii_dev, "unknown CICADA PHY model %x\n",
421 model);
422 break;
423 }
424}