[PATCH v3 net-next v3 1/4] net: dsa: mv88e6xxx: add helper to disable ports

2016-12-05 Thread Vivien Didelot
Before resetting a switch, the ports should be set to the Disabled state
and the transmit queues should be drained.

Add an helper to explicit that.

Signed-off-by: Vivien Didelot 
Reviewed-by: Andrew Lunn 
---
 drivers/net/dsa/mv88e6xxx/chip.c | 34 +++---
 1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index ca453f3..1d4d3be 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -2356,6 +2356,26 @@ static void mv88e6xxx_port_bridge_leave(struct 
dsa_switch *ds, int port)
mutex_unlock(>reg_lock);
 }
 
+static int mv88e6xxx_disable_ports(struct mv88e6xxx_chip *chip)
+{
+   int i, err;
+
+   /* Set all ports to the Disabled state */
+   for (i = 0; i < mv88e6xxx_num_ports(chip); i++) {
+   err = mv88e6xxx_port_set_state(chip, i,
+  PORT_CONTROL_STATE_DISABLED);
+   if (err)
+   return err;
+   }
+
+   /* Wait for transmit queues to drain,
+* i.e. 2ms for a maximum frame to be transmitted at 10 Mbps.
+*/
+   usleep_range(2000, 4000);
+
+   return 0;
+}
+
 static int mv88e6xxx_switch_reset(struct mv88e6xxx_chip *chip)
 {
bool ppu_active = mv88e6xxx_has(chip, MV88E6XXX_FLAG_PPU_ACTIVE);
@@ -2364,18 +2384,10 @@ static int mv88e6xxx_switch_reset(struct mv88e6xxx_chip 
*chip)
unsigned long timeout;
u16 reg;
int err;
-   int i;
 
-   /* Set all ports to the disabled state. */
-   for (i = 0; i < mv88e6xxx_num_ports(chip); i++) {
-   err = mv88e6xxx_port_set_state(chip, i,
-  PORT_CONTROL_STATE_DISABLED);
-   if (err)
-   return err;
-   }
-
-   /* Wait for transmit queues to drain. */
-   usleep_range(2000, 4000);
+   err = mv88e6xxx_disable_ports(chip);
+   if (err)
+   return err;
 
/* If there is a gpio connected to the reset pin, toggle it */
if (gpiod) {
-- 
2.10.2



[PATCH v3 net-next v3 1/4] net: dsa: mv88e6xxx: add helper to disable ports

2016-12-05 Thread Vivien Didelot
Before resetting a switch, the ports should be set to the Disabled state
and the transmit queues should be drained.

Add an helper to explicit that.

Signed-off-by: Vivien Didelot 
Reviewed-by: Andrew Lunn 
---
 drivers/net/dsa/mv88e6xxx/chip.c | 34 +++---
 1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index ca453f3..1d4d3be 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -2356,6 +2356,26 @@ static void mv88e6xxx_port_bridge_leave(struct 
dsa_switch *ds, int port)
mutex_unlock(>reg_lock);
 }
 
+static int mv88e6xxx_disable_ports(struct mv88e6xxx_chip *chip)
+{
+   int i, err;
+
+   /* Set all ports to the Disabled state */
+   for (i = 0; i < mv88e6xxx_num_ports(chip); i++) {
+   err = mv88e6xxx_port_set_state(chip, i,
+  PORT_CONTROL_STATE_DISABLED);
+   if (err)
+   return err;
+   }
+
+   /* Wait for transmit queues to drain,
+* i.e. 2ms for a maximum frame to be transmitted at 10 Mbps.
+*/
+   usleep_range(2000, 4000);
+
+   return 0;
+}
+
 static int mv88e6xxx_switch_reset(struct mv88e6xxx_chip *chip)
 {
bool ppu_active = mv88e6xxx_has(chip, MV88E6XXX_FLAG_PPU_ACTIVE);
@@ -2364,18 +2384,10 @@ static int mv88e6xxx_switch_reset(struct mv88e6xxx_chip 
*chip)
unsigned long timeout;
u16 reg;
int err;
-   int i;
 
-   /* Set all ports to the disabled state. */
-   for (i = 0; i < mv88e6xxx_num_ports(chip); i++) {
-   err = mv88e6xxx_port_set_state(chip, i,
-  PORT_CONTROL_STATE_DISABLED);
-   if (err)
-   return err;
-   }
-
-   /* Wait for transmit queues to drain. */
-   usleep_range(2000, 4000);
+   err = mv88e6xxx_disable_ports(chip);
+   if (err)
+   return err;
 
/* If there is a gpio connected to the reset pin, toggle it */
if (gpiod) {
-- 
2.10.2