sfc: Always start Falcon using the XMAC
The strap bits are only important on Falcon A and all production boards using it have fixed-speed 10G PHYs. Replace dummy MAC operations with default MAC operations. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ab86746175
commit
b895d73e98
3 changed files with 16 additions and 8 deletions
|
@ -1891,10 +1891,6 @@ bool efx_port_dummy_op_poll(struct efx_nic *efx)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct efx_mac_operations efx_dummy_mac_operations = {
|
|
||||||
.reconfigure = efx_port_dummy_op_void,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct efx_phy_operations efx_dummy_phy_operations = {
|
static struct efx_phy_operations efx_dummy_phy_operations = {
|
||||||
.init = efx_port_dummy_op_int,
|
.init = efx_port_dummy_op_int,
|
||||||
.reconfigure = efx_port_dummy_op_void,
|
.reconfigure = efx_port_dummy_op_void,
|
||||||
|
@ -1936,7 +1932,7 @@ static int efx_init_struct(struct efx_nic *efx, struct efx_nic_type *type,
|
||||||
spin_lock_init(&efx->netif_stop_lock);
|
spin_lock_init(&efx->netif_stop_lock);
|
||||||
spin_lock_init(&efx->stats_lock);
|
spin_lock_init(&efx->stats_lock);
|
||||||
mutex_init(&efx->mac_lock);
|
mutex_init(&efx->mac_lock);
|
||||||
efx->mac_op = &efx_dummy_mac_operations;
|
efx->mac_op = type->default_mac_ops;
|
||||||
efx->phy_op = &efx_dummy_phy_operations;
|
efx->phy_op = &efx_dummy_phy_operations;
|
||||||
efx->mdio.dev = net_dev;
|
efx->mdio.dev = net_dev;
|
||||||
INIT_WORK(&efx->mac_work, efx_mac_work);
|
INIT_WORK(&efx->mac_work, efx_mac_work);
|
||||||
|
|
|
@ -2291,6 +2291,10 @@ int falcon_probe_port(struct efx_nic *efx)
|
||||||
efx->mdio.mdio_read = falcon_mdio_read;
|
efx->mdio.mdio_read = falcon_mdio_read;
|
||||||
efx->mdio.mdio_write = falcon_mdio_write;
|
efx->mdio.mdio_write = falcon_mdio_write;
|
||||||
|
|
||||||
|
/* Initial assumption */
|
||||||
|
efx->link_state.speed = 10000;
|
||||||
|
efx->link_state.fd = true;
|
||||||
|
|
||||||
/* Hardware flow ctrl. FalconA RX FIFO too small for pause generation */
|
/* Hardware flow ctrl. FalconA RX FIFO too small for pause generation */
|
||||||
if (falcon_rev(efx) >= FALCON_REV_B0)
|
if (falcon_rev(efx) >= FALCON_REV_B0)
|
||||||
efx->wanted_fc = EFX_FC_RX | EFX_FC_TX;
|
efx->wanted_fc = EFX_FC_RX | EFX_FC_TX;
|
||||||
|
@ -2809,6 +2813,10 @@ static int falcon_probe_nic_variant(struct efx_nic *efx)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
case FALCON_REV_A1:
|
case FALCON_REV_A1:
|
||||||
|
if (EFX_OWORD_FIELD(nic_stat, FRF_AB_STRAP_10G) == 0) {
|
||||||
|
EFX_ERR(efx, "Falcon rev A1 1G not supported\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
if (EFX_OWORD_FIELD(nic_stat, FRF_AA_STRAP_PCIE) == 0) {
|
if (EFX_OWORD_FIELD(nic_stat, FRF_AA_STRAP_PCIE) == 0) {
|
||||||
EFX_ERR(efx, "Falcon rev A1 PCI-X not supported\n");
|
EFX_ERR(efx, "Falcon rev A1 PCI-X not supported\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
@ -2823,9 +2831,6 @@ static int falcon_probe_nic_variant(struct efx_nic *efx)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initial assumed speed */
|
|
||||||
efx->link_state.speed = EFX_OWORD_FIELD(nic_stat, FRF_AB_STRAP_10G) ? 10000 : 1000;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3238,6 +3243,8 @@ void falcon_stop_nic_stats(struct efx_nic *efx)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct efx_nic_type falcon_a_nic_type = {
|
struct efx_nic_type falcon_a_nic_type = {
|
||||||
|
.default_mac_ops = &falcon_xmac_operations,
|
||||||
|
|
||||||
.mem_map_size = 0x20000,
|
.mem_map_size = 0x20000,
|
||||||
.txd_ptr_tbl_base = FR_AA_TX_DESC_PTR_TBL_KER,
|
.txd_ptr_tbl_base = FR_AA_TX_DESC_PTR_TBL_KER,
|
||||||
.rxd_ptr_tbl_base = FR_AA_RX_DESC_PTR_TBL_KER,
|
.rxd_ptr_tbl_base = FR_AA_RX_DESC_PTR_TBL_KER,
|
||||||
|
@ -3251,6 +3258,8 @@ struct efx_nic_type falcon_a_nic_type = {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct efx_nic_type falcon_b_nic_type = {
|
struct efx_nic_type falcon_b_nic_type = {
|
||||||
|
.default_mac_ops = &falcon_xmac_operations,
|
||||||
|
|
||||||
/* Map everything up to and including the RSS indirection
|
/* Map everything up to and including the RSS indirection
|
||||||
* table. Don't map MSI-X table, MSI-X PBA since Linux
|
* table. Don't map MSI-X table, MSI-X PBA since Linux
|
||||||
* requires that they not be mapped. */
|
* requires that they not be mapped. */
|
||||||
|
|
|
@ -843,6 +843,7 @@ static inline const char *efx_dev_name(struct efx_nic *efx)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct efx_nic_type - Efx device type definition
|
* struct efx_nic_type - Efx device type definition
|
||||||
|
* @default_mac_ops: efx_mac_operations to set at startup
|
||||||
* @mem_map_size: Memory BAR mapped size
|
* @mem_map_size: Memory BAR mapped size
|
||||||
* @txd_ptr_tbl_base: TX descriptor ring base address
|
* @txd_ptr_tbl_base: TX descriptor ring base address
|
||||||
* @rxd_ptr_tbl_base: RX descriptor ring base address
|
* @rxd_ptr_tbl_base: RX descriptor ring base address
|
||||||
|
@ -857,6 +858,8 @@ static inline const char *efx_dev_name(struct efx_nic *efx)
|
||||||
* descriptors
|
* descriptors
|
||||||
*/
|
*/
|
||||||
struct efx_nic_type {
|
struct efx_nic_type {
|
||||||
|
struct efx_mac_operations *default_mac_ops;
|
||||||
|
|
||||||
unsigned int mem_map_size;
|
unsigned int mem_map_size;
|
||||||
unsigned int txd_ptr_tbl_base;
|
unsigned int txd_ptr_tbl_base;
|
||||||
unsigned int rxd_ptr_tbl_base;
|
unsigned int rxd_ptr_tbl_base;
|
||||||
|
|
Loading…
Reference in a new issue