Author: hselasky
Date: Tue Jul 17 10:16:32 2018
New Revision: 336397
URL: https://svnweb.freebsd.org/changeset/base/336397

Log:
  Refactor access to CR-space into using VSC APIs in mlx5core.
  
  Remove no longer used files and APIs.
  
  MFC after:            1 week
  Sponsored by:         Mellanox Technologies

Deleted:
  head/sys/dev/mlx5/mlx5_core/mlx5_crspace.c
Modified:
  head/sys/conf/files
  head/sys/dev/mlx5/driver.h
  head/sys/dev/mlx5/mlx5_core/mlx5_core.h
  head/sys/dev/mlx5/mlx5_core/mlx5_health.c
  head/sys/dev/mlx5/mlx5_core/mlx5_main.c
  head/sys/dev/mlx5/mlx5_core/mlx5_vsc.c
  head/sys/modules/mlx5/Makefile

Modified: head/sys/conf/files
==============================================================================
--- head/sys/conf/files Tue Jul 17 10:11:00 2018        (r336396)
+++ head/sys/conf/files Tue Jul 17 10:16:32 2018        (r336397)
@@ -4745,8 +4745,6 @@ dev/mlx5/mlx5_core/mlx5_cmd.c                     
optional mlx5 pci       \
        compile-with "${OFED_C}"
 dev/mlx5/mlx5_core/mlx5_cq.c                   optional mlx5 pci       \
        compile-with "${OFED_C}"
-dev/mlx5/mlx5_core/mlx5_crspace.c              optional mlx5 pci       \
-       compile-with "${OFED_C}"
 dev/mlx5/mlx5_core/mlx5_diagnostics.c          optional mlx5 pci       \
        compile-with "${OFED_C}"
 dev/mlx5/mlx5_core/mlx5_eq.c                   optional mlx5 pci       \

Modified: head/sys/dev/mlx5/driver.h
==============================================================================
--- head/sys/dev/mlx5/driver.h  Tue Jul 17 10:11:00 2018        (r336396)
+++ head/sys/dev/mlx5/driver.h  Tue Jul 17 10:16:32 2018        (r336397)
@@ -682,7 +682,6 @@ struct mlx5_core_dev {
        struct mlx5_flow_root_namespace *sniffer_tx_root_ns;
        u32 num_q_counter_allocated[MLX5_INTERFACE_NUMBER];
        struct mlx5_dump_data   *dump_data;
-       u32                     vsec_addr;
 };
 
 enum {
@@ -1055,8 +1054,11 @@ int mlx5_vsc_find_cap(struct mlx5_core_dev *mdev);
 int mlx5_vsc_lock(struct mlx5_core_dev *mdev);
 void mlx5_vsc_unlock(struct mlx5_core_dev *mdev);
 int mlx5_vsc_set_space(struct mlx5_core_dev *mdev, u16 space);
-int mlx5_vsc_write(struct mlx5_core_dev *mdev, u32 addr, u32 *data);
+int mlx5_vsc_write(struct mlx5_core_dev *mdev, u32 addr, const u32 *data);
 int mlx5_vsc_read(struct mlx5_core_dev *mdev, u32 addr, u32 *data);
+int mlx5_vsc_lock_addr_space(struct mlx5_core_dev *mdev, u32 addr);
+int mlx5_vsc_unlock_addr_space(struct mlx5_core_dev *mdev, u32 addr);
+
 static inline u32 mlx5_mkey_to_idx(u32 mkey)
 {
        return mkey >> 8;

Modified: head/sys/dev/mlx5/mlx5_core/mlx5_core.h
==============================================================================
--- head/sys/dev/mlx5/mlx5_core/mlx5_core.h     Tue Jul 17 10:11:00 2018        
(r336396)
+++ head/sys/dev/mlx5/mlx5_core/mlx5_core.h     Tue Jul 17 10:16:32 2018        
(r336397)
@@ -70,12 +70,6 @@ enum mlx5_semaphore_space_address {
        MLX5_SEMAPHORE_SW_RESET         = 0x20,
 };
 
-enum {
-       UNLOCK = 0,
-       LOCK = 1,
-       CAP_ID = 0x9,
-};
-
 struct mlx5_core_dev;
 
 int mlx5_query_hca_caps(struct mlx5_core_dev *dev);
@@ -109,8 +103,4 @@ struct mlx5_crspace_regmap {
 
 extern struct pci_driver mlx5_core_driver;
 
-void mlx5_vsec_init(struct mlx5_core_dev *dev);
-int mlx5_pciconf_cap9_sem(struct mlx5_core_dev *dev, int state);
-int mlx5_pciconf_set_sem_addr_space(struct mlx5_core_dev *dev,
-                                   u32 sem_space_address, int state);
 #endif /* __MLX5_CORE_H__ */

Modified: head/sys/dev/mlx5/mlx5_core/mlx5_health.c
==============================================================================
--- head/sys/dev/mlx5/mlx5_core/mlx5_health.c   Tue Jul 17 10:11:00 2018        
(r336396)
+++ head/sys/dev/mlx5/mlx5_core/mlx5_health.c   Tue Jul 17 10:16:32 2018        
(r336397)
@@ -59,19 +59,19 @@ enum  {
        MLX5_SENSOR_FW_SYND_RFR         = 5,
 };
 
-static int lock_sem_sw_reset(struct mlx5_core_dev *dev, int state)
+static int lock_sem_sw_reset(struct mlx5_core_dev *dev)
 {
-       int ret, err;
+       int ret;
 
        /* Lock GW access */
-       ret = mlx5_pciconf_cap9_sem(dev, LOCK);
+       ret = -mlx5_vsc_lock(dev);
        if (ret) {
-               mlx5_core_warn(dev, "Timed out locking gateway %d, %d\n", 
state, ret);
+               mlx5_core_warn(dev, "Timed out locking gateway %d\n", ret);
                return ret;
        }
 
-       ret = mlx5_pciconf_set_sem_addr_space(dev, MLX5_SEMAPHORE_SW_RESET, 
state);
-       if (ret && state == LOCK) {
+       ret = -mlx5_vsc_lock_addr_space(dev, MLX5_SEMAPHORE_SW_RESET);
+       if (ret) {
                if (ret == -EBUSY)
                        mlx5_core_dbg(dev, "SW reset FW semaphore already 
locked, another function will handle the reset\n");
                else
@@ -79,13 +79,30 @@ static int lock_sem_sw_reset(struct mlx5_core_dev *dev
        }
 
        /* Unlock GW access */
-       err = mlx5_pciconf_cap9_sem(dev, UNLOCK);
-       if (err)
-               mlx5_core_warn(dev, "Timed out unlocking gateway: state %d, err 
%d\n", state, err);
+       mlx5_vsc_unlock(dev);
 
        return ret;
 }
 
+static int unlock_sem_sw_reset(struct mlx5_core_dev *dev)
+{
+       int ret;
+
+       /* Lock GW access */
+       ret = -mlx5_vsc_lock(dev);
+       if (ret) {
+               mlx5_core_warn(dev, "Timed out locking gateway %d\n", ret);
+               return ret;
+       }
+
+       ret = -mlx5_vsc_unlock_addr_space(dev, MLX5_SEMAPHORE_SW_RESET);
+
+       /* Unlock GW access */
+       mlx5_vsc_unlock(dev);
+
+       return ret;
+}
+
 static u8 get_nic_mode(struct mlx5_core_dev *dev)
 {
        return (ioread32be(&dev->iseg->cmdq_addr_l_sz) >> 8) & 7;
@@ -223,7 +240,7 @@ void mlx5_enter_error_state(struct mlx5_core_dev *dev,
        if (fatal_error == MLX5_SENSOR_FW_SYND_RFR) {
                /* Get cr-dump and reset FW semaphore */
                if (mlx5_core_is_pf(dev))
-                       lock = lock_sem_sw_reset(dev, LOCK);
+                       lock = lock_sem_sw_reset(dev);
 
                /* Execute cr-dump and SW reset */
                if (lock != -EBUSY) {
@@ -249,7 +266,7 @@ void mlx5_enter_error_state(struct mlx5_core_dev *dev,
 
        /* Release FW semaphore if you are the lock owner */
        if (!lock)
-               lock_sem_sw_reset(dev, UNLOCK);
+               unlock_sem_sw_reset(dev);
 
        mlx5_core_err(dev, "system error event triggered\n");
 

Modified: head/sys/dev/mlx5/mlx5_core/mlx5_main.c
==============================================================================
--- head/sys/dev/mlx5/mlx5_core/mlx5_main.c     Tue Jul 17 10:11:00 2018        
(r336396)
+++ head/sys/dev/mlx5/mlx5_core/mlx5_main.c     Tue Jul 17 10:16:32 2018        
(r336397)
@@ -873,7 +873,9 @@ static int mlx5_init_once(struct mlx5_core_dev *dev, s
        struct pci_dev *pdev = dev->pdev;
        int err;
 
-       mlx5_vsec_init(dev);
+       err = mlx5_vsc_find_cap(dev);
+       if (err)
+               dev_err(&pdev->dev, "Unable to find vendor specific 
capabilities\n");
 
        err = mlx5_query_hca_caps(dev);
        if (err) {

Modified: head/sys/dev/mlx5/mlx5_core/mlx5_vsc.c
==============================================================================
--- head/sys/dev/mlx5/mlx5_core/mlx5_vsc.c      Tue Jul 17 10:11:00 2018        
(r336396)
+++ head/sys/dev/mlx5/mlx5_core/mlx5_vsc.c      Tue Jul 17 10:16:32 2018        
(r336397)
@@ -29,6 +29,8 @@
 #include <dev/mlx5/device.h>
 #include <dev/mlx5/mlx5_core/mlx5_core.h>
 
+#define        MLX5_SEMAPHORE_SPACE_DOMAIN 0xA
+
 struct mlx5_ifc_vsc_space_bits {
        u8 status[0x3];
        u8 reserved0[0xd];
@@ -139,7 +141,7 @@ int mlx5_vsc_set_space(struct mlx5_core_dev *mdev, u16
        return 0;
 }
 
-int mlx5_vsc_write(struct mlx5_core_dev *mdev, u32 addr, u32 *data)
+int mlx5_vsc_write(struct mlx5_core_dev *mdev, u32 addr, const u32 *data)
 {
        device_t dev = mdev->pdev->dev.bsddev;
        int vsc_addr = mdev->vsc_addr;
@@ -185,6 +187,60 @@ int mlx5_vsc_read(struct mlx5_core_dev *mdev, u32 addr
        }
 
        *data = pci_read_config(dev, vsc_addr + MLX5_VSC_DATA_OFFSET, 4);
+
+       return 0;
+}
+
+int mlx5_vsc_lock_addr_space(struct mlx5_core_dev *mdev, u32 addr)
+{
+       device_t dev = mdev->pdev->dev.bsddev;
+       int vsc_addr = mdev->vsc_addr;
+       u32 data;
+       int ret;
+       u32 id;
+
+       ret = mlx5_vsc_set_space(mdev, MLX5_SEMAPHORE_SPACE_DOMAIN);
+       if (ret)
+               return ret;
+
+       /* Get a unique ID based on the counter */
+       id = pci_read_config(dev, vsc_addr + MLX5_VSC_COUNTER_OFFSET, 4);
+
+       /* Try to modify lock */
+       ret = mlx5_vsc_write(mdev, addr, &id);
+       if (ret)
+               return ret;
+
+       /* Verify */
+       ret = mlx5_vsc_read(mdev, addr, &data);
+       if (ret)
+               return ret;
+       if (data != id)
+               return EBUSY;
+
+       return 0;
+}
+
+int mlx5_vsc_unlock_addr_space(struct mlx5_core_dev *mdev, u32 addr)
+{
+       u32 data = 0;
+       int ret;
+
+       ret = mlx5_vsc_set_space(mdev, MLX5_SEMAPHORE_SPACE_DOMAIN);
+       if (ret)
+               return ret;
+
+       /* Try to modify lock */
+       ret = mlx5_vsc_write(mdev, addr, &data);
+       if (ret)
+               return ret;
+
+       /* Verify */
+       ret = mlx5_vsc_read(mdev, addr, &data);
+       if (ret)
+               return ret;
+       if (data != 0)
+               return EBUSY;
 
        return 0;
 }

Modified: head/sys/modules/mlx5/Makefile
==============================================================================
--- head/sys/modules/mlx5/Makefile      Tue Jul 17 10:11:00 2018        
(r336396)
+++ head/sys/modules/mlx5/Makefile      Tue Jul 17 10:16:32 2018        
(r336397)
@@ -6,7 +6,6 @@ SRCS= \
 mlx5_alloc.c \
 mlx5_cmd.c \
 mlx5_cq.c \
-mlx5_crspace.c \
 mlx5_diagnostics.c \
 mlx5_eq.c \
 mlx5_fs_cmd.c \
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to