mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
fman/mEMAC: set SETSP bit in IF_MODE regisgter for RGMII speed
Some legacy RGMII phys don't have in band signaling for the speed information. so set the RGMII MAC mode according to the speed got from PHY. Signed-off-by: Roy Zang <tie-fei.zang@freescale.com> Reported-by: John Traill <john.traill@freescale.com> Signed-off-by: Andy Fleming <afleming@freescale.com>
This commit is contained in:
parent
7b700d2125
commit
c5729f0b1f
2 changed files with 21 additions and 0 deletions
|
@ -222,6 +222,10 @@ struct memac {
|
|||
|
||||
/* IF_MODE - Interface Mode Register */
|
||||
#define IF_MODE_EN_AUTO 0x00008000 /* 1 - Enable automatic speed selection */
|
||||
#define IF_MODE_SETSP_100M 0x00000000 /* 00 - 100Mbps RGMII */
|
||||
#define IF_MODE_SETSP_10M 0x00002000 /* 01 - 10Mbps RGMII */
|
||||
#define IF_MODE_SETSP_1000M 0x00004000 /* 10 - 1000Mbps RGMII */
|
||||
#define IF_MODE_SETSP_MASK 0x00006000 /* setsp mask bits */
|
||||
#define IF_MODE_XGMII 0x00000000 /* 00- XGMII(10) interface mode */
|
||||
#define IF_MODE_GMII 0x00000002 /* 10- GMII interface mode */
|
||||
#define IF_MODE_MASK 0x00000003 /* mask for mode interface mode */
|
||||
|
|
|
@ -112,6 +112,23 @@ static void memac_set_interface_mode(struct fsl_enet_mac *mac,
|
|||
/* Enable automatic speed selection */
|
||||
if_mode |= IF_MODE_EN_AUTO;
|
||||
|
||||
if (type == PHY_INTERFACE_MODE_RGMII) {
|
||||
if_mode &= ~IF_MODE_EN_AUTO;
|
||||
if_mode &= ~IF_MODE_SETSP_MASK;
|
||||
switch (speed) {
|
||||
case SPEED_1000:
|
||||
if_mode |= IF_MODE_SETSP_1000M;
|
||||
break;
|
||||
case SPEED_100:
|
||||
if_mode |= IF_MODE_SETSP_100M;
|
||||
break;
|
||||
case SPEED_10:
|
||||
if_mode |= IF_MODE_SETSP_10M;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
debug(" %s, if_mode = %x\n", __func__, if_mode);
|
||||
debug(" %s, if_status = %x\n", __func__, if_status);
|
||||
out_be32(®s->if_mode, if_mode);
|
||||
|
|
Loading…
Reference in a new issue