[U-Boot] u-boot Boot issue about rk3188

Paweł Jarosz
2017-09-27T08:38:35Z

W dniu 27.09.2017 o 09:46, Andy Yan pisze:
> Hi Pawel:
>
>
> On 2017年09月27日 14:55, Paweł Jarosz wrote:
>> Hi,
>>
>>
>> W dniu 27.09.2017 o 03:48, Andy Yan pisze:
>>> Hi Pawel:
>>>
>>>
>>> On 2017年09月26日 19:34, Paweł Jarosz wrote:
>>>> Hi,
>>>>
>>>>
>>>> W dniu 25.09.2017 o 12:29, Heiko Stübner pisze:
>>>>> Hi Andy,
>>>>>
>>>>> Am Montag, 25. September 2017, 17:45:03 CEST schrieb Andy Yan:
>>>>>> On 2017年09月22日 13:56, Heiko Stuebner wrote:
>>>>>>> Am Freitag, 22. September 2017, 08:50:49 CEST schrieb Andy Yan:
>>>>>>>> Hi Heiko:
>>>>>>>>
>>>>>>>> On 2017年09月22日 08:24, Andy Yan wrote:
>>>>>>>>> Hi Heiko:
>>>>>>>>>
>>>>>>>>> On 2017年09月21日 22:55, Heiko Stübner wrote:
>>>>>>>>>> Hi Andy,
>>>>>>>>>>
>>>>>>>>>> Am Donnerstag, 21. September 2017, 22:03:32 CEST schrieb Andy
>>>>>>>>>> Yan:
>>>>>>>>>>> Hi Heiko:
>>>>>>>>>>> I try to boot the upstream u-boot-rockchip branch on my
>>>>>>>>>>> rk3188 board
>>>>>>>>>>> with(rock_defconfig)
>>>>>>>>>>>
>>>>>>>>>>> But I got this error:
>>>>>>>>>>> early_init()
>>>>>>>>>>> nit_and_scan() returned error -22
>>>>>>>>>>> early_init() failed: -22
>>>>>>>>>>> ERROR ### Please RESET the board ###
>>>>>>>>>>>
>>>>>>>>>>> the current commit head is: 782088d("rockchip: imply ADC and
>>>>>>>>>>> SARADC_ROCKCHIP
>>>>>>>>>>> on supported SoCs") Do you ever meet something like this?
>>>>>>>>>> that is very strange. When testing Philipp's branch, I was also
>>>>>>>>>> testing the
>>>>>>>>>> commit you mention to see if anything broke since I last
>>>>>>>>>> changed u-boot
>>>>>>>>>> on my radxa rock. And the above commit started just fine,
>>>>>>>>>> when starting
>>>>>>>>>> from an sd-card.
>>>>>>>>>>
>>>>>>>>>> Not sure from which medium you're starting though. But from
>>>>>>>>>> what I
>>>>>>>>>> remember Pawel got nand working in his rk3066 series, but
>>>>>>>>>> that is not
>>>>>>>>>> yet merged.
>>>>>>>>>>
>>>>>>>>>       I boot from emmc, I will go on hack on it.
>>>>>>>>        I finally can boot it with the rock_defconfig. But the
>>>>>>>> way to
>>>>>>>>
>>>>>>>> package the tpl spl u-boot a little different.
>>>>>>>>
>>>>>>>>        cat ${DIR}/out/tpl/u-boot-tpl.bin > tplspl.bin
>>>>>>>>        truncate -s 1020 tplspl.bin
>>>>>>>>             sed -i "/^/{1s/^/RK31/}" tplspl.bin
>>>>>>>>       cat ${DIR}/out/spl/u-boot-spl.bin > spl.bin
>>>>>>>>       truncate -s %2048 spl.bin
>>>>>>>>       cat spl.bin >> tplspl.bin
>>>>>>>>             Then the tplspl.bin + u-boot.bin should package by
>>>>>>>>
>>>>>>>> boot_merger(tplsplb.in for FLashData, u-boot.bin for FlashBoot)
>>>>>>>> from
>>>>>>>>
>>>>>>>> rockchip downstream u-boot repo:
>>>>>>>>       ./tools/boot_merger
>>>>>>>> ./tools/rk_tools/RKBOOT/RK310BMINIALL.ini
>>>>>>>>             download to emmc by "upgrade_tool ul" command.
>>>>>>>> According to our
>>>>>>>>
>>>>>>>> bootrom code author, the rk31(maybe include rk30) bootrom has a
>>>>>>>> limitation that the idbblock
>>>>>>>> couldn't accessed by upgrade_tool wl command.
>>>>>>> I do have a script handling that [0]. At least for the sd-card
>>>>>>> variant
>>>>>>> a simple "openssl rc4" works just as well as the legacy
>>>>>>> boot_merger :-)
>>>>>>>
>>>>>>> Heiko
>>>>>>>
>>>>>>> [0]
>>>>>>> https://github.com/mmind/u-boot-rockchip/commit/81458bde873d6cf588e082ccf
>>>>>>>
>>>>>>> 556e818f46ad9df
>>>>>>      Is there a way to download the out that generated by[0] to
>>>>>> emmc/flash? It seems that the upgrate_tool can't access 0x40 of the
>>>>>> emmc/nand on rk3188.
>>>>>>
>>>>>> you have the @rock-chips.com address, so I'd guess you might even
>>>>>> have
>>>>>> the better resources to find out ;-)  .
>>>>>>
>>>>>> In any case, as I said I haven't looked at all at the internal
>>>>>> storage on
>>>>>> my radxarock so far.
>>>>>>
>>>>>> But as the rk3066 and rk3188 are so similar I've added Paweł.
>>>>>>
>>>>>> @Paweł: you had uboot starting from nand on your rk3066 board,
>>>>>> maybe you
>>>>>> could describe how you wrote it to the board so maybe Andy can
>>>>>> check if
>>>>>> he needs to adapt anything?
>>>> Almost all knowledge i had about rk3066 boot process was from Heiko
>>>> and bootrom disassembly.
>>>>
>>>> Andy, do you have any output on serial console ? (TPL, Uboot-spl or
>>>> anything else)
>>>> Can you compile u-boot with #define DEBUG in rk3188_common and send
>>>> the output?
>>>
>>>     Here is my console output [1] that boot from a nand on rk3188
>>> board.
>>> But I found that the board will reset again and again in spl stage
>>> if I defined DEBUG in rk3188_common [2]
>>>
>>>
>>>> Also you can check size of u-boot tpl (less than 1kb), u-boot spl +
>>>> tpl (less than sram size on rk3188, i think it's 32KB)? This is
>>>> important as you wont get any output on serial console if you don't
>>>> meet this conditions.
>>>> Also on rk3066 bootmerger FlashBoot size + FlashData size should be
>>>> less than 256KB (32KB for FlashData, and the rest for FlashBoot, if
>>>> it's more than 256KB, you get few lines of errors when flashing
>>>> with upgrade_tool and might have no output on serial console)
>>>>
>>> Bellow is my binary blob size. And I got a knowledge that the safe
>>> size of  FlashBoot  + FlashData shoud be less than 128kb(some
>>> flashed can up to 256, but some may not).
>>>
>>> -rwxrwxr-x 1 andy andy 788  u-boot-tpl.bin
>>> -rwxrwxr-x 1 andy andy 15956 u-boot-spl.bin
>>> -rw-rw-r-- 1 andy andy 98249 u-boot.bin
>>>
>>
>> Size of binaries looks good.
>> You should flash u-boot-dtb.bin not u-boot.bin
>
>    u-boot-dtb.bin has the same size as u-boot.bin, so I think they are
> the same.
>>
>>>
>>>
>>>> One more thing ... to boot from usb with openssl rc4 method on
>>>> rk3066 i think only one back to bootrom is needed, two if you are
>>>> booting from nand.
>>>>
>>> [1]
>>> tpl-1
>>> Returning to boot ROM...
>>> tpl-2
>>> spl
>>> first data training fail!
>>>
>>> U-Boot SPL 2017.09-00107-g99c4c38-dirty (Sep 27 2017 - 08:46:48)
>>> Returning to boot ROM...
>>>
>>>
>>> U-Boot 2017.09-00107-g99c4c38-dirty (Sep 27 2017 - 08:46:48 +0800)
>>>
>>> Model: Radxa Rock
>>> DRAM:  2 GiB
>>> MMC:
>>> MMC Device 0 not found
>>> *** Warning - No MMC card found, using default environment
>>>
>>> In:    serial at 20064000
>>> Out:   serial at 20064000
>>> Err:   serial at 20064000
>>> Model: Radxa Rock
>>> =>
>>>
>>>
>>
>> This console output looks good ... board tries to boot from mmc but
>> no card is present and u-boot stops on console.
>> So what is your current issue?
>
>     I have no problem now,  I just want to know if you have  some new
> way to flash the binary to nand except using "upgrate_tool ul "
> command to download the blob generated by bootmerger.

I have ... on rk3066 u-boot patches i have working nand driver and i'm
flashing u-boot with dfu tool. This patches are not merged yet and
currently i don't have time to finish them (maybe next month :) ). You
can check them on u-boot mailing list.

Patches:
* rockchip: mkimage: add support for rockchip nand boot image
* mtd: nand: add the rockchip nand controller driver

Cheers
Paweł

>>
>>>
>>> [2]
>>> tpl-1
>>> Returning to boot ROM...
>>> tpl-2
>>> spl
>>> spl_early_init()
>>> malloc_simple: size=18, ptr=18, limit=2000: 10085ff0
>>> malloc_simple: size=54, ptr=6c, limit=2000: 10086008
>>> malloc_simple: size=4, ptr=70, limit=2000: 1008605c
>>> uclass_find_device_by_seq: 0 -1
>>> uclass_find_device_by_seq: 0 0
>>>    - -1 -1 'root_driver'
>>>    - not found
>>> malloc_simple: size=18, ptr=88, limit=2000: 10086060
>>> malloc_simple: size=54, ptr=dc, limit=2000: 10086078
>>> malloc_simple: size=18, ptr=f4, limit=2000: 100860cc
>>> malloc_simple: size=54, ptr=148, limit=2000: 100860e4
>>> Bound device reset to root_driver
>>> Bound device rockchip_rk3188_cru to root_driver
>>> malloc_simple: size=18, ptr=160, limit=2000: 10086138
>>> malloc_simple: size=54, ptr=1b4, limit=2000: 10086150
>>> malloc_simple: size=1cc, ptr=380, limit=2000: 100861a4
>>> Bound device rockchip_rk3188_dmc to root_driver
>>> malloc_simple: size=18, ptr=398, limit=2000: 10086370
>>> malloc_simple: size=54, ptr=3ec, limit=2000: 10086388
>>> syscon: rockchip_rk3188_grf 1
>>> Bound device rockchip_rk3188_grf to root_driver
>>> malloc_simple: size=18, ptr=404, limit=2000: 100863dc
>>> malloc_simple: size=54, ptr=458, limit=2000: 100863f4
>>> Bound device rockchip_rk3188_pinctrl to root_driver
>>> malloc_simple: size=54, ptr=4ac, limit=2000: 10086448
>>> syscon: rockchip_rk3188_pmu 3
>>> Bound device rockchip_rk3188_pmu to root_driver
>>> malloc_simple: size=18, ptr=4c4, limit=2000: 1008649c
>>> malloc_simple: size=54, ptr=518, limit=2000: 100864b4
>>> malloc_simple: size=44, ptr=55c, limit=2000: 10086508
>>> Bound device rockchip_rk3188_uart to root_driver
>>> malloc_simple: size=54, ptr=5b0, limit=2000: 1008654c
>>> syscon: rockchip_rk3188_noc 0
>>> Bound device rockchip_rk3188_noc to root_driver
>>> malloc_simple: size=10, ptr=5c0, limit=2000: 100865a0
>>> uclass_find_device_by_seq: 0 -1
>>> uclass_find_device_by_seq: 0 0
>>>    - -1 -1 'rockchip_rk3188_cru'
>>>    - not found
>>> malloc_simple: size=c, ptr=5cc, limit=2000: 100865b0
>>> uclass_find_device_by_seq: 0 -1
>>> uclass_find_device_by_seq: 0 0
>>>    - -1 -1 'rockchip_rk3188_pinctrl'
>>>    - not found
>>> malloc_simple: size=4, ptr=5d0, limit=2000: 100865bc
>>> uclass_find_device_by_seq: 0 -1
>>> uclass_find_device_by_seq: 0 0
>>>    - -1 -1 'rockchip_rk3188_grf'
>>>    - -1 -1 'rockchip_rk3188_pmu'
>>>    - -1 -1 'rockchip_rk3188_noc'
>>>    - not found
>>> malloc_simple: size=14, ptr=5e4, limit=2000: 100865c0
>>> malloc_simple: size=10, ptr=5f4, limit=2000: 100865d4
>>> malloc_simple: size=4, ptr=5f8, limit=2000: 100865e4
>>> uclass_find_device_by_seq: 0 -1
>>> uclass_find_device_by_seq: 0 0
>>>    - -1 0 'rockchip_rk3188_grf'
>>>    - found
>>> uclass_find_device_by_seq: 0 1
>>>    - -1 0 'rockchip_rk3188_grf'
>>>    - -1 -1 'rockchip_rk3188_pmu'
>>>   - -1 -1 'rockchip_rk3188_noc'
>>>    - not found
>>> malloc_simple: size=14, ptr=60c, limit=2000: 100865e8
>>> malloc_simple: size=10, ptr=61c, limit=2000: 100865fc
>>> rk3188_pinctrl_probe: grf=20008000, pmu=20004000
>>> PLL at 20000030: nf=99, nr=2, no=2, vco=1188000000 Hz,
>>> output=594000000 Hz
>>> PLL at 20000020: nf=32, nr=1, no=2, vco=768000000 Hz,
>>> output=384000000 Hz
>>> rockchip_mmc_set_clk: gclk_rate=148500000
>>> malloc_simple: size=2c, ptr=648, limit=2000: 1008660c
>>> uclass_find_device_by_seq: 0 -1
>>> uclass_find_device_by_seq: 0 0
>>>    - -1 -1 'rockchip_rk3188_dmc'
>>>    - not found
>>> malloc_simple: size=14, ptr=65c, limit=2000: 10086638
>>> malloc_simple: size=10, ptr=66c, limit=2000: 1008664c
>>> malloc_simple: size=4, ptr=670, limit=2000: 1008665c
>>> uclass_find_device_by_seq: 0 -1
>>> uclass_find_device_by_seq: 0 0
>>>    - -1 0 'rockchip_rk3188_grf'
>>>    - found
>>> uclass_find_device_by_seq: 0 1
>>>    - -1 0 'rockchip_rk3188_grf'
>>>    - -1 1 'rockchip_rk3188_pmu'
>>>    - found
>>> uclass_find_device_by_seq: 0 2
>>>    - -1 0 'rockchip_rk3188_grf'
>>>    - -1 1 'rockchip_rk3188_pmu'
>>>    - -1 -1 'rockchip_rk3188_noc'
>>>    - not found
>>> malloc_simple: size=14, ptr=684, limit=2000: 10086660
>>> malloc_simple: size=10, ptr=694, limit=2000: 10086674
>>> clk_request(dev=10086078, clk=10086620)
>>> clk_set_rate(clk=10086620, rate=300000000)
>>> PLL at 20000010: nf=25, nr=2, no=1, vco=300000000 Hz,
>>> output=300000000 Hz
>>> /home/andy/WorkSpace/U-BOOT/u-boot/drivers/clk/rockchip/clk_rk3188.c:101:
>>> rkclk_set_pll: Assertion `vco_hz >= VCO_MIN_HZ &
>>> & vco_hz <= VCO_MAX_HZ && output_hz >= OUTPUT_MIN_HZ && output_hz <=
>>> OUTPUT_MAX_HZ && (div->no == 1 || !(div->no % 2))' fa
>>> iled.
>>
>> Here is the error as assertion fails in clk_rk3188.c:101. That is why
>> board resets.
>>
>> Cheers
>> Paweł
>>
>>> uclass_find_device_by_seq: 0 -1
>>> uclass_find_device_by_seq: 0 0
>>>    - -1 -1 'reset'
>>>    - not found
>>> tpl-1
>>> Returning to boot ROM..
>>>
>>>
>>>> Cheers
>>>> Paweł
>>>>> Thanks
>>>>> Heiko
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>>
>
>