1717#include "port.h"
1818#include "serdes.h"
1919
20- static int mv88e6352_serdes_read (struct mv88e6xxx_chip * chip , int reg ,
21- u16 * val )
20+ static int mv88e6352_serdes_read (struct mv88e6xxx_chip * chip , int lane ,
21+ int reg , u16 * val )
2222{
23- return mv88e6xxx_phy_page_read (chip , MV88E6352_ADDR_SERDES ,
23+ return mv88e6xxx_phy_page_read (chip , lane ,
2424 MV88E6352_SERDES_PAGE_FIBER ,
2525 reg , val );
2626}
@@ -126,11 +126,11 @@ static struct mv88e6352_serdes_hw_stat mv88e6352_serdes_hw_stats[] = {
126126
127127int mv88e6352_serdes_get_sset_count (struct mv88e6xxx_chip * chip , int port )
128128{
129- int err ;
129+ int lane = - ENODEV ;
130130
131- err = mv88e6352_g2_scratch_port_has_serdes (chip , port );
132- if (err <= 0 )
133- return err ;
131+ lane = mv88e6xxx_serdes_get_lane (chip , port );
132+ if (lane < 0 )
133+ return 0 ;
134134
135135 return ARRAY_SIZE (mv88e6352_serdes_hw_stats );
136136}
@@ -139,11 +139,12 @@ int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip, int port,
139139 uint8_t * * data )
140140{
141141 struct mv88e6352_serdes_hw_stat * stat ;
142- int err , i ;
142+ int lane = - ENODEV ;
143+ int i ;
143144
144- err = mv88e6352_g2_scratch_port_has_serdes (chip , port );
145- if (err <= 0 )
146- return err ;
145+ lane = mv88e6xxx_serdes_get_lane (chip , port );
146+ if (lane < 0 )
147+ return 0 ;
147148
148149 for (i = 0 ; i < ARRAY_SIZE (mv88e6352_serdes_hw_stats ); i ++ ) {
149150 stat = & mv88e6352_serdes_hw_stats [i ];
@@ -152,14 +153,14 @@ int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip, int port,
152153 return ARRAY_SIZE (mv88e6352_serdes_hw_stats );
153154}
154155
155- static uint64_t mv88e6352_serdes_get_stat (struct mv88e6xxx_chip * chip ,
156+ static uint64_t mv88e6352_serdes_get_stat (struct mv88e6xxx_chip * chip , int lane ,
156157 struct mv88e6352_serdes_hw_stat * stat )
157158{
158159 u64 val = 0 ;
159160 u16 reg ;
160161 int err ;
161162
162- err = mv88e6352_serdes_read (chip , stat -> reg , & reg );
163+ err = mv88e6352_serdes_read (chip , lane , stat -> reg , & reg );
163164 if (err ) {
164165 dev_err (chip -> dev , "failed to read statistic\n" );
165166 return 0 ;
@@ -168,7 +169,7 @@ static uint64_t mv88e6352_serdes_get_stat(struct mv88e6xxx_chip *chip,
168169 val = reg ;
169170
170171 if (stat -> sizeof_stat == 32 ) {
171- err = mv88e6352_serdes_read (chip , stat -> reg + 1 , & reg );
172+ err = mv88e6352_serdes_read (chip , lane , stat -> reg + 1 , & reg );
172173 if (err ) {
173174 dev_err (chip -> dev , "failed to read statistic\n" );
174175 return 0 ;
@@ -184,19 +185,20 @@ size_t mv88e6352_serdes_get_stats(struct mv88e6xxx_chip *chip, int port,
184185{
185186 struct mv88e6xxx_port * mv88e6xxx_port = & chip -> ports [port ];
186187 struct mv88e6352_serdes_hw_stat * stat ;
187- int i , err ;
188+ int lane = - ENODEV ;
188189 u64 value ;
190+ int i ;
189191
190- err = mv88e6352_g2_scratch_port_has_serdes (chip , port );
191- if (err <= 0 )
192+ lane = mv88e6xxx_serdes_get_lane (chip , port );
193+ if (lane < 0 )
192194 return 0 ;
193195
194196 BUILD_BUG_ON (ARRAY_SIZE (mv88e6352_serdes_hw_stats ) >
195197 ARRAY_SIZE (mv88e6xxx_port -> serdes_stats ));
196198
197199 for (i = 0 ; i < ARRAY_SIZE (mv88e6352_serdes_hw_stats ); i ++ ) {
198200 stat = & mv88e6352_serdes_hw_stats [i ];
199- value = mv88e6352_serdes_get_stat (chip , stat );
201+ value = mv88e6352_serdes_get_stat (chip , lane , stat );
200202 mv88e6xxx_port -> serdes_stats [i ] += value ;
201203 data [i ] = mv88e6xxx_port -> serdes_stats [i ];
202204 }
@@ -211,28 +213,29 @@ unsigned int mv88e6352_serdes_irq_mapping(struct mv88e6xxx_chip *chip, int port)
211213
212214int mv88e6352_serdes_get_regs_len (struct mv88e6xxx_chip * chip , int port )
213215{
214- int err ;
216+ int lane = - ENODEV ;
215217
216- err = mv88e6352_g2_scratch_port_has_serdes (chip , port );
217- if (err <= 0 )
218- return err ;
218+ lane = mv88e6xxx_serdes_get_lane (chip , port );
219+ if (lane < 0 )
220+ return 0 ;
219221
220222 return 32 * sizeof (u16 );
221223}
222224
223225void mv88e6352_serdes_get_regs (struct mv88e6xxx_chip * chip , int port , void * _p )
224226{
227+ int lane = - ENODEV ;
225228 u16 * p = _p ;
226229 u16 reg ;
227230 int err ;
228231 int i ;
229232
230- err = mv88e6352_g2_scratch_port_has_serdes (chip , port );
231- if (err <= 0 )
233+ lane = mv88e6xxx_serdes_get_lane (chip , port );
234+ if (lane < 0 )
232235 return ;
233236
234237 for (i = 0 ; i < 32 ; i ++ ) {
235- err = mv88e6352_serdes_read (chip , i , & reg );
238+ err = mv88e6352_serdes_read (chip , lane , i , & reg );
236239 if (!err )
237240 p [i ] = reg ;
238241 }
0 commit comments