@@ -74,6 +74,10 @@ struct rk_priv_data {
74
74
#define GRF_BIT (nr ) (BIT(nr) | BIT(nr+16))
75
75
#define GRF_CLR_BIT (nr ) (BIT(nr+16))
76
76
77
+ #define DELAY_ENABLE (soc , tx , rx ) \
78
+ (((tx) ? soc##_GMAC_TXCLK_DLY_ENABLE : soc##_GMAC_TXCLK_DLY_DISABLE) | \
79
+ ((rx) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE))
80
+
77
81
#define RK3228_GRF_MAC_CON0 0x0900
78
82
#define RK3228_GRF_MAC_CON1 0x0904
79
83
@@ -115,8 +119,7 @@ static void rk3228_set_to_rgmii(struct rk_priv_data *bsp_priv,
115
119
regmap_write (bsp_priv -> grf , RK3228_GRF_MAC_CON1 ,
116
120
RK3228_GMAC_PHY_INTF_SEL_RGMII |
117
121
RK3228_GMAC_RMII_MODE_CLR |
118
- RK3228_GMAC_RXCLK_DLY_ENABLE |
119
- RK3228_GMAC_TXCLK_DLY_ENABLE );
122
+ DELAY_ENABLE (RK3228 , tx_delay , rx_delay ));
120
123
121
124
regmap_write (bsp_priv -> grf , RK3228_GRF_MAC_CON0 ,
122
125
RK3228_GMAC_CLK_RX_DL_CFG (rx_delay ) |
@@ -232,8 +235,7 @@ static void rk3288_set_to_rgmii(struct rk_priv_data *bsp_priv,
232
235
RK3288_GMAC_PHY_INTF_SEL_RGMII |
233
236
RK3288_GMAC_RMII_MODE_CLR );
234
237
regmap_write (bsp_priv -> grf , RK3288_GRF_SOC_CON3 ,
235
- RK3288_GMAC_RXCLK_DLY_ENABLE |
236
- RK3288_GMAC_TXCLK_DLY_ENABLE |
238
+ DELAY_ENABLE (RK3288 , tx_delay , rx_delay ) |
237
239
RK3288_GMAC_CLK_RX_DL_CFG (rx_delay ) |
238
240
RK3288_GMAC_CLK_TX_DL_CFG (tx_delay ));
239
241
}
@@ -460,8 +462,7 @@ static void rk3366_set_to_rgmii(struct rk_priv_data *bsp_priv,
460
462
RK3366_GMAC_PHY_INTF_SEL_RGMII |
461
463
RK3366_GMAC_RMII_MODE_CLR );
462
464
regmap_write (bsp_priv -> grf , RK3366_GRF_SOC_CON7 ,
463
- RK3366_GMAC_RXCLK_DLY_ENABLE |
464
- RK3366_GMAC_TXCLK_DLY_ENABLE |
465
+ DELAY_ENABLE (RK3366 , tx_delay , rx_delay ) |
465
466
RK3366_GMAC_CLK_RX_DL_CFG (rx_delay ) |
466
467
RK3366_GMAC_CLK_TX_DL_CFG (tx_delay ));
467
468
}
@@ -572,8 +573,7 @@ static void rk3368_set_to_rgmii(struct rk_priv_data *bsp_priv,
572
573
RK3368_GMAC_PHY_INTF_SEL_RGMII |
573
574
RK3368_GMAC_RMII_MODE_CLR );
574
575
regmap_write (bsp_priv -> grf , RK3368_GRF_SOC_CON16 ,
575
- RK3368_GMAC_RXCLK_DLY_ENABLE |
576
- RK3368_GMAC_TXCLK_DLY_ENABLE |
576
+ DELAY_ENABLE (RK3368 , tx_delay , rx_delay ) |
577
577
RK3368_GMAC_CLK_RX_DL_CFG (rx_delay ) |
578
578
RK3368_GMAC_CLK_TX_DL_CFG (tx_delay ));
579
579
}
@@ -684,8 +684,7 @@ static void rk3399_set_to_rgmii(struct rk_priv_data *bsp_priv,
684
684
RK3399_GMAC_PHY_INTF_SEL_RGMII |
685
685
RK3399_GMAC_RMII_MODE_CLR );
686
686
regmap_write (bsp_priv -> grf , RK3399_GRF_SOC_CON6 ,
687
- RK3399_GMAC_RXCLK_DLY_ENABLE |
688
- RK3399_GMAC_TXCLK_DLY_ENABLE |
687
+ DELAY_ENABLE (RK3399 , tx_delay , rx_delay ) |
689
688
RK3399_GMAC_CLK_RX_DL_CFG (rx_delay ) |
690
689
RK3399_GMAC_CLK_TX_DL_CFG (tx_delay ));
691
690
}
@@ -985,14 +984,29 @@ static int rk_gmac_powerup(struct rk_priv_data *bsp_priv)
985
984
return ret ;
986
985
987
986
/*rmii or rgmii*/
988
- if (bsp_priv -> phy_iface == PHY_INTERFACE_MODE_RGMII ) {
987
+ switch (bsp_priv -> phy_iface ) {
988
+ case PHY_INTERFACE_MODE_RGMII :
989
989
dev_info (dev , "init for RGMII\n" );
990
990
bsp_priv -> ops -> set_to_rgmii (bsp_priv , bsp_priv -> tx_delay ,
991
991
bsp_priv -> rx_delay );
992
- } else if (bsp_priv -> phy_iface == PHY_INTERFACE_MODE_RMII ) {
992
+ break ;
993
+ case PHY_INTERFACE_MODE_RGMII_ID :
994
+ dev_info (dev , "init for RGMII_ID\n" );
995
+ bsp_priv -> ops -> set_to_rgmii (bsp_priv , 0 , 0 );
996
+ break ;
997
+ case PHY_INTERFACE_MODE_RGMII_RXID :
998
+ dev_info (dev , "init for RGMII_RXID\n" );
999
+ bsp_priv -> ops -> set_to_rgmii (bsp_priv , bsp_priv -> tx_delay , 0 );
1000
+ break ;
1001
+ case PHY_INTERFACE_MODE_RGMII_TXID :
1002
+ dev_info (dev , "init for RGMII_TXID\n" );
1003
+ bsp_priv -> ops -> set_to_rgmii (bsp_priv , 0 , bsp_priv -> rx_delay );
1004
+ break ;
1005
+ case PHY_INTERFACE_MODE_RMII :
993
1006
dev_info (dev , "init for RMII\n" );
994
1007
bsp_priv -> ops -> set_to_rmii (bsp_priv );
995
- } else {
1008
+ break ;
1009
+ default :
996
1010
dev_err (dev , "NO interface defined!\n" );
997
1011
}
998
1012
@@ -1022,12 +1036,19 @@ static void rk_fix_speed(void *priv, unsigned int speed)
1022
1036
struct rk_priv_data * bsp_priv = priv ;
1023
1037
struct device * dev = & bsp_priv -> pdev -> dev ;
1024
1038
1025
- if (bsp_priv -> phy_iface == PHY_INTERFACE_MODE_RGMII )
1039
+ switch (bsp_priv -> phy_iface ) {
1040
+ case PHY_INTERFACE_MODE_RGMII :
1041
+ case PHY_INTERFACE_MODE_RGMII_ID :
1042
+ case PHY_INTERFACE_MODE_RGMII_RXID :
1043
+ case PHY_INTERFACE_MODE_RGMII_TXID :
1026
1044
bsp_priv -> ops -> set_rgmii_speed (bsp_priv , speed );
1027
- else if (bsp_priv -> phy_iface == PHY_INTERFACE_MODE_RMII )
1045
+ break ;
1046
+ case PHY_INTERFACE_MODE_RMII :
1028
1047
bsp_priv -> ops -> set_rmii_speed (bsp_priv , speed );
1029
- else
1048
+ break ;
1049
+ default :
1030
1050
dev_err (dev , "unsupported interface %d" , bsp_priv -> phy_iface );
1051
+ }
1031
1052
}
1032
1053
1033
1054
static int rk_gmac_probe (struct platform_device * pdev )
0 commit comments