]> Pileus Git - ~andy/linux/blobdiff - drivers/net/sfc/siena.c
sfc: Implement NVRAM selftest for SFC9000 family
[~andy/linux] / drivers / net / sfc / siena.c
index f8c6771e66d861488bd12fc69d51346a0fedebb6..8e1311284718c8151cef316debd25ebf0eb9af96 100644 (file)
@@ -106,16 +106,11 @@ static int siena_probe_port(struct efx_nic *efx)
        efx->mdio.mdio_read = siena_mdio_read;
        efx->mdio.mdio_write = siena_mdio_write;
 
-       /* Fill out MDIO structure and loopback modes */
+       /* Fill out MDIO structure, loopback modes, and initial link state */
        rc = efx->phy_op->probe(efx);
        if (rc != 0)
                return rc;
 
-       /* Initial assumption */
-       efx->link_state.speed = 10000;
-       efx->link_state.fd = true;
-       efx->wanted_fc = EFX_FC_RX | EFX_FC_TX;
-
        /* Allocate buffer for stats */
        rc = efx_nic_alloc_buffer(efx, &efx->stats_buffer,
                                  MC_CMD_MAC_NSTATS * sizeof(u64));
@@ -181,6 +176,12 @@ static int siena_test_registers(struct efx_nic *efx)
 
 static int siena_reset_hw(struct efx_nic *efx, enum reset_type method)
 {
+       int rc;
+
+       /* Recover from a failed assertion pre-reset */
+       rc = efx_mcdi_handle_assertion(efx);
+       if (rc)
+               return rc;
 
        if (method == RESET_TYPE_WORLD)
                return efx_mcdi_reset_mc(efx);
@@ -582,6 +583,7 @@ struct efx_nic_type siena_a0_nic_type = {
        .set_wol = siena_set_wol,
        .resume_wol = siena_init_wol,
        .test_registers = siena_test_registers,
+       .test_nvram = efx_mcdi_nvram_test_all,
        .default_mac_ops = &efx_mcdi_mac_operations,
 
        .revision = EFX_REV_SIENA_A0,