DF-3570 / fix.diff
--- a/sys/dev/netif/re/re.c +++ b/sys/dev/netif/re/re.c @@ -31183,6 +31183,9 @@ u_int32_t MP_ReadOtherFunPciEConfigSpace( DELAY(50); + /* Read the data register the NIC filled in during the handshake. */ + RetVal = CSR_READ_4(sc, RE_CSIDR); + return RetVal; } @@ -3445,9 +3448,12 @@ static void Dash2DisableTx(struct re_softc *sc) { //if (!sc->re_dash) return; - if (HW_DASH_SUPPORT_TYPE_2(sc) || HW_DASH_SUPPORT_TYPE_3(sc)) { + /* + * The CMAC window is only mapped for DASH parts (and only when + * bus_space_map() succeeded); never touch a NULL handle. + */ + if (sc->re_cmac_handle != 0 && + (HW_DASH_SUPPORT_TYPE_2(sc) || HW_DASH_SUPPORT_TYPE_3(sc))) { u_int16_t WaitCnt; u_int8_t TmpUchar; @@ -3474,7 +3480,8 @@ static void Dash2DisableRx(struct re_softc *sc) { //if (!sc->re_dash) return; - if (HW_DASH_SUPPORT_TYPE_2(sc) || HW_DASH_SUPPORT_TYPE_3(sc)) { + if (sc->re_cmac_handle != 0 && + (HW_DASH_SUPPORT_TYPE_2(sc) || HW_DASH_SUPPORT_TYPE_3(sc))) { RE_CMAC_WRITE_1(sc, RE_CMAC_IBCR0, RE_CMAC_READ_1(sc, RE_CMAC_IBCR0) & ~(BIT_0)); } } @@ -4484,8 +4491,11 @@ static void re_init_software_variable(struct re_softc *sc) break; case MACFG_70: case MACFG_71: - case MACFG_72: - sc->re_cmac_handle = sc->re_mapped_cmac_handle; - sc->re_cmac_tag = sc->re_mapped_cmac_tag; + case MACFG_72: + if (sc->re_mapped_cmac_handle != 0) { + sc->re_cmac_handle = sc->re_mapped_cmac_handle; + sc->re_cmac_tag = sc->re_mapped_cmac_tag; + } break; } |