diff options
author | Edward Cree <ecree.xilinx@gmail.com> | 2022-07-28 19:57:49 +0100 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2022-07-29 21:22:06 -0700 |
commit | 67ab160ed08f5bb55aff55aa41e6bde56cb83661 (patch) | |
tree | 611feea2a240f51fa9948d70dff15b1887d90f61 /drivers/net/ethernet/sfc/ef100_nic.c | |
parent | sfc: receive packets from EF100 VFs into representors (diff) | |
download | linux-dev-67ab160ed08f5bb55aff55aa41e6bde56cb83661.tar.xz linux-dev-67ab160ed08f5bb55aff55aa41e6bde56cb83661.zip |
sfc: insert default MAE rules to connect VFs to representors
Default rules are low-priority switching rules which the hardware uses
in the absence of higher-priority rules. Each representor requires a
corresponding rule matching traffic from its representee VF and
delivering to the PF (where a check on INGRESS_MPORT in
__ef100_rx_packet() will direct it to the representor). No rule is
required in the reverse direction, because representor TX uses a TX
override descriptor to bypass the MAE and deliver directly to the VF.
Since inserting any rule into the MAE disables the firmware's own
default rules, also insert a pair of rules to connect the PF to the
physical network port and vice-versa.
Signed-off-by: Edward Cree <ecree.xilinx@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/ethernet/sfc/ef100_nic.c')
-rw-r--r-- | drivers/net/ethernet/sfc/ef100_nic.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/net/ethernet/sfc/ef100_nic.c b/drivers/net/ethernet/sfc/ef100_nic.c index 393d6ca4525c..25cd43e3fcf7 100644 --- a/drivers/net/ethernet/sfc/ef100_nic.c +++ b/drivers/net/ethernet/sfc/ef100_nic.c @@ -1094,12 +1094,29 @@ int ef100_probe_netdev_pf(struct efx_nic *efx) return 0; #ifdef CONFIG_SFC_SRIOV + rc = efx_init_struct_tc(efx); + if (rc) + return rc; + rc = efx_ef100_get_base_mport(efx); if (rc) { netif_warn(efx, probe, net_dev, "Failed to probe base mport rc %d; representors will not function\n", rc); } + + rc = efx_init_tc(efx); + if (rc) { + /* Either we don't have an MAE at all (i.e. legacy v-switching), + * or we do but we failed to probe it. In the latter case, we + * may not have set up default rules, in which case we won't be + * able to pass any traffic. However, we don't fail the probe, + * because the user might need to use the netdevice to apply + * configuration changes to fix whatever's wrong with the MAE. + */ + netif_warn(efx, probe, net_dev, "Failed to probe MAE rc %d\n", + rc); + } #endif return 0; |