Skip to content
  1. Jul 23, 2020
  2. Jul 22, 2020
    • David S. Miller's avatar
      Merge branch 'ionic-updates' · fa56a987
      David S. Miller authored
      
      
      Shannon Nelson says:
      
      ====================
      ionic updates
      
      These are a few odd code tweaks to the ionic driver: FW defined MTU
      limits, remove unnecessary code, and other tidiness tweaks.
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fa56a987
    • Shannon Nelson's avatar
      ionic: interface file updates · 1b897e7d
      Shannon Nelson authored
      
      
      Add some new interface values and update a few more descriptions.
      
      Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1b897e7d
    • Shannon Nelson's avatar
      ionic: rearrange reset and bus-master control · 6a6014e2
      Shannon Nelson authored
      
      
      We can prevent potential incorrect DMA access attempts from the
      NIC by enabling bus-master after the reset, and by disabling
      bus-master earlier in cleanup.
      
      Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      6a6014e2
    • Shannon Nelson's avatar
      ionic: update eid test for overflow · 3fbc9bb6
      Shannon Nelson authored
      
      
      Fix up our comparison to better handle a potential (but largely
      unlikely) wrap around.
      
      Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3fbc9bb6
    • Shannon Nelson's avatar
      ionic: remove unused ionic_coal_hw_to_usec · 4471b1c1
      Shannon Nelson authored
      
      
      Clean up some unused code.
      
      Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4471b1c1
    • Shannon Nelson's avatar
      ionic: set netdev default name · c8768e73
      Shannon Nelson authored
      
      
      If the host system's udev fails to set a new name for the
      network port, there is no NETDEV_CHANGENAME event to trigger
      the driver to send the name down to the firmware.  It is safe
      to set the lif name multiple times, so we add a call early on
      to set the default netdev name to be sure the FW has something
      to use in its internal debug logging.  Then when udev gets
      around to changing it we can update it to the actual name the
      system will be using.
      
      Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c8768e73
    • Shannon Nelson's avatar
      ionic: get MTU from lif identity · 4b03b273
      Shannon Nelson authored
      
      
      Change from using hardcoded MTU limits and instead use the
      firmware defined limits. The value from the LIF attributes is
      the frame size, so we take off the header size to convert to
      MTU size.
      
      Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4b03b273
    • Martin Varghese's avatar
      bareudp: Reverted support to enable & disable rx metadata collection · 4787dd58
      Martin Varghese authored
      The commit fe80536a ("bareudp: Added attribute to enable & disable
      rx metadata collection") breaks the the original(5.7) default behavior of
      bareudp module to collect RX metadadata at the receive. It was added to
      avoid the crash at the kernel neighbour subsytem when packet with metadata
      from bareudp is processed. But it is no more needed as the
      commit 394de110 ("net: Added pointer check for
      dst->ops->neigh_lookup in dst_neigh_lookup_skb") solves this crash.
      
      Fixes: fe80536a
      
       ("bareudp: Added attribute to enable & disable rx metadata collection")
      Signed-off-by: default avatarMartin Varghese <martin.varghese@nokia.com>
      Acked-by: default avatarGuillaume Nault <gnault@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4787dd58
    • David S. Miller's avatar
      Merge branch 'dpaa2-eth-add-support-for-TBF-offload' · 4303aa98
      David S. Miller authored
      
      
      Ioana Ciornei says:
      
      ====================
      dpaa2-eth: add support for TBF offload
      
      This patch set adds support for TBF offload in dpaa2-eth.
      The first patch restructures how the .ndo_setup_tc() callback is
      implemented (each Qdisc is treated in a separate function), the second
      patch just adds the necessary APIs for configuring the Tx shaper and the
      last one is handling TC_SETUP_QDISC_TBF and configures as requested the
      shaper.
      ====================
      
      Reviewed-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4303aa98
    • Ioana Ciornei's avatar
      dpaa2-eth: add support for TBF offload · 3657cdaf
      Ioana Ciornei authored
      
      
      React to TC_SETUP_QDISC_TBF and configure the egress shaper as
      appropriate with the maximum rate and burst size requested by the user.
      TBF can only be offloaded on DPAA2 when it's the root qdisc, ie it's a
      per port shaper.
      
      Signed-off-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3657cdaf
    • Ioana Ciornei's avatar
      dpaa2-eth: add API for Tx shaping · 39344a89
      Ioana Ciornei authored
      
      
      Add the necessary API (dpni_set_tx_shaping) for configuring the rate and
      burst size of a per port shaper in DPAA2.
      
      Signed-off-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      39344a89
    • Ioana Ciornei's avatar
      dpaa2-eth: move the mqprio setup into a separate function · e3ec13be
      Ioana Ciornei authored
      
      
      Move the setup done for MQPRIO into a separate function so that
      with the addition of another offload we do not crowd
      dpaa2_eth_setup_tc(). After this restructuring it's easier to see what
      is supported in terms of Qdisc offloading.
      
      Signed-off-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e3ec13be
    • Florian Westphal's avatar
      mptcp: move helper to where its used · c1d069e3
      Florian Westphal authored
      
      
      Only used in token.c.
      
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c1d069e3
    • David S. Miller's avatar
      Merge branch 'devlink-small-improvements' · 1fe4085f
      David S. Miller authored
      
      
      Parav Pandit says:
      
      ====================
      devlink small improvements
      
      This short series improves the devlink code for lock commment,
      simplifying checks and keeping the scope of mutex lock for necessary
      fields.
      
      Patch summary:
      Patch-1 Keep the devlink_mutex for only for necessary changes.
      Patch-2 Avoids duplicate check for reload flag
      Patch-3 Adds missing comment for the scope of devlink instance lock
      Patch-4 Constify devlink instance pointer
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1fe4085f
    • Parav Pandit's avatar
      devlink: Constify devlink instance pointer · eac5f8a9
      Parav Pandit authored
      
      
      Constify devlink instance pointer while checking if reload operation is
      supported or not.
      
      This helps to review the scope of checks done in reload.
      
      Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      eac5f8a9
    • Parav Pandit's avatar
      devlink: Add comment for devlink instance lock · 336ce1c9
      Parav Pandit authored
      
      
      Add comment to describe the purpose of devlink instance lock.
      
      Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      336ce1c9
    • Parav Pandit's avatar
      devlink: Avoid duplicate check for reload enabled flag · 9232a3e6
      Parav Pandit authored
      
      
      Reload operation is enabled or not is already checked by
      devlink_reload(). Hence, remove the duplicate check from
      devlink_nl_cmd_reload().
      
      Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9232a3e6
    • Parav Pandit's avatar
      devlink: Do not hold devlink mutex when initializing devlink fields · 6553e561
      Parav Pandit authored
      
      
      There is no need to hold a device global lock when initializing
      devlink device fields of a devlink instance which is not yet part of the
      devices list.
      
      Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      6553e561
    • Heiner Kallweit's avatar
      r8169: allow to enable ASPM on RTL8125A · 3fc364c0
      Heiner Kallweit authored
      
      
      For most chip versions this has been added already. Allow also for
      RTL8125A to enable ASPM.
      
      Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3fc364c0
    • David S. Miller's avatar
      Merge branch 'ena-driver-new-features' · 4c8024f7
      David S. Miller authored
      
      
      Arthur Kiyanovski says:
      
      ====================
      ENA driver new features
      
      V4 changes:
      -----------
      Add smp_rmb() to "net: ena: avoid unnecessary rearming of interrupt
      vector when busy-polling" to adhere to the linux kernel memory model,
      and update the commit message accordingly.
      
      V3 changes:
      -----------
      1. Add "net: ena: enable support of rss hash key and function
         changes" patch again, with more explanations why it should
         be in net-next in commit message.
      2. Add synchronization considerations to "net: ena: avoid unnecessary
         rearming of interrupt vector when busy-polling"
      
      V2 changes:
      -----------
      1. Update commit messages of 2 patches to be more verbose.
      2. Remove "net: ena: enable support of rss hash key and function
         changes" patch. Will be resubmitted net.
      
      V1 cover letter:
      ----------------
      This patchset contains performance improvements, support for new devices
      and functionality:
      
      1. Support for upcoming ENA devices
      2. Avoid unnecessary IRQ unmasking in busy poll to reduce interrupt rate
      3. Enabling device support for RSS function and key manipulation
      4. Support for NIC-based traffic mirroring (SPAN port)
      5. Additional PCI device ID
      6. Cosmetic changes
      ====================
      
      Acked-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4c8024f7
    • Arthur Kiyanovski's avatar
      net: ena: support new LLQ acceleration mode · 0e3a3f6d
      Arthur Kiyanovski authored
      New devices add a new hardware acceleration engine, which adds some
      restrictions to the driver.
      Metadata descriptor must be present for each packet and the maximum
      burst size between two doorbells is now limited to a number
      advertised by the device.
      
      This patch adds:
      1. A handshake protocol between the driver and the device, so the
      device will enable the accelerated queues only when both sides
      support it.
      
      2. The driver support for the new acceleration engine:
      2.1. Send metadata descriptor for each Tx packet.
      2.2. Limit the number of packets sent between doorbells.(*)
      
      (*) A previous driver implementation of this feature was comitted in
      commit 05d62ca2
      
       ("net: ena: add handling of llq max tx burst size")
      however the design of the interface between the driver and device
      changed since then. This change is reflected in this commit.
      
      Signed-off-by: default avatarNetanel Belgazal <netanel@amazon.com>
      Signed-off-by: default avatarArthur Kiyanovski <akiyano@amazon.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0e3a3f6d
    • Arthur Kiyanovski's avatar
      net: ena: move llq configuration from ena_probe to ena_device_init() · c29efeae
      Arthur Kiyanovski authored
      
      
      When the ENA device resets to recover from some error state, all LLQ
      configuration values are reset to their defaults, because LLQ is
      initialized only once during ena_probe().
      
      Changes in this commit:
      1. Move the LLQ configuration process into ena_init_device()
      which is called from both ena_probe() and ena_restore_device(). This
      way, LLQ setup configurations that are different from the default
      values will survive resets.
      
      2. Extract the LLQ bar mapping to ena_map_llq_bar(),
      and call once in the lifetime of the driver from ena_probe(),
      since there is no need to unmap and map the LLQ bar again every reset.
      
      3. Map the LLQ bar if it exists, regardless if initialization of LLQ
      placement policy (ENA_ADMIN_PLACEMENT_POLICY_DEV) succeeded
      or not. Initialization might fail the first time, falling back to the
      ENA_ADMIN_PLACEMENT_POLICY_HOST placement policy, but later succeed
      after device reset, in which case the LLQ bar needs to be mapped
      already.
      
      Signed-off-by: default avatarSameeh Jubran <sameehj@amazon.com>
      Signed-off-by: default avatarArthur Kiyanovski <akiyano@amazon.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c29efeae
    • Arthur Kiyanovski's avatar
      net: ena: enable support of rss hash key and function changes · 0ee60edf
      Arthur Kiyanovski authored
      Add the rss_configurable_function_key bit to driver_supported_feature.
      
      This bit tells the device that the driver in question supports the
      retrieving and updating of RSS function and hash key, and therefore
      the device should allow RSS function and key manipulation.
      
      This commit turns on  device support for hash key and RSS function
      management. Without this commit this feature is turned off at the
      device and appears to the user as unsupported.
      
      This commit concludes the following series of already merged commits:
      commit 0af3c4e2 ("net: ena: changes to RSS hash key allocation")
      commit c1bd17e5 ("net: ena: change default RSS hash function to Toeplitz")
      commit f66c2ea3 ("net: ena: allow setting the hash function without changing the key")
      commit e9a1de37 ("net: ena: fix error returning in ena_com_get_hash_function()")
      commit 80f8443f ("net: ena: avoid unnecessary admin command when RSS function set fails")
      commit 6a4f7dc8 ("net: ena: rss: do not allocate key when not supported")
      commit 0d1c3de7
      
       ("net: ena: fix incorrect default RSS key")
      
      The above commits represent the last part of the implementation of
      this feature, and with them merged the feature can be enabled
      in the device.
      
      Signed-off-by: default avatarArthur Kiyanovski <akiyano@amazon.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0ee60edf
    • Arthur Kiyanovski's avatar
      net: ena: add support for traffic mirroring · 0f505c60
      Arthur Kiyanovski authored
      
      
      Add support for traffic mirroring, where the hardware reads the
      buffer from the instance memory directly.
      
      Traffic Mirroring needs access to the rx buffers in the instance.
      To have this access, this patch:
      1. Changes the code to map and unmap the rx buffers bidirectionally.
      2. Enables the relevant bit in driver_supported_features to indicate
         to the FW that this driver supports traffic mirroring.
      
      Rx completion is not generated until mirroring is done to avoid
      the situation where the driver changes the buffer before it is
      mirrored.
      
      Signed-off-by: default avatarArthur Kiyanovski <akiyano@amazon.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0f505c60
    • Arthur Kiyanovski's avatar
      net: ena: cosmetic: change ena_com_stats_admin stats to u64 · 0dcec686
      Arthur Kiyanovski authored
      
      
      The size of the admin statistics in ena_com_stats_admin is changed
      from 32bit to 64bit so to align with the sizes of the other statistics
      in the driver (i.e. rx_stats, tx_stats and ena_stats_dev).
      
      This is done as part of an effort to create a unified API to read
      statistics.
      
      Signed-off-by: default avatarShay Agroskin <shayagr@amazon.com>
      Signed-off-by: default avatarArthur Kiyanovski <akiyano@amazon.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0dcec686
    • Arthur Kiyanovski's avatar
      net: ena: cosmetic: satisfy gcc warning · 79890d3f
      Arthur Kiyanovski authored
      
      
      gcc 4.8 reports a warning when initializing with = {0}.
      Dropping the "0" from the braces fixes the issue.
      This fix is not ANSI compatible but is allowed by gcc.
      
      Signed-off-by: default avatarSameeh Jubran <sameehj@amazon.com>
      Signed-off-by: default avatarArthur Kiyanovski <akiyano@amazon.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      79890d3f
    • Arthur Kiyanovski's avatar
      net: ena: add reserved PCI device ID · 866032ab
      Arthur Kiyanovski authored
      
      
      Add a reserved PCI device ID to the driver's table
      Used for internal testing purposes.
      
      Signed-off-by: default avatarArthur Kiyanovski <akiyano@amazon.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      866032ab
    • Arthur Kiyanovski's avatar
      net: ena: avoid unnecessary rearming of interrupt vector when busy-polling · 1e5ae350
      Arthur Kiyanovski authored
      
      
      For an overview of the race created by this patch goto synchronization
      label.
      
      In napi busy-poll mode, the kernel invokes the napi handler of the
      device repeatedly to poll the NIC's receive queues. This process
      repeats until a timeout, specific for each connection, is up.
      By polling packets in busy-poll mode the user may gain lower latency
      and higher throughput (since the kernel no longer waits for interrupts
      to poll the queues) in expense of CPU usage.
      
      Upon completing a napi routine, the driver checks whether
      the routine was called by an interrupt handler. If so, the driver
      re-enables interrupts for the device. This is needed since an
      interrupt routine invocation disables future invocations until
      explicitly re-enabled.
      
      The driver avoids re-enabling the interrupts if they were not disabled
      in the first place (e.g. if driver in busy mode).
      Originally, the driver checked whether interrupt re-enabling is needed
      by reading the 'ena_napi->unmask_interrupt' variable. This atomic
      variable was set upon interrupt and cleared after re-enabling it.
      
      In the 4.10 Linux version, the 'napi_complete_done' call was changed
      so that it returns 'false' when device should not re-enable
      interrupts, and 'true' otherwise. The change includes reading the
      "NAPIF_STATE_IN_BUSY_POLL" flag to check if the napi call is in
      busy-poll mode, and if so, return 'false'.
      The driver was changed to re-enable interrupts according to this
      routine's return value.
      The Linux community rejected the use of the
      'ena_napi->unmaunmask_interrupt' variable to determine whether
      unmasking is needed, and urged to use napi_napi_complete_done()
      return value solely.
      See https://lore.kernel.org/patchwork/patch/741149/ for more details
      
      As explained, a busy-poll session exists for a specified timeout
      value, after which it exits the busy-poll mode and re-enters it later.
      This leads to many invocations of the napi handler where
      napi_complete_done() false indicates that interrupts should be
      re-enabled.
      This creates a bug in which the interrupts are re-enabled
      unnecessarily.
      To reproduce this bug:
          1) echo 50 | sudo tee /proc/sys/net/core/busy_poll
          2) echo 50 | sudo tee /proc/sys/net/core/busy_read
          3) Add counters that check whether
          'ena_unmask_interrupt(tx_ring, rx_ring);'
          is called without disabling the interrupts in the first
          place (i.e. with calling the interrupt routine
          ena_intr_msix_io())
      
      Steps 1+2 enable busy-poll as the default mode for new connections.
      
      The busy poll routine rearms the interrupts after every session by
      design, and so we need to add an extra check that the interrupts were
      masked in the first place.
      
      synchronization:
      This patch introduces a race between the interrupt handler
      ena_intr_msix_io() and the napi routine ena_io_poll().
      Some macros and instruction were added to prevent this race from leaving
      the interrupts masked. The following specifies the different race
      scenarios in this patch:
      
      1) interrupt handler and napi routine run sequentially
          i) interrupt handler is called, sets 'interrupts_masked' flag and
      	successfully schedules the napi handler via softirq.
      
          In this scenario the napi routine might not see the flag change
          for several reasons:
      	a) The flag is stored in a register by the compiler. For this
      	case the WRITE_ONCE macro which prevents this.
      	b) The compiler might reorder the instruction. For this the
      	smp_wmb() instruction was used which implies a compiler memory
      	barrier.
      	c) On archs with weak consistency model (like ARM64) the napi
      	routine might be scheduled and start running before the flag
      	STORE instruction is committed to cache/memory. To ensure this
      	doesn't happen, the smp_wmb() instruction was added. It ensures
      	that the flag set instruction is committed before scheduling
      	napi.
      
          ii) compiler reorders the flag's value check in the 'if' with
          the flag set in the napi routine.
      
          This scenario is prevented by smp_rmb() call after the flag check.
      
      2) interrupt handler and napi routine run in parallel (can happen when
      busy poll routine invokes the napi handler)
      
          i) interrupt handler sets the flag in one core, while the napi
          routine reads it in another core.
      
          This scenario also is divided into two cases:
      	a) napi_complete_done() doesn't finish running, in which case
      	napi_sched() would just set NAPIF_STATE_MISSED and the napi
      	routine would reschedule itself without changing the flag's value.
      
      	b) napi_complete_done() finishes running. In this case the
      	napi routine might override the flag's value.
      	This doesn't present any rise since it later unmasks the
      	interrupt vector.
      
      Signed-off-by: default avatarShay Agroskin <shayagr@amazon.com>
      Signed-off-by: default avatarArthur Kiyanovski <akiyano@amazon.com>
      Cc: Eric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1e5ae350
    • Yuval Basson's avatar
      qed: Fix ILT and XRCD bitmap memory leaks · d4eae993
      Yuval Basson authored
      - Free ILT lines used for XRC-SRQ's contexts.
      - Free XRCD bitmap
      
      Fixes: b8204ad8 ("qed: changes to ILT to support XRC")
      Fixes: 7bfb399e
      
       ("qed: Add XRC to RoCE")
      Signed-off-by: default avatarMichal Kalderon <mkalderon@marvell.com>
      Signed-off-by: default avatarYuval Basson <ybason@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d4eae993
    • David S. Miller's avatar
      Merge branch 'Phylink-PCS-updates' · 11de5770
      David S. Miller authored
      
      
      Russell King says:
      
      ====================
      Phylink PCS updates
      
      This series updates the rudimentary phylink PCS support with the
      results of the last four months of development of that.  Phylink
      PCS support was initially added back at the end of March, when it
      became clear that the current approach of treating everything at
      the MAC end as being part of the MAC was inadequate.
      
      However, this rudimentary implementation was fine initially for
      mvneta and similar, but in practice had a fair number of issues,
      particularly when ethtool interfaces were used to change various
      link properties.
      
      It became apparent that relying on the phylink_config structure for
      the PCS was also bad when it became clear that the same PCS was used
      in DSA drivers as well as in NXPs other offerings, and there was a
      desire to re-use that code.
      
      It also became apparent that splitting the "configuration" step on
      an interface mode configuration between the MAC and PCS using just
      mac_config() and pcs_config() methods was not sufficient for some
      setups, as the MAC needed to be "taken down" prior to making changes,
      and once all settings were complete, the MAC could only then be
      resumed.
      
      This series addresses these points, progressing PCS support, and
      has been developed with mvneta and DPAA2 setups, with work on both
      those drivers to prove this approach.  It has been rigorously tested
      with mvneta, as that provides the most flexibility for testing the
      various code paths.
      
      To solve the phylink_config reuse problem, we introduce a struct
      phylink_pcs, which contains the minimal information necessary, and it
      is intended that this is embedded in the PCS private data structure.
      
      To solve the interface mode configuration problem, we introduce two
      new MAC methods, mac_prepare() and mac_finish() which wrap the entire
      interface mode configuration only.  This has the additional benefit of
      relieving MAC drivers from working out whether an interface change has
      occurred, and whether they need to do some major work.
      
      I have not yet updated all the interface documentation for these
      changes yet, that work remains, but this patch set is provided in the
      hope that those working on PCS support in NXP will find this useful.
      
      Since there is a lot of change here, this is the reason why I strongly
      advise that everyone has converted to the mac_link_up() way of
      configuring the link parameters when the link comes up, rather than
      the old way of using mac_config() - especially as splitting the PCS
      changes how and when phylink calls mac_config(). Although no change
      for existing users is intended, that is something I no longer am able
      to test.
      
      Changes since RFC:
      - fix bisect build failure
      - add patch to use config.an_enabled
      - rename phylink_config_interface to phylink_major_reconfig
      - add expanded documentation for phylink_set_pcs()
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      11de5770
    • Russell King's avatar
      net: phylink: add interface to configure clause 22 PCS PHY · 93eaceb0
      Russell King authored
      
      
      Add an interface to configure the advertisement for a clause 22 PCS
      PHY, and set the AN enable flag in the BMCR appropriately.
      
      Reviewed-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      93eaceb0
    • Russell King's avatar
      net: phylink: add struct phylink_pcs · 7137e18f
      Russell King authored
      
      
      Add a way for MAC PCS to have private data while keeping independence
      from struct phylink_config, which is used for the MAC itself. We need
      this independence as we will have stand-alone code for PCS that is
      independent of the MAC.  Introduce struct phylink_pcs, which is
      designed to be embedded in a driver private data structure.
      
      This structure does not include a mdio_device as there are PCS
      implementations such as the Marvell DSA and network drivers where this
      is not necessary.
      
      Reviewed-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
      Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7137e18f
    • Russell King's avatar
      net: phylink: re-implement interface configuration with PCS · b7ad14c2
      Russell King authored
      
      
      With PCS support, how we implement interface reconfiguration (or other
      major reconfiguration) is not up to the job; we end up reconfiguring
      the PCS for an interface change while the link could potentially be up.
      In order to solve this, add two additional MAC methods for major
      configuration, one to prepare for the change, and one to finish the
      change.
      
      This allows mvneta and mvpp2 to shutdown what they require prior to the
      MAC and PCS configuration calls, and then restart as appropriate.
      
      This impacts ksettings_set(), which now needs to identify whether the
      change is a minor tweak to the advertisement masks or whether the
      interface mode has changed, and call the appropriate function for that
      update.
      
      Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b7ad14c2
    • Russell King's avatar
      net: phylink: in-band pause mode advertisement update for PCS · 1571e700
      Russell King authored
      
      
      Re-code the pause in-band advertisement update in light of the addition
      of PCS support, so that we perform the minimum required; only the PCS
      configuration function needs to be called in this case, followed by the
      request to trigger a restart of negotiation if the programmed
      advertisement changed.
      
      We need to change the pcs_config() signature to pass whether resolved
      pause should be passed to the MAC for setups such as mvneta and mvpp2
      where doing so overrides the MAC manual flow controls.
      
      Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1571e700