Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e41c11ee authored by Ben Hutchings's avatar Ben Hutchings Committed by David S. Miller
Browse files

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: default avatarBen Hutchings <bhutchings@solarflare.com>
Cc: stable@kernel.org
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f49a4589
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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;
+3 −10
Original line number Diff line number Diff line
@@ -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;
	}
}
+1 −1
Original line number Diff line number Diff line
@@ -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);