* [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477
@ 2023-08-31 11:18 Lukasz Majewski
2023-08-31 11:18 ` [PATCH v2 1/4] net: dsa: Extend the ksz_device structure to hold info about HSR ports Lukasz Majewski
` (5 more replies)
0 siblings, 6 replies; 13+ messages in thread
From: Lukasz Majewski @ 2023-08-31 11:18 UTC (permalink / raw)
To: Eric Dumazet, Andrew Lunn, davem, Paolo Abeni, Woojung Huh,
Vladimir Oltean
Cc: Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel,
Lukasz Majewski
This patch series provides support for HSR HW offloading in KSZ9477
switch IC.
To test this feature:
ip link add name hsr0 type hsr slave1 lan1 slave2 lan2 supervision 45 version 1
ifconfig lan1 up;ifconfig lan2 up
ifconfig hsr0 192.168.0.1 up
To remove HSR network device:
ip link del hsr0
Test HW:
Two KSZ9477-EVB boards with HSR ports set to "Port1" and "Port2".
Performance SW used:
nuttcp -S --nofork
nuttcp -vv -T 60 -r 192.168.0.2
nuttcp -vv -T 60 -t 192.168.0.2
Code: v6.5-rc7 Linux repository
Tested HSR v0 and v1
Results:
With KSZ9477 offloading support added: RX: 100 Mbps TX: 98 Mbps
With no offloading RX: 63 Mbps TX: 63 Mbps
Lukasz Majewski (4):
net: dsa: Extend the ksz_device structure to hold info about HSR ports
net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication
net: dsa: hsr: Enable in KSZ9477 switch HW HSR offloading
net: dsa: hsr: Provide generic HSR ksz_hsr_{join|leave} functions
drivers/net/dsa/microchip/ksz9477.c | 96 ++++++++++++++++++++++++++
drivers/net/dsa/microchip/ksz9477.h | 4 ++
drivers/net/dsa/microchip/ksz_common.c | 81 ++++++++++++++++++++++
drivers/net/dsa/microchip/ksz_common.h | 3 +
include/linux/dsa/ksz_common.h | 1 +
net/dsa/tag_ksz.c | 5 ++
6 files changed, 190 insertions(+)
--
2.20.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 1/4] net: dsa: Extend the ksz_device structure to hold info about HSR ports
2023-08-31 11:18 [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Lukasz Majewski
@ 2023-08-31 11:18 ` Lukasz Majewski
2023-08-31 11:18 ` [PATCH v2 2/4] net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication Lukasz Majewski
` (4 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: Lukasz Majewski @ 2023-08-31 11:18 UTC (permalink / raw)
To: Eric Dumazet, Andrew Lunn, davem, Paolo Abeni, Woojung Huh,
Vladimir Oltean
Cc: Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel,
Lukasz Majewski
Information about HSR aware ports in a DSA switch can be helpful when
one needs tags to be adjusted before the HSR frame is sent.
For example - with ksz9477 switch - the TAG needs to be adjusted to have
both HSR ports marked in tag to allow execution of HW based frame
duplication.
Signed-off-by: Lukasz Majewski <lukma@denx.de>
---
Changes for v2:
- Use struct ksz_device to store hsr_ports variable
---
drivers/net/dsa/microchip/ksz_common.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/microchip/ksz_common.h
index a4de58847dea..9fcafff0c01d 100644
--- a/drivers/net/dsa/microchip/ksz_common.h
+++ b/drivers/net/dsa/microchip/ksz_common.h
@@ -158,6 +158,9 @@ struct ksz_device {
bool synclko_125;
bool synclko_disable;
+ /* Bitmask indicating ports supporting HSR */
+ u16 hsr_ports;
+
struct vlan_table *vlan_cache;
struct ksz_port *ports;
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 2/4] net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication
2023-08-31 11:18 [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Lukasz Majewski
2023-08-31 11:18 ` [PATCH v2 1/4] net: dsa: Extend the ksz_device structure to hold info about HSR ports Lukasz Majewski
@ 2023-08-31 11:18 ` Lukasz Majewski
2023-09-01 3:18 ` kernel test robot
2023-09-01 4:02 ` kernel test robot
2023-08-31 11:18 ` [PATCH v2 3/4] net: dsa: hsr: Enable in KSZ9477 switch HW HSR offloading Lukasz Majewski
` (3 subsequent siblings)
5 siblings, 2 replies; 13+ messages in thread
From: Lukasz Majewski @ 2023-08-31 11:18 UTC (permalink / raw)
To: Eric Dumazet, Andrew Lunn, davem, Paolo Abeni, Woojung Huh,
Vladimir Oltean
Cc: Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel,
Lukasz Majewski
The KSZ9477 has support for HSR (High-Availability Seamless Redundancy).
One of its offloading (i.e. performed in the switch IC hardware) features
is to duplicate received frame to both HSR aware switch ports.
To achieve this goal - the tail TAG needs to be modified. To be more
specific, both ports must be marked as destination (egress) ones.
Moreover, according to AN3474 application note, the lookup bit (10)
should not be set in the tail tag.
Last but not least - the NETIF_F_HW_HSR_DUP flag indicates that the device
supports HSR and assures (in HSR core code) that frame is sent only once
from HOST to switch with tail tag indicating both ports.
Information about bits to be set in tag is provided via KSZ generic
ksz_hsr_get_ports() function.
Signed-off-by: Lukasz Majewski <lukma@denx.de>
---
- Use ksz_hsr_get_ports() to obtain the bits values corresponding to
HSR aware ports
---
drivers/net/dsa/microchip/ksz_common.c | 12 ++++++++++++
include/linux/dsa/ksz_common.h | 1 +
net/dsa/tag_ksz.c | 5 +++++
3 files changed, 18 insertions(+)
diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index d9d843efd111..579fde54d1e1 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -3421,6 +3421,18 @@ static int ksz_setup_tc(struct dsa_switch *ds, int port,
}
}
+u16 ksz_hsr_get_ports(struct dsa_switch *ds)
+{
+ struct ksz_device *dev = ds->priv;
+
+ switch (dev->chip_id) {
+ case KSZ9477_CHIP_ID:
+ return dev->hsr_ports;
+ }
+
+ return 0;
+}
+
static const struct dsa_switch_ops ksz_switch_ops = {
.get_tag_protocol = ksz_get_tag_protocol,
.connect_tag_protocol = ksz_connect_tag_protocol,
diff --git a/include/linux/dsa/ksz_common.h b/include/linux/dsa/ksz_common.h
index 576a99ca698d..fa3d9b0f3a72 100644
--- a/include/linux/dsa/ksz_common.h
+++ b/include/linux/dsa/ksz_common.h
@@ -50,4 +50,5 @@ ksz_tagger_data(struct dsa_switch *ds)
return ds->tagger_data;
}
+u16 ksz_hsr_get_ports(struct dsa_switch *ds);
#endif /* _NET_DSA_KSZ_COMMON_H_ */
diff --git a/net/dsa/tag_ksz.c b/net/dsa/tag_ksz.c
index ea100bd25939..903db95c37ee 100644
--- a/net/dsa/tag_ksz.c
+++ b/net/dsa/tag_ksz.c
@@ -293,6 +293,11 @@ static struct sk_buff *ksz9477_xmit(struct sk_buff *skb,
if (is_link_local_ether_addr(hdr->h_dest))
val |= KSZ9477_TAIL_TAG_OVERRIDE;
+ if (dev->features & NETIF_F_HW_HSR_DUP) {
+ val &= ~KSZ9477_TAIL_TAG_LOOKUP;
+ val |= ksz_hsr_get_ports(dp->ds);
+ }
+
*tag = cpu_to_be16(val);
return ksz_defer_xmit(dp, skb);
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 3/4] net: dsa: hsr: Enable in KSZ9477 switch HW HSR offloading
2023-08-31 11:18 [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Lukasz Majewski
2023-08-31 11:18 ` [PATCH v2 1/4] net: dsa: Extend the ksz_device structure to hold info about HSR ports Lukasz Majewski
2023-08-31 11:18 ` [PATCH v2 2/4] net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication Lukasz Majewski
@ 2023-08-31 11:18 ` Lukasz Majewski
2023-09-03 17:17 ` Andrew Lunn
2023-08-31 11:18 ` [PATCH v2 4/4] net: dsa: hsr: Provide generic HSR ksz_hsr_{join|leave} functions Lukasz Majewski
` (2 subsequent siblings)
5 siblings, 1 reply; 13+ messages in thread
From: Lukasz Majewski @ 2023-08-31 11:18 UTC (permalink / raw)
To: Eric Dumazet, Andrew Lunn, davem, Paolo Abeni, Woojung Huh,
Vladimir Oltean
Cc: Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel,
Lukasz Majewski
This patch adds functions for providing in KSZ9477 switch HSR
(High-availability Seamless Redundancy) hardware offloading.
According to AN3474 application note following features are provided:
- TX packet duplication from host to switch (NETIF_F_HW_HSR_DUP)
- RX packet duplication discarding
- Prevention of packet loop
For last two ones - there is a probability that some packets will not
be filtered in HW (in some special cases). Hence, the HSR core code
shall be used to discard those not caught frames.
Moreover, some switch registers adjustments are required - like setting
MAC address of HSR network interface.
Signed-off-by: Lukasz Majewski <lukma@denx.de>
---
Changes for v2:
- Use struct ksz_device to store hsr ports information (not struct dsa)
---
drivers/net/dsa/microchip/ksz9477.c | 96 +++++++++++++++++++++++++++++
drivers/net/dsa/microchip/ksz9477.h | 4 ++
2 files changed, 100 insertions(+)
diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c
index 83b7f2d5c1ea..c446eb44ead7 100644
--- a/drivers/net/dsa/microchip/ksz9477.c
+++ b/drivers/net/dsa/microchip/ksz9477.c
@@ -1141,6 +1141,102 @@ int ksz9477_tc_cbs_set_cinc(struct ksz_device *dev, int port, u32 val)
return ksz_pwrite16(dev, port, REG_PORT_MTI_CREDIT_INCREMENT, val);
}
+/* The KSZ9477 provides following HW features to accelerate
+ * HSR frames handling:
+ *
+ * 1. TX PACKET DUPLICATION FROM HOST TO SWITCH
+ * 2. RX PACKET DUPLICATION DISCARDING
+ * 3. PREVENTING PACKET LOOP IN THE RING BY SELF-ADDRESS FILTERING
+ *
+ * Only one from point 1. has the NETIF_F* flag available.
+ *
+ * Ones from point 2 and 3 are "best effort" - i.e. those will
+ * work correctly most of the time, but it may happen that some
+ * frames will not be caught. Hence, the SW needs to handle those
+ * special cases. However, the speed up gain is considerable when
+ * above features are used.
+ */
+#define KSZ9477_SUPPORTED_HSR_FEATURES NETIF_F_HW_HSR_DUP
+
+int ksz9477_hsr_join(struct dsa_switch *ds, int port, struct net_device *hsr,
+ struct dsa_port *partner)
+{
+ struct ksz_device *dev = ds->priv;
+ struct net_device *slave;
+ u8 i, data;
+ int ret;
+
+ /* Program which ports shall support HSR */
+ dev->hsr_ports = BIT(port) | BIT(partner->index);
+ ksz_write32(dev, REG_HSR_PORT_MAP__4, dev->hsr_ports);
+
+ /* Enable discarding of received HSR frames */
+ ksz_read8(dev, REG_HSR_ALU_CTRL_0__1, &data);
+ data |= HSR_DUPLICATE_DISCARD;
+ data &= ~HSR_NODE_UNICAST;
+ ksz_write8(dev, REG_HSR_ALU_CTRL_0__1, data);
+
+ /* Self MAC address filtering for HSR frames to avoid
+ * traverse of the HSR ring more than once.
+ *
+ * The HSR port (i.e. hsr0) MAC address is used.
+ */
+ if (!is_valid_ether_addr(hsr->dev_addr)) {
+ dev_err(dev->dev,
+ "Set valid MAC address to %s for HSR operation!",
+ hsr->name);
+ return -EINVAL;
+ }
+
+ for (i = 0; i < ETH_ALEN; i++) {
+ ret = ksz_write8(dev, REG_SW_MAC_ADDR_0 + i, hsr->dev_addr[i]);
+ if (ret)
+ return ret;
+ }
+
+ /* Enable global self-address filtering if not yet done during switch
+ * start
+ */
+ ksz_read8(dev, REG_SW_LUE_CTRL_1, &data);
+ if (!(data & SW_SRC_ADDR_FILTER)) {
+ data |= SW_SRC_ADDR_FILTER;
+ ksz_write8(dev, REG_SW_LUE_CTRL_1, data);
+ }
+
+ /* Enable per port self-address filtering */
+ ksz_port_cfg(dev, port, REG_PORT_LUE_CTRL, PORT_SRC_ADDR_FILTER, true);
+ ksz_port_cfg(dev, partner->index, REG_PORT_LUE_CTRL,
+ PORT_SRC_ADDR_FILTER, true);
+
+ /* Setup HW supported features for lan HSR ports */
+ slave = dsa_to_port(ds, port)->slave;
+ slave->features |= KSZ9477_SUPPORTED_HSR_FEATURES;
+
+ slave = dsa_to_port(ds, partner->index)->slave;
+ slave->features |= KSZ9477_SUPPORTED_HSR_FEATURES;
+
+ pr_debug("%s: HSR join port: %d partner: %d port_map: 0x%x\n", __func__,
+ port, partner->index, dev->hsr_ports);
+
+ return 0;
+}
+
+int ksz9477_hsr_leave(struct dsa_switch *ds, int port, struct net_device *hsr,
+ struct dsa_port *partner)
+{
+ struct ksz_device *dev = ds->priv;
+
+ /* Clear ports HSR support */
+ ksz_write32(dev, REG_HSR_PORT_MAP__4, 0);
+
+ /* Disable per port self-address filtering */
+ ksz_port_cfg(dev, port, REG_PORT_LUE_CTRL, PORT_SRC_ADDR_FILTER, false);
+ ksz_port_cfg(dev, partner->index, REG_PORT_LUE_CTRL,
+ PORT_SRC_ADDR_FILTER, false);
+
+ return 0;
+}
+
int ksz9477_switch_init(struct ksz_device *dev)
{
u8 data8;
diff --git a/drivers/net/dsa/microchip/ksz9477.h b/drivers/net/dsa/microchip/ksz9477.h
index b6f7e3c46e3f..634262efb73c 100644
--- a/drivers/net/dsa/microchip/ksz9477.h
+++ b/drivers/net/dsa/microchip/ksz9477.h
@@ -58,5 +58,9 @@ int ksz9477_dsa_init(struct ksz_device *dev);
int ksz9477_switch_init(struct ksz_device *dev);
void ksz9477_switch_exit(struct ksz_device *dev);
void ksz9477_port_queue_split(struct ksz_device *dev, int port);
+int ksz9477_hsr_join(struct dsa_switch *ds, int port, struct net_device *hsr,
+ struct dsa_port *partner);
+int ksz9477_hsr_leave(struct dsa_switch *ds, int port, struct net_device *hsr,
+ struct dsa_port *partner);
#endif
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 4/4] net: dsa: hsr: Provide generic HSR ksz_hsr_{join|leave} functions
2023-08-31 11:18 [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Lukasz Majewski
` (2 preceding siblings ...)
2023-08-31 11:18 ` [PATCH v2 3/4] net: dsa: hsr: Enable in KSZ9477 switch HW HSR offloading Lukasz Majewski
@ 2023-08-31 11:18 ` Lukasz Majewski
2023-09-03 17:22 ` Andrew Lunn
2023-08-31 11:35 ` [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Paolo Abeni
2023-09-03 17:23 ` Andrew Lunn
5 siblings, 1 reply; 13+ messages in thread
From: Lukasz Majewski @ 2023-08-31 11:18 UTC (permalink / raw)
To: Eric Dumazet, Andrew Lunn, davem, Paolo Abeni, Woojung Huh,
Vladimir Oltean
Cc: Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel,
Lukasz Majewski
This patch provides the common KSZ (i.e. Microchip) DSA code with support
for HSR aware devices.
To be more specific - generic ksz_hsr_{join|leave} functions are provided,
now only supporting KSZ9477 IC.
Signed-off-by: Lukasz Majewski <lukma@denx.de>
---
Changes for v2:
- None
---
drivers/net/dsa/microchip/ksz_common.c | 69 ++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index 579fde54d1e1..853f9fe60758 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -16,6 +16,7 @@
#include <linux/etherdevice.h>
#include <linux/if_bridge.h>
#include <linux/if_vlan.h>
+#include <linux/if_hsr.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
#include <linux/of_mdio.h>
@@ -3433,6 +3434,72 @@ u16 ksz_hsr_get_ports(struct dsa_switch *ds)
return 0;
}
+static int ksz_hsr_join(struct dsa_switch *ds, int port, struct net_device *hsr)
+{
+ struct dsa_port *partner = NULL, *dp;
+ struct ksz_device *dev = ds->priv;
+ enum hsr_version ver;
+ int ret;
+
+ ret = hsr_get_version(hsr, &ver);
+ if (ret)
+ return ret;
+
+ switch (dev->chip_id) {
+ case KSZ9477_CHIP_ID:
+ if (ver == PRP_V1)
+ return -EOPNOTSUPP;
+ }
+
+ /* We can't enable redundancy on the switch until both
+ * redundant ports have signed up.
+ */
+ dsa_hsr_foreach_port(dp, ds, hsr) {
+ if (dp->index != port) {
+ partner = dp;
+ break;
+ }
+ }
+
+ if (!partner)
+ return 0;
+
+ switch (dev->chip_id) {
+ case KSZ9477_CHIP_ID:
+ return ksz9477_hsr_join(ds, port, hsr, partner);
+ default:
+ return -EOPNOTSUPP;
+ }
+
+ return 0;
+}
+
+static int ksz_hsr_leave(struct dsa_switch *ds, int port,
+ struct net_device *hsr)
+{
+ struct dsa_port *partner = NULL, *dp;
+ struct ksz_device *dev = ds->priv;
+
+ dsa_hsr_foreach_port(dp, ds, hsr) {
+ if (dp->index != port) {
+ partner = dp;
+ break;
+ }
+ }
+
+ if (!partner)
+ return 0;
+
+ switch (dev->chip_id) {
+ case KSZ9477_CHIP_ID:
+ return ksz9477_hsr_leave(ds, port, hsr, partner);
+ default:
+ return -EOPNOTSUPP;
+ }
+
+ return 0;
+}
+
static const struct dsa_switch_ops ksz_switch_ops = {
.get_tag_protocol = ksz_get_tag_protocol,
.connect_tag_protocol = ksz_connect_tag_protocol,
@@ -3452,6 +3519,8 @@ static const struct dsa_switch_ops ksz_switch_ops = {
.get_sset_count = ksz_sset_count,
.port_bridge_join = ksz_port_bridge_join,
.port_bridge_leave = ksz_port_bridge_leave,
+ .port_hsr_join = ksz_hsr_join,
+ .port_hsr_leave = ksz_hsr_leave,
.port_stp_state_set = ksz_port_stp_state_set,
.port_pre_bridge_flags = ksz_port_pre_bridge_flags,
.port_bridge_flags = ksz_port_bridge_flags,
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477
2023-08-31 11:18 [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Lukasz Majewski
` (3 preceding siblings ...)
2023-08-31 11:18 ` [PATCH v2 4/4] net: dsa: hsr: Provide generic HSR ksz_hsr_{join|leave} functions Lukasz Majewski
@ 2023-08-31 11:35 ` Paolo Abeni
2023-08-31 11:54 ` Lukasz Majewski
2023-09-03 17:23 ` Andrew Lunn
5 siblings, 1 reply; 13+ messages in thread
From: Paolo Abeni @ 2023-08-31 11:35 UTC (permalink / raw)
To: Lukasz Majewski, Eric Dumazet, Andrew Lunn, davem, Woojung Huh,
Vladimir Oltean
Cc: Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel
On Thu, 2023-08-31 at 13:18 +0200, Lukasz Majewski wrote:
> This patch series provides support for HSR HW offloading in KSZ9477
> switch IC.
>
> To test this feature:
> ip link add name hsr0 type hsr slave1 lan1 slave2 lan2 supervision 45 version 1
> ifconfig lan1 up;ifconfig lan2 up
> ifconfig hsr0 192.168.0.1 up
>
> To remove HSR network device:
> ip link del hsr0
>
> Test HW:
> Two KSZ9477-EVB boards with HSR ports set to "Port1" and "Port2".
>
> Performance SW used:
> nuttcp -S --nofork
> nuttcp -vv -T 60 -r 192.168.0.2
> nuttcp -vv -T 60 -t 192.168.0.2
>
> Code: v6.5-rc7 Linux repository
> Tested HSR v0 and v1
> Results:
> With KSZ9477 offloading support added: RX: 100 Mbps TX: 98 Mbps
> With no offloading RX: 63 Mbps TX: 63 Mbps
>
>
> Lukasz Majewski (4):
> net: dsa: Extend the ksz_device structure to hold info about HSR ports
> net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication
> net: dsa: hsr: Enable in KSZ9477 switch HW HSR offloading
> net: dsa: hsr: Provide generic HSR ksz_hsr_{join|leave} functions
>
> drivers/net/dsa/microchip/ksz9477.c | 96 ++++++++++++++++++++++++++
> drivers/net/dsa/microchip/ksz9477.h | 4 ++
> drivers/net/dsa/microchip/ksz_common.c | 81 ++++++++++++++++++++++
> drivers/net/dsa/microchip/ksz_common.h | 3 +
> include/linux/dsa/ksz_common.h | 1 +
> net/dsa/tag_ksz.c | 5 ++
> 6 files changed, 190 insertions(+)
>
I'm sorry, it looks like I was not clear previously.
---
## Form letter - net-next-closed
The merge window for v6.6 has begun and therefore net-next is closed
for new drivers, features, code refactoring and optimizations.
We are currently accepting bug fixes only.
Please repost when net-next reopens after Sept 11th.
RFC patches sent for review only are obviously welcome at any time.
See:
https://www.kernel.org/doc/html/next/process/maintainer-netdev.html#development-cycle
--
pw-bot: defer
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477
2023-08-31 11:35 ` [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Paolo Abeni
@ 2023-08-31 11:54 ` Lukasz Majewski
0 siblings, 0 replies; 13+ messages in thread
From: Lukasz Majewski @ 2023-08-31 11:54 UTC (permalink / raw)
To: Paolo Abeni
Cc: Eric Dumazet, Andrew Lunn, davem, Woojung Huh, Vladimir Oltean,
Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2684 bytes --]
Hi Paolo,
> On Thu, 2023-08-31 at 13:18 +0200, Lukasz Majewski wrote:
> > This patch series provides support for HSR HW offloading in KSZ9477
> > switch IC.
> >
> > To test this feature:
> > ip link add name hsr0 type hsr slave1 lan1 slave2 lan2 supervision
> > 45 version 1 ifconfig lan1 up;ifconfig lan2 up
> > ifconfig hsr0 192.168.0.1 up
> >
> > To remove HSR network device:
> > ip link del hsr0
> >
> > Test HW:
> > Two KSZ9477-EVB boards with HSR ports set to "Port1" and "Port2".
> >
> > Performance SW used:
> > nuttcp -S --nofork
> > nuttcp -vv -T 60 -r 192.168.0.2
> > nuttcp -vv -T 60 -t 192.168.0.2
> >
> > Code: v6.5-rc7 Linux repository
> > Tested HSR v0 and v1
> > Results:
> > With KSZ9477 offloading support added: RX: 100 Mbps TX: 98 Mbps
> > With no offloading RX: 63 Mbps TX: 63 Mbps
> >
> >
> > Lukasz Majewski (4):
> > net: dsa: Extend the ksz_device structure to hold info about HSR
> > ports net: dsa: Extend ksz9477 TAG setup to support HSR frames
> > duplication net: dsa: hsr: Enable in KSZ9477 switch HW HSR
> > offloading net: dsa: hsr: Provide generic HSR ksz_hsr_{join|leave}
> > functions
> >
> > drivers/net/dsa/microchip/ksz9477.c | 96
> > ++++++++++++++++++++++++++ drivers/net/dsa/microchip/ksz9477.h |
> > 4 ++ drivers/net/dsa/microchip/ksz_common.c | 81
> > ++++++++++++++++++++++ drivers/net/dsa/microchip/ksz_common.h | 3 +
> > include/linux/dsa/ksz_common.h | 1 +
> > net/dsa/tag_ksz.c | 5 ++
> > 6 files changed, 190 insertions(+)
> >
> I'm sorry, it looks like I was not clear previously.
> ---
> ## Form letter - net-next-closed
>
> The merge window for v6.6 has begun and therefore net-next is closed
> for new drivers, features, code refactoring and optimizations.
> We are currently accepting bug fixes only.
>
> Please repost when net-next reopens after Sept 11th.
>
This is in fact the RFC kind of patch, as you were the only one who
replied with feedback on it.
If possible - I would like to gain as much feedback as possible until
11.09, so this patch set could be applied then.
> RFC patches sent for review only are obviously welcome at any time.
>
Shall I send RFC again? Or is the above explanation enough to proceed
with review?
> See:
> https://www.kernel.org/doc/html/next/process/maintainer-netdev.html#development-cycle
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 2/4] net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication
2023-08-31 11:18 ` [PATCH v2 2/4] net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication Lukasz Majewski
@ 2023-09-01 3:18 ` kernel test robot
2023-09-01 4:02 ` kernel test robot
1 sibling, 0 replies; 13+ messages in thread
From: kernel test robot @ 2023-09-01 3:18 UTC (permalink / raw)
To: Lukasz Majewski, Eric Dumazet, Andrew Lunn, davem, Paolo Abeni,
Woojung Huh, Vladimir Oltean
Cc: oe-kbuild-all, Tristram.Ha, Florian Fainelli, Jakub Kicinski,
UNGLinuxDriver, George McCollister, Oleksij Rempel, netdev,
linux-kernel, Lukasz Majewski
Hi Lukasz,
kernel test robot noticed the following build errors:
[auto build test ERROR on v6.5]
[also build test ERROR on next-20230831]
[cannot apply to net-next/main net/main linus/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Lukasz-Majewski/net-dsa-Extend-the-ksz_device-structure-to-hold-info-about-HSR-ports/20230831-192012
base: v6.5
patch link: https://lore.kernel.org/r/20230831111827.548118-3-lukma%40denx.de
patch subject: [PATCH v2 2/4] net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication
config: csky-randconfig-r011-20230901 (https://download.01.org/0day-ci/archive/20230901/202309011105.2lJFeNbJ-lkp@intel.com/config)
compiler: csky-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230901/202309011105.2lJFeNbJ-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202309011105.2lJFeNbJ-lkp@intel.com/
All errors (new ones prefixed by >>, old ones prefixed by <<):
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/auxdisplay/charlcd.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/auxdisplay/hd44780_common.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/auxdisplay/line-display.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/phy/phy-am335x-control.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/phy/phy-am335x.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/host/ohci-exynos.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/host/xhci-pci-renesas.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/class/usbtmc.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/storage/uas.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/misc/ezusb.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/misc/isight_firmware.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/mon/usbmon.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/serial/ch341.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/serial/usb-serial-simple.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/usb/serial/symbolserial.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/i2c/busses/i2c-qup.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/media/tuners/tda9887.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/media/common/uvc.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/media/usb/dvb-usb/dvb-usb-dibusb-common.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/media/dvb-frontends/au8522_decoder.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/media/dvb-frontends/mb86a16.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/media/v4l2-core/v4l2-async.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/media/v4l2-core/v4l2-fwnode.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hwmon/corsair-cpro.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/watchdog/omap_wdt.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/watchdog/ts4800_wdt.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/leds/flash/leds-rt4505.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-a4tech.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-cherry.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-evision.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-kensington.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-lcpower.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-lenovo.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-maltron.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-mf.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-microsoft.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-ortek.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-pl.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-petalynx.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-primax.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-speedlink.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-steam.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-sunplus.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-gaff.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-tivo.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-twinhan.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-xinmo.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-zpff.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-zydacron.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-viewsonic.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/hid/hid-waltop.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/vhost/vringh.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/iio/adc/xilinx-ams.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/perf/arm-ccn.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/nvmem/nvmem-apple-efuses.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/nvmem/nvmem_brcm_nvram.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/fsi/fsi-master-ast-cf.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/fsi/fsi-scom.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/interconnect/imx/imx8mq-interconnect.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/interconnect/imx/imx8mn-interconnect.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/parport/parport.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/ata/sata_gemini.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/spmi/hisi-spmi-controller.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/atm/atmtcp.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/pcmcia/pcmcia_rsrc.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/rpmsg/rpmsg_char.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/core/dev_addr_lists_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/netlink/netlink_diag.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/esp4.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/xfrm/xfrm_user.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/tunnel6.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_ar9331.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_brcm.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_dsa.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_gswip.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_hellcreek.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_ksz.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_lan9303.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_mtk.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_none.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_ocelot.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_ocelot_8021q.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_qca.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_rtl4_a.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_rtl8_4.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_rzn1_a5psw.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_trailer.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/dsa/tag_xrs700x.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/packet/af_packet.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/packet/af_packet_diag.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/key/af_key.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/atm/atm.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/caif/caif.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/caif/chnl_net.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/caif/caif_socket.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/caif/caif_usb.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/ieee802154/ieee802154_socket.o
WARNING: modpost: missing MODULE_DESCRIPTION() in net/hsr/hsr.o
>> ERROR: modpost: "ksz_hsr_get_ports" [net/dsa/tag_ksz.ko] undefined!
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 2/4] net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication
2023-08-31 11:18 ` [PATCH v2 2/4] net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication Lukasz Majewski
2023-09-01 3:18 ` kernel test robot
@ 2023-09-01 4:02 ` kernel test robot
1 sibling, 0 replies; 13+ messages in thread
From: kernel test robot @ 2023-09-01 4:02 UTC (permalink / raw)
To: Lukasz Majewski, Eric Dumazet, Andrew Lunn, davem, Paolo Abeni,
Woojung Huh, Vladimir Oltean
Cc: oe-kbuild-all, Tristram.Ha, Florian Fainelli, Jakub Kicinski,
UNGLinuxDriver, George McCollister, Oleksij Rempel, netdev,
linux-kernel, Lukasz Majewski
Hi Lukasz,
kernel test robot noticed the following build errors:
[auto build test ERROR on v6.5]
[also build test ERROR on next-20230831]
[cannot apply to net-next/main net/main linus/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Lukasz-Majewski/net-dsa-Extend-the-ksz_device-structure-to-hold-info-about-HSR-ports/20230831-192012
base: v6.5
patch link: https://lore.kernel.org/r/20230831111827.548118-3-lukma%40denx.de
patch subject: [PATCH v2 2/4] net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication
config: openrisc-randconfig-r026-20230901 (https://download.01.org/0day-ci/archive/20230901/202309011123.BsWErQvO-lkp@intel.com/config)
compiler: or1k-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230901/202309011123.BsWErQvO-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202309011123.BsWErQvO-lkp@intel.com/
All errors (new ones prefixed by >>):
or1k-linux-ld: net/dsa/tag_ksz.o: in function `ksz9477_xmit':
>> net/dsa/tag_ksz.c:298:(.text+0xcf8): undefined reference to `ksz_hsr_get_ports'
net/dsa/tag_ksz.c:298:(.text+0xcf8): relocation truncated to fit: R_OR1K_INSN_REL_26 against undefined symbol `ksz_hsr_get_ports'
vim +298 net/dsa/tag_ksz.c
269
270 static struct sk_buff *ksz9477_xmit(struct sk_buff *skb,
271 struct net_device *dev)
272 {
273 u16 queue_mapping = skb_get_queue_mapping(skb);
274 u8 prio = netdev_txq_to_tc(dev, queue_mapping);
275 struct dsa_port *dp = dsa_slave_to_port(dev);
276 struct ethhdr *hdr;
277 __be16 *tag;
278 u16 val;
279
280 if (skb->ip_summed == CHECKSUM_PARTIAL && skb_checksum_help(skb))
281 return NULL;
282
283 /* Tag encoding */
284 ksz_xmit_timestamp(dp, skb);
285
286 tag = skb_put(skb, KSZ9477_INGRESS_TAG_LEN);
287 hdr = skb_eth_hdr(skb);
288
289 val = BIT(dp->index);
290
291 val |= FIELD_PREP(KSZ9477_TAIL_TAG_PRIO, prio);
292
293 if (is_link_local_ether_addr(hdr->h_dest))
294 val |= KSZ9477_TAIL_TAG_OVERRIDE;
295
296 if (dev->features & NETIF_F_HW_HSR_DUP) {
297 val &= ~KSZ9477_TAIL_TAG_LOOKUP;
> 298 val |= ksz_hsr_get_ports(dp->ds);
299 }
300
301 *tag = cpu_to_be16(val);
302
303 return ksz_defer_xmit(dp, skb);
304 }
305
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 3/4] net: dsa: hsr: Enable in KSZ9477 switch HW HSR offloading
2023-08-31 11:18 ` [PATCH v2 3/4] net: dsa: hsr: Enable in KSZ9477 switch HW HSR offloading Lukasz Majewski
@ 2023-09-03 17:17 ` Andrew Lunn
2023-09-04 11:39 ` Lukasz Majewski
0 siblings, 1 reply; 13+ messages in thread
From: Andrew Lunn @ 2023-09-03 17:17 UTC (permalink / raw)
To: Lukasz Majewski
Cc: Eric Dumazet, davem, Paolo Abeni, Woojung Huh, Vladimir Oltean,
Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel
> +int ksz9477_hsr_join(struct dsa_switch *ds, int port, struct net_device *hsr,
> + struct dsa_port *partner)
> +{
> + struct ksz_device *dev = ds->priv;
> + struct net_device *slave;
> + u8 i, data;
> + int ret;
> +
> + /* Program which ports shall support HSR */
> + dev->hsr_ports = BIT(port) | BIT(partner->index);
> + ksz_write32(dev, REG_HSR_PORT_MAP__4, dev->hsr_ports);
> +
> + /* Enable discarding of received HSR frames */
> + ksz_read8(dev, REG_HSR_ALU_CTRL_0__1, &data);
> + data |= HSR_DUPLICATE_DISCARD;
> + data &= ~HSR_NODE_UNICAST;
> + ksz_write8(dev, REG_HSR_ALU_CTRL_0__1, data);
> +
> + /* Self MAC address filtering for HSR frames to avoid
> + * traverse of the HSR ring more than once.
> + *
> + * The HSR port (i.e. hsr0) MAC address is used.
> + */
> + if (!is_valid_ether_addr(hsr->dev_addr)) {
> + dev_err(dev->dev,
> + "Set valid MAC address to %s for HSR operation!",
> + hsr->name);
> + return -EINVAL;
> + }
This seems like something which should be done at a higher level, not
per driver. Please check if there is an existing test, and if not, add
one in the HSR core.
Andrew
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 4/4] net: dsa: hsr: Provide generic HSR ksz_hsr_{join|leave} functions
2023-08-31 11:18 ` [PATCH v2 4/4] net: dsa: hsr: Provide generic HSR ksz_hsr_{join|leave} functions Lukasz Majewski
@ 2023-09-03 17:22 ` Andrew Lunn
0 siblings, 0 replies; 13+ messages in thread
From: Andrew Lunn @ 2023-09-03 17:22 UTC (permalink / raw)
To: Lukasz Majewski
Cc: Eric Dumazet, davem, Paolo Abeni, Woojung Huh, Vladimir Oltean,
Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel
> +static int ksz_hsr_join(struct dsa_switch *ds, int port, struct net_device *hsr)
> +{
> + struct dsa_port *partner = NULL, *dp;
> + struct ksz_device *dev = ds->priv;
> + enum hsr_version ver;
> + int ret;
> +
> + ret = hsr_get_version(hsr, &ver);
> + if (ret)
> + return ret;
> +
> + switch (dev->chip_id) {
> + case KSZ9477_CHIP_ID:
> + if (ver == PRP_V1)
> + return -EOPNOTSUPP;
This should probably check for versions which are support, and not
assume PRP_V42 is not added some time in the future, which would be
accepted here.
Andrew
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477
2023-08-31 11:18 [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Lukasz Majewski
` (4 preceding siblings ...)
2023-08-31 11:35 ` [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Paolo Abeni
@ 2023-09-03 17:23 ` Andrew Lunn
5 siblings, 0 replies; 13+ messages in thread
From: Andrew Lunn @ 2023-09-03 17:23 UTC (permalink / raw)
To: Lukasz Majewski
Cc: Eric Dumazet, davem, Paolo Abeni, Woojung Huh, Vladimir Oltean,
Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel
On Thu, Aug 31, 2023 at 01:18:23PM +0200, Lukasz Majewski wrote:
> This patch series provides support for HSR HW offloading in KSZ9477
> switch IC.
>
> To test this feature:
> ip link add name hsr0 type hsr slave1 lan1 slave2 lan2 supervision 45 version 1
> ifconfig lan1 up;ifconfig lan2 up
> ifconfig hsr0 192.168.0.1 up
nit pick: ifconfig is deprecated. ip link set lan1 up, etc...
Andrew
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 3/4] net: dsa: hsr: Enable in KSZ9477 switch HW HSR offloading
2023-09-03 17:17 ` Andrew Lunn
@ 2023-09-04 11:39 ` Lukasz Majewski
0 siblings, 0 replies; 13+ messages in thread
From: Lukasz Majewski @ 2023-09-04 11:39 UTC (permalink / raw)
To: Andrew Lunn
Cc: Eric Dumazet, davem, Paolo Abeni, Woojung Huh, Vladimir Oltean,
Tristram.Ha, Florian Fainelli, Jakub Kicinski, UNGLinuxDriver,
George McCollister, Oleksij Rempel, netdev, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1783 bytes --]
Hi Andrew,
> > +int ksz9477_hsr_join(struct dsa_switch *ds, int port, struct
> > net_device *hsr,
> > + struct dsa_port *partner)
> > +{
> > + struct ksz_device *dev = ds->priv;
> > + struct net_device *slave;
> > + u8 i, data;
> > + int ret;
> > +
> > + /* Program which ports shall support HSR */
> > + dev->hsr_ports = BIT(port) | BIT(partner->index);
> > + ksz_write32(dev, REG_HSR_PORT_MAP__4, dev->hsr_ports);
> > +
> > + /* Enable discarding of received HSR frames */
> > + ksz_read8(dev, REG_HSR_ALU_CTRL_0__1, &data);
> > + data |= HSR_DUPLICATE_DISCARD;
> > + data &= ~HSR_NODE_UNICAST;
> > + ksz_write8(dev, REG_HSR_ALU_CTRL_0__1, data);
> > +
> > + /* Self MAC address filtering for HSR frames to avoid
> > + * traverse of the HSR ring more than once.
> > + *
> > + * The HSR port (i.e. hsr0) MAC address is used.
> > + */
> > + if (!is_valid_ether_addr(hsr->dev_addr)) {
> > + dev_err(dev->dev,
> > + "Set valid MAC address to %s for HSR
> > operation!",
> > + hsr->name);
> > + return -EINVAL;
> > + }
>
> This seems like something which should be done at a higher level, not
> per driver. Please check if there is an existing test, and if not, add
> one in the HSR core.
Yes, your are right. This is caught earlier in the net stack code.
Especially, I was afraid, that one can use:
local-mac-address = [00 00 00 00 00 00]
but in this case is caught as well.
I will remove this check. Thanks for pointing this out.
>
> Andrew
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2023-09-04 11:40 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-31 11:18 [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Lukasz Majewski
2023-08-31 11:18 ` [PATCH v2 1/4] net: dsa: Extend the ksz_device structure to hold info about HSR ports Lukasz Majewski
2023-08-31 11:18 ` [PATCH v2 2/4] net: dsa: Extend ksz9477 TAG setup to support HSR frames duplication Lukasz Majewski
2023-09-01 3:18 ` kernel test robot
2023-09-01 4:02 ` kernel test robot
2023-08-31 11:18 ` [PATCH v2 3/4] net: dsa: hsr: Enable in KSZ9477 switch HW HSR offloading Lukasz Majewski
2023-09-03 17:17 ` Andrew Lunn
2023-09-04 11:39 ` Lukasz Majewski
2023-08-31 11:18 ` [PATCH v2 4/4] net: dsa: hsr: Provide generic HSR ksz_hsr_{join|leave} functions Lukasz Majewski
2023-09-03 17:22 ` Andrew Lunn
2023-08-31 11:35 ` [PATCH v2 0/4] net: dsa: hsr: Enable HSR HW offloading for KSZ9477 Paolo Abeni
2023-08-31 11:54 ` Lukasz Majewski
2023-09-03 17:23 ` Andrew Lunn
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).