Hi tech@,

While booting OpenBSD on HPE ProLiant DL20 Gen9, iLO/IPMI remote access
is stopped dozens of seconds, and client app give up the connection.

This patch reduces it to few seconds and make the connection online.

>From FreeBSD https://svnweb.freebsd.org/base?view=revision&revision=248226

Index: sys/dev/pci/if_bge.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_bge.c,v
retrieving revision 1.385
diff -u -p -r1.385 if_bge.c
--- sys/dev/pci/if_bge.c        13 Feb 2017 00:56:32 -0000      1.385
+++ sys/dev/pci/if_bge.c        24 Jul 2017 04:09:15 -0000
@@ -2879,11 +2879,11 @@ bge_attach(struct device *parent, struct
 
        /* Try to reset the chip. */
        DPRINTFN(5, ("bge_reset\n"));
-       bge_sig_pre_reset(sc, BGE_RESET_START);
+       bge_sig_pre_reset(sc, BGE_RESET_SHUTDOWN);
        bge_reset(sc);
 
-       bge_sig_legacy(sc, BGE_RESET_START);
-       bge_sig_post_reset(sc, BGE_RESET_START);
+       bge_sig_legacy(sc, BGE_RESET_SHUTDOWN);
+       bge_sig_post_reset(sc, BGE_RESET_SHUTDOWN);
 
        bge_chipinit(sc);
 
@@ -3233,6 +3233,19 @@ bge_reset(struct bge_softc *sc)
        } else
                write_op = bge_writereg_ind;
 
+       if (BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5700 &&
+           BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5701) {
+               CSR_WRITE_4(sc, BGE_NVRAM_SWARB, BGE_NVRAMSWARB_SET1);
+               for (i = 0; i < 8000; i++) {
+                       if (CSR_READ_4(sc, BGE_NVRAM_SWARB) &
+                           BGE_NVRAMSWARB_GNT1)
+                               break;
+                       DELAY(20);
+               }
+               if (i == 8000)
+                       printf("%s: nvram lock timed out\n",
+                           sc->bge_dev.dv_xname);
+       }
        /* Take APE lock when performing reset. */
        bge_ape_lock(sc, BGE_APE_LOCK_GRC);
 

Reply via email to