All of lore.kernel.org
 help / color / mirror / Atom feed
From: Niklas Cassel <cassel@kernel.org>
To: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Cc: "Lorenzo Pieralisi" <lpieralisi@kernel.org>,
	"Krzysztof Wilczyński" <kw@linux.com>,
	"Kishon Vijay Abraham I" <kishon@kernel.org>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	"Shradha Todi" <shradha.t@samsung.com>,
	"Damien Le Moal" <dlemoal@kernel.org>,
	linux-pci@vger.kernel.org
Subject: Re: [PATCH v3 5/9] PCI: endpoint: pci-epf-test: Simplify pci_epf_test_set_bar() loop
Date: Wed, 20 Mar 2024 12:08:20 +0100	[thread overview]
Message-ID: <ZfrDpEICLk4BXI1V@ryzen> (raw)
In-Reply-To: <20240315053903.GE3375@thinkpad>

On Fri, Mar 15, 2024 at 11:09:03AM +0530, Manivannan Sadhasivam wrote:
> On Wed, Mar 13, 2024 at 11:57:57AM +0100, Niklas Cassel wrote:
> > Simplify the loop in pci_epf_test_set_bar().
> > If we allocated memory for the BAR, we need to call set_bar() for that
> > BAR, if we did not allocated memory for that BAR, we need to skip.
> > It is as simple as that. This also matches the logic in
> > pci_epf_test_unbind().
> > 
> > A 64-bit BAR will still only be one allocation, with the BAR succeeding
> > the 64-bit BAR being null.
> > 
> > While at it, remove the misleading comment.
> > A EPC .set_bar() callback should never change the epf_bar->flags.
> > (E.g. to set a 64-bit BAR if we requested a 32-bit BAR.)
> > 
> > A .set_bar() callback should do what we request it to do.
> > If it can't satisfy the request, it should return an error.
> > 
> 
> That's a valid assumption. But...
> 
> > If platform has a specific requirement, e.g. that a certain BAR has to
> > be a 64-bit BAR, then it should specify that by setting the .only_64bit
> > flag for that specific BAR in epc_features->bar[], such that
> > pci_epf_alloc_space() will return a epf_bar with the 64-bit flag set.
> > (Such that .set_bar() will receive a request to set a 64-bit BAR.)
> > 
> 
> Looks like pcie-cadence-ep is setting the PCI_BASE_ADDRESS_MEM_TYPE_64 flag if
> the requested size is >2GB (I don't know why 2GB instead of 4GB in the first
> place).

That is dead code that will never be able to execute.

Ever since commit f25b5fae29d4 ("PCI: endpoint: Setting a BAR size > 4 GB
is invalid if 64-bit flag is not set") it has been impossible to get the
.set_bar() callback with a BAR size > 2 GB.

Yes, 2GB!
The author of f25b5fae29d4 is an idiot (yes, it is me).
Anyway, the code itself in that commit is doing the right thing...

2GB is the maximum size of a 32-bit BAR.

So, since the the code in pcie-cadence-ep is dead code, I don't see
any problem with this commit.


Kind regards,
Niklas


> 
> - Mani
> 
> > Signed-off-by: Niklas Cassel <cassel@kernel.org>
> > ---
> >  drivers/pci/endpoint/functions/pci-epf-test.c | 21 ++++---------------
> >  1 file changed, 4 insertions(+), 17 deletions(-)
> > 
> > diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c
> > index 20c79610712d..91bbfcb1b3ed 100644
> > --- a/drivers/pci/endpoint/functions/pci-epf-test.c
> > +++ b/drivers/pci/endpoint/functions/pci-epf-test.c
> > @@ -709,31 +709,18 @@ static void pci_epf_test_unbind(struct pci_epf *epf)
> >  
> >  static int pci_epf_test_set_bar(struct pci_epf *epf)
> >  {
> > -	int bar, add;
> > -	int ret;
> > -	struct pci_epf_bar *epf_bar;
> > +	int bar, ret;
> >  	struct pci_epc *epc = epf->epc;
> >  	struct device *dev = &epf->dev;
> >  	struct pci_epf_test *epf_test = epf_get_drvdata(epf);
> >  	enum pci_barno test_reg_bar = epf_test->test_reg_bar;
> > -	const struct pci_epc_features *epc_features;
> > -
> > -	epc_features = epf_test->epc_features;
> >  
> > -	for (bar = 0; bar < PCI_STD_NUM_BARS; bar += add) {
> > -		epf_bar = &epf->bar[bar];
> > -		/*
> > -		 * pci_epc_set_bar() sets PCI_BASE_ADDRESS_MEM_TYPE_64
> > -		 * if the specific implementation required a 64-bit BAR,
> > -		 * even if we only requested a 32-bit BAR.
> > -		 */
> > -		add = (epf_bar->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) ? 2 : 1;
> > -
> > -		if (epc_features->bar[bar].type == BAR_RESERVED)
> > +	for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) {
> > +		if (!epf_test->reg[bar])
> >  			continue;
> >  
> >  		ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no,
> > -				      epf_bar);
> > +				      &epf->bar[bar]);
> >  		if (ret) {
> >  			pci_epf_free_space(epf, epf_test->reg[bar], bar,
> >  					   PRIMARY_INTERFACE);
> > -- 
> > 2.44.0
> > 
> 
> -- 
> மணிவண்ணன் சதாசிவம்

  reply	other threads:[~2024-03-20 11:08 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-13 10:57 [PATCH v3 0/9] PCI: endpoint: set prefetchable bit for 64-bit BARs Niklas Cassel
2024-03-13 10:57 ` Niklas Cassel
2024-03-13 10:57 ` Niklas Cassel
2024-03-13 10:57 ` [PATCH v3 1/9] PCI: endpoint: pci-epf-test: Fix incorrect loop increment Niklas Cassel
2024-03-15  5:20   ` Manivannan Sadhasivam
2024-03-20 10:54     ` Niklas Cassel
2024-03-13 10:57 ` [PATCH v3 2/9] PCI: endpoint: Allocate a 64-bit BAR if that is the only option Niklas Cassel
2024-03-15  5:24   ` Manivannan Sadhasivam
2024-03-13 10:57 ` [PATCH v3 3/9] PCI: endpoint: pci-epf-test: Remove superfluous code Niklas Cassel
2024-03-15  5:25   ` Manivannan Sadhasivam
2024-03-13 10:57 ` [PATCH v3 4/9] PCI: endpoint: pci-epf-test: Simplify pci_epf_test_alloc_space() loop Niklas Cassel
2024-03-15  5:29   ` Manivannan Sadhasivam
2024-03-13 10:57 ` [PATCH v3 5/9] PCI: endpoint: pci-epf-test: Simplify pci_epf_test_set_bar() loop Niklas Cassel
2024-03-15  5:39   ` Manivannan Sadhasivam
2024-03-20 11:08     ` Niklas Cassel [this message]
2024-03-13 10:57 ` [PATCH v3 6/9] PCI: endpoint: pci-epf-test: Clean up pci_epf_test_unbind() Niklas Cassel
2024-03-15  5:42   ` Manivannan Sadhasivam
2024-03-20 11:11     ` Niklas Cassel
2024-03-13 10:57 ` [PATCH v3 7/9] PCI: cadence: Set a 64-bit BAR if requested Niklas Cassel
2024-03-15  5:46   ` Manivannan Sadhasivam
2024-03-20 11:14     ` Niklas Cassel
2024-03-13 10:58 ` [PATCH v3 8/9] PCI: rockchip-ep: " Niklas Cassel
2024-03-13 10:58   ` Niklas Cassel
2024-03-13 10:58   ` Niklas Cassel
2024-03-15  5:47   ` Manivannan Sadhasivam
2024-03-15  5:47     ` Manivannan Sadhasivam
2024-03-15  5:47     ` Manivannan Sadhasivam
2024-04-12 17:51   ` Bjorn Helgaas
2024-04-12 17:51     ` Bjorn Helgaas
2024-04-12 17:51     ` Bjorn Helgaas
2024-04-12 21:39     ` Niklas Cassel
2024-04-12 21:39       ` Niklas Cassel
2024-04-12 21:39       ` Niklas Cassel
2024-04-12 22:00       ` Bjorn Helgaas
2024-04-12 22:00         ` Bjorn Helgaas
2024-04-12 22:00         ` Bjorn Helgaas
2024-04-12 18:59   ` Bjorn Helgaas
2024-04-12 18:59     ` Bjorn Helgaas
2024-04-12 18:59     ` Bjorn Helgaas
2024-04-12 22:02     ` Niklas Cassel
2024-04-12 22:02       ` Niklas Cassel
2024-04-12 22:02       ` Niklas Cassel
2024-04-12 22:11       ` Bjorn Helgaas
2024-04-12 22:11         ` Bjorn Helgaas
2024-04-12 22:11         ` Bjorn Helgaas
2024-03-13 10:58 ` [PATCH v3 9/9] PCI: endpoint: Set prefetch when allocating memory for 64-bit BARs Niklas Cassel
2024-03-15  6:44   ` Manivannan Sadhasivam
2024-03-15 17:29     ` Arnd Bergmann
2024-03-17 11:54       ` Niklas Cassel
2024-03-18  3:53         ` Manivannan Sadhasivam
2024-03-18  7:25         ` Arnd Bergmann
2024-03-18 15:13           ` Niklas Cassel
2024-03-18 15:49             ` Arnd Bergmann
2024-03-19  6:22               ` Manivannan Sadhasivam
2024-03-18  4:30       ` Manivannan Sadhasivam
2024-03-18  6:44         ` Arnd Bergmann
2024-03-19  6:20           ` Manivannan Sadhasivam

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZfrDpEICLk4BXI1V@ryzen \
    --to=cassel@kernel.org \
    --cc=bhelgaas@google.com \
    --cc=dlemoal@kernel.org \
    --cc=kishon@kernel.org \
    --cc=kw@linux.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=lpieralisi@kernel.org \
    --cc=manivannan.sadhasivam@linaro.org \
    --cc=shradha.t@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.