Module Name: src
Committed By: msaitoh
Date: Fri May 31 17:48:12 UTC 2013
Modified Files:
src/sys/dev/pci: if_bge.c if_bgevar.h
Log Message:
- Revert rev. 1.250. I really misunderstood. Add some comments.
- Set DMA watermark depend on the PCI max payload size.
To generate a diff of this commit:
cvs rdiff -u -r1.252 -r1.253 src/sys/dev/pci/if_bge.c
cvs rdiff -u -r1.15 -r1.16 src/sys/dev/pci/if_bgevar.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/if_bge.c
diff -u src/sys/dev/pci/if_bge.c:1.252 src/sys/dev/pci/if_bge.c:1.253
--- src/sys/dev/pci/if_bge.c:1.252 Thu May 30 05:50:06 2013
+++ src/sys/dev/pci/if_bge.c Fri May 31 17:48:12 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bge.c,v 1.252 2013/05/30 05:50:06 msaitoh Exp $ */
+/* $NetBSD: if_bge.c,v 1.253 2013/05/31 17:48:12 msaitoh Exp $ */
/*
* Copyright (c) 2001 Wind River Systems
@@ -79,7 +79,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.252 2013/05/30 05:50:06 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.253 2013/05/31 17:48:12 msaitoh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -2331,7 +2331,10 @@ bge_chipinit(struct bge_softc *sc)
/* Read watermark not used, 128 bytes for write. */
DPRINTFN(4, ("(%s: PCI-Express DMA setting)\n",
device_xname(sc->bge_dev)));
- dma_rw_ctl |= BGE_PCIDMARWCTL_WR_WAT_SHIFT(3);
+ if (sc->bge_mps >= 256)
+ dma_rw_ctl |= BGE_PCIDMARWCTL_WR_WAT_SHIFT(7);
+ else
+ dma_rw_ctl |= BGE_PCIDMARWCTL_WR_WAT_SHIFT(3);
} else if (sc->bge_flags & BGE_PCIX) {
DPRINTFN(4, ("(:%s: PCI-X DMA setting)\n",
device_xname(sc->bge_dev)));
@@ -3348,6 +3351,10 @@ bge_attach(device_t parent, device_t sel
|| (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5785)) {
/* PCIe */
sc->bge_flags |= BGE_PCIE;
+ /* Extract supported maximum payload size. */
+ reg = pci_conf_read(sc->sc_pc, sc->sc_pcitag,
+ sc->bge_pciecap + PCIE_DCAP);
+ sc->bge_mps = 128 << (reg & PCIE_DCAP_MAX_PAYLOAD);
if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5719 ||
BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5720)
sc->bge_expmrq = 2048;
@@ -3966,11 +3973,13 @@ bge_reset(struct bge_softc *sc)
int i, val;
void (*write_op)(struct bge_softc *, int, int);
+ /* Make mask for BGE_MAC_MODE register. */
mac_mode_mask = BGE_MACMODE_HALF_DUPLEX | BGE_MACMODE_PORTMODE;
if ((sc->bge_mfw_flags & BGE_MFW_ON_APE) != 0)
mac_mode_mask |= BGE_MACMODE_APE_RX_EN | BGE_MACMODE_APE_TX_EN;
- mac_mode = CSR_READ_4(sc, BGE_MAC_MODE) & ~mac_mode_mask;
-
+ /* Keep mac_mode_mask's bits of BGE_MAC_MODE register into mac_mode */
+ mac_mode = CSR_READ_4(sc, BGE_MAC_MODE) & mac_mode_mask;
+
if (BGE_IS_575X_PLUS(sc) && !BGE_IS_5714_FAMILY(sc) &&
(BGE_ASICREV(sc->bge_chipid) != BGE_ASICREV_BCM5906)) {
if (sc->bge_flags & BGE_PCIE)
@@ -4149,7 +4158,7 @@ bge_reset(struct bge_softc *sc)
BGE_SETBIT(sc, BGE_TLP_CONTROL_REG, BGE_TLP_DATA_FIFO_PROTECT);
}
- /* 57XX step 17 */
+ /* 5718 reset step 13, 57XX step 17 */
/* Poll until the firmware initialization is complete */
bge_poll_fw(sc);
@@ -4169,10 +4178,9 @@ bge_reset(struct bge_softc *sc)
}
/* 57XX step 18 */
- /* Write mac mode.
- * XXX Write 0x0c for 5703S and 5704S
- */
+ /* Write mac mode. */
val = CSR_READ_4(sc, BGE_MAC_MODE);
+ /* Restore mac_mode_mask's bits using mac_mode */
val = (val & ~mac_mode_mask) | mac_mode;
CSR_WRITE_4_FLUSH(sc, BGE_MAC_MODE, val);
DELAY(40);
Index: src/sys/dev/pci/if_bgevar.h
diff -u src/sys/dev/pci/if_bgevar.h:1.15 src/sys/dev/pci/if_bgevar.h:1.16
--- src/sys/dev/pci/if_bgevar.h:1.15 Fri May 24 02:29:36 2013
+++ src/sys/dev/pci/if_bgevar.h Fri May 31 17:48:12 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bgevar.h,v 1.15 2013/05/24 02:29:36 msaitoh Exp $ */
+/* $NetBSD: if_bgevar.h,v 1.16 2013/05/31 17:48:12 msaitoh Exp $ */
/*
* Copyright (c) 2001 Wind River Systems
* Copyright (c) 1997, 1998, 1999, 2001
@@ -276,6 +276,7 @@ struct bge_softc {
bus_dma_tag_t bge_dmatag;
uint32_t bge_pcixcap;
uint32_t bge_pciecap;
+ uint16_t bge_mps;
int bge_expmrq;
u_int32_t bge_mfw_flags; /* Management F/W flags */
#define BGE_MFW_ON_RXCPU 0x00000001