Received: by 2002:ab2:3319:0:b0:1ef:7a0f:c32d with SMTP id i25csp451245lqc; Fri, 8 Mar 2024 02:15:15 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWsf8D3GIt1ZtvDrLJoTSBIGCfbQ9zQelSu8VSoI1C/udpAMQtC6cdJJ7LApwfZElzZHt9/8ncJq5LQQVRoW8VlFDivgcZcwWpnZiIfZw== X-Google-Smtp-Source: AGHT+IG/bSbmKBJxFj0nrHekepFugeJtY+aBYQjF5LEsRyHRmFgpPpGtKn+9WrB8s0E+VmpNnMTP X-Received: by 2002:a0c:fac6:0:b0:68f:8c72:b89d with SMTP id p6-20020a0cfac6000000b0068f8c72b89dmr5410608qvo.44.1709892915544; Fri, 08 Mar 2024 02:15:15 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709892915; cv=pass; d=google.com; s=arc-20160816; b=IX23+6ewwFQhje5IWQEz3zEKe5m8eaOlvNehLeSQJ0/2FjW54/mVmh3g1lGHSjzNIr OgOsRHRxOBTIP+eEyefOAwsPXepD+RlXNSaDTieM7gtngP4GGCHt4SW/J3U/kmWQCK57 MSLnRbnxKQTfV45nwQX795EgcV1RZo7qmXsOpEX9sDNQkyjMY4zYE4/HE4rVmPoQ0U2x pAfLl4fog8iVvfEBNHbZns+/ryhY0kgqbesJUB+geEPx3y77FgGk6zgM5GY5F2G07zhA h7nQ6TTMKhkrwxYgKNxERUfbd/P4cmk17xoqYd2K5JKQsuuXhUggHGB6+g6AFaXGwtXJ anZQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:message-id:subject:cc :to:from:date:dkim-signature; bh=+Q9S0vj583uXp1BdOpARH7w/tvL6Syi7m2JHGXz/idY=; fh=XkHq6sufsH3TObsvDFtbbMUFfmZcw+V2/ZGOtqSIh/c=; b=XdVG0NWHGwHdSJbqEadXSj08MufGHGnGmqEtptU2PztuXKetMQvWOnjgoAwGhXdsjC J75S2T0EajLVXrv6d4pNSddmQ2xYN86Q6Qyb2LGmjMudx46DJ50mp3ndEVDIQeOsFnjS 3Q51I4UzZCxSr538BJsqV2whSEBC/DKT8Td9eT5pTJMvQqc5g227eufgQlFN94zGzxpd X8TXxfXYRc71Cx6fZDW75gUg/5QEIhCB309OQu43iHBGMgZ+3i94FIz+VWA1KYRtkrCB ZY/00Way8CpWo5kWAP80T+9kgba5oYQ9UyWRUyD3Xkr+m754PTQC0sAGP++xndRAupgT VbjQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=azDcURbX; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-96808-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-96808-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id 6-20020a05621420c600b0068fe057717fsi18573062qve.139.2024.03.08.02.15.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Mar 2024 02:15:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-96808-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=azDcURbX; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-96808-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-96808-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org 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 ny.mirrors.kernel.org (Postfix) with ESMTPS id 3AA471C21816 for ; Fri, 8 Mar 2024 10:15:15 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 167DC54673; Fri, 8 Mar 2024 10:15:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="azDcURbX" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 EB31E53E06; Fri, 8 Mar 2024 10:15:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709892904; cv=none; b=qIwwLUM/gJmj9CmG+gZKaEshLJMn4bNHdlGrfW8k25U5rDo+FCZnqt9iA16eSt3yOAeneDTZ45ou17OPs0NlKAfN74VpHD1fmFWRc4P/Bjk+pUyh3JFgZgtvBDpAqrEBlQpw/2pJGYZodEzfjXt5j37uKMlWXzK2Z1K3MmjVWXw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709892904; c=relaxed/simple; bh=RUpDGa9Rs6fU9BfFMEQzpLXZ5dNRS4tLDMMkYMlz10A=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=nSeoERtHMgxgk+6T3vCbV1tCemrzOGkG2jyUPunhBoK01hpQifgg8a85BF2k4BvInK+h/Q6FOnsIXsoLsR07P083chhm7W0yjbmHrHuABX9f75CkGwYoJ4GpclFpMYFciFuqZByogEHdaV3RVDWnI2hVW5wxj/BJzjDabPE/7kE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=azDcURbX; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6A22C43390; Fri, 8 Mar 2024 10:14:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1709892902; bh=RUpDGa9Rs6fU9BfFMEQzpLXZ5dNRS4tLDMMkYMlz10A=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=azDcURbX6wPyiSgOborkCmRq1aJLfraoxkXDDCyOkkcYhnoXZDktTO4rQSTj2dLBe dJyVsKXRTCz/lpY0R/pg0Fna7y6mJQ0sOZ/8erlJ8i5bkRb1ZbKoYhUYoXRYYRzCl5 JWTjw0y7oj3egZys2daT0GDqqSaE5qK64Ov8Eq5yheZKKxT/smpklskIw2FAfVizd4 o00HzVVqduydu9paV8JKrl3GeFrsMPItPrGb/q2mSQ4JWv3c6VDOF0FYOVdqrpIyG7 8eCvrYxjUo+UqIYvKsfO3jC1szqnpt5hr0wSLCamo2pzzw+pERPuYfsU/vF372xN6V f1AC8A3XsX6nA== Date: Fri, 8 Mar 2024 11:14:51 +0100 From: Niklas Cassel To: Manivannan Sadhasivam Cc: Jingoo Han , Gustavo Pimentel , Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Marek Vasut , Yoshihiro Shimoda , Thierry Reding , Jonathan Hunter , Kishon Vijay Abraham I , Vidya Sagar , Vignesh Raghavendra , Richard Zhu , Lucas Stach , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Minghuan Lian , Mingkai Hu , Roy Zang , Kunihiko Hayashi , Masami Hiramatsu , Kishon Vijay Abraham I , Jesper Nilsson , Srikanth Thokala , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@axis.com Subject: Re: [PATCH v9 08/10] PCI: dwc: ep: Add a generic dw_pcie_ep_linkdown() API to handle LINK_DOWN event Message-ID: References: <20240304-pci-dbi-rework-v9-0-29d433d99cda@linaro.org> <20240304-pci-dbi-rework-v9-8-29d433d99cda@linaro.org> <20240308054152.GD3789@thinkpad> <20240308094606.GG3789@thinkpad> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240308094606.GG3789@thinkpad> On Fri, Mar 08, 2024 at 03:16:06PM +0530, Manivannan Sadhasivam wrote: > On Fri, Mar 08, 2024 at 09:56:33AM +0100, Niklas Cassel wrote: > > On Fri, Mar 08, 2024 at 11:11:52AM +0530, Manivannan Sadhasivam wrote: > > > On Thu, Mar 07, 2024 at 10:43:19PM +0100, Niklas Cassel wrote: > > > > On Mon, Mar 04, 2024 at 02:52:20PM +0530, Manivannan Sadhasivam wrote: > > > > > The PCIe link can go to LINK_DOWN state in one of the following scenarios: > > > > > > > > > > 1. Fundamental (PERST#)/hot/warm reset > > > > > 2. Link transition from L2/L3 to L0 > > > > > > > > > > In those cases, LINK_DOWN causes some non-sticky DWC registers to loose the > > > > > state (like REBAR, PTM_CAP etc...). So the drivers need to reinitialize > > > > > them to function properly once the link comes back again. > > > > > > > > > > This is not a problem for drivers supporting PERST# IRQ, since they can > > > > > reinitialize the registers in the PERST# IRQ callback. But for the drivers > > > > > not supporting PERST#, there is no way they can reinitialize the registers > > > > > other than relying on LINK_DOWN IRQ received when the link goes down. So > > > > > let's add a DWC generic API dw_pcie_ep_linkdown() that reinitializes the > > > > > non-sticky registers and also notifies the EPF drivers about link going > > > > > down. > > > > > > > > > > This API can also be used by the drivers supporting PERST# to handle the > > > > > scenario (2) mentioned above. > > > > > > > > > > Signed-off-by: Manivannan Sadhasivam > > > > > --- > > > > > drivers/pci/controller/dwc/pcie-designware-ep.c | 111 ++++++++++++++---------- > > > > > drivers/pci/controller/dwc/pcie-designware.h | 5 ++ > > > > > 2 files changed, 72 insertions(+), 44 deletions(-) > > > > > > > > > > diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c > > > > > index 278bdc9b2269..fed4c2936c78 100644 > > > > > --- a/drivers/pci/controller/dwc/pcie-designware-ep.c > > > > > +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c > > > > > @@ -14,14 +14,6 @@ > > > > > #include > > > > > #include > > > > > > > > > > -void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) > > > > > -{ > > > > > - struct pci_epc *epc = ep->epc; > > > > > - > > > > > - pci_epc_linkup(epc); > > > > > -} > > > > > -EXPORT_SYMBOL_GPL(dw_pcie_ep_linkup); > > > > > - > > > > > void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep) > > > > > { > > > > > struct pci_epc *epc = ep->epc; > > > > > @@ -603,19 +595,56 @@ static unsigned int dw_pcie_ep_find_ext_capability(struct dw_pcie *pci, int cap) > > > > > return 0; > > > > > } > > > > > > > > > > +static void dw_pcie_ep_init_non_sticky_registers(struct dw_pcie *pci) > > > > > +{ > > > > > + unsigned int offset, ptm_cap_base; > > > > > + unsigned int nbars; > > > > > + u32 reg, i; > > > > > + > > > > > + offset = dw_pcie_ep_find_ext_capability(pci, PCI_EXT_CAP_ID_REBAR); > > > > > + ptm_cap_base = dw_pcie_ep_find_ext_capability(pci, PCI_EXT_CAP_ID_PTM); > > > > > + > > > > > + dw_pcie_dbi_ro_wr_en(pci); > > > > > + > > > > > + if (offset) { > > > > > + reg = dw_pcie_readl_dbi(pci, offset + PCI_REBAR_CTRL); > > > > > + nbars = (reg & PCI_REBAR_CTRL_NBAR_MASK) >> > > > > > + PCI_REBAR_CTRL_NBAR_SHIFT; > > > > > + > > > > > + for (i = 0; i < nbars; i++, offset += PCI_REBAR_CTRL) > > > > > + dw_pcie_writel_dbi(pci, offset + PCI_REBAR_CAP, 0x0); > > > > > > > > If you look at PCI_REBAR_CAP, you will see that it is sticky, > > > > but you have to actually read the databook to see that: > > > > > > > > "The RESBAR_CTRL_REG_BAR_SIZE field is automatically updated > > > > when you write to RESBAR_CAP_REG_0_REG through the DBI." > > > > > > > > So the reason why we need to write this register, even though > > > > it is sticky, is to update the RESBAR_CTRL_REG_BAR_SIZE register, > > > > which is not sticky :) > > > > > > > > (Perhaps we should add that as a comment?) > > > > > > > > > > Yeah, makes sense. > > > > Note that I add a (unrelated) comment related to REBAR_CAP in this patch: > > https://lore.kernel.org/linux-pci/20240307111520.3303774-1-cassel@kernel.org/T/#u > > > > But once we move/add code to dw_pcie_ep_init_non_sticky_registers(), I think > > that it might be a good "rule" to have a small comment for each write in > > dw_pcie_ep_init_non_sticky_registers() which explains why the code should be > > in dw_pcie_ep_init_non_sticky_registers() instead of dw_pcie_ep_init_registers(), > > even if it just a small: > > > > /* Field PCI_XXX_YYY.ZZZ is non-sticky */ > > writel_dbi(pci, offset + PCI_XXX_YYY, 0); > > > > Why? The function name itself suggests that we are reinitializing non-sticky > registers. So a comment for each write is overkill. So that you know which field it is in the register that you are writing which you care about (which field it is that is non-sticky). But I see your point, perhaps it is overkill. Kind regards, Niklas