1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * RZ/G2L board support.
4 * Copyright (C) 2023 Renesas Electronics Corporation
5 */
6
7 #include <fdtdec.h>
8 #include <linux/libfdt.h>
9
10 #if IS_ENABLED(CONFIG_MULTI_DTB_FIT)
11 /* If the firmware passed a device tree, use it for board identification. */
12 extern u64 rcar_atf_boot_args[];
13
is_rzg2l_board(const char * board_name)14 static bool is_rzg2l_board(const char *board_name)
15 {
16 void *atf_fdt_blob = (void *)(rcar_atf_boot_args[1]);
17
18 return fdt_node_check_compatible(atf_fdt_blob, 0, board_name) == 0;
19 }
20
board_fit_config_name_match(const char * name)21 int board_fit_config_name_match(const char *name)
22 {
23 void *atf_fdt_blob = (void *)(rcar_atf_boot_args[1]);
24
25 if (fdt_magic(atf_fdt_blob) != FDT_MAGIC)
26 return -1;
27
28 if (is_rzg2l_board("renesas,r9a07g044l2"))
29 return strcmp(name, "r9a07g044l2-smarc");
30
31 return -1;
32 }
33 #endif
34
apply_atf_overlay(void * fdt_blob)35 static void apply_atf_overlay(void *fdt_blob)
36 {
37 void *atf_fdt_blob = (void *)(rcar_atf_boot_args[1]);
38
39 if (fdt_magic(atf_fdt_blob) == FDT_MAGIC)
40 fdt_overlay_apply_node(fdt_blob, 0, atf_fdt_blob, 0);
41 }
42
fdtdec_board_setup(const void * fdt_blob)43 int fdtdec_board_setup(const void *fdt_blob)
44 {
45 apply_atf_overlay((void *)fdt_blob);
46
47 return 0;
48 }
49
ft_board_setup(void * blob,struct bd_info * bd)50 int ft_board_setup(void *blob, struct bd_info *bd)
51 {
52 return 0;
53 }
54