Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp6330426rwb; Mon, 5 Dec 2022 10:44:36 -0800 (PST) X-Google-Smtp-Source: AA0mqf4t8KFeyv5DPpuXG/FU3noeKpxKxsLqqnQP09fZm41cZ3iST+CaP+Gsl7CGOZlxXcT4MCtE X-Received: by 2002:a17:907:a80b:b0:7b5:cab4:68b8 with SMTP id vo11-20020a170907a80b00b007b5cab468b8mr52638242ejc.685.1670265876669; Mon, 05 Dec 2022 10:44:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670265876; cv=none; d=google.com; s=arc-20160816; b=nH3xUX+RReQrtfgudQ0GVJpHSMxsTAZspXLMoKWr6QTJFlsdsUEBL8J6pn2Pgr8KAS NM6f3B7L89svdYcIJOZdoOTkrjX2on+ktuvTMcWz2KVgUFs2ho6dqMhSRk4MCEDyVVNh 6E0OYE/Rejf29eWAoZGfA4AYvS8TpwOsxempunYnZQ/ky/YX9OrC2RuRe+a3IZf67vJ9 NoLiB5Ejs9Wx6JdHBF5cVzPNwJqPTWjcaFom7vRiwXA2su9yDX0T7mvMKwIrsnysi8MZ ZAaJh45WacHI89tnN3Ma3bG6EWatuzbgEuIFyoWRa6VgkjWBNeKIyhOsDcbvsm9EioHW I+ZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=1Kwjjsx+waj1NcHgZ8ne7/Y3ZoidRky6q1QRST3mznU=; b=BewocM8OYliIhpyqQ66QagBsAHdRrDHZkRnV8qxHXwq2PpqCUuLsFHdzQ+H63VZTOS FlniewT8b0Y8I0i9EPX92C80lIbecWI4SaoQyWavthn7hKi9bfzuoa3sO5cPuWz+JWH6 R3kHXHMAYnDM/5r7vDhipNZkM9xhnfLjEfhMz3atAtSXdNSb7yfOp+QbjS3YexsgsMiX N/PN2WO0jBUlm5ZwvJyUJ1p7jt63adQK9BFRwrgRFCv4pQHnt7qhJXluSP+kJA5GwlAh jtXVAyKgJYqWUQQcJPpZhVR02XIpPT54+YEaG9nmzM9XuIitU/Zpe+QOotnMA9Bsyt/v nF1w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b="k/D6BRrA"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sb29-20020a1709076d9d00b0078dcdbb3e87si10604680ejc.530.2022.12.05.10.44.18; Mon, 05 Dec 2022 10:44:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b="k/D6BRrA"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230450AbiLESSq (ORCPT + 81 others); Mon, 5 Dec 2022 13:18:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34852 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230154AbiLESSk (ORCPT ); Mon, 5 Dec 2022 13:18:40 -0500 Received: from mail-io1-xd31.google.com (mail-io1-xd31.google.com [IPv6:2607:f8b0:4864:20::d31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D127F18374 for ; Mon, 5 Dec 2022 10:18:38 -0800 (PST) Received: by mail-io1-xd31.google.com with SMTP id c7so8093823iof.13 for ; Mon, 05 Dec 2022 10:18:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=1Kwjjsx+waj1NcHgZ8ne7/Y3ZoidRky6q1QRST3mznU=; b=k/D6BRrAiEltqHGAx7SdxcEa8xxfmOjT2Q8OQrBn85TrObX/ggwOvTc/w630GDofxn 5mGGw13ytll+9uDYJfi1kQUcIVnouzkhyJJA9S43gB09mJGCNGxYdPUo6JeRjK0kNET4 Emjqo8yM/xdPN7/CtKRinsPeLRnn+bQekTW7w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=1Kwjjsx+waj1NcHgZ8ne7/Y3ZoidRky6q1QRST3mznU=; b=gVd7esNDdPfETY3Lz+ejTwOqyZKG/9r6DZUsjb8bIf/Wu8qADGsQev6DzWtw0b9TKs Bm3lEiCjRTNP0tlRS6/YXBEtARQpPRWY9XhtSv0n9634rrn/hAJr5koypEw6cXqV3Ii8 iWtIbnWNjIcKNnfQxOlVSxS6qPxx7fQvHIgXluyAua7lMwEFt3GWYrdGwicpd3NIRGfK ukbeNSii0jy6J2s6v+/vT05L3NKFTVLf3uJu9JFhipVNjmSvTlBl6+ZCj9/HVal/Od+L 6Re72BKqGYHQMbVoqMG8zzsjIoG56sfY3/2Lr46VhWPqX+sUdJ5+ntnyZRoybTqdCdiE D5tw== X-Gm-Message-State: ANoB5pkmZnAvJ+zaIO51w7N2fqxMDNzfvUHRkd0owdSCmOf7JGL2P4kU 6mt+evO7W/lkX3sz2csLBeeXYA== X-Received: by 2002:a05:6638:450a:b0:363:a91e:7ead with SMTP id bs10-20020a056638450a00b00363a91e7eadmr39895791jab.196.1670264317535; Mon, 05 Dec 2022 10:18:37 -0800 (PST) Received: from localhost (30.23.70.34.bc.googleusercontent.com. [34.70.23.30]) by smtp.gmail.com with UTF8SMTPSA id u30-20020a02cbde000000b0038a55bcfb47sm440373jaq.58.2022.12.05.10.18.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 05 Dec 2022 10:18:37 -0800 (PST) Date: Mon, 5 Dec 2022 18:18:36 +0000 From: Matthias Kaehlcke To: Manivannan Sadhasivam Cc: Krishna chaitanya chundru , helgaas@kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, quic_vbadigan@quicinc.com, quic_hemantk@quicinc.com, quic_nitegupt@quicinc.com, quic_skananth@quicinc.com, quic_ramkri@quicinc.com, swboyd@chromium.org, dmitry.baryshkov@linaro.org, Prasad Malisetty , Bjorn Helgaas , "Saheed O. Bolarinwa" , Vidya Sagar , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Kai-Heng Feng Subject: Re: [PATCH v7] PCI/ASPM: Update LTR threshold based upon reported max latencies Message-ID: References: <1663315719-21563-1-git-send-email-quic_krichai@quicinc.com> <20221205112500.GB4514@thinkpad> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20221205112500.GB4514@thinkpad> X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Dec 05, 2022 at 04:55:00PM +0530, Manivannan Sadhasivam wrote: > On Fri, Sep 16, 2022 at 01:38:37PM +0530, Krishna chaitanya chundru wrote: > > In ASPM driver, LTR threshold scale and value are updated based on > > tcommon_mode and t_poweron values. In Kioxia NVMe L1.2 is failing due to > > LTR threshold scale and value are greater values than max snoop/non-snoop > > value. > > > > Based on PCIe r4.1, sec 5.5.1, L1.2 substate must be entered when > > reported snoop/no-snoop values is greater than or equal to > > LTR_L1.2_THRESHOLD value. > > > > Signed-off-by: Prasad Malisetty > > Signed-off-by: Krishna chaitanya chundru > > Acked-by: Manivannan Sadhasivam > > I take my Ack back... Sorry that I did not look into this patch closer. > > > --- > > > > I am taking this patch forward as prasad is no more working with our org. > > changes since v6: > > - Rebasing with pci/next. > > changes since v5: > > - no changes, just reposting as standalone patch instead of reply to > > previous patch. > > Changes since v4: > > - Replaced conditional statements with min and max. > > changes since v3: > > - Changed the logic to include this condition "snoop/nosnoop > > latencies are not equal to zero and lower than LTR_L1.2_THRESHOLD" > > Changes since v2: > > - Replaced LTRME logic with max snoop/no-snoop latencies check. > > Changes since v1: > > - Added missing variable declaration in v1 patch > > --- > > drivers/pci/pcie/aspm.c | 30 ++++++++++++++++++++++++++++++ > > 1 file changed, 30 insertions(+) > > > > diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c > > index 928bf64..2bb8470 100644 > > --- a/drivers/pci/pcie/aspm.c > > +++ b/drivers/pci/pcie/aspm.c > > @@ -486,13 +486,35 @@ static void aspm_calc_l1ss_info(struct pcie_link_state *link, > > { > > struct pci_dev *child = link->downstream, *parent = link->pdev; > > u32 val1, val2, scale1, scale2; > > + u32 max_val, max_scale, max_snp_scale, max_snp_val, max_nsnp_scale, max_nsnp_val; > > u32 t_common_mode, t_power_on, l1_2_threshold, scale, value; > > u32 ctl1 = 0, ctl2 = 0; > > u32 pctl1, pctl2, cctl1, cctl2; > > + u16 ltr; > > + u16 max_snoop_lat, max_nosnoop_lat; > > > > if (!(link->aspm_support & ASPM_STATE_L1_2_MASK)) > > return; > > > > + ltr = pci_find_ext_capability(child, PCI_EXT_CAP_ID_LTR); > > + if (!ltr) > > + return; > > + > > + pci_read_config_word(child, ltr + PCI_LTR_MAX_SNOOP_LAT, &max_snoop_lat); > > + pci_read_config_word(child, ltr + PCI_LTR_MAX_NOSNOOP_LAT, &max_nosnoop_lat); > > + > > + max_snp_scale = (max_snoop_lat & PCI_LTR_SCALE_MASK) >> PCI_LTR_SCALE_SHIFT; > > + max_snp_val = max_snoop_lat & PCI_LTR_VALUE_MASK; > > + > > + max_nsnp_scale = (max_nosnoop_lat & PCI_LTR_SCALE_MASK) >> PCI_LTR_SCALE_SHIFT; > > + max_nsnp_val = max_nosnoop_lat & PCI_LTR_VALUE_MASK; > > + > > + /* choose the greater max scale value between snoop and no snoop value*/ > > + max_scale = max(max_snp_scale, max_nsnp_scale); > > + > > + /* choose the greater max value between snoop and no snoop scales */ > > + max_val = max(max_snp_val, max_nsnp_val); > > + > > /* Choose the greater of the two Port Common_Mode_Restore_Times */ > > val1 = (parent_l1ss_cap & PCI_L1SS_CAP_CM_RESTORE_TIME) >> 8; > > val2 = (child_l1ss_cap & PCI_L1SS_CAP_CM_RESTORE_TIME) >> 8; > > @@ -525,6 +547,14 @@ static void aspm_calc_l1ss_info(struct pcie_link_state *link, > > */ > > l1_2_threshold = 2 + 4 + t_common_mode + t_power_on; > > encode_l12_threshold(l1_2_threshold, &scale, &value); > > + > > + /* > > + * Based on PCIe r4.1, sec 5.5.1, L1.2 substate must be entered when reported > > + * snoop/no-snoop values are greater than or equal to LTR_L1.2_THRESHOLD value. > > Apart from the bug in calculating the LTR_Threshold as reported by Matthias > and Bjorn, I'm wondering if we are covering up for the device firmware issue. Yes, I think the patch is doing exactly that. > As per section 6.18, if the device reports snoop/no-snoop scale/value as 0, then > it implies that the device won't tolerate any additional delays from the host. > > In that case, how can we allow the link to go into L1.2 since that would incur > high delay compared to L1.1? I had the same doubt, a value of 0 doesn't make sense, if it literally means 'max delay of 0ns'. I did some debugging around this issue. One thing I found is that there are NVMe models that don't have issues with entering L1.2 with max (no-)snoop latencies of 0. From that I infer that a value of 0 does not literally mean a max delay of 0ns. The PCIe spec doesn't say specifically what a value of 0 in those registers means, but chapter "6.18 Latency Tolerance Reporting (LTR) Mechanism" of the PCIe 4.0 base spec says something about the latency requirements in LTR messages: Setting the value and scale fields to all 0’s indicates that the device will be impacted by any delay and that the best possible service is requested. With that and the fact that several NVMe's don't have issues with all 0 values I deduce that all 0's means 'best possible service' and not 'max latency of 0ns'. It seems the Kioxia firmware has a bug which interprets all 0 values as a max latency of 0ns. Another finding is that the Kioxia NVMe can enter L1.2 if the max latencies are set to values >= the LTR threshold. Unfortunately that isn't a viable fix for existing devices in the field, devices under development could possibly adjust the latencies in the BIOS (coreboot code [1] suggests that this is done at least in some cases). m. [1] https://github.com/coreboot/coreboot/blob/master/src/device/pciexp_device.c#L313 > > + */ > > + scale = min(scale, max_scale); > > + value = min(value, max_val); > > + > > ctl1 |= t_common_mode << 8 | scale << 29 | value << 16; > > > > /* Some broken devices only support dword access to L1 SS */ > > -- > > 2.7.4 > > > > -- > மணிவண்ணன் சதாசிவம்