This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM3354: Falcon mode u-boot hangs on uImage

Part Number: AM3354

Hi all

I have one question about falcon mode in u-boot.

I used am335x custom Board.
I read below that uboot doc

- /doc/README.falcon
- /board/ti/am335x/README

I tried to modified uboot source code to use falcon mode FAT SD cards , I have a problem and I'm hoping that someone can help me.
it looks like args and umage are loaded but the process hang in Datei "include/blk.h" , in Function "blk_dread".
can someone tell me what could be the problem

DEBUG:

U-Boot SPL 2020.01-g15255345a (May 15 2020 - 09:34:59 +0000)

Trying to boot from MMC1
clock is disabled (0Hz)
clock is enabled (400000Hz)
clock is enabled (50000000Hz)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
part_init: try 'DOS': ret=0
spl: mmc boot mode: fs
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
FAT16, fat_sect: 8, fatlength: 136
Rootdir begins at cluster: 0, sector: 280, offset: 23000
Data begins at: 296
Sector size: 512, cluster size: 8
FAT read(sect=280), clust_size=8, read_size=8, DIRENTSPERBLOCK=d
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
reading args at pos u
Filesize: u bytes
u bytes
FAT16: entry: 0x0000001f = 31, offset: 0x001f = 31
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
FAT16: ret: 0x0000008b, entry: 0x0000001f, offset: 0x001f
gc - clustnum: 31, startsect: 544
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
FAT16: entry: 0x0000001f = 31, offset: 0x001f = 31
FAT16: ret: 0x0000008b, entry: 0x0000001f, offset: 0x001f
FAT16: entry: 0x0000008b = 139, offset: 0x008b = 139
FAT16: ret: 0x0000008c, entry: 0x0000008b, offset: 0x008b
FAT16: entry: 0x0000008c = 140, offset: 0x008c = 140
FAT16: ret: 0x0000008d, entry: 0x0000008c, offset: 0x008c
FAT16: entry: 0x0000008d = 141, offset: 0x008d = 141
FAT16: ret: 0x0000008e, entry: 0x0000008d, offset: 0x008d
FAT16: entry: 0x0000008e = 142, offset: 0x008e = 142
FAT16: ret: 0x0000008f, entry: 0x0000008e, offset: 0x008e
FAT16: entry: 0x0000008f = 143, offset: 0x008f = 143
FAT16: ret: 0x00000090, entry: 0x0000008f, offset: 0x008f
FAT16: entry: 0x00000090 = 144, offset: 0x0090 = 144
FAT16: ret: 0x00000091, entry: 0x00000090, offset: 0x0090
FAT16: entry: 0x00000091 = 145, offset: 0x0091 = 145
FAT16: ret: 0x00000092, entry: 0x00000091, offset: 0x0091
FAT16: entry: 0x00000092 = 146, offset: 0x0092 = 146
FAT16: ret: 0x00000093, entry: 0x00000092, offset: 0x0092
FAT16: entry: 0x00000093 = 147, offset: 0x0093 = 147
FAT16: ret: 0x00000094, entry: 0x00000093, offset: 0x0093
FAT16: entry: 0x00000094 = 148, offset: 0x0094 = 148
FAT16: ret: 0x00000095, entry: 0x00000094, offset: 0x0094
FAT16: entry: 0x00000095 = 149, offset: 0x0095 = 149
FAT16: ret: 0x00000096, entry: 0x00000095, offset: 0x0095
FAT16: entry: 0x00000096 = 150, offset: 0x0096 = 150
FAT16: ret: 0x00000097, entry: 0x00000096, offset: 0x0096
FAT16: entry: 0x00000097 = 151, offset: 0x0097 = 151
FAT16: ret: 0x00000098, entry: 0x00000097, offset: 0x0097
FAT16: entry: 0x00000098 = 152, offset: 0x0098 = 152
FAT16: ret: 0x00000099, entry: 0x00000098, offset: 0x0098
FAT16: entry: 0x00000099 = 153, offset: 0x0099 = 153
FAT16: ret: 0x0000009a, entry: 0x00000099, offset: 0x0099
FAT16: entry: 0x0000009a = 154, offset: 0x009a = 154
FAT16: ret: 0x0000009b, entry: 0x0000009a, offset: 0x009a
FAT16: entry: 0x0000009b = 155, offset: 0x009b = 155
FAT16: ret: 0x0000009c, entry: 0x0000009b, offset: 0x009b
FAT16: entry: 0x0000009c = 156, offset: 0x009c = 156
FAT16: ret: 0x0000009d, entry: 0x0000009c, offset: 0x009c
FAT16: entry: 0x0000009d = 157, offset: 0x009d = 157
FAT16: ret: 0x0000009e, entry: 0x0000009d, offset: 0x009d
FAT16: entry: 0x0000009e = 158, offset: 0x009e = 158
FAT16: ret: 0x0000009f, entry: 0x0000009e, offset: 0x009e
FAT16: entry: 0x0000009f = 159, offset: 0x009f = 159
FAT16: ret: 0x000000a0, entry: 0x0000009f, offset: 0x009f
FAT16: entry: 0x000000a0 = 160, offset: 0x00a0 = 160
FAT16: ret: 0x000000a1, entry: 0x000000a0, offset: 0x00a0
gc - clustnum: 139, startsect: 1408
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
FAT16, fat_sect: 8, fatlength: 136
Rootdir begins at cluster: 0, sector: 280, offset: 23000
Data begins at: 296
Sector size: 512, cluster size: 8
FAT read(sect=280), clust_size=8, read_size=8, DIRENTSPERBLOCK=d
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
reading uImage at pos u
Filesize: u bytes
u bytes
gc - clustnum: 1653, startsect: 13520
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
SPL: payload image: Linux-5.4.17-ge0fb72763f load addr: 0x80007fc0 size: 5759664
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
FAT16, fat_sect: 8, fatlength: 136
Rootdir begins at cluster: 0, sector: 280, offset: 23000
Data begins at: 296
Sector size: 512, cluster size: 8
FAT read(sect=280), clust_size=8, read_size=8, DIRENTSPERBLOCK=d
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
reading uImage at pos u
Filesize: u bytes
u bytes
FAT16: entry: 0x00000675 = 1653, offset: 0x0075 = 117
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function blk_dread
after: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)
in Function disk_read
after: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
FAT16: ret: 0x00000676, entry: 0x00000675, offset: 0x0075
FAT16: entry: 0x00000676 = 1654, offset: 0x0076 = 118
FAT16: ret: 0x00000677, entry: 0x00000676, offset: 0x0076
FAT16: entry: 0x00000677 = 1655, offset: 0x0077 = 119
FAT16: ret: 0x00000678, entry: 0x00000677, offset: 0x0077
FAT16: entry: 0x00000678 = 1656, offset: 0x0078 = 120
FAT16: ret: 0x00000679, entry: 0x00000678, offset: 0x0078
FAT16: entry: 0x00000679 = 1657, offset: 0x0079 = 121
FAT16: ret: 0x0000067a, entry: 0x00000679, offset: 0x0079
FAT16: entry: 0x0000067a = 1658, offset: 0x007a = 122
FAT16: ret: 0x0000067b, entry: 0x0000067a, offset: 0x007a
FAT16: entry: 0x0000067b = 1659, offset: 0x007b = 123
FAT16: ret: 0x0000067c, entry: 0x0000067b, offset: 0x007b
FAT16: entry: 0x0000067c = 1660, offset: 0x007c = 124
FAT16: ret: 0x0000067d, entry: 0x0000067c, offset: 0x007c
FAT16: entry: 0x0000067d = 1661, offset: 0x007d = 125
FAT16: ret: 0x0000067e, entry: 0x0000067d, offset: 0x007d
FAT16: entry: 0x0000067e = 1662, offset: 0x007e = 126
FAT16: ret: 0x0000067f, entry: 0x0000067e, offset: 0x007e

...

FAT16: ret: 0x00000bf1, entry: 0x00000bf0, offset: 0x05f0
FAT16: entry: 0x00000bf1 = 3057, offset: 0x05f1 = 1521
FAT16: ret: 0x00000bf2, entry: 0x00000bf1, offset: 0x05f1
FAT16: entry: 0x00000bf2 = 3058, offset: 0x05f2 = 1522
FAT16: ret: 0x00000bf3, entry: 0x00000bf2, offset: 0x05f2
gc - clustnum: 1653, startsect: 13520
in Datei fs/fat/fat.c
in Function disk_read
in Function disk_read
befor: ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf)
in Datei include/blk.h
in Function blk_dread
in Function blk_dread
befor: blks_read = block_dev->block_read(block_dev, start, blkcnt, buffer)

  • Ahmad Moutraji1 said:
    I tried to modified uboot source code to use falcon mode FAT SD cards , I have a problem and I'm hoping that someone can help me.
    it looks like args and umage are loaded but the process hang in Datei "include/blk.h" , in Function "blk_dread".
    can someone tell me what could be the problem

    First, do you have non-Falcon boot working (SPL->U-Boot->Kernel) correctly?

    Did you validate that your DDR setup is good (e.g, through 'memtester')?

    Regards, Andreas

  • hi Andreas,

    First, do you have non-Falcon boot working (SPL->U-Boot->Kernel) correctly?

    yes, it works properly

    Did you validate that your DDR setup is good (e.g, through 'memtester')

    yes, and my Board works properly

    Best Regards,

    Ahmad

  • Hi Ahmad,

    thanks for confirming those basics, that's a good starting point.

    Can you add a #define DEBUG to the top of common/spl/spl.c and re-post the log? I'm curious if you get a "Jumping to Linux" output or not. If not, this would point to something going wrong during loading, as you had suggested earlier.

    Regards, Andreas

  • hi Andreas,

    with add a #define DEBUG  to the top of common/spl/spl.c i do not have more debug information.

    Do you want to know a log from specific function? 

    Best Regards,

    Ahmad

  • Ahmad,

    Ahmad Moutraji1 said:
    with add a #define DEBUG  to the top of common/spl/spl.c i do not have more debug information.

    so it sounds like then it stops/crashes somewhere during the loading part, or shortly thereafter. At this point it's probably most efficient to use a JTAG debugger to see what the code is doing, and why it gets stuck. If you don't have this capability you should try to enable yourself to do that. Or, you can do additional printf() trace-type "debugging" of the loading code and everything that follows.

    Regards, Andreas

  • hi Andreas,

    thank you for your responses.

    I solved this Problem by changing SYS_SPL_MALLOC_START in my configuration.

    Regards

    Ahmad