1// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
2/*
3 * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
4 * Copyright (C) 2020 Engicam S.r.l.
5 * Copyright (C) 2020 Amarula Solutions(India)
6 * Author: Jagan Teki <jagan@amarulasolutions.com>
7 */
8
9#include <common.h>
10#include <env.h>
11#include <env_internal.h>
12#include <syscon.h>
13#include <asm/io.h>
14#include <asm/arch/sys_proto.h>
15#include <power/regulator.h>
16
17int checkboard(void)
18{
19	char *mode;
20	const char *fdt_compat;
21	int fdt_compat_len;
22
23	if (IS_ENABLED(CONFIG_TFABOOT))
24		mode = "trusted";
25	else
26		mode = "basic";
27
28	printf("Board: stm32mp1 in %s mode", mode);
29	fdt_compat = ofnode_get_property(ofnode_root(), "compatible",
30					 &fdt_compat_len);
31	if (fdt_compat && fdt_compat_len)
32		printf(" (%s)", fdt_compat);
33	puts("\n");
34
35	return 0;
36}
37
38/* board dependent setup after realloc */
39int board_init(void)
40{
41	if (IS_ENABLED(CONFIG_DM_REGULATOR))
42		regulators_enable_boot_on(_DEBUG);
43
44	return 0;
45}
46
47int board_late_init(void)
48{
49	return 0;
50}
51
52enum env_location env_get_location(enum env_operation op, int prio)
53{
54	u32 bootmode = get_bootmode();
55
56	if (prio)
57		return ENVL_UNKNOWN;
58
59	switch (bootmode & TAMP_BOOT_DEVICE_MASK) {
60	case BOOT_FLASH_SD:
61	case BOOT_FLASH_EMMC:
62		if (CONFIG_IS_ENABLED(ENV_IS_IN_MMC))
63			return ENVL_MMC;
64		else if (CONFIG_IS_ENABLED(ENV_IS_IN_EXT4))
65			return ENVL_EXT4;
66		else
67			return ENVL_NOWHERE;
68
69	case BOOT_FLASH_NAND:
70	case BOOT_FLASH_SPINAND:
71		if (IS_ENABLED(CONFIG_ENV_IS_IN_UBI))
72			return ENVL_UBI;
73		else
74			return ENVL_NOWHERE;
75
76	case BOOT_FLASH_NOR:
77		if (CONFIG_IS_ENABLED(ENV_IS_IN_SPI_FLASH))
78			return ENVL_SPI_FLASH;
79		else
80			return ENVL_NOWHERE;
81
82	default:
83		return ENVL_NOWHERE;
84	}
85}
86
87const char *env_ext4_get_intf(void)
88{
89	u32 bootmode = get_bootmode();
90
91	switch (bootmode & TAMP_BOOT_DEVICE_MASK) {
92	case BOOT_FLASH_SD:
93	case BOOT_FLASH_EMMC:
94		return "mmc";
95	default:
96		return "";
97	}
98}
99
100const char *env_ext4_get_dev_part(void)
101{
102	static char *const dev_part[] = {"0:auto", "1:auto", "2:auto"};
103	u32 bootmode = get_bootmode();
104
105	return dev_part[(bootmode & TAMP_BOOT_INSTANCE_MASK) - 1];
106}
107
108int mmc_get_env_dev(void)
109{
110	u32 bootmode = get_bootmode();
111
112	return (bootmode & TAMP_BOOT_INSTANCE_MASK) - 1;
113}
114
115#if defined(CONFIG_OF_BOARD_SETUP)
116int ft_board_setup(void *blob, struct bd_info *bd)
117{
118	return 0;
119}
120#endif
121