[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <n6wdkexskwjd7k5zwaaqeb36zdsxzcshsm7f5czv44rmocswex@pzbpehep2teu>
Date: Wed, 2 Jul 2025 18:01:18 +0530
From: Manivannan Sadhasivam <mani@...nel.org>
To: Frank Li <Frank.Li@....com>
Cc: Kishon Vijay Abraham I <kishon@...nel.org>,
"Rafael J. Wysocki" <rafael@...nel.org>, Thomas Gleixner <tglx@...utronix.de>,
Anup Patel <apatel@...tanamicro.com>, Marc Zyngier <maz@...nel.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>, Danilo Krummrich <dakr@...nel.org>,
Bjorn Helgaas <bhelgaas@...gle.com>, Arnd Bergmann <arnd@...db.de>, Shuah Khan <shuah@...nel.org>,
Richard Zhu <hongxing.zhu@....com>, Lucas Stach <l.stach@...gutronix.de>,
Lorenzo Pieralisi <lpieralisi@...nel.org>, Rob Herring <robh@...nel.org>, Shawn Guo <shawnguo@...nel.org>,
Sascha Hauer <s.hauer@...gutronix.de>, Pengutronix Kernel Team <kernel@...gutronix.de>,
Fabio Estevam <festevam@...il.com>, Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>, Krzysztof Wilczyński <kwilczynski@...nel.org>,
Niklas Cassel <cassel@...nel.org>, dlemoal@...nel.org, jdmason@...zu.us,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org, linux-pci@...r.kernel.org,
linux-kselftest@...r.kernel.org, imx@...ts.linux.dev, devicetree@...r.kernel.org
Subject: Re: [PATCH v19 04/10] PCI: endpoint: Add
pci_epf_align_inbound_addr() helper for address alignment
On Mon, Jun 09, 2025 at 12:34:16PM GMT, Frank Li wrote:
> Introduce the helper function pci_epf_align_inbound_addr() to adjust
> addresses according to PCI BAR alignment requirements, converting addresses
> into base and offset values.
>
> Signed-off-by: Frank Li <Frank.Li@....com>
> ---
> Change from v15 to v16
> - none
>
> Change from v14 to v15
> - change out address type to dma_addr_t to fix below build issue
>
> | Reported-by: kernel test robot <lkp@...el.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202502082311.G1hWGggF-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> drivers/pci/endpoint/functions/pci-epf-test.c: In function 'pci_epf_test_enable_doorbell':
> >> drivers/pci/endpoint/functions/pci-epf-test.c:726:42: error: passing argument 4 of 'pci_epf_align_inbound_addr' from incompatible pointer type [-Werror=incompatible-pointer-types]
> 726 | &epf_test->db_bar.phys_addr, &offset);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> | |
> | dma_addr_t * {aka unsigned int *}
> In file included from include/linux/pci-epc.h:12,
>
> Change form v9 to v14
> - none
>
> change from v8 to v9
> - pci_epf_align_inbound_addr(), base and off must be not NULL
> - rm pci_epf_align_inbound_addr_lo_hi()
>
> change from v7 to v8
> - change name to pci_epf_align_inbound_addr()
> - update comment said only need for memory, which not allocated by
> pci_epf_alloc_space().
>
> change from v6 to v7
> - new patch
> ---
> drivers/pci/endpoint/pci-epf-core.c | 44 +++++++++++++++++++++++++++++++++++++
> include/linux/pci-epf.h | 3 +++
> 2 files changed, 47 insertions(+)
>
> diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c
> index 95fb3d7c1d45e..33e14a6b1549a 100644
> --- a/drivers/pci/endpoint/pci-epf-core.c
> +++ b/drivers/pci/endpoint/pci-epf-core.c
> @@ -481,6 +481,50 @@ struct pci_epf *pci_epf_create(const char *name)
> }
> EXPORT_SYMBOL_GPL(pci_epf_create);
>
> +/**
> + * pci_epf_align_inbound_addr() - Get base address and offset that match BAR's
> + * alignment requirement
'Align the given address based on the BAR alignment requirement'
> + * @epf: the EPF device
> + * @addr: the address of the memory
'inbound address to be aligned'
> + * @bar: the BAR number corresponding to map addr
s/map addr/the given addr
> + * @base: return base address, which match BAR's alignment requirement.
'base address matching the @bar alignment requirement'
> + * @off: return offset.
'offset to be added to the @base address'
> + *
> + * Helper function to convert input 'addr' to base and offset, which match
s/convert/align
> + * BAR's alignment requirement.
> + *
> + * The pci_epf_alloc_space() function already accounts for alignment. This is
> + * primarily intended for use with other memory regions not allocated by
> + * pci_epf_alloc_space(), such as peripheral register spaces or the trigger
> + * address for a platform MSI controller.
> + */
> +int pci_epf_align_inbound_addr(struct pci_epf *epf, enum pci_barno bar,
> + u64 addr, dma_addr_t *base, size_t *off)
> +{
> + const struct pci_epc_features *epc_features;
> + u64 align;
> +
> + if (!base || !off)
> + return -EINVAL;
> +
> + epc_features = pci_epc_get_features(epf->epc, epf->func_no, epf->vfunc_no);
> + if (!epc_features) {
> + dev_err(&epf->dev, "epc_features not implemented\n");
> + return -EOPNOTSUPP;
> + }
> +
> + align = epc_features->align;
> + align = align ? align : 128;
>From where this 128 byte alignment comes from?
- Mani
--
மணிவண்ணன் சதாசிவம்
Powered by blists - more mailing lists