radxa / u-boot

U-Boot tree for pending commits
43 stars 89 forks source link

`bootefi hello` failed: "Synchronous Abort" handler, esr 0x96000010 #12

Open yrzr opened 1 year ago

yrzr commented 1 year ago

I enabled CMD_BOOTEFI in u-boot config:

# diff default_config .config
247a248
> CONFIG_SMBIOS_PRODUCT_NAME="evb_rk3588"
329c330
< CONFIG_DISABLE_CONSOLE=y
---
> # CONFIG_DISABLE_CONSOLE is not set
515a517,519
> CONFIG_CMD_BOOTEFI=y
> CONFIG_CMD_BOOTEFI_HELLO_COMPILE=y
> # CONFIG_CMD_BOOTEFI_HELLO is not set
1601a1606,1607
> CONFIG_GENERATE_SMBIOS_TABLE=y
> CONFIG_SMBIOS_MANUFACTURER="rockchip"
1604c1610,1611
< # CONFIG_EFI_LOADER is not set
---
> CONFIG_EFI_LOADER=y
> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y

build and write the u-boot into sdcard:

dd if=idbloader.img of=/dev/mmcblk0 seek=64
dd if=u-boot.itb of=/dev/mmcblk0 seek=16384

try to boot efi with command bootefi hello:

U-Boot 2017.09-g75b12f8295-220414 #root (Nov 19 2022 - 02:14:31 +0000)

Model: Radxa ROCK 5B
PreSerial: 2, raw, 0xfeb50000
DRAM:  15.7 GiB
Sysmem: init
Relocation Offset: edb65000
Relocation fdt: eb9f9658 - eb9fecd8
CR: M/C/I
Using default environment

Hotkey: ctrl+c
no mmc device at slot 1
mmc@fe2c0000: 1 (SD), mmc@fe2e0000: 0
Bootdev(atags): mmc 1
MMC1: Legacy, 52Mhz
PartType: EFI
DM: v2
No misc partition
boot mode: None
No resource partition
No resource partition
No resource partition
Failed to load DTB, ret=-19
No find valid DTB, ret=-22
Failed to get kernel dtb, ret=-22
Model: Radxa ROCK 5B
CLK: (sync kernel. arm: enter 1008000 KHz, init 1008000 KHz, kernel 0N/A)
  b0pll 24000 KHz
  b1pll 24000 KHz
  lpll 24000 KHz
  v0pll 24000 KHz
  aupll 24000 KHz
  cpll 1500000 KHz
  gpll 1188000 KHz
  npll 24000 KHz
  ppll 1100000 KHz
  aclk_center_root 702000 KHz
  pclk_center_root 100000 KHz
  hclk_center_root 396000 KHz
  aclk_center_low_root 500000 KHz
  aclk_top_root 750000 KHz
  pclk_top_root 100000 KHz
  aclk_low_top_root 396000 KHz
No misc partition
Net:   No ethernet found.
Hit key to stop autoboot('CTRL+C'):  0
=> <INTERRUPT>
=> bootefi hello
## Starting EFI application at 00000000 ...
Scanning disk flash@0.blk...
SF: Detected sfc_nor with page size 256 Bytes, erase size 4 KiB, total 16 MiB
Scanning disk flash@1.blk...
Scanning disk mmc@fe2c0000.blk...
Card did not respond to voltage select!
mmc_init: -95, time 14
Scanning disk mmc@fe2e0000.blk...
MMC: block number 0x1 exceeds max(0x0)
MMC: block number 0x1 exceeds max(0x0)
Found 4 disks
"Synchronous Abort" handler, esr 0x96000010

* Reason:        Exception from a Data abort, from current exception level
* PC         =   00000000002a81b0
* LR         =   000000000028c03c
* SP         =   00000000eb9f8bd0
* ESR_EL2    =   0000000096000010
* Reloc Off  =   00000000edb65000

x0 : 0000000000000002 x1 : 00000000e69f800a
x2 : 0000000000000002 x3 : 000000000000003b
x4 : 0000000000000000 x5 : 0000000000000002
x6 : 0000000000000000 x7 : 00000000ebd82a00
x8 : 0000000000000001 x9 : 0000000000000008
x10: 0000000000000006 x11: 000000000000000d
x12: 0000000000000006 x13: 000000000001869f
x14: 00000000eb9f9658 x15: 0000000000000002
x16: 00000000eddaa120 x17: 0000000000000084
x18: 00000000eb9ffce0 x19: 0000000000000000
x20: 00000000e69f8008 x21: 00000000ebd660e0
x22: 00000000ede59868 x23: 0000000000000000
x24: 0000000000000000 x25: 00000000ede37624
x26: 0000000000000000 x27: 0000000000000104
x28: 00000000ebd66150 x29: 00000000eb9f8db0

Call trace:
  PC:   [< 002a81b0 >]
  LR:   [< 0028c03c >]

Stack:
        [< 002a81b0 >]
        [< 0028c144 >]
        [< 0028c1e4 >]
        [< 0028aa6c >]
        [< 00209154 >]
        [< 0020942c >]
        [< 0022af3c >]
        [< 0021842c >]
        [< 002185dc >]
        [< 00218b18 >]
        [< 0022a5d4 >]
        [< 00216ad8 >]
        [< 00219300 >]
        [< 002908fc >]
        [< 00219578 >]
        [< 00201e18 >]

Copy info from "Call trace..." to a file(eg. dump.txt), and run
command in your U-Boot project: ./scripts/stacktrace.sh dump.txt

Resetting CPU ...

### ERROR ### Please RESET the board ###

ERROR occurs, and the u-boot cannot boot efi.

Any idea how to solve the problem?

RadxaYuntian commented 1 year ago

The legend says:

Amicus Lumiae, [11/17/22 7:53 PM] https://t.me/UEFIonRockchip/545
It seems like Rockchip's plan was originally to go with a full featured build of uboot for SystemReady compliance, before realizing uboot's UEFI implementation is too immature for that

Amicus Lumiae, [11/17/22 7:54 PM] https://t.me/UEFIonRockchip/546
So they crippled uboot in compile-time configuration, and pivoted to edk2 for SystemReady

So I'd assume bootefi is currently broken in the source code and is unlikely to be fixed by Rockchip.

The above comment is not from Rockchip, but community speculation based on publicly available source code.

As said above Rockchip is working on a EDK2 implementation for UEFI boot though.

sjg20 commented 1 year ago

This seems to work fine on rockpro64-rk3399

Perhaps the bug was fixed, or this is specific to rk3388 ?

RadxaYuntian commented 1 year ago

I think this is specific to RK3588. However, we are closely following upstream U-Boot development, and we are looking to use that for our RK3588 based products later on. Upstream U-Boot should not have this issue.

sjg20 commented 1 year ago

You are right. With upstream:

=> bootefi hello Card did not respond to voltage select! : -110 Booting /MemoryMapped(0x0,0xeff94d70,0x31b0) Hello, world! Running on UEFI 2.10 Have SMBIOS table Have device tree Load options: File path: Boot device: /MemoryMapped(0x0,0xeff94d70,0x31b0)

How far away is your downstream tree from upstream?

RadxaYuntian commented 1 year ago

Further than a galaxy far, far away. Once upstream U-Boot is good for our use case we will fully switch to it instead of backporting parts of it to Rockchip U-Boot.