diff options
Diffstat (limited to 'drivers/net/ethernet/cadence/macb_main.c')
| -rw-r--r-- | drivers/net/ethernet/cadence/macb_main.c | 42 | 
1 files changed, 26 insertions, 16 deletions
| diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c index d13fb1d31821..ffce528aa00e 100644 --- a/drivers/net/ethernet/cadence/macb_main.c +++ b/drivers/net/ethernet/cadence/macb_main.c @@ -313,7 +313,7 @@ static void macb_get_hwaddr(struct macb *bp)  		addr[5] = (top >> 8) & 0xff;  		if (is_valid_ether_addr(addr)) { -			memcpy(bp->dev->dev_addr, addr, sizeof(addr)); +			eth_hw_addr_set(bp->dev, addr);  			return;  		}  	} @@ -522,21 +522,21 @@ static void macb_validate(struct phylink_config *config,  	    state->interface != PHY_INTERFACE_MODE_SGMII &&  	    state->interface != PHY_INTERFACE_MODE_10GBASER &&  	    !phy_interface_mode_is_rgmii(state->interface)) { -		bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); +		linkmode_zero(supported);  		return;  	}  	if (!macb_is_gem(bp) &&  	    (state->interface == PHY_INTERFACE_MODE_GMII ||  	     phy_interface_mode_is_rgmii(state->interface))) { -		bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); +		linkmode_zero(supported);  		return;  	}  	if (state->interface == PHY_INTERFACE_MODE_10GBASER &&  	    !(bp->caps & MACB_CAPS_HIGH_SPEED &&  	      bp->caps & MACB_CAPS_PCS)) { -		bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); +		linkmode_zero(supported);  		return;  	} @@ -547,13 +547,8 @@ static void macb_validate(struct phylink_config *config,  	if (bp->caps & MACB_CAPS_GIGABIT_MODE_AVAILABLE &&  	    (state->interface == PHY_INTERFACE_MODE_NA ||  	     state->interface == PHY_INTERFACE_MODE_10GBASER)) { -		phylink_set(mask, 10000baseCR_Full); -		phylink_set(mask, 10000baseER_Full); +		phylink_set_10g_modes(mask);  		phylink_set(mask, 10000baseKR_Full); -		phylink_set(mask, 10000baseLR_Full); -		phylink_set(mask, 10000baseLRM_Full); -		phylink_set(mask, 10000baseSR_Full); -		phylink_set(mask, 10000baseT_Full);  		if (state->interface != PHY_INTERFACE_MODE_NA)  			goto out;  	} @@ -575,9 +570,8 @@ static void macb_validate(struct phylink_config *config,  			phylink_set(mask, 1000baseT_Half);  	}  out: -	bitmap_and(supported, supported, mask, __ETHTOOL_LINK_MODE_MASK_NBITS); -	bitmap_and(state->advertising, state->advertising, mask, -		   __ETHTOOL_LINK_MODE_MASK_NBITS); +	linkmode_and(supported, supported, mask); +	linkmode_and(state->advertising, state->advertising, mask);  }  static void macb_usx_pcs_link_up(struct phylink_pcs *pcs, unsigned int mode, @@ -684,6 +678,9 @@ static void macb_mac_config(struct phylink_config *config, unsigned int mode,  		} else if (state->interface == PHY_INTERFACE_MODE_10GBASER) {  			ctrl |= GEM_BIT(PCSSEL);  			ncr |= GEM_BIT(ENABLE_HS_MAC); +		} else if (bp->caps & MACB_CAPS_MIIONRGMII && +			   bp->phy_interface == PHY_INTERFACE_MODE_MII) { +			ncr |= MACB_BIT(MIIONRGMII);  		}  	} @@ -900,6 +897,17 @@ static int macb_mdiobus_register(struct macb *bp)  {  	struct device_node *child, *np = bp->pdev->dev.of_node; +	/* If we have a child named mdio, probe it instead of looking for PHYs +	 * directly under the MAC node +	 */ +	child = of_get_child_by_name(np, "mdio"); +	if (child) { +		int ret = of_mdiobus_register(bp->mii_bus, child); + +		of_node_put(child); +		return ret; +	} +  	if (of_phy_is_fixed_link(np))  		return mdiobus_register(bp->mii_bus); @@ -4594,7 +4602,8 @@ static const struct macb_config zynq_config = {  };  static const struct macb_config sama7g5_gem_config = { -	.caps = MACB_CAPS_GIGABIT_MODE_AVAILABLE | MACB_CAPS_CLK_HW_CHG, +	.caps = MACB_CAPS_GIGABIT_MODE_AVAILABLE | MACB_CAPS_CLK_HW_CHG | +		MACB_CAPS_MIIONRGMII,  	.dma_burst_length = 16,  	.clk_init = macb_clk_init,  	.init = macb_init, @@ -4602,7 +4611,8 @@ static const struct macb_config sama7g5_gem_config = {  };  static const struct macb_config sama7g5_emac_config = { -	.caps = MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII | MACB_CAPS_USRIO_HAS_CLKEN, +	.caps = MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII | +		MACB_CAPS_USRIO_HAS_CLKEN | MACB_CAPS_MIIONRGMII,  	.dma_burst_length = 16,  	.clk_init = macb_clk_init,  	.init = macb_init, @@ -4774,7 +4784,7 @@ static int macb_probe(struct platform_device *pdev)  	if (bp->caps & MACB_CAPS_NEEDS_RSTONUBR)  		bp->rx_intr_mask |= MACB_BIT(RXUBR); -	err = of_get_mac_address(np, bp->dev->dev_addr); +	err = of_get_ethdev_address(np, bp->dev);  	if (err == -EPROBE_DEFER)  		goto err_out_free_netdev;  	else if (err) |