Skip to content

Commit

Permalink
sfc: Change falcon_probe_board() to fail for unsupported boards
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ben Hutchings authored and David S. Miller committed Apr 28, 2010
1 parent f49a458 commit e41c11e
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 12 deletions.
4 changes: 3 additions & 1 deletion drivers/net/sfc/falcon.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
13 changes: 3 additions & 10 deletions drivers/net/sfc/falcon_boards.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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;
}
}
2 changes: 1 addition & 1 deletion drivers/net/sfc/nic.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit e41c11e

Please sign in to comment.