diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c index 6292911fb54b..c9f0b8b601d2 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c @@ -535,6 +535,7 @@ static const struct stmmac_clk_rate stmmac_xgmac_csr_to_mdc[] = { */ static u32 stmmac_clk_csr_set(struct stmmac_priv *priv) { + const struct stmmac_clk_rate *rates; unsigned long clk_rate; u32 value = ~0; int i; @@ -548,25 +549,17 @@ static u32 stmmac_clk_csr_set(struct stmmac_priv *priv) * the frequency of clk_csr_i. So we do not change the default * divider. */ - for (i = 0; stmmac_std_csr_to_mdc[i].rate; i++) - if (clk_rate > stmmac_std_csr_to_mdc[i].rate) + rates = stmmac_std_csr_to_mdc; + if (priv->plat->flags & STMMAC_FLAG_HAS_SUN8I) + rates = stmmac_sun8i_csr_to_mdc; + if (priv->plat->core_type == DWMAC_CORE_XGMAC) + rates = stmmac_xgmac_csr_to_mdc; + + for (i = 0; rates[i].rate; i++) + if (clk_rate > rates[i].rate) break; - if (stmmac_std_csr_to_mdc[i].cr != (u8)~0) - value = stmmac_std_csr_to_mdc[i].cr; - - if (priv->plat->flags & STMMAC_FLAG_HAS_SUN8I) { - for (i = 0; stmmac_sun8i_csr_to_mdc[i].rate; i++) - if (clk_rate > stmmac_sun8i_csr_to_mdc[i].rate) - break; - value = stmmac_sun8i_csr_to_mdc[i].cr; - } - - if (priv->plat->core_type == DWMAC_CORE_XGMAC) { - for (i = 0; stmmac_xgmac_csr_to_mdc[i].rate; i++) - if (clk_rate > stmmac_xgmac_csr_to_mdc[i].rate) - break; - value = stmmac_xgmac_csr_to_mdc[i].cr; - } + if (rates[i].cr != (u8)~0) + value = rates[i].cr; return value; }