Commit 6f7f8aa6 authored by Shradha Shah's avatar Shradha Shah Committed by David S. Miller

sfc: Bind the sfc driver to any available VF's

Add the device ID of the VF to the PCI device ID table.

Added a boolean flag is_vf in efx_nic_type to differentiate
between a VF and PF at probe time. This flag is useful in later
patches while setting MAC address specially in the
PCI-passthrough case.
Signed-off-by: default avatarShradha Shah <sshah@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 267c0157
...@@ -3810,6 +3810,7 @@ static int efx_ef10_ptp_set_ts_config(struct efx_nic *efx, ...@@ -3810,6 +3810,7 @@ static int efx_ef10_ptp_set_ts_config(struct efx_nic *efx,
} }
const struct efx_nic_type efx_hunt_a0_vf_nic_type = { const struct efx_nic_type efx_hunt_a0_vf_nic_type = {
.is_vf = true,
.mem_bar = EFX_MEM_VF_BAR, .mem_bar = EFX_MEM_VF_BAR,
.mem_map_size = efx_ef10_mem_map_size, .mem_map_size = efx_ef10_mem_map_size,
.probe = efx_ef10_probe_vf, .probe = efx_ef10_probe_vf,
...@@ -3907,6 +3908,7 @@ const struct efx_nic_type efx_hunt_a0_vf_nic_type = { ...@@ -3907,6 +3908,7 @@ const struct efx_nic_type efx_hunt_a0_vf_nic_type = {
}; };
const struct efx_nic_type efx_hunt_a0_nic_type = { const struct efx_nic_type efx_hunt_a0_nic_type = {
.is_vf = false,
.mem_bar = EFX_MEM_BAR, .mem_bar = EFX_MEM_BAR,
.mem_map_size = efx_ef10_mem_map_size, .mem_map_size = efx_ef10_mem_map_size,
.probe = efx_ef10_probe_pf, .probe = efx_ef10_probe_pf,
......
...@@ -1454,6 +1454,7 @@ static int efx_probe_interrupts(struct efx_nic *efx) ...@@ -1454,6 +1454,7 @@ static int efx_probe_interrupts(struct efx_nic *efx)
} }
#endif #endif
efx->rss_spread = efx->n_rx_channels; efx->rss_spread = efx->n_rx_channels;
return 0; return 0;
} }
...@@ -2676,6 +2677,8 @@ static const struct pci_device_id efx_pci_table[] = { ...@@ -2676,6 +2677,8 @@ static const struct pci_device_id efx_pci_table[] = {
.driver_data = (unsigned long) &siena_a0_nic_type}, .driver_data = (unsigned long) &siena_a0_nic_type},
{PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x0903), /* SFC9120 PF */ {PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x0903), /* SFC9120 PF */
.driver_data = (unsigned long) &efx_hunt_a0_nic_type}, .driver_data = (unsigned long) &efx_hunt_a0_nic_type},
{PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x1903), /* SFC9120 VF */
.driver_data = (unsigned long) &efx_hunt_a0_vf_nic_type},
{PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x0923), /* SFC9140 PF */ {PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x0923), /* SFC9140 PF */
.driver_data = (unsigned long) &efx_hunt_a0_nic_type}, .driver_data = (unsigned long) &efx_hunt_a0_nic_type},
{0} /* end of list */ {0} /* end of list */
...@@ -3031,6 +3034,7 @@ static int efx_pci_probe(struct pci_dev *pci_dev, ...@@ -3031,6 +3034,7 @@ static int efx_pci_probe(struct pci_dev *pci_dev,
netif_info(efx, probe, efx->net_dev, netif_info(efx, probe, efx->net_dev,
"Solarflare NIC detected\n"); "Solarflare NIC detected\n");
if (!efx->type->is_vf)
efx_probe_vpd_strings(efx); efx_probe_vpd_strings(efx);
/* Set up basic I/O (BAR mappings etc) */ /* Set up basic I/O (BAR mappings etc) */
......
...@@ -2700,6 +2700,7 @@ static int falcon_set_wol(struct efx_nic *efx, u32 type) ...@@ -2700,6 +2700,7 @@ static int falcon_set_wol(struct efx_nic *efx, u32 type)
*/ */
const struct efx_nic_type falcon_a1_nic_type = { const struct efx_nic_type falcon_a1_nic_type = {
.is_vf = false,
.mem_bar = EFX_MEM_BAR, .mem_bar = EFX_MEM_BAR,
.mem_map_size = falcon_a1_mem_map_size, .mem_map_size = falcon_a1_mem_map_size,
.probe = falcon_probe_nic, .probe = falcon_probe_nic,
...@@ -2797,6 +2798,7 @@ const struct efx_nic_type falcon_a1_nic_type = { ...@@ -2797,6 +2798,7 @@ const struct efx_nic_type falcon_a1_nic_type = {
}; };
const struct efx_nic_type falcon_b0_nic_type = { const struct efx_nic_type falcon_b0_nic_type = {
.is_vf = false,
.mem_bar = EFX_MEM_BAR, .mem_bar = EFX_MEM_BAR,
.mem_map_size = falcon_b0_mem_map_size, .mem_map_size = falcon_b0_mem_map_size,
.probe = falcon_probe_nic, .probe = falcon_probe_nic,
......
...@@ -1186,16 +1186,6 @@ static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating, ...@@ -1186,16 +1186,6 @@ static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating,
* and are completely trusted by firmware. Abort probing * and are completely trusted by firmware. Abort probing
* if that's not true for this function. * if that's not true for this function.
*/ */
if (driver_operating &&
(efx->mcdi->fn_flags &
(1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL |
1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED)) !=
(1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL |
1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED)) {
netif_err(efx, probe, efx->net_dev,
"This driver version only supports one function per port\n");
return -ENODEV;
}
if (was_attached != NULL) if (was_attached != NULL)
*was_attached = MCDI_DWORD(outbuf, DRV_ATTACH_OUT_OLD_STATE); *was_attached = MCDI_DWORD(outbuf, DRV_ATTACH_OUT_OLD_STATE);
......
...@@ -1224,6 +1224,7 @@ struct efx_mtd_partition { ...@@ -1224,6 +1224,7 @@ struct efx_mtd_partition {
* @hwtstamp_filters: Mask of hardware timestamp filter types supported * @hwtstamp_filters: Mask of hardware timestamp filter types supported
*/ */
struct efx_nic_type { struct efx_nic_type {
bool is_vf;
unsigned int mem_bar; unsigned int mem_bar;
unsigned int (*mem_map_size)(struct efx_nic *efx); unsigned int (*mem_map_size)(struct efx_nic *efx);
int (*probe)(struct efx_nic *efx); int (*probe)(struct efx_nic *efx);
......
...@@ -917,6 +917,7 @@ static int siena_mtd_probe(struct efx_nic *efx) ...@@ -917,6 +917,7 @@ static int siena_mtd_probe(struct efx_nic *efx)
*/ */
const struct efx_nic_type siena_a0_nic_type = { const struct efx_nic_type siena_a0_nic_type = {
.is_vf = false,
.mem_bar = EFX_MEM_BAR, .mem_bar = EFX_MEM_BAR,
.mem_map_size = siena_mem_map_size, .mem_map_size = siena_mem_map_size,
.probe = siena_probe_nic, .probe = siena_probe_nic,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment