projects
/
oweals
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
image: Add crypto_algo struct for RSA info
[oweals/u-boot.git]
/
common
/
image-fdt.c
diff --git
a/common/image-fdt.c
b/common/image-fdt.c
index e3f06cdd1a28406e8a1a2613d543b71c27d44942..5454227fc9963213b18fe799e337333e95fee228 100644
(file)
--- a/
common/image-fdt.c
+++ b/
common/image-fdt.c
@@
-14,6
+14,7
@@
#include <errno.h>
#include <image.h>
#include <libfdt.h>
#include <errno.h>
#include <image.h>
#include <libfdt.h>
+#include <mapmem.h>
#include <asm/io.h>
#ifndef CONFIG_SYS_FDT_PAD
#include <asm/io.h>
#ifndef CONFIG_SYS_FDT_PAD
@@
-190,7
+191,7
@@
int boot_relocate_fdt(struct lmb *lmb, char **of_flat_tree, ulong *of_size)
*of_flat_tree = of_start;
*of_size = of_len;
*of_flat_tree = of_start;
*of_size = of_len;
- set_working_fdt_addr(*of_flat_tree);
+ set_working_fdt_addr(
(ulong)
*of_flat_tree);
return 0;
error:
return 0;
error:
@@
-230,7
+231,7
@@
int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
ulong fdt_addr;
char *fdt_blob = NULL;
void *buf;
ulong fdt_addr;
char *fdt_blob = NULL;
void *buf;
-#if
defined(CONFIG_
FIT)
+#if
CONFIG_IS_ENABLED(
FIT)
const char *fit_uname_config = images->fit_uname_cfg;
const char *fit_uname_fdt = NULL;
ulong default_addr;
const char *fit_uname_config = images->fit_uname_cfg;
const char *fit_uname_fdt = NULL;
ulong default_addr;
@@
-245,7
+246,7
@@
int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
if (argc > 2)
select = argv[2];
if (select || genimg_has_config(images)) {
if (argc > 2)
select = argv[2];
if (select || genimg_has_config(images)) {
-#if
defined(CONFIG_
FIT)
+#if
CONFIG_IS_ENABLED(
FIT)
if (select) {
/*
* If the FDT blob comes from the FIT image and the
if (select) {
/*
* If the FDT blob comes from the FIT image and the
@@
-275,7
+276,7
@@
int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
debug("* fdt: cmdline image address = 0x%08lx\n",
fdt_addr);
}
debug("* fdt: cmdline image address = 0x%08lx\n",
fdt_addr);
}
-#if
defined(CONFIG_
FIT)
+#if
CONFIG_IS_ENABLED(
FIT)
} else {
/* use FIT configuration provided in first bootm
* command argument
} else {
/* use FIT configuration provided in first bootm
* command argument
@@
-284,7
+285,7
@@
int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
fdt_noffset = fit_get_node_from_config(images,
FIT_FDT_PROP,
fdt_addr);
fdt_noffset = fit_get_node_from_config(images,
FIT_FDT_PROP,
fdt_addr);
- if (fdt_noffset == -ENO
LINK
)
+ if (fdt_noffset == -ENO
ENT
)
return 0;
else if (fdt_noffset < 0)
return 1;
return 0;
else if (fdt_noffset < 0)
return 1;
@@
-325,7
+326,7
@@
int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
if (load == image_start ||
load == image_data) {
if (load == image_start ||
load == image_data) {
- fdt_
blob = (char *)image_data
;
+ fdt_
addr = load
;
break;
}
break;
}
@@
-350,7
+351,7
@@
int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
* (libfdt based) and raw FDT blob (also libfdt
* based).
*/
* (libfdt based) and raw FDT blob (also libfdt
* based).
*/
-#if
defined(CONFIG_
FIT)
+#if
CONFIG_IS_ENABLED(
FIT)
/* check FDT blob vs FIT blob */
if (fit_check_format(buf)) {
ulong load, len;
/* check FDT blob vs FIT blob */
if (fit_check_format(buf)) {
ulong load, len;
@@
-449,7
+450,7
@@
error:
* addresses of some of the devices in the device tree are compared with the
* actual addresses at which U-Boot has placed them.
*
* addresses of some of the devices in the device tree are compared with the
* actual addresses at which U-Boot has placed them.
*
- * Returns 1 on success, 0 on failure. If 0 is returned, U-
b
oot will halt the
+ * Returns 1 on success, 0 on failure. If 0 is returned, U-
B
oot will halt the
* boot process.
*/
__weak int ft_verify_fdt(void *fdt)
* boot process.
*/
__weak int ft_verify_fdt(void *fdt)
@@
-457,11
+458,6
@@
__weak int ft_verify_fdt(void *fdt)
return 1;
}
return 1;
}
-__weak int arch_fixup_fdt(void *blob)
-{
- return 0;
-}
-
int image_setup_libfdt(bootm_headers_t *images, void *blob,
int of_size, struct lmb *lmb)
{
int image_setup_libfdt(bootm_headers_t *images, void *blob,
int of_size, struct lmb *lmb)
{
@@
-470,14
+466,20
@@
int image_setup_libfdt(bootm_headers_t *images, void *blob,
int ret = -EPERM;
int fdt_ret;
int ret = -EPERM;
int fdt_ret;
+ if (fdt_root(blob) < 0) {
+ printf("ERROR: root node setup failed\n");
+ goto err;
+ }
if (fdt_chosen(blob) < 0) {
printf("ERROR: /chosen node create failed\n");
goto err;
}
if (fdt_chosen(blob) < 0) {
printf("ERROR: /chosen node create failed\n");
goto err;
}
+#ifdef CONFIG_ARCH_FIXUP_FDT
if (arch_fixup_fdt(blob) < 0) {
printf("ERROR: arch-specific fdt fixup failed\n");
goto err;
}
if (arch_fixup_fdt(blob) < 0) {
printf("ERROR: arch-specific fdt fixup failed\n");
goto err;
}
+#endif
if (IMAGE_OF_BOARD_SETUP) {
fdt_ret = ft_board_setup(blob, gd->bd);
if (fdt_ret) {
if (IMAGE_OF_BOARD_SETUP) {
fdt_ret = ft_board_setup(blob, gd->bd);
if (fdt_ret) {
@@
-487,7
+489,8
@@
int image_setup_libfdt(bootm_headers_t *images, void *blob,
}
}
if (IMAGE_OF_SYSTEM_SETUP) {
}
}
if (IMAGE_OF_SYSTEM_SETUP) {
- if (ft_system_setup(blob, gd->bd)) {
+ fdt_ret = ft_system_setup(blob, gd->bd);
+ if (fdt_ret) {
printf("ERROR: system-specific fdt fixup failed: %s\n",
fdt_strerror(fdt_ret));
goto err;
printf("ERROR: system-specific fdt fixup failed: %s\n",
fdt_strerror(fdt_ret));
goto err;
@@
-496,10
+499,11
@@
int image_setup_libfdt(bootm_headers_t *images, void *blob,
fdt_fixup_ethernet(blob);
/* Delete the old LMB reservation */
fdt_fixup_ethernet(blob);
/* Delete the old LMB reservation */
- lmb_free(lmb, (phys_addr_t)(u32)(uintptr_t)blob,
- (phys_size_t)fdt_totalsize(blob));
+ if (lmb)
+ lmb_free(lmb, (phys_addr_t)(u32)(uintptr_t)blob,
+ (phys_size_t)fdt_totalsize(blob));
- ret = fdt_shrink_to_minimum(blob);
+ ret = fdt_shrink_to_minimum(blob
, 0
);
if (ret < 0)
goto err;
of_size = ret;
if (ret < 0)
goto err;
of_size = ret;
@@
-509,7
+513,8
@@
int image_setup_libfdt(bootm_headers_t *images, void *blob,
fdt_set_totalsize(blob, of_size);
}
/* Create a new LMB reservation */
fdt_set_totalsize(blob, of_size);
}
/* Create a new LMB reservation */
- lmb_reserve(lmb, (ulong)blob, of_size);
+ if (lmb)
+ lmb_reserve(lmb, (ulong)blob, of_size);
fdt_initrd(blob, *initrd_start, *initrd_end);
if (!ft_verify_fdt(blob))
fdt_initrd(blob, *initrd_start, *initrd_end);
if (!ft_verify_fdt(blob))