Lines Matching refs:bsp_priv
90 static void set_to_rgmii(struct rk_priv_data *bsp_priv, in set_to_rgmii() argument
93 struct device *dev = &bsp_priv->pdev->dev; in set_to_rgmii()
95 if (IS_ERR(bsp_priv->grf)) { in set_to_rgmii()
100 regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1, in set_to_rgmii()
102 regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON3, in set_to_rgmii()
108 static void set_to_rmii(struct rk_priv_data *bsp_priv) in set_to_rmii() argument
110 struct device *dev = &bsp_priv->pdev->dev; in set_to_rmii()
112 if (IS_ERR(bsp_priv->grf)) { in set_to_rmii()
117 regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1, in set_to_rmii()
121 static void set_rgmii_speed(struct rk_priv_data *bsp_priv, int speed) in set_rgmii_speed() argument
123 struct device *dev = &bsp_priv->pdev->dev; in set_rgmii_speed()
125 if (IS_ERR(bsp_priv->grf)) { in set_rgmii_speed()
131 regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1, GMAC_CLK_2_5M); in set_rgmii_speed()
133 regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1, GMAC_CLK_25M); in set_rgmii_speed()
135 regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1, GMAC_CLK_125M); in set_rgmii_speed()
140 static void set_rmii_speed(struct rk_priv_data *bsp_priv, int speed) in set_rmii_speed() argument
142 struct device *dev = &bsp_priv->pdev->dev; in set_rmii_speed()
144 if (IS_ERR(bsp_priv->grf)) { in set_rmii_speed()
150 regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1, in set_rmii_speed()
153 regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON1, in set_rmii_speed()
160 static int gmac_clk_init(struct rk_priv_data *bsp_priv) in gmac_clk_init() argument
162 struct device *dev = &bsp_priv->pdev->dev; in gmac_clk_init()
164 bsp_priv->clk_enabled = false; in gmac_clk_init()
166 bsp_priv->mac_clk_rx = devm_clk_get(dev, "mac_clk_rx"); in gmac_clk_init()
167 if (IS_ERR(bsp_priv->mac_clk_rx)) in gmac_clk_init()
171 bsp_priv->mac_clk_tx = devm_clk_get(dev, "mac_clk_tx"); in gmac_clk_init()
172 if (IS_ERR(bsp_priv->mac_clk_tx)) in gmac_clk_init()
176 bsp_priv->aclk_mac = devm_clk_get(dev, "aclk_mac"); in gmac_clk_init()
177 if (IS_ERR(bsp_priv->aclk_mac)) in gmac_clk_init()
181 bsp_priv->pclk_mac = devm_clk_get(dev, "pclk_mac"); in gmac_clk_init()
182 if (IS_ERR(bsp_priv->pclk_mac)) in gmac_clk_init()
186 bsp_priv->clk_mac = devm_clk_get(dev, "stmmaceth"); in gmac_clk_init()
187 if (IS_ERR(bsp_priv->clk_mac)) in gmac_clk_init()
191 if (bsp_priv->phy_iface == PHY_INTERFACE_MODE_RMII) { in gmac_clk_init()
192 bsp_priv->clk_mac_ref = devm_clk_get(dev, "clk_mac_ref"); in gmac_clk_init()
193 if (IS_ERR(bsp_priv->clk_mac_ref)) in gmac_clk_init()
197 if (!bsp_priv->clock_input) { in gmac_clk_init()
198 bsp_priv->clk_mac_refout = in gmac_clk_init()
200 if (IS_ERR(bsp_priv->clk_mac_refout)) in gmac_clk_init()
206 if (bsp_priv->clock_input) { in gmac_clk_init()
209 if (bsp_priv->phy_iface == PHY_INTERFACE_MODE_RMII) in gmac_clk_init()
210 clk_set_rate(bsp_priv->clk_mac, 50000000); in gmac_clk_init()
216 static int gmac_clk_enable(struct rk_priv_data *bsp_priv, bool enable) in gmac_clk_enable() argument
218 int phy_iface = phy_iface = bsp_priv->phy_iface; in gmac_clk_enable()
221 if (!bsp_priv->clk_enabled) { in gmac_clk_enable()
223 if (!IS_ERR(bsp_priv->mac_clk_rx)) in gmac_clk_enable()
225 bsp_priv->mac_clk_rx); in gmac_clk_enable()
227 if (!IS_ERR(bsp_priv->clk_mac_ref)) in gmac_clk_enable()
229 bsp_priv->clk_mac_ref); in gmac_clk_enable()
231 if (!IS_ERR(bsp_priv->clk_mac_refout)) in gmac_clk_enable()
233 bsp_priv->clk_mac_refout); in gmac_clk_enable()
236 if (!IS_ERR(bsp_priv->aclk_mac)) in gmac_clk_enable()
237 clk_prepare_enable(bsp_priv->aclk_mac); in gmac_clk_enable()
239 if (!IS_ERR(bsp_priv->pclk_mac)) in gmac_clk_enable()
240 clk_prepare_enable(bsp_priv->pclk_mac); in gmac_clk_enable()
242 if (!IS_ERR(bsp_priv->mac_clk_tx)) in gmac_clk_enable()
243 clk_prepare_enable(bsp_priv->mac_clk_tx); in gmac_clk_enable()
250 bsp_priv->clk_enabled = true; in gmac_clk_enable()
253 if (bsp_priv->clk_enabled) { in gmac_clk_enable()
255 if (!IS_ERR(bsp_priv->mac_clk_rx)) in gmac_clk_enable()
257 bsp_priv->mac_clk_rx); in gmac_clk_enable()
259 if (!IS_ERR(bsp_priv->clk_mac_ref)) in gmac_clk_enable()
261 bsp_priv->clk_mac_ref); in gmac_clk_enable()
263 if (!IS_ERR(bsp_priv->clk_mac_refout)) in gmac_clk_enable()
265 bsp_priv->clk_mac_refout); in gmac_clk_enable()
268 if (!IS_ERR(bsp_priv->aclk_mac)) in gmac_clk_enable()
269 clk_disable_unprepare(bsp_priv->aclk_mac); in gmac_clk_enable()
271 if (!IS_ERR(bsp_priv->pclk_mac)) in gmac_clk_enable()
272 clk_disable_unprepare(bsp_priv->pclk_mac); in gmac_clk_enable()
274 if (!IS_ERR(bsp_priv->mac_clk_tx)) in gmac_clk_enable()
275 clk_disable_unprepare(bsp_priv->mac_clk_tx); in gmac_clk_enable()
280 bsp_priv->clk_enabled = false; in gmac_clk_enable()
287 static int phy_power_on(struct rk_priv_data *bsp_priv, bool enable) in phy_power_on() argument
289 struct regulator *ldo = bsp_priv->regulator; in phy_power_on()
291 struct device *dev = &bsp_priv->pdev->dev; in phy_power_on()
315 struct rk_priv_data *bsp_priv; in rk_gmac_setup() local
321 bsp_priv = devm_kzalloc(dev, sizeof(*bsp_priv), GFP_KERNEL); in rk_gmac_setup()
322 if (!bsp_priv) in rk_gmac_setup()
325 bsp_priv->phy_iface = of_get_phy_mode(dev->of_node); in rk_gmac_setup()
327 bsp_priv->regulator = devm_regulator_get_optional(dev, "phy"); in rk_gmac_setup()
328 if (IS_ERR(bsp_priv->regulator)) { in rk_gmac_setup()
329 if (PTR_ERR(bsp_priv->regulator) == -EPROBE_DEFER) { in rk_gmac_setup()
334 bsp_priv->regulator = NULL; in rk_gmac_setup()
341 bsp_priv->clock_input = true; in rk_gmac_setup()
346 bsp_priv->clock_input = true; in rk_gmac_setup()
348 bsp_priv->clock_input = false; in rk_gmac_setup()
353 bsp_priv->tx_delay = 0x30; in rk_gmac_setup()
356 __func__, bsp_priv->tx_delay); in rk_gmac_setup()
359 bsp_priv->tx_delay = value; in rk_gmac_setup()
364 bsp_priv->rx_delay = 0x10; in rk_gmac_setup()
367 __func__, bsp_priv->rx_delay); in rk_gmac_setup()
370 bsp_priv->rx_delay = value; in rk_gmac_setup()
373 bsp_priv->grf = syscon_regmap_lookup_by_phandle(dev->of_node, in rk_gmac_setup()
375 bsp_priv->pdev = pdev; in rk_gmac_setup()
378 if (bsp_priv->phy_iface == PHY_INTERFACE_MODE_RGMII) { in rk_gmac_setup()
380 set_to_rgmii(bsp_priv, bsp_priv->tx_delay, bsp_priv->rx_delay); in rk_gmac_setup()
381 } else if (bsp_priv->phy_iface == PHY_INTERFACE_MODE_RMII) { in rk_gmac_setup()
383 set_to_rmii(bsp_priv); in rk_gmac_setup()
388 gmac_clk_init(bsp_priv); in rk_gmac_setup()
390 return bsp_priv; in rk_gmac_setup()
395 struct rk_priv_data *bsp_priv = priv; in rk_gmac_init() local
398 ret = phy_power_on(bsp_priv, true); in rk_gmac_init()
402 ret = gmac_clk_enable(bsp_priv, true); in rk_gmac_init()
419 struct rk_priv_data *bsp_priv = priv; in rk_fix_speed() local
420 struct device *dev = &bsp_priv->pdev->dev; in rk_fix_speed()
422 if (bsp_priv->phy_iface == PHY_INTERFACE_MODE_RGMII) in rk_fix_speed()
423 set_rgmii_speed(bsp_priv, speed); in rk_fix_speed()
424 else if (bsp_priv->phy_iface == PHY_INTERFACE_MODE_RMII) in rk_fix_speed()
425 set_rmii_speed(bsp_priv, speed); in rk_fix_speed()
427 dev_err(dev, "unsupported interface %d", bsp_priv->phy_iface); in rk_fix_speed()