2011-06-28 22:58:18

by Rob Herring

[permalink] [raw]
Subject: [RFC PATCH 0/4] ARM: make mach/hardware.h optional

From: Rob Herring <[email protected]>

Currently, all ARM platforms must have a mach/hardware.h include. This is
because it is ultimately included by linux/pci.h which is included in many
places even for !CONFIG_PCI.

This could be fixed simply with an ifdef around the include of mach/hardware.h
in asm/pci.h. However, in the interest of fixing this for single kernel
binary builds, this series removes the include of mach/hardware.h outside of
mach-* and plat-*. What's used from hardware.h is a couple of PCI defines.
Converting them to variables allows each platform to set the values as needed.

This does not address the inclusion of mach/hardware.h under drivers/*. This
appears to be mostly older platforms. There could also be some indirect
inclusions from other mach/* headers.

I've compile tested on most affected platforms.

Rob

Rob Herring (4):
microblaze: move pci flag functions into asm-generic
ARM: remove unnecessary mach/hardware.h includes
ARM: pci: make pcibios_assign_all_busses use pci_has_flag
ARM: convert PCI defines to variables

arch/arm/include/asm/pci.h | 16 +++++-
arch/arm/include/asm/vga.h | 2 +-
arch/arm/kernel/ecard.c | 1 -
arch/arm/lib/ecard.S | 1 -
arch/arm/lib/io-readsw-armv3.S | 1 -
arch/arm/lib/io-writesw-armv3.S | 1 -
arch/arm/mach-bcmring/include/mach/hardware.h | 2 -
arch/arm/mach-cns3xxx/cns3420vb.c | 1 -
arch/arm/mach-cns3xxx/include/mach/hardware.h | 22 --------
arch/arm/mach-dove/include/mach/hardware.h | 7 ---
arch/arm/mach-dove/pcie.c | 4 ++
arch/arm/mach-ep93xx/include/mach/hardware.h | 2 -
arch/arm/mach-footbridge/common.c | 4 +-
arch/arm/mach-footbridge/dc21285.c | 4 ++
arch/arm/mach-footbridge/include/mach/hardware.h | 7 +--
arch/arm/mach-integrator/include/mach/hardware.h | 7 ---
arch/arm/mach-integrator/pci_v3.c | 4 ++
arch/arm/mach-iop13xx/include/mach/hardware.h | 7 ---
arch/arm/mach-iop13xx/pci.c | 4 +-
arch/arm/mach-iop32x/include/mach/hardware.h | 3 -
arch/arm/mach-iop33x/include/mach/hardware.h | 3 -
arch/arm/mach-ixp2000/include/mach/hardware.h | 8 ---
arch/arm/mach-ixp2000/pci.c | 2 +
arch/arm/mach-ixp23xx/include/mach/hardware.h | 4 --
arch/arm/mach-ixp23xx/pci.c | 4 ++
arch/arm/mach-ixp4xx/common-pci.c | 6 ++
arch/arm/mach-ixp4xx/include/mach/hardware.h | 5 --
arch/arm/mach-kirkwood/include/mach/hardware.h | 7 ---
arch/arm/mach-kirkwood/pcie.c | 4 ++
arch/arm/mach-ks8695/include/mach/hardware.h | 9 ---
arch/arm/mach-mv78xx0/include/mach/hardware.h | 7 ---
arch/arm/mach-mv78xx0/pcie.c | 4 ++
arch/arm/mach-orion5x/include/mach/hardware.h | 7 ---
arch/arm/mach-orion5x/pci.c | 4 ++
arch/arm/mach-pxa/include/mach/hardware.h | 3 -
arch/arm/mach-sa1100/include/mach/hardware.h | 8 ---
arch/arm/mach-shark/include/mach/hardware.h | 6 --
arch/arm/mach-shark/pci.c | 11 +++-
arch/arm/mach-tegra/include/mach/hardware.h | 28 ----------
arch/arm/mach-tegra/include/mach/system.h | 1 -
arch/arm/mach-tegra/io.c | 1 -
arch/arm/mach-tegra/pcie.c | 2 +
arch/arm/mach-tegra/platsmp.c | 1 -
arch/arm/mach-versatile/include/mach/hardware.h | 6 --
arch/arm/mach-versatile/pci.c | 3 +
arch/arm/mm/iomap.c | 12 ++++
arch/arm/mm/proc-xsc3.S | 1 -
arch/microblaze/include/asm/pci-bridge.h | 36 +------------
include/asm-generic/pci-bridge.h | 62 ++++++++++++++++++++++
49 files changed, 144 insertions(+), 211 deletions(-)
delete mode 100644 arch/arm/mach-cns3xxx/include/mach/hardware.h
delete mode 100644 arch/arm/mach-tegra/include/mach/hardware.h
create mode 100644 include/asm-generic/pci-bridge.h

--
1.7.4.1


2011-06-28 22:58:25

by Rob Herring

[permalink] [raw]
Subject: [PATCH 1/4] microblaze: move pci flag functions into asm-generic

From: Rob Herring <[email protected]>

Move pci_set_flags, pci_add_flags, and pci_has_flag into
asm-generic/pci-bridge.h so other archs can use them.

Signed-off-by: Rob Herring <[email protected]>
---
arch/microblaze/include/asm/pci-bridge.h | 36 +-----------------
include/asm-generic/pci-bridge.h | 62 ++++++++++++++++++++++++++++++
2 files changed, 63 insertions(+), 35 deletions(-)
create mode 100644 include/asm-generic/pci-bridge.h

diff --git a/arch/microblaze/include/asm/pci-bridge.h b/arch/microblaze/include/asm/pci-bridge.h
index 746df91..ad1480f 100644
--- a/arch/microblaze/include/asm/pci-bridge.h
+++ b/arch/microblaze/include/asm/pci-bridge.h
@@ -10,6 +10,7 @@
#include <linux/pci.h>
#include <linux/list.h>
#include <linux/ioport.h>
+#include <asm-generic/pci-bridge.h>

struct device_node;

@@ -164,40 +165,5 @@ extern struct pci_controller *pcibios_alloc_controller(struct device_node *dev);
extern void pcibios_free_controller(struct pci_controller *phb);
extern void pcibios_setup_phb_resources(struct pci_controller *hose);

-#ifdef CONFIG_PCI
-extern unsigned int pci_flags;
-
-static inline void pci_set_flags(int flags)
-{
- pci_flags = flags;
-}
-
-static inline void pci_add_flags(int flags)
-{
- pci_flags |= flags;
-}
-
-static inline int pci_has_flag(int flag)
-{
- return pci_flags & flag;
-}
-
-extern struct list_head hose_list;
-
-extern int pcibios_vaddr_is_ioport(void __iomem *address);
-#else
-static inline int pcibios_vaddr_is_ioport(void __iomem *address)
-{
- return 0;
-}
-
-static inline void pci_set_flags(int flags) { }
-static inline void pci_add_flags(int flags) { }
-static inline int pci_has_flag(int flag)
-{
- return 0;
-}
-#endif /* CONFIG_PCI */
-
#endif /* __KERNEL__ */
#endif /* _ASM_MICROBLAZE_PCI_BRIDGE_H */
diff --git a/include/asm-generic/pci-bridge.h b/include/asm-generic/pci-bridge.h
new file mode 100644
index 0000000..4a5aca2
--- /dev/null
+++ b/include/asm-generic/pci-bridge.h
@@ -0,0 +1,62 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+#ifndef _ASM_GENERIC_PCI_BRIDGE_H
+#define _ASM_GENERIC_PCI_BRIDGE_H
+
+#ifdef __KERNEL__
+
+enum {
+ /* Force re-assigning all resources (ignore firmware
+ * setup completely)
+ */
+ PCI_REASSIGN_ALL_RSRC = 0x00000001,
+
+ /* Re-assign all bus numbers */
+ PCI_REASSIGN_ALL_BUS = 0x00000002,
+
+ /* Do not try to assign, just use existing setup */
+ PCI_PROBE_ONLY = 0x00000004,
+
+ /* Don't bother with ISA alignment unless the bridge has
+ * ISA forwarding enabled
+ */
+ PCI_CAN_SKIP_ISA_ALIGN = 0x00000008,
+
+ /* Enable domain numbers in /proc */
+ PCI_ENABLE_PROC_DOMAINS = 0x00000010,
+ /* ... except for domain 0 */
+ PCI_COMPAT_DOMAIN_0 = 0x00000020,
+};
+
+#ifdef CONFIG_PCI
+extern unsigned int pci_flags;
+
+static inline void pci_set_flags(int flags)
+{
+ pci_flags = flags;
+}
+
+static inline void pci_add_flags(int flags)
+{
+ pci_flags |= flags;
+}
+
+static inline int pci_has_flag(int flag)
+{
+ return pci_flags & flag;
+}
+#else
+static inline void pci_set_flags(int flags) { }
+static inline void pci_add_flags(int flags) { }
+static inline int pci_has_flag(int flag)
+{
+ return 0;
+}
+#endif /* CONFIG_PCI */
+
+#endif /* __KERNEL__ */
+#endif /* _ASM_GENERIC_PCI_BRIDGE_H */
--
1.7.4.1

2011-06-28 22:58:36

by Rob Herring

[permalink] [raw]
Subject: [PATCH 2/4] ARM: remove unnecessary mach/hardware.h includes

From: Rob Herring <[email protected]>

Remove some includes of mach/hardware.h which are not needed. hardware.h will
be removed completely for tegra and cns3xxx in follow on patch.

Signed-off-by: Rob Herring <[email protected]>
---
arch/arm/kernel/ecard.c | 1 -
arch/arm/lib/ecard.S | 1 -
arch/arm/lib/io-readsw-armv3.S | 1 -
arch/arm/lib/io-writesw-armv3.S | 1 -
arch/arm/mach-cns3xxx/cns3420vb.c | 1 -
arch/arm/mach-tegra/include/mach/system.h | 1 -
arch/arm/mach-tegra/io.c | 1 -
arch/arm/mach-tegra/platsmp.c | 1 -
arch/arm/mm/proc-xsc3.S | 1 -
9 files changed, 0 insertions(+), 9 deletions(-)

diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c
index d165001..04b06c1 100644
--- a/arch/arm/kernel/ecard.c
+++ b/arch/arm/kernel/ecard.c
@@ -46,7 +46,6 @@

#include <asm/dma.h>
#include <asm/ecard.h>
-#include <mach/hardware.h>
#include <asm/irq.h>
#include <asm/mmu_context.h>
#include <asm/mach/irq.h>
diff --git a/arch/arm/lib/ecard.S b/arch/arm/lib/ecard.S
index 8678eb2..e6057fa 100644
--- a/arch/arm/lib/ecard.S
+++ b/arch/arm/lib/ecard.S
@@ -12,7 +12,6 @@
*/
#include <linux/linkage.h>
#include <asm/assembler.h>
-#include <mach/hardware.h>

#define CPSR2SPSR(rt) \
mrs rt, cpsr; \
diff --git a/arch/arm/lib/io-readsw-armv3.S b/arch/arm/lib/io-readsw-armv3.S
index 9aaf7c7..88487c8 100644
--- a/arch/arm/lib/io-readsw-armv3.S
+++ b/arch/arm/lib/io-readsw-armv3.S
@@ -9,7 +9,6 @@
*/
#include <linux/linkage.h>
#include <asm/assembler.h>
-#include <mach/hardware.h>

.Linsw_bad_alignment:
adr r0, .Linsw_bad_align_msg
diff --git a/arch/arm/lib/io-writesw-armv3.S b/arch/arm/lib/io-writesw-armv3.S
index cd34503..49b8004 100644
--- a/arch/arm/lib/io-writesw-armv3.S
+++ b/arch/arm/lib/io-writesw-armv3.S
@@ -9,7 +9,6 @@
*/
#include <linux/linkage.h>
#include <asm/assembler.h>
-#include <mach/hardware.h>

.Loutsw_bad_alignment:
adr r0, .Loutsw_bad_align_msg
diff --git a/arch/arm/mach-cns3xxx/cns3420vb.c b/arch/arm/mach-cns3xxx/cns3420vb.c
index 08e5c87..85e6390 100644
--- a/arch/arm/mach-cns3xxx/cns3420vb.c
+++ b/arch/arm/mach-cns3xxx/cns3420vb.c
@@ -29,7 +29,6 @@
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
-#include <mach/hardware.h>
#include <mach/cns3xxx.h>
#include <mach/irqs.h>
#include "core.h"
diff --git a/arch/arm/mach-tegra/include/mach/system.h b/arch/arm/mach-tegra/include/mach/system.h
index d0183d8..027c421 100644
--- a/arch/arm/mach-tegra/include/mach/system.h
+++ b/arch/arm/mach-tegra/include/mach/system.h
@@ -21,7 +21,6 @@
#ifndef __MACH_TEGRA_SYSTEM_H
#define __MACH_TEGRA_SYSTEM_H

-#include <mach/hardware.h>
#include <mach/iomap.h>

extern void (*arch_reset)(char mode, const char *cmd);
diff --git a/arch/arm/mach-tegra/io.c b/arch/arm/mach-tegra/io.c
index 31848a9..ea50fe2 100644
--- a/arch/arm/mach-tegra/io.c
+++ b/arch/arm/mach-tegra/io.c
@@ -24,7 +24,6 @@
#include <linux/mm.h>
#include <linux/io.h>

-#include <mach/hardware.h>
#include <asm/page.h>
#include <asm/mach/map.h>

diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c
index b8ae3c9..deb3851 100644
--- a/arch/arm/mach-tegra/platsmp.c
+++ b/arch/arm/mach-tegra/platsmp.c
@@ -21,7 +21,6 @@

#include <asm/cacheflush.h>
#include <asm/hardware/gic.h>
-#include <mach/hardware.h>
#include <asm/mach-types.h>
#include <asm/smp_scu.h>

diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S
index 5962136..9ab25b4 100644
--- a/arch/arm/mm/proc-xsc3.S
+++ b/arch/arm/mm/proc-xsc3.S
@@ -28,7 +28,6 @@
#include <linux/init.h>
#include <asm/assembler.h>
#include <asm/hwcap.h>
-#include <mach/hardware.h>
#include <asm/pgtable.h>
#include <asm/pgtable-hwdef.h>
#include <asm/page.h>
--
1.7.4.1

2011-06-28 22:58:57

by Rob Herring

[permalink] [raw]
Subject: [PATCH 3/4] ARM: pci: make pcibios_assign_all_busses use pci_has_flag

From: Rob Herring <[email protected]>

Convert pcibios_assign_all_busses from a define to inline so platforms can
control this setting.

Signed-off-by: Rob Herring <[email protected]>
---
arch/arm/include/asm/pci.h | 8 +++++++-
arch/arm/mach-bcmring/include/mach/hardware.h | 2 --
arch/arm/mach-cns3xxx/include/mach/hardware.h | 1 -
arch/arm/mach-dove/include/mach/hardware.h | 2 --
arch/arm/mach-ep93xx/include/mach/hardware.h | 2 --
arch/arm/mach-footbridge/include/mach/hardware.h | 2 --
arch/arm/mach-integrator/include/mach/hardware.h | 2 --
arch/arm/mach-iop13xx/include/mach/hardware.h | 2 --
arch/arm/mach-iop32x/include/mach/hardware.h | 1 -
arch/arm/mach-iop33x/include/mach/hardware.h | 1 -
arch/arm/mach-ixp2000/include/mach/hardware.h | 2 --
arch/arm/mach-ixp2000/pci.c | 2 ++
arch/arm/mach-ixp23xx/include/mach/hardware.h | 2 --
arch/arm/mach-ixp23xx/pci.c | 2 ++
arch/arm/mach-ixp4xx/include/mach/hardware.h | 2 --
arch/arm/mach-kirkwood/include/mach/hardware.h | 3 ---
arch/arm/mach-ks8695/include/mach/hardware.h | 2 --
arch/arm/mach-mv78xx0/include/mach/hardware.h | 2 --
arch/arm/mach-orion5x/include/mach/hardware.h | 2 --
arch/arm/mach-pxa/include/mach/hardware.h | 1 -
arch/arm/mach-sa1100/include/mach/hardware.h | 1 -
arch/arm/mach-shark/include/mach/hardware.h | 2 --
arch/arm/mach-tegra/include/mach/hardware.h | 1 -
arch/arm/mach-versatile/include/mach/hardware.h | 2 --
arch/arm/mm/iomap.c | 4 ++++
25 files changed, 15 insertions(+), 38 deletions(-)

diff --git a/arch/arm/include/asm/pci.h b/arch/arm/include/asm/pci.h
index 92e2a83..6719178 100644
--- a/arch/arm/include/asm/pci.h
+++ b/arch/arm/include/asm/pci.h
@@ -3,10 +3,16 @@

#ifdef __KERNEL__
#include <asm-generic/pci-dma-compat.h>
+#include <asm-generic/pci-bridge.h>

#include <asm/mach/pci.h> /* for pci_sys_data */
#include <mach/hardware.h> /* for PCIBIOS_MIN_* */

+static inline int pcibios_assign_all_busses(void)
+{
+ return pci_has_flag(PCI_REASSIGN_ALL_RSRC);
+}
+
#ifdef CONFIG_PCI_DOMAINS
static inline int pci_domain_nr(struct pci_bus *bus)
{
@@ -76,5 +82,5 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
}

#endif /* __KERNEL__ */
-
+
#endif
diff --git a/arch/arm/mach-bcmring/include/mach/hardware.h b/arch/arm/mach-bcmring/include/mach/hardware.h
index 8bf3564..ed78aab 100644
--- a/arch/arm/mach-bcmring/include/mach/hardware.h
+++ b/arch/arm/mach-bcmring/include/mach/hardware.h
@@ -36,8 +36,6 @@
#define RAM_SIZE (CFG_GLOBAL_RAM_SIZE-CFG_GLOBAL_RAM_SIZE_RESERVED)
#define RAM_BASE PAGE_OFFSET

-#define pcibios_assign_all_busses() 1
-
/* Macros to make managing spinlocks a bit more controlled in terms of naming. */
/* See reg_gpio.h, reg_irq.h, arch.c, gpio.c for example usage. */
#if defined(__KERNEL__)
diff --git a/arch/arm/mach-cns3xxx/include/mach/hardware.h b/arch/arm/mach-cns3xxx/include/mach/hardware.h
index 57e0983..82a0d4e 100644
--- a/arch/arm/mach-cns3xxx/include/mach/hardware.h
+++ b/arch/arm/mach-cns3xxx/include/mach/hardware.h
@@ -17,6 +17,5 @@
/* macro to get at IO space when running virtually */
#define PCIBIOS_MIN_IO 0x00000000
#define PCIBIOS_MIN_MEM 0x00000000
-#define pcibios_assign_all_busses() 1

#endif
diff --git a/arch/arm/mach-dove/include/mach/hardware.h b/arch/arm/mach-dove/include/mach/hardware.h
index 32b0826..f619fb9 100644
--- a/arch/arm/mach-dove/include/mach/hardware.h
+++ b/arch/arm/mach-dove/include/mach/hardware.h
@@ -11,8 +11,6 @@

#include "dove.h"

-#define pcibios_assign_all_busses() 1
-
#define PCIBIOS_MIN_IO 0x1000
#define PCIBIOS_MIN_MEM 0x01000000
#define PCIMEM_BASE DOVE_PCIE0_MEM_PHYS_BASE
diff --git a/arch/arm/mach-ep93xx/include/mach/hardware.h b/arch/arm/mach-ep93xx/include/mach/hardware.h
index 5a3ce02..4df8428 100644
--- a/arch/arm/mach-ep93xx/include/mach/hardware.h
+++ b/arch/arm/mach-ep93xx/include/mach/hardware.h
@@ -8,8 +8,6 @@
#include <mach/ep93xx-regs.h>
#include <mach/platform.h>

-#define pcibios_assign_all_busses() 0
-
/*
* The EP93xx has two external crystal oscillators. To generate the
* required high-frequency clocks, the processor uses two phase-locked-
diff --git a/arch/arm/mach-footbridge/include/mach/hardware.h b/arch/arm/mach-footbridge/include/mach/hardware.h
index b6fdf23..082e6ce 100644
--- a/arch/arm/mach-footbridge/include/mach/hardware.h
+++ b/arch/arm/mach-footbridge/include/mach/hardware.h
@@ -100,8 +100,6 @@ extern unsigned int nw_gpio_read(void);
extern void nw_cpld_modify(unsigned int mask, unsigned int set);
#endif

-#define pcibios_assign_all_busses() 1
-
#define PCIBIOS_MIN_IO 0x1000
#define PCIBIOS_MIN_MEM 0x81000000

diff --git a/arch/arm/mach-integrator/include/mach/hardware.h b/arch/arm/mach-integrator/include/mach/hardware.h
index 57f51ba..37323ea 100644
--- a/arch/arm/mach-integrator/include/mach/hardware.h
+++ b/arch/arm/mach-integrator/include/mach/hardware.h
@@ -34,8 +34,6 @@

#define PCIMEM_BASE PCI_MEMORY_VADDR

-#define pcibios_assign_all_busses() 1
-
#define PCIBIOS_MIN_IO 0x6000
#define PCIBIOS_MIN_MEM 0x00100000

diff --git a/arch/arm/mach-iop13xx/include/mach/hardware.h b/arch/arm/mach-iop13xx/include/mach/hardware.h
index 8e1d562..ba81e50 100644
--- a/arch/arm/mach-iop13xx/include/mach/hardware.h
+++ b/arch/arm/mach-iop13xx/include/mach/hardware.h
@@ -2,8 +2,6 @@
#define __ASM_ARCH_HARDWARE_H
#include <asm/types.h>

-#define pcibios_assign_all_busses() 1
-
#ifndef __ASSEMBLY__
extern unsigned long iop13xx_pcibios_min_io;
extern unsigned long iop13xx_pcibios_min_mem;
diff --git a/arch/arm/mach-iop32x/include/mach/hardware.h b/arch/arm/mach-iop32x/include/mach/hardware.h
index d559c4e..e68bf97 100644
--- a/arch/arm/mach-iop32x/include/mach/hardware.h
+++ b/arch/arm/mach-iop32x/include/mach/hardware.h
@@ -18,7 +18,6 @@
* but when we read them, we convert them to virtual addresses. See
* arch/arm/plat-iop/pci.c.
*/
-#define pcibios_assign_all_busses() 1
#define PCIBIOS_MIN_IO 0x00000000
#define PCIBIOS_MIN_MEM 0x00000000

diff --git a/arch/arm/mach-iop33x/include/mach/hardware.h b/arch/arm/mach-iop33x/include/mach/hardware.h
index 8c10e43..215065b 100644
--- a/arch/arm/mach-iop33x/include/mach/hardware.h
+++ b/arch/arm/mach-iop33x/include/mach/hardware.h
@@ -18,7 +18,6 @@
* but when we read them, we convert them to virtual addresses. See
* arch/arm/mach-iop3xx/iop3xx-pci.c
*/
-#define pcibios_assign_all_busses() 1
#define PCIBIOS_MIN_IO 0x00000000
#define PCIBIOS_MIN_MEM 0x00000000

diff --git a/arch/arm/mach-ixp2000/include/mach/hardware.h b/arch/arm/mach-ixp2000/include/mach/hardware.h
index f033de4..6c92008 100644
--- a/arch/arm/mach-ixp2000/include/mach/hardware.h
+++ b/arch/arm/mach-ixp2000/include/mach/hardware.h
@@ -27,8 +27,6 @@

#include "ixp2000-regs.h" /* Chipset Registers */

-#define pcibios_assign_all_busses() 0
-
/*
* Platform helper functions
*/
diff --git a/arch/arm/mach-ixp2000/pci.c b/arch/arm/mach-ixp2000/pci.c
index f797c5f..8888ed9 100644
--- a/arch/arm/mach-ixp2000/pci.c
+++ b/arch/arm/mach-ixp2000/pci.c
@@ -196,6 +196,8 @@ clear_master_aborts(void)
void __init
ixp2000_pci_preinit(void)
{
+ pci_set_flags(0);
+
#ifndef CONFIG_IXP2000_SUPPORT_BROKEN_PCI_IO
/*
* Configure the PCI unit to properly byteswap I/O transactions,
diff --git a/arch/arm/mach-ixp23xx/include/mach/hardware.h b/arch/arm/mach-ixp23xx/include/mach/hardware.h
index 57b508b..b8bb781 100644
--- a/arch/arm/mach-ixp23xx/include/mach/hardware.h
+++ b/arch/arm/mach-ixp23xx/include/mach/hardware.h
@@ -20,8 +20,6 @@

#include "ixp23xx.h"

-#define pcibios_assign_all_busses() 0
-
/*
* Platform helper functions
*/
diff --git a/arch/arm/mach-ixp23xx/pci.c b/arch/arm/mach-ixp23xx/pci.c
index 563819a..72d145a 100644
--- a/arch/arm/mach-ixp23xx/pci.c
+++ b/arch/arm/mach-ixp23xx/pci.c
@@ -227,6 +227,8 @@ static void __init ixp23xx_pci_common_init(void)

void __init ixp23xx_pci_preinit(void)
{
+ pci_set_flags(0);
+
ixp23xx_pci_common_init();

hook_fault_code(16+6, ixp23xx_pci_abort_handler, SIGBUS, 0,
diff --git a/arch/arm/mach-ixp4xx/include/mach/hardware.h b/arch/arm/mach-ixp4xx/include/mach/hardware.h
index 8138371..163e506 100644
--- a/arch/arm/mach-ixp4xx/include/mach/hardware.h
+++ b/arch/arm/mach-ixp4xx/include/mach/hardware.h
@@ -28,8 +28,6 @@

#define ARCH_HAS_DMA_SET_COHERENT_MASK

-#define pcibios_assign_all_busses() 1
-
/* Register locations and bits */
#include "ixp4xx-regs.h"

diff --git a/arch/arm/mach-kirkwood/include/mach/hardware.h b/arch/arm/mach-kirkwood/include/mach/hardware.h
index cde8528..31b81fe 100644
--- a/arch/arm/mach-kirkwood/include/mach/hardware.h
+++ b/arch/arm/mach-kirkwood/include/mach/hardware.h
@@ -11,9 +11,6 @@

#include "kirkwood.h"

-#define pcibios_assign_all_busses() 1
-
-#define PCIBIOS_MIN_IO 0x00001000
#define PCIBIOS_MIN_MEM 0x01000000
#define PCIMEM_BASE KIRKWOOD_PCIE_MEM_PHYS_BASE /* mem base for VGA */

diff --git a/arch/arm/mach-ks8695/include/mach/hardware.h b/arch/arm/mach-ks8695/include/mach/hardware.h
index e0f911d..a46be88 100644
--- a/arch/arm/mach-ks8695/include/mach/hardware.h
+++ b/arch/arm/mach-ks8695/include/mach/hardware.h
@@ -46,8 +46,6 @@
/*
* PCI support
*/
-#define pcibios_assign_all_busses() 1
-
#define PCIBIOS_MIN_IO 0
#define PCIBIOS_MIN_MEM 0

diff --git a/arch/arm/mach-mv78xx0/include/mach/hardware.h b/arch/arm/mach-mv78xx0/include/mach/hardware.h
index 5d88755..c76b93f 100644
--- a/arch/arm/mach-mv78xx0/include/mach/hardware.h
+++ b/arch/arm/mach-mv78xx0/include/mach/hardware.h
@@ -11,8 +11,6 @@

#include "mv78xx0.h"

-#define pcibios_assign_all_busses() 1
-
#define PCIBIOS_MIN_IO 0x00001000
#define PCIBIOS_MIN_MEM 0x01000000
#define PCIMEM_BASE MV78XX0_PCIE_MEM_PHYS_BASE /* mem base for VGA */
diff --git a/arch/arm/mach-orion5x/include/mach/hardware.h b/arch/arm/mach-orion5x/include/mach/hardware.h
index e51aaf4..a42b743 100644
--- a/arch/arm/mach-orion5x/include/mach/hardware.h
+++ b/arch/arm/mach-orion5x/include/mach/hardware.h
@@ -11,8 +11,6 @@

#include "orion5x.h"

-#define pcibios_assign_all_busses() 1
-
#define PCIBIOS_MIN_IO 0x00001000
#define PCIBIOS_MIN_MEM 0x01000000
#define PCIMEM_BASE ORION5X_PCIE_MEM_PHYS_BASE
diff --git a/arch/arm/mach-pxa/include/mach/hardware.h b/arch/arm/mach-pxa/include/mach/hardware.h
index 6957ba5..b4ea392 100644
--- a/arch/arm/mach-pxa/include/mach/hardware.h
+++ b/arch/arm/mach-pxa/include/mach/hardware.h
@@ -339,7 +339,6 @@ extern unsigned long get_clock_tick_rate(void);
#if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI)
#define PCIBIOS_MIN_IO 0
#define PCIBIOS_MIN_MEM 0
-#define pcibios_assign_all_busses() 1
#define ARCH_HAS_DMA_SET_COHERENT_MASK
#endif

diff --git a/arch/arm/mach-sa1100/include/mach/hardware.h b/arch/arm/mach-sa1100/include/mach/hardware.h
index 967ae76..5946af2 100644
--- a/arch/arm/mach-sa1100/include/mach/hardware.h
+++ b/arch/arm/mach-sa1100/include/mach/hardware.h
@@ -79,7 +79,6 @@ static inline unsigned long get_clock_tick_rate(void)
#if defined(CONFIG_ARCH_SA1100) && defined(CONFIG_PCI)
#define PCIBIOS_MIN_IO 0
#define PCIBIOS_MIN_MEM 0
-#define pcibios_assign_all_busses() 1
#define HAVE_ARCH_PCI_SET_DMA_MASK 1
#endif

diff --git a/arch/arm/mach-shark/include/mach/hardware.h b/arch/arm/mach-shark/include/mach/hardware.h
index 94d84b2..24639ce 100644
--- a/arch/arm/mach-shark/include/mach/hardware.h
+++ b/arch/arm/mach-shark/include/mach/hardware.h
@@ -12,8 +12,6 @@

#define UNCACHEABLE_ADDR 0xdf010000

-#define pcibios_assign_all_busses() 1
-
#define PCIBIOS_MIN_IO 0x6000
#define PCIBIOS_MIN_MEM 0x50000000
#define PCIMEM_BASE 0xe8000000
diff --git a/arch/arm/mach-tegra/include/mach/hardware.h b/arch/arm/mach-tegra/include/mach/hardware.h
index 56e43b3..84c2658 100644
--- a/arch/arm/mach-tegra/include/mach/hardware.h
+++ b/arch/arm/mach-tegra/include/mach/hardware.h
@@ -23,6 +23,5 @@

#define PCIBIOS_MIN_IO 0x1000
#define PCIBIOS_MIN_MEM 0
-#define pcibios_assign_all_busses() 1

#endif
diff --git a/arch/arm/mach-versatile/include/mach/hardware.h b/arch/arm/mach-versatile/include/mach/hardware.h
index 6911e1f..8f60e94 100644
--- a/arch/arm/mach-versatile/include/mach/hardware.h
+++ b/arch/arm/mach-versatile/include/mach/hardware.h
@@ -34,8 +34,6 @@
#define PCIBIOS_MIN_IO 0x44000000
#define PCIBIOS_MIN_MEM 0x50000000

-#define pcibios_assign_all_busses() 1
-
/* macro to get at IO space when running virtually */
#define IO_ADDRESS(x) (((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + 0xf0000000)

diff --git a/arch/arm/mm/iomap.c b/arch/arm/mm/iomap.c
index ffad039..ad41414 100644
--- a/arch/arm/mm/iomap.c
+++ b/arch/arm/mm/iomap.c
@@ -8,6 +8,7 @@
#include <linux/pci.h>
#include <linux/ioport.h>
#include <linux/io.h>
+#include <asm/pci.h>

#ifdef __io
void __iomem *ioport_map(unsigned long port, unsigned int nr)
@@ -23,6 +24,9 @@ EXPORT_SYMBOL(ioport_unmap);
#endif

#ifdef CONFIG_PCI
+unsigned int pci_flags = PCI_REASSIGN_ALL_RSRC;
+EXPORT_SYMBOL(pci_flags);
+
void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
{
resource_size_t start = pci_resource_start(dev, bar);
--
1.7.4.1

2011-06-28 22:58:49

by Rob Herring

[permalink] [raw]
Subject: [PATCH 4/4] ARM: convert PCI defines to variables

From: Rob Herring <[email protected]>

Convert PCIBIOS_MIN_IO, PCIBIOS_MIN_MEM, and PCIMEM_BASE to variables to allow
multi-platform builds. This also removes the requirement for a platform to
have a mach/hardware.h.

Signed-off-by: Rob Herring <[email protected]>
---
arch/arm/include/asm/pci.h | 8 +++++-
arch/arm/include/asm/vga.h | 2 +-
arch/arm/mach-cns3xxx/include/mach/hardware.h | 21 -----------------
arch/arm/mach-dove/include/mach/hardware.h | 5 ----
arch/arm/mach-dove/pcie.c | 4 +++
arch/arm/mach-footbridge/common.c | 4 +-
arch/arm/mach-footbridge/dc21285.c | 4 +++
arch/arm/mach-footbridge/include/mach/hardware.h | 5 +---
arch/arm/mach-integrator/include/mach/hardware.h | 5 ----
arch/arm/mach-integrator/pci_v3.c | 4 +++
arch/arm/mach-iop13xx/include/mach/hardware.h | 5 ----
arch/arm/mach-iop13xx/pci.c | 4 +--
arch/arm/mach-iop32x/include/mach/hardware.h | 2 -
arch/arm/mach-iop33x/include/mach/hardware.h | 2 -
arch/arm/mach-ixp2000/include/mach/hardware.h | 6 -----
arch/arm/mach-ixp23xx/include/mach/hardware.h | 2 -
arch/arm/mach-ixp23xx/pci.c | 2 +
arch/arm/mach-ixp4xx/common-pci.c | 6 +++++
arch/arm/mach-ixp4xx/include/mach/hardware.h | 3 --
arch/arm/mach-kirkwood/include/mach/hardware.h | 4 ---
arch/arm/mach-kirkwood/pcie.c | 4 +++
arch/arm/mach-ks8695/include/mach/hardware.h | 7 -----
arch/arm/mach-mv78xx0/include/mach/hardware.h | 5 ----
arch/arm/mach-mv78xx0/pcie.c | 4 +++
arch/arm/mach-orion5x/include/mach/hardware.h | 5 ----
arch/arm/mach-orion5x/pci.c | 4 +++
arch/arm/mach-pxa/include/mach/hardware.h | 2 -
arch/arm/mach-sa1100/include/mach/hardware.h | 7 -----
arch/arm/mach-shark/include/mach/hardware.h | 4 ---
arch/arm/mach-shark/pci.c | 11 +++++++-
arch/arm/mach-tegra/include/mach/hardware.h | 27 ----------------------
arch/arm/mach-tegra/pcie.c | 2 +
arch/arm/mach-versatile/include/mach/hardware.h | 4 ---
arch/arm/mach-versatile/pci.c | 3 ++
arch/arm/mm/iomap.c | 10 +++++++-
35 files changed, 67 insertions(+), 130 deletions(-)
delete mode 100644 arch/arm/mach-cns3xxx/include/mach/hardware.h
delete mode 100644 arch/arm/mach-tegra/include/mach/hardware.h

diff --git a/arch/arm/include/asm/pci.h b/arch/arm/include/asm/pci.h
index 6719178..1e05b45 100644
--- a/arch/arm/include/asm/pci.h
+++ b/arch/arm/include/asm/pci.h
@@ -6,7 +6,13 @@
#include <asm-generic/pci-bridge.h>

#include <asm/mach/pci.h> /* for pci_sys_data */
-#include <mach/hardware.h> /* for PCIBIOS_MIN_* */
+
+extern unsigned long pcibios_min_io;
+#define PCIBIOS_MIN_IO pcibios_min_io
+extern unsigned long pcibios_min_mem;
+#define PCIBIOS_MIN_MEM pcibios_min_mem
+extern unsigned long pcimem_base;
+#define PCIMEM_BASE pcimem_base

static inline int pcibios_assign_all_busses(void)
{
diff --git a/arch/arm/include/asm/vga.h b/arch/arm/include/asm/vga.h
index 250a4dd..86290df 100644
--- a/arch/arm/include/asm/vga.h
+++ b/arch/arm/include/asm/vga.h
@@ -2,7 +2,7 @@
#define ASMARM_VGA_H

#include <linux/io.h>
-#include <mach/hardware.h>
+#include <asm/pci.h>

#define VGA_MAP_MEM(x,s) (PCIMEM_BASE + (x))

diff --git a/arch/arm/mach-cns3xxx/include/mach/hardware.h b/arch/arm/mach-cns3xxx/include/mach/hardware.h
deleted file mode 100644
index 82a0d4e..0000000
--- a/arch/arm/mach-cns3xxx/include/mach/hardware.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * This file contains the hardware definitions of the Cavium Networks boards.
- *
- * Copyright 2003 ARM Limited.
- * Copyright 2008 Cavium Networks
- *
- * This file is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, Version 2, as
- * published by the Free Software Foundation.
- */
-
-#ifndef __MACH_HARDWARE_H
-#define __MACH_HARDWARE_H
-
-#include <asm/sizes.h>
-
-/* macro to get at IO space when running virtually */
-#define PCIBIOS_MIN_IO 0x00000000
-#define PCIBIOS_MIN_MEM 0x00000000
-
-#endif
diff --git a/arch/arm/mach-dove/include/mach/hardware.h b/arch/arm/mach-dove/include/mach/hardware.h
index f619fb9..f1368b9 100644
--- a/arch/arm/mach-dove/include/mach/hardware.h
+++ b/arch/arm/mach-dove/include/mach/hardware.h
@@ -11,11 +11,6 @@

#include "dove.h"

-#define PCIBIOS_MIN_IO 0x1000
-#define PCIBIOS_MIN_MEM 0x01000000
-#define PCIMEM_BASE DOVE_PCIE0_MEM_PHYS_BASE
-
-
/* Macros below are required for compatibility with PXA AC'97 driver. */
#define __REG(x) (*((volatile u32 *)((x) - DOVE_SB_REGS_PHYS_BASE + \
DOVE_SB_REGS_VIRT_BASE)))
diff --git a/arch/arm/mach-dove/pcie.c b/arch/arm/mach-dove/pcie.c
index 502d1ca..9f2b08d 100644
--- a/arch/arm/mach-dove/pcie.c
+++ b/arch/arm/mach-dove/pcie.c
@@ -228,6 +228,10 @@ static void __init add_pcie_port(int index, unsigned long base)

void __init dove_pcie_init(int init_port0, int init_port1)
{
+ pcibios_min_io = 0x1000;
+ pcibios_min_mem = 0x01000000;
+ pcimem_base = DOVE_PCIE0_MEM_PHYS_BASE;
+
if (init_port0)
add_pcie_port(0, DOVE_PCIE0_VIRT_BASE);

diff --git a/arch/arm/mach-footbridge/common.c b/arch/arm/mach-footbridge/common.c
index 38a44f9..64255d8 100644
--- a/arch/arm/mach-footbridge/common.c
+++ b/arch/arm/mach-footbridge/common.c
@@ -15,7 +15,7 @@
#include <linux/init.h>
#include <linux/io.h>
#include <linux/spinlock.h>
-
+
#include <asm/pgtable.h>
#include <asm/page.h>
#include <asm/irq.h>
@@ -155,7 +155,7 @@ static struct map_desc fb_common_io_desc[] __initdata = {
static struct map_desc ebsa285_host_io_desc[] __initdata = {
#if defined(CONFIG_ARCH_FOOTBRIDGE) && defined(CONFIG_FOOTBRIDGE_HOST)
{
- .virtual = PCIMEM_BASE,
+ .virtual = FOOTBRIDGE_PCIMEM_BASE,
.pfn = __phys_to_pfn(DC21285_PCI_MEM),
.length = PCIMEM_SIZE,
.type = MT_DEVICE,
diff --git a/arch/arm/mach-footbridge/dc21285.c b/arch/arm/mach-footbridge/dc21285.c
index 3ffa548..9ad7282 100644
--- a/arch/arm/mach-footbridge/dc21285.c
+++ b/arch/arm/mach-footbridge/dc21285.c
@@ -295,6 +295,10 @@ void __init dc21285_preinit(void)
unsigned int mem_size, mem_mask;
int cfn_mode;

+ pcibios_min_io = 0x1000;
+ pcibios_min_mem = 0x81000000;
+ pcimem_base = FOOTBRIDGE_PCIMEM_BASE;
+
mem_size = (unsigned int)high_memory - PAGE_OFFSET;
for (mem_mask = 0x00100000; mem_mask < 0x10000000; mem_mask <<= 1)
if (mem_mask >= mem_size)
diff --git a/arch/arm/mach-footbridge/include/mach/hardware.h b/arch/arm/mach-footbridge/include/mach/hardware.h
index 082e6ce..1cf5913 100644
--- a/arch/arm/mach-footbridge/include/mach/hardware.h
+++ b/arch/arm/mach-footbridge/include/mach/hardware.h
@@ -49,7 +49,7 @@
#define PCICFG0_BASE MMU_IO(0xfa000000, 0x7b000000)

#define PCIMEM_SIZE 0x01000000
-#define PCIMEM_BASE MMU_IO(0xf0000000, 0x80000000)
+#define FOOTBRIDGE_PCIMEM_BASE MMU_IO(0xf0000000, 0x80000000)

#define XBUS_LEDS ((volatile unsigned char *)(XBUS_BASE + 0x12000))
#define XBUS_LED_AMBER (1 << 0)
@@ -100,7 +100,4 @@ extern unsigned int nw_gpio_read(void);
extern void nw_cpld_modify(unsigned int mask, unsigned int set);
#endif

-#define PCIBIOS_MIN_IO 0x1000
-#define PCIBIOS_MIN_MEM 0x81000000
-
#endif
diff --git a/arch/arm/mach-integrator/include/mach/hardware.h b/arch/arm/mach-integrator/include/mach/hardware.h
index 37323ea..65fed7c 100644
--- a/arch/arm/mach-integrator/include/mach/hardware.h
+++ b/arch/arm/mach-integrator/include/mach/hardware.h
@@ -32,11 +32,6 @@
#define IO_SIZE 0x0B000000 // How much?
#define IO_START INTEGRATOR_HDR_BASE // PA of IO

-#define PCIMEM_BASE PCI_MEMORY_VADDR
-
-#define PCIBIOS_MIN_IO 0x6000
-#define PCIBIOS_MIN_MEM 0x00100000
-
/* macro to get at IO space when running virtually */
#ifdef CONFIG_MMU
#define IO_ADDRESS(x) (((x) & 0x000fffff) | (((x) >> 4) & 0x0ff00000) | IO_BASE)
diff --git a/arch/arm/mach-integrator/pci_v3.c b/arch/arm/mach-integrator/pci_v3.c
index 6467d99..84e2998 100644
--- a/arch/arm/mach-integrator/pci_v3.c
+++ b/arch/arm/mach-integrator/pci_v3.c
@@ -502,6 +502,10 @@ void __init pci_v3_preinit(void)
unsigned int temp;
int ret;

+ pcibios_min_io = 0x6000;
+ pcibios_min_mem = 0x00100000;
+ pcimem_base = PCI_MEMORY_VADDR;
+
/*
* Hook in our fault handler for PCI errors
*/
diff --git a/arch/arm/mach-iop13xx/include/mach/hardware.h b/arch/arm/mach-iop13xx/include/mach/hardware.h
index ba81e50..786fa26 100644
--- a/arch/arm/mach-iop13xx/include/mach/hardware.h
+++ b/arch/arm/mach-iop13xx/include/mach/hardware.h
@@ -3,15 +3,10 @@
#include <asm/types.h>

#ifndef __ASSEMBLY__
-extern unsigned long iop13xx_pcibios_min_io;
-extern unsigned long iop13xx_pcibios_min_mem;
extern u16 iop13xx_dev_id(void);
extern void iop13xx_set_atu_mmr_bases(void);
#endif

-#define PCIBIOS_MIN_IO (iop13xx_pcibios_min_io)
-#define PCIBIOS_MIN_MEM (iop13xx_pcibios_min_mem)
-
/*
* Generic chipset bits
*
diff --git a/arch/arm/mach-iop13xx/pci.c b/arch/arm/mach-iop13xx/pci.c
index ba3dae3..6027210 100644
--- a/arch/arm/mach-iop13xx/pci.c
+++ b/arch/arm/mach-iop13xx/pci.c
@@ -39,8 +39,6 @@ u32 iop13xx_atue_mem_base;
u32 iop13xx_atux_mem_base;
size_t iop13xx_atue_mem_size;
size_t iop13xx_atux_mem_size;
-unsigned long iop13xx_pcibios_min_io = 0;
-unsigned long iop13xx_pcibios_min_mem = 0;

EXPORT_SYMBOL(iop13xx_atue_mem_base);
EXPORT_SYMBOL(iop13xx_atux_mem_base);
@@ -971,7 +969,7 @@ void __init iop13xx_pci_init(void)
__raw_writel(__raw_readl(IOP13XX_XBG_BECSR) & 3, IOP13XX_XBG_BECSR);

/* Setup the Min Address for PCI memory... */
- iop13xx_pcibios_min_mem = IOP13XX_PCIX_LOWER_MEM_BA;
+ pcibios_min_mem = IOP13XX_PCIX_LOWER_MEM_BA;

/* if Linux is given control of an ATU
* clear out its prior configuration,
diff --git a/arch/arm/mach-iop32x/include/mach/hardware.h b/arch/arm/mach-iop32x/include/mach/hardware.h
index e68bf97..48cb1b2 100644
--- a/arch/arm/mach-iop32x/include/mach/hardware.h
+++ b/arch/arm/mach-iop32x/include/mach/hardware.h
@@ -18,8 +18,6 @@
* but when we read them, we convert them to virtual addresses. See
* arch/arm/plat-iop/pci.c.
*/
-#define PCIBIOS_MIN_IO 0x00000000
-#define PCIBIOS_MIN_MEM 0x00000000

#ifndef __ASSEMBLY__
void iop32x_init_irq(void);
diff --git a/arch/arm/mach-iop33x/include/mach/hardware.h b/arch/arm/mach-iop33x/include/mach/hardware.h
index 215065b..8392853 100644
--- a/arch/arm/mach-iop33x/include/mach/hardware.h
+++ b/arch/arm/mach-iop33x/include/mach/hardware.h
@@ -18,8 +18,6 @@
* but when we read them, we convert them to virtual addresses. See
* arch/arm/mach-iop3xx/iop3xx-pci.c
*/
-#define PCIBIOS_MIN_IO 0x00000000
-#define PCIBIOS_MIN_MEM 0x00000000

#ifndef __ASSEMBLY__
void iop33x_init_irq(void);
diff --git a/arch/arm/mach-ixp2000/include/mach/hardware.h b/arch/arm/mach-ixp2000/include/mach/hardware.h
index 6c92008..cdaf1db 100644
--- a/arch/arm/mach-ixp2000/include/mach/hardware.h
+++ b/arch/arm/mach-ixp2000/include/mach/hardware.h
@@ -19,12 +19,6 @@
#ifndef __ASM_ARCH_HARDWARE_H__
#define __ASM_ARCH_HARDWARE_H__

-/*
- * This needs to be platform-specific?
- */
-#define PCIBIOS_MIN_IO 0x00000000
-#define PCIBIOS_MIN_MEM 0x00000000
-
#include "ixp2000-regs.h" /* Chipset Registers */

/*
diff --git a/arch/arm/mach-ixp23xx/include/mach/hardware.h b/arch/arm/mach-ixp23xx/include/mach/hardware.h
index b8bb781..60e55fa 100644
--- a/arch/arm/mach-ixp23xx/include/mach/hardware.h
+++ b/arch/arm/mach-ixp23xx/include/mach/hardware.h
@@ -15,8 +15,6 @@
#define __ASM_ARCH_HARDWARE_H

/* PCI IO info */
-#define PCIBIOS_MIN_IO 0x00000000
-#define PCIBIOS_MIN_MEM 0xe0000000

#include "ixp23xx.h"

diff --git a/arch/arm/mach-ixp23xx/pci.c b/arch/arm/mach-ixp23xx/pci.c
index 72d145a..4913991 100644
--- a/arch/arm/mach-ixp23xx/pci.c
+++ b/arch/arm/mach-ixp23xx/pci.c
@@ -227,6 +227,8 @@ static void __init ixp23xx_pci_common_init(void)

void __init ixp23xx_pci_preinit(void)
{
+ pcibios_min_mem = 0xe0000000;
+
pci_set_flags(0);

ixp23xx_pci_common_init();
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c
index e9a5893..33e3bd8 100644
--- a/arch/arm/mach-ixp4xx/common-pci.c
+++ b/arch/arm/mach-ixp4xx/common-pci.c
@@ -346,6 +346,12 @@ void __init ixp4xx_pci_preinit(void)
{
unsigned long cpuid = read_cpuid_id();

+ pcibios_min_io = 0x00001000;
+#ifdef CONFIG_IXP4XX_INDIRECT_PCI
+ pcibios_min_mem = 0x10000000; /* 1 GB of indirect PCI MMIO space */
+#else
+ pcibios_min_mem = 0x48000000; /* 64 MB of PCI MMIO space */
+#endif
/*
* Determine which PCI read method to use.
* Rev 0 IXP425 requires workaround.
diff --git a/arch/arm/mach-ixp4xx/include/mach/hardware.h b/arch/arm/mach-ixp4xx/include/mach/hardware.h
index 163e506..c30e7e9 100644
--- a/arch/arm/mach-ixp4xx/include/mach/hardware.h
+++ b/arch/arm/mach-ixp4xx/include/mach/hardware.h
@@ -17,12 +17,9 @@
#ifndef __ASM_ARCH_HARDWARE_H__
#define __ASM_ARCH_HARDWARE_H__

-#define PCIBIOS_MIN_IO 0x00001000
#ifdef CONFIG_IXP4XX_INDIRECT_PCI
-#define PCIBIOS_MIN_MEM 0x10000000 /* 1 GB of indirect PCI MMIO space */
#define PCIBIOS_MAX_MEM 0x4FFFFFFF
#else
-#define PCIBIOS_MIN_MEM 0x48000000 /* 64 MB of PCI MMIO space */
#define PCIBIOS_MAX_MEM 0x4BFFFFFF
#endif

diff --git a/arch/arm/mach-kirkwood/include/mach/hardware.h b/arch/arm/mach-kirkwood/include/mach/hardware.h
index 31b81fe..742b74f 100644
--- a/arch/arm/mach-kirkwood/include/mach/hardware.h
+++ b/arch/arm/mach-kirkwood/include/mach/hardware.h
@@ -11,8 +11,4 @@

#include "kirkwood.h"

-#define PCIBIOS_MIN_MEM 0x01000000
-#define PCIMEM_BASE KIRKWOOD_PCIE_MEM_PHYS_BASE /* mem base for VGA */
-
-
#endif
diff --git a/arch/arm/mach-kirkwood/pcie.c b/arch/arm/mach-kirkwood/pcie.c
index ca294ff..a9c4c56 100644
--- a/arch/arm/mach-kirkwood/pcie.c
+++ b/arch/arm/mach-kirkwood/pcie.c
@@ -271,6 +271,10 @@ static void __init add_pcie_port(int index, unsigned long base)

void __init kirkwood_pcie_init(unsigned int portmask)
{
+ pcibios_min_io = 0x00001000;
+ pcibios_min_mem = 0x01000000;
+ pcimem_base = KIRKWOOD_PCIE_MEM_PHYS_BASE;
+
if (portmask & KW_PCIE0)
add_pcie_port(0, PCIE_VIRT_BASE);

diff --git a/arch/arm/mach-ks8695/include/mach/hardware.h b/arch/arm/mach-ks8695/include/mach/hardware.h
index a46be88..5e0c388 100644
--- a/arch/arm/mach-ks8695/include/mach/hardware.h
+++ b/arch/arm/mach-ks8695/include/mach/hardware.h
@@ -42,11 +42,4 @@
#define KS8695_PCIIO_PA 0x80000000
#define KS8695_PCIIO_SIZE SZ_64K

-
-/*
- * PCI support
- */
-#define PCIBIOS_MIN_IO 0
-#define PCIBIOS_MIN_MEM 0
-
#endif
diff --git a/arch/arm/mach-mv78xx0/include/mach/hardware.h b/arch/arm/mach-mv78xx0/include/mach/hardware.h
index c76b93f..67cab0a 100644
--- a/arch/arm/mach-mv78xx0/include/mach/hardware.h
+++ b/arch/arm/mach-mv78xx0/include/mach/hardware.h
@@ -11,9 +11,4 @@

#include "mv78xx0.h"

-#define PCIBIOS_MIN_IO 0x00001000
-#define PCIBIOS_MIN_MEM 0x01000000
-#define PCIMEM_BASE MV78XX0_PCIE_MEM_PHYS_BASE /* mem base for VGA */
-
-
#endif
diff --git a/arch/arm/mach-mv78xx0/pcie.c b/arch/arm/mach-mv78xx0/pcie.c
index a560439..03b6bd0 100644
--- a/arch/arm/mach-mv78xx0/pcie.c
+++ b/arch/arm/mach-mv78xx0/pcie.c
@@ -297,6 +297,10 @@ static void __init add_pcie_port(int maj, int min, unsigned long base)

void __init mv78xx0_pcie_init(int init_port0, int init_port1)
{
+ pcibios_min_io = 0x00001000;
+ pcibios_min_mem = 0x01000000;
+ pcimem_base = MV78XX0_PCIE_MEM_PHYS_BASE;
+
if (init_port0) {
add_pcie_port(0, 0, PCIE00_VIRT_BASE);
if (!orion_pcie_x4_mode((void __iomem *)PCIE00_VIRT_BASE)) {
diff --git a/arch/arm/mach-orion5x/include/mach/hardware.h b/arch/arm/mach-orion5x/include/mach/hardware.h
index a42b743..3957354 100644
--- a/arch/arm/mach-orion5x/include/mach/hardware.h
+++ b/arch/arm/mach-orion5x/include/mach/hardware.h
@@ -11,9 +11,4 @@

#include "orion5x.h"

-#define PCIBIOS_MIN_IO 0x00001000
-#define PCIBIOS_MIN_MEM 0x01000000
-#define PCIMEM_BASE ORION5X_PCIE_MEM_PHYS_BASE
-
-
#endif
diff --git a/arch/arm/mach-orion5x/pci.c b/arch/arm/mach-orion5x/pci.c
index e8706f1..4c77543 100644
--- a/arch/arm/mach-orion5x/pci.c
+++ b/arch/arm/mach-orion5x/pci.c
@@ -560,6 +560,10 @@ int __init orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys)
{
int ret = 0;

+ pcibios_min_io = 0x00001000;
+ pcibios_min_mem = 0x01000000;
+ pcimem_base = ORION5X_PCIE_MEM_PHYS_BASE;
+
if (nr == 0) {
orion_pcie_set_local_bus_nr(PCIE_BASE, sys->busnr);
ret = pcie_setup(sys);
diff --git a/arch/arm/mach-pxa/include/mach/hardware.h b/arch/arm/mach-pxa/include/mach/hardware.h
index b4ea392..de63ca3 100644
--- a/arch/arm/mach-pxa/include/mach/hardware.h
+++ b/arch/arm/mach-pxa/include/mach/hardware.h
@@ -337,8 +337,6 @@ extern unsigned long get_clock_tick_rate(void);
#endif

#if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI)
-#define PCIBIOS_MIN_IO 0
-#define PCIBIOS_MIN_MEM 0
#define ARCH_HAS_DMA_SET_COHERENT_MASK
#endif

diff --git a/arch/arm/mach-sa1100/include/mach/hardware.h b/arch/arm/mach-sa1100/include/mach/hardware.h
index 5946af2..99f5856 100644
--- a/arch/arm/mach-sa1100/include/mach/hardware.h
+++ b/arch/arm/mach-sa1100/include/mach/hardware.h
@@ -76,11 +76,4 @@ static inline unsigned long get_clock_tick_rate(void)
#include "SA-1101.h"
#endif

-#if defined(CONFIG_ARCH_SA1100) && defined(CONFIG_PCI)
-#define PCIBIOS_MIN_IO 0
-#define PCIBIOS_MIN_MEM 0
-#define HAVE_ARCH_PCI_SET_DMA_MASK 1
-#endif
-
-
#endif /* _ASM_ARCH_HARDWARE_H */
diff --git a/arch/arm/mach-shark/include/mach/hardware.h b/arch/arm/mach-shark/include/mach/hardware.h
index 24639ce..663f952 100644
--- a/arch/arm/mach-shark/include/mach/hardware.h
+++ b/arch/arm/mach-shark/include/mach/hardware.h
@@ -12,9 +12,5 @@

#define UNCACHEABLE_ADDR 0xdf010000

-#define PCIBIOS_MIN_IO 0x6000
-#define PCIBIOS_MIN_MEM 0x50000000
-#define PCIMEM_BASE 0xe8000000
-
#endif

diff --git a/arch/arm/mach-shark/pci.c b/arch/arm/mach-shark/pci.c
index 89d175c..804e578 100644
--- a/arch/arm/mach-shark/pci.c
+++ b/arch/arm/mach-shark/pci.c
@@ -37,8 +37,15 @@ static struct hw_pci shark_pci __initdata = {

static int __init shark_pci_init(void)
{
- if (machine_is_shark())
- pci_common_init(&shark_pci);
+ if (!machine_is_shark())
+ return;
+
+ pcibios_min_io = 0x6000;
+ pcibios_min_mem = 0x50000000;
+ pcimem_base = 0xe8000000;
+
+ pci_common_init(&shark_pci);
+
return 0;
}

diff --git a/arch/arm/mach-tegra/include/mach/hardware.h b/arch/arm/mach-tegra/include/mach/hardware.h
deleted file mode 100644
index 84c2658..0000000
--- a/arch/arm/mach-tegra/include/mach/hardware.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * arch/arm/mach-tegra/include/mach/hardware.h
- *
- * Copyright (C) 2010 Google, Inc.
- *
- * Author:
- * Colin Cross <[email protected]>
- * Erik Gilling <[email protected]>
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- */
-
-#ifndef __MACH_TEGRA_HARDWARE_H
-#define __MACH_TEGRA_HARDWARE_H
-
-#define PCIBIOS_MIN_IO 0x1000
-#define PCIBIOS_MIN_MEM 0
-
-#endif
diff --git a/arch/arm/mach-tegra/pcie.c b/arch/arm/mach-tegra/pcie.c
index 2941212..c4eba2c 100644
--- a/arch/arm/mach-tegra/pcie.c
+++ b/arch/arm/mach-tegra/pcie.c
@@ -912,6 +912,8 @@ int __init tegra_pcie_init(bool init_port0, bool init_port1)
if (!(init_port0 || init_port1))
return -ENODEV;

+ pcibios_min_io = 0x1000;
+
err = tegra_pcie_get_resources();
if (err)
return err;
diff --git a/arch/arm/mach-versatile/include/mach/hardware.h b/arch/arm/mach-versatile/include/mach/hardware.h
index 8f60e94..4d4973d 100644
--- a/arch/arm/mach-versatile/include/mach/hardware.h
+++ b/arch/arm/mach-versatile/include/mach/hardware.h
@@ -30,10 +30,6 @@
#define VERSATILE_PCI_VIRT_BASE (void __iomem *)0xe8000000ul
#define VERSATILE_PCI_CFG_VIRT_BASE (void __iomem *)0xe9000000ul

-/* CIK guesswork */
-#define PCIBIOS_MIN_IO 0x44000000
-#define PCIBIOS_MIN_MEM 0x50000000
-
/* macro to get at IO space when running virtually */
#define IO_ADDRESS(x) (((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + 0xf0000000)

diff --git a/arch/arm/mach-versatile/pci.c b/arch/arm/mach-versatile/pci.c
index 13c7e5f..7848a17 100644
--- a/arch/arm/mach-versatile/pci.c
+++ b/arch/arm/mach-versatile/pci.c
@@ -311,6 +311,9 @@ struct pci_bus * __init pci_versatile_scan_bus(int nr, struct pci_sys_data *sys)

void __init pci_versatile_preinit(void)
{
+ pcibios_min_io = 0x44000000;
+ pcibios_min_mem = 0x50000000;
+
__raw_writel(VERSATILE_PCI_MEM_BASE0 >> 28, PCI_IMAP0);
__raw_writel(VERSATILE_PCI_MEM_BASE1 >> 28, PCI_IMAP1);
__raw_writel(VERSATILE_PCI_MEM_BASE2 >> 28, PCI_IMAP2);
diff --git a/arch/arm/mm/iomap.c b/arch/arm/mm/iomap.c
index ad41414..0f92cbc 100644
--- a/arch/arm/mm/iomap.c
+++ b/arch/arm/mm/iomap.c
@@ -8,7 +8,6 @@
#include <linux/pci.h>
#include <linux/ioport.h>
#include <linux/io.h>
-#include <asm/pci.h>

#ifdef __io
void __iomem *ioport_map(unsigned long port, unsigned int nr)
@@ -24,6 +23,15 @@ EXPORT_SYMBOL(ioport_unmap);
#endif

#ifdef CONFIG_PCI
+unsigned long pcibios_min_io;
+EXPORT_SYMBOL(pcibios_min_io);
+
+unsigned long pcibios_min_mem;
+EXPORT_SYMBOL(pcibios_min_mem);
+
+unsigned long pcimem_base;
+EXPORT_SYMBOL(pcimem_base);
+
unsigned int pci_flags = PCI_REASSIGN_ALL_RSRC;
EXPORT_SYMBOL(pci_flags);

--
1.7.4.1

2011-06-28 23:24:29

by Nicolas Pitre

[permalink] [raw]
Subject: Re: [RFC PATCH 0/4] ARM: make mach/hardware.h optional

On Tue, 28 Jun 2011, Rob Herring wrote:

> From: Rob Herring <[email protected]>
>
> Currently, all ARM platforms must have a mach/hardware.h include. This is
> because it is ultimately included by linux/pci.h which is included in many
> places even for !CONFIG_PCI.
>
> This could be fixed simply with an ifdef around the include of mach/hardware.h
> in asm/pci.h. However, in the interest of fixing this for single kernel
> binary builds, this series removes the include of mach/hardware.h outside of
> mach-* and plat-*. What's used from hardware.h is a couple of PCI defines.
> Converting them to variables allows each platform to set the values as needed.

Excellent ! This is certainly moving things in the right direction.

For the 4 patches, you can add:

Acked-by: Nicolas Pitre <[email protected]>

Obviously for patch 1/4 it would be nice to have the opinion of the PCI
maintainer as well.


Nicolas

2011-06-28 23:24:48

by Russell King - ARM Linux

[permalink] [raw]
Subject: Re: [PATCH 2/4] ARM: remove unnecessary mach/hardware.h includes

On Tue, Jun 28, 2011 at 05:57:37PM -0500, Rob Herring wrote:
> From: Rob Herring <[email protected]>
>
> Remove some includes of mach/hardware.h which are not needed. hardware.h will
> be removed completely for tegra and cns3xxx in follow on patch.

At least this one is incorrect:

arch/arm/mach-rpc/include/mach/hardware.h:#define IO_EC_MEMC_BASE 0x80000000
arch/arm/kernel/ecard.c: address = IO_EC_MEMC_BASE + (slot << 12);

That's just one of the defines that ecard.c uses from mach/hardare.h.

2011-06-28 23:41:51

by Russell King - ARM Linux

[permalink] [raw]
Subject: Re: [PATCH 4/4] ARM: convert PCI defines to variables

On Tue, Jun 28, 2011 at 05:57:39PM -0500, Rob Herring wrote:
> From: Rob Herring <[email protected]>
>
> Convert PCIBIOS_MIN_IO, PCIBIOS_MIN_MEM, and PCIMEM_BASE to variables to allow
> multi-platform builds. This also removes the requirement for a platform to
> have a mach/hardware.h.

Please don't include PCIMEM_BASE in that - move that into asm/vga.h and
call it VGA_BASE because that's really what it is. There's also the
matter of a definition of a HAS_ symbol...

> diff --git a/arch/arm/include/asm/vga.h b/arch/arm/include/asm/vga.h
> index 250a4dd..86290df 100644
> --- a/arch/arm/include/asm/vga.h
> +++ b/arch/arm/include/asm/vga.h
> @@ -2,7 +2,7 @@
> #define ASMARM_VGA_H
>
> #include <linux/io.h>
> -#include <mach/hardware.h>
> +#include <asm/pci.h>
>
> #define VGA_MAP_MEM(x,s) (PCIMEM_BASE + (x))
>

VGA is not dependent on having PCI - there have been ARM platforms which
have VGA without PCI.

> diff --git a/arch/arm/mach-pxa/include/mach/hardware.h b/arch/arm/mach-pxa/include/mach/hardware.h
> index b4ea392..de63ca3 100644
> --- a/arch/arm/mach-pxa/include/mach/hardware.h
> +++ b/arch/arm/mach-pxa/include/mach/hardware.h
> @@ -337,8 +337,6 @@ extern unsigned long get_clock_tick_rate(void);
> #endif
>
> #if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI)
> -#define PCIBIOS_MIN_IO 0
> -#define PCIBIOS_MIN_MEM 0
> #define ARCH_HAS_DMA_SET_COHERENT_MASK
> #endif
>

This definitely breaks because ARCH_HAS_DMA_SET_COHERENT_MASK needs to
be picked up by linux/dma-mapping.h. However, this may already be
broken as there's no clear path where this reliably happens.

2011-06-29 02:32:21

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH 4/4] ARM: convert PCI defines to variables

On 06/28/2011 06:41 PM, Russell King - ARM Linux wrote:
> On Tue, Jun 28, 2011 at 05:57:39PM -0500, Rob Herring wrote:
>> From: Rob Herring <[email protected]>
>>
>> Convert PCIBIOS_MIN_IO, PCIBIOS_MIN_MEM, and PCIMEM_BASE to variables to allow
>> multi-platform builds. This also removes the requirement for a platform to
>> have a mach/hardware.h.
>
> Please don't include PCIMEM_BASE in that - move that into asm/vga.h and
> call it VGA_BASE because that's really what it is. There's also the
> matter of a definition of a HAS_ symbol...
>
Okay. I'm still setting vga_base (no point in this case for a define) in
the platforms' pci code as in all cases vga_base is set to PCI memory
space.

I don't follow your comment about HAS_ symbol.

>> diff --git a/arch/arm/include/asm/vga.h b/arch/arm/include/asm/vga.h
>> index 250a4dd..86290df 100644
>> --- a/arch/arm/include/asm/vga.h
>> +++ b/arch/arm/include/asm/vga.h
>> @@ -2,7 +2,7 @@
>> #define ASMARM_VGA_H
>>
>> #include <linux/io.h>
>> -#include <mach/hardware.h>
>> +#include <asm/pci.h>
>>
>> #define VGA_MAP_MEM(x,s) (PCIMEM_BASE + (x))
>>
>
> VGA is not dependent on having PCI - there have been ARM platforms which
> have VGA without PCI.
>
>> diff --git a/arch/arm/mach-pxa/include/mach/hardware.h b/arch/arm/mach-pxa/include/mach/hardware.h
>> index b4ea392..de63ca3 100644
>> --- a/arch/arm/mach-pxa/include/mach/hardware.h
>> +++ b/arch/arm/mach-pxa/include/mach/hardware.h
>> @@ -337,8 +337,6 @@ extern unsigned long get_clock_tick_rate(void);
>> #endif
>>
>> #if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI)
>> -#define PCIBIOS_MIN_IO 0
>> -#define PCIBIOS_MIN_MEM 0
>> #define ARCH_HAS_DMA_SET_COHERENT_MASK
>> #endif
>>
>
> This definitely breaks because ARCH_HAS_DMA_SET_COHERENT_MASK needs to
> be picked up by linux/dma-mapping.h. However, this may already be
> broken as there's no clear path where this reliably happens.

Looks like moving it to mach/memory.h would be the right header. This is
also something to make run-time. Hopefully, the dma mapping work will
address that.

Rob

2011-06-29 02:41:37

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH 2/4] ARM: remove unnecessary mach/hardware.h includes

On 06/28/2011 06:24 PM, Russell King - ARM Linux wrote:
> On Tue, Jun 28, 2011 at 05:57:37PM -0500, Rob Herring wrote:
>> From: Rob Herring <[email protected]>
>>
>> Remove some includes of mach/hardware.h which are not needed. hardware.h will
>> be removed completely for tegra and cns3xxx in follow on patch.
>
> At least this one is incorrect:
>
> arch/arm/mach-rpc/include/mach/hardware.h:#define IO_EC_MEMC_BASE 0x80000000
> arch/arm/kernel/ecard.c: address = IO_EC_MEMC_BASE + (slot << 12);
>
> That's just one of the defines that ecard.c uses from mach/hardare.h.
>
It happens to still compile, so it's getting included thru another
include. I see these options:

-Revert this change. RPC is not going to be built in a multi-platform
kernel anyway. Leaving it could affect how include paths get setup for
multi-platform builds.
-Move ecard.c into mach-rpc. It doesn't appear to be used by anything else.

I'll do the 1st option for now.

Rob