1. 06 11月, 2020 30 次提交
    • I
      net: phy: realtek: remove the use of .ack_interrupt() · 8b43357f
      Ioana Ciornei 提交于
      In preparation of removing the .ack_interrupt() callback, we must replace
      its occurrences (aka phy_clear_interrupt), from the 2 places where it is
      called from (phy_enable_interrupts and phy_disable_interrupts), with
      equivalent functionality.
      
      This means that clearing interrupts now becomes something that the PHY
      driver is responsible of doing, before enabling interrupts and after
      clearing them. Make this driver follow the new contract.
      
      Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
      Cc: Willy Liu <willy.liu@realtek.com>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      8b43357f
    • I
      net: phy: realtek: implement generic .handle_interrupt() callback · 03829163
      Ioana Ciornei 提交于
      In an attempt to actually support shared IRQs in phylib, we now move the
      responsibility of triggering the phylib state machine or just returning
      IRQ_NONE, based on the IRQ status register, to the PHY driver. Having
      3 different IRQ handling callbacks (.handle_interrupt(),
      .did_interrupt() and .ack_interrupt() ) is confusing so let the PHY
      driver implement directly an IRQ handler like any other device driver.
      Make this driver follow the new convention.
      
      Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
      Cc: Willy Liu <willy.liu@realtek.com>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      03829163
    • I
      net: phy: add genphy_handle_interrupt_no_ack() · 87de1f05
      Ioana Ciornei 提交于
      It seems there are cases where the interrupts are handled by another
      entity (ie an IRQ controller embedded inside the PHY) and do not need
      any other interraction from phylib. For this kind of PHYs, like the
      RTL8366RB, add the genphy_handle_interrupt_no_ack() function which just
      triggers the link state machine.
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      87de1f05
    • I
      net: phy: davicom: remove the use of .ack_interrupt() · 0d65cc18
      Ioana Ciornei 提交于
      In preparation of removing the .ack_interrupt() callback, we must replace
      its occurrences (aka phy_clear_interrupt), from the 2 places where it is
      called from (phy_enable_interrupts and phy_disable_interrupts), with
      equivalent functionality.
      
      This means that clearing interrupts now becomes something that the PHY
      driver is responsible of doing, before enabling interrupts and after
      clearing them. Make this driver follow the new contract.
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      0d65cc18
    • I
      net: phy: davicom: implement generic .handle_interrupt() calback · e954631c
      Ioana Ciornei 提交于
      In an attempt to actually support shared IRQs in phylib, we now move the
      responsibility of triggering the phylib state machine or just returning
      IRQ_NONE, based on the IRQ status register, to the PHY driver. Having
      3 different IRQ handling callbacks (.handle_interrupt(),
      .did_interrupt() and .ack_interrupt() ) is confusing so let the PHY
      driver implement directly an IRQ handler like any other device driver.
      Make this driver follow the new convention.
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      e954631c
    • I
      net: phy: cicada: remove the use of .ack_interrupt() · a758087f
      Ioana Ciornei 提交于
      In preparation of removing the .ack_interrupt() callback, we must replace
      its occurrences (aka phy_clear_interrupt), from the 2 places where it is
      called from (phy_enable_interrupts and phy_disable_interrupts), with
      equivalent functionality.
      
      This means that clearing interrupts now becomes something that the PHY
      driver is responsible of doing, before enabling interrupts and after
      clearing them. Make this driver follow the new contract.
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      a758087f
    • I
      net: phy: cicada: implement the generic .handle_interrupt() callback · e5d2b0b6
      Ioana Ciornei 提交于
      In an attempt to actually support shared IRQs in phylib, we now move the
      responsibility of triggering the phylib state machine or just returning
      IRQ_NONE, based on the IRQ status register, to the PHY driver. Having
      3 different IRQ handling callbacks (.handle_interrupt(),
      .did_interrupt() and .ack_interrupt() ) is confusing so let the PHY
      driver implement directly an IRQ handler like any other device driver.
      Make this driver follow the new convention.
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      e5d2b0b6
    • I
      net: phy: broadcom: remove use of ack_interrupt() · 15772e4d
      Ioana Ciornei 提交于
      In preparation of removing the .ack_interrupt() callback, we must replace
      its occurrences (aka phy_clear_interrupt), from the 2 places where it is
      called from (phy_enable_interrupts and phy_disable_interrupts), with
      equivalent functionality.
      
      This means that clearing interrupts now becomes something that the PHY
      driver is responsible of doing, before enabling interrupts and after
      clearing them. Make this driver follow the new contract.
      
      Cc: Michael Walle <michael@walle.cc>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      15772e4d
    • I
      net: phy: broadcom: implement generic .handle_interrupt() callback · 4567d5c3
      Ioana Ciornei 提交于
      In an attempt to actually support shared IRQs in phylib, we now move the
      responsibility of triggering the phylib state machine or just returning
      IRQ_NONE, based on the IRQ status register, to the PHY driver. Having
      3 different IRQ handling callbacks (.handle_interrupt(),
      .did_interrupt() and .ack_interrupt() ) is confusing so let the PHY
      driver implement directly an IRQ handler like any other device driver.
      Make this driver follow the new convention.
      
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Tested-by: NMichael Walle <michael@walle.cc>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      4567d5c3
    • I
      net: phy: aquantia: remove the use of .ack_interrupt() · e11ef96d
      Ioana Ciornei 提交于
      In preparation of removing the .ack_interrupt() callback, we must replace
      its occurrences (aka phy_clear_interrupt), from the 2 places where it is
      called from (phy_enable_interrupts and phy_disable_interrupts), with
      equivalent functionality.
      
      This means that clearing interrupts now becomes something that the PHY
      driver is responsible of doing, before enabling interrupts and after
      clearing them. Make this driver follow the new contract.
      
      Cc: Heiner Kallweit <hkallweit1@gmail.com>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      e11ef96d
    • I
      net: phy: aquantia: implement generic .handle_interrupt() callback · 6ab930df
      Ioana Ciornei 提交于
      In an attempt to actually support shared IRQs in phylib, we now move the
      responsibility of triggering the phylib state machine or just returning
      IRQ_NONE, based on the IRQ status register, to the PHY driver. Having
      3 different IRQ handling callbacks (.handle_interrupt(),
      .did_interrupt() and .ack_interrupt() ) is confusing so let the PHY
      driver implement directly an IRQ handler like any other device driver.
      Make this driver follow the new convention.
      
      Cc: Heiner Kallweit <hkallweit1@gmail.com>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      6ab930df
    • I
      net: phy: mscc: remove the use of .ack_interrupt() · 30446ae4
      Ioana Ciornei 提交于
      In preparation of removing the .ack_interrupt() callback, we must replace
      its occurrences (aka phy_clear_interrupt), from the 2 places where it is
      called from (phy_enable_interrupts and phy_disable_interrupts), with
      equivalent functionality.
      
      This means that clearing interrupts now becomes something that the PHY
      driver is responsible of doing, before enabling interrupts and after
      clearing them. Make this driver follow the new contract.
      
      Cc: Antoine Tenart <atenart@kernel.org>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Tested-by: Vladimir Oltean <olteanv@gmail.com> # VSC8514
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      30446ae4
    • I
      net: phy: mscc: implement generic .handle_interrupt() callback · 4008f373
      Ioana Ciornei 提交于
      In an attempt to actually support shared IRQs in phylib, we now move the
      responsibility of triggering the phylib state machine or just returning
      IRQ_NONE, based on the IRQ status register, to the PHY driver. Having
      3 different IRQ handling callbacks (.handle_interrupt(),
      .did_interrupt() and .ack_interrupt() ) is confusing so let the PHY
      driver implement directly an IRQ handler like any other device driver.
      Make this driver follow the new convention.
      
      Also, remove the .did_interrupt() callback since it's not anymore used.
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Tested-by: Vladimir Oltean <olteanv@gmail.com> # VSC8514
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      4008f373
    • I
      net: phy: mscc: use phy_trigger_machine() to notify link change · f2e90604
      Ioana Ciornei 提交于
      According to the comment describing the phy_mac_interrupt() function, it
      it intended to be used by MAC drivers which have noticed a link change
      thus its use in the mscc PHY driver is improper and, most probably, was
      added just because phy_trigger_machine() was not exported.
      Now that we have acces to trigger the link state machine, use directly
      the phy_trigger_machine() function to notify a link change detected by
      the PHY driver.
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Tested-by: NVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      f2e90604
    • I
      net: phy: at803x: remove the use of .ack_interrupt() · a3417885
      Ioana Ciornei 提交于
      In preparation of removing the .ack_interrupt() callback, we must replace
      its occurrences (aka phy_clear_interrupt), from the 2 places where it is
      called from (phy_enable_interrupts and phy_disable_interrupts), with
      equivalent functionality.
      
      This means that clearing interrupts now becomes something that the PHY
      driver is responsible of doing, before enabling interrupts and after
      clearing them. Make this driver follow the new contract.
      
      Cc: Oleksij Rempel <o.rempel@pengutronix.de>
      Cc: Michael Walle <michael@walle.cc>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Tested-by: NOleksij Rempel <o.rempel@pengutronix.de>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      a3417885
    • I
      net: phy: at803x: implement generic .handle_interrupt() callback · 29773097
      Ioana Ciornei 提交于
      In an attempt to actually support shared IRQs in phylib, we now move the
      responsibility of triggering the phylib state machine or just returning
      IRQ_NONE, based on the IRQ status register, to the PHY driver. Having
      3 different IRQ handling callbacks (.handle_interrupt(),
      .did_interrupt() and .ack_interrupt() ) is confusing so let the PHY
      driver implement directly an IRQ handler like any other device driver.
      Make this driver follow the new convention.
      
      Cc: Oleksij Rempel <o.rempel@pengutronix.de>
      Cc: Michael Walle <michael@walle.cc>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Tested-by: NOleksij Rempel <o.rempel@pengutronix.de>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      29773097
    • I
      net: phy: make .ack_interrupt() optional · 7b2d5908
      Ioana Ciornei 提交于
      As a first step into making phylib and all PHY drivers to actually
      have support for shared IRQs, make the .ack_interrupt() callback
      optional.
      
      After all drivers have been moved to implement the generic
      interrupt handle, the phy_drv_supports_irq() check will be
      changed again to only require the .handle_interrupts() callback.
      
      Cc: Alexandru Ardelean <alexandru.ardelean@analog.com>
      Cc: Andre Edich <andre.edich@microchip.com>
      Cc: Antoine Tenart <atenart@kernel.org>
      Cc: Baruch Siach <baruch@tkos.co.il>
      Cc: Christophe Leroy <christophe.leroy@c-s.fr>
      Cc: Dan Murphy <dmurphy@ti.com>
      Cc: Divya Koppera <Divya.Koppera@microchip.com>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Cc: Hauke Mehrtens <hauke@hauke-m.de>
      Cc: Heiner Kallweit <hkallweit1@gmail.com>
      Cc: Jerome Brunet <jbrunet@baylibre.com>
      Cc: Kavya Sree Kotagiri <kavyasree.kotagiri@microchip.com>
      Cc: Linus Walleij <linus.walleij@linaro.org>
      Cc: Marco Felsch <m.felsch@pengutronix.de>
      Cc: Marek Vasut <marex@denx.de>
      Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
      Cc: Mathias Kresin <dev@kresin.me>
      Cc: Maxim Kochetkov <fido_max@inbox.ru>
      Cc: Michael Walle <michael@walle.cc>
      Cc: Neil Armstrong <narmstrong@baylibre.com>
      Cc: Nisar Sayed <Nisar.Sayed@microchip.com>
      Cc: Oleksij Rempel <o.rempel@pengutronix.de>
      Cc: Philippe Schenker <philippe.schenker@toradex.com>
      Cc: Willy Liu <willy.liu@realtek.com>
      Cc: Yuiko Oshino <yuiko.oshino@microchip.com>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      7b2d5908
    • I
      net: phy: add a shutdown procedure · e2f016cf
      Ioana Ciornei 提交于
      In case of a board which uses a shared IRQ we can easily end up with an
      IRQ storm after a forced reboot.
      
      For example, a 'reboot -f' will trigger a call to the .shutdown()
      callbacks of all devices. Because phylib does not implement that hook,
      the PHY is not quiesced, thus it can very well leave its IRQ enabled.
      
      At the next boot, if that IRQ line is found asserted by the first PHY
      driver that uses it, but _before_ the driver that is _actually_ keeping
      the shared IRQ asserted is probed, the IRQ is not going to be
      acknowledged, thus it will keep being fired preventing the boot process
      of the kernel to continue. This is even worse when the second PHY driver
      is a module.
      
      To fix this, implement the .shutdown() callback and disable the
      interrupts if these are used.
      
      Note that we are still susceptible to IRQ storms if the previous kernel
      exited with a panic or if the bootloader left the shared IRQ active, but
      there is absolutely nothing we can do about these cases.
      
      Cc: Alexandru Ardelean <alexandru.ardelean@analog.com>
      Cc: Andre Edich <andre.edich@microchip.com>
      Cc: Antoine Tenart <atenart@kernel.org>
      Cc: Baruch Siach <baruch@tkos.co.il>
      Cc: Christophe Leroy <christophe.leroy@c-s.fr>
      Cc: Dan Murphy <dmurphy@ti.com>
      Cc: Divya Koppera <Divya.Koppera@microchip.com>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Cc: Hauke Mehrtens <hauke@hauke-m.de>
      Cc: Heiner Kallweit <hkallweit1@gmail.com>
      Cc: Jerome Brunet <jbrunet@baylibre.com>
      Cc: Kavya Sree Kotagiri <kavyasree.kotagiri@microchip.com>
      Cc: Linus Walleij <linus.walleij@linaro.org>
      Cc: Marco Felsch <m.felsch@pengutronix.de>
      Cc: Marek Vasut <marex@denx.de>
      Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
      Cc: Mathias Kresin <dev@kresin.me>
      Cc: Maxim Kochetkov <fido_max@inbox.ru>
      Cc: Michael Walle <michael@walle.cc>
      Cc: Neil Armstrong <narmstrong@baylibre.com>
      Cc: Nisar Sayed <Nisar.Sayed@microchip.com>
      Cc: Oleksij Rempel <o.rempel@pengutronix.de>
      Cc: Philippe Schenker <philippe.schenker@toradex.com>
      Cc: Willy Liu <willy.liu@realtek.com>
      Cc: Yuiko Oshino <yuiko.oshino@microchip.com>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      e2f016cf
    • I
      net: phy: export phy_error and phy_trigger_machine · 293e9a3d
      Ioana Ciornei 提交于
      These functions are currently used by phy_interrupt() to either signal
      an error condition or to trigger the link state machine. In an attempt
      to actually support shared PHY IRQs, export these two functions so that
      the actual PHY drivers can use them.
      
      Cc: Alexandru Ardelean <alexandru.ardelean@analog.com>
      Cc: Andre Edich <andre.edich@microchip.com>
      Cc: Antoine Tenart <atenart@kernel.org>
      Cc: Baruch Siach <baruch@tkos.co.il>
      Cc: Christophe Leroy <christophe.leroy@c-s.fr>
      Cc: Dan Murphy <dmurphy@ti.com>
      Cc: Divya Koppera <Divya.Koppera@microchip.com>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Cc: Hauke Mehrtens <hauke@hauke-m.de>
      Cc: Heiner Kallweit <hkallweit1@gmail.com>
      Cc: Jerome Brunet <jbrunet@baylibre.com>
      Cc: Kavya Sree Kotagiri <kavyasree.kotagiri@microchip.com>
      Cc: Linus Walleij <linus.walleij@linaro.org>
      Cc: Marco Felsch <m.felsch@pengutronix.de>
      Cc: Marek Vasut <marex@denx.de>
      Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
      Cc: Mathias Kresin <dev@kresin.me>
      Cc: Maxim Kochetkov <fido_max@inbox.ru>
      Cc: Michael Walle <michael@walle.cc>
      Cc: Neil Armstrong <narmstrong@baylibre.com>
      Cc: Nisar Sayed <Nisar.Sayed@microchip.com>
      Cc: Oleksij Rempel <o.rempel@pengutronix.de>
      Cc: Philippe Schenker <philippe.schenker@toradex.com>
      Cc: Willy Liu <willy.liu@realtek.com>
      Cc: Yuiko Oshino <yuiko.oshino@microchip.com>
      Signed-off-by: NIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      293e9a3d
    • X
      sctp: bring inet(6)_skb_parm back to sctp_input_cb · 0356010d
      Xin Long 提交于
      inet(6)_skb_parm was removed from sctp_input_cb by Commit a1dd2cf2
      ("sctp: allow changing transport encap_port by peer packets"), as it
      thought sctp_input_cb->header is not used any more in SCTP.
      
      syzbot reported a crash:
      
        [ ] BUG: KASAN: use-after-free in decode_session6+0xe7c/0x1580
        [ ]
        [ ] Call Trace:
        [ ]  <IRQ>
        [ ]  dump_stack+0x107/0x163
        [ ]  kasan_report.cold+0x1f/0x37
        [ ]  decode_session6+0xe7c/0x1580
        [ ]  __xfrm_policy_check+0x2fa/0x2850
        [ ]  sctp_rcv+0x12b0/0x2e30
        [ ]  sctp6_rcv+0x22/0x40
        [ ]  ip6_protocol_deliver_rcu+0x2e8/0x1680
        [ ]  ip6_input_finish+0x7f/0x160
        [ ]  ip6_input+0x9c/0xd0
        [ ]  ipv6_rcv+0x28e/0x3c0
      
      It was caused by sctp_input_cb->header/IP6CB(skb) still used in sctp rx
      path decode_session6() but some members overwritten by sctp6_rcv().
      
      This patch is to fix it by bring inet(6)_skb_parm back to sctp_input_cb
      and not overwriting it in sctp4/6_rcv() and sctp_udp_rcv().
      
      Reported-by: syzbot+5be8aebb1b7dfa90ef31@syzkaller.appspotmail.com
      Fixes: a1dd2cf2 ("sctp: allow changing transport encap_port by peer packets")
      Signed-off-by: NXin Long <lucien.xin@gmail.com>
      Acked-by: NMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
      Link: https://lore.kernel.org/r/136c1a7a419341487c504be6d1996928d9d16e02.1604472932.git.lucien.xin@gmail.comSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      0356010d
    • J
      Merge branch 'hirschmann-hellcreek-dsa-driver' · 67438feb
      Jakub Kicinski 提交于
      Kurt Kanzenbach says:
      
      ====================
      Hirschmann Hellcreek DSA driver
      
      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 and
      hardware timestamping.
      
      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/
       * https://lkml.kernel.org/netdev/20200820081118.10105-1-kurt@linutronix.de/
       * https://lkml.kernel.org/netdev/20200901125014.17801-1-kurt@linutronix.de/
       * https://lkml.kernel.org/netdev/20200904062739.3540-1-kurt@linutronix.de/
       * https://lkml.kernel.org/netdev/20201004112911.25085-1-kurt@linutronix.de/
       * https://lkml.kernel.org/netdev/20201028074221.29326-1-kurt@linutronix.de/
      
      Changes since v7:
      
       * Simplify tagging code (rebase to net-next)
       * Pass info instead of ptr (Florian Fainelli)
       * Fix yamllint warnings (Rob Herring)
      
      Changes since v6:
      
       * Add .tail_tag = true (Vladimir Oltean)
       * Fix vlan_filtering=0 bridges (Vladimir Oltean)
       * Enforce restrictions (Vladimir Oltean)
       * Sort stuff alphabetically (Vladimir Oltean)
       * Rename hellcreek.yaml to hirschmann,hellcreek.yaml
       * Typo fixes
      
      Changes since v5:
      
       * Implement configure_vlan_while_not_filtering behavior (Vladimir Oltean)
       * Minor cleanups
      
      Changes since v4:
      
       * Fix W=1 compiler warnings (kernel test robot)
       * Add tags
      
      Changes since v3:
      
       * Drop TAPRIO support (David Miller)
         => Switch to mutexes due to the lack of hrtimers
       * Use more specific compatible strings and add platform data (Andrew Lunn)
       * Fix Kconfig ordering (Andrew Lunn)
      
      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
      ====================
      
      Link: https://lore.kernel.org/r/20201103071101.3222-1-kurt@linutronix.deSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      67438feb
    • K
      dt-bindings: net: dsa: Add documentation for Hellcreek switches · d5d29d52
      Kurt Kanzenbach 提交于
      Add basic documentation and example.
      Signed-off-by: NKurt Kanzenbach <kurt@linutronix.de>
      Reviewed-by: NRob Herring <robh@kernel.org>
      Reviewed-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      d5d29d52
    • K
      dt-bindings: Add vendor prefix for Hirschmann · dcfb1a75
      Kurt Kanzenbach 提交于
      Hirschmann is building devices for automation and networking. Add them to the
      vendor prefixes.
      Signed-off-by: NKurt Kanzenbach <kurt@linutronix.de>
      Reviewed-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Acked-by: NRob Herring <robh@kernel.org>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      dcfb1a75
    • K
      net: dsa: hellcreek: Add PTP status LEDs · 7d9ee2e8
      Kurt Kanzenbach 提交于
      The switch has two controllable I/Os which are usually connected to LEDs. This
      is useful to immediately visually see the PTP status.
      
      These provide two signals:
      
       * is_gm
      
         This LED can be activated if the current device is the grand master in that
         PTP domain.
      
       * sync_good
      
         This LED can be activated if the current device is in sync with the network
         time.
      
      Expose these via the LED framework to be controlled via user space
      e.g. linuxptp.
      Signed-off-by: NKurt Kanzenbach <kurt@linutronix.de>
      Reviewed-by: NAndrew Lunn <andrew@lunn.ch>
      Reviewed-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      7d9ee2e8
    • K
      net: dsa: hellcreek: Add support for hardware timestamping · f0d4ba9e
      Kamil Alkhouri 提交于
      The switch has the ability to take hardware generated time stamps per port for
      PTPv2 event messages in Rx and Tx direction. That is useful for achieving needed
      time synchronization precision for TSN devices/switches. So add support for it.
      
      There are two directions:
      
       * RX
      
         The switch has a single register per port to capture a timestamp. That
         mechanism is not used due to correlation problems. If the software processing
         is too slow and a PTPv2 event message is received before the previous one has
         been processed, false timestamps will be captured. Therefore, the switch can
         do "inline" timestamping which means it can insert the nanoseconds part of
         the timestamp directly into the PTPv2 event message. The reserved field (4
         bytes) is leveraged for that. This might not be in accordance with (older)
         PTP standards, but is the only way to get reliable results.
      
       * TX
      
         In Tx direction there is no correlation problem, because the software and the
         driver has to ensure that only one event message is "on the fly". However,
         the switch provides also a mechanism to check whether a timestamp is
         lost. That can only happen when a timestamp is read and at this point another
         message is timestamped. So, that lost bit is checked just in case to indicate
         to the user that the driver or the software is somewhat buggy.
      Signed-off-by: NKamil Alkhouri <kamil.alkhouri@hs-offenburg.de>
      Signed-off-by: NKurt Kanzenbach <kurt@linutronix.de>
      Acked-by: NRichard Cochran <richardcochran@gmail.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      f0d4ba9e
    • K
      net: dsa: hellcreek: Add PTP clock support · ddd56dfe
      Kamil Alkhouri 提交于
      The switch has internal PTP hardware clocks. Add support for it. There are three
      clocks:
      
       * Synchronized
       * Syntonized
       * Free running
      
      Currently the synchronized clock is exported to user space which is a good
      default for the beginning. The free running clock might be exported later
      e.g. for implementing 802.1AS-2011/2020 Time Aware Bridges (TAB). The switch
      also supports cross time stamping for that purpose.
      
      The implementation adds support setting/getting the time as well as offset and
      frequency adjustments. However, the clock only holds a partial timeofday
      timestamp. This is why we track the seconds completely in software (see overflow
      work and last_ts).
      
      Furthermore, add the PTP multicast addresses into the FDB to forward that
      packages only to the CPU port where they are processed by a PTP program.
      Signed-off-by: NKamil Alkhouri <kamil.alkhouri@hs-offenburg.de>
      Signed-off-by: NKurt Kanzenbach <kurt@linutronix.de>
      Acked-by: NRichard Cochran <richardcochran@gmail.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      ddd56dfe
    • K
      net: dsa: Add DSA driver for Hirschmann Hellcreek switches · e4b27ebc
      Kurt Kanzenbach 提交于
      Add a basic DSA driver for Hirschmann Hellcreek switches. Those switches are
      implementing features needed for Time Sensitive Networking (TSN) such as support
      for the Time Precision Protocol and various shapers like the Time Aware Shaper.
      
      This driver includes basic support for networking:
      
       * VLAN handling
       * FDB handling
       * Port statistics
       * STP
       * Phylink
      Signed-off-by: NKurt Kanzenbach <kurt@linutronix.de>
      Reviewed-by: NVladimir Oltean <olteanv@gmail.com>
      Reviewed-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      e4b27ebc
    • V
      net: dsa: Give drivers the chance to veto certain upper devices · e358bef7
      Vladimir Oltean 提交于
      Some switches rely on unique pvids to ensure port separation in
      standalone mode, because they don't have a port forwarding matrix
      configurable in hardware. So, setups like a group of 2 uppers with the
      same VLAN, swp0.100 and swp1.100, will cause traffic tagged with VLAN
      100 to be autonomously forwarded between these switch ports, in spite
      of there being no bridge between swp0 and swp1.
      
      These drivers need to prevent this from happening. They need to have
      VLAN filtering enabled in standalone mode (so they'll drop frames tagged
      with unknown VLANs) and they can only accept an 8021q upper on a port as
      long as it isn't installed on any other port too. So give them the
      chance to veto bad user requests.
      Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
      [Kurt: Pass info instead of ptr]
      Signed-off-by: NKurt Kanzenbach <kurt@linutronix.de>
      Reviewed-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      e358bef7
    • K
      net: dsa: Add tag handling for Hirschmann Hellcreek switches · 01ef09ca
      Kurt Kanzenbach 提交于
      The Hirschmann Hellcreek TSN switches have a special tagging protocol for frames
      exchanged between the CPU port and the master interface. The format is a one
      byte trailer indicating the destination or origin port.
      
      It's quite similar to the Micrel KSZ tagging. That's why the implementation is
      based on that code.
      Signed-off-by: NKurt Kanzenbach <kurt@linutronix.de>
      Reviewed-by: NVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      01ef09ca
    • V
      net: sched: implement action-specific terse dump · 94f44f28
      Vlad Buslov 提交于
      Allow user to request action terse dump with new flag value
      TCA_FLAG_TERSE_DUMP. Only output essential action info in terse dump (kind,
      stats, index and cookie, if set by the user when creating the action). This
      is different from filter terse dump where index is excluded (filter can be
      identified by its own handle).
      
      Move tcf_action_dump_terse() function to the beginning of source file in
      order to call it from tcf_dump_walker().
      Signed-off-by: NVlad Buslov <vlad@buslov.dev>
      Suggested-by: NJamal Hadi Salim <jhs@mojatatu.com>
      Acked-by: NCong Wang <xiyou.wangcong@gmail.com>
      Link: https://lore.kernel.org/r/20201102201243.287486-1-vlad@buslov.devSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      94f44f28
  2. 05 11月, 2020 10 次提交