GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
                tp->tg3_flags |= TG3_FLAG_NVRAM;
 
+               tg3_nvram_lock(tp);
                tg3_enable_nvram_access(tp);
 
                if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
                tg3_get_nvram_size(tp);
 
                tg3_disable_nvram_access(tp);
+               tg3_nvram_unlock(tp);
 
        } else {
                tp->tg3_flags &= ~(TG3_FLAG_NVRAM | TG3_FLAG_NVRAM_BUFFERED);
        if (ret == 0)
                *val = swab32(tr32(NVRAM_RDDATA));
 
-       tg3_nvram_unlock(tp);
-
        tg3_disable_nvram_access(tp);
 
+       tg3_nvram_unlock(tp);
+
        return ret;
 }
 
 
                offset = offset + (pagesize - page_off);
 
+               /* Nvram lock released by tg3_nvram_read() above,
+                * so need to get it again.
+                */
+               tg3_nvram_lock(tp);
                tg3_enable_nvram_access(tp);
 
                /*