Received: by 2002:a05:7412:b995:b0:f9:9502:5bb8 with SMTP id it21csp6094713rdb; Mon, 1 Jan 2024 08:27:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IEpBN1cBaXXyixYGyZ/4FKCohr4UIB5XQzq/34isOxrS/mFAwH0rdlmgsUB9Msc+ZJV1qwZ X-Received: by 2002:a17:902:c950:b0:1d4:2913:69a with SMTP id i16-20020a170902c95000b001d42913069amr17806274pla.44.1704126427497; Mon, 01 Jan 2024 08:27:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704126427; cv=none; d=google.com; s=arc-20160816; b=hXck++0yRI+kLIJwmIusl4M8EgJQCxigZ5yOYiP+EwfREovslv7XPpPSOi2No8OEOu cFJq3chaXETFG2wrqQUBjOOcD7Rax/3x95gi2yrH026n98FFQ1k6rTYQRS6Szwrb77E4 mG/4Zi5yP0vG2EMuVzMfPJ0tm00CpCt2ze9Ia4IY8ozKrnMlebGFPgzB20vcm+kPv54w y3rHFLzyN9pccCwllHQkr6tnV2Hh16X7BwNQ+AfcVQYWfBRtLYPxA3vKFvU9Xu08UGeE fuPAtz/V98bVU7T1JDaavd/9jKIAYQW8/ojDPyLUvwwLnSLs3SepQkzwqxGQZHbdmLf8 fO0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-id:mime-version:list-unsubscribe:list-subscribe:list-id :precedence:references:message-id:in-reply-to:subject:cc:to:from :date:dkim-signature; bh=z80h9xMnLrFfCJZSi7A++vx8CASALLtDaD4bEoUQ3zg=; fh=KpuXO1Rhu2XnaR7ZqrrNqdjSxNDpF9ksF9Af/TJfAQI=; b=p7vCWVR0aHGuG3cjrLsjjrz14CfyOLSFx89yXE30QuBiZXi7XM4QwSs1NsQcrIipnd F67vk1NmVLQ2jkWE/uNYlUGMsBxlItkax+rQCRcX0LxJzqKKxTyDwPZrE6ivyCVUKAfp nphoX350u7TRSD0qDesKYsA/Y6h2AKAEOwS7xcm70Tntq3+K6IWSq3uSBgItdP6N5rWs eOtHBTFqaTVvZDYo2mP41GfwNVUYvBAFAgN9JSan/vXtcrW0iP++mnLxPCXO+3BtYgRa I7HI0emT/l9iIt+tZ9H230+pZxnjxHkeyvNesFfcBO4HG4p+Bm077/lAtetz47FdvBSO SqGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=fSKrkM8b; spf=pass (google.com: domain of linux-kernel+bounces-13903-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-13903-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id ft20-20020a17090b0f9400b0028c9e90e1ffsi7604799pjb.97.2024.01.01.08.27.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Jan 2024 08:27:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-13903-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=fSKrkM8b; spf=pass (google.com: domain of linux-kernel+bounces-13903-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-13903-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id EAB3CB211DD for ; Mon, 1 Jan 2024 16:27:04 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3A7746FAF; Mon, 1 Jan 2024 16:26:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="fSKrkM8b" X-Original-To: linux-kernel@vger.kernel.org Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ABB6363A0; Mon, 1 Jan 2024 16:26:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1704126412; x=1735662412; h=date:from:to:cc:subject:in-reply-to:message-id: references:mime-version:content-id; bh=qkQCaAfgp9d77EcAt0SnIBdGmkAlVg1/8Or7Ngnt334=; b=fSKrkM8b7C9/geQ4ZQGzAg8rXkeWs3GQ0sz/KSbKf3oZGuKHN4vZtdqB QZDILJYv57cCBf/kajvJfUhYGABqElWnCA1wywgz6w04xJLrG1hMs/KwD RmGxM3endeGlgHFhpWF7MZDBkg4RmH+7sFjBefH0r68mNM+thGgcVHMPR 4fFKdGIHCYIrWDXhoeruPterqBBnUmKPmc0RbOuf9zkjnj1PKJrwunKb2 khX9Wu8NHFAA5UYn7oEzUpxHKq4evMWb+hro7FpKze0vW4TaergNzcqDK dfEyBmqhb1bIVLqeI01aGmsrwb8nLfXlbR76SKqToQXM3GWexmri8UH4M Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10940"; a="18346893" X-IronPort-AV: E=Sophos;i="6.04,322,1695711600"; d="scan'208";a="18346893" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jan 2024 08:26:51 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10940"; a="729271316" X-IronPort-AV: E=Sophos;i="6.04,322,1695711600"; d="scan'208";a="729271316" Received: from amazouz-mobl.ger.corp.intel.com ([10.251.210.158]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jan 2024 08:26:45 -0800 Date: Mon, 1 Jan 2024 18:26:40 +0200 (EET) From: =?ISO-8859-15?Q?Ilpo_J=E4rvinen?= To: Lukas Wunner cc: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , Krzysztof Wilczy??ski , Alexandru Gagniuc , Krishna chaitanya chundru , Srinivas Pandruvada , "Rafael J . Wysocki" , linux-pm@vger.kernel.org, Bjorn Helgaas , LKML , Alex Deucher , Daniel Lezcano , Amit Kucheria , Zhang Rui Subject: Re: [PATCH v3 05/10] PCI: Store all PCIe Supported Link Speeds In-Reply-To: <20231230193000.GA11331@wunner.de> Message-ID: <5dd84bbf-2e5-dded-bf49-f4db17b265f0@linux.intel.com> References: <20230929115723.7864-1-ilpo.jarvinen@linux.intel.com> <20230929115723.7864-6-ilpo.jarvinen@linux.intel.com> <20231230114549.GB12257@wunner.de> <20231230193000.GA11331@wunner.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="8323329-737575340-1704125951=:2521" Content-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-737575340-1704125951=:2521 Content-Type: text/plain; CHARSET=ISO-8859-15 Content-Transfer-Encoding: 8BIT Content-ID: On Sat, 30 Dec 2023, Lukas Wunner wrote: > On Sat, Dec 30, 2023 at 12:45:49PM +0100, Lukas Wunner wrote: > > On Fri, Sep 29, 2023 at 02:57:18PM +0300, Ilpo J?rvinen wrote: > > > struct pci_bus stores max_bus_speed. Implementation Note in PCIe r6.0.1 > > > sec 7.5.3.18, however, recommends determining supported Link Speeds > > > using the Supported Link Speeds Vector in the Link Capabilities 2 > > > Register (when available). > > > > > > Add pcie_bus_speeds into struct pci_bus which caches the Supported Link > > > Speeds. The value is taken directly from the Supported Link Speeds > > > Vector or synthetized from the Max Link Speed in the Link Capabilities > > > Register when the Link Capabilities 2 Register is not available. > > > > Remind me, what's the reason again to cache this and why is > > max_bus_speed not sufficient? Is the point that there may be > > "gaps" in the supported link speeds, i.e. not every bit below > > the maximum supported speed may be set? And you need to skip > > over those gaps when throttling to a lower speed? > > FWIW I went and re-read the internal review I provided on May 18. > Turns out I already mentioned back then that gaps aren't permitted: > > "Per PCIe r6.0.1 sec 8.2.1, the bitfield in the Link Capabilities 2 > register is not permitted to contain gaps between maximum supported > speed and lowest possible speed (2.5 GT/s Gen1)." > > > > Also, I note that pci_set_bus_speed() doesn't use LNKCAP2. > > About that, I wrote in May: > > "Actually, scratch that. pci_set_bus_speed() is fine. Since it's only > interested in the *maximum* link speed, reading just LnkCap is correct. > LnkCap2 only needs to be read to determine if a certain speed is > *supported*. E.g., even though 32 GT/s are supported, perhaps 16 GT/s > are not. > > It's rather pcie_get_speed_cap() which should be changed. There's > no need for it to read LnkCap2. The commit which introduced this, > 6cf57be0f78e, was misguided and had to be fixed up with f1f90e254e46. > It could be simplified to just read LnkCap and return > pcie_link_speed[linkcap & PCI_EXP_LNKCAP_SLS]. If the device is a > Root Port or Downstream Port, it doesn't even have to do that but > could return the cached value in subordinate->max_bus_speed. > If you add another attribute to struct pci_bus for the downstream > device's maximum speed, the maximum speed for Endpoints and Upstream > Ports could be returned directly as well from that attribute." I know it's quite far back so it's understandable to forget :-), but already by May 23rd your position had changed and you wrote this: 'Per the Implementation Note at the end of PCIe r6.0.1 sec 7.5.3.18, "It is strongly encouraged that software primarily utilize the Supported Link Speeds Vector instead of the Max Link Speed field, so that software can determine the exact set of supported speeds on current and future hardware. This can avoid software being confused if a future specification defines Links that do not require support for all slower speeds." This means that it's not sufficient if you just check that the desired speed is lower than the maximum. Instead, you should check if the bit corresponding to the desired speed is set in the LnkCap2 register's Supported Link Speeds Vector. PCIe r6.0.1 sec 8.2.1 stipulates that the bitfield is not permitted to contain gaps between maximum supported speed and lowest possible speed (2.5 GT/s Gen1). However the Implementation Note suggests that rule may no longer apply in future revisions of the PCIe Base Spec.' So I'd assume I should still follow the way spec recommends, not the "old method" that may not function correctly after some future version of the spec, or have you really changed position once again on this? -- i. --8323329-737575340-1704125951=:2521--