Hello, Any comments on the patch?
Thanks, Hemant > -----Original Message----- > From: Pedanekar, Hemant > Sent: Wednesday, June 24, 2009 10:16 AM > To: [email protected] > Cc: Pedanekar, Hemant > Subject: [PATCH] davinci: Move IO device mapping macros from io.h to > hardware.h > > 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. > > 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
