diff options
author | Brad Smith <brad@cvs.openbsd.org> | 2005-12-08 03:53:39 +0000 |
---|---|---|
committer | Brad Smith <brad@cvs.openbsd.org> | 2005-12-08 03:53:39 +0000 |
commit | 40bae8c80299bc0c5ca3d7cf88a0f9d3e9aa1865 (patch) | |
tree | 10de0ccf17827f1caf5da75100b55ca9b19f968e | |
parent | a22108d7865119473f69da1acc1a4062d0517dc1 (diff) |
- Enable the buffer manager on 5705 and newer ASICs.
- Enable the memory arbiter on 5705 and newer ASICs with 5714 family
specific trick from Broadcom's Linux driver.
Tested by Chuck McCollum and Ray Kohler on 575x ASICs.
-rw-r--r-- | sys/dev/pci/if_bge.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/sys/dev/pci/if_bge.c b/sys/dev/pci/if_bge.c index 32e58851146..b7b148680e3 100644 --- a/sys/dev/pci/if_bge.c +++ b/sys/dev/pci/if_bge.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_bge.c,v 1.110 2005/12/08 03:27:18 brad Exp $ */ +/* $OpenBSD: if_bge.c,v 1.111 2005/12/08 03:53:38 brad Exp $ */ /* * Copyright (c) 2001 Wind River Systems @@ -274,15 +274,15 @@ const struct pci_matchid bge_devices[] = { #define BGE_IS_575X_PLUS(sc) \ (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5750 || \ - BGE_ASICREV(sc->bge_chipid) == BGE_AISCREV_BCM5714_A0 || \ + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5714_A0 || \ BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5780 || \ BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5714 || \ BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5752) #define BGE_IS_5714_FAMILY(sc) \ - (BGE_ASICREV(sc->bge_chipid) == BGE_AISCREV_BCM5714_A0 || \ + (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5714_A0 || \ BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5780 || \ - BGE_ASICREV(sc->bge_chipid) == BGE_AISCREV_BCM5714) + BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5714) #define BGE_IS_JUMBO_CAPABLE(sc) \ (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5700 || \ @@ -1366,22 +1366,20 @@ bge_blockinit(struct bge_softc *sc) CSR_WRITE_4(sc, BGE_BMAN_DMA_DESCPOOL_HIWAT, 10); /* Enable buffer manager */ - if (!(BGE_IS_5705_OR_BEYOND(sc))) { - CSR_WRITE_4(sc, BGE_BMAN_MODE, - BGE_BMANMODE_ENABLE|BGE_BMANMODE_LOMBUF_ATTN); + CSR_WRITE_4(sc, BGE_BMAN_MODE, + BGE_BMANMODE_ENABLE|BGE_BMANMODE_LOMBUF_ATTN); - /* Poll for buffer manager start indication */ - for (i = 0; i < BGE_TIMEOUT; i++) { - if (CSR_READ_4(sc, BGE_BMAN_MODE) & BGE_BMANMODE_ENABLE) - break; - DELAY(10); - } + /* Poll for buffer manager start indication */ + for (i = 0; i < BGE_TIMEOUT; i++) { + if (CSR_READ_4(sc, BGE_BMAN_MODE) & BGE_BMANMODE_ENABLE) + break; + DELAY(10); + } - if (i == BGE_TIMEOUT) { - printf("%s: buffer manager failed to start\n", - sc->bge_dev.dv_xname); - return (ENXIO); - } + if (i == BGE_TIMEOUT) { + printf("%s: buffer manager failed to start\n", + sc->bge_dev.dv_xname); + return (ENXIO); } /* Enable flow-through queues */ @@ -2095,7 +2093,12 @@ bge_reset(struct bge_softc *sc) bge_writereg_ind(sc, BGE_MISC_CFG, (65 << 1)); /* Enable memory arbiter. */ - if (!(BGE_IS_5705_OR_BEYOND(sc))) + if (BGE_IS_5714_FAMILY(sc)) { + u_int32_t val; + + val = CSR_READ_4(sc, BGE_MARB_MODE); + CSR_WRITE_4(sc, BGE_MARB_MODE, BGE_MARBMODE_ENABLE | val); + } else CSR_WRITE_4(sc, BGE_MARB_MODE, BGE_MARBMODE_ENABLE); /* |