From 04dd17822334871b23ea2862f7798fb0e0007777 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Sat, 11 May 2024 08:53:19 +0000
Subject: [PATCH] change otg to host mode
---
u-boot/drivers/net/gmac_rockchip.c | 494 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 494 insertions(+), 0 deletions(-)
diff --git a/u-boot/drivers/net/gmac_rockchip.c b/u-boot/drivers/net/gmac_rockchip.c
index bc8dcc9..dfb8342 100644
--- a/u-boot/drivers/net/gmac_rockchip.c
+++ b/u-boot/drivers/net/gmac_rockchip.c
@@ -18,6 +18,9 @@
#include <asm/arch/clock.h>
#include <asm/arch/hardware.h>
#ifdef CONFIG_DWC_ETH_QOS
+#include <asm/arch/grf_rk3528.h>
+#include <asm/arch/grf_rk3562.h>
+#include <asm/arch/ioc_rk3562.h>
#include <asm/arch/grf_rk3568.h>
#include <asm/arch/grf_rk3588.h>
#include <asm/arch/grf_rv1106.h>
@@ -516,6 +519,147 @@
return 0;
}
#else
+static int rk3528_set_rgmii_speed(struct gmac_rockchip_platdata *pdata,
+ struct rockchip_eth_dev *dev)
+{
+ struct eqos_priv *priv = &dev->eqos;
+ struct rk3528_grf *grf;
+ unsigned int div;
+
+ enum {
+ RK3528_GMAC0_CLK_RMII_DIV_SHIFT = 3,
+ RK3528_GMAC0_CLK_RMII_DIV_MASK = GENMASK(4, 3),
+ RK3528_GMAC0_CLK_RMII_DIV2 = BIT(3),
+ RK3528_GMAC0_CLK_RMII_DIV20 = 0,
+ };
+
+ enum {
+ RK3528_GMAC1_CLK_RGMII_DIV_SHIFT = 10,
+ RK3528_GMAC1_CLK_RGMII_DIV_MASK = GENMASK(11, 10),
+ RK3528_GMAC1_CLK_RGMII_DIV1 = 0,
+ RK3528_GMAC1_CLK_RGMII_DIV5 = GENMASK(11, 10),
+ RK3528_GMAC1_CLK_RGMII_DIV50 = BIT(11),
+ RK3528_GMAC1_CLK_RMII_DIV2 = BIT(11),
+ RK3528_GMAC1_CLK_RMII_DIV20 = 0,
+ };
+
+ grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+
+ switch (priv->phy->speed) {
+ case 10:
+ if (pdata->phy_interface == PHY_INTERFACE_MODE_RMII)
+ div = pdata->bus_id ? RK3528_GMAC1_CLK_RMII_DIV20 :
+ RK3528_GMAC0_CLK_RMII_DIV20;
+ else
+ div = RK3528_GMAC1_CLK_RGMII_DIV50;
+ break;
+ case 100:
+ if (pdata->phy_interface == PHY_INTERFACE_MODE_RMII)
+ div = pdata->bus_id ? RK3528_GMAC1_CLK_RMII_DIV2 :
+ RK3528_GMAC0_CLK_RMII_DIV2;
+ else
+ div = RK3528_GMAC1_CLK_RGMII_DIV5;
+ break;
+ case 1000:
+ if (pdata->phy_interface != PHY_INTERFACE_MODE_RMII)
+ div = RK3528_GMAC1_CLK_RGMII_DIV1;
+ else
+ return -EINVAL;
+ break;
+ default:
+ debug("Unknown phy speed: %d\n", priv->phy->speed);
+ return -EINVAL;
+ }
+
+ if (pdata->bus_id)
+ rk_clrsetreg(&grf->gmac1_con0, RK3528_GMAC1_CLK_RGMII_DIV_MASK, div);
+ else
+ rk_clrsetreg(&grf->gmac0_con, RK3528_GMAC0_CLK_RMII_DIV_MASK, div);
+
+ return 0;
+}
+
+static int rk3562_set_gmac_speed(struct gmac_rockchip_platdata *pdata,
+ struct rockchip_eth_dev *dev)
+{
+ struct eqos_priv *priv = &dev->eqos;
+ struct rk3562_grf *grf;
+ unsigned int div;
+
+ enum {
+ RK3562_GMAC0_CLK_RGMII_DIV_SHIFT = 7,
+ RK3562_GMAC0_CLK_RGMII_DIV_MASK = GENMASK(8, 7),
+ RK3562_GMAC0_CLK_RGMII_DIV1 = 0,
+ RK3562_GMAC0_CLK_RGMII_DIV5 = GENMASK(8, 7),
+ RK3562_GMAC0_CLK_RGMII_DIV50 = BIT(8),
+ RK3562_GMAC0_CLK_RMII_DIV2 = BIT(7),
+ RK3562_GMAC0_CLK_RMII_DIV20 = 0,
+ };
+
+ enum {
+ RK3562_GMAC1_SPEED_SHIFT = 0x0,
+ RK3562_GMAC1_SPEED_MASK = BIT(0),
+ RK3562_GMAC1_SPEED_10M = 0,
+ RK3562_GMAC1_SPEED_100M = BIT(0),
+ };
+
+ enum {
+ RK3562_GMAC1_CLK_RMII_DIV_SHIFT = 13,
+ RK3562_GMAC1_CLK_RMII_DIV_MASK = BIT(13),
+ RK3562_GMAC1_CLK_RMII_DIV2 = BIT(13),
+ RK3562_GMAC1_CLK_RMII_DIV20 = 0,
+ };
+
+ grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+
+ switch (priv->phy->speed) {
+ case 10:
+ if (pdata->phy_interface == PHY_INTERFACE_MODE_RMII) {
+ if (pdata->bus_id > 0) {
+ div = RK3562_GMAC1_CLK_RMII_DIV20;
+ rk_clrsetreg(&grf->soc_con[0],
+ RK3562_GMAC1_SPEED_MASK,
+ RK3562_GMAC1_SPEED_10M);
+ } else {
+ div = RK3562_GMAC0_CLK_RMII_DIV20;
+ }
+ } else {
+ div = RK3562_GMAC0_CLK_RGMII_DIV50;
+ }
+ break;
+ case 100:
+ if (pdata->phy_interface == PHY_INTERFACE_MODE_RMII) {
+ if (pdata->bus_id > 0) {
+ div = RK3562_GMAC1_CLK_RMII_DIV2;
+ rk_clrsetreg(&grf->soc_con[0],
+ RK3562_GMAC1_SPEED_MASK,
+ RK3562_GMAC1_SPEED_100M);
+ } else {
+ div = RK3562_GMAC0_CLK_RMII_DIV2;
+ }
+ } else {
+ div = RK3562_GMAC0_CLK_RGMII_DIV5;
+ }
+ break;
+ case 1000:
+ if (pdata->phy_interface != PHY_INTERFACE_MODE_RMII)
+ div = RK3562_GMAC0_CLK_RGMII_DIV1;
+ else
+ return -EINVAL;
+ break;
+ default:
+ debug("Unknown phy speed: %d\n", priv->phy->speed);
+ return -EINVAL;
+ }
+
+ if (pdata->bus_id)
+ rk_clrsetreg(&grf->soc_con[1], RK3562_GMAC1_CLK_RMII_DIV_MASK, div);
+ else
+ rk_clrsetreg(&grf->soc_con[0], RK3562_GMAC0_CLK_RGMII_DIV_MASK, div);
+
+ return 0;
+}
+
static int rk3588_set_rgmii_speed(struct gmac_rockchip_platdata *pdata,
struct rockchip_eth_dev *dev)
{
@@ -1064,6 +1208,251 @@
}
#else
+static void rk3528_gmac_integrated_phy_powerup(struct gmac_rockchip_platdata *pdata)
+{
+ struct rk3528_grf *grf;
+ unsigned char bgs[1] = {0};
+
+ enum {
+ RK3528_MACPHY_ENABLE_MASK = BIT(1),
+ RK3528_MACPHY_DISENABLE = BIT(1),
+ RK3528_MACPHY_ENABLE = 0,
+ RK3528_MACPHY_XMII_SEL_MASK = GENMASK(6, 5),
+ RK3528_MACPHY_XMII_SEL = BIT(6),
+ RK3528_MACPHY_24M_CLK_SEL_MASK = GENMASK(9, 7),
+ RK3528_MACPHY_24M_CLK_SEL_24M = (BIT(8) | BIT(9)),
+ RK3528_MACPHY_PHY_ID_MASK = GENMASK(14, 10),
+ RK3528_MACPHY_PHY_ID = BIT(11),
+ };
+
+ enum {
+ RK3528_MACPHY_BGS_MASK = GENMASK(3, 0),
+ };
+
+#if defined(CONFIG_ROCKCHIP_EFUSE) || defined(CONFIG_ROCKCHIP_OTP)
+ struct udevice *dev;
+ u32 regs[2] = {0};
+ ofnode node;
+ int ret = 0;
+
+ /* retrieve the device */
+ if (IS_ENABLED(CONFIG_ROCKCHIP_EFUSE))
+ ret = uclass_get_device_by_driver(UCLASS_MISC,
+ DM_GET_DRIVER(rockchip_efuse),
+ &dev);
+ else
+ ret = uclass_get_device_by_driver(UCLASS_MISC,
+ DM_GET_DRIVER(rockchip_otp),
+ &dev);
+ if (!ret) {
+ node = dev_read_subnode(dev, "macphy-bgs");
+ if (ofnode_valid(node)) {
+ if (!ofnode_read_u32_array(node, "reg", regs, 2)) {
+ /* read the bgs from the efuses */
+ ret = misc_read(dev, regs[0], &bgs, 1);
+ if (ret) {
+ printf("read bgs from efuse/otp failed, ret=%d\n",
+ ret);
+ bgs[0] = 0;
+ }
+ }
+ }
+ }
+#endif
+
+ grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+
+ reset_assert(&pdata->phy_reset);
+ udelay(20);
+ rk_clrsetreg(&grf->macphy_con0,
+ RK3528_MACPHY_ENABLE_MASK |
+ RK3528_MACPHY_XMII_SEL_MASK |
+ RK3528_MACPHY_24M_CLK_SEL_MASK |
+ RK3528_MACPHY_PHY_ID_MASK,
+ RK3528_MACPHY_ENABLE |
+ RK3528_MACPHY_XMII_SEL |
+ RK3528_MACPHY_24M_CLK_SEL_24M |
+ RK3528_MACPHY_PHY_ID);
+
+ rk_clrsetreg(&grf->macphy_con1,
+ RK3528_MACPHY_BGS_MASK,
+ bgs[0]);
+ udelay(20);
+ reset_deassert(&pdata->phy_reset);
+ udelay(30 * 1000);
+}
+
+static void rk3528_set_to_rmii(struct gmac_rockchip_platdata *pdata)
+{
+ unsigned int clk_mode;
+ struct rk3528_grf *grf;
+
+ enum {
+ RK3528_GMAC0_CLK_RMII_MODE_SHIFT = 0x1,
+ RK3528_GMAC0_CLK_RMII_MODE_MASK = BIT(1),
+ RK3528_GMAC0_CLK_RMII_MODE = 0x1,
+ };
+
+ enum {
+ RK3528_GMAC1_CLK_RMII_MODE_SHIFT = 0x8,
+ RK3528_GMAC1_CLK_RMII_MODE_MASK = BIT(8),
+ RK3528_GMAC1_CLK_RMII_MODE = 0x1,
+ };
+
+ grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+
+ if (pdata->bus_id == 1) {
+ clk_mode = RK3528_GMAC1_CLK_RMII_MODE << RK3528_GMAC1_CLK_RMII_MODE_SHIFT;
+ rk_clrsetreg(&grf->gmac1_con1, RK3528_GMAC1_CLK_RMII_MODE_MASK, clk_mode);
+ } else {
+ clk_mode = RK3528_GMAC0_CLK_RMII_MODE << RK3528_GMAC0_CLK_RMII_MODE_SHIFT;
+ rk_clrsetreg(&grf->gmac0_con, RK3528_GMAC0_CLK_RMII_MODE_MASK, clk_mode);
+ }
+}
+
+static void rk3528_set_to_rgmii(struct gmac_rockchip_platdata *pdata)
+{
+ unsigned int rx_enable;
+ unsigned int rx_delay;
+ struct rk3528_grf *grf;
+
+ enum {
+ RK3528_GMAC1_RGMII_MODE_SHIFT = 0x8,
+ RK3528_GMAC1_RGMII_MODE_MASK = BIT(8),
+ RK3528_GMAC1_RGMII_MODE = 0x0,
+
+ RK3528_GMAC1_TXCLK_DLY_ENA_MASK = BIT(14),
+ RK3528_GMAC1_TXCLK_DLY_ENA_DISABLE = 0,
+ RK3528_GMAC1_TXCLK_DLY_ENA_ENABLE = BIT(14),
+
+ RK3528_GMAC1_RXCLK_DLY_ENA_MASK = BIT(15),
+ RK3528_GMAC1_RXCLK_DLY_ENA_DISABLE = 0,
+ RK3528_GMAC1_RXCLK_DLY_ENA_ENABLE = BIT(15),
+ };
+
+ enum {
+ RK3528_GMAC1_RX_DL_CFG_SHIFT = 0x8,
+ RK3528_GMAC1_RX_DL_CFG_MASK = GENMASK(15, 8),
+
+ RK3528_GMAC1_TX_DL_CFG_SHIFT = 0x0,
+ RK3528_GMAC1_TX_DL_CFG_MASK = GENMASK(7, 0),
+ };
+
+ if (!pdata->bus_id)
+ return;
+
+ grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+
+ if (pdata->rx_delay < 0) {
+ rx_enable = RK3528_GMAC1_RXCLK_DLY_ENA_DISABLE;
+ rx_delay = 0;
+ } else {
+ rx_enable = RK3528_GMAC1_RXCLK_DLY_ENA_ENABLE;
+ rx_delay = pdata->rx_delay << RK3528_GMAC1_RX_DL_CFG_SHIFT;
+ }
+
+ rk_clrsetreg(&grf->gmac1_con0,
+ RK3528_GMAC1_TXCLK_DLY_ENA_MASK |
+ RK3528_GMAC1_RXCLK_DLY_ENA_MASK |
+ RK3528_GMAC1_RGMII_MODE_MASK,
+ rx_enable | RK3528_GMAC1_TXCLK_DLY_ENA_ENABLE |
+ (RK3528_GMAC1_RGMII_MODE << RK3528_GMAC1_RGMII_MODE_SHIFT));
+
+ rk_clrsetreg(&grf->gmac1_con1,
+ RK3528_GMAC1_RX_DL_CFG_MASK |
+ RK3528_GMAC1_TX_DL_CFG_MASK,
+ (pdata->tx_delay << RK3528_GMAC1_TX_DL_CFG_SHIFT) |
+ rx_delay);
+}
+
+static void rk3562_set_to_rmii(struct gmac_rockchip_platdata *pdata)
+{
+ struct rk3562_grf *grf;
+ unsigned int mode;
+
+ enum {
+ RK3562_GMAC0_RMII_MODE_SHIFT = 0x5,
+ RK3562_GMAC0_RMII_MODE_MASK = BIT(5),
+ RK3562_GMAC0_RMII_MODE = 0x1,
+ };
+
+ grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+
+ if (!pdata->bus_id) {
+ mode = RK3562_GMAC0_RMII_MODE << RK3562_GMAC0_RMII_MODE_SHIFT;
+ rk_clrsetreg(&grf->soc_con[0], RK3562_GMAC0_RMII_MODE_MASK, mode);
+ }
+}
+
+static void rk3562_set_to_rgmii(struct gmac_rockchip_platdata *pdata)
+{
+ struct rk3562_grf *grf;
+ struct rk3562_ioc *ioc;
+ unsigned int rx_enable;
+ unsigned int rx_delay;
+
+ enum {
+ RK3562_GMAC0_RGMII_MODE_SHIFT = 0x5,
+ RK3562_GMAC0_RGMII_MODE_MASK = BIT(5),
+ RK3562_GMAC0_RGMII_MODE = 0x0,
+
+ RK3562_GMAC0_TXCLK_DLY_ENA_MASK = BIT(0),
+ RK3562_GMAC0_TXCLK_DLY_ENA_DISABLE = 0,
+ RK3562_GMAC0_TXCLK_DLY_ENA_ENABLE = BIT(0),
+
+ RK3562_GMAC0_RXCLK_DLY_ENA_MASK = BIT(1),
+ RK3562_GMAC0_RXCLK_DLY_ENA_DISABLE = 0,
+ RK3562_GMAC0_RXCLK_DLY_ENA_ENABLE = BIT(1),
+ };
+
+ enum {
+ RK3562_GMAC0_RX_DL_CFG_SHIFT = 0x8,
+ RK3562_GMAC0_RX_DL_CFG_MASK = GENMASK(15, 8),
+
+ RK3562_GMAC0_TX_DL_CFG_SHIFT = 0x0,
+ RK3562_GMAC0_TX_DL_CFG_MASK = GENMASK(7, 0),
+ };
+
+ if (pdata->bus_id)
+ return;
+
+ grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+ ioc = syscon_get_first_range(ROCKCHIP_SYSCON_IOC);
+
+ rk_clrsetreg(&grf->soc_con[0], RK3562_GMAC0_RGMII_MODE_MASK,
+ RK3562_GMAC0_RGMII_MODE << RK3562_GMAC0_RGMII_MODE_SHIFT);
+
+ if (pdata->rx_delay < 0) {
+ rx_enable = RK3562_GMAC0_RXCLK_DLY_ENA_DISABLE;
+ rx_delay = 0;
+ } else {
+ rx_enable = RK3562_GMAC0_RXCLK_DLY_ENA_ENABLE;
+ rx_delay = pdata->rx_delay << RK3562_GMAC0_RX_DL_CFG_SHIFT;
+ }
+
+ rk_clrsetreg(&ioc->mac0_io_con1,
+ RK3562_GMAC0_TXCLK_DLY_ENA_MASK |
+ RK3562_GMAC0_RXCLK_DLY_ENA_MASK,
+ rx_enable | RK3562_GMAC0_TXCLK_DLY_ENA_ENABLE);
+
+ rk_clrsetreg(&ioc->mac0_io_con0,
+ RK3562_GMAC0_RX_DL_CFG_MASK |
+ RK3562_GMAC0_TX_DL_CFG_MASK,
+ (pdata->tx_delay << RK3562_GMAC0_TX_DL_CFG_SHIFT) |
+ rx_delay);
+
+ rk_clrsetreg(&ioc->mac1_io_con1,
+ RK3562_GMAC0_TXCLK_DLY_ENA_MASK |
+ RK3562_GMAC0_RXCLK_DLY_ENA_MASK,
+ rx_enable | RK3562_GMAC0_TXCLK_DLY_ENA_ENABLE);
+
+ rk_clrsetreg(&ioc->mac1_io_con0,
+ RK3562_GMAC0_RX_DL_CFG_MASK |
+ RK3562_GMAC0_TX_DL_CFG_MASK,
+ (pdata->tx_delay << RK3562_GMAC0_TX_DL_CFG_SHIFT) |
+ rx_delay);
+}
+
static void rk3568_set_to_rmii(struct gmac_rockchip_platdata *pdata)
{
struct rk3568_grf *grf;
@@ -1438,6 +1827,86 @@
#endif
#ifdef CONFIG_DWC_ETH_QOS
+static void rk3528_set_clock_selection(struct gmac_rockchip_platdata *pdata)
+{
+ struct rk3528_grf *grf;
+ unsigned int val;
+
+ enum {
+ RK3528_GMAC1_CLK_SELET_SHIFT = 0x12,
+ RK3528_GMAC1_CLK_SELET_MASK = BIT(12),
+ RK3528_GMAC1_CLK_SELET_CRU = 0,
+ RK3528_GMAC1_CLK_SELET_IO = BIT(12),
+ };
+
+ if (!pdata->bus_id)
+ return;
+ grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+
+ val = pdata->clock_input ? RK3528_GMAC1_CLK_SELET_IO :
+ RK3528_GMAC1_CLK_SELET_CRU;
+ rk_clrsetreg(&grf->gmac1_con0, RK3528_GMAC1_CLK_SELET_MASK, val);
+}
+
+static void rk3562_set_clock_selection(struct gmac_rockchip_platdata *pdata)
+{
+ struct rk3562_grf *grf;
+ struct rk3562_ioc *ioc;
+ unsigned int val;
+
+ enum {
+ RK3562_GMAC0_CLK_SELET_SHIFT = 0x9,
+ RK3562_GMAC0_CLK_SELET_MASK = BIT(9),
+ RK3562_GMAC0_CLK_SELET_CRU = 0,
+ RK3562_GMAC0_CLK_SELET_IO = BIT(9),
+ };
+
+ enum {
+ RK3562_GMAC1_CLK_SELET_SHIFT = 15,
+ RK3562_GMAC1_CLK_SELET_MASK = BIT(15),
+ RK3562_GMAC1_CLK_SELET_CRU = 0,
+ RK3562_GMAC1_CLK_SELET_IO = BIT(15),
+ };
+
+ enum {
+ RK3562_GMAC0_IO_EXTCLK_SELET_SHIFT = 0x2,
+ RK3562_GMAC0_IO_EXTCLK_SELET_MASK = BIT(2),
+ RK3562_GMAC0_IO_EXTCLK_SELET_CRU = 0,
+ RK3562_GMAC0_IO_EXTCLK_SELET_IO = BIT(2),
+ };
+
+ enum {
+ RK3562_GMAC1_IO_EXTCLK_SELET_SHIFT = 0x3,
+ RK3562_GMAC1_IO_EXTCLK_SELET_MASK = BIT(3),
+ RK3562_GMAC1_IO_EXTCLK_SELET_CRU = 0,
+ RK3562_GMAC1_IO_EXTCLK_SELET_IO = BIT(3),
+ };
+
+ grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+ ioc = syscon_get_first_range(ROCKCHIP_SYSCON_IOC);
+
+ if (!pdata->bus_id) {
+ val = pdata->clock_input ? RK3562_GMAC0_CLK_SELET_IO :
+ RK3562_GMAC0_CLK_SELET_CRU;
+ rk_clrsetreg(&grf->soc_con[0], RK3562_GMAC0_CLK_SELET_MASK, val);
+ val = pdata->clock_input ? RK3562_GMAC0_IO_EXTCLK_SELET_IO :
+ RK3562_GMAC0_IO_EXTCLK_SELET_CRU;
+ rk_clrsetreg(&ioc->mac1_io_con1,
+ RK3562_GMAC0_IO_EXTCLK_SELET_MASK, val);
+ rk_clrsetreg(&ioc->mac0_io_con1,
+ RK3562_GMAC0_IO_EXTCLK_SELET_MASK, val);
+
+ } else {
+ val = pdata->clock_input ? RK3562_GMAC1_CLK_SELET_IO :
+ RK3562_GMAC1_CLK_SELET_CRU;
+ rk_clrsetreg(&grf->soc_con[1], RK3562_GMAC1_CLK_SELET_MASK, val);
+ val = pdata->clock_input ? RK3562_GMAC1_IO_EXTCLK_SELET_IO :
+ RK3562_GMAC1_IO_EXTCLK_SELET_CRU;
+ rk_clrsetreg(&ioc->mac1_io_con1,
+ RK3562_GMAC1_IO_EXTCLK_SELET_MASK, val);
+ }
+}
+
static void rk3588_set_clock_selection(struct gmac_rockchip_platdata *pdata)
{
struct rk3588_php_grf *php_grf;
@@ -1701,6 +2170,21 @@
.set_to_rmii = rv1108_gmac_set_to_rmii,
};
#else
+const struct rk_gmac_ops rk3528_gmac_ops = {
+ .fix_mac_speed = rk3528_set_rgmii_speed,
+ .set_to_rgmii = rk3528_set_to_rgmii,
+ .set_to_rmii = rk3528_set_to_rmii,
+ .set_clock_selection = rk3528_set_clock_selection,
+ .integrated_phy_powerup = rk3528_gmac_integrated_phy_powerup,
+};
+
+const struct rk_gmac_ops rk3562_gmac_ops = {
+ .fix_mac_speed = rk3562_set_gmac_speed,
+ .set_to_rgmii = rk3562_set_to_rgmii,
+ .set_to_rmii = rk3562_set_to_rmii,
+ .set_clock_selection = rk3562_set_clock_selection,
+};
+
const struct rk_gmac_ops rk3568_gmac_ops = {
.fix_mac_speed = rv1126_set_rgmii_speed,
.set_to_rgmii = rk3568_set_to_rgmii,
@@ -1774,6 +2258,16 @@
.data = (ulong)&rv1108_gmac_ops },
#endif
#else
+#ifdef CONFIG_ROCKCHIP_RK3528
+ { .compatible = "rockchip,rk3528-gmac",
+ .data = (ulong)&rk3528_gmac_ops },
+#endif
+
+#ifdef CONFIG_ROCKCHIP_RK3562
+ { .compatible = "rockchip,rk3562-gmac",
+ .data = (ulong)&rk3562_gmac_ops },
+#endif
+
#ifdef CONFIG_ROCKCHIP_RK3568
{ .compatible = "rockchip,rk3568-gmac",
.data = (ulong)&rk3568_gmac_ops },
--
Gitblit v1.6.2