2021-03-08 15:26:54

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH 1/3] PCI: controller: al: select CONFIG_PCI_ECAM

From: Arnd Bergmann <[email protected]>

Compile-testing this driver without ECAM support results in a link
failure:

ld.lld: error: undefined symbol: pci_ecam_map_bus
>>> referenced by pcie-al.c
>>> pci/controller/dwc/pcie-al.o:(al_pcie_map_bus) in archive drivers/built-in.a

Select CONFIG_ECAM like the other drivers do.

Signed-off-by: Arnd Bergmann <[email protected]>
---
drivers/pci/controller/dwc/Kconfig | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/pci/controller/dwc/Kconfig b/drivers/pci/controller/dwc/Kconfig
index 5a3032d9b844..d981a0eba99f 100644
--- a/drivers/pci/controller/dwc/Kconfig
+++ b/drivers/pci/controller/dwc/Kconfig
@@ -311,6 +311,7 @@ config PCIE_AL
depends on OF && (ARM64 || COMPILE_TEST)
depends on PCI_MSI_IRQ_DOMAIN
select PCIE_DW_HOST
+ select PCI_ECAM
help
Say Y here to enable support of the Amazon's Annapurna Labs PCIe
controller IP on Amazon SoCs. The PCIe controller uses the DesignWare
--
2.29.2


2021-03-08 15:28:50

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH 3/3] [RESEND] PCI: controller: avoid building empty drivers

From: Arnd Bergmann <[email protected]>

There are harmless warnings when compile testing the kernel with
CONFIG_TRIM_UNUSED_KSYMS:

drivers/pci/controller/dwc/pcie-al.o: no symbols
drivers/pci/controller/pci-thunder-ecam.o: no symbols
drivers/pci/controller/pci-thunder-pem.o: no symbols

The problem here is that the host drivers get built even when the
configuration symbols are all disabled, as they pretend to not be drivers
but are silently enabled because of the promise that ACPI based systems
need no drivers.

Add back the normal symbols to have these drivers built, and change the
logic to otherwise only build them when both CONFIG_PCI_QUIRKS and
CONFIG_ACPI are enabled.

As a side-effect, this enables compile-testing the drivers on other
architectures, which in turn needs the acpi_get_rc_resources()
function to be defined.

Reviewed-by: Robert Richter <[email protected]>
Signed-off-by: Arnd Bergmann <[email protected]>
---
drivers/pci/controller/Makefile | 7 ++++++-
drivers/pci/controller/dwc/Makefile | 7 ++++++-
2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/controller/Makefile b/drivers/pci/controller/Makefile
index e4559f2182f2..6d24a163033f 100644
--- a/drivers/pci/controller/Makefile
+++ b/drivers/pci/controller/Makefile
@@ -11,10 +11,13 @@ obj-$(CONFIG_PCIE_RCAR_HOST) += pcie-rcar.o pcie-rcar-host.o
obj-$(CONFIG_PCIE_RCAR_EP) += pcie-rcar.o pcie-rcar-ep.o
obj-$(CONFIG_PCI_HOST_COMMON) += pci-host-common.o
obj-$(CONFIG_PCI_HOST_GENERIC) += pci-host-generic.o
+obj-$(CONFIG_PCI_HOST_THUNDER_ECAM) += pci-thunder-ecam.o
+obj-$(CONFIG_PCI_HOST_THUNDER_PEM) += pci-thunder-pem.o
obj-$(CONFIG_PCIE_XILINX) += pcie-xilinx.o
obj-$(CONFIG_PCIE_XILINX_NWL) += pcie-xilinx-nwl.o
obj-$(CONFIG_PCIE_XILINX_CPM) += pcie-xilinx-cpm.o
obj-$(CONFIG_PCI_V3_SEMI) += pci-v3-semi.o
+obj-$(CONFIG_PCI_XGENE) += pci-xgene.o
obj-$(CONFIG_PCI_XGENE_MSI) += pci-xgene-msi.o
obj-$(CONFIG_PCI_VERSATILE) += pci-versatile.o
obj-$(CONFIG_PCIE_IPROC) += pcie-iproc.o
@@ -47,8 +50,10 @@ obj-y += mobiveil/
# ARM64 and use internal ifdefs to only build the pieces we need
# depending on whether ACPI, the DT driver, or both are enabled.

-ifdef CONFIG_PCI
+ifdef CONFIG_ACPI
+ifdef CONFIG_PCI_QUIRKS
obj-$(CONFIG_ARM64) += pci-thunder-ecam.o
obj-$(CONFIG_ARM64) += pci-thunder-pem.o
obj-$(CONFIG_ARM64) += pci-xgene.o
endif
+endif
diff --git a/drivers/pci/controller/dwc/Makefile b/drivers/pci/controller/dwc/Makefile
index a751553fa0db..ba7c42f6df6f 100644
--- a/drivers/pci/controller/dwc/Makefile
+++ b/drivers/pci/controller/dwc/Makefile
@@ -31,7 +31,12 @@ obj-$(CONFIG_PCIE_UNIPHIER_EP) += pcie-uniphier-ep.o
# ARM64 and use internal ifdefs to only build the pieces we need
# depending on whether ACPI, the DT driver, or both are enabled.

-ifdef CONFIG_PCI
+obj-$(CONFIG_PCIE_AL) += pcie-al.o
+obj-$(CONFIG_PCI_HISI) += pcie-hisi.o
+
+ifdef CONFIG_ACPI
+ifdef CONFIG_PCI_QUIRKS
obj-$(CONFIG_ARM64) += pcie-al.o
obj-$(CONFIG_ARM64) += pcie-hisi.o
endif
+endif
--
2.29.2

2021-03-08 15:29:45

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH 2/3] [RESEND] PCI: controller: thunder: fix compile testing

From: Arnd Bergmann <[email protected]>

Compile-testing these drivers is currently broken. Enabling
it causes a couple of build failures though:

drivers/pci/controller/pci-thunder-ecam.c:119:30: error: shift count >= width of type [-Werror,-Wshift-count-overflow]
drivers/pci/controller/pci-thunder-pem.c:54:2: error: implicit declaration of function 'writeq' [-Werror,-Wimplicit-function-declaration]
drivers/pci/controller/pci-thunder-pem.c:392:8: error: implicit declaration of function 'acpi_get_rc_resources' [-Werror,-Wimplicit-function-declaration]

Fix them with the obvious one-line changes.

Reviewed-by: Kuppuswamy Sathyanarayanan <[email protected]>
Reviewed-by: Robert Richter <[email protected]>
Signed-off-by: Arnd Bergmann <[email protected]>
---
drivers/pci/controller/pci-thunder-ecam.c | 2 +-
drivers/pci/controller/pci-thunder-pem.c | 13 +++++++------
drivers/pci/pci.h | 6 ++++++
3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/drivers/pci/controller/pci-thunder-ecam.c b/drivers/pci/controller/pci-thunder-ecam.c
index f964fd26f7e0..ffd84656544f 100644
--- a/drivers/pci/controller/pci-thunder-ecam.c
+++ b/drivers/pci/controller/pci-thunder-ecam.c
@@ -116,7 +116,7 @@ static int thunder_ecam_p2_config_read(struct pci_bus *bus, unsigned int devfn,
* the config space access window. Since we are working with
* the high-order 32 bits, shift everything down by 32 bits.
*/
- node_bits = (cfg->res.start >> 32) & (1 << 12);
+ node_bits = upper_32_bits(cfg->res.start) & (1 << 12);

v |= node_bits;
set_val(v, where, size, val);
diff --git a/drivers/pci/controller/pci-thunder-pem.c b/drivers/pci/controller/pci-thunder-pem.c
index 1a3f70ac61fc..0660b9da204f 100644
--- a/drivers/pci/controller/pci-thunder-pem.c
+++ b/drivers/pci/controller/pci-thunder-pem.c
@@ -12,6 +12,7 @@
#include <linux/pci-acpi.h>
#include <linux/pci-ecam.h>
#include <linux/platform_device.h>
+#include <linux/io-64-nonatomic-lo-hi.h>
#include "../pci.h"

#if defined(CONFIG_PCI_HOST_THUNDER_PEM) || (defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS))
@@ -324,9 +325,9 @@ static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg,
* structure here for the BAR.
*/
bar4_start = res_pem->start + 0xf00000;
- pem_pci->ea_entry[0] = (u32)bar4_start | 2;
- pem_pci->ea_entry[1] = (u32)(res_pem->end - bar4_start) & ~3u;
- pem_pci->ea_entry[2] = (u32)(bar4_start >> 32);
+ pem_pci->ea_entry[0] = lower_32_bits(bar4_start) | 2;
+ pem_pci->ea_entry[1] = lower_32_bits(res_pem->end - bar4_start) & ~3u;
+ pem_pci->ea_entry[2] = upper_32_bits(bar4_start);

cfg->priv = pem_pci;
return 0;
@@ -334,9 +335,9 @@ static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg,

#if defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS)

-#define PEM_RES_BASE 0x87e0c0000000UL
-#define PEM_NODE_MASK GENMASK(45, 44)
-#define PEM_INDX_MASK GENMASK(26, 24)
+#define PEM_RES_BASE 0x87e0c0000000ULL
+#define PEM_NODE_MASK GENMASK_ULL(45, 44)
+#define PEM_INDX_MASK GENMASK_ULL(26, 24)
#define PEM_MIN_DOM_IN_NODE 4
#define PEM_MAX_DOM_IN_NODE 10

diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 0a2b6d993fe1..022c2f433676 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -625,6 +625,12 @@ static inline int pci_dev_specific_reset(struct pci_dev *dev, int probe)
#if defined(CONFIG_PCI_QUIRKS) && defined(CONFIG_ARM64)
int acpi_get_rc_resources(struct device *dev, const char *hid, u16 segment,
struct resource *res);
+#else
+static inline int acpi_get_rc_resources(struct device *dev, const char *hid,
+ u16 segment, struct resource *res)
+{
+ return -ENODEV;
+}
#endif

int pci_rebar_get_current_size(struct pci_dev *pdev, int bar);
--
2.29.2

2021-03-08 23:15:05

by Krzysztof Wilczyński

[permalink] [raw]
Subject: Re: [PATCH 1/3] PCI: controller: al: select CONFIG_PCI_ECAM

Hi,

> Compile-testing this driver without ECAM support results in a link
> failure:
>
> ld.lld: error: undefined symbol: pci_ecam_map_bus
> >>> referenced by pcie-al.c
> >>> pci/controller/dwc/pcie-al.o:(al_pcie_map_bus) in archive drivers/built-in.a
>
> Select CONFIG_ECAM like the other drivers do.
[...]

Ouch. Thank you!

Reviewed-by: Krzysztof Wilczyński <[email protected]>

Krzysztof

2021-03-10 19:34:33

by Bjorn Helgaas

[permalink] [raw]
Subject: Re: [PATCH 1/3] PCI: controller: al: select CONFIG_PCI_ECAM

On Mon, Mar 08, 2021 at 04:24:46PM +0100, Arnd Bergmann wrote:
> From: Arnd Bergmann <[email protected]>
>
> Compile-testing this driver without ECAM support results in a link
> failure:
>
> ld.lld: error: undefined symbol: pci_ecam_map_bus
> >>> referenced by pcie-al.c
> >>> pci/controller/dwc/pcie-al.o:(al_pcie_map_bus) in archive drivers/built-in.a
>
> Select CONFIG_ECAM like the other drivers do.

Did we add these compile issues in the v5.12-rc1? I.e., are the fixes
candidates for v5.12?

> Signed-off-by: Arnd Bergmann <[email protected]>
> ---
> drivers/pci/controller/dwc/Kconfig | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/pci/controller/dwc/Kconfig b/drivers/pci/controller/dwc/Kconfig
> index 5a3032d9b844..d981a0eba99f 100644
> --- a/drivers/pci/controller/dwc/Kconfig
> +++ b/drivers/pci/controller/dwc/Kconfig
> @@ -311,6 +311,7 @@ config PCIE_AL
> depends on OF && (ARM64 || COMPILE_TEST)
> depends on PCI_MSI_IRQ_DOMAIN
> select PCIE_DW_HOST
> + select PCI_ECAM
> help
> Say Y here to enable support of the Amazon's Annapurna Labs PCIe
> controller IP on Amazon SoCs. The PCIe controller uses the DesignWare
> --
> 2.29.2
>

2021-03-10 21:04:48

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH 1/3] PCI: controller: al: select CONFIG_PCI_ECAM

On Wed, Mar 10, 2021 at 8:32 PM Bjorn Helgaas <[email protected]> wrote:
>
> On Mon, Mar 08, 2021 at 04:24:46PM +0100, Arnd Bergmann wrote:
> > From: Arnd Bergmann <[email protected]>
> >
> > Compile-testing this driver without ECAM support results in a link
> > failure:
> >
> > ld.lld: error: undefined symbol: pci_ecam_map_bus
> > >>> referenced by pcie-al.c
> > >>> pci/controller/dwc/pcie-al.o:(al_pcie_map_bus) in archive drivers/built-in.a
> >
> > Select CONFIG_ECAM like the other drivers do.
>
> Did we add these compile issues in the v5.12-rc1? I.e., are the fixes
> candidates for v5.12?

No, the bug exists but is hidden until you apply patch 3/3 because the
driver is never compile tested on anything other than arm64, which
turns on PCI_ECAM unconditionally.

Merging all three for 5.13 is sufficient.

Arnd

2021-03-11 21:26:29

by Bjorn Helgaas

[permalink] [raw]
Subject: Re: [PATCH 1/3] PCI: controller: al: select CONFIG_PCI_ECAM

On Wed, Mar 10, 2021 at 10:02:55PM +0100, Arnd Bergmann wrote:
> On Wed, Mar 10, 2021 at 8:32 PM Bjorn Helgaas <[email protected]> wrote:
> >
> > On Mon, Mar 08, 2021 at 04:24:46PM +0100, Arnd Bergmann wrote:
> > > From: Arnd Bergmann <[email protected]>
> > >
> > > Compile-testing this driver without ECAM support results in a link
> > > failure:
> > >
> > > ld.lld: error: undefined symbol: pci_ecam_map_bus
> > > >>> referenced by pcie-al.c
> > > >>> pci/controller/dwc/pcie-al.o:(al_pcie_map_bus) in archive drivers/built-in.a
> > >
> > > Select CONFIG_ECAM like the other drivers do.
> >
> > Did we add these compile issues in the v5.12-rc1? I.e., are the fixes
> > candidates for v5.12?
>
> No, the bug exists but is hidden until you apply patch 3/3 because the
> driver is never compile tested on anything other than arm64, which
> turns on PCI_ECAM unconditionally.
>
> Merging all three for 5.13 is sufficient.

I put these on pci/misc for v5.13, thanks!