net/sfc/base: extend NVRAM RW finish to return verify result
authorAndy Moreton <amoreton@solarflare.com>
Thu, 16 Nov 2017 08:03:54 +0000 (08:03 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 16 Jan 2018 17:47:49 +0000 (18:47 +0100)
Extend efx_nvram_rw_finish() to return firmware verify result code.

Signed-off-by: Andy Moreton <amoreton@solarflare.com>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
drivers/net/sfc/base/efx.h
drivers/net/sfc/base/efx_bootcfg.c
drivers/net/sfc/base/efx_nvram.c

index 57fba05..3bde46f 100644 (file)
@@ -1411,7 +1411,8 @@ efx_nvram_rw_start(
 extern __checkReturn           efx_rc_t
 efx_nvram_rw_finish(
        __in                    efx_nic_t *enp,
-       __in                    efx_nvram_type_t type);
+       __in                    efx_nvram_type_t type,
+       __out_opt               uint32_t *verify_resultp);
 
 extern __checkReturn           efx_rc_t
 efx_nvram_get_version(
index d589c86..c47d16b 100644 (file)
@@ -345,11 +345,11 @@ efx_bootcfg_read(
 
        if ((rc = efx_nvram_read_chunk(enp, EFX_NVRAM_BOOTROM_CFG,
            sector_offset, (caddr_t)payload, sector_length)) != 0) {
-               (void) efx_nvram_rw_finish(enp, EFX_NVRAM_BOOTROM_CFG);
+               (void) efx_nvram_rw_finish(enp, EFX_NVRAM_BOOTROM_CFG, NULL);
                goto fail6;
        }
 
-       if ((rc = efx_nvram_rw_finish(enp, EFX_NVRAM_BOOTROM_CFG)) != 0)
+       if ((rc = efx_nvram_rw_finish(enp, EFX_NVRAM_BOOTROM_CFG, NULL)) != 0)
                goto fail7;
 
        /* Verify that the area is correctly formatted and checksummed */
@@ -521,7 +521,7 @@ efx_bootcfg_write(
                    0, (caddr_t)partn_data, partn_length)) != 0)
                goto fail11;
 
-       if ((rc = efx_nvram_rw_finish(enp, EFX_NVRAM_BOOTROM_CFG)) != 0)
+       if ((rc = efx_nvram_rw_finish(enp, EFX_NVRAM_BOOTROM_CFG, NULL)) != 0)
                goto fail12;
 
        EFSYS_KMEM_FREE(enp->en_esip, partn_length, partn_data);
@@ -537,7 +537,7 @@ fail10:
 fail9:
        EFSYS_PROBE(fail9);
 
-       (void) efx_nvram_rw_finish(enp, EFX_NVRAM_BOOTROM_CFG);
+       (void) efx_nvram_rw_finish(enp, EFX_NVRAM_BOOTROM_CFG, NULL);
 fail8:
        EFSYS_PROBE(fail8);
 
index 773bc10..6e18e44 100644 (file)
@@ -362,11 +362,12 @@ fail1:
        __checkReturn           efx_rc_t
 efx_nvram_rw_finish(
        __in                    efx_nic_t *enp,
-       __in                    efx_nvram_type_t type)
+       __in                    efx_nvram_type_t type,
+       __out_opt               uint32_t *verify_resultp)
 {
        const efx_nvram_ops_t *envop = enp->en_envop;
        uint32_t partn;
-       uint32_t verify_result;
+       uint32_t verify_result = 0;
        efx_rc_t rc;
 
        EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
@@ -385,6 +386,9 @@ efx_nvram_rw_finish(
 
        enp->en_nvram_locked = EFX_NVRAM_INVALID;
 
+       if (verify_resultp != NULL)
+               *verify_resultp = verify_result;
+
        return (0);
 
 fail2:
@@ -394,6 +398,10 @@ fail2:
 fail1:
        EFSYS_PROBE1(fail1, efx_rc_t, rc);
 
+       /* Always report verification result */
+       if (verify_resultp != NULL)
+               *verify_resultp = verify_result;
+
        return (rc);
 }