Fman/mEMAC: mEMAC fix for 10G MAC and PHY
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.Xie@freescale.com> Signed-off-by: Roy Zang <tie-fei.zang@freescale.com> Acked-By: Joe Hershberger <joe.hershberger@ni.com> Reviewed-by: York Sun <yorksun@freescale.com>
This commit is contained in:
parent
a5fbe7422e
commit
ff5fb2a36d
3 changed files with 12 additions and 3 deletions
|
@ -159,6 +159,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 */
|
||||
|
|
|
@ -37,7 +37,8 @@ static void memac_enable_mac(struct fsl_enet_mac *mac)
|
|||
{
|
||||
struct memac *regs = mac->base;
|
||||
|
||||
setbits_be32(®s->command_config, MEMAC_CMD_CFG_RXTX_EN);
|
||||
setbits_be32(®s->command_config,
|
||||
MEMAC_CMD_CFG_RXTX_EN | MEMAC_CMD_CFG_NO_LEN_CHK);
|
||||
}
|
||||
|
||||
static void memac_disable_mac(struct fsl_enet_mac *mac)
|
||||
|
@ -93,11 +94,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;
|
||||
|
||||
if (type == PHY_INTERFACE_MODE_RGMII) {
|
||||
if_mode &= ~IF_MODE_EN_AUTO;
|
||||
|
|
|
@ -71,6 +71,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(®s->mdio_stat, MDIO_STAT_ENC);
|
||||
|
|
Loading…
Reference in a new issue