mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-08-22 00:42:01 +02:00

marvell/otx2 and mvpp2 do not support setting different keys for different RSS contexts. Contexts have separate indirection tables but key is shared with all other contexts. This is likely fine, indirection table is the most important piece. Don't report the key-related parameters from such drivers. This prevents driver-errors, e.g. otx2 always writes the main key, even when user asks to change per-context key. The second reason is that without this change tracking the keys by the core gets complicated. Even if the driver correctly reject setting key with rss_context != 0, change of the main key would have to be reflected in the XArray for all additional contexts. Since the additional contexts don't have their own keys not including the attributes (in Netlink speak) seems intuitive. ethtool CLI seems to deal with it just fine. Having to set the flag in majority of the drivers is a bit tedious but not reporting the key is a safer default. Reviewed-by: Edward Cree <ecree.xilinx@gmail.com> Reviewed-by: Joe Damato <jdamato@fastly.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
72 lines
2.6 KiB
C
72 lines
2.6 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/****************************************************************************
|
|
* Driver for Solarflare network controllers and boards
|
|
* Copyright 2018 Solarflare Communications Inc.
|
|
* Copyright 2019-2020 Xilinx Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 as published
|
|
* by the Free Software Foundation, incorporated herein by reference.
|
|
*/
|
|
#include <linux/module.h>
|
|
#include <linux/netdevice.h>
|
|
#include "net_driver.h"
|
|
#include "efx.h"
|
|
#include "mcdi_port_common.h"
|
|
#include "ethtool_common.h"
|
|
#include "ef100_ethtool.h"
|
|
#include "mcdi_functions.h"
|
|
|
|
/* This is the maximum number of descriptor rings supported by the QDMA */
|
|
#define EFX_EF100_MAX_DMAQ_SIZE 16384UL
|
|
|
|
static void
|
|
ef100_ethtool_get_ringparam(struct net_device *net_dev,
|
|
struct ethtool_ringparam *ring,
|
|
struct kernel_ethtool_ringparam *kernel_ring,
|
|
struct netlink_ext_ack *extack)
|
|
{
|
|
struct efx_nic *efx = efx_netdev_priv(net_dev);
|
|
|
|
ring->rx_max_pending = EFX_EF100_MAX_DMAQ_SIZE;
|
|
ring->tx_max_pending = EFX_EF100_MAX_DMAQ_SIZE;
|
|
ring->rx_pending = efx->rxq_entries;
|
|
ring->tx_pending = efx->txq_entries;
|
|
}
|
|
|
|
/* Ethtool options available
|
|
*/
|
|
const struct ethtool_ops ef100_ethtool_ops = {
|
|
.get_drvinfo = efx_ethtool_get_drvinfo,
|
|
.get_msglevel = efx_ethtool_get_msglevel,
|
|
.set_msglevel = efx_ethtool_set_msglevel,
|
|
.get_pauseparam = efx_ethtool_get_pauseparam,
|
|
.set_pauseparam = efx_ethtool_set_pauseparam,
|
|
.get_sset_count = efx_ethtool_get_sset_count,
|
|
.self_test = efx_ethtool_self_test,
|
|
.get_strings = efx_ethtool_get_strings,
|
|
.get_link_ksettings = efx_ethtool_get_link_ksettings,
|
|
.set_link_ksettings = efx_ethtool_set_link_ksettings,
|
|
.get_link = ethtool_op_get_link,
|
|
.get_ringparam = ef100_ethtool_get_ringparam,
|
|
.get_fecparam = efx_ethtool_get_fecparam,
|
|
.set_fecparam = efx_ethtool_set_fecparam,
|
|
.get_ethtool_stats = efx_ethtool_get_stats,
|
|
.get_rxnfc = efx_ethtool_get_rxnfc,
|
|
.set_rxnfc = efx_ethtool_set_rxnfc,
|
|
.reset = efx_ethtool_reset,
|
|
|
|
.get_rxfh_indir_size = efx_ethtool_get_rxfh_indir_size,
|
|
.get_rxfh_key_size = efx_ethtool_get_rxfh_key_size,
|
|
.rxfh_per_ctx_key = true,
|
|
.rxfh_priv_size = sizeof(struct efx_rss_context_priv),
|
|
.get_rxfh = efx_ethtool_get_rxfh,
|
|
.set_rxfh = efx_ethtool_set_rxfh,
|
|
.create_rxfh_context = efx_ethtool_create_rxfh_context,
|
|
.modify_rxfh_context = efx_ethtool_modify_rxfh_context,
|
|
.remove_rxfh_context = efx_ethtool_remove_rxfh_context,
|
|
|
|
.get_module_info = efx_ethtool_get_module_info,
|
|
.get_module_eeprom = efx_ethtool_get_module_eeprom,
|
|
};
|