This patch set contains various small cleanup patches
for the DPAA2 ethsw driver.
Ioana Ciornei (1):
staging: fsl-dpaa2/ethsw: Check notification relevance
Razvan Stefanescu (6):
staging: fsl-dpaa2/ethsw: Fix setting port learning/flooding flags
staging: fsl-dpaa2/ethsw: Add network interface statistics
staging: fsl-dpaa2/ethsw: Remove netdevice on port probing error
staging: fsl-dpaa2/ethsw: Add ndo_get_phys_port_name
staging: fsl-dpaa2/ethsw: Add switch driver documentation
staging: fsl-dpaa2/ethsw: Add comments to ETHSW_VLAN flags
.../device_drivers/freescale/dpaa2/overview.rst | 6 ++++
MAINTAINERS | 1 +
drivers/staging/fsl-dpaa2/ethsw/ethsw.c | 42 ++++++++++++++++++----
drivers/staging/fsl-dpaa2/ethsw/ethsw.h | 4 +++
4 files changed, 47 insertions(+), 6 deletions(-)
--
1.9.1
From: Razvan Stefanescu <[email protected]>
ethsw_set_learning()/ethsw_set_flood() use flags parameter as an
enable/disable (1/0) indicator. Previous usage sent incorrect values.
Signed-off-by: Razvan Stefanescu <[email protected]>
Signed-off-by: Ioana Ciornei <[email protected]>
---
drivers/staging/fsl-dpaa2/ethsw/ethsw.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
index daabace..9463e05 100644
--- a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
+++ b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
@@ -676,11 +676,12 @@ static int port_attr_br_flags_set(struct net_device *netdev,
return 0;
/* Learning is enabled per switch */
- err = ethsw_set_learning(port_priv->ethsw_data, flags & BR_LEARNING);
+ err = ethsw_set_learning(port_priv->ethsw_data,
+ !!(flags & BR_LEARNING));
if (err)
goto exit;
- err = ethsw_port_set_flood(port_priv, flags & BR_FLOOD);
+ err = ethsw_port_set_flood(port_priv, !!(flags & BR_FLOOD));
exit:
return err;
--
1.9.1
From: Razvan Stefanescu <[email protected]>
Allocate MC portal with atomic context for I/O and enable network interface
statistics for hardware counters.
Signed-off-by: Razvan Stefanescu <[email protected]>
Signed-off-by: Ioana Ciornei <[email protected]>
---
drivers/staging/fsl-dpaa2/ethsw/ethsw.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
index 9463e05..d15d03b 100644
--- a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
+++ b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
@@ -510,6 +510,7 @@ static netdev_tx_t port_dropframe(struct sk_buff *skb,
.ndo_stop = port_stop,
.ndo_set_mac_address = eth_mac_addr,
+ .ndo_get_stats64 = port_get_stats,
.ndo_change_mtu = port_change_mtu,
.ndo_has_offload_stats = port_has_offload_stats,
.ndo_get_offload_stats = port_get_offload_stats,
@@ -1468,7 +1469,8 @@ static int ethsw_probe(struct fsl_mc_device *sw_dev)
ethsw->dev = dev;
dev_set_drvdata(dev, ethsw);
- err = fsl_mc_portal_allocate(sw_dev, 0, ðsw->mc_io);
+ err = fsl_mc_portal_allocate(sw_dev, FSL_MC_IO_ATOMIC_CONTEXT_PORTAL,
+ ðsw->mc_io);
if (err) {
if (err == -ENXIO)
err = -EPROBE_DEFER;
--
1.9.1
Verify the notification relevance by checking if the
device is a ethsw one.
Signed-off-by: Ioana Ciornei <[email protected]>
---
drivers/staging/fsl-dpaa2/ethsw/ethsw.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
index f179fd0..c5da40f 100644
--- a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
+++ b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
@@ -1063,6 +1063,9 @@ static int port_switchdev_event(struct notifier_block *unused,
struct ethsw_switchdev_event_work *switchdev_work;
struct switchdev_notifier_fdb_info *fdb_info = ptr;
+ if (!ethsw_port_dev_check(dev))
+ return NOTIFY_DONE;
+
switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
if (!switchdev_work)
return NOTIFY_BAD;
--
1.9.1
From: Razvan Stefanescu <[email protected]>
Add the ndo_get_phys_port_name callback to the ethsw driver.
Signed-off-by: Razvan Stefanescu <[email protected]>
Signed-off-by: Ioana Ciornei <[email protected]>
---
drivers/staging/fsl-dpaa2/ethsw/ethsw.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
index fa3af4a..f179fd0 100644
--- a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
+++ b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
@@ -505,6 +505,19 @@ static netdev_tx_t port_dropframe(struct sk_buff *skb,
return NETDEV_TX_OK;
}
+static int port_get_phys_name(struct net_device *netdev, char *name,
+ size_t len)
+{
+ struct ethsw_port_priv *port_priv = netdev_priv(netdev);
+ int err;
+
+ err = snprintf(name, len, "p%d", port_priv->idx);
+ if (err >= len)
+ return -EINVAL;
+
+ return 0;
+}
+
static const struct net_device_ops ethsw_port_ops = {
.ndo_open = port_open,
.ndo_stop = port_stop,
@@ -516,6 +529,7 @@ static netdev_tx_t port_dropframe(struct sk_buff *skb,
.ndo_get_offload_stats = port_get_offload_stats,
.ndo_start_xmit = port_dropframe,
+ .ndo_get_phys_port_name = port_get_phys_name,
};
static void ethsw_links_state_update(struct ethsw_core *ethsw)
--
1.9.1
From: Razvan Stefanescu <[email protected]>
If the ethsw_port_init() call failed, the netdevice remains registered in
the system.
Use labels to ensure that netdevice is unregistered and freed in this case.
Signed-off-by: Razvan Stefanescu <[email protected]>
Signed-off-by: Ioana Ciornei <[email protected]>
---
drivers/staging/fsl-dpaa2/ethsw/ethsw.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
index d15d03b..fa3af4a 100644
--- a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
+++ b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
@@ -1445,13 +1445,23 @@ static int ethsw_probe_port(struct ethsw_core *ethsw, u16 port_idx)
err = register_netdev(port_netdev);
if (err < 0) {
dev_err(dev, "register_netdev error %d\n", err);
- free_netdev(port_netdev);
- return err;
+ goto err_register_netdev;
}
ethsw->ports[port_idx] = port_priv;
- return ethsw_port_init(port_priv, port_idx);
+ err = ethsw_port_init(port_priv, port_idx);
+ if (err)
+ goto err_ethsw_port_init;
+
+ return 0;
+
+err_ethsw_port_init:
+ unregister_netdev(port_netdev);
+err_register_netdev:
+ free_netdev(port_netdev);
+
+ return err;
}
static int ethsw_probe(struct fsl_mc_device *sw_dev)
--
1.9.1
From: Razvan Stefanescu <[email protected]>
Document each ETHSW_VLAN flag with the appropriate comment.
Signed-off-by: Razvan Stefanescu <[email protected]>
Signed-off-by: Ioana Ciornei <[email protected]>
---
drivers/staging/fsl-dpaa2/ethsw/ethsw.h | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/staging/fsl-dpaa2/ethsw/ethsw.h b/drivers/staging/fsl-dpaa2/ethsw/ethsw.h
index c487836..3ea8a0a 100644
--- a/drivers/staging/fsl-dpaa2/ethsw/ethsw.h
+++ b/drivers/staging/fsl-dpaa2/ethsw/ethsw.h
@@ -23,9 +23,13 @@
/* Number of IRQs supported */
#define DPSW_IRQ_NUM 2
+/* Port is member of VLAN */
#define ETHSW_VLAN_MEMBER 1
+/* VLAN to be treated as untagged on egress */
#define ETHSW_VLAN_UNTAGGED 2
+/* Untagged frames will be assigned to this VLAN */
#define ETHSW_VLAN_PVID 4
+/* VLAN configured on the switch */
#define ETHSW_VLAN_GLOBAL 8
/* Maximum Frame Length supported by HW (currently 10k) */
--
1.9.1
From: Razvan Stefanescu <[email protected]>
Add a switch driver entry in the dpaa2 overview documentation.
Signed-off-by: Razvan Stefanescu <[email protected]>
Signed-off-by: Ioana Ciornei <[email protected]>
---
.../networking/device_drivers/freescale/dpaa2/overview.rst | 6 ++++++
MAINTAINERS | 1 +
2 files changed, 7 insertions(+)
diff --git a/Documentation/networking/device_drivers/freescale/dpaa2/overview.rst b/Documentation/networking/device_drivers/freescale/dpaa2/overview.rst
index d638b5a..7b7f3590 100644
--- a/Documentation/networking/device_drivers/freescale/dpaa2/overview.rst
+++ b/Documentation/networking/device_drivers/freescale/dpaa2/overview.rst
@@ -393,6 +393,12 @@ interfaces needed to connect the DPAA2 network interface to
the network stack.
Each DPNI corresponds to a Linux network interface.
+Ethernet L2 Switch driver
+-------------------------
+The Ethernet L2 Switch driver is bound to a DPSW and makes use of the
+switchdev support in kernel.
+Each switch port has a corresponding Linux network interface.
+
MAC driver
----------
An Ethernet PHY is an off-chip, board specific component and is managed
diff --git a/MAINTAINERS b/MAINTAINERS
index f35c77b..77e88a8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4733,6 +4733,7 @@ M: Ioana Ciornei <[email protected]>
L: [email protected]
S: Maintained
F: drivers/staging/fsl-dpaa2/ethsw
+F: Documentation/networking/device_drivers/freescale/dpaa2/overview.rst
DPAA2 PTP CLOCK DRIVER
M: Yangbo Lu <[email protected]>
--
1.9.1