|
|
|
@ -8,6 +8,7 @@ |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#include <common.h> |
|
|
|
|
#include <micrel.h> |
|
|
|
|
#include <nand.h> |
|
|
|
|
#include <netdev.h> |
|
|
|
|
#include <phy.h> |
|
|
|
@ -69,27 +70,64 @@ void board_nand_init(void) |
|
|
|
|
|
|
|
|
|
int board_phy_config(struct phy_device *phydev) |
|
|
|
|
{ |
|
|
|
|
/* Extended PHY control 1, select GMII */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 23, 0x0020); |
|
|
|
|
|
|
|
|
|
/* Software reset necessary after GMII mode selction */ |
|
|
|
|
phy_reset(phydev); |
|
|
|
|
|
|
|
|
|
/* Enable extended page register access */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 31, 0x0001); |
|
|
|
|
|
|
|
|
|
/* 17e: Enhanced LED behavior, needs to be written twice */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 17, 0x09ff); |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 17, 0x09ff); |
|
|
|
|
|
|
|
|
|
/* 16e: Enhanced LED method select */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 16, 0xe0ea); |
|
|
|
|
|
|
|
|
|
/* Disable extended page register access */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 31, 0x0000); |
|
|
|
|
|
|
|
|
|
/* Enable clock output pin */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 18, 0x0049); |
|
|
|
|
unsigned short id1, id2; |
|
|
|
|
|
|
|
|
|
/* check whether KSZ9031 or AR8035 has to be configured */ |
|
|
|
|
id1 = phy_read(phydev, MDIO_DEVAD_NONE, 2); |
|
|
|
|
id2 = phy_read(phydev, MDIO_DEVAD_NONE, 3); |
|
|
|
|
|
|
|
|
|
if ((id1 == 0x22) && ((id2 & 0xFFF0) == 0x1620)) { |
|
|
|
|
/* PHY configuration for Micrel KSZ9031 */ |
|
|
|
|
printf("PHY KSZ9031 detected - "); |
|
|
|
|
|
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, 0x1c00); |
|
|
|
|
|
|
|
|
|
/* control data pad skew - devaddr = 0x02, register = 0x04 */ |
|
|
|
|
ksz9031_phy_extended_write(phydev, 0x02, |
|
|
|
|
MII_KSZ9031_EXT_RGMII_CTRL_SIG_SKEW, |
|
|
|
|
MII_KSZ9031_MOD_DATA_NO_POST_INC, |
|
|
|
|
0x0000); |
|
|
|
|
/* rx data pad skew - devaddr = 0x02, register = 0x05 */ |
|
|
|
|
ksz9031_phy_extended_write(phydev, 0x02, |
|
|
|
|
MII_KSZ9031_EXT_RGMII_RX_DATA_SKEW, |
|
|
|
|
MII_KSZ9031_MOD_DATA_NO_POST_INC, |
|
|
|
|
0x0000); |
|
|
|
|
/* tx data pad skew - devaddr = 0x02, register = 0x05 */ |
|
|
|
|
ksz9031_phy_extended_write(phydev, 0x02, |
|
|
|
|
MII_KSZ9031_EXT_RGMII_TX_DATA_SKEW, |
|
|
|
|
MII_KSZ9031_MOD_DATA_NO_POST_INC, |
|
|
|
|
0x0000); |
|
|
|
|
/* gtx and rx clock pad skew - devaddr = 0x02, reg = 0x08 */ |
|
|
|
|
ksz9031_phy_extended_write(phydev, 0x02, |
|
|
|
|
MII_KSZ9031_EXT_RGMII_CLOCK_SKEW, |
|
|
|
|
MII_KSZ9031_MOD_DATA_NO_POST_INC, |
|
|
|
|
0x03FF); |
|
|
|
|
} else { |
|
|
|
|
/* PHY configuration for Vitesse VSC8641 */ |
|
|
|
|
printf("PHY VSC8641 detected - "); |
|
|
|
|
|
|
|
|
|
/* Extended PHY control 1, select GMII */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 23, 0x0020); |
|
|
|
|
|
|
|
|
|
/* Software reset necessary after GMII mode selction */ |
|
|
|
|
phy_reset(phydev); |
|
|
|
|
|
|
|
|
|
/* Enable extended page register access */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 31, 0x0001); |
|
|
|
|
|
|
|
|
|
/* 17e: Enhanced LED behavior, needs to be written twice */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 17, 0x09ff); |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 17, 0x09ff); |
|
|
|
|
|
|
|
|
|
/* 16e: Enhanced LED method select */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 16, 0xe0ea); |
|
|
|
|
|
|
|
|
|
/* Disable extended page register access */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 31, 0x0000); |
|
|
|
|
|
|
|
|
|
/* Enable clock output pin */ |
|
|
|
|
phy_write(phydev, MDIO_DEVAD_NONE, 18, 0x0049); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (phydev->drv->config) |
|
|
|
|
phydev->drv->config(phydev); |
|
|
|
|