extern struct sys_timer msm_timer;
 
+static void __init halibut_init_early(void)
+{
+       arch_ioremap_caller = __msm_ioremap_caller;
+}
+
 static void __init halibut_init_irq(void)
 {
        msm_init_irq();
        .atag_offset    = 0x100,
        .fixup          = halibut_fixup,
        .map_io         = halibut_map_io,
+       .init_early     = halibut_init_early,
        .init_irq       = halibut_init_irq,
        .init_machine   = halibut_init,
        .timer          = &msm_timer,
 
 
 extern struct sys_timer msm_timer;
 
+static void __init trout_init_early(void)
+{
+       arch_ioremap_caller = __msm_ioremap_caller;
+}
+
 static void __init trout_init_irq(void)
 {
        msm_init_irq();
        .atag_offset    = 0x100,
        .fixup          = trout_fixup,
        .map_io         = trout_map_io,
+       .init_early     = trout_init_early,
        .init_irq       = trout_init_irq,
        .init_machine   = trout_init,
        .timer          = &msm_timer,
 
 
 #define IO_SPACE_LIMIT 0xffffffff
 
-#define __arch_ioremap __msm_ioremap
-#define __arch_iounmap __iounmap
-
-void __iomem *__msm_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype);
-
 #define __io(a)                __typesafe_io(a)
 #define __mem_pci(a)    (a)
 
 
 #define MSM_AD5_PHYS          0xAC000000
 #define MSM_AD5_SIZE          (SZ_1M*13)
 
+#ifndef __ASSEMBLY__
+
+extern void __iomem *__msm_ioremap_caller(unsigned long phys_addr, size_t size,
+                                         unsigned int mtype, void *caller);
+
+#endif
 
 #endif
 
 }
 #endif /* CONFIG_ARCH_MSM7X30 */
 
-void __iomem *
-__msm_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype)
+void __iomem *__msm_ioremap_caller(unsigned long phys_addr, size_t size,
+                                  unsigned int mtype, void *caller)
 {
        if (mtype == MT_DEVICE) {
                /* The peripherals in the 88000000 - D0000000 range
                        mtype = MT_DEVICE_NONSHARED;
        }
 
-       return __arm_ioremap_caller(phys_addr, size, mtype,
-               __builtin_return_address(0));
+       return __arm_ioremap_caller(phys_addr, size, mtype, caller);
 }
-EXPORT_SYMBOL(__msm_ioremap);