mbox series

[v3,0/8] Hirschmann Hellcreek DSA driver

Message ID 20200820081118.10105-1-kurt@linutronix.de
Headers show
Series Hirschmann Hellcreek DSA driver | expand

Message

Kurt Kanzenbach Aug. 20, 2020, 8:11 a.m. UTC
Hi,

this series adds a DSA driver for the Hirschmann Hellcreek TSN switch
IP. Characteristics of that IP:

 * Full duplex Ethernet interface at 100/1000 Mbps on three ports
 * IEEE 802.1Q-compliant Ethernet Switch
 * IEEE 802.1Qbv Time-Aware scheduling support
 * IEEE 1588 and IEEE 802.1AS support

That IP is used e.g. in

 https://www.arrow.com/en/campaigns/arrow-kairos

Due to the hardware setup the switch driver is implemented using DSA. A special
tagging protocol is leveraged. Furthermore, this driver supports PTP, hardware
timestamping and TAPRIO offloading.

This work is part of the AccessTSN project: https://www.accesstsn.com/

The previous versions can be found here:

 * https://lkml.kernel.org/netdev/20200618064029.32168-1-kurt@linutronix.de/
 * https://lkml.kernel.org/netdev/20200710113611.3398-1-kurt@linutronix.de/
 * https://lkml.kernel.org/netdev/20200723081714.16005-1-kurt@linutronix.de/

Changes since v2:

 * Make it compile by getting all requirements merged first (Jakub Kicinski, David Miller)
 * Use "tsn" for TSN register set (Rob Herring)
 * Fix DT binding issues (Rob Herring)

Changes since v1:

 * Code simplifications (Florian Fainelli, Vladimir Oltean)
 * Fix issues with hellcreek.yaml bindings (Florian Fainelli)
 * Clear reserved field in ptp v2 event messages (Richard Cochran)
 * Make use of generic ptp parsing function (Richard Cochran, Vladimir Oltean)
 * Fix Kconfig (Florian Fainelli)
 * Add tags (Florian Fainelli, Rob Herring, Richard Cochran) 

Changes since RFC ordered by reviewers:

 * Andrew Lunn
   * Use dev_dbg for debug messages
   * Get rid of __ function names where possible
   * Use reverse xmas tree variable ordering
   * Remove redundant/useless checks
   * Improve comments e.g. for PTP
   * Fix Kconfig ordering
   * Make LED handling more generic and provide info via DT
   * Setup advertisement of PHYs according to hardware
   * Drop debugfs patch
 * Jakub Kicinski
   * Fix compiler warnings
 * Florian Fainelli
   * Switch to YAML DT bindings
 * Richard Cochran
   * Fix typo
   * Add missing NULL checks

Kamil Alkhouri (2):
  net: dsa: hellcreek: Add PTP clock support
  net: dsa: hellcreek: Add support for hardware timestamping

Kurt Kanzenbach (6):
  net: dsa: Add tag handling for Hirschmann Hellcreek switches
  net: dsa: Add DSA driver for Hirschmann Hellcreek switches
  net: dsa: hellcreek: Add TAPRIO offloading support
  net: dsa: hellcreek: Add PTP status LEDs
  dt-bindings: Add vendor prefix for Hirschmann
  dt-bindings: net: dsa: Add documentation for Hellcreek switches

 .../bindings/net/dsa/hellcreek.yaml           |  125 ++
 .../devicetree/bindings/vendor-prefixes.yaml  |    2 +
 drivers/net/dsa/Kconfig                       |    2 +
 drivers/net/dsa/Makefile                      |    1 +
 drivers/net/dsa/hirschmann/Kconfig            |    9 +
 drivers/net/dsa/hirschmann/Makefile           |    5 +
 drivers/net/dsa/hirschmann/hellcreek.c        | 1551 +++++++++++++++++
 drivers/net/dsa/hirschmann/hellcreek.h        |  301 ++++
 .../net/dsa/hirschmann/hellcreek_hwtstamp.c   |  479 +++++
 .../net/dsa/hirschmann/hellcreek_hwtstamp.h   |   58 +
 drivers/net/dsa/hirschmann/hellcreek_ptp.c    |  452 +++++
 drivers/net/dsa/hirschmann/hellcreek_ptp.h    |   76 +
 include/net/dsa.h                             |    2 +
 net/dsa/Kconfig                               |    6 +
 net/dsa/Makefile                              |    1 +
 net/dsa/tag_hellcreek.c                       |  101 ++
 16 files changed, 3171 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/net/dsa/hellcreek.yaml
 create mode 100644 drivers/net/dsa/hirschmann/Kconfig
 create mode 100644 drivers/net/dsa/hirschmann/Makefile
 create mode 100644 drivers/net/dsa/hirschmann/hellcreek.c
 create mode 100644 drivers/net/dsa/hirschmann/hellcreek.h
 create mode 100644 drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
 create mode 100644 drivers/net/dsa/hirschmann/hellcreek_hwtstamp.h
 create mode 100644 drivers/net/dsa/hirschmann/hellcreek_ptp.c
 create mode 100644 drivers/net/dsa/hirschmann/hellcreek_ptp.h
 create mode 100644 net/dsa/tag_hellcreek.c

Comments

Jakub Kicinski Aug. 24, 2020, 9:31 p.m. UTC | #1
On Thu, 20 Aug 2020 10:11:10 +0200 Kurt Kanzenbach wrote:
> this series adds a DSA driver for the Hirschmann Hellcreek TSN switch
> IP. Characteristics of that IP:
> 
>  * Full duplex Ethernet interface at 100/1000 Mbps on three ports
>  * IEEE 802.1Q-compliant Ethernet Switch
>  * IEEE 802.1Qbv Time-Aware scheduling support
>  * IEEE 1588 and IEEE 802.1AS support

I don't see anything worth complaining about here, but this is not my
area of expertise.. 

DSA and TAPRIO folks - does this look good to you?
Vladimir Oltean Aug. 24, 2020, 10:02 p.m. UTC | #2
On Mon, Aug 24, 2020 at 02:31:10PM -0700, Jakub Kicinski wrote:
> On Thu, 20 Aug 2020 10:11:10 +0200 Kurt Kanzenbach wrote:
> > this series adds a DSA driver for the Hirschmann Hellcreek TSN switch
> > IP. Characteristics of that IP:
> > 
> >  * Full duplex Ethernet interface at 100/1000 Mbps on three ports
> >  * IEEE 802.1Q-compliant Ethernet Switch
> >  * IEEE 802.1Qbv Time-Aware scheduling support
> >  * IEEE 1588 and IEEE 802.1AS support
> 
> I don't see anything worth complaining about here, but this is not my
> area of expertise.. 
> 
> DSA and TAPRIO folks - does this look good to you?

Just my comment on patch 5/8 about netdev->tc_to_txq. There are 2
distinct things about that:
- accessing struct net_device directly hurts the DSA model a little bit.
- I think there's some confusion regarding the use of netdev->tc_to_txq
  itself. I don't think that's the right place to setup a VLAN PCP to
  traffic class mapping. That's simply "what traffic class does each
  netdev queue have". I would even go as far as say that Linux doesn't
  support a VLAN PCP to TC mapping (similar to the DSCP to TC mapping
  from the DCB ops) at all, except for the ingress-qos-map and
  egress-qos-map of the 8021q driver, which can't be offloaded and don't
  map nicely over existing hardware anyway (what hardware has an
  ingress-qos-map and an egress-qos-map per individual VLAN?!).
  Although I do really see the need for having a mapping between VLAN
  PCP and traffic class, I would suggest Kurt to not expose this through
  taprio/mqprio (hardcode the PCP mapping as 1-to-1 with TC, as other
  drivers do), and let's try to come up separately with an abstraction
  for that.

Thanks,
-Vladimir
David Miller Aug. 24, 2020, 10:35 p.m. UTC | #3
From: Vladimir Oltean <olteanv@gmail.com>
Date: Tue, 25 Aug 2020 01:02:03 +0300

> Just my comment on patch 5/8 about netdev->tc_to_txq. There are 2
> distinct things about that:
> - accessing struct net_device directly hurts the DSA model a little bit.
> - I think there's some confusion regarding the use of netdev->tc_to_txq
>   itself. I don't think that's the right place to setup a VLAN PCP to
>   traffic class mapping. That's simply "what traffic class does each
>   netdev queue have". I would even go as far as say that Linux doesn't
>   support a VLAN PCP to TC mapping (similar to the DSCP to TC mapping
>   from the DCB ops) at all, except for the ingress-qos-map and
>   egress-qos-map of the 8021q driver, which can't be offloaded and don't
>   map nicely over existing hardware anyway (what hardware has an
>   ingress-qos-map and an egress-qos-map per individual VLAN?!).
>   Although I do really see the need for having a mapping between VLAN
>   PCP and traffic class, I would suggest Kurt to not expose this through
>   taprio/mqprio (hardcode the PCP mapping as 1-to-1 with TC, as other
>   drivers do), and let's try to come up separately with an abstraction
>   for that.

Agreed, Kurt can you repost this series without the TAPRIO support for
now since it's controversial and needs more discussion and changes?

Thank you.
Vladimir Oltean Aug. 24, 2020, 10:57 p.m. UTC | #4
On Mon, Aug 24, 2020 at 03:35:18PM -0700, David Miller wrote:
> From: Vladimir Oltean <olteanv@gmail.com>
> Date: Tue, 25 Aug 2020 01:02:03 +0300
> 
> > Just my comment on patch 5/8 about netdev->tc_to_txq. There are 2
> > distinct things about that:
> > - accessing struct net_device directly hurts the DSA model a little bit.
> > - I think there's some confusion regarding the use of netdev->tc_to_txq
> >   itself. I don't think that's the right place to setup a VLAN PCP to
> >   traffic class mapping. That's simply "what traffic class does each
> >   netdev queue have". I would even go as far as say that Linux doesn't
> >   support a VLAN PCP to TC mapping (similar to the DSCP to TC mapping
> >   from the DCB ops) at all, except for the ingress-qos-map and
> >   egress-qos-map of the 8021q driver, which can't be offloaded and don't
> >   map nicely over existing hardware anyway (what hardware has an
> >   ingress-qos-map and an egress-qos-map per individual VLAN?!).
> >   Although I do really see the need for having a mapping between VLAN
> >   PCP and traffic class, I would suggest Kurt to not expose this through
> >   taprio/mqprio (hardcode the PCP mapping as 1-to-1 with TC, as other
> >   drivers do), and let's try to come up separately with an abstraction
> >   for that.
> 
> Agreed, Kurt can you repost this series without the TAPRIO support for
> now since it's controversial and needs more discussion and changes?
> 
> Thank you.

To be clear, the most important part of the taprio qdisc offload
(setting up the gate control list) does not need to be postponed. It's
just the VLAN PCP mapping that is a bit controversial.

Thanks,
-Vladimir
Kurt Kanzenbach Aug. 25, 2020, 11:21 a.m. UTC | #5
On Mon Aug 24 2020, David Miller wrote:
> Agreed, Kurt can you repost this series without the TAPRIO support for
> now since it's controversial and needs more discussion and changes?

OK. It seems like the TAPRIO implementation has to be discussed more and
it might be good to do that separately.

I'll replace the spinlocks (which were only introduced for the hrtimers)
with mutexes and post a sane version of the driver without the TAPRIO
support.

>
> Thank you.

Thanks,
Kurt
Florian Fainelli Aug. 25, 2020, 5:14 p.m. UTC | #6
On 8/25/2020 4:21 AM, Kurt Kanzenbach wrote:
> On Mon Aug 24 2020, David Miller wrote:
>> Agreed, Kurt can you repost this series without the TAPRIO support for
>> now since it's controversial and needs more discussion and changes?
> 
> OK. It seems like the TAPRIO implementation has to be discussed more and
> it might be good to do that separately.
> 
> I'll replace the spinlocks (which were only introduced for the hrtimers)
> with mutexes and post a sane version of the driver without the TAPRIO
> support.

Sounds great, thanks!