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 /sys/dev/pci/if_bge.c | |
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.
Diffstat (limited to 'sys/dev/pci/if_bge.c')
-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); /* |