Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

U-Boot fails to generate for PX30 #3

Closed
StefanLellwitz opened this issue Jan 6, 2022 · 5 comments
Closed

U-Boot fails to generate for PX30 #3

StefanLellwitz opened this issue Jan 6, 2022 · 5 comments

Comments

@StefanLellwitz
Copy link

Not possible to build U-Boot for PX30.

| Platform PX30 is build OK, with exist .config
| 
| Thu Jan  6 10:27:56 AM UTC 2022
| NOTE: u-boot: Generating idblock.img from loader.bin
| unpack entry(px30_ddr_333MHz_v1)
| unpack entry(px30_usbplug_v1)
| unpack entry(FlashData)
| unpack entry(FlashBoot)
| unpack success
| Error: SPL image is too large (size 0x3000 than 0x2800)
| Error: Bad parameters for image type
| Usage: ./tools/mkimage -l image
|           -l ==> list image header information
|        ./tools/mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
|           -A ==> set architecture to 'arch'
|           -O ==> set operating system to 'os'
|           -T ==> set image type to 'type'
|           -C ==> set compression type 'comp'
|           -a ==> set load address to 'addr' (hex)
|           -e ==> set entry point to 'ep' (hex)
|           -n ==> set image name to 'name'
|           -d ==> use image data from 'datafile'
|           -x ==> set XIP (execute in place)
|        ./tools/mkimage [-D dtc_options] [-f fit-image.its|-f auto|-F] [-b  [-b ]] [-i ] fit-image
|             file is used with -f auto, it may occur multiple times.
|           -D => set all options for device tree compiler
|           -f => input filename for FIT source
|           -i => input filename for ramdisk file
|           -v => set FIT image version in decimal
| Signing / verified boot not supported (CONFIG_FIT_SIGNATURE undefined)
|        ./tools/mkimage -V ==> print version information and exit
| Use '-T list' to see a list of available image types
| WARNING: exit code 1 from a shell command.

This problem exists since 413d2f5.
Before px30_ddr_333MHz_v1.15.bin was exactly 10.240 Bytes (= 0x2800) and everything was fine.
But since update to px30_ddr_333MHz_v1.16.bin it is 10.248 Bytes and therefore does not fit.

@JeffyCN
Copy link
Owner

JeffyCN commented Jan 6, 2022

please contact the rockchip bsp u-boot maintainer about this issue, likely to be chenjh@rock-chips.com.

this repo is just a mirror, i don't know much about this u-boot...as far as i know, the spl size limit here should be the chip's sram size, and bootroom would load ddr init code(spl) into it before ddr inited.

so guessing they need to double check the sram size or truncate the ddr bin.

there seems a few meaningless padding at the end:
00027f0 0000 0000 0030 0000 0004 0000 ffff ffff
0002800 ffff ffff beaf dead

so you can try to truncate that bin to the expected size

@JeffyCN JeffyCN closed this as completed Jan 6, 2022
@JeffyCN
Copy link
Owner

JeffyCN commented Jan 7, 2022

hmm, tested on rk3399, the ddr binary's padding bytes are important.

checking px30's TRM, the "Chapter 6 Embedded SRAM" says "SYSTEM_SRAM Provide 16KB access space", so guessing the 0x2800 should be 0x4000 - (bootrom's reserved size(mostly stack, and likely to be 4K))

@StefanLellwitz
Copy link
Author

Hi Jeffy, thanks for reviewing this.

checking px30's TRM, the "Chapter 6 Embedded SRAM" says "SYSTEM_SRAM Provide 16KB access space", so guessing the 0x2800 should be 0x4000

This was the whole reason for my Pull Request #4. I found this information of 16K SYSTEM_SRAM in PX30 datasheet. But I wasn't sure about that. So the absolute minimum which works is 12K (0x3000).
But should be rather 0x4000 based on this information I guess...
Anyway, this seems to be wrong.

I will contact U-Boot maintainer as you suggested.

@StefanLellwitz
Copy link
Author

0x4000 - (bootrom's reserved size(mostly stack, and likely to be 4K))

Sorry, didn't get it. Would be 0x3000 then.

@JeffyCN
Copy link
Owner

JeffyCN commented Jan 7, 2022

0x4000 - (bootrom's reserved size(mostly stack, and likely to be 4K))

Sorry, didn't get it. Would be 0x3000 then.

right, the bootrom is close-source, so the reserved size(6k) in the original commit might just be a guess value.

anyway, the bootrom guys did confirm it's 4k reserved in px30/3326. the fix patch is going through the rockchip internal review flow now.

JeffyCN pushed a commit that referenced this issue Mar 16, 2022
commit 2fa7d94 upstream.

The first commit cited below attempts to fix the off-by-one error that
appeared in some comparisons with an open range. Due to this error,
arithmetically equivalent pieces of code could get different verdicts
from the verifier, for example (pseudocode):

  // 1. Passes the verifier:
  if (data + 8 > data_end)
      return early
  read *(u64 *)data, i.e. [data; data+7]

  // 2. Rejected by the verifier (should still pass):
  if (data + 7 >= data_end)
      return early
  read *(u64 *)data, i.e. [data; data+7]

The attempted fix, however, shifts the range by one in a wrong
direction, so the bug not only remains, but also such piece of code
starts failing in the verifier:

  // 3. Rejected by the verifier, but the check is stricter than in #1.
  if (data + 8 >= data_end)
      return early
  read *(u64 *)data, i.e. [data; data+7]

The change performed by that fix converted an off-by-one bug into
off-by-two. The second commit cited below added the BPF selftests
written to ensure than code chunks like #3 are rejected, however,
they should be accepted.

This commit fixes the off-by-two error by adjusting new_range in the
right direction and fixes the tests by changing the range into the
one that should actually fail.

Fixes: fb2a311 ("bpf: fix off by one for range markings with L{T, E} patterns")
Fixes: b37242c ("bpf: add test cases to bpf selftests to cover all access tests")
Signed-off-by: Maxim Mikityanskiy <maximmi@nvidia.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20211130181607.593149-1-maximmi@nvidia.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
JeffyCN pushed a commit that referenced this issue Jan 11, 2023
thread1:
  1)control(MPP_DEC_SET_EXT_BUF_GROUP)
  2)mpp_buffer_group_set_callback
    p->callback = callback;
thread2:
  1)mpp_buffer_commit
  2)mpp_buffer_create
    group->callback(group->arg, group);
    But arg is NULL now.

backtrace:
  #00 (Mpp::notify(void*))
  #1 (mpp_buffer_create+712)
  #2 (mpp_buffer_import_with_tag+212)
  #3 (commit_memory_handle+116)

Signed-off-by: Grey Li <grey.li@rock-chips.com>
Change-Id: Id50e2f1b46d127c8bf0fe8080751949fcccc6e25
JeffyCN pushed a commit that referenced this issue Apr 14, 2024
Fixed a crash issue in mpp_destroy stage caused by calling members of a recycled parser thread.

crash backtrace:
#00 pc 00084882  /apex/com.android.runtime/lib/bionic/libc.so (pthread_mutex_lock+6)
#1 pc 00081434  /vendor/lib/libmpp.so (mpp_dec_notify_normal(MppDecImpl_t*, unsigned int)+32)
#2 pc 0007d6cc  /vendor/lib/libmpp.so (mpp_dec_callback_slot(char const*, void*, int, void*)+112)
#3 pc 000937f0  /vendor/lib/libmpp.so (mpp_buf_slot_clr_flag+944)
#4 pc 000da960  /vendor/lib/libmpp.so (mpp_hevc_unref_frame+168)
#5 pc 000d1c50  /vendor/lib/libmpp.so (h265d_deinit+32)
#6 pc 00081908  /vendor/lib/libmpp.so (mpp_parser_deinit+40)
#7 pc 0007e24c  /vendor/lib/libmpp.so (mpp_dec_deinit+548)
#8 pc 0006b4f0  /vendor/lib/libmpp.so (Mpp::clear()+104)
#9 pc 0006b61c  /vendor/lib/libmpp.so (Mpp::~Mpp()+12)
#10 pc 0006f7e0  /vendor/lib/libmpp.so (mpp_destroy+152)
#11 pc 00003d1c  /vendor/bin/mpi_dec_test (dec_decode+984)


Change-Id: I985168aa6ef30a265fce17c2d9765c17a24075c8
Signed-off-by: Yanjun Liao <yanjun.liao@rock-chips.com>
JeffyCN pushed a commit that referenced this issue Apr 14, 2024
Hal buffer one_used marking will be wrong when reencoding.

Error log:
    "hal_bufs: hal_bufs_get_buf invalid input impl 0xf3500a60 buf_idx 4"
backtrace:
  #00 pc 0023e39c  /vendor/lib/libmpp.so (vepu580_h265_set_hw_address+328)
  #1 pc 0023f344  /vendor/lib/libmpp.so (hal_h265e_v580_gen_regs+2432)
  #2 pc 00233980  /vendor/lib/libmpp.so (hal_h265ev2_gen_regs+132)
  #3 pc 0008de04  /vendor/lib/libmpp.so (mpp_enc_hal_gen_regs+200)
  #4 pc 000805f0  /vendor/lib/libmpp.so (mpp_enc_normal(Mpp*, EncAsyncTaskInfo_t*)+1988)
  #5 pc 0007b380  /vendor/lib/libmpp.so (try_proc_normal_task(MppEncImpl_t*, EncAsyncTaskInfo_t*)+128)
  #6 pc 00078e50  /vendor/lib/libmpp.so (mpp_enc_thread+1340)

Change-Id: I5137a3db0ff63ee55a83c2d63da4430d2fc362b1
Signed-off-by: Johnson Ding <johnson.ding@rock-chips.com>
JeffyCN pushed a commit that referenced this issue Apr 14, 2024
BUG is reported from https://redmine.rock-chips.com/issues/464206

Thread 18 (LWP 2440):
#0  __lll_lock_wait (futex=0x7f34000d48, private=0) at lowlevellock.c:52
#1  0x0000007fab5b1540 in __GI___pthread_mutex_lock (mutex=0x7f34000d48) at pthread_mutex_lock.c:115
#2  0x0000007fa9e0299c in dec_vproc_signal (ctx=0x7f34001260) at ../git/mpp/vproc/mpp_dec_vproc.cpp:929
#3  0x0000007fa9df5bdc in mpp_dec_notify (ctx=0x7f602be600, flag=1088) at ../git/mpp/codec/mpp_dec.cpp:956
#4  0x0000007fa9e0ef30 in mpp_buffer_ref_dec (buffer=0x7f6403f6c8, caller=caller@entry=0x7fa9ee300c "mpp_frame_deinit") at ../git/mpp/base/mpp_buffer_impl.cpp:509
#5  0x0000007fa9e0fb84 in mpp_buffer_put_with_caller (buffer=<optimized out>, caller=caller@entry=0x7fa9ee300c "mpp_frame_deinit") at ../git/mpp/base/mpp_buffer.cpp:105
#6  0x0000007fa9e11820 in mpp_frame_deinit (frame=frame@entry=0x7f602ec340) at ../git/mpp/base/mpp_frame.cpp:85
#7  0x0000007fabd6bf4c in rkmpp_release_frame (opaque=<optimized out>, data=0x7f602ba600 <error: Cannot access memory at address 0x7f602ba600>) at src/libavcodec/rkmppdec.c:339
#8  0x0000007fab9547dc in buffer_replace (src=0x0, dst=<optimized out>) at src/libavutil/buffer.c:133
#9  av_buffer_unref (buf=<optimized out>) at src/libavutil/buffer.c:144
#10 0x0000007fac714bb8 in mp_image_destructor (ptr=0x7f60252c80) at ../../../../../../sources/mpv/video/mp_image.c:209
#11 0x0000007fac748d40 in ta_free (ptr=0x7f60252c80) at ../../../../../../sources/mpv/ta/ta.c:244
#12 0x0000007fac715178 in mp_image_unrefp (p_img=p_img@entry=0x7f4c00bfc0) at ../../../../../../sources/mpv/video/mp_image.c:472
#13 0x0000007fac73396c in wlbuf_pool_entry_release (data=0x7f4c00bfa0, wl_buffer=<optimized out>) at ../../../../../../sources/mpv/video/out/wlbuf_pool.c:132
#14 0x0000007fb4cfe328 in ffi_call_SYSV () at ../libffi-3.3/src/aarch64/sysv.S:114
#15 0x0000007fb4cfdb44 in ffi_call_int (cif=cif@entry=0x7f70fdec80, fn=0x7f70fdeca0, orig_rvalue=orig_rvalue@entry=0x0, avalue=0x10, avalue@entry=0x7f70fded50, closure=0x200000001, closure@entry=0x0) at ../libffi-3.3/src/aarch64/ffi.c:747
#16 0x0000007fb4cfdf24 in ffi_call (cif=cif@entry=0x7f70fdec80, fn=<optimized out>, rvalue=rvalue@entry=0x0, avalue=avalue@entry=0x7f70fded50) at ../libffi-3.3/src/aarch64/ffi.c:756
#17 0x0000007faa49c7c0 in wl_closure_invoke (closure=0x7f4c00bff0, flags=<optimized out>, target=<optimized out>, opcode=0, data=<optimized out>) at ../wayland-1.22.0/src/connection.c:1025
#18 0x0000007faa499df0 in dispatch_event (display=display@entry=0x7f4c001d40, queue=<optimized out>) at ../wayland-1.22.0/src/wayland-client.c:1644
#19 0x0000007faa49b2c8 in dispatch_queue (queue=0x7f4c001e30, display=0x7f4c001d40) at ../wayland-1.22.0/src/wayland-client.c:1790
#20 wl_display_dispatch_queue_pending (display=0x7f4c001d40, queue=0x7f4c001e30) at ../wayland-1.22.0/src/wayland-client.c:2032
#21 0x0000007faa49b2f4 in wl_display_dispatch_pending (display=<optimized out>) at ../wayland-1.22.0/src/wayland-client.c:2095
#22 0x0000007fac73e2cc in vo_wayland_dispatch_events (wl=0x7f4c000e40, nfds=nfds@entry=2, timeout=timeout@entry=100) at ../../../../../../sources/mpv/video/out/wayland_common.c:1933
#23 0x0000007fac741d7c in vo_wayland_wait_events_timeout (vo=vo@entry=0x7f600abed0, timeout_ms=timeout_ms@entry=100) at ../../../../../../sources/mpv/video/out/wayland_common.c:2594
#24 0x0000007fac73baf4 in draw_frame (vo=0x7f600abed0, frame=0x7f302063b0) at ../../../../../../sources/mpv/video/out/vo_dmabuf_wayland.c:1113
#25 0x0000007fac7360c4 in render_frame (vo=0x7f600abed0) at ../../../../../../sources/mpv/video/out/vo.c:984
#26 vo_thread (ptr=0x7f600abed0) at ../../../../../../sources/mpv/video/out/vo.c:1123
#27 0x0000007fab5af370 in start_thread (arg=0x7f72ffbe06) at pthread_create.c:477
#28 0x0000007fab51bedc in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78

Thread 14 (LWP 3455):
#0  __lll_lock_wait (futex=0x7f60208040, private=0) at lowlevellock.c:52
#1  0x0000007fab5b1540 in __GI___pthread_mutex_lock (mutex=mutex@entry=0x7f60208040) at pthread_mutex_lock.c:115
#2  0x0000007fa9e0ef48 in mpp_buffer_ref_dec (buffer=0x7f6406fee8, caller=caller@entry=0x7fa9ee1ae7 "check_entry_unused") at ../git/mpp/base/mpp_buffer_impl.cpp:503
#3  0x0000007fa9e0fb84 in mpp_buffer_put_with_caller (buffer=<optimized out>, caller=caller@entry=0x7fa9ee1ae7 "check_entry_unused") at ../git/mpp/base/mpp_buffer.cpp:105
#4  0x0000007fa9e0bf1c in check_entry_unused (entry=0x7f601ef530, impl=0x7f60263ec0) at ../git/mpp/base/mpp_buf_slot.cpp:627
#5  mpp_buf_slot_clr_flag (slots=0x7f60263ec0, index=<optimized out>, type=type@entry=SLOT_QUEUE_USE) at ../git/mpp/base/mpp_buf_slot.cpp:919
#6  0x0000007fa9e00eb0 in dec_vproc_clr_prev0 (ctx=ctx@entry=0x7f34001260) at ../git/mpp/vproc/mpp_dec_vproc.cpp:149
#7  0x0000007fa9e00fd0 in dec_vproc_clr_prev (ctx=ctx@entry=0x7f34001260) at ../git/mpp/vproc/mpp_dec_vproc.cpp:180
#8  0x0000007fa9e012b8 in dec_vproc_thread (data=0x7f34001260) at ../git/mpp/vproc/mpp_dec_vproc.cpp:631
#9  0x0000007fab5af370 in start_thread (arg=0x7f47ffdf16) at pthread_create.c:477
#10 0x0000007fab51bedc in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I742e55e745c46a4adb229e2f6f0e2a2c3498e369
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants