1. 02 Feb, 2024 19 commits
    • Kunwu Chan's avatar
      net: dccp: Simplify the allocation of slab caches in dccp_ackvec_init · 20ea9327
      Kunwu Chan authored
      Use the new KMEM_CACHE() macro instead of direct kmem_cache_create
      to simplify the creation of SLAB caches.
      Signed-off-by: default avatarKunwu Chan <chentao@kylinos.cn>
      Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      20ea9327
    • Ravi Gunasekaran's avatar
      dt-bindings: net: ti: Update maintainers list · 84f90efd
      Ravi Gunasekaran authored
      Update the list with the current maintainers of TI's CPSW ethernet
      peripheral.
      Signed-off-by: default avatarRavi Gunasekaran <r-gunasekaran@ti.com>
      Acked-by: default avatarRoger Quadros <rogerq@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      84f90efd
    • Kunwu Chan's avatar
      sctp: Simplify the allocation of slab caches · fa33b35f
      Kunwu Chan authored
      commit 0a31bd5f ("KMEM_CACHE(): simplify slab cache creation")
      introduces a new macro.
      Use the new KMEM_CACHE() macro instead of direct kmem_cache_create
      to simplify the creation of SLAB caches.
      Signed-off-by: default avatarKunwu Chan <chentao@kylinos.cn>
      Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
      Acked-by: default avatarXin Long <lucien.xin@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fa33b35f
    • David S. Miller's avatar
      Merge branch 'octeontx2-af-dynamically-allocate-BPIDs' · 49d703c8
      David S. Miller authored
      Geetha sowjanya says:
      
      ====================
      Dynamically allocate BPIDs for LBK
      
      In current driver 64 BPIDs are reserved for LBK interfaces.
      These bpids are 1-to-1 mapped to LBK interface channel numbers.
      In some usecases one LBK interface required more than one bpids
      and in some case they may not require at all. These usescas
      can't be address with the current implementation as it always
      reserves only one bpid per LBK channel.
      
      This patch addresses this issue by creating free bpid pool from
      these 64 bpids instead of 1-to-1 mapping to the lbk channel.
      Now based on usecase LBK interface can request a bpid using (bp_enable()).
      
      v1 -> v2:
         - Modified commit message.
         - Dropped patch2, as for now rvu netdev have no usecase. Will
           be upstream along with the CPT driver.
         - Addressed review comments by Simon Horman.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      49d703c8
    • Geetha sowjanya's avatar
      octeontx2-af: Cleanup loopback device checks · ae703539
      Geetha sowjanya authored
      PCI device IDs of RVU device IDs are configurable and
      RVU PF0's (ie AF's) are currently assumed as VFs that
      identify loopback functionality ie LBKVFs. But in some
      cases these VFs can be setup for different functionality.
      Hence remove assumptions that AF's VFs are always LBK VFs
      by renaming 'is_afvf' as 'is_lbkvf' explicitly and also
      identify LBK VF using PCI dev ID. Similar change is done
      for other VF types.
      Signed-off-by: default avatarGeetha sowjanya <gakula@marvell.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ae703539
    • Geetha sowjanya's avatar
      octeontx2-af: Create BPIDs free pool · d6212d2e
      Geetha sowjanya authored
      In current driver 64 BPIDs are reserved for LBK interfaces.
      These bpids are 1-to-1 mapped to LBK interface channel numbers.
      In some usecases one LBK interface required more than one
      bpids and in some case they may not require at all.
      These usescase can't be address with the current implementation
      as it always reserves only one bpid per LBK channel.
      This patch addresses this issue by creating free bpid pool from these
      64 bpids instead of 1-to-1 mapping to the lbk channel.
      Now based on usecase LBK interface can request a bpid using (bp_enable()).
      
      This patch also reduces the number of bpids for cgx interfaces to 8
      and adds proper error code
      Signed-off-by: default avatarGeetha sowjanya <gakula@marvell.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d6212d2e
    • Brad Cowie's avatar
      selftests: openvswitch: Test ICMP related matches work with SNAT · 094bdd48
      Brad Cowie authored
      Add a test case for regression in openvswitch nat that was fixed by
      commit e6345d28 ("netfilter: nf_nat: fix action not being set for
      all ct states").
      
      Link: https://lore.kernel.org/netdev/20231221224311.130319-1-brad@faucet.nz/
      Link: https://mail.openvswitch.org/pipermail/ovs-dev/2024-January/410476.htmlSuggested-by: default avatarAaron Conole <aconole@redhat.com>
      Signed-off-by: default avatarBrad Cowie <brad@faucet.nz>
      Tested-by: default avatarAaron Conole <aconole@redhat.com>
      Acked-by: default avatarAaron Conole <aconole@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      094bdd48
    • Alexander Stein's avatar
      net: phy: dp83867: Add support for active-low LEDs · 447b80a9
      Alexander Stein authored
      Add the led_polarity_set callback for setting LED polarity.
      Signed-off-by: default avatarAlexander Stein <alexander.stein@ew.tq-group.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      447b80a9
    • David S. Miller's avatar
      Merge branch 'net-ipq4019-rate' · 969337a4
      David S. Miller authored
      Christian Marangi says:
      
      ====================
      net: mdio-ipq4019: fix wrong default MDC rate
      
      This was a long journey to arrive and discover this problem.
      
      To not waste too much char, there is a race problem with PHY and driver
      probe. This was observed with Aquantia PHY firmware loading.
      
      With some hacks the race problem was workarounded but an interesting
      thing was notice. It took more than a minute for the firmware to load
      via MDIO.
      
      This was strange as the same operation was done by UBoot in at max 5
      second and the same data was loaded.
      
      A similar problem was observed on a mtk board that also had an
      Aquantia PHY where the load was very slow. It was notice that the cause
      was the MDIO bus running at a very low speed and the firmware
      was missing a property (present in mtk sdk) that set the right frequency
      to the MDIO bus.
      
      It was fun to find that THE VERY SAME PROBLEM is present on IPQ in a
      different form. The MDIO apply internally a division to the feed clock
      resulting in the bus running at 390KHz instead of 6.25Mhz.
      
      Searching around the web for some documentation and some include and
      analyzing the uboot codeflow resulted in the divider being set wrongly
      at /256 instead of /16 as the value was actually never set.
      Applying the value restore the original load time for the Aquantia PHY.
      
      This series mainly handle this by adding support for the "clock-frequency"
      property.
      
      Changes v3:
      - Add Reviewed-by tag
      - Fix english grammar error in comment
      - Drop DTS patch
      Changes v2:
      - Use DIV_ROUND_UP
      - Introduce logic to chose a default value for 802.3 spec 2.5MHz
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      969337a4
    • Christian Marangi's avatar
      net: mdio: ipq4019: add support for clock-frequency property · bdce82e9
      Christian Marangi authored
      The IPQ4019 MDIO internally divide the clock feed by AHB based on the
      MDIO_MODE reg. On reset or power up, the default value for the
      divider is 0xff that reflect the divider set to /256.
      
      This makes the MDC run at a very low rate, that is, considering AHB is
      always fixed to 100Mhz, a value of 390KHz.
      
      This hasn't have been a problem as MDIO wasn't used for time sensitive
      operation, it is now that on IPQ807x is usually mounted with PHY that
      requires MDIO to load their firmware (example Aquantia PHY).
      
      To handle this problem and permit to set the correct designed MDC
      frequency for the SoC add support for the standard "clock-frequency"
      property for the MDIO node.
      
      The divider supports value from /1 to /256 and the common value are to
      set it to /16 to reflect 6.25Mhz or to /8 on newer platform to reflect
      12.5Mhz.
      
      To scan if the requested rate is supported by the divider, loop with
      each supported divider and stop when the requested rate match the final
      rate with the current divider. An error is returned if the rate doesn't
      match any value.
      
      On MDIO reset, the divider is restored to the requested value to prevent
      any kind of downclocking caused by the divider reverting to a default
      value.
      
      To follow 802.3 spec of 2.5MHz of default value, if divider is set at
      /256 and "clock-frequency" is not set in DT, assume nobody set the
      divider and try to find the closest MDC rate to 2.5MHz. (in the case of
      AHB set to 100MHz, it's 1.5625MHz)
      
      While at is also document other bits of the MDIO_MODE reg to have a
      clear idea of what is actually applied there.
      
      Documentation of some BITs is skipped as they are marked as reserved and
      their usage is not clear (RES 11:9 GENPHY 16:13 RES1 19:17)
      Signed-off-by: default avatarChristian Marangi <ansuelsmth@gmail.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      bdce82e9
    • Christian Marangi's avatar
      dt-bindings: net: ipq4019-mdio: document now supported clock-frequency · 9484b955
      Christian Marangi authored
      Document support for clock-frequency and add details on why this
      property is needed and what values are supported.
      
      From internal documentation, while other values are supported, the
      correct function of the MDIO bus is not assured hence add only the
      suggested supported values to the property enum.
      Signed-off-by: default avatarChristian Marangi <ansuelsmth@gmail.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9484b955
    • Jakub Kicinski's avatar
      Merge branch 'net-ipa-simplify-tx-power-handling' · 747056a9
      Jakub Kicinski authored
      Alex Elder says:
      
      ====================
      net: ipa: simplify TX power handling
      
      In order to deliver a packet to the IPA hardware, we must ensure
      it is powered.  We request power by calling pm_runtime_get(), and
      its return value tells us the power state.  We can't block in
      ipa_start_xmit(), so if power isn't enabled we prevent further
      transmit attempts by calling netif_stop_queue().  Power will
      eventually become enabled, at which point we call netif_wake_queue()
      to allow the transmit to be retried.  When it does, the power should
      be enabled, so the packet delivery can proceed.
      
      The logic that handles this is convoluted, and was put in place
      to address a race condition pointed out by Jakub Kicinski during
      review.  The fix addressed that race, as well as another one that
      was found while investigating it:
        b8e36e13 ("net: ipa: fix TX queue race")
      I have wanted to simplify this code ever since, and I'm pleased to
      report that this series implements a much better solution that
      avoids both race conditions.
      
      The first race occurs between the ->ndo_start_xmit thread and the
      runtime resume thread.  If we find power is not enabled when
      requested in ipa_start_xmit(), we stop queueing.  But there's a
      chance the runtime resume will enable queuing just before that,
      leaving queueing stopped forever.  A flag is used to ensure that
      does not occur.
      
      A second flag is used to prevent NETDEV_TX_BUSY from being returned
      repeatedly during the small window between enabling queueing and
      finishing power resume.  This can happen if resume was underway when
      pm_runtime_get() was called and completes immediately afterward.
      This condition only exists because of the use of the first flag.
      
      The fix is to disable transmit for *every* call to ipa_start_xmit(),
      disabling it *before* calling pm_runtime_get().  This leaves three
      cases:
        - If the return value indicates power is not active (or is in
          transition), queueing remains disabled--thereby avoiding
          the race between disabling it and a concurrent power thread
          enabling it.
        - If pm_runtime_get() returns an error, we drop the packet and
          re-enable queueing.
        - Finally, if the hardware is powered, we re-enable queueing
          before delivering the packet to the hardware.
      
      So the first race is avoided.  And as a result, the second condition
      will not occur.
      
      The first patch adds pointers to the TX and RX IPA endpoints in the
      netdev private data.  The second patch has netif_stop_queue() be
      called for all packets; if pm_runtime_get() indicates power is
      enabled (or an error), netif_wake_queue() is called to enable it
      again.  The third and fourth patches get rid of the STARTED and
      STOPPED IPA power flags, as well as the power spinlock, because they
      are no longer needed.  The last three patches just eliminate some
      trivial functions, open-coding them instead.
      ====================
      
      Link: https://lore.kernel.org/r/20240130192305.250915-1-elder@linaro.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      747056a9
    • Alex Elder's avatar
      net: ipa: kill ipa_power_modem_queue_wake() · e01bbdc9
      Alex Elder authored
      All ipa_power_modem_queue_wake() does is call netif_wake_queue()
      on the modem netdev.  There is no need to wrap that call in a
      trivial function (and certainly not one defined in "ipa_power.c").
      
      So get rid of ipa_power_modem_queue_wake(), and replace its one
      caller with a direct call to netif_wake_queue().  Determine the
      netdev pointer to use from the private TX endpoint's netdev pointer.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Link: https://lore.kernel.org/r/20240130192305.250915-8-elder@linaro.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      e01bbdc9
    • Alex Elder's avatar
      net: ipa: kill ipa_power_modem_queue_active() · 2acf5fc8
      Alex Elder authored
      All ipa_power_modem_queue_active() does now is call netif_wake_queue().
      Just call netif_wake_queue() in the two places it's needed, and get
      rid of ipa_power_modem_queue_active().
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Link: https://lore.kernel.org/r/20240130192305.250915-7-elder@linaro.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      2acf5fc8
    • Alex Elder's avatar
      net: ipa: kill ipa_power_modem_queue_stop() · 30cdaea2
      Alex Elder authored
      All ipa_power_modem_queue_stop() does now is call netif_stop_queue().
      Just call netif_stop_queue() in the one place it's needed, and get
      rid of ipa_power_modem_queue_stop().
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Link: https://lore.kernel.org/r/20240130192305.250915-6-elder@linaro.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      30cdaea2
    • Alex Elder's avatar
      net: ipa: kill the IPA power STOPPED flag · 86c9a492
      Alex Elder authored
      Currently the STOPPED IPA power flag is used to indicate that the
      transmit queue has been stopped.  Previously this was used to avoid
      setting the STARTED flag unless the queue had already been stopped.
      It meant transmit queuing would be enabled on resume if it was
      stopped by the transmit path--and if so, it ensured it only got
      enabled once.
      
      We only stop the transmit queue in the transmit path.  The STARTED
      flag has been removed, and it causes no real harm to enable
      transmits when they're already enabled.  So we can get rid of
      the STOPPED flag and call netif_wake_queue() unconditionally.
      
      This makes the IPA power spinlock unnecessary, so it can be removed
      as well.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Link: https://lore.kernel.org/r/20240130192305.250915-5-elder@linaro.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      86c9a492
    • Alex Elder's avatar
      net: ipa: kill the STARTED IPA power flag · 688de12f
      Alex Elder authored
      A transmit on the modem netdev can only complete if the IPA hardware
      is powered.  Currently, if a transmit request arrives when the
      hardware was not powered, further transmits are be stopped to allow
      power-up to complete.  Once power-up completes, transmits are once
      again enabled.
      
      Runtime resume can complete at the same time a transmit request is
      being handled, and previously there was a race between stopping and
      restarting transmits.  The STARTED flag was used to ensure the
      stop request in the transmit path was skipped if the start request
      in the runtime resume path had already occurred.
      
      Now, the queue is *always* stopped in the transmit path, *before*
      determining whether power is ACTIVE.  If power is found to already
      be active (or if the socket buffer is gets dropped), transmit is
      re-enabled.  Otherwise it will (always) be enabled after runtime
      resume completes.
      
      The race between transmit and runtime resume no longer exists, so
      there is no longer any need to maintain the STARTED flag.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Link: https://lore.kernel.org/r/20240130192305.250915-4-elder@linaro.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      688de12f
    • Alex Elder's avatar
      net: ipa: begin simplifying TX queue stop · 844ecc4a
      Alex Elder authored
      There are a number of flags used in the IPA driver to attempt to
      manage race conditions that can occur between runtime resume and
      netdev transmit.  If we disable TX before requesting power, we can
      avoid these races entirely, simplifying things considerably.
      
      This patch implements the main change, disabling transmit always in
      the net_device->ndo_start_xmit() callback, then re-enabling it again
      whenever we find power is active (or when we drop the skb).
      
      The patches that follow will refactor the "old" code to the point
      that most of it can be eliminated.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Link: https://lore.kernel.org/r/20240130192305.250915-3-elder@linaro.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      844ecc4a
    • Alex Elder's avatar
      net: ipa: stash modem TX and RX endpoints · 102c28b8
      Alex Elder authored
      Rather than repeatedly looking up the endpoints in the name map,
      save the modem TX and RX endpoint pointers in the netdev private
      area.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Link: https://lore.kernel.org/r/20240130192305.250915-2-elder@linaro.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      102c28b8
  2. 01 Feb, 2024 21 commits