Skip to content

Commit 21b01cb

Browse files
Russell King (Oracle)kuba-moo
authored andcommitted
net: stmmac: visconti: convert to set_clk_tx_rate() method
Convert visconti to use the set_clk_tx_rate() method. By doing so, the GMAC control register will already have been updated (unlike with the fix_mac_speed() method) so this code can be removed while porting to the set_clk_tx_rate() method. There is also no need for the spinlock, and has never been - neither fix_mac_speed() nor set_clk_tx_rate() can be called by more than one thread at a time, so the lock does nothing useful. Reviewed-by: Andrew Lunn <[email protected]> Reviewed-by: Jacob Keller <[email protected]> Acked-by: Nobuhiro Iwamatsu <[email protected]> Signed-off-by: Russell King (Oracle) <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent f7ca612 commit 21b01cb

File tree

1 file changed

+6
-19
lines changed

1 file changed

+6
-19
lines changed

drivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,14 @@ struct visconti_eth {
5151
u32 phy_intf_sel;
5252
struct clk *phy_ref_clk;
5353
struct device *dev;
54-
spinlock_t lock; /* lock to protect register update */
5554
};
5655

57-
static void visconti_eth_fix_mac_speed(void *priv, int speed, unsigned int mode)
56+
static int visconti_eth_set_clk_tx_rate(void *bsp_priv, struct clk *clk_tx_i,
57+
phy_interface_t interface, int speed)
5858
{
59-
struct visconti_eth *dwmac = priv;
59+
struct visconti_eth *dwmac = bsp_priv;
6060
struct net_device *netdev = dev_get_drvdata(dwmac->dev);
6161
unsigned int val, clk_sel_val = 0;
62-
unsigned long flags;
63-
64-
spin_lock_irqsave(&dwmac->lock, flags);
65-
66-
/* adjust link */
67-
val = readl(dwmac->reg + MAC_CTRL_REG);
68-
val &= ~(GMAC_CONFIG_PS | GMAC_CONFIG_FES);
6962

7063
switch (speed) {
7164
case SPEED_1000:
@@ -77,24 +70,19 @@ static void visconti_eth_fix_mac_speed(void *priv, int speed, unsigned int mode)
7770
clk_sel_val = ETHER_CLK_SEL_FREQ_SEL_25M;
7871
if (dwmac->phy_intf_sel == ETHER_CONFIG_INTF_RMII)
7972
clk_sel_val = ETHER_CLK_SEL_DIV_SEL_2;
80-
val |= GMAC_CONFIG_PS | GMAC_CONFIG_FES;
8173
break;
8274
case SPEED_10:
8375
if (dwmac->phy_intf_sel == ETHER_CONFIG_INTF_RGMII)
8476
clk_sel_val = ETHER_CLK_SEL_FREQ_SEL_2P5M;
8577
if (dwmac->phy_intf_sel == ETHER_CONFIG_INTF_RMII)
8678
clk_sel_val = ETHER_CLK_SEL_DIV_SEL_20;
87-
val |= GMAC_CONFIG_PS;
8879
break;
8980
default:
9081
/* No bit control */
9182
netdev_err(netdev, "Unsupported speed request (%d)", speed);
92-
spin_unlock_irqrestore(&dwmac->lock, flags);
93-
return;
83+
return -EINVAL;
9484
}
9585

96-
writel(val, dwmac->reg + MAC_CTRL_REG);
97-
9886
/* Stop internal clock */
9987
val = readl(dwmac->reg + REG_ETHER_CLOCK_SEL);
10088
val &= ~(ETHER_CLK_SEL_RMII_CLK_EN | ETHER_CLK_SEL_RX_TX_CLK_EN);
@@ -136,7 +124,7 @@ static void visconti_eth_fix_mac_speed(void *priv, int speed, unsigned int mode)
136124
break;
137125
}
138126

139-
spin_unlock_irqrestore(&dwmac->lock, flags);
127+
return 0;
140128
}
141129

142130
static int visconti_eth_init_hw(struct platform_device *pdev, struct plat_stmmacenet_data *plat_dat)
@@ -228,11 +216,10 @@ static int visconti_eth_dwmac_probe(struct platform_device *pdev)
228216
if (!dwmac)
229217
return -ENOMEM;
230218

231-
spin_lock_init(&dwmac->lock);
232219
dwmac->reg = stmmac_res.addr;
233220
dwmac->dev = &pdev->dev;
234221
plat_dat->bsp_priv = dwmac;
235-
plat_dat->fix_mac_speed = visconti_eth_fix_mac_speed;
222+
plat_dat->set_clk_tx_rate = visconti_eth_set_clk_tx_rate;
236223

237224
ret = visconti_eth_clock_probe(pdev, plat_dat);
238225
if (ret)

0 commit comments

Comments
 (0)