[PATCH v2] arm: mvebu: Espressobin: Set environment variable fdtfile

Gérald Kerma gerald at gk2.net
Fri Sep 11 15:02:36 CEST 2020


Le 11/09/2020 à 06:35, Andre Heider a écrit :
> Required for the generic distro mechanism.
>
> Linux ships with 4 variants:
> marvell/armada-3720-espressobin-v7-emmc.dtb
> marvell/armada-3720-espressobin-v7.dtb
> marvell/armada-3720-espressobin-emmc.dtb
> marvell/armada-3720-espressobin.dtb
>
> Use available information to determine the appropriate filename.
>
> Fixes booting GRUB EFI arm64 on Fedora.
>
> Reported-by: Dennis Gilmore <dennis at ausil.us>
> Signed-off-by: Andre Heider <a.heider at gmail.com>
> ---
>
> v2:
> - enable BOARD_LATE_INIT only for espressobin, via defconfig
> - don't overwrite a set/saved $fdtfile
>
> This still has the issue that $fdtfile doesn't show up after `env
> default -a`. Pali may look into that, but the infrastructure for it
> needs to be created first.
>
> Until then, this can be considered as v2010.10 material as it fixes
> booting distros relying on $fdtfile.
>
> Tested myself on a v5 board without eMMC.
> Tested by Gérald on v7 emmc, v7/ddr4 detection confirmed working.
>
>   board/Marvell/mvebu_armada-37xx/board.c     | 47 +++++++++++++++++++++
>   configs/mvebu_espressobin-88f3720_defconfig |  1 +
>   2 files changed, 48 insertions(+)
>
> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> index 90bfc139aa..73d69e0388 100644
> --- a/board/Marvell/mvebu_armada-37xx/board.c
> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> @@ -5,6 +5,7 @@
>   
>   #include <common.h>
>   #include <dm.h>
> +#include <env.h>
>   #include <i2c.h>
>   #include <init.h>
>   #include <phy.h>
> @@ -50,6 +51,22 @@ DECLARE_GLOBAL_DATA_PTR;
>   #define MVEBU_G2_SMI_PHY_CMD_REG	(24)
>   #define MVEBU_G2_SMI_PHY_DATA_REG	(25)
>   
> +/*
> + * Memory Controller Registers
> + *
> + * Assembled based on public information:
> + * https://gitlab.nic.cz/turris/mox-boot-builder/-/blob/master/wtmi/main.c#L332-336
> + * https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell/blob/mv_ddr-armada-18.12/drivers/mv_ddr_mc6.h#L309-L332
> + *
> + * And checked against the written register values for the various topologies:
> + * https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell/blob/mv_ddr-armada-atf-mainline/a3700/mv_ddr_tim.h
> + */
> +#define A3700_CH0_MC_CTRL2_REG		MVEBU_REGISTER(0x002c4)
> +#define A3700_MC_CTRL2_SDRAM_TYPE_MASK	0xf
> +#define A3700_MC_CTRL2_SDRAM_TYPE_OFFS	4
> +#define A3700_MC_CTRL2_SDRAM_TYPE_DDR3	2
> +#define A3700_MC_CTRL2_SDRAM_TYPE_DDR4	3
> +
>   int board_early_init_f(void)
>   {
>   	return 0;
> @@ -63,6 +80,36 @@ int board_init(void)
>   	return 0;
>   }
>   
> +#ifdef CONFIG_BOARD_LATE_INIT
> +int board_late_init(void)
> +{
> +	bool ddr4, emmc;
> +
> +	if (env_get("fdtfile"))
> +		return 0;
> +
> +	if (!of_machine_is_compatible("globalscale,espressobin"))
> +		return 0;
> +
> +	/* If the memory controller has been configured for DDR4, we're running on v7 */
> +	ddr4 = ((readl(A3700_CH0_MC_CTRL2_REG) >> A3700_MC_CTRL2_SDRAM_TYPE_OFFS)
> +		& A3700_MC_CTRL2_SDRAM_TYPE_MASK) == A3700_MC_CTRL2_SDRAM_TYPE_DDR4;
> +
> +	emmc = of_machine_is_compatible("globalscale,espressobin-emmc");
> +
> +	if (ddr4 && emmc)
> +		env_set("fdtfile", "marvell/armada-3720-espressobin-v7-emmc.dtb");
> +	else if (ddr4)
> +		env_set("fdtfile", "marvell/armada-3720-espressobin-v7.dtb");
> +	else if (emmc)
> +		env_set("fdtfile", "marvell/armada-3720-espressobin-emmc.dtb");
> +	else
> +		env_set("fdtfile", "marvell/armada-3720-espressobin.dtb");
> +
> +	return 0;
> +}
> +#endif
> +
>   /* Board specific AHCI / SATA enable code */
>   int board_ahci_enable(void)
>   {
> diff --git a/configs/mvebu_espressobin-88f3720_defconfig b/configs/mvebu_espressobin-88f3720_defconfig
> index 5e9fcd1f26..559aeb076f 100644
> --- a/configs/mvebu_espressobin-88f3720_defconfig
> +++ b/configs/mvebu_espressobin-88f3720_defconfig
> @@ -85,3 +85,4 @@ CONFIG_USB_ETHER_SMSC95XX=y
>   CONFIG_SHA1=y
>   CONFIG_SHA256=y
>   CONFIG_NET_RANDOM_ETHADDR=y
> +CONFIG_BOARD_LATE_INIT=y
|Tested-by: Gérald Kerma <gandalf at gk2.net>|


More information about the U-Boot mailing list