@@ -74,108 +74,94 @@ static const struct mt7530_mib_desc mt7530_mib[] = {
7474 MIB_DESC (1 , 0xb8 , "RxArlDrop" ),
7575};
7676
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 )
8493{
8594 struct mii_bus * bus = priv -> bus ;
86- int value , ret ;
95+ int ret ;
96+
97+ mt7530_mutex_lock (priv );
8798
8899 /* 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 );
90102 if (ret < 0 )
91103 goto err ;
92104
93105 /* 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 );
95108 if (ret < 0 )
96109 goto err ;
97110
98111 /* 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 );
100114 if (ret < 0 )
101115 goto err ;
102116
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 );
107120err :
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" );
109123
110- return ret ;
124+ mt7530_mutex_unlock ( priv ) ;
111125}
112126
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 )
116129{
117130 struct mii_bus * bus = priv -> bus ;
131+ u32 val ;
118132 int ret ;
119133
134+ mt7530_mutex_lock (priv );
135+
120136 /* 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 );
122139 if (ret < 0 )
123140 goto err ;
124141
125142 /* 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 );
127145 if (ret < 0 )
128146 goto err ;
129147
130148 /* 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 );
132151 if (ret < 0 )
133152 goto err ;
134153
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 ;
135159 /* 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 );
137162err :
138163 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" );
179165
180166 mt7530_mutex_unlock (priv );
181167}
@@ -2679,16 +2665,19 @@ mt7531_setup(struct dsa_switch *ds)
26792665 * phy_[read,write]_mmd_indirect is called, we provide our own
26802666 * mt7531_ind_mmd_phy_[read,write] to complete this function.
26812667 */
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 ),
26832670 MDIO_MMD_VEND2 , CORE_PLL_GROUP4 );
26842671 val |= MT7531_RG_SYSPLL_DMY2 | MT7531_PHY_PLL_BYPASS_MODE ;
26852672 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 );
26882676
26892677 /* 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 ++ ) {
26922681 mt7531_ind_c45_phy_write (priv , i , MDIO_MMD_AN , MDIO_AN_EEE_ADV ,
26932682 0 );
26942683 }
0 commit comments