From 5b609aa3c5b6367092069e2ed93a558ad489c371 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Sat, 2 Jul 2011 19:37:24 +0800 Subject: [PATCH] bce(4): Detect context initialization failure Obtained-from: FreeBSD 210259 --- sys/dev/netif/bce/if_bce.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/sys/dev/netif/bce/if_bce.c b/sys/dev/netif/bce/if_bce.c index fb1019375c..7d262c8c3d 100644 --- a/sys/dev/netif/bce/if_bce.c +++ b/sys/dev/netif/bce/if_bce.c @@ -424,7 +424,7 @@ static void bce_ifmedia_sts(struct ifnet *, struct ifmediareq *); static void bce_init(void *); static void bce_mgmt_init(struct bce_softc *); -static void bce_init_ctx(struct bce_softc *); +static int bce_init_ctx(struct bce_softc *); static void bce_get_mac_addr(struct bce_softc *); static void bce_set_mac_addr(struct bce_softc *); static void bce_phy_intr(struct bce_softc *); @@ -3206,7 +3206,7 @@ bce_init_cpus(struct bce_softc *sc) /* Returns: */ /* Nothing. */ /****************************************************************************/ -static void +static int bce_init_ctx(struct bce_softc *sc) { if (BCE_CHIP_NUM(sc) == BCE_CHIP_NUM_5709 || @@ -3232,6 +3232,11 @@ bce_init_ctx(struct bce_softc *sc) break; DELAY(2); } + if (i == retry_cnt) { + device_printf(sc->bce_dev, + "Context memory initialization failed!\n"); + return ETIMEDOUT; + } for (i = 0; i < sc->ctx_pages; i++) { int j; @@ -3258,6 +3263,11 @@ bce_init_ctx(struct bce_softc *sc) break; DELAY(5); } + if (j == retry_cnt) { + device_printf(sc->bce_dev, + "Failed to initialize context page!\n"); + return ETIMEDOUT; + } } } else { uint32_t vcid_addr, offset; @@ -3282,6 +3292,7 @@ bce_init_ctx(struct bce_softc *sc) REG_WR(sc, BCE_CTX_PAGE_TBL, vcid_addr); } } + return 0; } @@ -3550,7 +3561,9 @@ bce_chipinit(struct bce_softc *sc) BCE_MISC_ENABLE_STATUS_BITS_CONTEXT_ENABLE); /* Initialize context mapping and zero out the quick contexts. */ - bce_init_ctx(sc); + rc = bce_init_ctx(sc); + if (rc != 0) + return rc; /* Initialize the on-boards CPUs */ bce_init_cpus(sc); -- 2.41.0