Received: by 2002:ab2:6857:0:b0:1ef:ffd0:ce49 with SMTP id l23csp2747303lqp; Mon, 25 Mar 2024 08:10:43 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWXcz1DrQ9MmXbYyYi7LlDbcp+/Evvh3Apq4YYw6PAlABxHgOlfeqDkcTWOOhfzMh28Of3jpW8gsNC1GViE3oxW1rUG2kFuPWvC3iZ1Jw== X-Google-Smtp-Source: AGHT+IEUq/ooVFL0QVM17ZAbUfXbquV96/53PGqMe5n+jV62csC0sfsc6oXOxFuK5YkhYz3jLH0i X-Received: by 2002:a05:6a20:3d07:b0:1a3:4203:d518 with SMTP id y7-20020a056a203d0700b001a34203d518mr7629910pzi.7.1711379443588; Mon, 25 Mar 2024 08:10:43 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711379443; cv=pass; d=google.com; s=arc-20160816; b=1H3kVr1etM3/Cf1KMBNeO3RRTdGyRyRJjiG1GwQkUTHA8T00xoziCJbCAbjuXuEExS 65lrsHqCu0feLAKJl1LkBCn5qHwrMD1mvQGddJBP6i3rvvIwS4GujXLO7RWH9/sKG5z5 zbiXEc8UnLVFkvSHJAJzOIEq6TjF2jN3TG4TD+L+VVumQoM6vtPy4JLx06e+8DusR8bq vieR+yzK09hvnqDyz0zHiO8yrJXxEYeQhCxWOtFetiH9+/ZQRIDZil4/AqK1dgQnqm4Y C8oQ+MRAU9jD+STS5EZDnG+C3KY5ZaGb3XSPvyskkJLnUD19bwwFOphCzPjbeUjKfe0s dMMA== 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=JGAnrfbaXIJYpYgmc/MNUvnL+5SxsWOZRcTuPtph6nM=; fh=2mBbppXfHzB7ikPIe/yk0ALqwls/Qdcfx8k69++4hWg=; b=OmbSC/7miVEC70LFqscu0+CGVMvdE8DfzY9AR/yojmuo9AHIC21643hAP5dXvxTmmg izX94bdiHp9JqIIhpPP/uTklpqODqrclfj8ndec7y/OnsOJ9/buYktmqQyLxTd1FKUc1 +naCqVCLCkch19/pLEddkmWSoSl3QZKQHr3Trt4h1/0QAZdz4r0DbKph5DQPmMTNhGTy sK/aPjaow5EXHVVnWkZ/aioaYWVFgBp562r2b1PsNNWAdTuZSLhvmUL5AWqLRBaeRHrp kHBosAp96WcZWQtEa2bO9VtQTrcV1duO5qv5bot+E083Kw9PoJFR/C3gSEZjmtEm3mJH XqVQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=mDNf9urn; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-116929-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-116929-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id w1-20020a17090a6b8100b002a0440dcab0si6043068pjj.171.2024.03.25.08.10.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 08:10:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-116929-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=mDNf9urn; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-116929-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-116929-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 sv.mirrors.kernel.org (Postfix) with ESMTPS id 7FD022A367E for ; Mon, 25 Mar 2024 14:51:10 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4D1561BB75C; Mon, 25 Mar 2024 11:48:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mDNf9urn" 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 DDBF31BD5E2; Mon, 25 Mar 2024 11:23:11 +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=1711365792; cv=none; b=VgWFBWLsvyUhS+USFd2SK9NRfemmfPjzPxJs6if/GZmhEqRRNHZ1+SskuMbTIvDnEsMP++fsgMDBVrVMBm5vv7po9Q4LOwC2ADJcbuUfz6ZHscB4ClO82xTz0KVeZTU2NGeNIxA1bTx4HWgAaP4jpMyw8VDVoMOKFbApakDPFTI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711365792; c=relaxed/simple; bh=2JNQFjYNPVPxTSXEdzTDIvFBar8n4Vzc6fueech50RA=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=D5UTA1JEmVkGNAM+d6D3ogjuKzn5STfDfQQNp6hpz0s3aDqRzKBtn7FirI1JtU4Vuq/eCRiMwW0/5tcYfJ7mL9dthypk7G775l5N2/hxueK2mvYiggIdYHu4KkxE7ZfwdBb6+8Gcu+mVM0VPdW1yvCXMerR26/ZxWtdmdchWNNA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mDNf9urn; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5FB56C433C7; Mon, 25 Mar 2024 11:23:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711365791; bh=2JNQFjYNPVPxTSXEdzTDIvFBar8n4Vzc6fueech50RA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=mDNf9urnayjKnHME8f7+8KbiM5Q2KPrJtZDZzFOPhQsHFconJCwKstiSJCvgwadwC MINur/NnfllB+oDF+sCjN/u3CNIjLjVDzl/aW+ueVg2W/WK8UL3wPl5AWdAl0tQomr J4imBrauiuRu5m8BOOhaU5iq2E3qJDoSDVkppHFGuR8AipmRNJk4GROu+uu787G9th dgb8o3wPGdeJYGlDj6e48rdkSpV+lTI8bYQEC6juJOpSN0JhS10nmH0V7jt3A76gAc MW4b+DFWBFD1fI9WWaUon4THyRXmzR4ygTJf6ZHqihRetNmcTP2CPLbveDG6+6iOmV i4mqfkJoJsbNQ== Date: Mon, 25 Mar 2024 12:23:05 +0100 From: Niklas Cassel To: Siddharth Vadapalli Cc: lpieralisi@kernel.org, kw@linux.com, robh@kernel.org, bhelgaas@google.com, manivannan.sadhasivam@linaro.org, fancer.lancer@gmail.com, u.kleine-koenig@pengutronix.de, dlemoal@kernel.org, yoshihiro.shimoda.uh@renesas.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, srk@ti.com Subject: Re: [PATCH v4] PCI: keystone: Fix pci_ops for AM654x SoC Message-ID: References: <20240325053722.1955433-1-s-vadapalli@ti.com> 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: <20240325053722.1955433-1-s-vadapalli@ti.com> On Mon, Mar 25, 2024 at 11:07:22AM +0530, Siddharth Vadapalli wrote: > In the process of converting .scan_bus() callbacks to .add_bus(), the > ks_pcie_v3_65_scan_bus() function was changed to ks_pcie_v3_65_add_bus(). > The .scan_bus() method belonged to ks_pcie_host_ops which was specific > to controller version 3.65a, while the .add_bus() method had been added > to ks_pcie_ops which is shared between the controller versions 3.65a and > 4.90a. Neither the older ks_pcie_v3_65_scan_bus() method, nor the newer > ks_pcie_v3_65_add_bus() method are applicable to the controller version > 4.90a which is present in AM654x SoCs. > > Thus, as a fix, move the contents of "ks_pcie_v3_65_add_bus()" to the > .host_init callback "ks_pcie_host_init()" and execute it only for non > AM654x SoC devices which have the v3.65a DWC PCIe IP Controllers. > > Fixes: 6ab15b5e7057 ("PCI: dwc: keystone: Convert .scan_bus() callback to use add_bus") > Suggested-by: Serge Semin > Suggested-by: Bjorn Helgaas > Signed-off-by: Siddharth Vadapalli > --- > > Hello, > > This patch is based on linux-next tagged next-20240325. > This patch is technically the next version for the v3 patch at: > https://patchwork.kernel.org/project/linux-pci/patch/20231019081330.2975470-1-s-vadapalli@ti.com/ > but the implementation is based on the RFC patch at: > https://patchwork.kernel.org/project/linux-pci/patch/20231027084159.4166188-1-s-vadapalli@ti.com/ > Since the RFC patch mentioned above fixes the same issue being > fixed by the v3 patch, I have dropped the v3 patch and am using > the RFC patch since it is a cleaner implementation and was discussed at: > https://lore.kernel.org/r/20231019220847.GA1413474@bhelgaas/ > > Regards, > Siddharth. > > drivers/pci/controller/dwc/pci-keystone.c | 51 ++++++++--------------- > 1 file changed, 17 insertions(+), 34 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/controller/dwc/pci-keystone.c > index 844de4418724..f45bdeac520a 100644 > --- a/drivers/pci/controller/dwc/pci-keystone.c > +++ b/drivers/pci/controller/dwc/pci-keystone.c > @@ -445,44 +445,10 @@ static struct pci_ops ks_child_pcie_ops = { > .write = pci_generic_config_write, > }; > > -/** > - * ks_pcie_v3_65_add_bus() - keystone add_bus post initialization > - * @bus: A pointer to the PCI bus structure. > - * > - * This sets BAR0 to enable inbound access for MSI_IRQ register > - */ > -static int ks_pcie_v3_65_add_bus(struct pci_bus *bus) > -{ > - struct dw_pcie_rp *pp = bus->sysdata; > - struct dw_pcie *pci = to_dw_pcie_from_pp(pp); > - struct keystone_pcie *ks_pcie = to_keystone_pcie(pci); > - > - if (!pci_is_root_bus(bus)) > - return 0; > - > - /* Configure and set up BAR0 */ > - ks_pcie_set_dbi_mode(ks_pcie); > - > - /* Enable BAR0 */ > - dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 1); > - dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, SZ_4K - 1); > - > - ks_pcie_clear_dbi_mode(ks_pcie); > - > - /* > - * For BAR0, just setting bus address for inbound writes (MSI) should > - * be sufficient. Use physical address to avoid any conflicts. > - */ > - dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, ks_pcie->app.start); > - > - return 0; > -} > - > static struct pci_ops ks_pcie_ops = { > .map_bus = dw_pcie_own_conf_map_bus, > .read = pci_generic_config_read, > .write = pci_generic_config_write, > - .add_bus = ks_pcie_v3_65_add_bus, > }; > > /** > @@ -822,6 +788,23 @@ static int __init ks_pcie_host_init(struct dw_pcie_rp *pp) > if (ret < 0) > return ret; > > + if (!ks_pcie->is_am6) { Perhaps add a comment here stating WHY this is needed for v3.65a (!is_am6). From reading the old threads, it appears that v3.65a: -Has no support for iATUs. iATU-specific resource handling code is to be bypassed for v3.65 h/w. Thus v3.65a has it's own .child_ops implementation, so that pcie-designware-host.c does not configure the iATUs. -v3.65a has it's own .msi_init implementation, so that pcie-designware-host.c does not call dw_pcie_msi_host_init() to configure the MSI controller. While 4.90a: -Does have iATU support. -Does use the generic dw_pcie_msi_host_init(). Considering the major differences (with v3.65a being the outlier) here, I think it would have been a much wiser idea to have two different glue drivers for these two compatibles (ti,keystone-pcie and ti,am654-pcie-rc). Right now the driver is quite hard to read, most of the functions in this driver exist because v3.65a does not have an iATU and does not use the generic DWC way to handle MSIs. Additionally, you have "if (!ks_pcie->is_am6)" spread out all over the driver, to control quite major things, like if you should overload .child_ops, or if you should set up inbound translation without an iATU. This makes is even harder to see which code is actually used for am654... like the fact that it actually uses the generic way to handle MSIs... The driver for am654 would be much nicer since many of the functions in this driver would not be needed (and the fact that you have only implemented EP support for am654 and not for v3.65a). All EP related stuff would be in the am654 file/driver. You could keep the quirky stuff for v3.65a in the existing pci-keystone.c driver. (I guess if there is a function that is identical between the twos, you could have a pci-keystone-common.{c,h} that can be used by both drivers, but from the looks of it, they seem to share very little code. Kind regards, Niklas > + /* Configure and set up BAR0 */ > + ks_pcie_set_dbi_mode(ks_pcie); > + > + /* Enable BAR0 */ > + dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 1); > + dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, SZ_4K - 1); > + > + ks_pcie_clear_dbi_mode(ks_pcie); > + > + /* > + * For BAR0, just setting bus address for inbound writes (MSI) should > + * be sufficient. Use physical address to avoid any conflicts. > + */ > + dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, ks_pcie->app.start); > + } > + > #ifdef CONFIG_ARM > /* > * PCIe access errors that result into OCP errors are caught by ARM as > -- > 2.40.1 >