@@ -74,108 +74,94 @@ static const struct mt7530_mib_desc mt7530_mib[] = {
74
74
MIB_DESC (1 , 0xb8 , "RxArlDrop" ),
75
75
};
76
76
77
- /* Since phy_device has not yet been created and
78
- * phy_{read,write}_mmd_indirect is not available, we provide our own
79
- * core_{read,write}_mmd_indirect with core_{clear,write,set} wrappers
80
- * to complete this function.
81
- */
82
- static int
83
- core_read_mmd_indirect (struct mt7530_priv * priv , int prtad , int devad )
77
+ static void
78
+ mt7530_mutex_lock (struct mt7530_priv * priv )
79
+ {
80
+ if (priv -> bus )
81
+ mutex_lock_nested (& priv -> bus -> mdio_lock , MDIO_MUTEX_NESTED );
82
+ }
83
+
84
+ static void
85
+ mt7530_mutex_unlock (struct mt7530_priv * priv )
86
+ {
87
+ if (priv -> bus )
88
+ mutex_unlock (& priv -> bus -> mdio_lock );
89
+ }
90
+
91
+ static void
92
+ core_write (struct mt7530_priv * priv , u32 reg , u32 val )
84
93
{
85
94
struct mii_bus * bus = priv -> bus ;
86
- int value , ret ;
95
+ int ret ;
96
+
97
+ mt7530_mutex_lock (priv );
87
98
88
99
/* Write the desired MMD Devad */
89
- ret = bus -> write (bus , 0 , MII_MMD_CTRL , devad );
100
+ ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
101
+ MII_MMD_CTRL , MDIO_MMD_VEND2 );
90
102
if (ret < 0 )
91
103
goto err ;
92
104
93
105
/* Write the desired MMD register address */
94
- ret = bus -> write (bus , 0 , MII_MMD_DATA , prtad );
106
+ ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
107
+ MII_MMD_DATA , reg );
95
108
if (ret < 0 )
96
109
goto err ;
97
110
98
111
/* Select the Function : DATA with no post increment */
99
- ret = bus -> write (bus , 0 , MII_MMD_CTRL , (devad | MII_MMD_CTRL_NOINCR ));
112
+ ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
113
+ MII_MMD_CTRL , MDIO_MMD_VEND2 | MII_MMD_CTRL_NOINCR );
100
114
if (ret < 0 )
101
115
goto err ;
102
116
103
- /* Read the content of the MMD's selected register */
104
- value = bus -> read (bus , 0 , MII_MMD_DATA );
105
-
106
- return value ;
117
+ /* Write the data into MMD's selected register */
118
+ ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
119
+ MII_MMD_DATA , val );
107
120
err :
108
- dev_err (& bus -> dev , "failed to read mmd register\n" );
121
+ if (ret < 0 )
122
+ dev_err (& bus -> dev , "failed to write mmd register\n" );
109
123
110
- return ret ;
124
+ mt7530_mutex_unlock ( priv ) ;
111
125
}
112
126
113
- static int
114
- core_write_mmd_indirect (struct mt7530_priv * priv , int prtad ,
115
- int devad , u32 data )
127
+ static void
128
+ core_rmw (struct mt7530_priv * priv , u32 reg , u32 mask , u32 set )
116
129
{
117
130
struct mii_bus * bus = priv -> bus ;
131
+ u32 val ;
118
132
int ret ;
119
133
134
+ mt7530_mutex_lock (priv );
135
+
120
136
/* Write the desired MMD Devad */
121
- ret = bus -> write (bus , 0 , MII_MMD_CTRL , devad );
137
+ ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
138
+ MII_MMD_CTRL , MDIO_MMD_VEND2 );
122
139
if (ret < 0 )
123
140
goto err ;
124
141
125
142
/* Write the desired MMD register address */
126
- ret = bus -> write (bus , 0 , MII_MMD_DATA , prtad );
143
+ ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
144
+ MII_MMD_DATA , reg );
127
145
if (ret < 0 )
128
146
goto err ;
129
147
130
148
/* Select the Function : DATA with no post increment */
131
- ret = bus -> write (bus , 0 , MII_MMD_CTRL , (devad | MII_MMD_CTRL_NOINCR ));
149
+ ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
150
+ MII_MMD_CTRL , MDIO_MMD_VEND2 | MII_MMD_CTRL_NOINCR );
132
151
if (ret < 0 )
133
152
goto err ;
134
153
154
+ /* Read the content of the MMD's selected register */
155
+ val = bus -> read (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
156
+ MII_MMD_DATA );
157
+ val &= ~mask ;
158
+ val |= set ;
135
159
/* Write the data into MMD's selected register */
136
- ret = bus -> write (bus , 0 , MII_MMD_DATA , data );
160
+ ret = bus -> write (bus , MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
161
+ MII_MMD_DATA , val );
137
162
err :
138
163
if (ret < 0 )
139
- dev_err (& bus -> dev ,
140
- "failed to write mmd register\n" );
141
- return ret ;
142
- }
143
-
144
- static void
145
- mt7530_mutex_lock (struct mt7530_priv * priv )
146
- {
147
- if (priv -> bus )
148
- mutex_lock_nested (& priv -> bus -> mdio_lock , MDIO_MUTEX_NESTED );
149
- }
150
-
151
- static void
152
- mt7530_mutex_unlock (struct mt7530_priv * priv )
153
- {
154
- if (priv -> bus )
155
- mutex_unlock (& priv -> bus -> mdio_lock );
156
- }
157
-
158
- static void
159
- core_write (struct mt7530_priv * priv , u32 reg , u32 val )
160
- {
161
- mt7530_mutex_lock (priv );
162
-
163
- core_write_mmd_indirect (priv , reg , MDIO_MMD_VEND2 , val );
164
-
165
- mt7530_mutex_unlock (priv );
166
- }
167
-
168
- static void
169
- core_rmw (struct mt7530_priv * priv , u32 reg , u32 mask , u32 set )
170
- {
171
- u32 val ;
172
-
173
- mt7530_mutex_lock (priv );
174
-
175
- val = core_read_mmd_indirect (priv , reg , MDIO_MMD_VEND2 );
176
- val &= ~mask ;
177
- val |= set ;
178
- core_write_mmd_indirect (priv , reg , MDIO_MMD_VEND2 , val );
164
+ dev_err (& bus -> dev , "failed to write mmd register\n" );
179
165
180
166
mt7530_mutex_unlock (priv );
181
167
}
@@ -2679,16 +2665,19 @@ mt7531_setup(struct dsa_switch *ds)
2679
2665
* phy_[read,write]_mmd_indirect is called, we provide our own
2680
2666
* mt7531_ind_mmd_phy_[read,write] to complete this function.
2681
2667
*/
2682
- val = mt7531_ind_c45_phy_read (priv , MT753X_CTRL_PHY_ADDR ,
2668
+ val = mt7531_ind_c45_phy_read (priv ,
2669
+ MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
2683
2670
MDIO_MMD_VEND2 , CORE_PLL_GROUP4 );
2684
2671
val |= MT7531_RG_SYSPLL_DMY2 | MT7531_PHY_PLL_BYPASS_MODE ;
2685
2672
val &= ~MT7531_PHY_PLL_OFF ;
2686
- mt7531_ind_c45_phy_write (priv , MT753X_CTRL_PHY_ADDR , MDIO_MMD_VEND2 ,
2687
- CORE_PLL_GROUP4 , val );
2673
+ mt7531_ind_c45_phy_write (priv ,
2674
+ MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ),
2675
+ MDIO_MMD_VEND2 , CORE_PLL_GROUP4 , val );
2688
2676
2689
2677
/* Disable EEE advertisement on the switch PHYs. */
2690
- for (i = MT753X_CTRL_PHY_ADDR ;
2691
- i < MT753X_CTRL_PHY_ADDR + MT7530_NUM_PHYS ; i ++ ) {
2678
+ for (i = MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr );
2679
+ i < MT753X_CTRL_PHY_ADDR (priv -> mdiodev -> addr ) + MT7530_NUM_PHYS ;
2680
+ i ++ ) {
2692
2681
mt7531_ind_c45_phy_write (priv , i , MDIO_MMD_AN , MDIO_AN_EEE_ADV ,
2693
2682
0 );
2694
2683
}
0 commit comments