89 lines
2.8 KiB
Diff
89 lines
2.8 KiB
Diff
From 3aab567792a7fa949e8aca7a92a31f15d435efbe Mon Sep 17 00:00:00 2001
|
|
From: ashthespy <ashthespy@gmail.com>
|
|
Date: Thu, 16 Jan 2020 21:11:56 +0100
|
|
Subject: [PATCH 04/23] ethernet: stmmac: dwmac-rk: Add MAC driver support for
|
|
rk3308
|
|
|
|
Probably in the wrong place, as it's only 10/100 but :meh:
|
|
|
|
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
|
index dc50ba13a746..cfeca75ed284 100644
|
|
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
|
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
|
@@ -482,6 +482,64 @@ static const struct rk_gmac_ops rk3288_ops = {
|
|
.set_rmii_speed = rk3288_set_rmii_speed,
|
|
};
|
|
|
|
+#define RK3308_GRF_MAC_CON0 0x04a0
|
|
+
|
|
+/* Rk3308_GRF_MAC_CON1 */
|
|
+#define RK3308_MAC_PHY_INTF_SEL_RMII (GRF_CLR_BIT(2) | GRF_CLR_BIT(3) | \
|
|
+ GRF_BIT(4))
|
|
+#define RK3308_MAC_SPEED_10M GRF_CLR_BIT(0)
|
|
+#define Rk3308_MAC_SPEED_100M GRF_BIT(0)
|
|
+
|
|
+static void rk3308_set_to_rmii(struct rk_priv_data *bsp_priv)
|
|
+{
|
|
+ struct device *dev = &bsp_priv->pdev->dev;
|
|
+
|
|
+ if (IS_ERR(bsp_priv->grf)) {
|
|
+ dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ regmap_write(bsp_priv->grf, RK3308_GRF_MAC_CON0,
|
|
+ RK3308_MAC_PHY_INTF_SEL_RMII);
|
|
+}
|
|
+
|
|
+static void rk3308_set_rmii_speed(struct rk_priv_data *bsp_priv, int speed)
|
|
+{
|
|
+ struct device *dev = &bsp_priv->pdev->dev;
|
|
+ int ret;
|
|
+
|
|
+ if (IS_ERR(bsp_priv->clk_mac_speed)) {
|
|
+ dev_err(dev, "%s: Missing clk_mac_speed clock\n", __func__);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (speed == 10) {
|
|
+ regmap_write(bsp_priv->grf, RK3308_GRF_MAC_CON0,
|
|
+ RK3308_MAC_SPEED_10M);
|
|
+
|
|
+ ret = clk_set_rate(bsp_priv->clk_mac_speed, 2500000);
|
|
+ if (ret)
|
|
+ dev_err(dev, "%s: set clk_mac_speed rate 2500000 failed: %d\n",
|
|
+ __func__, ret);
|
|
+ } else if (speed == 100) {
|
|
+ regmap_write(bsp_priv->grf, RK3308_GRF_MAC_CON0,
|
|
+ Rk3308_MAC_SPEED_100M);
|
|
+
|
|
+ ret = clk_set_rate(bsp_priv->clk_mac_speed, 25000000);
|
|
+ if (ret)
|
|
+ dev_err(dev, "%s: set clk_mac_speed rate 25000000 failed: %d\n",
|
|
+ __func__, ret);
|
|
+
|
|
+ } else {
|
|
+ dev_err(dev, "unknown speed value for RMII! speed=%d", speed);
|
|
+ }
|
|
+}
|
|
+
|
|
+static const struct rk_gmac_ops rk3308_ops = {
|
|
+ .set_to_rmii = rk3308_set_to_rmii,
|
|
+ .set_rmii_speed = rk3308_set_rmii_speed,
|
|
+};
|
|
+
|
|
#define RK3328_GRF_MAC_CON0 0x0900
|
|
#define RK3328_GRF_MAC_CON1 0x0904
|
|
#define RK3328_GRF_MAC_CON2 0x0908
|
|
@@ -1477,6 +1535,7 @@ static const struct of_device_id rk_gmac_dwmac_match[] = {
|
|
{ .compatible = "rockchip,rk3128-gmac", .data = &rk3128_ops },
|
|
{ .compatible = "rockchip,rk3228-gmac", .data = &rk3228_ops },
|
|
{ .compatible = "rockchip,rk3288-gmac", .data = &rk3288_ops },
|
|
+ { .compatible = "rockchip,rk3308-gmac", .data = &rk3308_ops },
|
|
{ .compatible = "rockchip,rk3328-gmac", .data = &rk3328_ops },
|
|
{ .compatible = "rockchip,rk3366-gmac", .data = &rk3366_ops },
|
|
{ .compatible = "rockchip,rk3368-gmac", .data = &rk3368_ops },
|
|
--
|
|
2.25.1
|
|
|