Source-Changes-HG archive

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

[src/trunk]: src/sys/dev/pci - ARI's function group is not bit 32-24 but 22-20.



details:   https://anonhg.NetBSD.org/src/rev/e82a633539ae
branches:  trunk
changeset: 341685:e82a633539ae
user:      msaitoh <msaitoh%NetBSD.org@localhost>
date:      Tue Nov 17 18:26:50 2015 +0000

description:
- ARI's function group is not bit 32-24 but 22-20.
- Add the Structure Length field in AF capability register.
- Add Enhanced Allocation extended capability ID (ECN: Enhanced Allocation (EA)
  for Memory and I/O Resources).
- Add LN System CLS (ECN: Lightweight Notification (LN) Protocol).
- Add ST Upper and Lower bit definitions (ECN: TLP Processiong Hints).
- Add the Global Invalidate bit in the ATS capability register and the PRG
  Response PASID Required bit in the Page Request status register (ECN: PASID
  Translation)
- Decode ASPM support bit more (ECN: ASPM Optionally)
- Use __BITS()

diffstat:

 sys/dev/pci/pci_subr.c |  48 ++++++++++++++++++++++++++++++++++++------------
 sys/dev/pci/pcireg.h   |  19 +++++++++++++------
 2 files changed, 49 insertions(+), 18 deletions(-)

diffs (212 lines):

diff -r 50f15412c973 -r e82a633539ae sys/dev/pci/pci_subr.c
--- a/sys/dev/pci/pci_subr.c    Tue Nov 17 17:51:42 2015 +0000
+++ b/sys/dev/pci/pci_subr.c    Tue Nov 17 18:26:50 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pci_subr.c,v 1.144 2015/11/17 17:51:42 msaitoh Exp $   */
+/*     $NetBSD: pci_subr.c,v 1.145 2015/11/17 18:26:50 msaitoh Exp $   */
 
 /*
  * Copyright (c) 1997 Zubin D. Dittia.  All rights reserved.
@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci_subr.c,v 1.144 2015/11/17 17:51:42 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_subr.c,v 1.145 2015/11/17 18:26:50 msaitoh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_pci.h"
@@ -1584,15 +1584,18 @@
                printf("      Active State PM Support: ");
                val = (reg & PCIE_LCAP_ASPM) >> 10;
                switch (val) {
+               case 0x0:
+                       printf("No ASPM support\n");
+                       break;
                case 0x1:
-                       printf("L0s Entry supported\n");
+                       printf("L0s supported\n");
+                       break;
+               case 0x2:
+                       printf("L1 supported\n");
                        break;
                case 0x3:
                        printf("L0s and L1 supported\n");
                        break;
-               default:
-                       printf("Reserved value\n");
-                       break;
                }
                printf("      L0 Exit Latency: ");
                pci_print_pcie_L0s_latency((reg & PCIE_LCAP_L0S_EXIT) >> 12);
@@ -1792,6 +1795,21 @@
        onoff("LTR Mechanism Supported", reg, PCIE_DCAP2_LTR_MEC);
        printf("      TPH Completer Supported: %u\n",
            (unsigned int)(reg & PCIE_DCAP2_TPH_COMP) >> 12);
+       printf("      LN System CLS: ");
+       switch (__SHIFTOUT(reg, PCIE_DCAP2_LNSYSCLS)) {
+       case 0x0:
+               printf("Not supported or not in effect\n");
+               break;
+       case 0x1:
+               printf("64byte cachelines in effect\n");
+               break;
+       case 0x2:
+               printf("128byte cachelines in effect\n");
+               break;
+       case 0x3:
+               printf("Reserved\n");
+               break;
+       }
        printf("      OBFF Supported: ");
        switch ((reg & PCIE_DCAP2_OBFF) >> 18) {
        case 0x0:
@@ -1907,13 +1925,14 @@
        onoff("MSI-X Enable", reg, PCI_MSIX_CTL_ENABLE);
        reg = regs[o2i(capoff + PCI_MSIX_TBLOFFSET)];
        printf("    Table offset register: 0x%08x\n", reg);
-       printf("      Table offset: %08x\n", reg & PCI_MSIX_TBLOFFSET_MASK);
-       printf("      BIR: 0x%x\n", reg & PCI_MSIX_TBLBIR_MASK);
+       printf("      Table offset: %08x\n",
+           (pcireg_t)(reg & PCI_MSIX_TBLOFFSET_MASK));
+       printf("      BIR: 0x%x\n", (pcireg_t)(reg & PCI_MSIX_TBLBIR_MASK));
        reg = regs[o2i(capoff + PCI_MSIX_PBAOFFSET)];
        printf("    Pending bit array register: 0x%08x\n", reg);
        printf("      Pending bit array offset: %08x\n",
-           reg & PCI_MSIX_PBAOFFSET_MASK);
-       printf("      BIR: 0x%x\n", reg & PCI_MSIX_PBABIR_MASK);
+           (pcireg_t)(reg & PCI_MSIX_PBAOFFSET_MASK));
+       printf("      BIR: 0x%x\n", (pcireg_t)(reg & PCI_MSIX_PBABIR_MASK));
 }
 
 static void
@@ -1951,6 +1970,8 @@
 
        reg = regs[o2i(capoff + PCI_AFCAPR)];
        printf("    AF Capabilities register: 0x%02x\n", (reg >> 24) & 0xff);
+       printf("    AF Structure Length: 0x%02x\n",
+           (pcireg_t)__SHIFTOUT(reg, PCI_AF_LENGTH));
        onoff("Transaction Pending", reg, PCI_AF_TP_CAP);
        onoff("Function Level Reset", reg, PCI_AF_FLR_CAP);
        reg = regs[o2i(capoff + PCI_AFCSR)];
@@ -1989,7 +2010,8 @@
        { PCI_CAP_PCIEXPRESS,   "PCI Express",  pci_conf_print_pcie_cap },
        { PCI_CAP_MSIX,         "MSI-X",        pci_conf_print_msix_cap },
        { PCI_CAP_SATA,         "SATA",         pci_conf_print_sata_cap },
-       { PCI_CAP_PCIAF,        "Advanced Features", pci_conf_print_pciaf_cap }
+       { PCI_CAP_PCIAF,        "Advanced Features", pci_conf_print_pciaf_cap},
+       { PCI_CAP_EA,           "Enhanced Allocation", NULL }
 };
 
 static int
@@ -2674,6 +2696,7 @@
                num = 32;
        printf("      Invalidate Queue Depth: %u\n", num);
        onoff("Page Aligned Request", reg, PCI_ATS_CAP_PALIGNREQ);
+       onoff("Global Invalidate", reg, PCI_ATS_CAP_GLOBALINVL);
 
        printf("    Control register: 0x%04x\n", ctl);
        printf("      Smallest Translation Unit: %u\n",
@@ -2889,6 +2912,7 @@
        onoff("Unexpected Page Request Group Index", reg,
            PCI_PAGE_REQ_STA_UPRGI);
        onoff("Stopped", reg, PCI_PAGE_REQ_STA_S);
+       onoff("PRG Response PASID Required", reg, PCI_PAGE_REQ_STA_PASIDR);
 
        reg = regs[o2i(extcapoff + PCI_PAGE_REQ_OUTSTCAPA)];
        printf("    Outstanding Page Request Capacity: %u\n", reg);
@@ -2897,7 +2921,7 @@
 }
 
 /* XXX pci_conf_print_amd_cap */
-/* XXX pci_conf_print_resize_bar_cap */
+/* XXX pci_conf_print_resiz_bar_cap */
 /* XXX pci_conf_print_dpa_cap */
 
 static const char *
diff -r 50f15412c973 -r e82a633539ae sys/dev/pci/pcireg.h
--- a/sys/dev/pci/pcireg.h      Tue Nov 17 17:51:42 2015 +0000
+++ b/sys/dev/pci/pcireg.h      Tue Nov 17 18:26:50 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pcireg.h,v 1.110 2015/11/17 17:51:42 msaitoh Exp $     */
+/*     $NetBSD: pcireg.h,v 1.111 2015/11/17 18:26:50 msaitoh Exp $     */
 
 /*
  * Copyright (c) 1995, 1996, 1999, 2000
@@ -539,6 +539,7 @@
 #define        PCI_CAP_MSIX            0x11
 #define        PCI_CAP_SATA            0x12
 #define        PCI_CAP_PCIAF           0x13
+#define        PCI_CAP_EA              0x14    /* Enhanced Allocation (EA) */
 
 /*
  * Capability ID: 0x01
@@ -1006,6 +1007,7 @@
 #define PCIE_DCAP2_NO_ROPR_PASS        __BIT(10)      /* No RO-enabled PR-PR Passng */
 #define PCIE_DCAP2_LTR_MEC     __BIT(11)      /* LTR Mechanism Supported */
 #define PCIE_DCAP2_TPH_COMP    __BITS(13, 12) /* TPH Completer Supported */
+#define PCIE_DCAP2_LNSYSCLS    __BITS(15, 14) /* LN System CLS */
 #define PCIE_DCAP2_OBFF                __BITS(19, 18) /* Optimized Buffer Flush/Fill*/
 #define PCIE_DCAP2_EXTFMT_FLD  __BIT(20)      /* Extended Fmt Field Support */
 #define PCIE_DCAP2_EETLP_PREF  __BIT(21)      /* End-End TLP Prefix Support */
@@ -1059,14 +1061,14 @@
  * 2nd DWORD is the Table Offset
  */
 #define        PCI_MSIX_TBLOFFSET      0x04
-#define        PCI_MSIX_TBLOFFSET_MASK 0xfffffff8
-#define        PCI_MSIX_TBLBIR_MASK    0x00000007
+#define        PCI_MSIX_TBLOFFSET_MASK __BITS(31, 3)
+#define        PCI_MSIX_TBLBIR_MASK    __BITS(2, 0)
 /*
  * 3rd DWORD is the Pending Bitmap Array Offset
  */
 #define        PCI_MSIX_PBAOFFSET      0x08
-#define        PCI_MSIX_PBAOFFSET_MASK 0xfffffff8
-#define        PCI_MSIX_PBABIR_MASK    0x00000007
+#define        PCI_MSIX_PBAOFFSET_MASK __BITS(31, 3)
+#define        PCI_MSIX_PBABIR_MASK    __BITS(2, 0)
 
 #define PCI_MSIX_TABLE_ENTRY_SIZE      16
 #define PCI_MSIX_TABLE_ENTRY_ADDR_LO   0x0
@@ -1080,6 +1082,8 @@
        uint32_t pci_msix_vector_control;
 };
 #define        PCI_MSIX_VECTCTL_MASK   __BIT(0)
+#define        PCI_MSIX_VECTCTL_STLO   __BITS(23, 16)
+#define        PCI_MSIX_VECTCTL_STUP   __BITS(31, 24)
 
  /* Max number of MSI-X vectors. See PCI-SIG specification. */
 #define        PCI_MSIX_MAX_VECTORS    2048
@@ -1103,6 +1107,7 @@
  */
 #define PCI_AFCAPR     0x00    /* Capabilities */
 #define        PCI_AFCAPR_MASK         __BITS(31, 24)
+#define        PCI_AF_LENGTH           __BITS(23, 16)  /* Structure Length */
 #define        PCI_AF_TP_CAP           __BIT(24)       /* Transaction Pending */
 #define        PCI_AF_FLR_CAP          __BIT(25)       /* Function Level Reset */
 #define PCI_AFCSR      0x04    /* Control & Status register */
@@ -1646,7 +1651,7 @@
 #define PCI_ARI_CTL    0x04    /* Control Register */
 #define PCI_ARI_CTL_M          __BIT(16)       /* MFVC Function Groups Ena. */
 #define PCI_ARI_CTL_A          __BIT(17)       /* ACS Function Groups Ena. */
-#define PCI_ARI_CTL_FUNCGRP    __BITS(31, 24)  /* Function Group */
+#define PCI_ARI_CTL_FUNCGRP    __BITS(22, 20)  /* Function Group */
 
 /*
  * Extended capability ID: 0x000f
@@ -1655,6 +1660,7 @@
 #define        PCI_ATS_CAP     0x04    /* Capability Register */
 #define        PCI_ATS_CAP_INVQDEPTH   __BITS(4, 0)    /* Invalidate Queue Depth */
 #define        PCI_ATS_CAP_PALIGNREQ   __BIT(5)        /* Page Aligned Request */
+#define        PCI_ATS_CAP_GLOBALINVL  __BIT(6)        /* Global Invalidate Support */
 #define        PCI_ATS_CTL     0x04    /* Control Register */
 #define        PCI_ATS_CTL_STU         __BITS(20, 16)  /* Smallest Translation Unit */
 #define        PCI_ATS_CTL_EN          __BIT(31)       /* Enable */
@@ -1739,6 +1745,7 @@
 #define        PCI_PAGE_REQ_STA_RF     __BIT(0+16)     /* Response Failure */
 #define        PCI_PAGE_REQ_STA_UPRGI  __BIT(1+16)   /* Unexpected Page Req Grp Idx */
 #define        PCI_PAGE_REQ_STA_S      __BIT(8+16)     /* Stopped */
+#define        PCI_PAGE_REQ_STA_PASIDR __BIT(15+16)  /* PRG Response PASID Required */
 #define        PCI_PAGE_REQ_OUTSTCAPA  0x08    /* Outstanding Page Request Capacity */
 #define        PCI_PAGE_REQ_OUTSTALLOC 0x0c  /* Outstanding Page Request Allocation */
 



Home | Main Index | Thread Index | Old Index