Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'net-stmmac-thead-clean-up-clock-rate-setting'

Russell King says:

====================
net: stmmac: thead: clean up clock rate setting

This series cleans up the thead clock rate setting to use the
rgmii_clock() helper function added to phylib.

The first patch switches over to using the rgmii_clock() helper,
and the second patch cleans up the verification that the desired
clock rate is achievable, allowing the private clock rate
definitions to be removed.
====================

Tested-by: Drew Fustini <drew@pdp7.com>
Link: https://patch.msgid.link/Z7iKdaCp4hLWWgJ2@shell.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+9 -19
+9 -19
drivers/net/ethernet/stmicro/stmmac/dwmac-thead.c
··· 45 45 #define TXCLK_DIR_OUTPUT FIELD_PREP(TXCLK_DIR_MASK, 0) 46 46 #define TXCLK_DIR_INPUT FIELD_PREP(TXCLK_DIR_MASK, 1) 47 47 48 - #define GMAC_GMII_RGMII_RATE 125000000 49 - #define GMAC_MII_RATE 25000000 50 - 51 48 struct thead_dwmac { 52 49 struct plat_stmmacenet_data *plat; 53 50 void __iomem *apb_base; ··· 106 109 struct plat_stmmacenet_data *plat; 107 110 struct thead_dwmac *dwmac = priv; 108 111 unsigned long rate; 112 + long tx_rate; 109 113 u32 div, reg; 110 114 111 115 plat = dwmac->plat; ··· 121 123 case PHY_INTERFACE_MODE_RGMII_RXID: 122 124 case PHY_INTERFACE_MODE_RGMII_TXID: 123 125 rate = clk_get_rate(plat->stmmac_clk); 124 - if (!rate || rate % GMAC_GMII_RGMII_RATE != 0 || 125 - rate % GMAC_MII_RATE != 0) { 126 - dev_err(dwmac->dev, "invalid gmac rate %ld\n", rate); 127 - return; 128 - } 129 126 130 127 writel(0, dwmac->apb_base + GMAC_PLLCLK_DIV); 131 128 132 - switch (speed) { 133 - case SPEED_1000: 134 - div = rate / GMAC_GMII_RGMII_RATE; 135 - break; 136 - case SPEED_100: 137 - div = rate / GMAC_MII_RATE; 138 - break; 139 - case SPEED_10: 140 - div = rate * 10 / GMAC_MII_RATE; 141 - break; 142 - default: 129 + tx_rate = rgmii_clock(speed); 130 + if (tx_rate < 0) { 143 131 dev_err(dwmac->dev, "invalid speed %d\n", speed); 132 + return; 133 + } 134 + 135 + div = rate / tx_rate; 136 + if (rate != tx_rate * div) { 137 + dev_err(dwmac->dev, "invalid gmac rate %lu\n", rate); 144 138 return; 145 139 } 146 140