sfc: Change falcon_probe_board() to fail for unsupported boards
The driver needs specific PHY and board support code for each SFC4000 board; there is no point trying to continue if it is missing. Currently unsupported boards can trigger an 'oops'. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Cc: stable@kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f49a4589e9
commit
e41c11ee0c
@ -1320,7 +1320,9 @@ static int falcon_probe_nvconfig(struct efx_nic *efx)
|
||||
|
||||
EFX_LOG(efx, "PHY is %d phy_id %d\n", efx->phy_type, efx->mdio.prtad);
|
||||
|
||||
falcon_probe_board(efx, board_rev);
|
||||
rc = falcon_probe_board(efx, board_rev);
|
||||
if (rc)
|
||||
goto fail2;
|
||||
|
||||
kfree(nvconfig);
|
||||
return 0;
|
||||
|
@ -728,15 +728,7 @@ static const struct falcon_board_type board_types[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static const struct falcon_board_type falcon_dummy_board = {
|
||||
.init = efx_port_dummy_op_int,
|
||||
.init_phy = efx_port_dummy_op_void,
|
||||
.fini = efx_port_dummy_op_void,
|
||||
.set_id_led = efx_port_dummy_op_set_id_led,
|
||||
.monitor = efx_port_dummy_op_int,
|
||||
};
|
||||
|
||||
void falcon_probe_board(struct efx_nic *efx, u16 revision_info)
|
||||
int falcon_probe_board(struct efx_nic *efx, u16 revision_info)
|
||||
{
|
||||
struct falcon_board *board = falcon_board(efx);
|
||||
u8 type_id = FALCON_BOARD_TYPE(revision_info);
|
||||
@ -754,8 +746,9 @@ void falcon_probe_board(struct efx_nic *efx, u16 revision_info)
|
||||
(efx->pci_dev->subsystem_vendor == EFX_VENDID_SFC)
|
||||
? board->type->ref_model : board->type->gen_type,
|
||||
'A' + board->major, board->minor);
|
||||
return 0;
|
||||
} else {
|
||||
EFX_ERR(efx, "unknown board type %d\n", type_id);
|
||||
board->type = &falcon_dummy_board;
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
@ -156,7 +156,7 @@ extern struct efx_nic_type siena_a0_nic_type;
|
||||
**************************************************************************
|
||||
*/
|
||||
|
||||
extern void falcon_probe_board(struct efx_nic *efx, u16 revision_info);
|
||||
extern int falcon_probe_board(struct efx_nic *efx, u16 revision_info);
|
||||
|
||||
/* TX data path */
|
||||
extern int efx_nic_probe_tx(struct efx_tx_queue *tx_queue);
|
||||
|
Loading…
Reference in New Issue
Block a user