Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-6]: src/sys/dev/pci Pull up following revision(s) (requested by m...



details:   https://anonhg.NetBSD.org/src/rev/e911a3a60afd
branches:  netbsd-6
changeset: 776965:e911a3a60afd
user:      snj <snj%NetBSD.org@localhost>
date:      Thu Apr 30 19:53:28 2015 +0000

description:
Pull up following revision(s) (requested by msaitoh in ticket #1296):
        sys/dev/pci/pcidevs: revision 1.1195 via patch
        sys/dev/pci/if_wm.c: revisions 1.290, 1.304 via patch
        sys/dev/pci/if_wmvar.h: revision 1.20 via patch
- Set the WM_F_ATTACHED flag if wm_attach() finished succesfully and
  check the flag in wm_detach(). It will avoid to panic in wm_detach().
  Fixes PR#49102.
- Support DH89xxCC device.
- Add extra delay for 82580 and newer devices except DH89XXCC SGMII device.
  Same as FreeBSD.

diffstat:

 sys/dev/pci/if_wm.c    |  48 ++++++++++++++++++++++++++++++++----------------
 sys/dev/pci/if_wmvar.h |   3 ++-
 sys/dev/pci/pcidevs    |  25 ++++++++++++++++++++++++-
 3 files changed, 58 insertions(+), 18 deletions(-)

diffs (222 lines):

diff -r 62df100866f0 -r e911a3a60afd sys/dev/pci/if_wm.c
--- a/sys/dev/pci/if_wm.c       Fri Apr 24 05:58:36 2015 +0000
+++ b/sys/dev/pci/if_wm.c       Thu Apr 30 19:53:28 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_wm.c,v 1.227.2.17 2015/04/19 17:01:50 riz Exp $     */
+/*     $NetBSD: if_wm.c,v 1.227.2.18 2015/04/30 19:53:28 snj Exp $     */
 
 /*
  * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.227.2.17 2015/04/19 17:01:50 riz Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.227.2.18 2015/04/30 19:53:28 snj Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -264,6 +264,7 @@
        int sc_pcixe_capoff;            /* PCI[Xe] capability register offset */
 
        const struct wm_product *sc_wmp; /* Pointer to the wm_product entry */
+       uint16_t sc_pcidevid;           /* PCI device ID */
        wm_chip_type sc_type;           /* MAC type */
        int sc_rev;                     /* MAC revision */
        wm_phy_type sc_phytype;         /* PHY type */
@@ -854,14 +855,14 @@
          "Intel PRO/1000 QT (82571EB)",
          WM_T_82571,           WMP_F_1000T },
 
+       { PCI_VENDOR_INTEL,     PCI_PRODUCT_INTEL_82571GB_QUAD_COPPER,
+         "Intel PRO/1000 PT Quad Port Server Adapter",
+         WM_T_82571,           WMP_F_1000T, },
+
        { PCI_VENDOR_INTEL,     PCI_PRODUCT_INTEL_82572EI_COPPER,
          "Intel i82572EI 1000baseT Ethernet",
          WM_T_82572,           WMP_F_1000T },
 
-       { PCI_VENDOR_INTEL,     PCI_PRODUCT_INTEL_82571GB_QUAD_COPPER,
-         "Intel PRO/1000 PT Quad Port Server Adapter",
-         WM_T_82571,           WMP_F_1000T, },
-
        { PCI_VENDOR_INTEL,     PCI_PRODUCT_INTEL_82572EI_FIBER,
          "Intel i82572EI 1000baseX Ethernet",
          WM_T_82572,           WMP_F_1000X },
@@ -1069,6 +1070,11 @@
        { PCI_VENDOR_INTEL,     PCI_PRODUCT_INTEL_82580_QUAD_FIBER,
          "82580 quad-1000BaseX Ethernet",
          WM_T_82580,           WMP_F_1000X },
+
+       { PCI_VENDOR_INTEL,     PCI_PRODUCT_INTEL_DH89XXCC_SGMII,
+         "DH89XXCC Gigabit Ethernet (SGMII)",
+         WM_T_82580,           WMP_F_1000T },
+
        { PCI_VENDOR_INTEL,     PCI_PRODUCT_INTEL_I350_COPPER,
          "I350 Gigabit Network Connection",
          WM_T_I350,            WMP_F_1000T },
@@ -1338,6 +1344,7 @@
        else
                sc->sc_dmat = pa->pa_dmat;
 
+       sc->sc_pcidevid = PCI_PRODUCT(pa->pa_id);
        sc->sc_rev = PCI_REVISION(pci_conf_read(pc, pa->pa_tag, PCI_CLASS_REG));
        pci_aprint_devinfo_fancy(pa, "Ethernet controller", wmp->wmp_name, 1);
 
@@ -1779,7 +1786,7 @@
                    &sc->sc_flasht, &sc->sc_flashh, NULL, NULL)) {
                        aprint_error_dev(sc->sc_dev,
                            "can't map FLASH registers\n");
-                       return;
+                       goto fail_5;
                }
                reg = ICH8_FLASH_READ32(sc, ICH_FLASH_GFPREG);
                sc->sc_ich8_flash_base = (reg & ICH_GFPREG_BASE_MASK) *
@@ -1902,7 +1909,7 @@
                if (wm_read_mac_addr(sc, enaddr) != 0) {
                        aprint_error_dev(sc->sc_dev,
                            "unable to read Ethernet address\n");
-                       return;
+                       goto fail_5;
                }
        }
 
@@ -1920,7 +1927,7 @@
        } else {
                if (wm_nvm_read(sc, NVM_OFF_CFG1, 1, &cfg1)) {
                        aprint_error_dev(sc->sc_dev, "unable to read CFG1\n");
-                       return;
+                       goto fail_5;
                }
        }
 
@@ -1931,7 +1938,7 @@
        } else {
                if (wm_nvm_read(sc, NVM_OFF_CFG2, 1, &cfg2)) {
                        aprint_error_dev(sc->sc_dev, "unable to read CFG2\n");
-                       return;
+                       goto fail_5;
                }
        }
 
@@ -2000,7 +2007,7 @@
                        if (wm_nvm_read(sc, NVM_OFF_SWDPIN, 1, &swdpin)) {
                                aprint_error_dev(sc->sc_dev,
                                    "unable to read SWDPIN\n");
-                               return;
+                               goto fail_5;
                        }
                }
        }
@@ -2308,6 +2315,7 @@
        else
                aprint_error_dev(self, "couldn't establish power handler\n");
 
+       sc->sc_flags |= WM_F_ATTACHED;
        return;
 
        /*
@@ -2346,6 +2354,9 @@
        struct ifnet *ifp = &sc->sc_ethercom.ec_if;
        int i, s;
 
+       if ((sc->sc_flags & WM_F_ATTACHED) == 0)
+               return 0;
+
        s = splnet();
        /* Stop the interface. Callouts are stopped in it. */
        wm_stop(ifp, 1);
@@ -4597,6 +4608,16 @@
                delay(20*1000);
                wm_put_swfwhw_semaphore(sc);
                break;
+       case WM_T_82580:
+       case WM_T_I350:
+       case WM_T_I354:
+       case WM_T_I210:
+       case WM_T_I211:
+               CSR_WRITE(sc, WMREG_CTRL, CSR_READ(sc, WMREG_CTRL) | CTRL_RST);
+               if (sc->sc_pcidevid != PCI_PRODUCT_INTEL_DH89XXCC_SGMII)
+                       CSR_WRITE_FLUSH(sc);
+               delay(5000);
+               break;
        case WM_T_82542_2_0:
        case WM_T_82542_2_1:
        case WM_T_82543:
@@ -4609,12 +4630,7 @@
        case WM_T_82574:
        case WM_T_82575:
        case WM_T_82576:
-       case WM_T_82580:
        case WM_T_82583:
-       case WM_T_I350:
-       case WM_T_I354:
-       case WM_T_I210:
-       case WM_T_I211:
        default:
                /* Everything else can safely use the documented method. */
                CSR_WRITE(sc, WMREG_CTRL, CSR_READ(sc, WMREG_CTRL) | CTRL_RST);
diff -r 62df100866f0 -r e911a3a60afd sys/dev/pci/if_wmvar.h
--- a/sys/dev/pci/if_wmvar.h    Fri Apr 24 05:58:36 2015 +0000
+++ b/sys/dev/pci/if_wmvar.h    Thu Apr 30 19:53:28 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_wmvar.h,v 1.12.10.5 2014/12/04 06:04:07 snj Exp $   */
+/*     $NetBSD: if_wmvar.h,v 1.12.10.6 2015/04/30 19:53:28 snj Exp $   */
 
 /*
  * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
@@ -95,6 +95,7 @@
 #define WM_F_WOL               0x00100000
 #define WM_F_EEE               0x00200000 /* Energy Efficiency Ethernet */
 #define        WM_F_EEPROM_FLASH_HW    0x00400000 /* EEPROM is FLASH */
+#define WM_F_ATTACHED          0x00800000 /* attach() fininsed successfully */
 
 typedef enum {
        WM_T_unknown            = 0,
diff -r 62df100866f0 -r e911a3a60afd sys/dev/pci/pcidevs
--- a/sys/dev/pci/pcidevs       Fri Apr 24 05:58:36 2015 +0000
+++ b/sys/dev/pci/pcidevs       Thu Apr 30 19:53:28 2015 +0000
@@ -1,4 +1,4 @@
-$NetBSD: pcidevs,v 1.1102.2.17 2015/04/19 17:06:27 riz Exp $
+$NetBSD: pcidevs,v 1.1102.2.18 2015/04/30 19:53:28 snj Exp $
 
 /*
  * Copyright (c) 1995, 1996 Christopher G. Demetriou
@@ -2514,6 +2514,12 @@
 product INTEL SRCS28X          0x0409  SATA RAID Controller
 product INTEL HASWELL_IGD      0x0402  Haswell Integrated Graphics Device
 product INTEL HASWELL_IGD_1    0x0412  Haswell Integrated Graphics Device
+product INTEL DH89XXCC_IQIA    0x0434  DH89xxCC PCIe Endpoint and QuickAssist
+product INTEL DH89XXCL_IQIA    0x0435  DH89xxCL PCIe Endpoint and QuickAssist
+product INTEL DH89XXCC_SGMII   0x0438  DH89XXCC SGMII
+product INTEL DH89XXCC_SERDES  0x043a  DH89XXCC SerDes
+product INTEL DH89XXCC_BPLANE  0x043c  DH89XXCC backplane
+product INTEL DH89XXCC_SFP     0x0440  DH89XXCC SFP
 product INTEL DH89XXCC_IQIA_VF 0x0442  DH89XXCC QuickAssist Virtual Function
 product INTEL DH89XXCL_IQIA_VF 0x0443  DH89XXCL QuickAssist Virtual Function
 product INTEL PCEB             0x0482  82375EB/SB PCI-EISA Bridge
@@ -3057,7 +3063,24 @@
 product INTEL C2000_SGMII      0x1f41  C2000 Ethernet(SGMII)
 product INTEL C2000_DUMMYGBE   0x1f42  C2000 Ethernet(Dummy function)
 product INTEL C2000_25GBE      0x1f45  C2000 Ethernet(2.5Gbe)
+product INTEL DH89XXCC_LPC     0x2310  DH89xxCC LPC Controller
+product INTEL DH89XXCC_SATA_1  0x2323  DH89xxCC SATA Controller
+product INTEL DH89XXCC_SATA_2  0x2326  DH89xxCC SATA Controller
 product INTEL DH89XX_SMB       0x2330  DH89xx SMBus Controller
+product INTEL DH89XXCC_THERMAL 0x2332  DH89xxCC Thermal Subsystem
+product INTEL DH89XXCC_USB_1   0x2334  DH89xxCC USB EHCI
+product INTEL DH89XXCC_USB_2   0x2335  DH89xxCC USB EHCI
+product INTEL DH89XXCC_PCIE_1_1        0x2342  DH89xxCC PCIe Root Port
+product INTEL DH89XXCC_PCIE_1_2        0x2343  DH89xxCC PCIe Root Port
+product INTEL DH89XXCC_PCIE_2_1        0x2344  DH89xxCC PCIe Root Port
+product INTEL DH89XXCC_PCIE_2_2        0x2345  DH89xxCC PCIe Root Port
+product INTEL DH89XXCC_PCIE_3_1        0x2346  DH89xxCC PCIe Root Port
+product INTEL DH89XXCC_PCIE_3_2        0x2347  DH89xxCC PCIe Root Port
+product INTEL DH89XXCC_PCIE_4_1        0x2348  DH89xxCC PCIe Root Port
+product INTEL DH89XXCC_PCIE_4_2        0x2349  DH89xxCC PCIe Root Port
+product INTEL DH89XXCC_WDT     0x2360  DH89xxCC Watchdog Timer for Core Reset
+product INTEL DH89XXCC_MEI_1   0x2364  DH89xxCC MEI Controller
+product INTEL DH89XXCC_MEI_2   0x2365  DH89xxCC MEI Controller
 product INTEL 82801AA_LPC      0x2410  82801AA LPC Interface Bridge
 product INTEL 82801AA_IDE      0x2411  82801AA IDE Controller
 product INTEL 82801AA_USB      0x2412  82801AA USB Controller



Home | Main Index | Thread Index | Old Index