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>
This commit is contained in:
parent
48a3e999c8
commit
9d2d924a0a
|
@ -424,14 +424,12 @@ static void fec_reg_setup(struct fec_priv *fec)
|
||||||
|
|
||||||
/* Start with frame length = 1518, common for all modes. */
|
/* Start with frame length = 1518, common for all modes. */
|
||||||
rcntrl = PKTSIZE << FEC_RCNTRL_MAX_FL_SHIFT;
|
rcntrl = PKTSIZE << FEC_RCNTRL_MAX_FL_SHIFT;
|
||||||
if (fec->xcv_type == SEVENWIRE)
|
if (fec->xcv_type != SEVENWIRE) /* xMII modes */
|
||||||
rcntrl |= FEC_RCNTRL_FCE;
|
rcntrl |= FEC_RCNTRL_FCE | FEC_RCNTRL_MII_MODE;
|
||||||
else if (fec->xcv_type == RGMII)
|
if (fec->xcv_type == RGMII)
|
||||||
rcntrl |= FEC_RCNTRL_RGMII;
|
rcntrl |= FEC_RCNTRL_RGMII;
|
||||||
else if (fec->xcv_type == RMII)
|
else if (fec->xcv_type == RMII)
|
||||||
rcntrl |= FEC_RCNTRL_RMII;
|
rcntrl |= FEC_RCNTRL_RMII;
|
||||||
else /* MII mode */
|
|
||||||
rcntrl |= FEC_RCNTRL_FCE | FEC_RCNTRL_MII_MODE;
|
|
||||||
|
|
||||||
writel(rcntrl, &fec->eth->r_cntrl);
|
writel(rcntrl, &fec->eth->r_cntrl);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue