summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorAndrew Gallatin <gallatin@FreeBSD.org>2009-10-05 14:28:23 +0000
committerAndrew Gallatin <gallatin@FreeBSD.org>2009-10-05 14:28:23 +0000
commitc005a51c4e357a1de461a016e8685b212e8ac596 (patch)
treeba7826937dcbe2cb4d9ff4863052bde6e8604e86 /sys/dev
parentec89a806b843d692b25c8b732a58d8688d04223d (diff)
Notes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/mxge/if_mxge.c17
-rw-r--r--sys/dev/mxge/if_mxge_var.h1
2 files changed, 14 insertions, 4 deletions
diff --git a/sys/dev/mxge/if_mxge.c b/sys/dev/mxge/if_mxge.c
index f41fbf6cfb53..e59d10c13c6a 100644
--- a/sys/dev/mxge/if_mxge.c
+++ b/sys/dev/mxge/if_mxge.c
@@ -3653,10 +3653,16 @@ mxge_setup_cfg_space(mxge_softc_t *sc)
if (pci_find_extcap(dev, PCIY_EXPRESS, &reg) == 0) {
lnk = pci_read_config(dev, reg + 0x12, 2);
sc->link_width = (lnk >> 4) & 0x3f;
-
- pectl = pci_read_config(dev, reg + 0x8, 2);
- pectl = (pectl & ~0x7000) | (5 << 12);
- pci_write_config(dev, reg + 0x8, pectl, 2);
+
+ if (sc->pectl == 0) {
+ pectl = pci_read_config(dev, reg + 0x8, 2);
+ pectl = (pectl & ~0x7000) | (5 << 12);
+ pci_write_config(dev, reg + 0x8, pectl, 2);
+ sc->pectl = pectl;
+ } else {
+ /* restore saved pectl after watchdog reset */
+ pci_write_config(dev, reg + 0x8, sc->pectl, 2);
+ }
}
/* Enable DMA and Memory space access */
@@ -3768,6 +3774,9 @@ mxge_watchdog_reset(mxge_softc_t *sc, int slice)
/* release all TX locks */
for (s = 0; s < num_tx_slices; s++) {
ss = &sc->ss[s];
+#ifdef IFNET_BUF_RING
+ mxge_start_locked(ss);
+#endif
mtx_unlock(&ss->tx.mtx);
}
}
diff --git a/sys/dev/mxge/if_mxge_var.h b/sys/dev/mxge/if_mxge_var.h
index 47c39b5f0193..dedb7ba2e479 100644
--- a/sys/dev/mxge/if_mxge_var.h
+++ b/sys/dev/mxge/if_mxge_var.h
@@ -273,6 +273,7 @@ struct mxge_softc {
struct sysctl_ctx_list slice_sysctl_ctx;
char *mac_addr_string;
uint8_t mac_addr[6]; /* eeprom mac address */
+ uint16_t pectl; /* save PCIe CTL state */
char product_code_string[64];
char serial_number_string[64];
char cmd_mtx_name[16];