Hemant Pedanekar <[email protected]> writes:
> This patch takes out IO mapping macros from mach/io.h and puts them in
> mach/hardware.h avoiding need to include mach/io.h in various files such as
> serial.h, vmalloc.h etc.
This looks fine, pushing today.
Kevin
> The main reason to avoid inclusion of mach/io.h is, when default in/out macros
> are overridden by machine specific functions (e.g., in case of PCI I/O), they
> result into linker error. An example snippet and error snapshot is listed
> below.
>
> Following code in mach/io.h:
>
> #define inl(p) my_inl()
>
> static inline unsigned int my_inl(unsigned int addr)
> {
> if (IS_PCI_IO(addr))
> return pci_inl ();
> else
> return le32_to_cpu(__raw_readl(__typesafe_io(addr)));
> }
>
> leads to error:
> LD arch/arm/boot/compressed/vmlinux
> arch/arm/boot/compressed/misc.o: In function `my_inl':
> misc.c:(.text+0x2744): undefined reference to `pci_inl'
> make[2]: *** [arch/arm/boot/compressed/vmlinux] Error 1
>
> This is because mach/io.h gets included in arch/arm/boot/compressed/misc.c
> through mach/serial.h but pci.c file, which defines 'pci_inl' doesn't get
> built
> into compressed vmlinux.
>
> Signed-off-by: Hemant Pedanekar <[email protected]>
> ---
> arch/arm/mach-davinci/include/mach/hardware.h | 17 +++++++++++++++++
> arch/arm/mach-davinci/include/mach/io.h | 23 ++---------------------
> arch/arm/mach-davinci/include/mach/serial.h | 2 +-
> arch/arm/mach-davinci/include/mach/vmalloc.h | 2 +-
> 4 files changed, 21 insertions(+), 23 deletions(-)
>
> diff --git a/arch/arm/mach-davinci/include/mach/hardware.h
> b/arch/arm/mach-davinci/include/mach/hardware.h
> index 48c7793..41c8938 100644
> --- a/arch/arm/mach-davinci/include/mach/hardware.h
> +++ b/arch/arm/mach-davinci/include/mach/hardware.h
> @@ -24,4 +24,21 @@
> /* System control register offsets */
> #define DM64XX_VDD3P3V_PWDN 0x48
>
> +/*
> + * I/O mapping
> + */
> +#define IO_PHYS 0x01c00000
> +#define IO_OFFSET 0xfd000000 /* Virtual IO = 0xfec00000 */
> +#define IO_SIZE 0x00400000
> +#define IO_VIRT (IO_PHYS + IO_OFFSET)
> +#define io_v2p(va) ((va) - IO_OFFSET)
> +#define __IO_ADDRESS(x) ((x) + IO_OFFSET)
> +#define IO_ADDRESS(pa) IOMEM(__IO_ADDRESS(pa))
> +
> +#ifdef __ASSEMBLER__
> +#define IOMEM(x) x
> +#else
> +#define IOMEM(x) ((void __force __iomem *)(x))
> +#endif
> +
> #endif /* __ASM_ARCH_HARDWARE_H */
> diff --git a/arch/arm/mach-davinci/include/mach/io.h
> b/arch/arm/mach-davinci/include/mach/io.h
> index 2479785..62b0a90 100644
> --- a/arch/arm/mach-davinci/include/mach/io.h
> +++ b/arch/arm/mach-davinci/include/mach/io.h
> @@ -14,18 +14,6 @@
> #define IO_SPACE_LIMIT 0xffffffff
>
> /*
> - *
> ----------------------------------------------------------------------------
> - * I/O mapping
> - *
> ----------------------------------------------------------------------------
> - */
> -#define IO_PHYS 0x01c00000
> -#define IO_OFFSET 0xfd000000 /* Virtual IO = 0xfec00000 */
> -#define IO_SIZE 0x00400000
> -#define IO_VIRT (IO_PHYS + IO_OFFSET)
> -#define io_v2p(va) ((va) - IO_OFFSET)
> -#define __IO_ADDRESS(x) ((x) + IO_OFFSET)
> -
> -/*
> * We don't actually have real ISA nor PCI buses, but there is so many
> * drivers out there that might just work if we fake them...
> */
> @@ -33,19 +21,12 @@
> #define __mem_pci(a) (a)
> #define __mem_isa(a) (a)
>
> -#define IO_ADDRESS(pa) IOMEM(__IO_ADDRESS(pa))
> -
> -#ifdef __ASSEMBLER__
> -#define IOMEM(x) x
> -#else
> -#define IOMEM(x) ((void __force __iomem *)(x))
> -
> +#ifndef __ASSEMBLER__
> #define __arch_ioremap(p, s, t) davinci_ioremap(p, s, t)
> #define __arch_iounmap(v) davinci_iounmap(v)
>
> void __iomem *davinci_ioremap(unsigned long phys, size_t size,
> unsigned int type);
> void davinci_iounmap(volatile void __iomem *addr);
> -
> -#endif /* __ASSEMBLER__ */
> +#endif
> #endif /* __ASM_ARCH_IO_H */
> diff --git a/arch/arm/mach-davinci/include/mach/serial.h
> b/arch/arm/mach-davinci/include/mach/serial.h
> index 57e68e6..a584697 100644
> --- a/arch/arm/mach-davinci/include/mach/serial.h
> +++ b/arch/arm/mach-davinci/include/mach/serial.h
> @@ -11,7 +11,7 @@
> #ifndef __ASM_ARCH_SERIAL_H
> #define __ASM_ARCH_SERIAL_H
>
> -#include <mach/io.h>
> +#include <mach/hardware.h>
>
> #define DAVINCI_MAX_NR_UARTS 3
> #define DAVINCI_UART0_BASE (IO_PHYS + 0x20000)
> diff --git a/arch/arm/mach-davinci/include/mach/vmalloc.h
> b/arch/arm/mach-davinci/include/mach/vmalloc.h
> index ad51625..d49646a 100644
> --- a/arch/arm/mach-davinci/include/mach/vmalloc.h
> +++ b/arch/arm/mach-davinci/include/mach/vmalloc.h
> @@ -8,7 +8,7 @@
> * is licensed "as is" without any warranty of any kind, whether express
> * or implied.
> */
> -#include <mach/io.h>
> +#include <mach/hardware.h>
>
> /* Allow vmalloc range until the IO virtual range minus a 2M "hole" */
> #define VMALLOC_END (IO_VIRT - (2<<20))
> --
> 1.6.2.4
>
> _______________________________________________
> Davinci-linux-open-source mailing list
> [email protected]
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source