1. use Payload length check disable when enable MAC;
2. add XGMII support for setting MAC interface mode;
3. only enable auto negotiation for Non-XGMII mode;
4. return 0xffff if clause 22 is used to read 10G phy_id;

Signed-off-by: Shaohui Xie <shaohui....@freescale.com>
Signed-off-by: Roy Zang <tie-fei.z...@freescale.com>
---
 arch/powerpc/include/asm/fsl_memac.h |    1 +
 drivers/net/fm/memac.c               |   12 +++++++++---
 drivers/net/fm/memac_phy.c           |    2 ++
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/include/asm/fsl_memac.h 
b/arch/powerpc/include/asm/fsl_memac.h
index d6b60e6..7359f8b 100644
--- a/arch/powerpc/include/asm/fsl_memac.h
+++ b/arch/powerpc/include/asm/fsl_memac.h
@@ -172,6 +172,7 @@ struct memac {
 #define MEMAC_CMD_CFG_RX_EN            0x00000002 /* MAC Rx path enable */
 #define MEMAC_CMD_CFG_TX_EN            0x00000001 /* MAC Tx path enable */
 #define MEMAC_CMD_CFG_RXTX_EN  (MEMAC_CMD_CFG_RX_EN | MEMAC_CMD_CFG_TX_EN)
+#define MEMAC_CMD_CFG_NO_LEN_CHK 0x20000 /* Payload length check disable */
 
 /* HASHTABLE_CTRL - Hashtable control register */
 #define HASHTABLE_CTRL_MCAST_EN        0x00000200 /* enable mulitcast Rx hash 
*/
diff --git a/drivers/net/fm/memac.c b/drivers/net/fm/memac.c
index 32c7054..8eec7b3 100644
--- a/drivers/net/fm/memac.c
+++ b/drivers/net/fm/memac.c
@@ -51,7 +51,8 @@ static void memac_enable_mac(struct fsl_enet_mac *mac)
 {
        struct memac *regs = mac->base;
 
-       setbits_be32(&regs->command_config, MEMAC_CMD_CFG_RXTX_EN);
+       setbits_be32(&regs->command_config, MEMAC_CMD_CFG_RXTX_EN
+                                       | MEMAC_CMD_CFG_NO_LEN_CHK);
 }
 
 static void memac_disable_mac(struct fsl_enet_mac *mac)
@@ -106,11 +107,16 @@ static void memac_set_interface_mode(struct fsl_enet_mac 
*mac,
                if_mode &= ~IF_MODE_MASK;
                if_mode |= (IF_MODE_GMII);
                break;
+       case PHY_INTERFACE_MODE_XGMII:
+               if_mode &= ~IF_MODE_MASK;
+               if_mode |= IF_MODE_XGMII;
+               break;
        default:
                break;
        }
-       /* Enable automatic speed selection */
-       if_mode |= IF_MODE_EN_AUTO;
+       /* Enable automatic speed selection for Non-XGMII */
+       if (type != PHY_INTERFACE_MODE_XGMII)
+               if_mode |= IF_MODE_EN_AUTO;
 
        debug(" %s, if_mode = %x\n", __func__,  if_mode);
        debug(" %s, if_status = %x\n", __func__,  if_status);
diff --git a/drivers/net/fm/memac_phy.c b/drivers/net/fm/memac_phy.c
index ea6118b..18dc2aa 100644
--- a/drivers/net/fm/memac_phy.c
+++ b/drivers/net/fm/memac_phy.c
@@ -86,6 +86,8 @@ int memac_mdio_read(struct mii_dev *bus, int port_addr, int 
dev_addr,
        u32 c45 = 1;
 
        if (dev_addr == MDIO_DEVAD_NONE) {
+               if (!strcmp(bus->name, DEFAULT_FM_TGEC_MDIO_NAME))
+                       return 0xffff;
                c45 = 0; /* clause 22 */
                dev_addr = regnum & 0x1f;
                clrbits_be32(&regs->mdio_stat, MDIO_STAT_ENC);
-- 
1.6.4


_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to