[PATCH 1/1] sunxi: CONFIG_INIT_SP_RELATIVE=y for Pine64 LTS

Heinrich Schuchardt xypron.glpk at gmx.de
Wed Jun 3 17:47:36 CEST 2020


On 03.06.20 01:46, André Przywara wrote:
> On 02/06/2020 20:55, Tom Rini wrote:
>
> Hi,
>
>> On Tue, Jun 02, 2020 at 09:45:25PM +0200, Heinrich Schuchardt wrote:
>>> On 6/2/20 5:51 PM, Tom Rini wrote:
>>>> On Sun, May 31, 2020 at 10:43:00AM +0000, Heinrich Schuchardt wrote:
>>>>
>>>>> Booting pine64-lts_defconfig with either of CONFIG_RSA=y or CONFIG_LOG=y
>>>>> fails if CONFIG_INIT_SP_RELATIVE is not set.
>>>>>
>>>>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>>>>> ---
>>>>>  configs/pine64-lts_defconfig | 3 +++
>>>>>  1 file changed, 3 insertions(+)
>>>>>
>>>>> diff --git a/configs/pine64-lts_defconfig b/configs/pine64-lts_defconfig
>>>>> index ef108a1a31..b03bef01b1 100644
>>>>> --- a/configs/pine64-lts_defconfig
>>>>> +++ b/configs/pine64-lts_defconfig
>>>>> @@ -1,5 +1,8 @@
>>>>>  CONFIG_ARM=y
>>>>> +CONFIG_INIT_SP_RELATIVE=y
>>>>>  CONFIG_ARCH_SUNXI=y
>>>>> +CONFIG_SYS_MALLOC_F_LEN=0x8000
>>>>> +CONFIG_SPL_SYS_MALLOC_F_LEN=0x400
>>>>>  CONFIG_SPL=y
>>>>>  CONFIG_MACH_SUN50I=y
>>>>>  CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y
>>>>
>>>> Look at the option however.  This is something that all sunxi should be
>>>> selecting.
>>>
>>> What indicates that all sunxi should select CONFIG_INIT_SP_RELATIVE?
>>
>> config INIT_SP_RELATIVE
>>         bool "Specify the early stack pointer relative to the .bss section"
>>         help
>>           U-Boot typically uses a hard-coded value for the stack pointer
>>           before relocation. Enable this option to instead calculate the
>>           initial SP at run-time. This is useful to avoid hard-coding addresses
>>           into U-Boot, so that it can be loaded and executed at arbitrary
>>           addresses and thus avoid using arbitrary addresses at runtime.
>>
>>           If this option is enabled, the early stack pointer is set to
>>           &_bss_start with a offset value added. The offset is specified by
>>           SYS_INIT_SP_BSS_OFFSET.
>>
>> And that in turn tells me this is something that's done at the SoC
>> level, especially for sunxi where things have been abstracted such that
>> everyone (very roughly) shares the same board file, linker file, etc,
>> and it's just defconfig+dts* files that change from board to board.
>
> I agree on that, this particular defconfig change is generic to all
> sunxi boards and we should fix this properly for the whole platform.
>
>> So, to put it another way, what about the pine64-lts config is unique
>> and causing this to be needed, but another arm64 sunxi platform would
>> not?
>
> I think were Heinrich came from is selecting CONFIG_RSA for his
> particular build. I guess this requires a bigger malloc area. Now this
> somehow collides which how we calculate the stack pointer, but it is too
> late here to really track this down ;-)
>
> Heinrich, can you please give an explanation what problem
> CONFIG_INIT_SP_RELATIVE fixed and why? It seems like to cause some side
> effect, but does not sound like the proper solution (because this is
> more mean for the position independent build option).
>
> Cheers,
> Andre
>

Hello André,

the problem is reproducible on the FriendlyARM NanoPi NEO Plus2. So Tom
is right in that we should solve it for all Allwinner ARMv8 devices.

I simply use a nanopi_neo_plus2_defconfig or pine64-lts_defconfig and
add CONFIG_RSA=y.

The result is that the whenever the BL31 loads main U-Boot the board
falls back to SPL. This loops forever. See below.

CONFIG_RSA=y is needed for signed UEFI variables and other use cases.

But the problem is not specific to RSA. You get into the same kind of
problems when selecting CONFIG_LOG=y.

With CONFIG_INIT_SP_RELATIVE=y the problem disappears.

As this all happens before we have a U-Boot console I was not able to
debug further than what I wrote in the thread
https://lists.denx.de/pipermail/u-boot/2020-May/414346.html. A
DEBUG_UART configuration for sunxi would have been very helpful here.

Best regards

Heinrich

U-Boot SPL 2020.07-rc3-00115-gecd4d99f65 (Jun 03 2020 - 07:49:54 +0000)
DRAM: 1024 MiB
Trying to boot from MMC1
NOTICE:  BL31: v2.2(debug):v2.2-1030-g21e22c74c
NOTICE:  BL31: Built : 22:17:08, Mar 30 2020
NOTICE:  BL31: Detected Allwinner H5 SoC (1718)
NOTICE:  BL31: Found U-Boot DTB at 0x408d820, model: FriendlyARM NanoPi
NEO Plus2
INFO:    ARM GICv2 driver initialized
INFO:    Configuring SPC Controller
NOTICE:  PMIC: Assuming H5 reference regulator design
INFO:    BL31: Platform setup done
INFO:    BL31: Initializing runtime services
INFO:    BL31: cortex_a53: CPU workaround for 855873 was applied
NOTICE:  PSCI: System suspend is unavailable
INFO:    BL31: Preparing for EL3 exit to normal world
INFO:    Entry point address = 0x4a000000
INFO:    SPSR = 0x3c9

U-Boot SPL 2020.07-rc3-00115-gecd4d99f65 (Jun 03 2020 - 07:49:54 +0000)
DRAM: 1024 MiB
Trying to boot from MMC1
NOTICE:  BL31: v2.2(debug):v2.2-1030-g21e22c74c
NOTICE:  BL31: Built : 22:17:08, Mar 30 2020
NOTICE:  BL31: Detected Allwinner H5 SoC (1718)
NOTICE:  BL31: Found U-Boot DTB at 0x408d820, model: FriendlyARM NanoPi
NEO Plus2
INFO:    ARM GICv2 driver initialized
INFO:    Configuring SPC Controller
NOTICE:  PMIC: Assuming H5 reference regulator design
INFO:    BL31: Platform setup done
INFO:    BL31: Initializing runtime services
INFO:    BL31: cortex_a53: CPU workaround for 855873 was applied
NOTICE:  PSCI: System suspend is unavailable
INFO:    BL31: Preparing for EL3 exit to normal world
INFO:    Entry point address = 0x4a000000
INFO:    SPSR = 0x3c9

U-Boot SPL 2020.07-rc3-00115-gecd4d99f65 (Jun 03 2020 - 07:49:54 +0000)
DRAM: 1024 MiB
Trying to boot from MMC1
NOTICE:  BL31: v2.2(debug):v2.2-1030-g21e22c74c
NOTICE:  BL31: Built : 22:17:08, Mar 30 2020
NOTICE:  BL31: Detected Allwinner H5 SoC (1718)
NOTICE:  BL31: Found U-Boot DTB at 0x408d820, model: FriendlyARM NanoPi
NEO Plus2
INFO:    ARM GICv2 driver initialized
INFO:    Configuring SPC Controller
NOTICE:  PMIC: Assuming H5 reference regulator design
INFO:    BL31: Platform setup done
INFO:    BL31: Initializing runtime services
INFO:    BL31: cortex_a53: CPU workaround for 855873 was applied
NOTICE:  PSCI: System suspend is unavailable
INFO:    BL31: Preparing for EL3 exit to normal world
INFO:    Entry point address = 0x4a000000
INFO:    SPSR = 0x3c9

U-Boot SPL 2020.07-rc3-00115-gecd4d99f65 (Jun 03 2020 - 07:49:54 +0000)
DRAM: 1024 MiB
Trying to boot from MMC1
NOTICE:  BL31: v2.2(debug):v2.2-1030-g21e22c74c
NOTICE:  BL31: Built : 22:17:08, Mar 30 2020
NOTICE:  BL31: Detected Allwinner H5 SoC (1718)
NOTICE:  BL31: Found U-Boot DTB at 0x408d820, model: FriendlyARM NanoPi
NEO Plus2
INFO:    ARM GICv2 driver initialized
INFO:    Configuring SPC Controller
NOTICE:  PMIC: Assuming H5 reference regulator design
INFO:    BL31: Platform setup done
INFO:    BL31: Initializing runtime services
INFO:    BL31: cortex_a53: CPU workaround for 855873 was applied
NOTICE:  PSCI: System suspend is unavailable
INFO:    BL31: Preparing for EL3 exit to normal world
INFO:    Entry point address = 0x4a000000
INFO:    SPSR = 0x3c9


More information about the U-Boot mailing list