[U-Boot] [PATCH] Bugfix: mpc512x_fec MII accesses fail after ethernet transfers

Wolfgang Denk
2009-07-19T19:26:58Z

Dear =?ISO-8859-15?Q?Thomas_D=F6rfler?=,

In message <4A633D5A.3060803@embedded-brains.de> you wrote:
> The mpc512x FEC network driver resets the FEC before transferring
> packets. With this reset, the FEC clears the previous setting of MII
> transfer speed. This patch ensures, that it is set again to a reasonable
> value after a FEC reset.
>
> Signed-off-by: Thomas Doerfler <Thomas.Doerfler@embedded-brains.de>
> --
> diff --git a/drivers/net/mpc512x_fec.c b/drivers/net/mpc512x_fec.c
> index fb2c19a..f3d76ba 100644
> --- a/drivers/net/mpc512x_fec.c
> +++ b/drivers/net/mpc512x_fec.c
> @@ -446,6 +446,19 @@ static void mpc512x_fec_halt (struct eth_device *dev)
> * wait at least 16 clock cycles
> */
> udelay (10);
> + /*
> + * NOTE: reset will also clear the MII speed register
> + * we should reinitialize it ASAP
> + */
> + if (fec->xcv_type != SEVENWIRE) {
> + /*
> + * Set MII_SPEED = (1/(mii_speed * 2)) * System Clock
> + * and do not drop the Preamble.
> + */
> + fec->eth->mii_speed = ((((gd->ips_clk / 1000000) / 5)
> + + 1)
> + << 1);
> + }
> #if (DEBUG & 0x3)
> printf ("Ethernet task stopped\n");
> #endif
> --

This patch is white-space corrupted. Please fix your mailer settings.

Also, you should use I/O accessors instead of direct pointer accesses
like we do it in the rest of the code (maybe you are using an obsolete
code base?).

Finally I disagree with the solution: I think it is actually correct
to disable the MII clock, too, when we stop the Ethernet interface.

However, we should make sure that the PHY gets (re-) initialized (by
running mpc512x_fec_init_phy()) if needed when a MII command is run.

Best regards,

Wolfgang Denk

--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
A person who is more than casually interested in computers should be
well schooled in machine language, since it is a fundamental part of
a computer. -- Donald Knuth