i.MX28: Drop __naked function from spl_mem_init
authorMarek Vasut <marex@denx.de>
Fri, 16 Mar 2012 11:32:43 +0000 (11:32 +0000)
committerStefano Babic <sbabic@denx.de>
Tue, 27 Mar 2012 07:41:16 +0000 (09:41 +0200)
Instead of compiling the function and using the result as a constant, simply use
the constant.

NOTE: This patch works around bug:

  http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52546

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Tom Rini <trini@ti.com>
arch/arm/cpu/arm926ejs/mx28/spl_mem_init.c

index 43a90ff..911bbef 100644 (file)
@@ -173,22 +173,18 @@ void mx28_mem_setup_vddd(void)
                &power_regs->hw_power_vdddctrl);
 }
 
-void data_abort_memdetect_handler(void) __attribute__((naked));
-void data_abort_memdetect_handler(void)
-{
-       asm volatile("subs pc, r14, #4");
-}
-
 void mx28_mem_get_size(void)
 {
        struct mx28_digctl_regs *digctl_regs =
                (struct mx28_digctl_regs *)MXS_DIGCTL_BASE;
        uint32_t sz, da;
        uint32_t *vt = (uint32_t *)0x20;
+       /* The following is "subs pc, r14, #4", used as return from DABT. */
+       const uint32_t data_abort_memdetect_handler = 0xe25ef004;
 
        /* Replace the DABT handler. */
        da = vt[4];
-       vt[4] = (uint32_t)&data_abort_memdetect_handler;
+       vt[4] = data_abort_memdetect_handler;
 
        sz = get_ram_size((long *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE);
        writel(sz, &digctl_regs->hw_digctl_scratch0);