On Wed, Feb 08, 2023 at 02:25:15PM +0000, alejandro.lucero-palau@xxxxxxx wrote: > From: Alejandro Lucero <alejandro.lucero-palau@xxxxxxx> > > Obtaining mport id is based on asking the firmware about it. This is > still needed for mport initialization itself, but once the mport data is > now kept by the driver, further mport id request can be satisfied > internally without firmware interaction. > > Previous function is just modified in name making clear the firmware > interaction. The new function uses the old name and looks for the data > in the mport data structure. > > Signed-off-by: Alejandro Lucero <alejandro.lucero-palau@xxxxxxx> Acked-by: Martin Habets <habetsm.xilinx@xxxxxxxxx> > --- > drivers/net/ethernet/sfc/ef100_nic.c | 4 ++-- > drivers/net/ethernet/sfc/ef100_rep.c | 5 +---- > drivers/net/ethernet/sfc/mae.c | 27 ++++++++++++++++++++++++++- > drivers/net/ethernet/sfc/mae.h | 2 ++ > 4 files changed, 31 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/ethernet/sfc/ef100_nic.c b/drivers/net/ethernet/sfc/ef100_nic.c > index 07e7dca0e4f2..aa11f0925e27 100644 > --- a/drivers/net/ethernet/sfc/ef100_nic.c > +++ b/drivers/net/ethernet/sfc/ef100_nic.c > @@ -736,7 +736,7 @@ static int efx_ef100_get_base_mport(struct efx_nic *efx) > /* Construct mport selector for "physical network port" */ > efx_mae_mport_wire(efx, &selector); > /* Look up actual mport ID */ > - rc = efx_mae_lookup_mport(efx, selector, &id); > + rc = efx_mae_fw_lookup_mport(efx, selector, &id); > if (rc) > return rc; > /* The ID should always fit in 16 bits, because that's how wide the > @@ -751,7 +751,7 @@ static int efx_ef100_get_base_mport(struct efx_nic *efx) > /* Construct mport selector for "calling PF" */ > efx_mae_mport_uplink(efx, &selector); > /* Look up actual mport ID */ > - rc = efx_mae_lookup_mport(efx, selector, &id); > + rc = efx_mae_fw_lookup_mport(efx, selector, &id); > if (rc) > return rc; > if (id >> 16) > diff --git a/drivers/net/ethernet/sfc/ef100_rep.c b/drivers/net/ethernet/sfc/ef100_rep.c > index ebe7b1275713..9cd1a3ac67e0 100644 > --- a/drivers/net/ethernet/sfc/ef100_rep.c > +++ b/drivers/net/ethernet/sfc/ef100_rep.c > @@ -243,14 +243,11 @@ static struct efx_rep *efx_ef100_rep_create_netdev(struct efx_nic *efx, > static int efx_ef100_configure_rep(struct efx_rep *efv) > { > struct efx_nic *efx = efv->parent; > - u32 selector; > int rc; > > efv->rx_pring_size = EFX_REP_DEFAULT_PSEUDO_RING_SIZE; > - /* Construct mport selector for corresponding VF */ > - efx_mae_mport_vf(efx, efv->idx, &selector); > /* Look up actual mport ID */ > - rc = efx_mae_lookup_mport(efx, selector, &efv->mport); > + rc = efx_mae_lookup_mport(efx, efv->idx, &efv->mport); > if (rc) > return rc; > pci_dbg(efx->pci_dev, "VF %u has mport ID %#x\n", efv->idx, efv->mport); > diff --git a/drivers/net/ethernet/sfc/mae.c b/drivers/net/ethernet/sfc/mae.c > index 725a3ab31087..6321fd393fc3 100644 > --- a/drivers/net/ethernet/sfc/mae.c > +++ b/drivers/net/ethernet/sfc/mae.c > @@ -97,7 +97,7 @@ void efx_mae_mport_mport(struct efx_nic *efx __always_unused, u32 mport_id, u32 > } > > /* id is really only 24 bits wide */ > -int efx_mae_lookup_mport(struct efx_nic *efx, u32 selector, u32 *id) > +int efx_mae_fw_lookup_mport(struct efx_nic *efx, u32 selector, u32 *id) > { > MCDI_DECLARE_BUF(outbuf, MC_CMD_MAE_MPORT_LOOKUP_OUT_LEN); > MCDI_DECLARE_BUF(inbuf, MC_CMD_MAE_MPORT_LOOKUP_IN_LEN); > @@ -488,6 +488,31 @@ int efx_mae_free_counter(struct efx_nic *efx, struct efx_tc_counter *cnt) > return 0; > } > > +int efx_mae_lookup_mport(struct efx_nic *efx, u32 vf_idx, u32 *id) > +{ > + struct ef100_nic_data *nic_data = efx->nic_data; > + struct efx_mae *mae = efx->mae; > + struct rhashtable_iter walk; > + struct mae_mport_desc *m; > + int rc = -ENOENT; > + > + rhashtable_walk_enter(&mae->mports_ht, &walk); > + rhashtable_walk_start(&walk); > + while ((m = rhashtable_walk_next(&walk)) != NULL) { > + if (m->mport_type == MAE_MPORT_DESC_MPORT_TYPE_VNIC && > + m->interface_idx == nic_data->local_mae_intf && > + m->pf_idx == 0 && > + m->vf_idx == vf_idx) { > + *id = m->mport_id; > + rc = 0; > + break; > + } > + } > + rhashtable_walk_stop(&walk); > + rhashtable_walk_exit(&walk); > + return rc; > +} > + > static bool efx_mae_asl_id(u32 id) > { > return !!(id & BIT(31)); > diff --git a/drivers/net/ethernet/sfc/mae.h b/drivers/net/ethernet/sfc/mae.h > index daa29d2cde96..b9bf86c47cda 100644 > --- a/drivers/net/ethernet/sfc/mae.h > +++ b/drivers/net/ethernet/sfc/mae.h > @@ -96,4 +96,6 @@ int efx_mae_delete_rule(struct efx_nic *efx, u32 id); > int efx_init_mae(struct efx_nic *efx); > void efx_fini_mae(struct efx_nic *efx); > void efx_mae_remove_mport(void *desc, void *arg); > +int efx_mae_fw_lookup_mport(struct efx_nic *efx, u32 selector, u32 *id); > +int efx_mae_lookup_mport(struct efx_nic *efx, u32 vf, u32 *id); > #endif /* EF100_MAE_H */ > -- > 2.17.1