Received: by 10.213.65.16 with SMTP id m16csp246683imf; Mon, 12 Mar 2018 02:15:41 -0700 (PDT) X-Google-Smtp-Source: AG47ELvScESxnzDdIPSwcJjQBTcUs/VoFEkeLowtWYa1C1r0KLRhqDZO+TwUVGsvxd93V1LCzNpl X-Received: by 2002:a17:902:690b:: with SMTP id j11-v6mr7590854plk.124.1520846141146; Mon, 12 Mar 2018 02:15:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1520846141; cv=none; d=google.com; s=arc-20160816; b=Bd4Kb9/8odMX40ya515nq1I6ZoFdTQuhXRWhtah950OVufchqQGpURm+Mf9GxD0o5J eY+0v00a/LD9JXLavIfcBPj8gIw1CsGv+G9VeO77TlBWMvjwLz2UXRqfW07RWVBWFgw5 xcJFeEj/MYXPDtcM26rbe50lnP4JtN8JriDGUlKC71H/Krktbqw3gOhKEpQA4OwNG2QY 3dZYkk+m4848Xe0PriBOg9NNIqIcOSsx4XQJfmabd7mtNR6XPWLRcxf7eklFGcSUTnxQ A9NnrvYBASR4rGzuoeuXcEE70LKJ3R24Rxg0ES5I+bp2s2WssNhFwawMpX+rHyr/CBtk EDWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from:arc-authentication-results; bh=KvOfKVP2wFrkmb78t2OXHWJSzi/lOpbcWvC+3ewGMN4=; b=yxMl/dHgWGmiv8ApxOE3vCsNyDK8Fn4pv89vKIDS4g9PT7MQyQQgfIuspCn9MY8hF6 7gP+vSw+To4yU440FgnrLIwqeFd7oZz7UavCEtwFQ52Ax8UF6ibzQdZLYWjOGiZuB5DB aXxblfnRK2JcopQYnnhMTm0+quL0SFIW107E1ItL5YivYZeMsvrzppGUi3PJO5JhKyXS cGDP5Q3WytH8Gxe6dkShjw+bZSn1nj7v4LiNbFKRWFVOiUPPRIlEPdr3QFl+Cbs+F1Gd lsrvrYAxoyhZ7/LNdXQsRV897FSFbUh44fr5rvBkC+uAN5XwcbgpsKLiJulBosm2fLFQ iESw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q1-v6si5917582plk.632.2018.03.12.02.15.27; Mon, 12 Mar 2018 02:15:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752191AbeCLJOY (ORCPT + 99 others); Mon, 12 Mar 2018 05:14:24 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:39141 "EHLO huawei.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1751252AbeCLJOO (ORCPT ); Mon, 12 Mar 2018 05:14:14 -0400 Received: from DGGEMS402-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 13DAC8CAE8825; Mon, 12 Mar 2018 17:14:00 +0800 (CST) Received: from localhost.localdomain (10.67.212.132) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.361.1; Mon, 12 Mar 2018 17:13:51 +0800 From: Jay Fang To: CC: , , Jay Fang Subject: [PATCH] PCI: Support PCIe 4.0 data rate(16.0 GT/s) Date: Mon, 12 Mar 2018 17:13:32 +0800 Message-ID: <1520846012-8294-1-git-send-email-f.fangjian@huawei.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.67.212.132] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PCIe 4.0 provides an effective 16.0 GT/second/lane/direction of raw bandwidth. Current PCI driver does not support this new feature. For example, when you read a PCIe 4.0 EP's link data rate by sysfs, it will return "Unknown speed", not the expected "16.0 GT/s". Signed-off-by: Jay Fang Reviewed-by: Dongdong Liu --- drivers/pci/pci-sysfs.c | 6 ++++++ drivers/pci/probe.c | 2 +- drivers/pci/slot.c | 1 + include/linux/pci.h | 1 + include/uapi/linux/pci_regs.h | 2 ++ 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index eb6bee8..7dc5be5 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -168,6 +168,9 @@ static ssize_t max_link_speed_show(struct device *dev, return -EINVAL; switch (linkcap & PCI_EXP_LNKCAP_SLS) { + case PCI_EXP_LNKCAP_SLS_16_0GB: + speed = "16 GT/s"; + break; case PCI_EXP_LNKCAP_SLS_8_0GB: speed = "8 GT/s"; break; @@ -213,6 +216,9 @@ static ssize_t current_link_speed_show(struct device *dev, return -EINVAL; switch (linkstat & PCI_EXP_LNKSTA_CLS) { + case PCI_EXP_LNKSTA_CLS_16_0GB: + speed = "16 GT/s"; + break; case PCI_EXP_LNKSTA_CLS_8_0GB: speed = "8 GT/s"; break; diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index ef53774..86bf045 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -592,7 +592,7 @@ const unsigned char pcie_link_speed[] = { PCIE_SPEED_2_5GT, /* 1 */ PCIE_SPEED_5_0GT, /* 2 */ PCIE_SPEED_8_0GT, /* 3 */ - PCI_SPEED_UNKNOWN, /* 4 */ + PCIE_SPEED_16_0GT, /* 4 */ PCI_SPEED_UNKNOWN, /* 5 */ PCI_SPEED_UNKNOWN, /* 6 */ PCI_SPEED_UNKNOWN, /* 7 */ diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c index d10f556..191893e 100644 --- a/drivers/pci/slot.c +++ b/drivers/pci/slot.c @@ -76,6 +76,7 @@ static const char *pci_bus_speed_strings[] = { "2.5 GT/s PCIe", /* 0x14 */ "5.0 GT/s PCIe", /* 0x15 */ "8.0 GT/s PCIe", /* 0x16 */ + "16.0 GT/s PCIe", /* 0x17 */ }; static ssize_t bus_speed_read(enum pci_bus_speed speed, char *buf) diff --git a/include/linux/pci.h b/include/linux/pci.h index 5adabe2..44ce439 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -259,6 +259,7 @@ enum pci_bus_speed { PCIE_SPEED_2_5GT = 0x14, PCIE_SPEED_5_0GT = 0x15, PCIE_SPEED_8_0GT = 0x16, + PCIE_SPEED_16_0GT = 0x17, PCI_SPEED_UNKNOWN = 0xff, }; diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h index 0c79eac..c1c4109 100644 --- a/include/uapi/linux/pci_regs.h +++ b/include/uapi/linux/pci_regs.h @@ -520,6 +520,7 @@ #define PCI_EXP_LNKCAP_SLS_2_5GB 0x00000001 /* LNKCAP2 SLS Vector bit 0 */ #define PCI_EXP_LNKCAP_SLS_5_0GB 0x00000002 /* LNKCAP2 SLS Vector bit 1 */ #define PCI_EXP_LNKCAP_SLS_8_0GB 0x00000003 /* LNKCAP2 SLS Vector bit 2 */ +#define PCI_EXP_LNKCAP_SLS_16_0GB 0x00000004 /* LNKCAP2 SLS Vector bit 3 */ #define PCI_EXP_LNKCAP_MLW 0x000003f0 /* Maximum Link Width */ #define PCI_EXP_LNKCAP_ASPMS 0x00000c00 /* ASPM Support */ #define PCI_EXP_LNKCAP_L0SEL 0x00007000 /* L0s Exit Latency */ @@ -547,6 +548,7 @@ #define PCI_EXP_LNKSTA_CLS_2_5GB 0x0001 /* Current Link Speed 2.5GT/s */ #define PCI_EXP_LNKSTA_CLS_5_0GB 0x0002 /* Current Link Speed 5.0GT/s */ #define PCI_EXP_LNKSTA_CLS_8_0GB 0x0003 /* Current Link Speed 8.0GT/s */ +#define PCI_EXP_LNKSTA_CLS_16_0GB 0x0004 /* Current Link Speed 16.0GT/s */ #define PCI_EXP_LNKSTA_NLW 0x03f0 /* Negotiated Link Width */ #define PCI_EXP_LNKSTA_NLW_X1 0x0010 /* Current Link Width x1 */ #define PCI_EXP_LNKSTA_NLW_X2 0x0020 /* Current Link Width x2 */ -- 2.7.4