* [PATCH-RFC 01/10] lib: move GENERIC_IOMAP to lib/Kconfig
[not found] <cover.1322163031.git.mst@redhat.com>
@ 2011-11-24 20:15 ` Michael S. Tsirkin
2011-11-25 8:41 ` Jesper Nilsson
2011-11-28 20:12 ` Richard Kuo
2011-11-24 20:17 ` [PATCH-RFC 02/10] lib: add GENERIC_PCI_IOMAP Michael S. Tsirkin
` (8 subsequent siblings)
9 siblings, 2 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-24 20:15 UTC (permalink / raw)
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Ralf Baechle,
Jonas Bonn, Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu
define GENERIC_IOMAP in a central location
instead of all architectures. This will be helpful
for the follow-up patch which makes it select
other configs. Code is also a bit shorter this way.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
arch/alpha/Kconfig | 4 ----
arch/cris/Kconfig | 5 +----
arch/hexagon/Kconfig | 4 +---
arch/ia64/Kconfig | 5 +----
arch/m68k/Kconfig | 4 +---
arch/openrisc/Kconfig | 3 ---
arch/powerpc/platforms/Kconfig | 3 ---
arch/score/Kconfig | 4 +---
arch/sh/Kconfig | 3 ---
arch/unicore32/Kconfig | 4 +---
arch/x86/Kconfig | 4 +---
lib/Kconfig | 3 +++
12 files changed, 10 insertions(+), 36 deletions(-)
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
index 3d74801..3636b11 100644
--- a/arch/alpha/Kconfig
+++ b/arch/alpha/Kconfig
@@ -70,10 +70,6 @@ config GENERIC_ISA_DMA
bool
default y
-config GENERIC_IOMAP
- bool
- default n
-
source "init/Kconfig"
source "kernel/Kconfig.freezer"
diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig
index 408b055..b3abfb0 100644
--- a/arch/cris/Kconfig
+++ b/arch/cris/Kconfig
@@ -19,10 +19,6 @@ config GENERIC_CMOS_UPDATE
config ARCH_USES_GETTIMEOFFSET
def_bool n
-config GENERIC_IOMAP
- bool
- default y
-
config ARCH_HAS_ILOG2_U32
bool
default n
@@ -52,6 +48,7 @@ config CRIS
select HAVE_IDE
select HAVE_GENERIC_HARDIRQS
select GENERIC_IRQ_SHOW
+ select GENERIC_IOMAP
config HZ
int
diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig
index 02513c2..9059e39 100644
--- a/arch/hexagon/Kconfig
+++ b/arch/hexagon/Kconfig
@@ -26,6 +26,7 @@ config HEXAGON
select HAVE_ARCH_KGDB
select HAVE_ARCH_TRACEHOOK
select NO_IOPORT
+ select GENERIC_IOMAP
# mostly generic routines, with some accelerated ones
---help---
Qualcomm Hexagon is a processor architecture designed for high
@@ -73,9 +74,6 @@ config GENERIC_CSUM
config GENERIC_IRQ_PROBE
def_bool y
-config GENERIC_IOMAP
- def_bool y
-
#config ZONE_DMA
# bool
# default y
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 27489b6..2732e1b 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -29,6 +29,7 @@ config IA64
select GENERIC_IRQ_SHOW
select ARCH_WANT_OPTIONAL_GPIOLIB
select ARCH_HAVE_NMI_SAFE_CMPXCHG
+ select GENERIC_IOMAP
default y
help
The Itanium Processor Family is Intel's 64-bit successor to
@@ -102,10 +103,6 @@ config EFI
bool
default y
-config GENERIC_IOMAP
- bool
- default y
-
config ARCH_CLOCKSOURCE_DATA
def_bool y
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index 361d540..973e686 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -38,9 +38,6 @@ config GENERIC_CALIBRATE_DELAY
bool
default y
-config GENERIC_IOMAP
- def_bool MMU
-
config TIME_LOW_RES
bool
default y
@@ -73,6 +70,7 @@ source "kernel/Kconfig.freezer"
config MMU
bool "MMU-based Paged Memory Management Support"
default y
+ select GENERIC_IOMAP
help
Select if you want MMU-based virtualised addressing space
support by paged memory management. If unsure, say 'Y'.
diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig
index e518a5a..081a54f 100644
--- a/arch/openrisc/Kconfig
+++ b/arch/openrisc/Kconfig
@@ -38,9 +38,6 @@ config RWSEM_XCHGADD_ALGORITHM
config GENERIC_HWEIGHT
def_bool y
-config GENERIC_IOMAP
- def_bool y
-
config NO_IOPORT
def_bool y
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index 3fe6d92..100feed 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -175,9 +175,6 @@ config PPC_INDIRECT_MMIO
config PPC_IO_WORKAROUNDS
bool
-config GENERIC_IOMAP
- bool
-
source "drivers/cpufreq/Kconfig"
menu "CPU Frequency drivers"
diff --git a/arch/score/Kconfig b/arch/score/Kconfig
index df169e8..455ce2d 100644
--- a/arch/score/Kconfig
+++ b/arch/score/Kconfig
@@ -4,6 +4,7 @@ config SCORE
def_bool y
select HAVE_GENERIC_HARDIRQS
select GENERIC_IRQ_SHOW
+ select GENERIC_IOMAP
choice
prompt "System type"
@@ -33,9 +34,6 @@ endmenu
config CPU_SCORE7
bool
-config GENERIC_IOMAP
- def_bool y
-
config NO_DMA
bool
default y
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 5629e20..5aeab58 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -84,9 +84,6 @@ config GENERIC_GPIO
config GENERIC_CALIBRATE_DELAY
bool
-config GENERIC_IOMAP
- bool
-
config GENERIC_CLOCKEVENTS
def_bool y
diff --git a/arch/unicore32/Kconfig b/arch/unicore32/Kconfig
index 942ed61..eeb8054 100644
--- a/arch/unicore32/Kconfig
+++ b/arch/unicore32/Kconfig
@@ -12,6 +12,7 @@ config UNICORE32
select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW
select ARCH_WANT_FRAME_POINTERS
+ select GENERIC_IOMAP
help
UniCore-32 is 32-bit Instruction Set Architecture,
including a series of low-power-consumption RISC chip
@@ -30,9 +31,6 @@ config GENERIC_CLOCKEVENTS
config GENERIC_CSUM
def_bool y
-config GENERIC_IOMAP
- def_bool y
-
config NO_IOPORT
bool
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index cb9a104..08af645 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -75,6 +75,7 @@ config X86
select HAVE_BPF_JIT if (X86_64 && NET)
select CLKEVT_I8253
select ARCH_HAVE_NMI_SAFE_CMPXCHG
+ select GENERIC_IOMAP
config INSTRUCTION_DECODER
def_bool (KPROBES || PERF_EVENTS)
@@ -140,9 +141,6 @@ config NEED_SG_DMA_LENGTH
config GENERIC_ISA_DMA
def_bool ISA_DMA_API
-config GENERIC_IOMAP
- def_bool y
-
config GENERIC_BUG
def_bool y
depends on BUG
diff --git a/lib/Kconfig b/lib/Kconfig
index 32f3e5a..0058927 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -19,6 +19,9 @@ config RATIONAL
config GENERIC_FIND_FIRST_BIT
bool
+config GENERIC_IOMAP
+ bool
+
config CRC_CCITT
tristate "CRC-CCITT functions"
help
--
1.7.5.53.gc233e
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH-RFC 02/10] lib: add GENERIC_PCI_IOMAP
[not found] <cover.1322163031.git.mst@redhat.com>
2011-11-24 20:15 ` [PATCH-RFC 01/10] lib: move GENERIC_IOMAP to lib/Kconfig Michael S. Tsirkin
@ 2011-11-24 20:17 ` Michael S. Tsirkin
2011-11-24 22:07 ` Arnd Bergmann
2011-11-25 0:54 ` Stephen Rothwell
2011-11-24 20:17 ` [PATCH-RFC 03/10] alpha: switch to GENERIC_PCI_IOMAP Michael S. Tsirkin
` (7 subsequent siblings)
9 siblings, 2 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-24 20:17 UTC (permalink / raw)
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Ralf Baechle,
Jonas Bonn, Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu
Many architectures want a generic pci_iomap but
not the rest of iomap.c. Split that to a separate .c
file and add a new config symbol. select automatically
by GENERIC_IOMAP.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
include/asm-generic/io.h | 5 +--
include/asm-generic/iomap.h | 7 +----
include/asm-generic/pci_iomap.h | 26 +++++++++++++++++++++
lib/Kconfig | 4 +++
lib/Makefile | 1 +
lib/iomap.c | 38 +-----------------------------
lib/pci_iomap.c | 48 +++++++++++++++++++++++++++++++++++++++
7 files changed, 85 insertions(+), 44 deletions(-)
create mode 100644 include/asm-generic/pci_iomap.h
create mode 100644 lib/pci_iomap.c
diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h
index 9120887..c8a67345 100644
--- a/include/asm-generic/io.h
+++ b/include/asm-generic/io.h
@@ -19,6 +19,8 @@
#include <asm-generic/iomap.h>
#endif
+#include <asm-generic/pci_iomap.h>
+
#ifndef mmiowb
#define mmiowb() do {} while (0)
#endif
@@ -283,9 +285,6 @@ static inline void writesb(const void __iomem *addr, const void *buf, int len)
#define __io_virt(x) ((void __force *) (x))
#ifndef CONFIG_GENERIC_IOMAP
-/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
-struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p)
{
}
diff --git a/include/asm-generic/iomap.h b/include/asm-generic/iomap.h
index 98dcd76..fdcddcb 100644
--- a/include/asm-generic/iomap.h
+++ b/include/asm-generic/iomap.h
@@ -69,16 +69,13 @@ extern void ioport_unmap(void __iomem *);
#ifdef CONFIG_PCI
/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
#else
struct pci_dev;
-static inline void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
-{
- return NULL;
-}
static inline void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
{ }
#endif
+#include <asm-generic/pci_iomap.h>
+
#endif
diff --git a/include/asm-generic/pci_iomap.h b/include/asm-generic/pci_iomap.h
new file mode 100644
index 0000000..e08b3bd
--- /dev/null
+++ b/include/asm-generic/pci_iomap.h
@@ -0,0 +1,26 @@
+/* Generic I/O port emulation, based on MN10300 code
+ *
+ * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public Licence
+ * as published by the Free Software Foundation; either version
+ * 2 of the Licence, or (at your option) any later version.
+ */
+#ifndef __ASM_GENERIC_PCI_IOMAP_H
+#define __ASM_GENERIC_PCI_IOMAP_H
+
+#ifdef CONFIG_PCI
+/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
+struct pci_dev;
+extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
+#else
+struct pci_dev;
+static inline void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
+{
+ return NULL;
+}
+#endif
+
+#endif /* __ASM_GENERIC_IO_H */
diff --git a/lib/Kconfig b/lib/Kconfig
index 0058927..36884b4 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -19,8 +19,12 @@ config RATIONAL
config GENERIC_FIND_FIRST_BIT
bool
+config GENERIC_PCI_IOMAP
+ bool
+
config GENERIC_IOMAP
bool
+ select GENERIC_PCI_IOMAP
config CRC_CCITT
tristate "CRC-CCITT functions"
diff --git a/lib/Makefile b/lib/Makefile
index a4da283..609b2adc 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -33,6 +33,7 @@ endif
lib-$(CONFIG_HOTPLUG) += kobject_uevent.o
obj-$(CONFIG_GENERIC_IOMAP) += iomap.o
+obj-$(CONFIG_GENERIC_PCI_IOMAP) += pci_iomap.o
obj-$(CONFIG_HAS_IOMEM) += iomap_copy.o devres.o
obj-$(CONFIG_CHECK_SIGNATURE) += check_signature.o
obj-$(CONFIG_DEBUG_LOCKING_API_SELFTESTS) += locking-selftest.o
diff --git a/lib/iomap.c b/lib/iomap.c
index 5dbcb4b..ada922a 100644
--- a/lib/iomap.c
+++ b/lib/iomap.c
@@ -242,45 +242,11 @@ EXPORT_SYMBOL(ioport_unmap);
#endif /* CONFIG_HAS_IOPORT */
#ifdef CONFIG_PCI
-/**
- * pci_iomap - create a virtual mapping cookie for a PCI BAR
- * @dev: PCI device that owns the BAR
- * @bar: BAR number
- * @maxlen: length of the memory to map
- *
- * Using this function you will get a __iomem address to your device BAR.
- * You can access it using ioread*() and iowrite*(). These functions hide
- * the details if this is a MMIO or PIO address space and will just do what
- * you expect from them in the correct way.
- *
- * @maxlen specifies the maximum length to map. If you want to get access to
- * the complete BAR without checking for its length first, pass %0 here.
- * */
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
-{
- resource_size_t start = pci_resource_start(dev, bar);
- resource_size_t len = pci_resource_len(dev, bar);
- unsigned long flags = pci_resource_flags(dev, bar);
-
- if (!len || !start)
- return NULL;
- if (maxlen && len > maxlen)
- len = maxlen;
- if (flags & IORESOURCE_IO)
- return ioport_map(start, len);
- if (flags & IORESOURCE_MEM) {
- if (flags & IORESOURCE_CACHEABLE)
- return ioremap(start, len);
- return ioremap_nocache(start, len);
- }
- /* What? */
- return NULL;
-}
-
+/* Hide the details if this is a MMIO or PIO address space and just do what
+ * you expect in the correct way. */
void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
{
IO_COND(addr, /* nothing */, iounmap(addr));
}
-EXPORT_SYMBOL(pci_iomap);
EXPORT_SYMBOL(pci_iounmap);
#endif /* CONFIG_PCI */
diff --git a/lib/pci_iomap.c b/lib/pci_iomap.c
new file mode 100644
index 0000000..40b26cb
--- /dev/null
+++ b/lib/pci_iomap.c
@@ -0,0 +1,48 @@
+/*
+ * Implement the default iomap interfaces
+ *
+ * (C) Copyright 2004 Linus Torvalds
+ */
+#include <linux/pci.h>
+#include <linux/io.h>
+
+#include <linux/module.h>
+
+#ifdef CONFIG_PCI
+/**
+ * pci_iomap - create a virtual mapping cookie for a PCI BAR
+ * @dev: PCI device that owns the BAR
+ * @bar: BAR number
+ * @maxlen: length of the memory to map
+ *
+ * Using this function you will get a __iomem address to your device BAR.
+ * You can access it using ioread*() and iowrite*(). These functions hide
+ * the details if this is a MMIO or PIO address space and will just do what
+ * you expect from them in the correct way.
+ *
+ * @maxlen specifies the maximum length to map. If you want to get access to
+ * the complete BAR without checking for its length first, pass %0 here.
+ * */
+void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
+{
+ resource_size_t start = pci_resource_start(dev, bar);
+ resource_size_t len = pci_resource_len(dev, bar);
+ unsigned long flags = pci_resource_flags(dev, bar);
+
+ if (!len || !start)
+ return NULL;
+ if (maxlen && len > maxlen)
+ len = maxlen;
+ if (flags & IORESOURCE_IO)
+ return ioport_map(start, len);
+ if (flags & IORESOURCE_MEM) {
+ if (flags & IORESOURCE_CACHEABLE)
+ return ioremap(start, len);
+ return ioremap_nocache(start, len);
+ }
+ /* What? */
+ return NULL;
+}
+
+EXPORT_SYMBOL(pci_iomap);
+#endif /* CONFIG_PCI */
--
1.7.5.53.gc233e
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH-RFC 03/10] alpha: switch to GENERIC_PCI_IOMAP
[not found] <cover.1322163031.git.mst@redhat.com>
2011-11-24 20:15 ` [PATCH-RFC 01/10] lib: move GENERIC_IOMAP to lib/Kconfig Michael S. Tsirkin
2011-11-24 20:17 ` [PATCH-RFC 02/10] lib: add GENERIC_PCI_IOMAP Michael S. Tsirkin
@ 2011-11-24 20:17 ` Michael S. Tsirkin
2011-12-04 10:50 ` Michael S. Tsirkin
2011-12-06 16:45 ` Raúl Porcel
2011-11-24 20:17 ` [PATCH-RFC 04/10] arm: " Michael S. Tsirkin
` (6 subsequent siblings)
9 siblings, 2 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-24 20:17 UTC (permalink / raw)
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Ralf Baechle,
Jonas Bonn, Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu
alpha copied pci_iomap from generic code to avoid
pulling the rest of iomap.c in. Since that's in
a separate file now, we can reuse the common implementation.
The only difference is handling of nocache flag,
that turns out to be done correctly by the
generic code since arch/alpha/include/asm/io.h
defines ioremap_nocache same as ioremap.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
arch/alpha/Kconfig | 1 +
arch/alpha/kernel/pci.c | 26 +-------------------------
2 files changed, 2 insertions(+), 25 deletions(-)
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
index 3636b11..56a4df9 100644
--- a/arch/alpha/Kconfig
+++ b/arch/alpha/Kconfig
@@ -315,6 +315,7 @@ config ISA_DMA_API
config PCI
bool
depends on !ALPHA_JENSEN
+ select GENERIC_PCI_IOMAP
default y
help
Find out whether you have a PCI motherboard. PCI is the name of a
diff --git a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c
index c9ab94e..f3cae27 100644
--- a/arch/alpha/kernel/pci.c
+++ b/arch/alpha/kernel/pci.c
@@ -508,30 +508,7 @@ sys_pciconfig_iobase(long which, unsigned long bus, unsigned long dfn)
return -EOPNOTSUPP;
}
-/* Create an __iomem token from a PCI BAR. Copied from lib/iomap.c with
- no changes, since we don't want the other things in that object file. */
-
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
-{
- resource_size_t start = pci_resource_start(dev, bar);
- resource_size_t len = pci_resource_len(dev, bar);
- unsigned long flags = pci_resource_flags(dev, bar);
-
- if (!len || !start)
- return NULL;
- if (maxlen && len > maxlen)
- len = maxlen;
- if (flags & IORESOURCE_IO)
- return ioport_map(start, len);
- if (flags & IORESOURCE_MEM) {
- /* Not checking IORESOURCE_CACHEABLE because alpha does
- not distinguish between ioremap and ioremap_nocache. */
- return ioremap(start, len);
- }
- return NULL;
-}
-
-/* Destroy that token. Not copied from lib/iomap.c. */
+/* Destroy an __iomem token. Not copied from lib/iomap.c. */
void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
{
@@ -539,7 +516,6 @@ void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
iounmap(addr);
}
-EXPORT_SYMBOL(pci_iomap);
EXPORT_SYMBOL(pci_iounmap);
/* FIXME: Some boxes have multiple ISA bridges! */
--
1.7.5.53.gc233e
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH-RFC 04/10] arm: switch to GENERIC_PCI_IOMAP
[not found] <cover.1322163031.git.mst@redhat.com>
` (2 preceding siblings ...)
2011-11-24 20:17 ` [PATCH-RFC 03/10] alpha: switch to GENERIC_PCI_IOMAP Michael S. Tsirkin
@ 2011-11-24 20:17 ` Michael S. Tsirkin
2011-11-24 20:18 ` [PATCH-RFC 05/10] microblaze: " Michael S. Tsirkin
` (5 subsequent siblings)
9 siblings, 0 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-24 20:17 UTC (permalink / raw)
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Ralf Baechle,
Jonas Bonn, Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu
arm copied pci_iomap from generic code, probably to avoid
pulling the rest of iomap.c in. Since that's in
a separate file now, we can reuse the common implementation.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
arch/arm/Kconfig | 1 +
arch/arm/include/asm/io.h | 2 +-
arch/arm/mm/iomap.c | 21 ---------------------
3 files changed, 2 insertions(+), 22 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 44789ef..2ebf66b 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -30,6 +30,7 @@ config ARM
select HAVE_SPARSE_IRQ
select GENERIC_IRQ_SHOW
select CPU_PM if (SUSPEND || CPU_IDLE)
+ select GENERIC_PCI_IOMAP
help
The ARM series is a line of low-power-consumption RISC chip designs
licensed by ARM Ltd and targeted at embedded applications and
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
index 065d100..9275828 100644
--- a/arch/arm/include/asm/io.h
+++ b/arch/arm/include/asm/io.h
@@ -27,6 +27,7 @@
#include <asm/byteorder.h>
#include <asm/memory.h>
#include <asm/system.h>
+#include <asm-generic/pci_iomap.h>
/*
* ISA I/O bus memory addresses are 1:1 with the physical address.
@@ -306,7 +307,6 @@ extern void ioport_unmap(void __iomem *addr);
struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen);
extern void pci_iounmap(struct pci_dev *dev, void __iomem *addr);
/*
diff --git a/arch/arm/mm/iomap.c b/arch/arm/mm/iomap.c
index 430df1a..e62956e 100644
--- a/arch/arm/mm/iomap.c
+++ b/arch/arm/mm/iomap.c
@@ -35,27 +35,6 @@ EXPORT_SYMBOL(pcibios_min_mem);
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);
- resource_size_t len = pci_resource_len(dev, bar);
- unsigned long flags = pci_resource_flags(dev, bar);
-
- if (!len || !start)
- return NULL;
- if (maxlen && len > maxlen)
- len = maxlen;
- if (flags & IORESOURCE_IO)
- return ioport_map(start, len);
- if (flags & IORESOURCE_MEM) {
- if (flags & IORESOURCE_CACHEABLE)
- return ioremap(start, len);
- return ioremap_nocache(start, len);
- }
- return NULL;
-}
-EXPORT_SYMBOL(pci_iomap);
-
void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
{
if ((unsigned long)addr >= VMALLOC_START &&
--
1.7.5.53.gc233e
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH-RFC 05/10] microblaze: switch to GENERIC_PCI_IOMAP
[not found] <cover.1322163031.git.mst@redhat.com>
` (3 preceding siblings ...)
2011-11-24 20:17 ` [PATCH-RFC 04/10] arm: " Michael S. Tsirkin
@ 2011-11-24 20:18 ` Michael S. Tsirkin
2011-11-24 20:18 ` [PATCH-RFC 06/10] mips: " Michael S. Tsirkin
` (4 subsequent siblings)
9 siblings, 0 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-24 20:18 UTC (permalink / raw)
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Ralf Baechle,
Jonas Bonn, Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu
microblaze copied pci_iomap from generic code, probably to avoid
pulling the rest of iomap.c in. Since that's in
a separate file now, we can reuse the common implementation.
The only difference is handling of nocache flag,
that turns out to be done correctly by the
generic code since arch/microblaze/include/asm/io.h
defines ioremap_nocache same as ioremap.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
arch/microblaze/Kconfig | 1 +
arch/microblaze/pci/iomap.c | 19 -------------------
2 files changed, 1 insertions(+), 19 deletions(-)
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig
index e446bab..f0eead7 100644
--- a/arch/microblaze/Kconfig
+++ b/arch/microblaze/Kconfig
@@ -17,6 +17,7 @@ config MICROBLAZE
select HAVE_GENERIC_HARDIRQS
select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW
+ select GENERIC_PCI_IOMAP
config SWAP
def_bool n
diff --git a/arch/microblaze/pci/iomap.c b/arch/microblaze/pci/iomap.c
index 57acda8..b07abba 100644
--- a/arch/microblaze/pci/iomap.c
+++ b/arch/microblaze/pci/iomap.c
@@ -10,25 +10,6 @@
#include <asm/io.h>
#include <asm/pci-bridge.h>
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
-{
- resource_size_t start = pci_resource_start(dev, bar);
- resource_size_t len = pci_resource_len(dev, bar);
- unsigned long flags = pci_resource_flags(dev, bar);
-
- if (!len)
- return NULL;
- if (max && len > max)
- len = max;
- if (flags & IORESOURCE_IO)
- return ioport_map(start, len);
- if (flags & IORESOURCE_MEM)
- return ioremap(start, len);
- /* What? */
- return NULL;
-}
-EXPORT_SYMBOL(pci_iomap);
-
void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
{
if (isa_vaddr_is_ioport(addr))
--
1.7.5.53.gc233e
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH-RFC 06/10] mips: switch to GENERIC_PCI_IOMAP
[not found] <cover.1322163031.git.mst@redhat.com>
` (4 preceding siblings ...)
2011-11-24 20:18 ` [PATCH-RFC 05/10] microblaze: " Michael S. Tsirkin
@ 2011-11-24 20:18 ` Michael S. Tsirkin
2012-01-28 22:38 ` Kevin Cernekee
2011-11-24 20:19 ` [PATCH-RFC 07/10] parisc: " Michael S. Tsirkin
` (3 subsequent siblings)
9 siblings, 1 reply; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-24 20:18 UTC (permalink / raw)
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Ralf Baechle,
Jonas Bonn, Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu
mips copied pci_iomap from generic code, probably to avoid
pulling the rest of iomap.c in. Since that's in
a separate file now, we can reuse the common implementation.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
arch/mips/Kconfig | 1 +
arch/mips/lib/iomap-pci.c | 26 --------------------------
2 files changed, 1 insertions(+), 26 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index d46f1da..b70c96f 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2317,6 +2317,7 @@ config PCI
bool "Support for PCI controller"
depends on HW_HAS_PCI
select PCI_DOMAINS
+ select GENERIC_PCI_IOMAP
help
Find out whether you have a PCI motherboard. PCI is the name of a
bus system, i.e. the way the CPU talks to the other stuff inside
diff --git a/arch/mips/lib/iomap-pci.c b/arch/mips/lib/iomap-pci.c
index 2ab899c..2635b1a 100644
--- a/arch/mips/lib/iomap-pci.c
+++ b/arch/mips/lib/iomap-pci.c
@@ -40,32 +40,6 @@ static void __iomem *ioport_map_pci(struct pci_dev *dev,
return (void __iomem *) (ctrl->io_map_base + port);
}
-/*
- * Create a virtual mapping cookie for a PCI BAR (memory or IO)
- */
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
-{
- resource_size_t start = pci_resource_start(dev, bar);
- resource_size_t len = pci_resource_len(dev, bar);
- unsigned long flags = pci_resource_flags(dev, bar);
-
- if (!len || !start)
- return NULL;
- if (maxlen && len > maxlen)
- len = maxlen;
- if (flags & IORESOURCE_IO)
- return ioport_map_pci(dev, start, len);
- if (flags & IORESOURCE_MEM) {
- if (flags & IORESOURCE_CACHEABLE)
- return ioremap(start, len);
- return ioremap_nocache(start, len);
- }
- /* What? */
- return NULL;
-}
-
-EXPORT_SYMBOL(pci_iomap);
-
void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
{
iounmap(addr);
--
1.7.5.53.gc233e
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH-RFC 07/10] parisc: switch to GENERIC_PCI_IOMAP
[not found] <cover.1322163031.git.mst@redhat.com>
` (5 preceding siblings ...)
2011-11-24 20:18 ` [PATCH-RFC 06/10] mips: " Michael S. Tsirkin
@ 2011-11-24 20:19 ` Michael S. Tsirkin
2011-11-24 20:19 ` [PATCH-RFC 08/10] powerpc: " Michael S. Tsirkin
` (2 subsequent siblings)
9 siblings, 0 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-24 20:19 UTC (permalink / raw)
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Ralf Baechle,
Jonas Bonn, Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu
parisc copied pci_iomap from generic code, probably to avoid
pulling the rest of iomap.c in. Since that's in
a separate file now, we can reuse the common implementation.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
arch/parisc/Kconfig | 1 +
arch/parisc/lib/iomap.c | 23 -----------------------
2 files changed, 1 insertions(+), 23 deletions(-)
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index fdfd8be..242a1b7 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -14,6 +14,7 @@ config PARISC
select GENERIC_ATOMIC64 if !64BIT
select HAVE_GENERIC_HARDIRQS
select GENERIC_IRQ_PROBE
+ select GENERIC_PCI_IOMAP
select IRQ_PER_CPU
select ARCH_HAVE_NMI_SAFE_CMPXCHG
diff --git a/arch/parisc/lib/iomap.c b/arch/parisc/lib/iomap.c
index 8f470c9..fb8e10a 100644
--- a/arch/parisc/lib/iomap.c
+++ b/arch/parisc/lib/iomap.c
@@ -436,28 +436,6 @@ void ioport_unmap(void __iomem *addr)
}
}
-/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
-{
- resource_size_t start = pci_resource_start(dev, bar);
- resource_size_t len = pci_resource_len(dev, bar);
- unsigned long flags = pci_resource_flags(dev, bar);
-
- if (!len || !start)
- return NULL;
- if (maxlen && len > maxlen)
- len = maxlen;
- if (flags & IORESOURCE_IO)
- return ioport_map(start, len);
- if (flags & IORESOURCE_MEM) {
- if (flags & IORESOURCE_CACHEABLE)
- return ioremap(start, len);
- return ioremap_nocache(start, len);
- }
- /* What? */
- return NULL;
-}
-
void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
{
if (!INDIRECT_ADDR(addr)) {
@@ -483,5 +461,4 @@ EXPORT_SYMBOL(iowrite16_rep);
EXPORT_SYMBOL(iowrite32_rep);
EXPORT_SYMBOL(ioport_map);
EXPORT_SYMBOL(ioport_unmap);
-EXPORT_SYMBOL(pci_iomap);
EXPORT_SYMBOL(pci_iounmap);
--
1.7.5.53.gc233e
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH-RFC 08/10] powerpc: switch to GENERIC_PCI_IOMAP
[not found] <cover.1322163031.git.mst@redhat.com>
` (6 preceding siblings ...)
2011-11-24 20:19 ` [PATCH-RFC 07/10] parisc: " Michael S. Tsirkin
@ 2011-11-24 20:19 ` Michael S. Tsirkin
2011-11-24 20:20 ` [PATCH-RFC 09/10] sh: " Michael S. Tsirkin
2011-11-24 20:21 ` [PATCH-RFC 10/10] sparc: " Michael S. Tsirkin
9 siblings, 0 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-24 20:19 UTC (permalink / raw)
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Ralf Baechle,
Jonas Bonn, Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu
powerpc copied pci_iomap from generic code, probably to avoid
pulling the rest of iomap.c in. Since that's in
a separate file now, we can reuse the common implementation.
The only difference is handling of nocache flag,
that turns out to be done correctly by the
generic code since arch/powerpc/include/asm/io.h
defines ioremap_nocache same as ioremap.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
arch/powerpc/Kconfig | 1 +
arch/powerpc/kernel/iomap.c | 19 -------------------
2 files changed, 1 insertions(+), 19 deletions(-)
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 951e18f..6ffe3df 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -710,6 +710,7 @@ config PCI
default PCI_PERMEDIA if !4xx && !CPM2 && !8xx
default PCI_QSPAN if !4xx && !CPM2 && 8xx
select ARCH_SUPPORTS_MSI
+ select GENERIC_PCI_IOMAP
help
Find out whether your system includes a PCI bus. PCI is the name of
a bus system, i.e. the way the CPU talks to the other stuff inside
diff --git a/arch/powerpc/kernel/iomap.c b/arch/powerpc/kernel/iomap.c
index 2627918..97a3715 100644
--- a/arch/powerpc/kernel/iomap.c
+++ b/arch/powerpc/kernel/iomap.c
@@ -119,24 +119,6 @@ EXPORT_SYMBOL(ioport_map);
EXPORT_SYMBOL(ioport_unmap);
#ifdef CONFIG_PCI
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
-{
- resource_size_t start = pci_resource_start(dev, bar);
- resource_size_t len = pci_resource_len(dev, bar);
- unsigned long flags = pci_resource_flags(dev, bar);
-
- if (!len)
- return NULL;
- if (max && len > max)
- len = max;
- if (flags & IORESOURCE_IO)
- return ioport_map(start, len);
- if (flags & IORESOURCE_MEM)
- return ioremap(start, len);
- /* What? */
- return NULL;
-}
-
void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
{
if (isa_vaddr_is_ioport(addr))
@@ -146,6 +128,5 @@ void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
iounmap(addr);
}
-EXPORT_SYMBOL(pci_iomap);
EXPORT_SYMBOL(pci_iounmap);
#endif /* CONFIG_PCI */
--
1.7.5.53.gc233e
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH-RFC 09/10] sh: switch to GENERIC_PCI_IOMAP
[not found] <cover.1322163031.git.mst@redhat.com>
` (7 preceding siblings ...)
2011-11-24 20:19 ` [PATCH-RFC 08/10] powerpc: " Michael S. Tsirkin
@ 2011-11-24 20:20 ` Michael S. Tsirkin
2011-11-24 20:21 ` [PATCH-RFC 10/10] sparc: " Michael S. Tsirkin
9 siblings, 0 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-24 20:20 UTC (permalink / raw)
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Ralf Baechle,
Jonas Bonn, Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu
sh copied pci_iomap from generic code, probably to avoid
pulling the rest of iomap.c in. Since that's in
a separate file now, we can reuse the common implementation.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
arch/sh/Kconfig | 1 +
arch/sh/drivers/pci/pci.c | 23 -----------------------
2 files changed, 1 insertions(+), 23 deletions(-)
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 5aeab58..ead1640 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -857,6 +857,7 @@ config PCI
bool "PCI support"
depends on SYS_SUPPORTS_PCI
select PCI_DOMAINS
+ select GENERIC_PCI_IOMAP
help
Find out whether you have a PCI motherboard. PCI is the name of a
bus system, i.e. the way the CPU talks to the other stuff inside
diff --git a/arch/sh/drivers/pci/pci.c b/arch/sh/drivers/pci/pci.c
index c2691af..11aaf2f 100644
--- a/arch/sh/drivers/pci/pci.c
+++ b/arch/sh/drivers/pci/pci.c
@@ -393,29 +393,6 @@ static void __iomem *ioport_map_pci(struct pci_dev *dev,
return (void __iomem *)(chan->io_map_base + port);
}
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
-{
- resource_size_t start = pci_resource_start(dev, bar);
- resource_size_t len = pci_resource_len(dev, bar);
- unsigned long flags = pci_resource_flags(dev, bar);
-
- if (unlikely(!len || !start))
- return NULL;
- if (maxlen && len > maxlen)
- len = maxlen;
-
- if (flags & IORESOURCE_IO)
- return ioport_map_pci(dev, start, len);
- if (flags & IORESOURCE_MEM) {
- if (flags & IORESOURCE_CACHEABLE)
- return ioremap(start, len);
- return ioremap_nocache(start, len);
- }
-
- return NULL;
-}
-EXPORT_SYMBOL(pci_iomap);
-
void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
{
iounmap(addr);
--
1.7.5.53.gc233e
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH-RFC 10/10] sparc: switch to GENERIC_PCI_IOMAP
[not found] <cover.1322163031.git.mst@redhat.com>
` (8 preceding siblings ...)
2011-11-24 20:20 ` [PATCH-RFC 09/10] sh: " Michael S. Tsirkin
@ 2011-11-24 20:21 ` Michael S. Tsirkin
9 siblings, 0 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-24 20:21 UTC (permalink / raw)
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Ralf Baechle,
Jonas Bonn, Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu
sparc copied pci_iomap from generic code, probably to avoid
pulling the rest of iomap.c in. Since that's in
a separate file now, we can reuse the common implementation.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
arch/sparc/Kconfig | 1 +
arch/sparc/include/asm/io_32.h | 5 ++++-
arch/sparc/include/asm/io_64.h | 5 ++++-
arch/sparc/lib/iomap.c | 23 -----------------------
4 files changed, 9 insertions(+), 25 deletions(-)
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index f92602e..a4644f5 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -28,6 +28,7 @@ config SPARC
select HAVE_GENERIC_HARDIRQS
select GENERIC_IRQ_SHOW
select USE_GENERIC_SMP_HELPERS if SMP
+ select GENERIC_PCI_IOMAP
config SPARC32
def_bool !64BIT
diff --git a/arch/sparc/include/asm/io_32.h b/arch/sparc/include/asm/io_32.h
index c2ced21..9be8778 100644
--- a/arch/sparc/include/asm/io_32.h
+++ b/arch/sparc/include/asm/io_32.h
@@ -8,6 +8,10 @@
#include <asm/page.h> /* IO address mapping routines need this */
#include <asm/system.h>
+#ifdef __KERNEL__
+#include <asm-generic/pci_iomap.h>
+#endif
+
#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
static inline u32 flip_dword (u32 l)
@@ -324,7 +328,6 @@ extern void ioport_unmap(void __iomem *);
/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
/*
diff --git a/arch/sparc/include/asm/io_64.h b/arch/sparc/include/asm/io_64.h
index 9c89654..19cd51d 100644
--- a/arch/sparc/include/asm/io_64.h
+++ b/arch/sparc/include/asm/io_64.h
@@ -9,6 +9,10 @@
#include <asm/system.h>
#include <asm/asi.h>
+#ifdef __KERNEL__
+#include <asm-generic/pci_iomap.h>
+#endif
+
/* PC crapola... */
#define __SLOW_DOWN_IO do { } while (0)
#define SLOW_DOWN_IO do { } while (0)
@@ -514,7 +518,6 @@ extern void ioport_unmap(void __iomem *);
/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
static inline int sbus_can_dma_64bit(void)
diff --git a/arch/sparc/lib/iomap.c b/arch/sparc/lib/iomap.c
index 9ef37e1..c4d42a5 100644
--- a/arch/sparc/lib/iomap.c
+++ b/arch/sparc/lib/iomap.c
@@ -18,31 +18,8 @@ void ioport_unmap(void __iomem *addr)
EXPORT_SYMBOL(ioport_map);
EXPORT_SYMBOL(ioport_unmap);
-/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
-{
- resource_size_t start = pci_resource_start(dev, bar);
- resource_size_t len = pci_resource_len(dev, bar);
- unsigned long flags = pci_resource_flags(dev, bar);
-
- if (!len || !start)
- return NULL;
- if (maxlen && len > maxlen)
- len = maxlen;
- if (flags & IORESOURCE_IO)
- return ioport_map(start, len);
- if (flags & IORESOURCE_MEM) {
- if (flags & IORESOURCE_CACHEABLE)
- return ioremap(start, len);
- return ioremap_nocache(start, len);
- }
- /* What? */
- return NULL;
-}
-
void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
{
/* nothing to do */
}
-EXPORT_SYMBOL(pci_iomap);
EXPORT_SYMBOL(pci_iounmap);
--
1.7.5.53.gc233e
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH-RFC 02/10] lib: add GENERIC_PCI_IOMAP
2011-11-24 20:17 ` [PATCH-RFC 02/10] lib: add GENERIC_PCI_IOMAP Michael S. Tsirkin
@ 2011-11-24 22:07 ` Arnd Bergmann
2011-11-25 0:54 ` Stephen Rothwell
1 sibling, 0 replies; 20+ messages in thread
From: Arnd Bergmann @ 2011-11-24 22:07 UTC (permalink / raw)
To: linuxppc-dev
Cc: Michael S. Tsirkin, Nicolas Pitre, linux-mips, linux-m68k,
linux-ia64, linux, linux-pci, Jesse Barnes, Chen Liqin,
Paul Mackerras, H. Peter Anvin, sparclinux, Guan Xuetao,
Lennox Wu, Jonas Bonn, Jesper Nilsson, Russell King, linux-sh,
linux-hexagon, Helge Deller, x86, James E.J. Bottomley,
Ingo Molnar, Geert
On Thursday 24 November 2011 22:17:02 Michael S. Tsirkin wrote:
> Many architectures want a generic pci_iomap but
> not the rest of iomap.c. Split that to a separate .c
> file and add a new config symbol. select automatically
> by GENERIC_IOMAP.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Very nice!
Acked-by: Arnd Bergmann <arnd@arndb.de>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH-RFC 02/10] lib: add GENERIC_PCI_IOMAP
2011-11-24 20:17 ` [PATCH-RFC 02/10] lib: add GENERIC_PCI_IOMAP Michael S. Tsirkin
2011-11-24 22:07 ` Arnd Bergmann
@ 2011-11-25 0:54 ` Stephen Rothwell
2011-11-25 0:59 ` Stephen Rothwell
2011-11-27 17:12 ` Michael S. Tsirkin
1 sibling, 2 replies; 20+ messages in thread
From: Stephen Rothwell @ 2011-11-25 0:54 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Nicolas Pitre, linux-mips, linux-m68k, linux-ia64, linux-sh,
linux-pci, linux, Jesse Barnes, Chen Liqin, Paul Mackerras,
Ralf Baechle, H. Peter Anvin, sparclinux, Guan Xuetao, Lennox Wu,
Jonas Bonn, Jesper Nilsson, Russell King, linux-hexagon,
Helge Deller, x86, James E.J. Bottomley, Ingo Molnar,
Geert Uytterhoeven, Arend van Spriel, Matt Turner, linux-arch
[-- Attachment #1.1: Type: text/plain, Size: 5328 bytes --]
Hi Michael,
On Thu, 24 Nov 2011 22:17:02 +0200 "Michael S. Tsirkin" <mst@redhat.com> wrote:
>
> diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h
> index 9120887..c8a67345 100644
> --- a/include/asm-generic/io.h
> +++ b/include/asm-generic/io.h
> @@ -19,6 +19,8 @@
> #include <asm-generic/iomap.h>
> #endif
>
> +#include <asm-generic/pci_iomap.h>
> +
> #ifndef mmiowb
> #define mmiowb() do {} while (0)
> #endif
> @@ -283,9 +285,6 @@ static inline void writesb(const void __iomem *addr, const void *buf, int len)
> #define __io_virt(x) ((void __force *) (x))
>
> #ifndef CONFIG_GENERIC_IOMAP
> -/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
> -struct pci_dev;
> -extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
> static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p)
> {
> }
Just wondering why you move pci_iomap but not pic_iounmap. And also if
pci_iounmap is meant to stay here, then the "struct pci_dev" should
probably stay as well.
> diff --git a/include/asm-generic/iomap.h b/include/asm-generic/iomap.h
> index 98dcd76..fdcddcb 100644
> --- a/include/asm-generic/iomap.h
> +++ b/include/asm-generic/iomap.h
> @@ -69,16 +69,13 @@ extern void ioport_unmap(void __iomem *);
> #ifdef CONFIG_PCI
> /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
> struct pci_dev;
> -extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
> extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
Ditto with pci_iounmap. Also the comment above really belongs with pci_iomap.
> diff --git a/include/asm-generic/pci_iomap.h b/include/asm-generic/pci_iomap.h
> new file mode 100644
> index 0000000..e08b3bd
> --- /dev/null
> +++ b/include/asm-generic/pci_iomap.h
> @@ -0,0 +1,26 @@
> +/* Generic I/O port emulation, based on MN10300 code
> + *
> + * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
> + * Written by David Howells (dhowells@redhat.com)
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public Licence
> + * as published by the Free Software Foundation; either version
> + * 2 of the Licence, or (at your option) any later version.
> + */
> +#ifndef __ASM_GENERIC_PCI_IOMAP_H
> +#define __ASM_GENERIC_PCI_IOMAP_H
> +
> +#ifdef CONFIG_PCI
> +/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
> +struct pci_dev;
You could move this struct declaration above the ifdef and remove the
duplicate below.
> +extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
> +#else
> +struct pci_dev;
> +static inline void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
> +{
> + return NULL;
> +}
> +#endif
> +
> +#endif /* __ASM_GENERIC_IO_H */
> diff --git a/lib/iomap.c b/lib/iomap.c
> index 5dbcb4b..ada922a 100644
> --- a/lib/iomap.c
> +++ b/lib/iomap.c
> @@ -242,45 +242,11 @@ EXPORT_SYMBOL(ioport_unmap);
> #endif /* CONFIG_HAS_IOPORT */
>
> #ifdef CONFIG_PCI
> -/**
> - * pci_iomap - create a virtual mapping cookie for a PCI BAR
> - * @dev: PCI device that owns the BAR
> - * @bar: BAR number
> - * @maxlen: length of the memory to map
> - *
> - * Using this function you will get a __iomem address to your device BAR.
> - * You can access it using ioread*() and iowrite*(). These functions hide
> - * the details if this is a MMIO or PIO address space and will just do what
> - * you expect from them in the correct way.
> - *
> - * @maxlen specifies the maximum length to map. If you want to get access to
> - * the complete BAR without checking for its length first, pass %0 here.
> - * */
> -void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
> -{
> - resource_size_t start = pci_resource_start(dev, bar);
> - resource_size_t len = pci_resource_len(dev, bar);
> - unsigned long flags = pci_resource_flags(dev, bar);
> -
> - if (!len || !start)
> - return NULL;
> - if (maxlen && len > maxlen)
> - len = maxlen;
> - if (flags & IORESOURCE_IO)
> - return ioport_map(start, len);
> - if (flags & IORESOURCE_MEM) {
> - if (flags & IORESOURCE_CACHEABLE)
> - return ioremap(start, len);
> - return ioremap_nocache(start, len);
> - }
> - /* What? */
> - return NULL;
> -}
> -
> +/* Hide the details if this is a MMIO or PIO address space and just do what
> + * you expect in the correct way. */
> void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
> {
> IO_COND(addr, /* nothing */, iounmap(addr));
> }
> -EXPORT_SYMBOL(pci_iomap);
> EXPORT_SYMBOL(pci_iounmap);
Ditto with pci_iounmap
> diff --git a/lib/pci_iomap.c b/lib/pci_iomap.c
> new file mode 100644
> index 0000000..40b26cb
> --- /dev/null
> +++ b/lib/pci_iomap.c
> @@ -0,0 +1,48 @@
> +/*
> + * Implement the default iomap interfaces
> + *
> + * (C) Copyright 2004 Linus Torvalds
> + */
> +#include <linux/pci.h>
> +#include <linux/io.h>
> +
> +#include <linux/module.h>
If this is relative to (at least) v3.2-rc1, then you should use export.h
instead of module.h
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
[-- Attachment #1.2: Type: application/pgp-signature, Size: 836 bytes --]
[-- Attachment #2: Type: text/plain, Size: 150 bytes --]
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH-RFC 02/10] lib: add GENERIC_PCI_IOMAP
2011-11-25 0:54 ` Stephen Rothwell
@ 2011-11-25 0:59 ` Stephen Rothwell
2011-11-27 17:12 ` Michael S. Tsirkin
1 sibling, 0 replies; 20+ messages in thread
From: Stephen Rothwell @ 2011-11-25 0:59 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Nicolas Pitre, linux-mips, linux-m68k, linux-ia64, linux-sh,
linux-pci, linux, Jesse Barnes, Chen Liqin, Paul Mackerras,
Ralf Baechle, H. Peter Anvin, sparclinux, Guan Xuetao, Lennox Wu,
Jonas Bonn, Jesper Nilsson, Russell King, linux-hexagon,
Helge Deller, x86, James E.J. Bottomley, Ingo Molnar,
Geert Uytterhoeven, Arend van Spriel, Matt Turner, linux-arch
[-- Attachment #1.1: Type: text/plain, Size: 319 bytes --]
Hi Michael,
On Fri, 25 Nov 2011 11:54:55 +1100 Stephen Rothwell <sfr@canb.auug.org.au> wrote:
>
> Just wondering why you move pci_iomap but not pic_iounmap.
I figured this out. Arches have their own.
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
[-- Attachment #1.2: Type: application/pgp-signature, Size: 836 bytes --]
[-- Attachment #2: Type: text/plain, Size: 150 bytes --]
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH-RFC 01/10] lib: move GENERIC_IOMAP to lib/Kconfig
2011-11-24 20:15 ` [PATCH-RFC 01/10] lib: move GENERIC_IOMAP to lib/Kconfig Michael S. Tsirkin
@ 2011-11-25 8:41 ` Jesper Nilsson
2011-11-28 20:12 ` Richard Kuo
1 sibling, 0 replies; 20+ messages in thread
From: Jesper Nilsson @ 2011-11-25 8:41 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Richard Kuo, Tony Luck, Fenghua Yu,
Geert Uytterhoeven, Michal Simek, Ralf Baechle, Jonas Bonn,
Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu,
Paul Mundt, Da
[-- Attachment #1: Type: text/plain, Size: 495 bytes --]
On Thu, Nov 24, 2011 at 09:15:42PM +0100, Michael S. Tsirkin wrote:
> define GENERIC_IOMAP in a central location
> instead of all architectures. This will be helpful
> for the follow-up patch which makes it select
> other configs. Code is also a bit shorter this way.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
For the CRIS part:
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>
/^JN - Jesper Nilsson
--
Jesper Nilsson -- jesper.nilsson@axis.com
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH-RFC 02/10] lib: add GENERIC_PCI_IOMAP
2011-11-25 0:54 ` Stephen Rothwell
2011-11-25 0:59 ` Stephen Rothwell
@ 2011-11-27 17:12 ` Michael S. Tsirkin
1 sibling, 0 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-11-27 17:12 UTC (permalink / raw)
To: Stephen Rothwell
Cc: Nicolas Pitre, linux-mips, linux-m68k, linux-ia64, linux,
linux-pci, Jesse Barnes, Chen Liqin, Paul Mackerras,
H. Peter Anvin, sparclinux, Guan Xuetao, Lennox Wu, Jonas Bonn,
Jesper Nilsson, Russell King, linux-sh, linux-hexagon,
Helge Deller, x86, James E.J. Bottomley, Ingo Molnar,
Geert Uytterhoeven, lin
On Fri, Nov 25, 2011 at 11:54:55AM +1100, Stephen Rothwell wrote:
> Hi Michael,
>
> On Thu, 24 Nov 2011 22:17:02 +0200 "Michael S. Tsirkin" <mst@redhat.com> wrote:
> >
> > diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h
> > index 9120887..c8a67345 100644
> > --- a/include/asm-generic/io.h
> > +++ b/include/asm-generic/io.h
> > @@ -19,6 +19,8 @@
> > #include <asm-generic/iomap.h>
> > #endif
> >
> > +#include <asm-generic/pci_iomap.h>
> > +
> > #ifndef mmiowb
> > #define mmiowb() do {} while (0)
> > #endif
> > @@ -283,9 +285,6 @@ static inline void writesb(const void __iomem *addr, const void *buf, int len)
> > #define __io_virt(x) ((void __force *) (x))
> >
> > #ifndef CONFIG_GENERIC_IOMAP
> > -/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
> > -struct pci_dev;
> > -extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
> > static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p)
> > {
> > }
>
> Just wondering why you move pci_iomap but not pic_iounmap.
unmap is implemented significantly different between architectures.
> And also if
> pci_iounmap is meant to stay here, then the "struct pci_dev" should
> probably stay as well.
Right. I'll fix that.
> > diff --git a/include/asm-generic/iomap.h b/include/asm-generic/iomap.h
> > index 98dcd76..fdcddcb 100644
> > --- a/include/asm-generic/iomap.h
> > +++ b/include/asm-generic/iomap.h
> > @@ -69,16 +69,13 @@ extern void ioport_unmap(void __iomem *);
> > #ifdef CONFIG_PCI
> > /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
> > struct pci_dev;
> > -extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
> > extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
>
> Ditto with pci_iounmap.
Answered above :)
> Also the comment above really belongs with pci_iomap.
Right, I'll correct the comment.
> > diff --git a/include/asm-generic/pci_iomap.h b/include/asm-generic/pci_iomap.h
> > new file mode 100644
> > index 0000000..e08b3bd
> > --- /dev/null
> > +++ b/include/asm-generic/pci_iomap.h
> > @@ -0,0 +1,26 @@
> > +/* Generic I/O port emulation, based on MN10300 code
> > + *
> > + * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
> > + * Written by David Howells (dhowells@redhat.com)
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public Licence
> > + * as published by the Free Software Foundation; either version
> > + * 2 of the Licence, or (at your option) any later version.
> > + */
> > +#ifndef __ASM_GENERIC_PCI_IOMAP_H
> > +#define __ASM_GENERIC_PCI_IOMAP_H
> > +
> > +#ifdef CONFIG_PCI
> > +/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
> > +struct pci_dev;
>
> You could move this struct declaration above the ifdef and remove the
> duplicate below.
Good point. Will do.
> > +extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
> > +#else
> > +struct pci_dev;
> > +static inline void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
> > +{
> > + return NULL;
> > +}
> > +#endif
> > +
> > +#endif /* __ASM_GENERIC_IO_H */
> > diff --git a/lib/iomap.c b/lib/iomap.c
> > index 5dbcb4b..ada922a 100644
> > --- a/lib/iomap.c
> > +++ b/lib/iomap.c
> > @@ -242,45 +242,11 @@ EXPORT_SYMBOL(ioport_unmap);
> > #endif /* CONFIG_HAS_IOPORT */
> >
> > #ifdef CONFIG_PCI
> > -/**
> > - * pci_iomap - create a virtual mapping cookie for a PCI BAR
> > - * @dev: PCI device that owns the BAR
> > - * @bar: BAR number
> > - * @maxlen: length of the memory to map
> > - *
> > - * Using this function you will get a __iomem address to your device BAR.
> > - * You can access it using ioread*() and iowrite*(). These functions hide
> > - * the details if this is a MMIO or PIO address space and will just do what
> > - * you expect from them in the correct way.
> > - *
> > - * @maxlen specifies the maximum length to map. If you want to get access to
> > - * the complete BAR without checking for its length first, pass %0 here.
> > - * */
> > -void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
> > -{
> > - resource_size_t start = pci_resource_start(dev, bar);
> > - resource_size_t len = pci_resource_len(dev, bar);
> > - unsigned long flags = pci_resource_flags(dev, bar);
> > -
> > - if (!len || !start)
> > - return NULL;
> > - if (maxlen && len > maxlen)
> > - len = maxlen;
> > - if (flags & IORESOURCE_IO)
> > - return ioport_map(start, len);
> > - if (flags & IORESOURCE_MEM) {
> > - if (flags & IORESOURCE_CACHEABLE)
> > - return ioremap(start, len);
> > - return ioremap_nocache(start, len);
> > - }
> > - /* What? */
> > - return NULL;
> > -}
> > -
> > +/* Hide the details if this is a MMIO or PIO address space and just do what
> > + * you expect in the correct way. */
> > void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
> > {
> > IO_COND(addr, /* nothing */, iounmap(addr));
> > }
> > -EXPORT_SYMBOL(pci_iomap);
> > EXPORT_SYMBOL(pci_iounmap);
>
> Ditto with pci_iounmap
Answered above.
> > diff --git a/lib/pci_iomap.c b/lib/pci_iomap.c
> > new file mode 100644
> > index 0000000..40b26cb
> > --- /dev/null
> > +++ b/lib/pci_iomap.c
> > @@ -0,0 +1,48 @@
> > +/*
> > + * Implement the default iomap interfaces
> > + *
> > + * (C) Copyright 2004 Linus Torvalds
> > + */
> > +#include <linux/pci.h>
> > +#include <linux/io.h>
> > +
> > +#include <linux/module.h>
>
> If this is relative to (at least) v3.2-rc1, then you should use export.h
> instead of module.h
I just copied lib/iomap.c
Will fix, thanks for the comments.
> --
> Cheers,
> Stephen Rothwell sfr@canb.auug.org.au
> http://www.canb.auug.org.au/~sfr/
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH-RFC 01/10] lib: move GENERIC_IOMAP to lib/Kconfig
2011-11-24 20:15 ` [PATCH-RFC 01/10] lib: move GENERIC_IOMAP to lib/Kconfig Michael S. Tsirkin
2011-11-25 8:41 ` Jesper Nilsson
@ 2011-11-28 20:12 ` Richard Kuo
1 sibling, 0 replies; 20+ messages in thread
From: Richard Kuo @ 2011-11-28 20:12 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Tony Luck, Fenghua Yu,
Geert Uytterhoeven, Michal Simek, Ralf Baechle, Jonas Bonn,
Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu,
Paul Mundt
On Thu, Nov 24, 2011 at 10:15:42PM +0200, Michael S. Tsirkin wrote:
> define GENERIC_IOMAP in a central location
> instead of all architectures. This will be helpful
> for the follow-up patch which makes it select
> other configs. Code is also a bit shorter this way.
For the Hexagon config,
Acked-by: Richard Kuo <rkuo@codeaurora.org>
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH-RFC 03/10] alpha: switch to GENERIC_PCI_IOMAP
2011-11-24 20:17 ` [PATCH-RFC 03/10] alpha: switch to GENERIC_PCI_IOMAP Michael S. Tsirkin
@ 2011-12-04 10:50 ` Michael S. Tsirkin
2011-12-06 16:45 ` Raúl Porcel
1 sibling, 0 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2011-12-04 10:50 UTC (permalink / raw)
To: Richard Henderson, Ivan Kokshaysky, Matt Turner, linux-alpha
On Thu, Nov 24, 2011 at 10:17:23PM +0200, Michael S. Tsirkin wrote:
> alpha copied pci_iomap from generic code to avoid
> pulling the rest of iomap.c in. Since that's in
> a separate file now, we can reuse the common implementation.
>
> The only difference is handling of nocache flag,
> that turns out to be done correctly by the
> generic code since arch/alpha/include/asm/io.h
> defines ioremap_nocache same as ioremap.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Sorry to nag - any ACKs/NACKs on the alpha changes
(both this, and 'alpha: drop pci_iomap/pci_iounmap from pci-noop.c')?
I intend to send this to Linus if there are no objections. Thanks!
> ---
> arch/alpha/Kconfig | 1 +
> arch/alpha/kernel/pci.c | 26 +-------------------------
> 2 files changed, 2 insertions(+), 25 deletions(-)
>
> diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
> index 3636b11..56a4df9 100644
> --- a/arch/alpha/Kconfig
> +++ b/arch/alpha/Kconfig
> @@ -315,6 +315,7 @@ config ISA_DMA_API
> config PCI
> bool
> depends on !ALPHA_JENSEN
> + select GENERIC_PCI_IOMAP
> default y
> help
> Find out whether you have a PCI motherboard. PCI is the name of a
> diff --git a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c
> index c9ab94e..f3cae27 100644
> --- a/arch/alpha/kernel/pci.c
> +++ b/arch/alpha/kernel/pci.c
> @@ -508,30 +508,7 @@ sys_pciconfig_iobase(long which, unsigned long bus, unsigned long dfn)
> return -EOPNOTSUPP;
> }
>
> -/* Create an __iomem token from a PCI BAR. Copied from lib/iomap.c with
> - no changes, since we don't want the other things in that object file. */
> -
> -void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
> -{
> - resource_size_t start = pci_resource_start(dev, bar);
> - resource_size_t len = pci_resource_len(dev, bar);
> - unsigned long flags = pci_resource_flags(dev, bar);
> -
> - if (!len || !start)
> - return NULL;
> - if (maxlen && len > maxlen)
> - len = maxlen;
> - if (flags & IORESOURCE_IO)
> - return ioport_map(start, len);
> - if (flags & IORESOURCE_MEM) {
> - /* Not checking IORESOURCE_CACHEABLE because alpha does
> - not distinguish between ioremap and ioremap_nocache. */
> - return ioremap(start, len);
> - }
> - return NULL;
> -}
> -
> -/* Destroy that token. Not copied from lib/iomap.c. */
> +/* Destroy an __iomem token. Not copied from lib/iomap.c. */
>
> void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
> {
> @@ -539,7 +516,6 @@ void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
> iounmap(addr);
> }
>
> -EXPORT_SYMBOL(pci_iomap);
> EXPORT_SYMBOL(pci_iounmap);
>
> /* FIXME: Some boxes have multiple ISA bridges! */
> --
> 1.7.5.53.gc233e
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH-RFC 03/10] alpha: switch to GENERIC_PCI_IOMAP
2011-11-24 20:17 ` [PATCH-RFC 03/10] alpha: switch to GENERIC_PCI_IOMAP Michael S. Tsirkin
2011-12-04 10:50 ` Michael S. Tsirkin
@ 2011-12-06 16:45 ` Raúl Porcel
1 sibling, 0 replies; 20+ messages in thread
From: Raúl Porcel @ 2011-12-06 16:45 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, linux-alpha
On 11/24/2011 09:17 PM, Michael S. Tsirkin wrote:
> alpha copied pci_iomap from generic code to avoid
> pulling the rest of iomap.c in. Since that's in
> a separate file now, we can reuse the common implementation.
>
> The only difference is handling of nocache flag,
> that turns out to be done correctly by the
> generic code since arch/alpha/include/asm/io.h
> defines ioremap_nocache same as ioremap.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
[snip]
WFM on my DS20E using 3.2.0-rc4-00231-g958c6c2
so,
Tested-by: Raúl Porcel <armin76@gentoo.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-alpha" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH-RFC 06/10] mips: switch to GENERIC_PCI_IOMAP
2011-11-24 20:18 ` [PATCH-RFC 06/10] mips: " Michael S. Tsirkin
@ 2012-01-28 22:38 ` Kevin Cernekee
2012-01-29 22:45 ` Michael S. Tsirkin
0 siblings, 1 reply; 20+ messages in thread
From: Kevin Cernekee @ 2012-01-28 22:38 UTC (permalink / raw)
To: Ralf Baechle, Michael S. Tsirkin
Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, Russell King,
Mikael Starvik, Jesper Nilsson, Richard Kuo, Tony Luck,
Fenghua Yu, Geert Uytterhoeven, Michal Simek, Jonas Bonn,
Kyle McMartin, Helge Deller, James E.J. Bottomley,
Benjamin Herrenschmidt, Paul Mackerras, Chen Liqin, Lennox Wu,
Paul Mundt
On Thu, Nov 24, 2011 at 12:18 PM, Michael S. Tsirkin <mst@redhat.com> wrote:
> mips copied pci_iomap from generic code, probably to avoid
> pulling the rest of iomap.c in. Since that's in
> a separate file now, we can reuse the common implementation.
[snip]
> - if (flags & IORESOURCE_IO)
> - return ioport_map_pci(dev, start, len);
While investigating a new warning on the 3.3-rc1 MIPS build (unused
static function ioport_map_pci()), I noticed that this patch has shown
up in Linus' tree as commit eab90291d35438bcebf7c3dc85be66d0f24e3002.
I am not completely clear on the implications it has on mapping PCI I/O regions:
Prior to this change, the MIPS version of pci_iomap() called a
MIPS-specific function, ioport_map_pci(), which tried to use the PCI
controller's io_map_base field to determine the base address of the
PCI I/O space. It also had a fallback mechanism to deal with the case
where io_map_base is unset.
Now, in 3.3-rc1, the generic version of pci_iomap() is used instead.
This code just calls arch/mips/lib/iomap.c:ioport_map() on these
regions. ioport_map() falls through to ioport_map_legacy(), which
always uses mips_io_port_base (not the PCI controller's io_map_base)
as the base address. But on MIPS, it is still permissible to use
different I/O port bases for PCI devices and for legacy (ISA?)
devices.
Is this new behavior desirable, or are there any supported platforms
on which adverse effects might be seen?
As for my part, I don't use PCI I/O regions at all - just memory
regions. I'm more worried about making sure my tree builds with 0
warnings.
If we do want to move ahead with the switch to GENERIC_PCI_IOMAP now,
I have patches to scrap iomap-pci.c entirely and squash the unused
function warning.
If we still want to support the case where io_map_base !=
mips_io_port_base, maybe it would be better to revert commit eab90291
for 3.3.
Might also want to take a look at SH since it also appears to have an
orphaned ioport_map_pci() function.
What are your thoughts?
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH-RFC 06/10] mips: switch to GENERIC_PCI_IOMAP
2012-01-28 22:38 ` Kevin Cernekee
@ 2012-01-29 22:45 ` Michael S. Tsirkin
0 siblings, 0 replies; 20+ messages in thread
From: Michael S. Tsirkin @ 2012-01-29 22:45 UTC (permalink / raw)
To: Kevin Cernekee
Cc: Nicolas Pitre, linux-mips, linux-m68k, linux-ia64, linux-sh,
Benjamin Herrenschmidt, linux, linux-pci, Jesse Barnes,
Kumar Gala, Chen Liqin, Paul Mackerras, H. Peter Anvin,
sparclinux, Guan Xuetao, Lennox Wu, Jesper Nilsson, Russell King,
linux-hexagon, Helge Deller, x86, James E.J. Bottomley,
Ingo Molnar, Geert Uytterhoeven, linux-arch, Arend van Spriel
On Sat, Jan 28, 2012 at 02:38:10PM -0800, Kevin Cernekee wrote:
> On Thu, Nov 24, 2011 at 12:18 PM, Michael S. Tsirkin <mst@redhat.com> wrote:
> > mips copied pci_iomap from generic code, probably to avoid
> > pulling the rest of iomap.c in. Since that's in
> > a separate file now, we can reuse the common implementation.
>
> [snip]
>
> > - if (flags & IORESOURCE_IO)
> > - return ioport_map_pci(dev, start, len);
>
> While investigating a new warning on the 3.3-rc1 MIPS build (unused
> static function ioport_map_pci()), I noticed that this patch has shown
> up in Linus' tree as commit eab90291d35438bcebf7c3dc85be66d0f24e3002.
>
> I am not completely clear on the implications it has on mapping PCI I/O regions:
Yes, my bad, I missed the difference between ioport_map_pci
and ioport_map for both MIPS and SH.
I'll post a patch to fix this, which is probably preferable
to reintroducing the code duplication where it might
trip us up again.
--
MST
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2012-01-29 22:45 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <cover.1322163031.git.mst@redhat.com>
2011-11-24 20:15 ` [PATCH-RFC 01/10] lib: move GENERIC_IOMAP to lib/Kconfig Michael S. Tsirkin
2011-11-25 8:41 ` Jesper Nilsson
2011-11-28 20:12 ` Richard Kuo
2011-11-24 20:17 ` [PATCH-RFC 02/10] lib: add GENERIC_PCI_IOMAP Michael S. Tsirkin
2011-11-24 22:07 ` Arnd Bergmann
2011-11-25 0:54 ` Stephen Rothwell
2011-11-25 0:59 ` Stephen Rothwell
2011-11-27 17:12 ` Michael S. Tsirkin
2011-11-24 20:17 ` [PATCH-RFC 03/10] alpha: switch to GENERIC_PCI_IOMAP Michael S. Tsirkin
2011-12-04 10:50 ` Michael S. Tsirkin
2011-12-06 16:45 ` Raúl Porcel
2011-11-24 20:17 ` [PATCH-RFC 04/10] arm: " Michael S. Tsirkin
2011-11-24 20:18 ` [PATCH-RFC 05/10] microblaze: " Michael S. Tsirkin
2011-11-24 20:18 ` [PATCH-RFC 06/10] mips: " Michael S. Tsirkin
2012-01-28 22:38 ` Kevin Cernekee
2012-01-29 22:45 ` Michael S. Tsirkin
2011-11-24 20:19 ` [PATCH-RFC 07/10] parisc: " Michael S. Tsirkin
2011-11-24 20:19 ` [PATCH-RFC 08/10] powerpc: " Michael S. Tsirkin
2011-11-24 20:20 ` [PATCH-RFC 09/10] sh: " Michael S. Tsirkin
2011-11-24 20:21 ` [PATCH-RFC 10/10] sparc: " Michael S. Tsirkin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).