|
@@ -401,7 +401,8 @@ static int bcm_init(struct uec_mii_info *mii_info)
|
|
|
|
|
|
gbit_config_aneg(mii_info);
|
|
|
|
|
|
- if (uec->uec_info->enet_interface == ENET_1000_RGMII_RXID) {
|
|
|
+ if ((uec->uec_info->enet_interface_type == RGMII_RXID) &&
|
|
|
+ (uec->uec_info->speed == 1000)) {
|
|
|
u16 val;
|
|
|
int cnt = 50;
|
|
|
|
|
@@ -429,20 +430,22 @@ static int marvell_init(struct uec_mii_info *mii_info)
|
|
|
{
|
|
|
struct eth_device *edev = mii_info->dev;
|
|
|
uec_private_t *uec = edev->priv;
|
|
|
- enum enet_interface iface = uec->uec_info->enet_interface;
|
|
|
+ enum enet_interface_type iface = uec->uec_info->enet_interface_type;
|
|
|
+ int speed = uec->uec_info->speed;
|
|
|
|
|
|
- if (iface == ENET_1000_RGMII_ID ||
|
|
|
- iface == ENET_1000_RGMII_RXID ||
|
|
|
- iface == ENET_1000_RGMII_TXID) {
|
|
|
+ if ((speed == 1000) &&
|
|
|
+ (iface == RGMII_ID ||
|
|
|
+ iface == RGMII_RXID ||
|
|
|
+ iface == RGMII_TXID)) {
|
|
|
int temp;
|
|
|
|
|
|
temp = phy_read(mii_info, MII_M1111_PHY_EXT_CR);
|
|
|
- if (iface == ENET_1000_RGMII_ID) {
|
|
|
+ if (iface == RGMII_ID) {
|
|
|
temp |= MII_M1111_RX_DELAY | MII_M1111_TX_DELAY;
|
|
|
- } else if (iface == ENET_1000_RGMII_RXID) {
|
|
|
+ } else if (iface == RGMII_RXID) {
|
|
|
temp &= ~MII_M1111_TX_DELAY;
|
|
|
temp |= MII_M1111_RX_DELAY;
|
|
|
- } else if (iface == ENET_1000_RGMII_TXID) {
|
|
|
+ } else if (iface == RGMII_TXID) {
|
|
|
temp &= ~MII_M1111_RX_DELAY;
|
|
|
temp |= MII_M1111_TX_DELAY;
|
|
|
}
|
|
@@ -795,7 +798,9 @@ struct phy_info *uec_get_phy_info (struct uec_mii_info *mii_info)
|
|
|
}
|
|
|
|
|
|
void marvell_phy_interface_mode (struct eth_device *dev,
|
|
|
- enet_interface_e mode)
|
|
|
+ enet_interface_type_e type,
|
|
|
+ int speed
|
|
|
+ )
|
|
|
{
|
|
|
uec_private_t *uec = (uec_private_t *) dev->priv;
|
|
|
struct uec_mii_info *mii_info;
|
|
@@ -807,33 +812,35 @@ void marvell_phy_interface_mode (struct eth_device *dev,
|
|
|
}
|
|
|
mii_info = uec->mii_info;
|
|
|
|
|
|
- if (mode == ENET_100_RGMII) {
|
|
|
- phy_write (mii_info, 0x00, 0x9140);
|
|
|
- phy_write (mii_info, 0x1d, 0x001f);
|
|
|
- phy_write (mii_info, 0x1e, 0x200c);
|
|
|
- phy_write (mii_info, 0x1d, 0x0005);
|
|
|
- phy_write (mii_info, 0x1e, 0x0000);
|
|
|
- phy_write (mii_info, 0x1e, 0x0100);
|
|
|
- phy_write (mii_info, 0x09, 0x0e00);
|
|
|
- phy_write (mii_info, 0x04, 0x01e1);
|
|
|
- phy_write (mii_info, 0x00, 0x9140);
|
|
|
- phy_write (mii_info, 0x00, 0x1000);
|
|
|
- udelay (100000);
|
|
|
- phy_write (mii_info, 0x00, 0x2900);
|
|
|
- phy_write (mii_info, 0x14, 0x0cd2);
|
|
|
- phy_write (mii_info, 0x00, 0xa100);
|
|
|
- phy_write (mii_info, 0x09, 0x0000);
|
|
|
- phy_write (mii_info, 0x1b, 0x800b);
|
|
|
- phy_write (mii_info, 0x04, 0x05e1);
|
|
|
- phy_write (mii_info, 0x00, 0xa100);
|
|
|
- phy_write (mii_info, 0x00, 0x2100);
|
|
|
- udelay (1000000);
|
|
|
- } else if (mode == ENET_10_RGMII) {
|
|
|
- phy_write (mii_info, 0x14, 0x8e40);
|
|
|
- phy_write (mii_info, 0x1b, 0x800b);
|
|
|
- phy_write (mii_info, 0x14, 0x0c82);
|
|
|
- phy_write (mii_info, 0x00, 0x8100);
|
|
|
- udelay (1000000);
|
|
|
+ if (type == RGMII) {
|
|
|
+ if (speed == 100) {
|
|
|
+ phy_write (mii_info, 0x00, 0x9140);
|
|
|
+ phy_write (mii_info, 0x1d, 0x001f);
|
|
|
+ phy_write (mii_info, 0x1e, 0x200c);
|
|
|
+ phy_write (mii_info, 0x1d, 0x0005);
|
|
|
+ phy_write (mii_info, 0x1e, 0x0000);
|
|
|
+ phy_write (mii_info, 0x1e, 0x0100);
|
|
|
+ phy_write (mii_info, 0x09, 0x0e00);
|
|
|
+ phy_write (mii_info, 0x04, 0x01e1);
|
|
|
+ phy_write (mii_info, 0x00, 0x9140);
|
|
|
+ phy_write (mii_info, 0x00, 0x1000);
|
|
|
+ udelay (100000);
|
|
|
+ phy_write (mii_info, 0x00, 0x2900);
|
|
|
+ phy_write (mii_info, 0x14, 0x0cd2);
|
|
|
+ phy_write (mii_info, 0x00, 0xa100);
|
|
|
+ phy_write (mii_info, 0x09, 0x0000);
|
|
|
+ phy_write (mii_info, 0x1b, 0x800b);
|
|
|
+ phy_write (mii_info, 0x04, 0x05e1);
|
|
|
+ phy_write (mii_info, 0x00, 0xa100);
|
|
|
+ phy_write (mii_info, 0x00, 0x2100);
|
|
|
+ udelay (1000000);
|
|
|
+ } else if (speed == 10) {
|
|
|
+ phy_write (mii_info, 0x14, 0x8e40);
|
|
|
+ phy_write (mii_info, 0x1b, 0x800b);
|
|
|
+ phy_write (mii_info, 0x14, 0x0c82);
|
|
|
+ phy_write (mii_info, 0x00, 0x8100);
|
|
|
+ udelay (1000000);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/* handle 88e1111 rev.B2 erratum 5.6 */
|
|
@@ -844,9 +851,10 @@ void marvell_phy_interface_mode (struct eth_device *dev,
|
|
|
/* now the B2 will correctly report autoneg completion status */
|
|
|
}
|
|
|
|
|
|
-void change_phy_interface_mode (struct eth_device *dev, enet_interface_e mode)
|
|
|
+void change_phy_interface_mode (struct eth_device *dev,
|
|
|
+ enet_interface_type_e type, int speed)
|
|
|
{
|
|
|
#ifdef CONFIG_PHY_MODE_NEED_CHANGE
|
|
|
- marvell_phy_interface_mode (dev, mode);
|
|
|
+ marvell_phy_interface_mode (dev, type, speed);
|
|
|
#endif
|
|
|
}
|