Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp509032ybl; Fri, 23 Aug 2019 04:21:54 -0700 (PDT) X-Google-Smtp-Source: APXvYqyIZZfoGD54FiL+eCHSLuw/9WaRFoPF93I9WI02cgIi/pS5kJBD33XrA29zhj/BXKVGXLXa X-Received: by 2002:a17:902:566:: with SMTP id 93mr4258910plf.172.1566559314680; Fri, 23 Aug 2019 04:21:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566559314; cv=none; d=google.com; s=arc-20160816; b=y9jaST6j2ccUUT9iIiUKICxWWIQSXrTEhGck0eEu8ol+3wQMYbG79KPLgUBv6wfMwx E0J6gxRM5JgIwlhaS+HbbzzPKqXr6zMhtWjZ8s/wXMWocGpn6rVSYDtteADsgZJHr4HF mToouqPKmAWgmPrfotEzOxvpA2URRJ1fi/oHmyIn0fSYuANpfWG1mlDj0zX1Jup9t7z2 ltJ4HRHbMHG1B0Km84SfIc5opHXRj6J32EyoGYll6pg86uCOTuw4dEK23Lpyvl+eNbGC P/yfDNuIfAy85SXBUlaO2YHdQ6CpMykhIoh8MoY9wsqFpaiaeOQ6E/luQGvMVph/XIm1 3xRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=qyApzBz10PDnJbry1bsPXkL2jfksn9hzUDcDpmKk22o=; b=PkYmOvzcmx93DePASP3aa5PAjoFWblS6S6Qc5NxstOwv+MnR6s8MXV8KTIYQMXkBTC liN57JkSpcpYtpLLi3T5Ws5hlTI45KWcuI5pm9cu63bfEoXAAHMUn/p2NqoDdiaIEYVM YhD6/Qub3CvXr5VzyJ57Sb6PkM9I2voDqzzc7vMdujFFpk3l1ZTcc2w4skRdZBSgtyCd YQixoGMVDymwWB2h6gorQbHo+N0oHrb42n0jNTjYxyXQgt2aw/wmYfJq/x+1Vn8dnA8m 90+3RjH535JGBkiCevsOKU3sew9WxXMRfZA5BlSnnDDPtuhUcfOZpCSTh8itcAQEuUxi brFw== 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 n1si2057842pjt.23.2019.08.23.04.21.39; Fri, 23 Aug 2019 04:21:54 -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 S2388419AbfHWJo2 (ORCPT + 99 others); Fri, 23 Aug 2019 05:44:28 -0400 Received: from foss.arm.com ([217.140.110.172]:58694 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387777AbfHWJo2 (ORCPT ); Fri, 23 Aug 2019 05:44:28 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6FB50337; Fri, 23 Aug 2019 02:44:27 -0700 (PDT) Received: from localhost (unknown [10.37.6.20]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E259E3F246; Fri, 23 Aug 2019 02:44:26 -0700 (PDT) Date: Fri, 23 Aug 2019 10:44:25 +0100 From: Andrew Murray To: Lorenzo Pieralisi Cc: "Z.q. Hou" , "linux-pci@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "gustavo.pimentel@synopsys.com" , "jingoohan1@gmail.com" , "bhelgaas@google.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , Leo Li , "M.h. Lian" Subject: Re: [PATCHv2 0/4] Layerscape: Remove num-lanes property from PCIe nodes Message-ID: <20190823094424.GB14582@e119886-lin.cambridge.arm.com> References: <20190820073022.24217-1-Zhiqiang.Hou@nxp.com> <20190822164815.GA12855@e121166-lin.cambridge.arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190822164815.GA12855@e121166-lin.cambridge.arm.com> User-Agent: Mutt/1.10.1+81 (426a6c1) (2018-08-26) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Aug 22, 2019 at 05:48:15PM +0100, Lorenzo Pieralisi wrote: > On Tue, Aug 20, 2019 at 07:28:37AM +0000, Z.q. Hou wrote: > > From: Hou Zhiqiang > > > > On FSL Layerscape SoCs, the number of lanes assigned to PCIe > > controller is not fixed, it is determined by the selected > > SerDes protocol. The current num-lanes indicates the max lanes > > PCIe controller can support up to, instead of the lanes assigned > > to the PCIe controller. This can result in PCIe link training fail > > after hot-reset. > > > > Hou Zhiqiang (4): > > dt-bindings: PCI: designware: Remove the num-lanes from Required > > properties > > PCI: dwc: Return directly when num-lanes is not found > > ARM: dts: ls1021a: Remove num-lanes property from PCIe nodes > > arm64: dts: fsl: Remove num-lanes property from PCIe nodes > > > > Documentation/devicetree/bindings/pci/designware-pcie.txt | 1 - > > arch/arm/boot/dts/ls1021a.dtsi | 2 -- > > arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi | 1 - > > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 3 --- > > arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi | 6 ------ > > arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi | 3 --- > > arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 4 ---- > > drivers/pci/controller/dwc/pcie-designware.c | 6 ++++-- > > 8 files changed, 4 insertions(+), 22 deletions(-) > > What a mess. > > I am going to apply these but first if anyone can explain to > me what commit 907fce090253 was _supposed_ to to I would > be grateful, I read it multiple times but I still have not > understood it. This series does the right thing but why things The DWC controller drivers all implement a .host_init callback - some of the drivers choose to call dw_pcie_setup_rc from their callback which, amongst other things will set up/train the link. As far as I can tell, dw_pcie_setup_rc is the only user of pp->lanes. Therefore for hardware where the link is already set up by firmware and thus dw_pcie_setup_rc is never called - it is unnecessary to read the DT value for pp->lanes. So the first hunk in 907fce090253 gets rid of the error and makes the num-lanes property optional. However this opens up the possibility of a DT misconfiguration for other controllers that do call dw_pcie_setup_rc, i.e. they set num-lanes to 0 when it is required. Therefore the second hunk ensures that an error is emitted when num-lanes was needed but not provided. > are they way they are in the mainline honestly I have no > idea, this does not make any sense in the slightest: > > ret = of_property_read_u32(np, "num-lanes", &lanes); > if (ret) > lanes = 0; Please note that the code below is in a different function to the code above. > > /* Set the number of lanes */ > val = dw_pcie_readl_dbi(pci, PCIE_PORT_LINK_CONTROL); > val &= ~PORT_LINK_MODE_MASK; > switch (lanes) { > case 1: > val |= PORT_LINK_MODE_1_LANES; > break; > case 2: > val |= PORT_LINK_MODE_2_LANES; > break; > case 4: > val |= PORT_LINK_MODE_4_LANES; > break; > case 8: > val |= PORT_LINK_MODE_8_LANES; > break; > default: > dev_err(pci->dev, "num-lanes %u: invalid value\n", lanes); > return; > } > > why do we need to set lanes to 0 if num-lanes is not present ? To print > an error message ? At this point in time, the controller is trying to train the link but it doesn't know how many lanes, so we need to error. We don't error when reading the device tree earlier - because at that point in time we don't know if num-lanes is optional or not. Thanks, Andrew Murray > > I really do not understand this code. > > Lorenzo