Module Name: src Committed By: msaitoh Date: Thu Jun 15 06:51:18 UTC 2017
Modified Files: src/sys/dev/pci: pci_subr.c pcireg.h Log Message: Fix a bug that LTR's latency in L1 PM Substates capability and Latency Tolerance Reporting capability isn't printed correctly. To generate a diff of this commit: cvs rdiff -u -r1.187 -r1.188 src/sys/dev/pci/pci_subr.c cvs rdiff -u -r1.130 -r1.131 src/sys/dev/pci/pcireg.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/pci_subr.c diff -u src/sys/dev/pci/pci_subr.c:1.187 src/sys/dev/pci/pci_subr.c:1.188 --- src/sys/dev/pci/pci_subr.c:1.187 Thu Jun 15 05:42:27 2017 +++ src/sys/dev/pci/pci_subr.c Thu Jun 15 06:51:18 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pci_subr.c,v 1.187 2017/06/15 05:42:27 msaitoh Exp $ */ +/* $NetBSD: pci_subr.c,v 1.188 2017/06/15 06:51:18 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.187 2017/06/15 05:42:27 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pci_subr.c,v 1.188 2017/06/15 06:51:18 msaitoh Exp $"); #ifdef _KERNEL_OPT #include "opt_pci.h" @@ -3503,18 +3503,15 @@ pci_conf_print_ltr_cap(const pcireg_t *r pcireg_t reg; printf("\n Latency Tolerance Reporting\n"); - reg = regs[o2i(extcapoff + PCI_LTR_MAXSNOOPLAT)] & 0xffff; - printf(" Max Snoop Latency Register: 0x%04x\n", reg); - printf(" Max Snoop LatencyValue: %u\n", - (pcireg_t)__SHIFTOUT(reg, PCI_LTR_MAXSNOOPLAT_VAL)); - printf(" Max Snoop LatencyScale: %uns\n", - PCI_LTR_SCALETONS(__SHIFTOUT(reg, PCI_LTR_MAXSNOOPLAT_SCALE))); - reg = regs[o2i(extcapoff + PCI_LTR_MAXNOSNOOPLAT)] >> 16; - printf(" Max No-Snoop Latency Register: 0x%04x\n", reg); - printf(" Max No-Snoop LatencyValue: %u\n", - (pcireg_t)__SHIFTOUT(reg, PCI_LTR_MAXNOSNOOPLAT_VAL)); - printf(" Max No-Snoop LatencyScale: %uns\n", - PCI_LTR_SCALETONS(__SHIFTOUT(reg, PCI_LTR_MAXNOSNOOPLAT_SCALE))); + reg = regs[o2i(extcapoff + PCI_LTR_MAXSNOOPLAT)]; + printf(" Max Snoop Latency Register: 0x%04x\n", reg & 0xffff); + printf(" Max Snoop Latency: %luns\n", + __SHIFTOUT(reg, PCI_LTR_MAXSNOOPLAT_VAL) + * PCI_LTR_SCALETONS(__SHIFTOUT(reg, PCI_LTR_MAXSNOOPLAT_SCALE))); + printf(" Max No-Snoop Latency Register: 0x%04x\n", reg >> 16); + printf(" Max No-Snoop Latency: %luns\n", + __SHIFTOUT(reg, PCI_LTR_MAXNOSNOOPLAT_VAL) + * PCI_LTR_SCALETONS(__SHIFTOUT(reg, PCI_LTR_MAXNOSNOOPLAT_SCALE))); } static void Index: src/sys/dev/pci/pcireg.h diff -u src/sys/dev/pci/pcireg.h:1.130 src/sys/dev/pci/pcireg.h:1.131 --- src/sys/dev/pci/pcireg.h:1.130 Mon May 29 07:09:20 2017 +++ src/sys/dev/pci/pcireg.h Thu Jun 15 06:51:18 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pcireg.h,v 1.130 2017/05/29 07:09:20 msaitoh Exp $ */ +/* $NetBSD: pcireg.h,v 1.131 2017/06/15 06:51:18 msaitoh Exp $ */ /* * Copyright (c) 1995, 1996, 1999, 2000 @@ -1877,7 +1877,7 @@ struct pci_rom { #define PCI_LTR_MAXNOSNOOPLAT 0x04 /* Max No-Snoop Latency */ #define PCI_LTR_MAXNOSNOOPLAT_VAL __BITS(25, 16) /* Max No-Snoop LatencyValue*/ #define PCI_LTR_MAXNOSNOOPLAT_SCALE __BITS(28, 26) /*Max NoSnoop LatencyScale*/ -#define PCI_LTR_SCALETONS(x) ((32 << (x)) / 32) +#define PCI_LTR_SCALETONS(x) (1 << ((x) * 5)) /* * Extended capability ID: 0x0019