[PATCH RFC 5/9] arm: meson: initial u-boot SPL support for GX SoCs

neil.armstrong at linaro.org neil.armstrong at linaro.org
Wed Sep 10 09:02:12 CEST 2025


On 08/09/2025 18:53, Ferass El Hafidi wrote:
> On Mon Sep 8, 2025 at 8:24 AM UTC, Neil Armstrong via groups.io wrote:
>> On 07/09/2025 16:36, Ferass El Hafidi wrote:
>>> Add initial boilerplate for U-Boot SPL support on Amlogic.
>>>
>>> Signed-off-by: Ferass El Hafidi <funderscore at postmarketos.org>
>>> ---
>>>    arch/arm/include/asm/arch-meson/clock-gx.h |   1 +
>>>    arch/arm/include/asm/arch-meson/gx.h       |  36 ++++
>>>    arch/arm/mach-meson/Kconfig                |  42 ++++-
>>>    arch/arm/mach-meson/Makefile               |   5 +
>>>    arch/arm/mach-meson/board-common.c         |  11 ++
>>>    arch/arm/mach-meson/spl-gx.c               | 278 +++++++++++++++++++++++++++++
>>>    arch/arm/mach-meson/spl.c                  | 123 +++++++++++++
>>>    7 files changed, 495 insertions(+), 1 deletion(-)
>>>
>> <...>
>>> diff --git a/arch/arm/mach-meson/spl-gx.c b/arch/arm/mach-meson/spl-gx.c
>>> new file mode 100644
>>> index 0000000000000000000000000000000000000000..65b301bc9ed89b7ca2156b7fa672ed4ef3f8633b
>>> --- /dev/null
>>> +++ b/arch/arm/mach-meson/spl-gx.c
>>> @@ -0,0 +1,278 @@
>>> +// SPDX-License-Identifier: GPL-2.0+
>>> +/*
>>> + * Portions Copyright (C) 2015, Amlogic, Inc. All rights reserved.
>>> + * Copyright (C) 2023, Ferass El Hafidi <funderscore at postmarketos.org>
>>> + */
>>> +#include <hang.h>
>>> +#include <image.h>
>>> +#include <spl.h>
>>> +#include <vsprintf.h>
>>> +#include <asm/io.h>
>>> +#include <asm/arch/boot.h>
>>> +#include <asm/arch/clock-gx.h>
>>> +#include <asm/arch/gx.h>
>>> +#include <linux/delay.h>
>>> +
>>> +/* Meson GX SPL code */
>>> +
>>> +#if CONFIG_IS_ENABLED(FIT_IMAGE_POST_PROCESS)
>>> +#if defined(CONFIG_MESON_GXBB)
>>
>> I think you should indicate why it's only needed for GXBB
>>
> 
> Sure!  I will also explain here to clarify.
> Basically this is sending the SCP firmware (aka. bl30/bl301) to the SCP.
> Historically (in GXBB) this was done by bl2.bin, but (to save space?) it
> was moved to BL31 in GXL:
> 
> - https://git.trustedfirmware.org/plugins/gitiles/TF-A/trusted-firmware-a/+/refs/heads/master/plat/amlogic/gxl/gxl_bl31_setup.c#129
> 
> and BL2 would give image info for bl30/bl301 to BL31.  I patched this
> upstream so we don't have to do that in SPL:
> 
> - https://git.trustedfirmware.org/plugins/gitiles/TF-A/trusted-firmware-a/+/refs/heads/master/plat/amlogic/gxl/gxl_bl31_setup.c#105
> 
> Whether we can move SCP fw loading to BL31 on GXBB is .. an interesting
> thing that could be considered.  That way we could possibly also save
> some space in U-Boot SPL.
> 

Would be nice, but keep it as-is for now!

>>> +void meson_power_init(void)
>>> +{
>>> +	/* TODO: Support more voltages */
>>> +
>>> +	/* Init PWM B */
>>> +	clrsetbits_32(GX_PWM_MISC_REG_AB, 0x7f << 16, (1 << 23) | (1 << 1));
>>> +
>>> +	/* Set voltage */
>>> +	if (CONFIG_IS_ENABLED(MESON_GX_VCCK_1120MV))
>>> +		writel(0x02001a, GX_PWM_PWM_B);
>>> +	else if (CONFIG_IS_ENABLED(MESON_GX_VCCK_1100MV))
>>> +		writel(0x040018, GX_PWM_PWM_B);
>>> +	else if (CONFIG_IS_ENABLED(MESON_GX_VCCK_1000MV))
>>> +		writel(0x0e000e, GX_PWM_PWM_B);
>>> +
>>> +	if (IS_ENABLED(CONFIG_MESON_GXBB)) {
>>> +		clrbits_32(GX_PIN_MUX_REG7, 1 << 22);
>>> +		clrsetbits_32(GX_PIN_MUX_REG3, 1 << 22, 1 << 21);
>>> +	} else {
>>> +		clrbits_32(GX_PIN_MUX_REG1, 1 << 10);
>>> +		clrsetbits_32(GX_PIN_MUX_REG2, 1 << 5, 1 << 11);
>>> +	}
>>> +
>>> +	/* Init PWM D */
>>> +	clrsetbits_32(GX_PWM_MISC_REG_CD, 0x7f << 16, (1 << 23) | (1 << 1));
>>> +
>>> +	/* Set voltage */
>>> +	if (CONFIG_IS_ENABLED(MESON_GX_VDDEE_1100MV))
>>> +		writel(0x040018, GX_PWM_PWM_B);
>>> +	else if (CONFIG_IS_ENABLED(MESON_GX_VDDEE_1000MV))
>>> +		writel(0x0e000e, GX_PWM_PWM_B);
>>> +
>>> +	if (IS_ENABLED(CONFIG_MESON_GXBB)) {
>>> +		clrbits_32(GX_PIN_MUX_REG7, 1 << 23);
>>> +		setbits_32(GX_PIN_MUX_REG3, 1 << 20);
>>> +	} else {
>>> +		clrbits_32(GX_PIN_MUX_REG1, (1 << 9) | (1 << 11));
>>> +		setbits_32(GX_PIN_MUX_REG2, 1 << 12);
>>> +	}
>>> +}
>>
>> Seems much of the code is duplicated between GXBB and GXL, so I wonder if it would'nt
>> be cleaner to have spl-gxbb an spl-gxl ?
>>
> 
> You mean separate power init functions (meson_power_init_gxbb/gxl)?  Should be doable.


I mean even separate files, it would avoid any #ifdef stuff

Neil

> 
>> <...>
>>
>> Anyway it's really clean !
>>
>> Thanks!
>> Neil
>>
> 
> Thank you!
> 
>>
>> -=-=-=-=-=-=-=-=-=-=-=-
>> Groups.io Links: You receive all messages sent to this group.
>> View/Reply Online (#2757): https://groups.io/g/u-boot-amlogic/message/2757
>> Mute This Topic: https://groups.io/mt/115113902/8399868
>> Group Owner: u-boot-amlogic+owner at groups.io
>> Unsubscribe: https://groups.io/g/u-boot-amlogic/unsub [funderscore at postmarketos.org]
>> -=-=-=-=-=-=-=-=-=-=-=-
> 



More information about the U-Boot mailing list