mirror of
https://github.com/torvalds/linux.git
synced 2024-12-06 02:52:22 +00:00
Merge branch 'mlx4-misc-next'
Tariq Toukan says:
====================
mlx4_core misc for 4.18
This patchset contains misc enhancements from the team
to the mlx4 Core driver.
Patch 1 by Eran adds driver version report in FW.
Patch 2 by Yishai implements suspend/resume PCI callbacks.
Patch 3 extends the range of an existing module param from boolean to numerical.
Series generated against net-next commit:
53a7bdfb2a
dt-bindings: dsa: Remove unnecessary #address/#size-cells
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
79a6fd2327
@ -165,6 +165,7 @@ static void dump_dev_cap_flags2(struct mlx4_dev *dev, u64 flags)
|
||||
[36] = "QinQ VST mode support",
|
||||
[37] = "sl to vl mapping table change event support",
|
||||
[38] = "user MAC support",
|
||||
[39] = "Report driver version to FW support",
|
||||
};
|
||||
int i;
|
||||
|
||||
@ -1038,6 +1039,8 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
|
||||
dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_ETH_BACKPL_AN_REP;
|
||||
if (field32 & (1 << 7))
|
||||
dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_RECOVERABLE_ERROR_EVENT;
|
||||
if (field32 & (1 << 8))
|
||||
dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_DRIVER_VERSION_TO_FW;
|
||||
MLX4_GET(field32, outbox, QUERY_DEV_CAP_DIAG_RPRT_PER_PORT);
|
||||
if (field32 & (1 << 17))
|
||||
dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT;
|
||||
@ -1860,6 +1863,8 @@ int mlx4_INIT_HCA(struct mlx4_dev *dev, struct mlx4_init_hca_param *param)
|
||||
#define INIT_HCA_UC_STEERING_OFFSET (INIT_HCA_MCAST_OFFSET + 0x18)
|
||||
#define INIT_HCA_LOG_MC_TABLE_SZ_OFFSET (INIT_HCA_MCAST_OFFSET + 0x1b)
|
||||
#define INIT_HCA_DEVICE_MANAGED_FLOW_STEERING_EN 0x6
|
||||
#define INIT_HCA_DRIVER_VERSION_OFFSET 0x140
|
||||
#define INIT_HCA_DRIVER_VERSION_SZ 0x40
|
||||
#define INIT_HCA_FS_PARAM_OFFSET 0x1d0
|
||||
#define INIT_HCA_FS_BASE_OFFSET (INIT_HCA_FS_PARAM_OFFSET + 0x00)
|
||||
#define INIT_HCA_FS_LOG_ENTRY_SZ_OFFSET (INIT_HCA_FS_PARAM_OFFSET + 0x12)
|
||||
@ -1950,6 +1955,13 @@ int mlx4_INIT_HCA(struct mlx4_dev *dev, struct mlx4_init_hca_param *param)
|
||||
if (dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_RECOVERABLE_ERROR_EVENT)
|
||||
*(inbox + INIT_HCA_RECOVERABLE_ERROR_EVENT_OFFSET / 4) |= cpu_to_be32(1 << 31);
|
||||
|
||||
if (dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_DRIVER_VERSION_TO_FW) {
|
||||
u8 *dst = (u8 *)(inbox + INIT_HCA_DRIVER_VERSION_OFFSET / 4);
|
||||
|
||||
strncpy(dst, DRV_NAME_FOR_FW, INIT_HCA_DRIVER_VERSION_SZ - 1);
|
||||
mlx4_dbg(dev, "Reporting Driver Version to FW: %s\n", dst);
|
||||
}
|
||||
|
||||
/* QPC/EEC/CQC/EQC/RDMARC attributes */
|
||||
|
||||
MLX4_PUT(inbox, param->qpc_base, INIT_HCA_QPC_BASE_OFFSET);
|
||||
|
@ -73,7 +73,7 @@ MODULE_PARM_DESC(debug_level, "Enable debug tracing if > 0");
|
||||
|
||||
static int msi_x = 1;
|
||||
module_param(msi_x, int, 0444);
|
||||
MODULE_PARM_DESC(msi_x, "attempt to use MSI-X if nonzero");
|
||||
MODULE_PARM_DESC(msi_x, "0 - don't use MSI-X, 1 - use MSI-X, >1 - limit number of MSI-X irqs to msi_x");
|
||||
|
||||
#else /* CONFIG_PCI_MSI */
|
||||
|
||||
@ -2815,6 +2815,9 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
|
||||
dev->caps.num_eqs - dev->caps.reserved_eqs,
|
||||
MAX_MSIX);
|
||||
|
||||
if (msi_x > 1)
|
||||
nreq = min_t(int, nreq, msi_x);
|
||||
|
||||
entries = kcalloc(nreq, sizeof(*entries), GFP_KERNEL);
|
||||
if (!entries)
|
||||
goto no_msi;
|
||||
@ -4125,17 +4128,68 @@ static const struct pci_error_handlers mlx4_err_handler = {
|
||||
.resume = mlx4_pci_resume,
|
||||
};
|
||||
|
||||
static int mlx4_suspend(struct pci_dev *pdev, pm_message_t state)
|
||||
{
|
||||
struct mlx4_dev_persistent *persist = pci_get_drvdata(pdev);
|
||||
struct mlx4_dev *dev = persist->dev;
|
||||
|
||||
mlx4_err(dev, "suspend was called\n");
|
||||
mutex_lock(&persist->interface_state_mutex);
|
||||
if (persist->interface_state & MLX4_INTERFACE_STATE_UP)
|
||||
mlx4_unload_one(pdev);
|
||||
mutex_unlock(&persist->interface_state_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mlx4_resume(struct pci_dev *pdev)
|
||||
{
|
||||
struct mlx4_dev_persistent *persist = pci_get_drvdata(pdev);
|
||||
struct mlx4_dev *dev = persist->dev;
|
||||
struct mlx4_priv *priv = mlx4_priv(dev);
|
||||
int nvfs[MLX4_MAX_PORTS + 1] = {0, 0, 0};
|
||||
int total_vfs;
|
||||
int ret = 0;
|
||||
|
||||
mlx4_err(dev, "resume was called\n");
|
||||
total_vfs = dev->persist->num_vfs;
|
||||
memcpy(nvfs, dev->persist->nvfs, sizeof(dev->persist->nvfs));
|
||||
|
||||
mutex_lock(&persist->interface_state_mutex);
|
||||
if (!(persist->interface_state & MLX4_INTERFACE_STATE_UP)) {
|
||||
ret = mlx4_load_one(pdev, priv->pci_dev_data, total_vfs,
|
||||
nvfs, priv, 1);
|
||||
if (!ret) {
|
||||
ret = restore_current_port_types(dev,
|
||||
dev->persist->curr_port_type,
|
||||
dev->persist->curr_port_poss_type);
|
||||
if (ret)
|
||||
mlx4_err(dev, "resume: could not restore original port types (%d)\n", ret);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&persist->interface_state_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct pci_driver mlx4_driver = {
|
||||
.name = DRV_NAME,
|
||||
.id_table = mlx4_pci_table,
|
||||
.probe = mlx4_init_one,
|
||||
.shutdown = mlx4_shutdown,
|
||||
.remove = mlx4_remove_one,
|
||||
.suspend = mlx4_suspend,
|
||||
.resume = mlx4_resume,
|
||||
.err_handler = &mlx4_err_handler,
|
||||
};
|
||||
|
||||
static int __init mlx4_verify_params(void)
|
||||
{
|
||||
if (msi_x < 0) {
|
||||
pr_warn("mlx4_core: bad msi_x: %d\n", msi_x);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((log_num_mac < 0) || (log_num_mac > 7)) {
|
||||
pr_warn("mlx4_core: bad num_mac: %d\n", log_num_mac);
|
||||
return -1;
|
||||
|
@ -55,8 +55,8 @@
|
||||
#include "fw_qos.h"
|
||||
|
||||
#define DRV_NAME "mlx4_core"
|
||||
#define PFX DRV_NAME ": "
|
||||
#define DRV_VERSION "4.0-0"
|
||||
#define DRV_NAME_FOR_FW "Linux," DRV_NAME "," DRV_VERSION
|
||||
|
||||
#define MLX4_FS_UDP_UC_EN (1 << 1)
|
||||
#define MLX4_FS_TCP_UC_EN (1 << 2)
|
||||
|
@ -225,6 +225,7 @@ enum {
|
||||
MLX4_DEV_CAP_FLAG2_SVLAN_BY_QP = 1ULL << 36,
|
||||
MLX4_DEV_CAP_FLAG2_SL_TO_VL_CHANGE_EVENT = 1ULL << 37,
|
||||
MLX4_DEV_CAP_FLAG2_USER_MAC_EN = 1ULL << 38,
|
||||
MLX4_DEV_CAP_FLAG2_DRIVER_VERSION_TO_FW = 1ULL << 39,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
Loading…
Reference in New Issue
Block a user