hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
 * Copyright (c) 2013, Google Inc.
 *
 * Copyright (C) 2011
 * Corscience GmbH & Co. KG - Simon Schwarz <schwarz@corscience.de>
 *  - Added prep subcommand support
 *  - Reorganized source - modeled after powerpc version
 *
 * (C) Copyright 2002
 * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
 * Marius Groeger <mgroeger@sysgo.de>
 *
 * Copyright (C) 2001  Erik Mouw (J.A.K.Mouw@its.tudelft.nl)
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
 
#include <common.h>
#include <fdt_support.h>
#ifdef CONFIG_ARMV7_NONSEC
#include <asm/armv7.h>
#endif
#include <asm/psci.h>
#include <asm/spin_table.h>
#include <bidram.h>
 
DECLARE_GLOBAL_DATA_PTR;
 
#ifdef CONFIG_FMAN_ENET
__weak int fdt_update_ethernet_dt(void *blob)
{
   return 0;
}
#endif
 
__weak int board_fdt_fixup(void *blob)
{
   return 0;
}
 
int arch_fixup_fdt(void *blob)
{
   int ret = 0;
 
   ret = board_fdt_fixup(blob);
   if (ret)
       return ret;
 
   /* Show "/reserved-memory" */
   boot_mem_rsv_regions(NULL, blob);
 
#if defined(CONFIG_ARMV7_NONSEC) || defined(CONFIG_OF_LIBFDT)
   bd_t *bd = gd->bd;
   int bank;
   u64 start[CONFIG_NR_DRAM_BANKS];
   u64 size[CONFIG_NR_DRAM_BANKS];
 
#ifdef CONFIG_BIDRAM
   bidram_fixup();
#endif
   for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
       start[bank] = bd->bi_dram[bank].start;
       size[bank] = bd->bi_dram[bank].size;
       if (size[bank] == 0)
           continue;
#ifdef CONFIG_ARCH_FIXUP_FDT_MEMORY
       printf("Adding bank: 0x%08llx - 0x%08llx (size: 0x%08llx)\n",
              start[bank], start[bank] + size[bank], size[bank]);
#endif
#ifdef CONFIG_ARMV7_NONSEC
       ret = armv7_apply_memory_carveout(&start[bank], &size[bank]);
       if (ret)
           return ret;
#endif
   }
 
#ifdef CONFIG_OF_LIBFDT
   ret = fdt_fixup_memory_banks(blob, start, size, CONFIG_NR_DRAM_BANKS);
   if (ret)
       return ret;
#endif
 
#ifdef CONFIG_ARMV8_SPIN_TABLE
   ret = spin_table_update_dt(blob);
   if (ret)
       return ret;
#endif
 
#if defined(CONFIG_ARMV7_NONSEC) || defined(CONFIG_ARMV8_PSCI) || \
   defined(CONFIG_SEC_FIRMWARE_ARMV8_PSCI)
   ret = psci_update_dt(blob);
   if (ret)
       return ret;
#endif
#endif
 
#ifdef CONFIG_FMAN_ENET
   ret = fdt_update_ethernet_dt(blob);
   if (ret)
       return ret;
#endif
   return 0;
}