Exemple #1
0
static void
truephy_reset(struct mii_softc *sc)
{
    int i;

    if (sc->mii_model == MII_MODEL_AGERE_ET1011) {
        kprintf("phy phy phy model\n");
        mii_phy_reset(sc);
        return;
    }

    for (i = 0; i < 2; ++i) {
        PHY_READ(sc, MII_PHYIDR1);
        PHY_READ(sc, MII_PHYIDR2);

        PHY_READ(sc, TRUEPHY_CTRL);
        PHY_WRITE(sc, TRUEPHY_CTRL,
                  TRUEPHY_CTRL_DIAG | TRUEPHY_CTRL_RSV1);

        PHY_WRITE(sc, TRUEPHY_INDEX, TRUEPHY_INDEX_MAGIC);
        PHY_READ(sc, TRUEPHY_DATA);

        PHY_WRITE(sc, TRUEPHY_CTRL, TRUEPHY_CTRL_RSV1);
    }

    PHY_READ(sc, MII_BMCR);
    PHY_READ(sc, TRUEPHY_CTRL);
    PHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_PDOWN | BMCR_S1000);
    PHY_WRITE(sc, TRUEPHY_CTRL,
              TRUEPHY_CTRL_DIAG | TRUEPHY_CTRL_RSV1 | TRUEPHY_CTRL_RSV0);

    for (i = 0; i < NELEM(truephy_dspcode); ++i) {
        const struct truephy_dsp *dsp = &truephy_dspcode[i];

        PHY_WRITE(sc, TRUEPHY_INDEX, dsp->index);
        PHY_WRITE(sc, TRUEPHY_DATA, dsp->data);

        PHY_WRITE(sc, TRUEPHY_INDEX, dsp->index);
        PHY_READ(sc, TRUEPHY_DATA);
    }

    PHY_READ(sc, MII_BMCR);
    PHY_READ(sc, TRUEPHY_CTRL);
    PHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN |  BMCR_S1000);
    PHY_WRITE(sc, TRUEPHY_CTRL, TRUEPHY_CTRL_RSV1);

    mii_phy_reset(sc);

    if (FRAMELEN(sc->mii_pdata->mii_ifp->if_mtu) > 2048) {
        int conf;

        conf = PHY_READ(sc, TRUEPHY_CONF);
        conf &= ~TRUEPHY_CONF_TXFIFO_MASK;
        conf |= TRUEPHY_CONF_TXFIFO_24;
        PHY_WRITE(sc, TRUEPHY_CONF, conf);
    }
}
static void
truephy_reset(struct mii_softc *sc)
{
	int i;

	for (i = 0; i < 2; ++i) {
		PHY_READ(sc, MII_PHYIDR1);
		PHY_READ(sc, MII_PHYIDR2);

		PHY_READ(sc, TRUEPHY_CTRL);
		PHY_WRITE(sc, TRUEPHY_CTRL,
			  TRUEPHY_CTRL_DIAG | TRUEPHY_CTRL_RSV1);

		PHY_WRITE(sc, TRUEPHY_INDEX, TRUEPHY_INDEX_MAGIC);
		PHY_READ(sc, TRUEPHY_DATA);

		PHY_WRITE(sc, TRUEPHY_CTRL, TRUEPHY_CTRL_RSV1);
	}

	PHY_READ(sc, MII_BMCR);
	PHY_READ(sc, TRUEPHY_CTRL);
	PHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_PDOWN | BMCR_S1000);
	PHY_WRITE(sc, TRUEPHY_CTRL,
		  TRUEPHY_CTRL_DIAG | TRUEPHY_CTRL_RSV1 | TRUEPHY_CTRL_RSV0);

#define N(arr)	(int)(sizeof(arr) / sizeof(arr[0]))

	for (i = 0; i < N(truephy_dspcode); ++i) {
		const struct truephy_dsp *dsp = &truephy_dspcode[i];

		PHY_WRITE(sc, TRUEPHY_INDEX, dsp->index);
		PHY_WRITE(sc, TRUEPHY_DATA, dsp->data);

		PHY_WRITE(sc, TRUEPHY_INDEX, dsp->index);
		PHY_READ(sc, TRUEPHY_DATA);
	}

#undef N

	PHY_READ(sc, MII_BMCR);
	PHY_READ(sc, TRUEPHY_CTRL);
	PHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN |  BMCR_S1000);
	PHY_WRITE(sc, TRUEPHY_CTRL, TRUEPHY_CTRL_RSV1);

	mii_phy_reset(sc);

	if (FRAMELEN(sc->mii_pdata->mii_ifp->if_mtu) > 2048) {
		int conf;

		conf = PHY_READ(sc, TRUEPHY_CONF);
		conf &= ~TRUEPHY_CONF_TXFIFO_MASK;
		conf |= TRUEPHY_CONF_TXFIFO_24;
		PHY_WRITE(sc, TRUEPHY_CONF, conf);
	}
}