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 'nte-stmmac-visconti-cleanups'

Russell King says:

====================
net: stmmac: visconti: cleanups

A short series of cleanups to the visconti dwmac glue.
====================

Link: https://patch.msgid.link/aFCHJWXSLbUoogi6@shell.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+72 -53
+72 -53
drivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c
··· 48 48 49 49 struct visconti_eth { 50 50 void __iomem *reg; 51 - u32 phy_intf_sel; 52 51 struct clk *phy_ref_clk; 53 52 struct device *dev; 54 53 }; ··· 56 57 phy_interface_t interface, int speed) 57 58 { 58 59 struct visconti_eth *dwmac = bsp_priv; 59 - struct net_device *netdev = dev_get_drvdata(dwmac->dev); 60 - unsigned int val, clk_sel_val = 0; 60 + unsigned long clk_sel, val; 61 61 62 - switch (speed) { 63 - case SPEED_1000: 64 - if (dwmac->phy_intf_sel == ETHER_CONFIG_INTF_RGMII) 65 - clk_sel_val = ETHER_CLK_SEL_FREQ_SEL_125M; 66 - break; 67 - case SPEED_100: 68 - if (dwmac->phy_intf_sel == ETHER_CONFIG_INTF_RGMII) 69 - clk_sel_val = ETHER_CLK_SEL_FREQ_SEL_25M; 70 - if (dwmac->phy_intf_sel == ETHER_CONFIG_INTF_RMII) 71 - clk_sel_val = ETHER_CLK_SEL_DIV_SEL_2; 72 - break; 73 - case SPEED_10: 74 - if (dwmac->phy_intf_sel == ETHER_CONFIG_INTF_RGMII) 75 - clk_sel_val = ETHER_CLK_SEL_FREQ_SEL_2P5M; 76 - if (dwmac->phy_intf_sel == ETHER_CONFIG_INTF_RMII) 77 - clk_sel_val = ETHER_CLK_SEL_DIV_SEL_20; 78 - break; 79 - default: 80 - /* No bit control */ 81 - netdev_err(netdev, "Unsupported speed request (%d)", speed); 82 - return -EINVAL; 83 - } 62 + if (phy_interface_mode_is_rgmii(interface)) { 63 + switch (speed) { 64 + case SPEED_1000: 65 + clk_sel = ETHER_CLK_SEL_FREQ_SEL_125M; 66 + break; 84 67 85 - /* Stop internal clock */ 86 - val = readl(dwmac->reg + REG_ETHER_CLOCK_SEL); 87 - val &= ~(ETHER_CLK_SEL_RMII_CLK_EN | ETHER_CLK_SEL_RX_TX_CLK_EN); 88 - val |= ETHER_CLK_SEL_TX_O_E_N_IN; 89 - writel(val, dwmac->reg + REG_ETHER_CLOCK_SEL); 68 + case SPEED_100: 69 + clk_sel = ETHER_CLK_SEL_FREQ_SEL_25M; 70 + break; 90 71 91 - /* Set Clock-Mux, Start clock, Set TX_O direction */ 92 - switch (dwmac->phy_intf_sel) { 93 - case ETHER_CONFIG_INTF_RGMII: 94 - val = clk_sel_val | ETHER_CLK_SEL_RX_CLK_EXT_SEL_RXC; 72 + case SPEED_10: 73 + clk_sel = ETHER_CLK_SEL_FREQ_SEL_2P5M; 74 + break; 75 + 76 + default: 77 + return -EINVAL; 78 + } 79 + 80 + /* Stop internal clock */ 81 + val = readl(dwmac->reg + REG_ETHER_CLOCK_SEL); 82 + val &= ~(ETHER_CLK_SEL_RMII_CLK_EN | 83 + ETHER_CLK_SEL_RX_TX_CLK_EN); 84 + val |= ETHER_CLK_SEL_TX_O_E_N_IN; 85 + writel(val, dwmac->reg + REG_ETHER_CLOCK_SEL); 86 + 87 + /* Set Clock-Mux, Start clock, Set TX_O direction */ 88 + val = clk_sel | ETHER_CLK_SEL_RX_CLK_EXT_SEL_RXC; 95 89 writel(val, dwmac->reg + REG_ETHER_CLOCK_SEL); 96 90 97 91 val |= ETHER_CLK_SEL_RX_TX_CLK_EN; ··· 92 100 93 101 val &= ~ETHER_CLK_SEL_TX_O_E_N_IN; 94 102 writel(val, dwmac->reg + REG_ETHER_CLOCK_SEL); 95 - break; 96 - case ETHER_CONFIG_INTF_RMII: 97 - val = clk_sel_val | ETHER_CLK_SEL_RX_CLK_EXT_SEL_DIV | 98 - ETHER_CLK_SEL_TX_CLK_EXT_SEL_DIV | ETHER_CLK_SEL_TX_O_E_N_IN | 99 - ETHER_CLK_SEL_RMII_CLK_SEL_RX_C; 103 + } else if (interface == PHY_INTERFACE_MODE_RMII) { 104 + switch (speed) { 105 + case SPEED_100: 106 + clk_sel = ETHER_CLK_SEL_DIV_SEL_2; 107 + break; 108 + 109 + case SPEED_10: 110 + clk_sel = ETHER_CLK_SEL_DIV_SEL_20; 111 + break; 112 + 113 + default: 114 + return -EINVAL; 115 + } 116 + 117 + /* Stop internal clock */ 118 + val = readl(dwmac->reg + REG_ETHER_CLOCK_SEL); 119 + val &= ~(ETHER_CLK_SEL_RMII_CLK_EN | 120 + ETHER_CLK_SEL_RX_TX_CLK_EN); 121 + val |= ETHER_CLK_SEL_TX_O_E_N_IN; 122 + writel(val, dwmac->reg + REG_ETHER_CLOCK_SEL); 123 + 124 + /* Set Clock-Mux, Start clock, Set TX_O direction */ 125 + val = clk_sel | ETHER_CLK_SEL_RX_CLK_EXT_SEL_DIV | 126 + ETHER_CLK_SEL_TX_CLK_EXT_SEL_DIV | 127 + ETHER_CLK_SEL_TX_O_E_N_IN | 128 + ETHER_CLK_SEL_RMII_CLK_SEL_RX_C; 100 129 writel(val, dwmac->reg + REG_ETHER_CLOCK_SEL); 101 130 102 131 val |= ETHER_CLK_SEL_RMII_CLK_RST; ··· 125 112 126 113 val |= ETHER_CLK_SEL_RMII_CLK_EN | ETHER_CLK_SEL_RX_TX_CLK_EN; 127 114 writel(val, dwmac->reg + REG_ETHER_CLOCK_SEL); 128 - break; 129 - case ETHER_CONFIG_INTF_MII: 130 - default: 131 - val = clk_sel_val | ETHER_CLK_SEL_RX_CLK_EXT_SEL_RXC | 132 - ETHER_CLK_SEL_TX_CLK_EXT_SEL_TXC | ETHER_CLK_SEL_TX_O_E_N_IN; 115 + } else { 116 + /* Stop internal clock */ 117 + val = readl(dwmac->reg + REG_ETHER_CLOCK_SEL); 118 + val &= ~(ETHER_CLK_SEL_RMII_CLK_EN | 119 + ETHER_CLK_SEL_RX_TX_CLK_EN); 120 + val |= ETHER_CLK_SEL_TX_O_E_N_IN; 121 + writel(val, dwmac->reg + REG_ETHER_CLOCK_SEL); 122 + 123 + /* Set Clock-Mux, Start clock, Set TX_O direction */ 124 + val = ETHER_CLK_SEL_RX_CLK_EXT_SEL_RXC | 125 + ETHER_CLK_SEL_TX_CLK_EXT_SEL_TXC | 126 + ETHER_CLK_SEL_TX_O_E_N_IN; 133 127 writel(val, dwmac->reg + REG_ETHER_CLOCK_SEL); 134 128 135 129 val |= ETHER_CLK_SEL_RX_TX_CLK_EN; 136 130 writel(val, dwmac->reg + REG_ETHER_CLOCK_SEL); 137 - break; 138 131 } 139 132 140 133 return 0; ··· 149 130 static int visconti_eth_init_hw(struct platform_device *pdev, struct plat_stmmacenet_data *plat_dat) 150 131 { 151 132 struct visconti_eth *dwmac = plat_dat->bsp_priv; 152 - unsigned int reg_val, clk_sel_val; 133 + unsigned int clk_sel_val; 134 + u32 phy_intf_sel; 153 135 154 136 switch (plat_dat->phy_interface) { 155 137 case PHY_INTERFACE_MODE_RGMII: 156 138 case PHY_INTERFACE_MODE_RGMII_ID: 157 139 case PHY_INTERFACE_MODE_RGMII_RXID: 158 140 case PHY_INTERFACE_MODE_RGMII_TXID: 159 - dwmac->phy_intf_sel = ETHER_CONFIG_INTF_RGMII; 141 + phy_intf_sel = ETHER_CONFIG_INTF_RGMII; 160 142 break; 161 143 case PHY_INTERFACE_MODE_MII: 162 - dwmac->phy_intf_sel = ETHER_CONFIG_INTF_MII; 144 + phy_intf_sel = ETHER_CONFIG_INTF_MII; 163 145 break; 164 146 case PHY_INTERFACE_MODE_RMII: 165 - dwmac->phy_intf_sel = ETHER_CONFIG_INTF_RMII; 147 + phy_intf_sel = ETHER_CONFIG_INTF_RMII; 166 148 break; 167 149 default: 168 150 dev_err(&pdev->dev, "Unsupported phy-mode (%d)\n", plat_dat->phy_interface); 169 151 return -EOPNOTSUPP; 170 152 } 171 153 172 - reg_val = dwmac->phy_intf_sel; 173 - writel(reg_val, dwmac->reg + REG_ETHER_CONTROL); 154 + writel(phy_intf_sel, dwmac->reg + REG_ETHER_CONTROL); 174 155 175 156 /* Enable TX/RX clock */ 176 157 clk_sel_val = ETHER_CLK_SEL_FREQ_SEL_125M; ··· 180 161 dwmac->reg + REG_ETHER_CLOCK_SEL); 181 162 182 163 /* release internal-reset */ 183 - reg_val |= ETHER_ETH_CONTROL_RESET; 184 - writel(reg_val, dwmac->reg + REG_ETHER_CONTROL); 164 + phy_intf_sel |= ETHER_ETH_CONTROL_RESET; 165 + writel(phy_intf_sel, dwmac->reg + REG_ETHER_CONTROL); 185 166 186 167 return 0; 187 168 }