2022-07-14 22:05:33

by Stafford Horne

[permalink] [raw]
Subject: [RFC PATCH 0/2] Updates for asm-generic/pci.h

When reviewing the OpenRISC PCI support patch Arnd suggested that
we avoid copying arm64 and riscv asm/pci.h and moving that to be
the new asm-generic/pci.h.

This patch does that by first moving the old pci.h definition
of pci_get_legacy_ide_irq out to the architectures that use it.
Next, we create the new pci.h definition.

Stafford Horne (2):
asm-generic: Remove pci.h copying code out to architectures
asm-generic: Add new pci.h and use it

arch/alpha/include/asm/pci.h | 1 -
arch/arm64/include/asm/pci.h | 18 ++-----------
arch/csky/include/asm/pci.h | 24 +++--------------
arch/ia64/include/asm/pci.h | 1 -
arch/m68k/include/asm/pci.h | 7 +++--
arch/powerpc/include/asm/pci.h | 1 -
arch/riscv/include/asm/pci.h | 25 +++--------------
arch/s390/include/asm/pci.h | 6 ++++-
arch/sparc/include/asm/pci.h | 5 +++-
arch/um/include/asm/pci.h | 24 ++---------------
arch/x86/include/asm/pci.h | 6 +++--
arch/xtensa/include/asm/pci.h | 6 +++--
include/asm-generic/pci.h | 49 +++++++++++++++++++++++++---------
13 files changed, 69 insertions(+), 104 deletions(-)

--
2.36.1


2022-07-14 22:05:33

by Stafford Horne

[permalink] [raw]
Subject: [RFC PATCH 1/2] asm-generic: Remove pci.h copying code out to architectures

The generic pci.h header provides a definition of pci_get_legacy_ide_irq
which is used by architectures that use PC-style interrupt numbers.

This patch removes the old pci.h in order to make room for a new
pci.h to be used by arm64, riscv, openrisc, etc.

The existing code in pci.h is moved out to architectures.

Suggested-by: Arnd Bergmann <[email protected]>
Link: https://lore.kernel.org/lkml/CAK8P3a0JmPeczfmMBE__vn=Jbvf=nkbpVaZCycyv40pZNCJJXQ@mail.gmail.com/
Signed-off-by: Stafford Horne <[email protected]>
---
arch/alpha/include/asm/pci.h | 1 -
arch/ia64/include/asm/pci.h | 1 -
arch/m68k/include/asm/pci.h | 7 +++++--
arch/powerpc/include/asm/pci.h | 1 -
arch/s390/include/asm/pci.h | 6 +++++-
arch/sparc/include/asm/pci.h | 5 ++++-
arch/x86/include/asm/pci.h | 6 ++++--
arch/xtensa/include/asm/pci.h | 6 ++++--
include/asm-generic/pci.h | 17 -----------------
9 files changed, 22 insertions(+), 28 deletions(-)
delete mode 100644 include/asm-generic/pci.h

diff --git a/arch/alpha/include/asm/pci.h b/arch/alpha/include/asm/pci.h
index cf6bc1e64d66..8ac5af0fc4da 100644
--- a/arch/alpha/include/asm/pci.h
+++ b/arch/alpha/include/asm/pci.h
@@ -56,7 +56,6 @@ struct pci_controller {

/* IOMMU controls. */

-/* TODO: integrate with include/asm-generic/pci.h ? */
static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
{
return channel ? 15 : 14;
diff --git a/arch/ia64/include/asm/pci.h b/arch/ia64/include/asm/pci.h
index 8c163d1d0189..218412d963c2 100644
--- a/arch/ia64/include/asm/pci.h
+++ b/arch/ia64/include/asm/pci.h
@@ -63,7 +63,6 @@ static inline int pci_proc_domain(struct pci_bus *bus)
return (pci_domain_nr(bus) != 0);
}

-#define HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ
static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
{
return channel ? isa_irq_to_vector(15) : isa_irq_to_vector(14);
diff --git a/arch/m68k/include/asm/pci.h b/arch/m68k/include/asm/pci.h
index 5a4bc223743b..0c272ff515cc 100644
--- a/arch/m68k/include/asm/pci.h
+++ b/arch/m68k/include/asm/pci.h
@@ -2,11 +2,14 @@
#ifndef _ASM_M68K_PCI_H
#define _ASM_M68K_PCI_H

-#include <asm-generic/pci.h>
-
#define pcibios_assign_all_busses() 1

#define PCIBIOS_MIN_IO 0x00000100
#define PCIBIOS_MIN_MEM 0x02000000

+static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
+{
+ return channel ? 15 : 14;
+}
+
#endif /* _ASM_M68K_PCI_H */
diff --git a/arch/powerpc/include/asm/pci.h b/arch/powerpc/include/asm/pci.h
index 915d6ee4b40a..f9da506751bb 100644
--- a/arch/powerpc/include/asm/pci.h
+++ b/arch/powerpc/include/asm/pci.h
@@ -39,7 +39,6 @@
#define pcibios_assign_all_busses() \
(pci_has_flag(PCI_REASSIGN_ALL_BUS))

-#define HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ
static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
{
if (ppc_md.pci_get_legacy_ide_irq)
diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h
index fdb9745ee998..93cd0167f8aa 100644
--- a/arch/s390/include/asm/pci.h
+++ b/arch/s390/include/asm/pci.h
@@ -6,7 +6,6 @@
#include <linux/mutex.h>
#include <linux/iommu.h>
#include <linux/pci_hotplug.h>
-#include <asm-generic/pci.h>
#include <asm/pci_clp.h>
#include <asm/pci_debug.h>
#include <asm/sclp.h>
@@ -233,6 +232,11 @@ int zpci_init_iommu(struct zpci_dev *zdev);
void zpci_destroy_iommu(struct zpci_dev *zdev);

#ifdef CONFIG_PCI
+static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
+{
+ return channel ? 15 : 14;
+}
+
static inline bool zpci_use_mio(struct zpci_dev *zdev)
{
return static_branch_likely(&have_mio) && zdev->mio_capable;
diff --git a/arch/sparc/include/asm/pci.h b/arch/sparc/include/asm/pci.h
index 4deddf430e5d..6d283fc7b55b 100644
--- a/arch/sparc/include/asm/pci.h
+++ b/arch/sparc/include/asm/pci.h
@@ -46,7 +46,10 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
return PCI_IRQ_NONE;
}
#else
-#include <asm-generic/pci.h>
+static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
+{
+ return channel ? 15 : 14;
+}
#endif

#endif /* ___ASM_SPARC_PCI_H */
diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
index f3fd5928bcbb..7da27f665cfe 100644
--- a/arch/x86/include/asm/pci.h
+++ b/arch/x86/include/asm/pci.h
@@ -105,8 +105,10 @@ static inline void early_quirks(void) { }

extern void pci_iommu_alloc(void);

-/* generic pci stuff */
-#include <asm-generic/pci.h>
+static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
+{
+ return channel ? 15 : 14;
+}

#ifdef CONFIG_NUMA
/* Returns the node based on pci bus */
diff --git a/arch/xtensa/include/asm/pci.h b/arch/xtensa/include/asm/pci.h
index 8e2b48a268db..f57ede61f5db 100644
--- a/arch/xtensa/include/asm/pci.h
+++ b/arch/xtensa/include/asm/pci.h
@@ -43,7 +43,9 @@
#define ARCH_GENERIC_PCI_MMAP_RESOURCE 1
#define arch_can_pci_mmap_io() 1

-/* Generic PCI */
-#include <asm-generic/pci.h>
+static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
+{
+ return channel ? 15 : 14;
+}

#endif /* _XTENSA_PCI_H */
diff --git a/include/asm-generic/pci.h b/include/asm-generic/pci.h
deleted file mode 100644
index 6bb3cd3d695a..000000000000
--- a/include/asm-generic/pci.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * linux/include/asm-generic/pci.h
- *
- * Copyright (C) 2003 Russell King
- */
-#ifndef _ASM_GENERIC_PCI_H
-#define _ASM_GENERIC_PCI_H
-
-#ifndef HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ
-static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
-{
- return channel ? 15 : 14;
-}
-#endif /* HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ */
-
-#endif /* _ASM_GENERIC_PCI_H */
--
2.36.1

2022-07-15 01:48:15

by Max Filippov

[permalink] [raw]
Subject: Re: [RFC PATCH 1/2] asm-generic: Remove pci.h copying code out to architectures

On Thu, Jul 14, 2022 at 2:47 PM Stafford Horne <[email protected]> wrote:
>
> The generic pci.h header provides a definition of pci_get_legacy_ide_irq
> which is used by architectures that use PC-style interrupt numbers.
>
> This patch removes the old pci.h in order to make room for a new
> pci.h to be used by arm64, riscv, openrisc, etc.
>
> The existing code in pci.h is moved out to architectures.
>
> Suggested-by: Arnd Bergmann <[email protected]>
> Link: https://lore.kernel.org/lkml/CAK8P3a0JmPeczfmMBE__vn=Jbvf=nkbpVaZCycyv40pZNCJJXQ@mail.gmail.com/
> Signed-off-by: Stafford Horne <[email protected]>
> ---
> arch/alpha/include/asm/pci.h | 1 -
> arch/ia64/include/asm/pci.h | 1 -
> arch/m68k/include/asm/pci.h | 7 +++++--
> arch/powerpc/include/asm/pci.h | 1 -
> arch/s390/include/asm/pci.h | 6 +++++-
> arch/sparc/include/asm/pci.h | 5 ++++-
> arch/x86/include/asm/pci.h | 6 ++++--
> arch/xtensa/include/asm/pci.h | 6 ++++--
> include/asm-generic/pci.h | 17 -----------------
> 9 files changed, 22 insertions(+), 28 deletions(-)
> delete mode 100644 include/asm-generic/pci.h

[...]

> diff --git a/arch/xtensa/include/asm/pci.h b/arch/xtensa/include/asm/pci.h
> index 8e2b48a268db..f57ede61f5db 100644
> --- a/arch/xtensa/include/asm/pci.h
> +++ b/arch/xtensa/include/asm/pci.h
> @@ -43,7 +43,9 @@
> #define ARCH_GENERIC_PCI_MMAP_RESOURCE 1
> #define arch_can_pci_mmap_io() 1
>
> -/* Generic PCI */
> -#include <asm-generic/pci.h>

Ok.

> +static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
> +{
> + return channel ? 15 : 14;
> +}

This addition does not make sense for the xtensa as it isn't even possible
to enable PNP support (the only user of this function) on xtensa.

--
Thanks.
-- Max

2022-07-15 02:48:20

by Stafford Horne

[permalink] [raw]
Subject: Re: [RFC PATCH 1/2] asm-generic: Remove pci.h copying code out to architectures

On Thu, Jul 14, 2022 at 06:45:27PM -0700, Max Filippov wrote:
> On Thu, Jul 14, 2022 at 2:47 PM Stafford Horne <[email protected]> wrote:
> >
> > The generic pci.h header provides a definition of pci_get_legacy_ide_irq
> > which is used by architectures that use PC-style interrupt numbers.
> >
> > This patch removes the old pci.h in order to make room for a new
> > pci.h to be used by arm64, riscv, openrisc, etc.
> >
> > The existing code in pci.h is moved out to architectures.
> >
> > Suggested-by: Arnd Bergmann <[email protected]>
> > Link: https://lore.kernel.org/lkml/CAK8P3a0JmPeczfmMBE__vn=Jbvf=nkbpVaZCycyv40pZNCJJXQ@mail.gmail.com/
> > Signed-off-by: Stafford Horne <[email protected]>
> > ---
> > arch/alpha/include/asm/pci.h | 1 -
> > arch/ia64/include/asm/pci.h | 1 -
> > arch/m68k/include/asm/pci.h | 7 +++++--
> > arch/powerpc/include/asm/pci.h | 1 -
> > arch/s390/include/asm/pci.h | 6 +++++-
> > arch/sparc/include/asm/pci.h | 5 ++++-
> > arch/x86/include/asm/pci.h | 6 ++++--
> > arch/xtensa/include/asm/pci.h | 6 ++++--
> > include/asm-generic/pci.h | 17 -----------------
> > 9 files changed, 22 insertions(+), 28 deletions(-)
> > delete mode 100644 include/asm-generic/pci.h
>
> [...]
>
> > diff --git a/arch/xtensa/include/asm/pci.h b/arch/xtensa/include/asm/pci.h
> > index 8e2b48a268db..f57ede61f5db 100644
> > --- a/arch/xtensa/include/asm/pci.h
> > +++ b/arch/xtensa/include/asm/pci.h
> > @@ -43,7 +43,9 @@
> > #define ARCH_GENERIC_PCI_MMAP_RESOURCE 1
> > #define arch_can_pci_mmap_io() 1
> >
> > -/* Generic PCI */
> > -#include <asm-generic/pci.h>
>
> Ok.
>
> > +static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
> > +{
> > + return channel ? 15 : 14;
> > +}
>
> This addition does not make sense for the xtensa as it isn't even possible
> to enable PNP support (the only user of this function) on xtensa.

Thanks for your feedback, this is the kind of feedback I was hoping to fish out
with this patch. I will look into completely removing this then.

-Stafford

2022-07-15 08:09:33

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [RFC PATCH 1/2] asm-generic: Remove pci.h copying code out to architectures

On Fri, Jul 15, 2022 at 3:45 AM Max Filippov <[email protected]> wrote:
> On Thu, Jul 14, 2022 at 2:47 PM Stafford Horne <[email protected]> wrote:
>
> > +static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
> > +{
> > + return channel ? 15 : 14;
> > +}
>
> This addition does not make sense for the xtensa as it isn't even possible
> to enable PNP support (the only user of this function) on xtensa.

Nice catch! I had looked at this function earlier and only tried to infer
which architectures might have this based on who has those interrupt
numbers reserved for ISA devices, but looking at CONFIG_PNP is clearly
better here.

PNP depends on "ISA || ACPI", and this already rules out most
architectures. The remaining ones are:

* x86, ia64, alpha: These clearly use PNP based on-board devices on
common machines, and use PC-style interrupts

* arm64, loongarch: These select PNP when ACPI is enabled. I don't
think they actually use PNP, but for the moment the function needs to
be defined, probably returning 0. Loongarch still lacks PCI support
though, so asm/pci.h is not yet there.

* arm, mips, powerpc: Only a few older machines in each of these
support ISA devices, and the function is probably machine specific.
These all have a custom pci.h already and don't use the asm-generic
version.

* m68k: there are two that enable CONFIG_ISA and one that enables
CONFIG_PCI, but nothing that has both, so we don't need this
function.

In summary, I think only x86 actually uses this function, and it is
correct there, everything else either has its own implementation
or does not need it, so the existing asm-generic/pci.h file can
just be folded into the x86 asm/pci.h. That is a great cleanup.

Arnd