diff options
| author | benoit.thebaudeau@advans <benoit.thebaudeau@advans> | 2012-07-19 02:12:46 +0000 | 
|---|---|---|
| committer | Joe Hershberger <joe.hershberger@ni.com> | 2012-07-19 11:46:13 -0500 | 
| commit | 9d2d924a0a728a4f852a3e9de7aa6cc72c4b460d (patch) | |
| tree | bde3e3ebe3ce16002ffd26a60658941b89b20d17 | |
| parent | 48a3e999c86e7e6033133152b07a308def559d46 (diff) | |
| download | olio-uboot-2014.01-9d2d924a0a728a4f852a3e9de7aa6cc72c4b460d.tar.xz olio-uboot-2014.01-9d2d924a0a728a4f852a3e9de7aa6cc72c4b460d.zip | |
net: fec_mxc: Fix setting of RCR for xMII
At least on i.MX25, the RMII mode did not work, which is fixed by this patch.
The MII_MODE bit of the FEC RCR register means xMII, i.e. 'not 7-wire', so set
it accordingly.
According to the xMII and 7-wire (aka GPSI) standards, full duplex should be
available on xMII, but not on 7-wire, so set FCE accordingly. The FEC may
support full duplex for 7-wire too, but the reference manual does not say that,
so avoid an invalid assumption. Actually, the choice between half and full
duplex also depends on the endpoint/switch/repeater configuration, so a config
option could be added for that, but there has been no need for it so far.
Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
Cc: Joe Hershberger <joe.hershberger@gmail.com>
Cc: Stefano Babic <sbabic@denx.de>
| -rw-r--r-- | drivers/net/fec_mxc.c | 8 | 
1 files changed, 3 insertions, 5 deletions
| diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index 570055218..ddbdd3336 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -424,14 +424,12 @@ static void fec_reg_setup(struct fec_priv *fec)  	/* Start with frame length = 1518, common for all modes. */  	rcntrl = PKTSIZE << FEC_RCNTRL_MAX_FL_SHIFT; -	if (fec->xcv_type == SEVENWIRE) -		rcntrl |= FEC_RCNTRL_FCE; -	else if (fec->xcv_type == RGMII) +	if (fec->xcv_type != SEVENWIRE)		/* xMII modes */ +		rcntrl |= FEC_RCNTRL_FCE | FEC_RCNTRL_MII_MODE; +	if (fec->xcv_type == RGMII)  		rcntrl |= FEC_RCNTRL_RGMII;  	else if (fec->xcv_type == RMII)  		rcntrl |= FEC_RCNTRL_RMII; -	else	/* MII mode */ -		rcntrl |= FEC_RCNTRL_FCE | FEC_RCNTRL_MII_MODE;  	writel(rcntrl, &fec->eth->r_cntrl);  } |