]> Git Repo - J-linux.git/commitdiff
Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next...
authorJakub Kicinski <[email protected]>
Sat, 16 Nov 2024 02:21:34 +0000 (18:21 -0800)
committerJakub Kicinski <[email protected]>
Sat, 16 Nov 2024 02:21:34 +0000 (18:21 -0800)
Tony Nguyen says:

====================
Intel Wired LAN Driver Updates 2024-11-05 (ice, ixgbe, igc. igb, igbvf, e1000)

For ice:

Mateusz refactors and adds additional SerDes configuration values to be
output.

Przemek refactors processing of DDP and adds support for a flag field in
the DDP's signature segment header.

Joe Damato adds support for persistent NAPI config.

Brett adjusts setting of Tx promiscuous based on unicast/multicast
setting.

Jake moves setting of pf->supported_rxdids to occur directly after DDP
load and changes a small struct to use stack memory.

Frederic Weisbecker adds WQ_UNBOUND flag to the workqueue.

For ixgbe:

Diomidis Spinellis removes a circular dependency.

For igc:

Vitaly removes an unneeded autoneg parameter.

For igb:

Johnny Park fixes a couple of typos.

For igbvf:

Wander Lairson Costa removes an unused spinlock.

For e1000:

Joe Damato adds RTNL lock to some calls where it is expected to be held.

* '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue:
  e1000: Hold RTNL when e1000_down can be called
  igbvf: remove unused spinlock
  igb: Fix 2 typos in comments in igb_main.c
  igc: remove autoneg parameter from igc_mac_info
  ixgbe: Break include dependency cycle
  ice: Unbind the workqueue
  ice: use stack variable for virtchnl_supported_rxdids
  ice: initialize pf->supported_rxdids immediately after loading DDP
  ice: only allow Tx promiscuous for multicast
  ice: Add support for persistent NAPI config
  ice: support optional flags in signature segment header
  ice: refactor "last" segment of DDP pkg
  ice: extend dump serdes equalizer values feature
  ice: rework of dump serdes equalizer values feature
====================

Link: https://patch.msgid.link/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
1  2 
drivers/net/ethernet/intel/ice/ice_main.c
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index b79848fe2a9e3883293f25e2c55b89bb6ac64100,cc8d2d6e2b4d266be8f4bd65c1b08a62685a0767..1eaa4428fd2482133525fd1e90e486e7fa3c204c
@@@ -4554,6 -4554,34 +4554,34 @@@ ice_init_tx_topology(struct ice_hw *hw
        return 0;
  }
  
+ /**
+  * ice_init_supported_rxdids - Initialize supported Rx descriptor IDs
+  * @hw: pointer to the hardware structure
+  * @pf: pointer to pf structure
+  *
+  * The pf->supported_rxdids bitmap is used to indicate to VFs which descriptor
+  * formats the PF hardware supports. The exact list of supported RXDIDs
+  * depends on the loaded DDP package. The IDs can be determined by reading the
+  * GLFLXP_RXDID_FLAGS register after the DDP package is loaded.
+  *
+  * Note that the legacy 32-byte RXDID 0 is always supported but is not listed
+  * in the DDP package. The 16-byte legacy descriptor is never supported by
+  * VFs.
+  */
+ static void ice_init_supported_rxdids(struct ice_hw *hw, struct ice_pf *pf)
+ {
+       pf->supported_rxdids = BIT(ICE_RXDID_LEGACY_1);
+       for (int i = ICE_RXDID_FLEX_NIC; i < ICE_FLEX_DESC_RXDID_MAX_NUM; i++) {
+               u32 regval;
+               regval = rd32(hw, GLFLXP_RXDID_FLAGS(i, 0));
+               if ((regval >> GLFLXP_RXDID_FLAGS_FLEXIFLAG_4N_S)
+                       & GLFLXP_RXDID_FLAGS_FLEXIFLAG_4N_M)
+                       pf->supported_rxdids |= BIT(i);
+       }
+ }
  /**
   * ice_init_ddp_config - DDP related configuration
   * @hw: pointer to the hardware structure
@@@ -4588,6 -4616,9 +4616,9 @@@ static int ice_init_ddp_config(struct i
        ice_load_pkg(firmware, pf);
        release_firmware(firmware);
  
+       /* Initialize the supported Rx descriptor IDs after loading DDP */
+       ice_init_supported_rxdids(hw, pf);
        return 0;
  }
  
@@@ -5900,7 -5931,7 +5931,7 @@@ static int __init ice_module_init(void
  
        ice_adv_lnk_speed_maps_init();
  
-       ice_wq = alloc_workqueue("%s", 0, 0, KBUILD_MODNAME);
+       ice_wq = alloc_workqueue("%s", WQ_UNBOUND, 0, KBUILD_MODNAME);
        if (!ice_wq) {
                pr_err("Failed to create workqueue\n");
                return status;
@@@ -6125,14 -6156,12 +6156,14 @@@ ice_set_tx_maxrate(struct net_device *n
   * @addr: the MAC address entry being added
   * @vid: VLAN ID
   * @flags: instructions from stack about fdb operation
 + * @notified: whether notification was emitted
   * @extack: netlink extended ack
   */
  static int
  ice_fdb_add(struct ndmsg *ndm, struct nlattr __always_unused *tb[],
            struct net_device *dev, const unsigned char *addr, u16 vid,
 -          u16 flags, struct netlink_ext_ack __always_unused *extack)
 +          u16 flags, bool *notified,
 +          struct netlink_ext_ack __always_unused *extack)
  {
        int err;
  
   * @dev: the net device pointer
   * @addr: the MAC address entry being added
   * @vid: VLAN ID
 + * @notified: whether notification was emitted
   * @extack: netlink extended ack
   */
  static int
  ice_fdb_del(struct ndmsg *ndm, __always_unused struct nlattr *tb[],
            struct net_device *dev, const unsigned char *addr,
 -          __always_unused u16 vid, struct netlink_ext_ack *extack)
 +          __always_unused u16 vid, bool *notified,
 +          struct netlink_ext_ack *extack)
  {
        int err;
  
index f0528bd131849d1025bda34ba58f56d30d1cc7aa,37b674f8cbcd7575eb0e02aef40ef4e09d0c5b5c..08578980b651802c191c0ec9be050810d6a93844
@@@ -907,7 -907,7 +907,7 @@@ static int igb_request_msix(struct igb_
        int i, err = 0, vector = 0, free_vector = 0;
  
        err = request_irq(adapter->msix_entries[vector].vector,
 -                        igb_msix_other, IRQF_NO_THREAD, netdev->name, adapter);
 +                        igb_msix_other, 0, netdev->name, adapter);
        if (err)
                goto err_out;
  
@@@ -1204,7 -1204,7 +1204,7 @@@ static int igb_alloc_q_vector(struct ig
        /* initialize pointer to rings */
        ring = q_vector->ring;
  
-       /* intialize ITR */
+       /* initialize ITR */
        if (rxr_count) {
                /* rx or rx/tx vector */
                if (!adapter->rx_itr_setting || adapter->rx_itr_setting > 3)
@@@ -2486,7 -2486,7 +2486,7 @@@ static int igb_set_features(struct net_
  static int igb_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
                           struct net_device *dev,
                           const unsigned char *addr, u16 vid,
 -                         u16 flags,
 +                         u16 flags, bool *notified,
                           struct netlink_ext_ack *extack)
  {
        /* guarantee we can provide a unique filter for the unicast address */
@@@ -3906,7 -3906,7 +3906,7 @@@ static void igb_remove(struct pci_dev *
   *
   *  This function initializes the vf specific data storage and then attempts to
   *  allocate the VFs.  The reason for ordering it this way is because it is much
-  *  mor expensive time wise to disable SR-IOV than it is to allocate and free
+  *  more expensive time wise to disable SR-IOV than it is to allocate and free
   *  the memory for the VFs.
   **/
  static void igb_probe_vfs(struct igb_adapter *adapter)
index adc9392463ce194e98f997b5a163c1812a212fc0,c229a26fbbb7976a2e3e931925e63aeef462e9bf..2e38e8f6fac18d43f054aa1a3fac0cf3b8a0f451
@@@ -43,6 -43,7 +43,7 @@@
  #include "ixgbe.h"
  #include "ixgbe_common.h"
  #include "ixgbe_dcb_82599.h"
+ #include "ixgbe_mbx.h"
  #include "ixgbe_phy.h"
  #include "ixgbe_sriov.h"
  #include "ixgbe_model.h"
@@@ -9954,7 -9955,7 +9955,7 @@@ static int ixgbe_set_features(struct ne
  static int ixgbe_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
                             struct net_device *dev,
                             const unsigned char *addr, u16 vid,
 -                           u16 flags,
 +                           u16 flags, bool *notified,
                             struct netlink_ext_ack *extack)
  {
        /* guarantee we can provide a unique filter for the unicast address */
This page took 0.101213 seconds and 4 git commands to generate.