mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 00:21:32 +00:00
mlx5: Move firmware flash implementation to devlink
Benefit from the devlink flash update implementation and ethtool fallback to it and move firmware flash implementation there. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Acked-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a9d204a644
commit
9c8bca2637
@ -1074,8 +1074,6 @@ u32 mlx5e_ethtool_get_rxfh_key_size(struct mlx5e_priv *priv);
|
||||
u32 mlx5e_ethtool_get_rxfh_indir_size(struct mlx5e_priv *priv);
|
||||
int mlx5e_ethtool_get_ts_info(struct mlx5e_priv *priv,
|
||||
struct ethtool_ts_info *info);
|
||||
int mlx5e_ethtool_flash_device(struct mlx5e_priv *priv,
|
||||
struct ethtool_flash *flash);
|
||||
void mlx5e_ethtool_get_pauseparam(struct mlx5e_priv *priv,
|
||||
struct ethtool_pauseparam *pauseparam);
|
||||
int mlx5e_ethtool_set_pauseparam(struct mlx5e_priv *priv,
|
||||
|
@ -1867,40 +1867,6 @@ static u32 mlx5e_get_priv_flags(struct net_device *netdev)
|
||||
return priv->channels.params.pflags;
|
||||
}
|
||||
|
||||
int mlx5e_ethtool_flash_device(struct mlx5e_priv *priv,
|
||||
struct ethtool_flash *flash)
|
||||
{
|
||||
struct mlx5_core_dev *mdev = priv->mdev;
|
||||
struct net_device *dev = priv->netdev;
|
||||
const struct firmware *fw;
|
||||
int err;
|
||||
|
||||
if (flash->region != ETHTOOL_FLASH_ALL_REGIONS)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
err = request_firmware_direct(&fw, flash->data, &dev->dev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
dev_hold(dev);
|
||||
rtnl_unlock();
|
||||
|
||||
err = mlx5_firmware_flash(mdev, fw);
|
||||
release_firmware(fw);
|
||||
|
||||
rtnl_lock();
|
||||
dev_put(dev);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int mlx5e_flash_device(struct net_device *dev,
|
||||
struct ethtool_flash *flash)
|
||||
{
|
||||
struct mlx5e_priv *priv = netdev_priv(dev);
|
||||
|
||||
return mlx5e_ethtool_flash_device(priv, flash);
|
||||
}
|
||||
|
||||
#ifndef CONFIG_MLX5_EN_RXNFC
|
||||
/* When CONFIG_MLX5_EN_RXNFC=n we only support ETHTOOL_GRXRINGS
|
||||
* otherwise this function will be defined from en_fs_ethtool.c
|
||||
@ -1939,7 +1905,6 @@ const struct ethtool_ops mlx5e_ethtool_ops = {
|
||||
#ifdef CONFIG_MLX5_EN_RXNFC
|
||||
.set_rxnfc = mlx5e_set_rxnfc,
|
||||
#endif
|
||||
.flash_device = mlx5e_flash_device,
|
||||
.get_tunable = mlx5e_get_tunable,
|
||||
.set_tunable = mlx5e_set_tunable,
|
||||
.get_pauseparam = mlx5e_get_pauseparam,
|
||||
|
@ -122,14 +122,6 @@ static int mlx5i_get_ts_info(struct net_device *netdev,
|
||||
return mlx5e_ethtool_get_ts_info(priv, info);
|
||||
}
|
||||
|
||||
static int mlx5i_flash_device(struct net_device *netdev,
|
||||
struct ethtool_flash *flash)
|
||||
{
|
||||
struct mlx5e_priv *priv = mlx5i_epriv(netdev);
|
||||
|
||||
return mlx5e_ethtool_flash_device(priv, flash);
|
||||
}
|
||||
|
||||
enum mlx5_ptys_width {
|
||||
MLX5_PTYS_WIDTH_1X = 1 << 0,
|
||||
MLX5_PTYS_WIDTH_2X = 1 << 1,
|
||||
@ -241,7 +233,6 @@ const struct ethtool_ops mlx5i_ethtool_ops = {
|
||||
.get_ethtool_stats = mlx5i_get_ethtool_stats,
|
||||
.get_ringparam = mlx5i_get_ringparam,
|
||||
.set_ringparam = mlx5i_set_ringparam,
|
||||
.flash_device = mlx5i_flash_device,
|
||||
.get_channels = mlx5i_get_channels,
|
||||
.set_channels = mlx5i_set_channels,
|
||||
.get_coalesce = mlx5i_get_coalesce,
|
||||
|
@ -1214,6 +1214,25 @@ out:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int mlx5_devlink_flash_update(struct devlink *devlink,
|
||||
const char *file_name,
|
||||
const char *component,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx5_core_dev *dev = devlink_priv(devlink);
|
||||
const struct firmware *fw;
|
||||
int err;
|
||||
|
||||
if (component)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
err = request_firmware_direct(&fw, file_name, &dev->pdev->dev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return mlx5_firmware_flash(dev, fw);
|
||||
}
|
||||
|
||||
static const struct devlink_ops mlx5_devlink_ops = {
|
||||
#ifdef CONFIG_MLX5_ESWITCH
|
||||
.eswitch_mode_set = mlx5_devlink_eswitch_mode_set,
|
||||
@ -1223,6 +1242,7 @@ static const struct devlink_ops mlx5_devlink_ops = {
|
||||
.eswitch_encap_mode_set = mlx5_devlink_eswitch_encap_mode_set,
|
||||
.eswitch_encap_mode_get = mlx5_devlink_eswitch_encap_mode_get,
|
||||
#endif
|
||||
.flash_update = mlx5_devlink_flash_update,
|
||||
};
|
||||
|
||||
static int mlx5_mdev_init(struct mlx5_core_dev *dev, int profile_idx)
|
||||
|
Loading…
Reference in New Issue
Block a user