boot_fit.c
1.01 KB
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
/*
* (C) Copyright 2017
* Texas Instruments, <www.ti.com>
*
* Franklin S Cooper Jr. <fcooper@ti.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <boot_fit.h>
#include <common.h>
#include <errno.h>
#include <image.h>
#include <libfdt.h>
int fdt_offset(void *fit)
{
int fdt_offset, fdt_len;
int images;
images = fdt_path_offset(fit, FIT_IMAGES_PATH);
if (images < 0) {
debug("%s: Cannot find /images node: %d\n", __func__, images);
return -1;
}
/* Figure out which device tree the board wants to use */
fdt_len = fit_select_fdt(fit, images, &fdt_offset);
if (fdt_len < 0)
return fdt_len;
return fdt_offset;
}
void *locate_dtb_in_fit(void *fit)
{
struct image_header *header;
int size;
int ret;
size = fdt_totalsize(fit);
size = (size + 3) & ~3;
header = (struct image_header *)fit;
if (image_get_magic(header) != FDT_MAGIC) {
debug("No FIT image appended to U-boot\n");
return NULL;
}
ret = fdt_offset(fit);
if (ret <= 0)
return NULL;
else
return (void *)fit+size+ret;
}