svn commit: r336397 - in head/sys: conf dev/mlx5 dev/mlx5/mlx5_core modules/mlx5
Hans Petter Selasky
hselasky at FreeBSD.org
Tue Jul 17 10:16:34 UTC 2018
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 \
More information about the svn-src-all
mailing list