aboutsummaryrefslogtreecommitdiffstats
path: root/arch/unicore32
diff options
context:
space:
mode:
authorGuanXuetao <gxt@mprc.pku.edu.cn>2011-02-26 23:46:06 -0500
committerGuanXuetao <gxt@mprc.pku.edu.cn>2011-03-16 21:19:21 -0400
commit4fde87cb13a29c06e0b4c2cba86445492098fbc2 (patch)
treecbd99cd229d7258e846f91c3b7efe00897c5eab6 /arch/unicore32
parentce443ab5fd536941da1d529ba3963324f941fc29 (diff)
unicore32: replace unicore32-specific iomap functions with generic lib implementation
1. define and enable CONFIG_GENERIC_IOMAP 2. define unicore32-specific PCI_IOBASE for asm-generic/io.h 3. define HAVE_ARCH_PIO_SIZE and unicore32-specific PIO_* macros 4. remove all unicore32-specific iomap functions Signed-off-by: Guan Xuetao <gxt@mprc.pku.edu.cn> Reviewed-and-Acked-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/unicore32')
-rw-r--r--arch/unicore32/Kconfig3
-rw-r--r--arch/unicore32/include/asm/io.h9
-rw-r--r--arch/unicore32/mm/Makefile2
-rw-r--r--arch/unicore32/mm/iomap.c56
4 files changed, 10 insertions, 60 deletions
diff --git a/arch/unicore32/Kconfig b/arch/unicore32/Kconfig
index 7f65018e64ac..4a36db45fb3d 100644
--- a/arch/unicore32/Kconfig
+++ b/arch/unicore32/Kconfig
@@ -30,6 +30,9 @@ config GENERIC_CLOCKEVENTS
30config GENERIC_CSUM 30config GENERIC_CSUM
31 def_bool y 31 def_bool y
32 32
33config GENERIC_IOMAP
34 def_bool y
35
33config NO_IOPORT 36config NO_IOPORT
34 bool 37 bool
35 38
diff --git a/arch/unicore32/include/asm/io.h b/arch/unicore32/include/asm/io.h
index d73457c1800a..2483fcbadbe4 100644
--- a/arch/unicore32/include/asm/io.h
+++ b/arch/unicore32/include/asm/io.h
@@ -18,6 +18,7 @@
18#include <asm/memory.h> 18#include <asm/memory.h>
19#include <asm/system.h> 19#include <asm/system.h>
20 20
21#define PCI_IOBASE io_p2v(PKUNITY_PCILIO_BASE)
21#include <asm-generic/io.h> 22#include <asm-generic/io.h>
22 23
23/* 24/*
@@ -38,9 +39,6 @@ extern void __uc32_iounmap(volatile void __iomem *addr);
38#define ioremap_cached(cookie, size) __uc32_ioremap_cached(cookie, size) 39#define ioremap_cached(cookie, size) __uc32_ioremap_cached(cookie, size)
39#define iounmap(cookie) __uc32_iounmap(cookie) 40#define iounmap(cookie) __uc32_iounmap(cookie)
40 41
41extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
42extern void ioport_unmap(void __iomem *addr);
43
44/* 42/*
45 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 43 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
46 * access 44 * access
@@ -48,5 +46,10 @@ extern void ioport_unmap(void __iomem *addr);
48#undef xlate_dev_mem_ptr 46#undef xlate_dev_mem_ptr
49#define xlate_dev_mem_ptr(p) __va(p) 47#define xlate_dev_mem_ptr(p) __va(p)
50 48
49#define HAVE_ARCH_PIO_SIZE
50#define PIO_OFFSET (unsigned int)(PCI_IOBASE)
51#define PIO_MASK (unsigned int)(IO_SPACE_LIMIT)
52#define PIO_RESERVED (PIO_OFFSET + PIO_MASK + 1)
53
51#endif /* __KERNEL__ */ 54#endif /* __KERNEL__ */
52#endif /* __UNICORE_IO_H__ */ 55#endif /* __UNICORE_IO_H__ */
diff --git a/arch/unicore32/mm/Makefile b/arch/unicore32/mm/Makefile
index f3ff41039f51..46c166699319 100644
--- a/arch/unicore32/mm/Makefile
+++ b/arch/unicore32/mm/Makefile
@@ -3,7 +3,7 @@
3# 3#
4 4
5obj-y := extable.o fault.o init.o pgd.o mmu.o 5obj-y := extable.o fault.o init.o pgd.o mmu.o
6obj-y += iomap.o flush.o ioremap.o 6obj-y += flush.o ioremap.o
7 7
8obj-$(CONFIG_SWIOTLB) += dma-swiotlb.o 8obj-$(CONFIG_SWIOTLB) += dma-swiotlb.o
9 9
diff --git a/arch/unicore32/mm/iomap.c b/arch/unicore32/mm/iomap.c
deleted file mode 100644
index a7e1a3d2e069..000000000000
--- a/arch/unicore32/mm/iomap.c
+++ /dev/null
@@ -1,56 +0,0 @@
1/*
2 * linux/arch/unicore32/mm/iomap.c
3 *
4 * Code specific to PKUnity SoC and UniCore ISA
5 *
6 * Copyright (C) 2001-2010 GUAN Xue-tao
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 * Map IO port and PCI memory spaces so that {read,write}[bwl] can
13 * be used to access this memory.
14 */
15#include <linux/module.h>
16#include <linux/pci.h>
17#include <linux/ioport.h>
18#include <linux/io.h>
19
20#ifdef __io
21void __iomem *ioport_map(unsigned long port, unsigned int nr)
22{
23 /* we map PC lagcy 64K IO port to PCI IO space 0x80030000 */
24 return (void __iomem *) (unsigned long)
25 io_p2v((port & 0xffff) + PKUNITY_PCILIO_BASE);
26}
27EXPORT_SYMBOL(ioport_map);
28
29void ioport_unmap(void __iomem *addr)
30{
31}
32EXPORT_SYMBOL(ioport_unmap);
33#endif
34
35#ifdef CONFIG_PCI
36void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
37{
38 resource_size_t start = pci_resource_start(dev, bar);
39 resource_size_t len = pci_resource_len(dev, bar);
40 unsigned long flags = pci_resource_flags(dev, bar);
41
42 if (!len || !start)
43 return NULL;
44 if (maxlen && len > maxlen)
45 len = maxlen;
46 if (flags & IORESOURCE_IO)
47 return ioport_map(start, len);
48 if (flags & IORESOURCE_MEM) {
49 if (flags & IORESOURCE_CACHEABLE)
50 return ioremap(start, len);
51 return ioremap_nocache(start, len);
52 }
53 return NULL;
54}
55EXPORT_SYMBOL(pci_iomap);
56#endif