@@ -281,91 +281,65 @@ static void dsa_tree_teardown_default_cpu(struct dsa_switch_tree *dst)
281281 dst -> cpu_dp = NULL ;
282282}
283283
284- static int dsa_dsa_port_apply (struct dsa_port * port )
284+ static int dsa_port_setup (struct dsa_port * dp )
285285{
286- struct dsa_switch * ds = port -> ds ;
286+ struct dsa_switch * ds = dp -> ds ;
287287 int err ;
288288
289- err = dsa_port_fixed_link_register_of (port );
290- if (err ) {
291- dev_warn (ds -> dev , "Failed to setup dsa port %d: %d\n" ,
292- port -> index , err );
293- return err ;
294- }
295-
296- memset (& port -> devlink_port , 0 , sizeof (port -> devlink_port ));
297-
298- return devlink_port_register (ds -> devlink , & port -> devlink_port ,
299- port -> index );
300- }
301-
302- static void dsa_dsa_port_unapply (struct dsa_port * port )
303- {
304- devlink_port_unregister (& port -> devlink_port );
305- dsa_port_fixed_link_unregister_of (port );
306- }
307-
308- static int dsa_cpu_port_apply (struct dsa_port * port )
309- {
310- struct dsa_switch * ds = port -> ds ;
311- int err ;
289+ memset (& dp -> devlink_port , 0 , sizeof (dp -> devlink_port ));
312290
313- err = dsa_port_fixed_link_register_of (port );
314- if (err ) {
315- dev_warn (ds -> dev , "Failed to setup cpu port %d: %d\n" ,
316- port -> index , err );
291+ err = devlink_port_register (ds -> devlink , & dp -> devlink_port , dp -> index );
292+ if (err )
317293 return err ;
318- }
319-
320- memset (& port -> devlink_port , 0 , sizeof (port -> devlink_port ));
321- err = devlink_port_register (ds -> devlink , & port -> devlink_port ,
322- port -> index );
323- return err ;
324- }
325-
326- static void dsa_cpu_port_unapply (struct dsa_port * port )
327- {
328- devlink_port_unregister (& port -> devlink_port );
329- dsa_port_fixed_link_unregister_of (port );
330- }
331294
332- static int dsa_user_port_apply (struct dsa_port * port )
333- {
334- struct dsa_switch * ds = port -> ds ;
335- int err ;
295+ switch (dp -> type ) {
296+ case DSA_PORT_TYPE_UNUSED :
297+ break ;
298+ case DSA_PORT_TYPE_CPU :
299+ case DSA_PORT_TYPE_DSA :
300+ err = dsa_port_fixed_link_register_of (dp );
301+ if (err ) {
302+ dev_err (ds -> dev , "failed to register fixed link for port %d.%d\n" ,
303+ ds -> index , dp -> index );
304+ return err ;
305+ }
336306
337- err = dsa_slave_create (port );
338- if (err ) {
339- dev_warn (ds -> dev , "Failed to create slave %d: %d\n" ,
340- port -> index , err );
341- port -> slave = NULL ;
342- return err ;
307+ break ;
308+ case DSA_PORT_TYPE_USER :
309+ err = dsa_slave_create (dp );
310+ if (err )
311+ dev_err (ds -> dev , "failed to create slave for port %d.%d\n" ,
312+ ds -> index , dp -> index );
313+ else
314+ devlink_port_type_eth_set (& dp -> devlink_port , dp -> slave );
315+ break ;
343316 }
344317
345- memset (& port -> devlink_port , 0 , sizeof (port -> devlink_port ));
346- err = devlink_port_register (ds -> devlink , & port -> devlink_port ,
347- port -> index );
348- if (err )
349- return err ;
350-
351- devlink_port_type_eth_set (& port -> devlink_port , port -> slave );
352-
353318 return 0 ;
354319}
355320
356- static void dsa_user_port_unapply (struct dsa_port * port )
321+ static void dsa_port_teardown (struct dsa_port * dp )
357322{
358- devlink_port_unregister (& port -> devlink_port );
359- if (port -> slave ) {
360- dsa_slave_destroy (port -> slave );
361- port -> slave = NULL ;
323+ devlink_port_unregister (& dp -> devlink_port );
324+
325+ switch (dp -> type ) {
326+ case DSA_PORT_TYPE_UNUSED :
327+ break ;
328+ case DSA_PORT_TYPE_CPU :
329+ case DSA_PORT_TYPE_DSA :
330+ dsa_port_fixed_link_unregister_of (dp );
331+ break ;
332+ case DSA_PORT_TYPE_USER :
333+ if (dp -> slave ) {
334+ dsa_slave_destroy (dp -> slave );
335+ dp -> slave = NULL ;
336+ }
337+ break ;
362338 }
363339}
364340
365341static int dsa_switch_setup (struct dsa_switch * ds )
366342{
367- struct dsa_port * port ;
368- u32 index ;
369343 int err ;
370344
371345 /* Initialize ds->phys_mii_mask before registering the slave MDIO bus
@@ -406,56 +380,11 @@ static int dsa_switch_setup(struct dsa_switch *ds)
406380 return err ;
407381 }
408382
409- for (index = 0 ; index < ds -> num_ports ; index ++ ) {
410- port = & ds -> ports [index ];
411- if (!dsa_port_is_valid (port ))
412- continue ;
413-
414- if (dsa_port_is_dsa (port )) {
415- err = dsa_dsa_port_apply (port );
416- if (err )
417- return err ;
418- continue ;
419- }
420-
421- if (dsa_port_is_cpu (port )) {
422- err = dsa_cpu_port_apply (port );
423- if (err )
424- return err ;
425- continue ;
426- }
427-
428- err = dsa_user_port_apply (port );
429- if (err )
430- continue ;
431- }
432-
433383 return 0 ;
434384}
435385
436386static void dsa_switch_teardown (struct dsa_switch * ds )
437387{
438- struct dsa_port * port ;
439- u32 index ;
440-
441- for (index = 0 ; index < ds -> num_ports ; index ++ ) {
442- port = & ds -> ports [index ];
443- if (!dsa_port_is_valid (port ))
444- continue ;
445-
446- if (dsa_port_is_dsa (port )) {
447- dsa_dsa_port_unapply (port );
448- continue ;
449- }
450-
451- if (dsa_port_is_cpu (port )) {
452- dsa_cpu_port_unapply (port );
453- continue ;
454- }
455-
456- dsa_user_port_unapply (port );
457- }
458-
459388 if (ds -> slave_mii_bus && ds -> ops -> phy_read )
460389 mdiobus_unregister (ds -> slave_mii_bus );
461390
@@ -472,7 +401,8 @@ static void dsa_switch_teardown(struct dsa_switch *ds)
472401static int dsa_tree_setup_switches (struct dsa_switch_tree * dst )
473402{
474403 struct dsa_switch * ds ;
475- int device ;
404+ struct dsa_port * dp ;
405+ int device , port ;
476406 int err ;
477407
478408 for (device = 0 ; device < DSA_MAX_SWITCHES ; device ++ ) {
@@ -483,6 +413,14 @@ static int dsa_tree_setup_switches(struct dsa_switch_tree *dst)
483413 err = dsa_switch_setup (ds );
484414 if (err )
485415 return err ;
416+
417+ for (port = 0 ; port < ds -> num_ports ; port ++ ) {
418+ dp = & ds -> ports [port ];
419+
420+ err = dsa_port_setup (dp );
421+ if (err )
422+ return err ;
423+ }
486424 }
487425
488426 return 0 ;
@@ -491,13 +429,20 @@ static int dsa_tree_setup_switches(struct dsa_switch_tree *dst)
491429static void dsa_tree_teardown_switches (struct dsa_switch_tree * dst )
492430{
493431 struct dsa_switch * ds ;
494- int device ;
432+ struct dsa_port * dp ;
433+ int device , port ;
495434
496435 for (device = 0 ; device < DSA_MAX_SWITCHES ; device ++ ) {
497436 ds = dst -> ds [device ];
498437 if (!ds )
499438 continue ;
500439
440+ for (port = 0 ; port < ds -> num_ports ; port ++ ) {
441+ dp = & ds -> ports [port ];
442+
443+ dsa_port_teardown (dp );
444+ }
445+
501446 dsa_switch_teardown (ds );
502447 }
503448}
0 commit comments