Skip to content

Commit

Permalink
net: dsa: sja1105: Print the reset reason
Browse files Browse the repository at this point in the history
Sometimes it can be quite opaque even for me why the driver decided to
reset the switch. So instead of adding dump_stack() calls each time for
debugging, just add a reset reason to sja1105_static_config_reload
calls which gets printed to the console.

Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Vladimir Oltean authored and David S. Miller committed Nov 13, 2019
1 parent d438945 commit 2eea1fa
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 7 deletions.
10 changes: 9 additions & 1 deletion drivers/net/dsa/sja1105/sja1105.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,15 @@ typedef enum {
} sja1105_spi_rw_mode_t;

/* From sja1105_main.c */
int sja1105_static_config_reload(struct sja1105_private *priv);
enum sja1105_reset_reason {
SJA1105_VLAN_FILTERING = 0,
SJA1105_RX_HWTSTAMPING,
SJA1105_AGEING_TIME,
SJA1105_SCHEDULING,
};

int sja1105_static_config_reload(struct sja1105_private *priv,
enum sja1105_reset_reason reason);

/* From sja1105_spi.c */
int sja1105_xfer_buf(const struct sja1105_private *priv,
Expand Down
18 changes: 15 additions & 3 deletions drivers/net/dsa/sja1105/sja1105_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1341,13 +1341,21 @@ static void sja1105_bridge_leave(struct dsa_switch *ds, int port,
sja1105_bridge_member(ds, port, br, false);
}

static const char * const sja1105_reset_reasons[] = {
[SJA1105_VLAN_FILTERING] = "VLAN filtering",
[SJA1105_RX_HWTSTAMPING] = "RX timestamping",
[SJA1105_AGEING_TIME] = "Ageing time",
[SJA1105_SCHEDULING] = "Time-aware scheduling",
};

/* For situations where we need to change a setting at runtime that is only
* available through the static configuration, resetting the switch in order
* to upload the new static config is unavoidable. Back up the settings we
* modify at runtime (currently only MAC) and restore them after uploading,
* such that this operation is relatively seamless.
*/
int sja1105_static_config_reload(struct sja1105_private *priv)
int sja1105_static_config_reload(struct sja1105_private *priv,
enum sja1105_reset_reason reason)
{
struct ptp_system_timestamp ptp_sts_before;
struct ptp_system_timestamp ptp_sts_after;
Expand Down Expand Up @@ -1405,6 +1413,10 @@ int sja1105_static_config_reload(struct sja1105_private *priv)
out_unlock_ptp:
mutex_unlock(&priv->ptp_data.lock);

dev_info(priv->ds->dev,
"Reset switch and programmed static config. Reason: %s\n",
sja1105_reset_reasons[reason]);

/* Configure the CGU (PLLs) for MII and RMII PHYs.
* For these interfaces there is no dynamic configuration
* needed, since PLLs have same settings at all speeds.
Expand Down Expand Up @@ -1599,7 +1611,7 @@ static int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled)
l2_lookup_params = table->entries;
l2_lookup_params->shared_learn = !enabled;

rc = sja1105_static_config_reload(priv);
rc = sja1105_static_config_reload(priv, SJA1105_VLAN_FILTERING);
if (rc)
dev_err(ds->dev, "Failed to change VLAN Ethertype\n");

Expand Down Expand Up @@ -1871,7 +1883,7 @@ static int sja1105_set_ageing_time(struct dsa_switch *ds,

l2_lookup_params->maxage = maxage;

return sja1105_static_config_reload(priv);
return sja1105_static_config_reload(priv, SJA1105_AGEING_TIME);
}

static int sja1105_port_setup_tc(struct dsa_switch *ds, int port,
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/dsa/sja1105/sja1105_ptp.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ static int sja1105_change_rxtstamping(struct sja1105_private *priv,
priv->tagger_data.stampable_skb = NULL;
}

return sja1105_static_config_reload(priv);
return sja1105_static_config_reload(priv, SJA1105_RX_HWTSTAMPING);
}

int sja1105_hwtstamp_set(struct dsa_switch *ds, int port, struct ifreq *ifr)
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/dsa/sja1105/sja1105_tas.c
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ int sja1105_setup_tc_taprio(struct dsa_switch *ds, int port,
if (rc < 0)
return rc;

return sja1105_static_config_reload(priv);
return sja1105_static_config_reload(priv, SJA1105_SCHEDULING);
}

/* The cycle time extension is the amount of time the last cycle from
Expand Down Expand Up @@ -400,7 +400,7 @@ int sja1105_setup_tc_taprio(struct dsa_switch *ds, int port,
if (rc < 0)
return rc;

return sja1105_static_config_reload(priv);
return sja1105_static_config_reload(priv, SJA1105_SCHEDULING);
}

void sja1105_tas_setup(struct dsa_switch *ds)
Expand Down

0 comments on commit 2eea1fa

Please sign in to comment.