-/* $OpenBSD: if_re_pci.c,v 1.50 2015/12/28 05:49:15 jmatthew Exp $ */
+/* $OpenBSD: if_re_pci.c,v 1.51 2017/06/12 03:00:26 kevlo Exp $ */
/*
* Copyright (c) 2005 Peter Valchev <pvalchev@openbsd.org>
pci_chipset_tag_t pc = pa->pa_pc;
pci_intr_handle_t ih;
const char *intrstr = NULL;
+ pcireg_t reg;
+ int offset;
pci_set_powerstate(pa->pa_pc, pa->pa_tag, PCI_PMCSR_STATE_D0);
* PCI Express check.
*/
if (pci_get_capability(pc, pa->pa_tag, PCI_CAP_PCIEXPRESS,
- NULL, NULL))
+ &offset, NULL)) {
+ /* Disable PCIe ASPM and ECPM. */
+ reg = pci_conf_read(pc, pa->pa_tag, offset + PCI_PCIE_LCSR);
+ reg &= ~(PCI_PCIE_LCSR_ASPM_L0S | PCI_PCIE_LCSR_ASPM_L1 |
+ PCI_PCIE_LCSR_ECPM);
+ pci_conf_write(pc, pa->pa_tag, offset + PCI_PCIE_LCSR, reg);
sc->rl_flags |= RL_FLAG_PCIE;
+ }
if (!(PCI_VENDOR(pa->pa_id) == PCI_VENDOR_REALTEK &&
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_REALTEK_RT8139)) {
-/* $OpenBSD: pcireg.h,v 1.53 2017/03/25 07:33:46 mlarkin Exp $ */
+/* $OpenBSD: pcireg.h,v 1.54 2017/06/12 03:00:26 kevlo Exp $ */
/* $NetBSD: pcireg.h,v 1.26 2000/05/10 16:58:42 thorpej Exp $ */
/*
#define PCI_PCIE_LCSR_ASPM_L0S 0x00000001
#define PCI_PCIE_LCSR_ASPM_L1 0x00000002
#define PCI_PCIE_LCSR_ES 0x00000080
+#define PCI_PCIE_LCSR_ECPM 0x00000100
#define PCI_PCIE_SLCAP 0x14
#define PCI_PCIE_SLCAP_ABP 0x00000001
#define PCI_PCIE_SLCAP_PCP 0x00000002