> Hi Mark,
>
> Don't you have JTAG debugger so you could find where exactly it hangs?
> Or you can try adding debugging printf's to the source... I can't
> reproduce your problem myself so that info would be useful.

Okay, I think I've found the problem.

When *not* using JFFS2_CMDLINE mode, U-Boot tries to work out the MTD
table automatically (for me using NOR flash, it's in the function
get_part_sector_size_nor() in cmd_jffs2.c).

Without specifying CONFIG_JFFS2_PART_SIZE, part->size defaults to
0xffffffff (use whole device).

However, the scanning code contains the line ...

end_phys = start_phys + flash->size;

... which, in this case, simply sets end_phys to (start_phys - 1).

Then the code has the lines ...

if (flash->start[i] >= end_phys)
        break;

... which results in an instant break, finally leaving the calculated
sector size as 0 !!

The attached patch seems to work for me, but probably needs double-checking
on some other platforms.

Regards
Mark
---
This patch fixes the JFFS2 scanning code when not using
CONFIG_JFFS2_CMDLINE.

Signed-off-by: Mark Jackson <m...@mimc.co.uk>
---
 common/cmd_jffs2.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/common/cmd_jffs2.c b/common/cmd_jffs2.c
index d0a7cea..2f3b3a9 100644
--- a/common/cmd_jffs2.c
+++ b/common/cmd_jffs2.c
@@ -1814,7 +1814,12 @@ static inline u32 get_part_sector_size_nor(struct
mtdids *id, struct part_info *
        flash = &flash_info[id->num];

        start_phys = flash->start[0] + part->offset;
-       end_phys = start_phys + part->size;
+
+       if (part->size == SIZE_REMAINING) {
+               end_phys = start_phys + flash->size;
+       } else {
+               end_phys = start_phys + part->size;
+       }

        for (i = 0; i < flash->sector_count; i++) {
                if (flash->start[i] >= end_phys)
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to