Thread (16 messages) flat view 16 messages, 5 authors, 2021-09-24

Re: [PATCH net-next v2 3/3] tsnep: Add TSN endpoint Ethernet MAC driver

From: Gerhard Engleder <hidden>
Date: 2021-09-03 20:14:39
Also in: linux-devicetree

quoted
The TSN endpoint Ethernet MAC is a FPGA based network device for
real-time communication.

It is integrated as Ethernet controller with ethtool and PTP support.
For real-time communcation TC_SETUP_QDISC_TAPRIO is supported.

Signed-off-by: Gerhard Engleder <redacted>
---
[...]
quoted
+static int tsnep_netdev_open(struct net_device *netdev)
+{
+     struct tsnep_adapter *adapter = netdev_priv(netdev);
+     void *addr;
+     int i;
+     int retval;
+
+     retval = tsnep_phy_open(adapter);
+     if (retval)
+             return retval;
+
+     for (i = 0; i < adapter->num_tx_queues; i++) {
+             addr = adapter->addr + TSNEP_QUEUE(i);
+             retval = tsnep_tx_open(adapter, &adapter->tx[i], addr);
+             if (retval)
+                     goto tx_failed;
+     }
+     retval = netif_set_real_num_tx_queues(adapter->netdev,
+                                           adapter->num_tx_queues);
+     if (retval)
+             goto tx_failed;
+     for (i = 0; i < adapter->num_rx_queues; i++) {
+             addr = adapter->addr + TSNEP_QUEUE(i);
+             retval = tsnep_rx_open(adapter, &adapter->rx[i], addr);
+             if (retval)
+                     goto rx_failed;
+     }
+     retval = netif_set_real_num_rx_queues(adapter->netdev,
+                                           adapter->num_rx_queues);
+     if (retval)
+             goto rx_failed;
+
+     netif_napi_add(adapter->netdev, &adapter->napi, tsnep_rx_napi_poll, 64);
I know that you only have support for 1 queue for now. But having
"tx[0]" and "rx[0]" hardcoded in tsnep_rx_napi_poll() seems less than
ideal if you want to support more queues in the future.

And I think that moving 'struct napi_struct' to be closer to the queues
now will help make that future transition to multiqueue to be cleaner.
You are right, I will try to make it more multiqueue aware for future
transition.
quoted
+void tsnep_ethtool_self_test(struct net_device *netdev,
+                          struct ethtool_test *eth_test, u64 *data)
+{
+     struct tsnep_adapter *adapter = netdev_priv(netdev);
+
+     eth_test->len = TSNEP_TEST_COUNT;
+
+     if (eth_test->flags != ETH_TEST_FL_OFFLINE) {
+             /* no tests are done online */
+             data[TSNEP_TEST_ENABLE] = 0;
+             data[TSNEP_TEST_TAPRIO] = 0;
+             data[TSNEP_TEST_TAPRIO_CHANGE] = 0;
+             data[TSNEP_TEST_TAPRIO_EXTENSION] = 0;
+
+             return;
+     }
+
+     if (tsnep_test_gc_enable(adapter)) {
+             data[TSNEP_TEST_ENABLE] = 0;
+     } else {
+             eth_test->flags |= ETH_TEST_FL_FAILED;
+             data[TSNEP_TEST_ENABLE] = 1;
+     }
+
+     if (tsnep_test_taprio(adapter)) {
+             data[TSNEP_TEST_TAPRIO] = 0;
+     } else {
+             eth_test->flags |= ETH_TEST_FL_FAILED;
+             data[TSNEP_TEST_TAPRIO] = 1;
+     }
+
+     if (tsnep_test_taprio_change(adapter)) {
+             data[TSNEP_TEST_TAPRIO_CHANGE] = 0;
+     } else {
+             eth_test->flags |= ETH_TEST_FL_FAILED;
+             data[TSNEP_TEST_TAPRIO_CHANGE] = 1;
+     }
+
+     if (tsnep_test_taprio_extension(adapter)) {
+             data[TSNEP_TEST_TAPRIO_EXTENSION] = 0;
+     } else {
+             eth_test->flags |= ETH_TEST_FL_FAILED;
+             data[TSNEP_TEST_TAPRIO_EXTENSION] = 1;
+     }
+}
I liked these tests :-)
Thank you! TAPRIO/IEEE802.1Qbv support was challenging for me and these
tests helped me a lot. My goal was hardware support reduced to the minimum
and error prone calculation/switching stuff done by software.

Gerhard
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help