diff options
| author | Bartlomiej Sieka <tur@semihalf.com> | 2007-05-27 16:58:45 +0200 | 
|---|---|---|
| committer | Bartlomiej Sieka <tur@semihalf.com> | 2007-05-27 16:58:45 +0200 | 
| commit | c00125e07c1ebc125bab40e1e18bceed8be0c162 (patch) | |
| tree | 5c6261640564551bf822181ace842a3147e45025 | |
| parent | 93b78f534a6e708b4cf1a4ffb4d8438c67a007db (diff) | |
MPC5XXX, Motion-PRO: Fix PHY initialization problem.
After being reset in mpc5xxx_fec_init_phy(), PHY goes into FX mode, in which
networking does not function. This commit switches PHY to TX mode by clearing
the FX_SEL bit of Mode Control Register. It also reverses commit
008861a2f3ef2c062744d733787c7e530a1b8761, i.e., a temporary workaround.
Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com>
Acked-by: Bartlomiej Sieka <tur@semihalf.com>
| -rw-r--r-- | board/motionpro/motionpro.c | 18 | ||||
| -rw-r--r-- | cpu/mpc5xxx/fec.c | 4 | ||||
| -rw-r--r-- | include/configs/motionpro.h | 2 | 
3 files changed, 18 insertions, 6 deletions
| diff --git a/board/motionpro/motionpro.c b/board/motionpro/motionpro.c index 1729ae74166..b05e2ab1cdb 100644 --- a/board/motionpro/motionpro.c +++ b/board/motionpro/motionpro.c @@ -28,7 +28,7 @@  #include <common.h>  #include <mpc5xxx.h> - +#include <miiphy.h>  #if defined(CONFIG_OF_FLAT_TREE)  #include <ft_build.h>  #endif @@ -82,6 +82,22 @@ int board_early_init_r(void)  } +/* + * Additional PHY intialization. After being reset in mpc5xxx_fec_init_phy(), + * PHY goes into FX mode.  To take it out of the FX mode and switch into + * desired TX operation, one needs to clear the FX_SEL bit of Mode Control + * Register. + */ +void reset_phy(void) +{ +	unsigned short mode_control; + +	miiphy_read("FEC ETHERNET", CONFIG_PHY_ADDR, 0x15, &mode_control); +	miiphy_write("FEC ETHERNET", CONFIG_PHY_ADDR, 0x15, +			mode_control & 0xfffe); +	return; +} +  #ifndef CFG_RAMBOOT  /*   * Helper function to initialize SDRAM controller. diff --git a/cpu/mpc5xxx/fec.c b/cpu/mpc5xxx/fec.c index 0b8f24d18a7..62b5f4efdca 100644 --- a/cpu/mpc5xxx/fec.c +++ b/cpu/mpc5xxx/fec.c @@ -395,9 +395,7 @@ static int mpc5xxx_fec_init(struct eth_device *dev, bd_t * bis)  static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)  {  	mpc5xxx_fec_priv *fec = (mpc5xxx_fec_priv *)dev->priv; -#ifndef CONFIG_MOTIONPRO  	const uint8 phyAddr = CONFIG_PHY_ADDR;	/* Only one PHY */ -#endif /* !CONFIG_MOTIONPRO */  #if (DEBUG & 0x1)  	printf ("mpc5xxx_fec_init_phy... Begin\n"); @@ -437,7 +435,6 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)   * PHY initialization for the Motion-PRO board, until a proper fix is found.   */ -#ifndef CONFIG_MOTIONPRO  	if (fec->xcv_type != SEVENWIRE) {  		/*  		 * Set MII_SPEED = (1/(mii_speed * 2)) * System Clock @@ -560,7 +557,6 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)  		}  	} -#endif /* !CONFIG_MOTIONPRO */  #if (DEBUG & 0x2)  	if (fec->xcv_type != SEVENWIRE) diff --git a/include/configs/motionpro.h b/include/configs/motionpro.h index a4df64a75df..a7021b0719b 100644 --- a/include/configs/motionpro.h +++ b/include/configs/motionpro.h @@ -76,7 +76,7 @@  #define CONFIG_MPC5xxx_FEC	1  #define CONFIG_PHY_ADDR		0x2  #define CONFIG_PHY_TYPE		0x79c874 - +#define CONFIG_RESET_PHY_R	1  /*   * Autobooting | 
