[U-Boot] [RFC] ARM: rmobile: create DT memory nodes for R8A7795 3.0 and newer
Marek Vasut
marek.vasut at gmail.com
Fri Jun 15 10:09:38 UTC 2018
On 06/15/2018 11:40 AM, Ulrich Hecht wrote:
> Uses an SMC call to the ATF to determine the memory configuration, then
> creates appropriate DT memory nodes.
>
> Signed-off-by: Ulrich Hecht <ulrich.hecht+renesas at gmail.com>
> ---
> This is an attempt to avoid having to have a ton of different device trees
> for Renesas R8A7795 H3 SoCs from revision 3.0, which come in a number of
> different memory configurations.
>
> The specific configuration is statically baked into the ARM Trusted Firmware
> binary, so this solution adds an SMC "SiP Service Call" to the ATF returning
> the memory configuration, and then has u-boot build appropriate memory nodes.
>
> This has not been tested in the flesh successfully, as I only have a revision
> 1.0 board. I'd like to get some feedback on whether this approach is sound,
> though. Thanks.
>
> Depends on "[RFC ATF] Add SMCCC_RENESAS_MEMCONF SMC call".
>
> CU
> Uli
>
>
>
> board/renesas/salvator-x/salvator-x.c | 51 +++++++++++++++++++++++++++++++++++
> configs/r8a7795_salvator-x_defconfig | 2 ++
> 2 files changed, 53 insertions(+)
>
> diff --git a/board/renesas/salvator-x/salvator-x.c b/board/renesas/salvator-x/salvator-x.c
> index 651877c..307cb64 100644
> --- a/board/renesas/salvator-x/salvator-x.c
> +++ b/board/renesas/salvator-x/salvator-x.c
> @@ -24,6 +24,7 @@
> #include <asm/arch/sh_sdhi.h>
> #include <i2c.h>
> #include <mmc.h>
> +#include <linux/arm-smccc.h>
>
> DECLARE_GLOBAL_DATA_PTR;
>
> @@ -136,3 +137,53 @@ void reset_cpu(ulong addr)
> writel(RST_CODE, RST_CA57RESCNT);
> #endif
> }
> +
> +#define ARM_SMCCC_RENESAS_MEMCONF 0x82000000UL
> +int ft_board_setup(void *blob, bd_t *bd)
> +{
> + if (rmobile_get_cpu_type() == RMOBILE_CPU_TYPE_R8A7795 &&
> + rmobile_get_cpu_rev_integer() >= 3) {
> + u64 base[CONFIG_NR_DRAM_BANKS];
> + u64 size[CONFIG_NR_DRAM_BANKS];
> + struct arm_smccc_res res;
> +
> + arm_smccc_smc(ARM_SMCCC_RENESAS_MEMCONF,
> + 0, 0, 0, 0, 0, 0, 0, &res);
Will this call work on platforms without patched ATF ?
(I think not, don't you need to handle return value?)
> + switch (res.a0) {
> + case 1:
> + base[0] = 0x048000000ULL;
> + size[0] = 0x038000000ULL;
> + base[1] = 0x500000000ULL;
> + size[1] = 0x040000000ULL;
> + base[2] = 0x600000000ULL;
> + size[2] = 0x040000000ULL;
> + base[3] = 0x700000000ULL;
> + size[3] = 0x040000000ULL;
> + fdt_fixup_memory_banks(blob, base, size, 4);
> + break;
> + case 2:
> + base[0] = 0x048000000ULL;
> + size[0] = 0x078000000ULL;
> + base[1] = 0x500000000ULL;
> + size[1] = 0x080000000ULL;
> + fdt_fixup_memory_banks(blob, base, size, 2);
> + break;
> + case 3:
> + base[0] = 0x048000000ULL;
> + size[0] = 0x078000000ULL;
> + base[1] = 0x500000000ULL;
> + size[1] = 0x080000000ULL;
> + base[2] = 0x600000000ULL;
> + size[2] = 0x080000000ULL;
> + base[3] = 0x700000000ULL;
> + size[3] = 0x080000000ULL;
> + fdt_fixup_memory_banks(blob, base, size, 4);
> + break;
Obvious design question is -- since you're adding new SMC call anyway,
can't the call just return the memory layout table itself, so that it
won't be duplicated both in U-Boot and ATF ?
> + default:
> + break;
> + }
> + }
> +
> + return 0;
> +}
> diff --git a/configs/r8a7795_salvator-x_defconfig b/configs/r8a7795_salvator-x_defconfig
> index fdfa41c..cd2bb59 100644
> --- a/configs/r8a7795_salvator-x_defconfig
> +++ b/configs/r8a7795_salvator-x_defconfig
> @@ -61,3 +61,5 @@ CONFIG_USB_EHCI_GENERIC=y
> CONFIG_USB_STORAGE=y
> CONFIG_OF_LIBFDT_OVERLAY=y
> CONFIG_SMBIOS_MANUFACTURER=""
> +CONFIG_OF_BOARD_SETUP=y
> +CONFIG_ARM_SMCCC=y
Update the defconfig with make savedefconfig .
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list