Received: by 2002:a05:6358:700f:b0:131:369:b2a3 with SMTP id 15csp1899983rwo; Thu, 3 Aug 2023 01:15:05 -0700 (PDT) X-Google-Smtp-Source: APBJJlHffyWUQkeO4dY8Oj6LCBjxguN6sHNBF5AflonsZ/9aSW0s2vrqKVplnUbu/SeJcx1u+YUU X-Received: by 2002:a05:6a00:18a5:b0:686:24e1:d12e with SMTP id x37-20020a056a0018a500b0068624e1d12emr21990326pfh.30.1691050504536; Thu, 03 Aug 2023 01:15:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691050504; cv=none; d=google.com; s=arc-20160816; b=F+gagY3+sVXkaI18qNVubo307783jkNlXs278GDFLFshVN5fDAdUQhToE8SYKOoEy/ rm5FN04z+fm1MYcJz6pRaDHoEYwwDAUsJR4fwajEUcqAjbZ76hoWw+2P785WSCqPVEub YgQz/M99IH217h9/ctkeuuhIJMfBmY7WZY7rE/Yo7icU0fUs7zIs7kN88MPHFVlEVL/c /mYQGAxv8OB1C9vNu12nCB96ktiSGCKO9FhqOmUzMtz6rpkkDkfhPby69J7gPW1KTTTU j4OTrO1/TFZIIBe/RXMSarfNQjhU0VoqfY9kJeEZuGAWTuje8hkwIA0luJCsyviW6gEz 8SOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=CO4vGx700BpVjW9xpBkr3zmd0vt2JWRQmuezXxPKqlw=; fh=cUgMC1kq1N9SxuISpOT0FJNH+8kul9VQnFgY+Yjwomw=; b=KnyPPdTiiyDOsPR8Kb1bfl1kjx4C7EUgjec7CVEhg/zBx56E3qnjIfrqv+ZYc9HJ+Y wwe+9fBi2iV0XUVYX729Tj2K4F1nwbr8wCQWGNfRFLTQ2jvKUMVFAs545f4FXjsW2MO5 18a+TfihZh6k4iIA6dhddiYAE3Sw6YZKBHjXNg7aYZ3KotkzhznQyPkt7TYP9RK+rda3 sy+VxpHPMbAz9g8qJ1UPn3ond1KisE5ZJQ3Ve2+KC0h0M9PTZaLIQlHT3jybRqAdB20a vA7Km7PYp3ip+2FhSc7knjbLxHGooR7cpTRDZ6AjSUvsBbqL+gIHeTMvg+Sj0aqh57Yp 4Huw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g16-20020aa78750000000b0065addb172d1si10920034pfo.380.2023.08.03.01.14.52; Thu, 03 Aug 2023 01:15:04 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229953AbjHCH5K convert rfc822-to-8bit (ORCPT + 99 others); Thu, 3 Aug 2023 03:57:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32970 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233418AbjHCH4U (ORCPT ); Thu, 3 Aug 2023 03:56:20 -0400 Received: from ex01.ufhost.com (ex01.ufhost.com [61.152.239.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4C18193C2; Thu, 3 Aug 2023 00:44:32 -0700 (PDT) Received: from EXMBX166.cuchost.com (unknown [175.102.18.54]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "EXMBX166", Issuer "EXMBX166" (not verified)) by ex01.ufhost.com (Postfix) with ESMTP id 45F6E24E267; Thu, 3 Aug 2023 15:43:49 +0800 (CST) Received: from EXMBX172.cuchost.com (172.16.6.92) by EXMBX166.cuchost.com (172.16.6.76) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Thu, 3 Aug 2023 15:43:49 +0800 Received: from [192.168.125.136] (183.27.98.54) by EXMBX172.cuchost.com (172.16.6.92) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Thu, 3 Aug 2023 15:43:48 +0800 Message-ID: Date: Thu, 3 Aug 2023 15:43:47 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v1 8/9] PCI: PLDA: starfive: Add JH7110 PCIe controller Content-Language: en-US To: =?UTF-8?Q?Pali_Roh=c3=a1r?= CC: Bjorn Helgaas , Minda Chen , Daire McNamara , Conor Dooley , Rob Herring , "Krzysztof Kozlowski" , Bjorn Helgaas , Lorenzo Pieralisi , =?UTF-8?Q?Krzysztof_Wilczy=c5=84ski?= , Emil Renner Berthing , , , , , Paul Walmsley , "Palmer Dabbelt" , Albert Ou , "Philipp Zabel" , Mason Huo , Leyfoon Tan , Mika Westerberg , "Maciej W. Rozycki" , =?UTF-8?Q?Marek_Beh=c3=ban?= References: <20230802171805.GA62238@bhelgaas> <1c546489-40dd-25c5-3ac2-9e3b3fd5a670@starfivetech.com> <20230803065835.twdicvx62mgzzzqi@pali> From: Kevin Xie In-Reply-To: <20230803065835.twdicvx62mgzzzqi@pali> Content-Type: text/plain; charset="UTF-8" X-Originating-IP: [183.27.98.54] X-ClientProxiedBy: EXCAS066.cuchost.com (172.16.6.26) To EXMBX172.cuchost.com (172.16.6.92) X-YovoleRuleAgent: yovoleflag Content-Transfer-Encoding: 8BIT X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,NICE_REPLY_A, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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 2023/8/3 14:58, Pali Rohár wrote: > On Thursday 03 August 2023 10:23:47 Kevin Xie wrote: >> On 2023/8/3 1:18, Bjorn Helgaas wrote: >> > On Tue, Aug 01, 2023 at 03:05:46PM +0800, Kevin Xie wrote: >> >> On 2023/8/1 7:12, Bjorn Helgaas wrote: >> >> ... >> > >> >> > The delay required by sec 6.6.1 is a minimum of 100ms following exit >> >> > from reset or, for fast links, 100ms after link training completes. >> >> > >> >> > The comment at the call of advk_pcie_wait_for_link() [2] says it is >> >> > the delay required by sec 6.6.1, but that doesn't seem right to me. >> >> > >> >> > For one thing, I don't think 6.6.1 says anything about "link up" being >> >> > the end of a delay. So if we want to do the delay required by 6.6.1, >> >> > "wait_for_link()" doesn't seem like quite the right name. >> >> > >> >> > For another, all the *_wait_for_link() functions can return success >> >> > after 0ms, 90ms, 180ms, etc. They're unlikely to return after 0ms, >> >> > but 90ms is quite possible. If we avoided the 0ms return and >> >> > LINK_WAIT_USLEEP_MIN were 100ms instead of 90ms, that should be enough >> >> > for slow links, where we need 100ms following "exit from reset." >> >> > >> >> > But it's still not enough for fast links where we need 100ms "after >> >> > link training completes" because we don't know when training >> >> > completed. If training completed 89ms into *_wait_for_link(), we only >> >> > delay 1ms after that. >> >> >> >> That's the point, we will add a extra 100ms after PERST# de-assert >> >> in the patch-v3 according to Base Spec r6.0 - 6.6.1: >> >> msleep(100); >> >> gpiod_set_value_cansleep(pcie->reset_gpio, 0); >> >> >> >> + /* As the requirement in PCIe base spec r6.0, system must wait a >> >> + * minimum of 100 ms following exit from a Conventional Reset >> >> + * before sending a Configuration Request to the device.*/ >> >> + msleep(100); >> >> + >> >> if (starfive_pcie_host_wait_for_link(pcie)) >> >> return -EIO; >> > >> > For fast links (links that support > 5.0 GT/s), the 100ms starts >> > *after* link training completes. The above looks OK if starfive only >> > supports slow links, but then I'm not sure why we would need >> > starfive_pcie_host_wait_for_link(). >> > >> Yes, the maximum speed of JH7110 PCIe is 5.0 GT/s (Gen2x1). >> >> About starfive_pcie_host_wait_for_link(): >> JH7110 SoC only has one root port in each PCIe controller (2 in total) >> and they do not support hot-plug yet. > > Beware that even if HW does not support hotplug, endpoint PCIe card > still may drop the link down and later put it up (for example if FW in > the card crashes or when card want to do internal reset, etc...; this is > very common for wifi cards). So drivers for non-hotplug controllers > still have to handle hotplug events generated by link up/down state. > > So it means that, if endpoint PCIe card is not detected during probe > time, it may be detected later. So this check to completely stop > registering controller is not a good idea. Note that userspace can > tell kernel (via sysfs) to rescan all PCIe buses and try to discover new > PCIea devices. > Yes, we should not ignored this situation. >> Thus, We add starfive_pcie_host_wait_for_link() to poll if it is a empty slot. >> If nothing here, we will exit the probe() of this controller, and it will not >> go into pci_host_probe() too. >> This may not be a very standard logic, should we remove it or rewrite in a better way? >> >> > Bjorn > > Rather to remove this starfive_pcie_host_wait_for_link logic. > > Better option would be to teach PCI core code to wait for the link > before trying to read vendor/device ids, like I described in my old > proposal. Yes, the proposal can prevent us from writing the wrong timing. However, as things stand, we have to do the waiting in host controller driver now. We will keep the wait for the link, but don't return error when the link is down, such as: if (starfive_pcie_host_wait_for_link(pcie)) dev_info(dev, "port link down\n");