Author: arybchik
Date: Fri Nov 23 10:20:32 2018
New Revision: 340817
URL: https://svnweb.freebsd.org/changeset/base/340817

Log:
  sfxge(4): extend NVRAM RW finish to return verify result
  
  Extend efx_nvram_rw_finish() to return firmware verify result code.
  
  Submitted by:   Andy Moreton <amoreton at solarflare.com>
  Sponsored by:   Solarflare Communications, Inc.
  Differential Revision:  https://reviews.freebsd.org/D18087

Modified:
  head/sys/dev/sfxge/common/efx.h
  head/sys/dev/sfxge/common/efx_bootcfg.c
  head/sys/dev/sfxge/common/efx_nvram.c
  head/sys/dev/sfxge/sfxge_nvram.c

Modified: head/sys/dev/sfxge/common/efx.h
==============================================================================
--- head/sys/dev/sfxge/common/efx.h     Fri Nov 23 10:20:20 2018        
(r340816)
+++ head/sys/dev/sfxge/common/efx.h     Fri Nov 23 10:20:32 2018        
(r340817)
@@ -1418,7 +1418,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(

Modified: head/sys/dev/sfxge/common/efx_bootcfg.c
==============================================================================
--- head/sys/dev/sfxge/common/efx_bootcfg.c     Fri Nov 23 10:20:20 2018        
(r340816)
+++ head/sys/dev/sfxge/common/efx_bootcfg.c     Fri Nov 23 10:20:32 2018        
(r340817)
@@ -350,11 +350,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 */
@@ -526,7 +526,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);
@@ -542,7 +542,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);
 

Modified: head/sys/dev/sfxge/common/efx_nvram.c
==============================================================================
--- head/sys/dev/sfxge/common/efx_nvram.c       Fri Nov 23 10:20:20 2018        
(r340816)
+++ head/sys/dev/sfxge/common/efx_nvram.c       Fri Nov 23 10:20:32 2018        
(r340817)
@@ -367,11 +367,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);
@@ -390,6 +391,9 @@ efx_nvram_rw_finish(
 
        enp->en_nvram_locked = EFX_NVRAM_INVALID;
 
+       if (verify_resultp != NULL)
+               *verify_resultp = verify_result;
+
        return (0);
 
 fail2:
@@ -398,6 +402,10 @@ fail2:
 
 fail1:
        EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+       /* Always report verification result */
+       if (verify_resultp != NULL)
+               *verify_resultp = verify_result;
 
        return (rc);
 }

Modified: head/sys/dev/sfxge/sfxge_nvram.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_nvram.c    Fri Nov 23 10:20:20 2018        
(r340816)
+++ head/sys/dev/sfxge/sfxge_nvram.c    Fri Nov 23 10:20:32 2018        
(r340817)
@@ -104,7 +104,7 @@ sfxge_nvram_rw(struct sfxge_softc *sc, sfxge_ioc_t *ip
 
 fail3:
        free(buf, M_TEMP);
-       efx_nvram_rw_finish(enp, type);
+       efx_nvram_rw_finish(enp, type, NULL);
 fail1:
        return (rc);
 }
@@ -125,7 +125,7 @@ sfxge_nvram_erase(struct sfxge_softc *sc, efx_nvram_ty
 
        rc = efx_nvram_erase(enp, type);
 
-       efx_nvram_rw_finish(enp, type);
+       efx_nvram_rw_finish(enp, type, NULL);
        return (rc);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to