summaryrefslogtreecommitdiff
path: root/sys/dev/pci/if_em.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/pci/if_em.c')
-rw-r--r--sys/dev/pci/if_em.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/sys/dev/pci/if_em.c b/sys/dev/pci/if_em.c
index a504381fcfd..cdeaa9acedb 100644
--- a/sys/dev/pci/if_em.c
+++ b/sys/dev/pci/if_em.c
@@ -31,7 +31,7 @@ POSSIBILITY OF SUCH DAMAGE.
***************************************************************************/
-/* $OpenBSD: if_em.c,v 1.165 2007/01/21 18:38:02 kettenis Exp $ */
+/* $OpenBSD: if_em.c,v 1.166 2007/01/26 15:55:30 weingart Exp $ */
/* $FreeBSD: if_em.c,v 1.46 2004/09/29 18:28:28 mlaier Exp $ */
#include <dev/pci/if_em.h>
@@ -1553,9 +1553,16 @@ em_hardware_init(struct em_softc *sc)
/* Make sure we have a good EEPROM before we read from it */
if (em_validate_eeprom_checksum(&sc->hw) < 0) {
- printf("%s: The EEPROM Checksum Is Not Valid\n",
- sc->sc_dv.dv_xname);
- return (EIO);
+ /*
+ * Some PCIe parts fail the first check due to
+ * the link being in sleep state, call it again,
+ * if it fails a second time its a real issue.
+ */
+ if (em_validate_eeprom_checksum(&sc->hw) < 0) {
+ printf("%s: The EEPROM Checksum Is Not Valid\n",
+ sc->sc_dv.dv_xname);
+ return (EIO);
+ }
}
if (em_read_part_num(&sc->hw, &(sc->part_num)) < 0) {