Re: [PATCH v2 5/5] riscv: dts: starfive: jh7110-common: bootph-pre-ram hinting needed by boot loader

From: Heinrich Schuchardt
Date: Thu Apr 24 2025 - 06:55:01 EST


On 24.04.25 07:15, E Shattow wrote:


On 2/28/25 01:54, Maud Spierings wrote:

On 2/28/25 8:53 AM, E Shattow wrote:

On 2/6/25 19:01, Hal Feng wrote:
On 06.02.25 19:17, E Shattow wrote:
On 2/5/25 18:59, Hal Feng wrote:
On 2/5/2025 6:01 PM, Heinrich Schuchardt wrote:
On 2/5/25 08:57, Hal Feng wrote:
On 2/3/2025 9:37 AM, E Shattow wrote:
Add bootph-pre-ram hinting to jh7110-common.dtsi:
    - i2c5_pins and i2c-pins subnode for connection to eeprom
    - eeprom node
    - qspi flash configuration subnode
    - memory node
    - uart0 for serial console

    With this the U-Boot SPL secondary program loader may drop such
    overrides when using dt-rebasing with JH7110 OF_UPSTREAM board
targets.
Signed-off-by: E Shattow <e@xxxxxxxxxxxx>
---
   arch/riscv/boot/dts/starfive/jh7110-common.dtsi | 6 ++++++
   1 file changed, 6 insertions(+)

diff --git a/arch/riscv/boot/dts/starfive/jh7110-common.dtsi
b/arch/riscv/boot/dts/starfive/jh7110-common.dtsi
index 30c5f3487c8b..c9e7ae59ee7c 100644
--- a/arch/riscv/boot/dts/starfive/jh7110-common.dtsi
+++ b/arch/riscv/boot/dts/starfive/jh7110-common.dtsi
@@ -28,6 +28,7 @@ chosen {
       memory@40000000 {
           device_type = "memory";
           reg = <0x0 0x40000000 0x1 0x0>;
+        bootph-pre-ram;
       };
         gpio-restart {
@@ -247,6 +248,7 @@ emmc_vdd: aldo4 {
       };
         eeprom@50 {
+        bootph-pre-ram;
           compatible = "atmel,24c04";
           reg = <0x50>;
           pagesize = <16>;
@@ -323,6 +325,7 @@ &qspi {
       nor_flash: flash@0 {
           compatible = "jedec,spi-nor";
           reg = <0>;
+        bootph-pre-ram;
           cdns,read-delay = <2>;
           spi-max-frequency = <100000000>;
           cdns,tshsl-ns = <1>;
@@ -405,6 +408,7 @@ GPOEN_SYS_I2C2_DATA,
       };
         i2c5_pins: i2c5-0 {
+        bootph-pre-ram;
           i2c-pins {
               pinmux = <GPIOMUX(19, GPOUT_LOW,
                             GPOEN_SYS_I2C5_CLK, @@ -413,6
+417,7 @@
GPI_SYS_I2C5_CLK)>,
                             GPOEN_SYS_I2C5_DATA,
                             GPI_SYS_I2C5_DATA)>;
               bias-disable; /* external pull-up */
+            bootph-pre-ram;
               input-enable;
               input-schmitt-enable;
           };
@@ -641,6 +646,7 @@ GPOEN_DISABLE,
   };
     &uart0 {
+    bootph-pre-ram;
       clock-frequency = <24000000>;
       pinctrl-names = "default";
       pinctrl-0 = <&uart0_pins>;
What about &mmc0, &mmc1, &qspi, &sysgpio, &mmc0_pins,
&mmc1_pins, &i2c5?
Why not add "bootph-pre-ram;" for them?
Would they be needed before relocation of U-Boot to DRAM?
Yeah, they are needed by SPL and they are set in U-Boot
arch/riscv/dts/jh7110-common-u-boot.dtsi.

Best regards,
Hal

When I tested on Star64 there was none of those needed to boot. We
can add
more bootph-pre-ram as needed but I want to know how to test (because I
did not see any need for these).

How do you test that these are needed?
In my opinion, SPL need to read U-Boot from EMMC (mmc0) or SDcard
(mmc1) or
QSPI flash (qspi). Also it need to choose the correct DTB by reading
EEPROM
mounted on i2c5. To run mmc / i2c drivers, the pin configurations
(sysgpio, mmc0/1_pins)
are also needed.

Best regards,
Hal
EMMC or SDcard are not possible to boot (via JH7110 boot ROM, distinct
from QSPI boot of U-Boot and later EMMC or SDcard capability) in this
way on some of the boards where transistor logic pairs GPIO0 and GPIO1
both-off or both-on. SDcard boot is officially recommended against as
"not supported" by the StarFive reference documentation, and I suppose
what remains is EMMC boot as valid though I have not heard of any users
for this.


I tend to use SDcard boot on my deepcomputing fml13v01 board to test

before I flash the firmware to spi flash. I've not encountered issues. I
have not tried eMMC but I assume it is the same.

What is the test procedure for EMMC boot, can you explain and I will try
it on the Star64?


I believe this page contains enough info to use it:

https://docs.u-boot.org/en/latest/board/starfive/visionfive2.html

-E

I followed that info to get JH7110 ZBL SD Card boot mode to load U-Boot
by adding only bootph-pre-ram to the &mmc1 node. However, no success for
U-Boot with JH7110 ZBL eMMC boot mode. I additionally tried the build of
U-Boot as the Star64 arrives from factory, and U-Boot release 2025.01,
both which are also working for JH7110 ZBL SD card boot mode and not
JH7110 ZBL eMMC boot mode. Obvious to me is that page does not contain
enough info to test for eMMC, and/or I am doing this wrong.

When no valid eMMC device is present:

dwmci_s: Response Timeout.
BOOT fail,Error is 0xffffffff
dwmci_s: Response Timeout.
BOOT fail,Error is 0xffffffff

With the prepared eMMC storage connected there is not any output.

What is the preparation and test procedure for JH7110 ZBL eMMC boot mode?

-E

Hello E,

I have tested on the StarFive VisionFive 2.

You can write U-Boot SPL to sector 0 of the eMMC and it will be booted. But with our code it will not find main U-Boot. (There seems to be a bug in our SPL code as it does not fall back to Y-modem.)

To allow adding a GPT table the vendor image therefore uses the fall-back to the backup SPL as follows.

With u-boot-spl.bin.normal.out starting at sector 4096 (byte 0x200000) add the following bytes to the GPT table:

Position 0x0000: 40 02 00 00 00 00 20 00
Position 0x0290: 40 02 00 00 00 00 20 00

The value 0x00000240 is the offset to the SPL header.
The value 0x00200000 is the position of the backup SPL.

Likewise with u-boot-spl.bin.normal.out at sector 2048 (byte 0x100000) use:

Position 0x0000: 40 02 00 00 00 00 10 00
Position 0x0290: 40 02 00 00 00 00 10 00

Best regards

Heinrich