Commit 6c88b0b6 authored by Ben Hutchings's avatar Ben Hutchings Committed by David S. Miller

sfc: Remove broken automatic fallback for invalid Falcon chip/board config

If the Falcon board config is invalid, we cannot proceed - we do not
have a valid board type to pass to falcon_probe_board(), and if we
kluge that to work with an unknown board then other initialisation
code will crash.
Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 18e3ee2c
...@@ -1235,7 +1235,6 @@ static void falcon_remove_spi_devices(struct efx_nic *efx) ...@@ -1235,7 +1235,6 @@ static void falcon_remove_spi_devices(struct efx_nic *efx)
static int falcon_probe_nvconfig(struct efx_nic *efx) static int falcon_probe_nvconfig(struct efx_nic *efx)
{ {
struct falcon_nvconfig *nvconfig; struct falcon_nvconfig *nvconfig;
int board_rev;
int rc; int rc;
nvconfig = kmalloc(sizeof(*nvconfig), GFP_KERNEL); nvconfig = kmalloc(sizeof(*nvconfig), GFP_KERNEL);
...@@ -1243,37 +1242,25 @@ static int falcon_probe_nvconfig(struct efx_nic *efx) ...@@ -1243,37 +1242,25 @@ static int falcon_probe_nvconfig(struct efx_nic *efx)
return -ENOMEM; return -ENOMEM;
rc = falcon_read_nvram(efx, nvconfig); rc = falcon_read_nvram(efx, nvconfig);
if (rc == -EINVAL) { if (rc)
netif_err(efx, probe, efx->net_dev,
"NVRAM is invalid therefore using defaults\n");
efx->phy_type = PHY_TYPE_NONE;
efx->mdio.prtad = MDIO_PRTAD_NONE;
board_rev = 0;
rc = 0;
} else if (rc) {
goto fail1; goto fail1;
} else {
struct falcon_nvconfig_board_v2 *v2 = &nvconfig->board_v2; efx->phy_type = nvconfig->board_v2.port0_phy_type;
struct falcon_nvconfig_board_v3 *v3 = &nvconfig->board_v3; efx->mdio.prtad = nvconfig->board_v2.port0_phy_addr;
efx->phy_type = v2->port0_phy_type; if (le16_to_cpu(nvconfig->board_struct_ver) >= 3) {
efx->mdio.prtad = v2->port0_phy_addr; rc = falcon_spi_device_init(
board_rev = le16_to_cpu(v2->board_revision); efx, &efx->spi_flash, FFE_AB_SPI_DEVICE_FLASH,
le32_to_cpu(nvconfig->board_v3
if (le16_to_cpu(nvconfig->board_struct_ver) >= 3) { .spi_device_type[FFE_AB_SPI_DEVICE_FLASH]));
rc = falcon_spi_device_init( if (rc)
efx, &efx->spi_flash, FFE_AB_SPI_DEVICE_FLASH, goto fail2;
le32_to_cpu(v3->spi_device_type rc = falcon_spi_device_init(
[FFE_AB_SPI_DEVICE_FLASH])); efx, &efx->spi_eeprom, FFE_AB_SPI_DEVICE_EEPROM,
if (rc) le32_to_cpu(nvconfig->board_v3
goto fail2; .spi_device_type[FFE_AB_SPI_DEVICE_EEPROM]));
rc = falcon_spi_device_init( if (rc)
efx, &efx->spi_eeprom, FFE_AB_SPI_DEVICE_EEPROM, goto fail2;
le32_to_cpu(v3->spi_device_type
[FFE_AB_SPI_DEVICE_EEPROM]));
if (rc)
goto fail2;
}
} }
/* Read the MAC addresses */ /* Read the MAC addresses */
...@@ -1282,7 +1269,8 @@ static int falcon_probe_nvconfig(struct efx_nic *efx) ...@@ -1282,7 +1269,8 @@ static int falcon_probe_nvconfig(struct efx_nic *efx)
netif_dbg(efx, probe, efx->net_dev, "PHY is %d phy_id %d\n", netif_dbg(efx, probe, efx->net_dev, "PHY is %d phy_id %d\n",
efx->phy_type, efx->mdio.prtad); efx->phy_type, efx->mdio.prtad);
rc = falcon_probe_board(efx, board_rev); rc = falcon_probe_board(efx,
le16_to_cpu(nvconfig->board_v2.board_revision));
if (rc) if (rc)
goto fail2; goto fail2;
...@@ -1419,8 +1407,11 @@ static int falcon_probe_nic(struct efx_nic *efx) ...@@ -1419,8 +1407,11 @@ static int falcon_probe_nic(struct efx_nic *efx)
/* Read in the non-volatile configuration */ /* Read in the non-volatile configuration */
rc = falcon_probe_nvconfig(efx); rc = falcon_probe_nvconfig(efx);
if (rc) if (rc) {
if (rc == -EINVAL)
netif_err(efx, probe, efx->net_dev, "NVRAM is invalid\n");
goto fail5; goto fail5;
}
/* Initialise I2C adapter */ /* Initialise I2C adapter */
board = falcon_board(efx); board = falcon_board(efx);
......
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