On Sun, Dec 19, 2010 at 9:18 PM, John Rigby <john.ri...@linaro.org> wrote:
> On Sun, Dec 19, 2010 at 5:56 PM, Alexander Holler <hol...@ahsoftware.de> 
> wrote:
>> Am 20.12.2010 01:39, schrieb John Rigby:
>>>
>>> On Sun, Dec 19, 2010 at 12:59 PM, Alexander Holler<hol...@ahsoftware.de>
>>>  wrote:
>>> ...
>>>>
>>>> No EEPROM on expansion board
>>>> Die ID #062a000400000000040365fa16019019
>>>> Hit any key to stop autoboot:  0
>>>> OMAP3 beagleboard.org # nand info
>>>>
>>>> Device 0: nand0, sector size 16 KiB
>>>> --------------------------------
>>>>
>>> I get the same output  without your change.  My gcc is linaro 4.4.5.
>>> I'll do some bisecting and try to find out what is going on.
>>
>> Bisecting won't help you here. Not if the problem was always there (which is
>> what I assume
> Sorry, I was confused about my results.
>
> If I replace include <asm/io.h> in drivers/mtd/nand/omap_gpmc.c with a
> copy of the original called orig_io.h:
> #include "orig_io.h"
>
> Nand starts working again.  So the problem seems to be isolated to this file.
>>
>> Regards,
>>
>> Alexander
>>
>

With your patch and the following hack nand works:


diff --git a/drivers/mtd/nand/omap_gpmc.c b/drivers/mtd/nand/omap_gpmc.c
index 99b9cef..5e94155 100644
--- a/drivers/mtd/nand/omap_gpmc.c
+++ b/drivers/mtd/nand/omap_gpmc.c
@@ -29,6 +29,8 @@
 #include <linux/mtd/nand_ecc.h>
 #include <nand.h>

+#define origwriteb(v,a)                        __arch_putb(v,a)
+
 static uint8_t cs;
 static struct nand_ecclayout hw_nand_oob = GPMC_NAND_HW_ECC_LAYOUT;

@@ -58,7 +60,7 @@ static void omap_nand_hwcontrol(struct mtd_info
*mtd, int32_t cmd,
        }

        if (cmd != NAND_CMD_NONE)
-               writeb(cmd, this->IO_ADDR_W);
+               origwriteb(cmd, this->IO_ADDR_W);
 }

 /*

The working assembly looks like this:

        if (cmd != NAND_CMD_NONE)
80024d28:       e3710001        cmn     r1, #1
                origwriteb(cmd, this->IO_ADDR_W);
80024d2c:       15933004        ldrne   r3, [r3, #4]
80024d30:       120110ff        andne   r1, r1, #255    ; 0xff
80024d34:       15c31000        strbne  r1, [r3]
80024d38:       e8bd8010        pop     {r4, pc}

The broken assembly looks like this:

        if (cmd != NAND_CMD_NONE)
80024d28:       e3710001        cmn     r1, #1
80024d2c:       08bd8010        popeq   {r4, pc}
                writeb(cmd, this->IO_ADDR_W);
80024d30:       e5933004        ldr     r3, [r3, #4]
80024d34:       e20110ff        and     r1, r1, #255    ; 0xff
80024d38:       e5c31000        strb    r1, [r3]
80024d3c:       e5d33000        ldrb    r3, [r3]
80024d40:       e8bd8010        pop     {r4, pc}

This is with gcc version "(Ubuntu/Linaro 4.4.4-14ubuntu4) 4.4.5".
I'll try a 4.5.2 version next and see what happens.

br,

John
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to