Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
2539dd3f
Commit
2539dd3f
authored
Oct 03, 2020
by
Alexei Fedorov
Committed by
TrustedFirmware Code Review
Oct 03, 2020
Browse files
Merge "libfdt: Upgrade libfdt source files" into integration
parents
c2c03e75
3b456661
Changes
8
Hide whitespace changes
Inline
Side-by-side
include/lib/libfdt/libfdt.h
View file @
2539dd3f
...
...
@@ -9,6 +9,10 @@
#include <libfdt_env.h>
#include <fdt.h>
#ifdef __cplusplus
extern
"C"
{
#endif
#define FDT_FIRST_SUPPORTED_VERSION 0x02
#define FDT_LAST_SUPPORTED_VERSION 0x11
...
...
@@ -2069,4 +2073,8 @@ int fdt_overlay_apply(void *fdt, void *fdto);
const
char
*
fdt_strerror
(
int
errval
);
#ifdef __cplusplus
}
#endif
#endif
/* LIBFDT_H */
lib/libfdt/fdt.c
View file @
2539dd3f
...
...
@@ -134,16 +134,20 @@ int fdt_check_header(const void *fdt)
const
void
*
fdt_offset_ptr
(
const
void
*
fdt
,
int
offset
,
unsigned
int
len
)
{
unsigned
absoffset
=
offset
+
fdt_off_dt_struct
(
fdt
);
unsigned
int
uoffset
=
offset
;
unsigned
int
absoffset
=
offset
+
fdt_off_dt_struct
(
fdt
);
if
(
offset
<
0
)
return
NULL
;
if
(
!
can_assume
(
VALID_INPUT
))
if
((
absoffset
<
offset
)
if
((
absoffset
<
u
offset
)
||
((
absoffset
+
len
)
<
absoffset
)
||
(
absoffset
+
len
)
>
fdt_totalsize
(
fdt
))
return
NULL
;
if
(
can_assume
(
LATEST
)
||
fdt_version
(
fdt
)
>=
0x11
)
if
(((
offset
+
len
)
<
offset
)
if
(((
u
offset
+
len
)
<
u
offset
)
||
((
offset
+
len
)
>
fdt_size_dt_struct
(
fdt
)))
return
NULL
;
...
...
@@ -206,10 +210,11 @@ uint32_t fdt_next_tag(const void *fdt, int startoffset, int *nextoffset)
int
fdt_check_node_offset_
(
const
void
*
fdt
,
int
offset
)
{
if
(
can_assume
(
VALID_INPUT
))
return
offset
;
if
((
offset
<
0
)
||
(
offset
%
FDT_TAGSIZE
)
||
(
fdt_next_tag
(
fdt
,
offset
,
&
offset
)
!=
FDT_BEGIN_NODE
))
if
(
!
can_assume
(
VALID_INPUT
)
&&
((
offset
<
0
)
||
(
offset
%
FDT_TAGSIZE
)))
return
-
FDT_ERR_BADOFFSET
;
if
(
fdt_next_tag
(
fdt
,
offset
,
&
offset
)
!=
FDT_BEGIN_NODE
)
return
-
FDT_ERR_BADOFFSET
;
return
offset
;
...
...
@@ -217,8 +222,11 @@ int fdt_check_node_offset_(const void *fdt, int offset)
int
fdt_check_prop_offset_
(
const
void
*
fdt
,
int
offset
)
{
if
((
offset
<
0
)
||
(
offset
%
FDT_TAGSIZE
)
||
(
fdt_next_tag
(
fdt
,
offset
,
&
offset
)
!=
FDT_PROP
))
if
(
!
can_assume
(
VALID_INPUT
)
&&
((
offset
<
0
)
||
(
offset
%
FDT_TAGSIZE
)))
return
-
FDT_ERR_BADOFFSET
;
if
(
fdt_next_tag
(
fdt
,
offset
,
&
offset
)
!=
FDT_PROP
)
return
-
FDT_ERR_BADOFFSET
;
return
offset
;
...
...
@@ -306,9 +314,12 @@ const char *fdt_find_string_(const char *strtab, int tabsize, const char *s)
int
fdt_move
(
const
void
*
fdt
,
void
*
buf
,
int
bufsize
)
{
if
(
!
can_assume
(
VALID_INPUT
)
&&
bufsize
<
0
)
return
-
FDT_ERR_NOSPACE
;
FDT_RO_PROBE
(
fdt
);
if
(
fdt_totalsize
(
fdt
)
>
bufsize
)
if
(
fdt_totalsize
(
fdt
)
>
(
unsigned
int
)
bufsize
)
return
-
FDT_ERR_NOSPACE
;
memmove
(
buf
,
fdt
,
fdt_totalsize
(
fdt
));
...
...
lib/libfdt/fdt_overlay.c
View file @
2539dd3f
...
...
@@ -241,6 +241,7 @@ static int overlay_update_local_node_references(void *fdto,
if
(
fixup_len
%
sizeof
(
uint32_t
))
return
-
FDT_ERR_BADOVERLAY
;
fixup_len
/=
sizeof
(
uint32_t
);
tree_val
=
fdt_getprop
(
fdto
,
tree_node
,
name
,
&
tree_len
);
if
(
!
tree_val
)
{
...
...
@@ -250,7 +251,7 @@ static int overlay_update_local_node_references(void *fdto,
return
tree_len
;
}
for
(
i
=
0
;
i
<
(
fixup_len
/
sizeof
(
uint32_t
))
;
i
++
)
{
for
(
i
=
0
;
i
<
fixup_len
;
i
++
)
{
fdt32_t
adj_val
;
uint32_t
poffset
;
...
...
lib/libfdt/fdt_ro.c
View file @
2539dd3f
...
...
@@ -53,7 +53,7 @@ const char *fdt_get_string(const void *fdt, int stroffset, int *lenp)
err
=
-
FDT_ERR_BADOFFSET
;
absoffset
=
stroffset
+
fdt_off_dt_strings
(
fdt
);
if
(
absoffset
>=
totalsize
)
if
(
absoffset
>=
(
unsigned
)
totalsize
)
goto
fail
;
len
=
totalsize
-
absoffset
;
...
...
@@ -61,17 +61,19 @@ const char *fdt_get_string(const void *fdt, int stroffset, int *lenp)
if
(
stroffset
<
0
)
goto
fail
;
if
(
can_assume
(
LATEST
)
||
fdt_version
(
fdt
)
>=
17
)
{
if
(
stroffset
>=
fdt_size_dt_strings
(
fdt
))
if
(
(
unsigned
)
stroffset
>=
fdt_size_dt_strings
(
fdt
))
goto
fail
;
if
((
fdt_size_dt_strings
(
fdt
)
-
stroffset
)
<
len
)
len
=
fdt_size_dt_strings
(
fdt
)
-
stroffset
;
}
}
else
if
(
fdt_magic
(
fdt
)
==
FDT_SW_MAGIC
)
{
if
((
stroffset
>=
0
)
||
(
stroffset
<
-
fdt_size_dt_strings
(
fdt
)))
unsigned
int
sw_stroffset
=
-
stroffset
;
if
((
stroffset
>=
0
)
||
(
sw_stroffset
>
fdt_size_dt_strings
(
fdt
)))
goto
fail
;
if
(
(
-
stroffset
)
<
len
)
len
=
-
stroffset
;
if
(
sw_
stroffset
<
len
)
len
=
sw_
stroffset
;
}
else
{
err
=
-
FDT_ERR_INTERNAL
;
goto
fail
;
...
...
@@ -157,8 +159,8 @@ int fdt_generate_phandle(const void *fdt, uint32_t *phandle)
static
const
struct
fdt_reserve_entry
*
fdt_mem_rsv
(
const
void
*
fdt
,
int
n
)
{
int
offset
=
n
*
sizeof
(
struct
fdt_reserve_entry
);
int
absoffset
=
fdt_off_mem_rsvmap
(
fdt
)
+
offset
;
unsigned
int
offset
=
n
*
sizeof
(
struct
fdt_reserve_entry
);
unsigned
int
absoffset
=
fdt_off_mem_rsvmap
(
fdt
)
+
offset
;
if
(
!
can_assume
(
VALID_INPUT
))
{
if
(
absoffset
<
fdt_off_mem_rsvmap
(
fdt
))
...
...
@@ -680,7 +682,7 @@ int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle)
{
int
offset
;
if
((
phandle
==
0
)
||
(
phandle
==
-
1
))
if
((
phandle
==
0
)
||
(
phandle
==
~
0U
))
return
-
FDT_ERR_BADPHANDLE
;
FDT_RO_PROBE
(
fdt
);
...
...
lib/libfdt/fdt_rw.c
View file @
2539dd3f
...
...
@@ -59,7 +59,7 @@ static int fdt_splice_(void *fdt, void *splicepoint, int oldlen, int newlen)
if
((
oldlen
<
0
)
||
(
soff
+
oldlen
<
soff
)
||
(
soff
+
oldlen
>
dsize
))
return
-
FDT_ERR_BADOFFSET
;
if
((
p
<
(
char
*
)
fdt
)
||
(
dsize
+
newlen
<
oldlen
))
if
((
p
<
(
char
*
)
fdt
)
||
(
dsize
+
newlen
<
(
unsigned
)
oldlen
))
return
-
FDT_ERR_BADOFFSET
;
if
(
dsize
-
oldlen
+
newlen
>
fdt_totalsize
(
fdt
))
return
-
FDT_ERR_NOSPACE
;
...
...
lib/libfdt/fdt_strerror.c
View file @
2539dd3f
...
...
@@ -40,7 +40,7 @@ static struct fdt_errtabent fdt_errtable[] = {
FDT_ERRTABENT
(
FDT_ERR_NOPHANDLES
),
FDT_ERRTABENT
(
FDT_ERR_BADFLAGS
),
};
#define FDT_ERRTABSIZE (sizeof(fdt_errtable) / sizeof(fdt_errtable[0]))
#define FDT_ERRTABSIZE
((int)
(sizeof(fdt_errtable) / sizeof(fdt_errtable[0]))
)
const
char
*
fdt_strerror
(
int
errval
)
{
...
...
@@ -48,7 +48,7 @@ const char *fdt_strerror(int errval)
return
"<valid offset/length>"
;
else
if
(
errval
==
0
)
return
"<no error>"
;
else
if
(
errval
>
-
FDT_ERRTABSIZE
)
{
else
if
(
-
errval
<
FDT_ERRTABSIZE
)
{
const
char
*
s
=
fdt_errtable
[
-
errval
].
str
;
if
(
s
)
...
...
lib/libfdt/fdt_sw.c
View file @
2539dd3f
...
...
@@ -32,7 +32,7 @@ static int fdt_sw_probe_(void *fdt)
/* 'memrsv' state: Initial state after fdt_create()
*
* Allowed functions:
* fdt_add_reservmap_entry()
* fdt_add_reserv
e
map_entry()
* fdt_finish_reservemap() [moves to 'struct' state]
*/
static
int
fdt_sw_probe_memrsv_
(
void
*
fdt
)
...
...
@@ -93,8 +93,8 @@ static inline uint32_t sw_flags(void *fdt)
static
void
*
fdt_grab_space_
(
void
*
fdt
,
size_t
len
)
{
int
offset
=
fdt_size_dt_struct
(
fdt
);
int
spaceleft
;
unsigned
int
offset
=
fdt_size_dt_struct
(
fdt
);
unsigned
int
spaceleft
;
spaceleft
=
fdt_totalsize
(
fdt
)
-
fdt_off_dt_struct
(
fdt
)
-
fdt_size_dt_strings
(
fdt
);
...
...
@@ -108,8 +108,8 @@ static void *fdt_grab_space_(void *fdt, size_t len)
int
fdt_create_with_flags
(
void
*
buf
,
int
bufsize
,
uint32_t
flags
)
{
const
size_
t
hdrsize
=
FDT_ALIGN
(
sizeof
(
struct
fdt_header
),
sizeof
(
struct
fdt_reserve_entry
));
const
in
t
hdrsize
=
FDT_ALIGN
(
sizeof
(
struct
fdt_header
),
sizeof
(
struct
fdt_reserve_entry
));
void
*
fdt
=
buf
;
if
(
bufsize
<
hdrsize
)
...
...
@@ -152,6 +152,9 @@ int fdt_resize(void *fdt, void *buf, int bufsize)
FDT_SW_PROBE
(
fdt
);
if
(
bufsize
<
0
)
return
-
FDT_ERR_NOSPACE
;
headsize
=
fdt_off_dt_struct
(
fdt
)
+
fdt_size_dt_struct
(
fdt
);
tailsize
=
fdt_size_dt_strings
(
fdt
);
...
...
@@ -159,7 +162,7 @@ int fdt_resize(void *fdt, void *buf, int bufsize)
headsize
+
tailsize
>
fdt_totalsize
(
fdt
))
return
-
FDT_ERR_INTERNAL
;
if
((
headsize
+
tailsize
)
>
bufsize
)
if
((
headsize
+
tailsize
)
>
(
unsigned
)
bufsize
)
return
-
FDT_ERR_NOSPACE
;
oldtail
=
(
char
*
)
fdt
+
fdt_totalsize
(
fdt
)
-
tailsize
;
...
...
@@ -247,18 +250,18 @@ int fdt_end_node(void *fdt)
static
int
fdt_add_string_
(
void
*
fdt
,
const
char
*
s
)
{
char
*
strtab
=
(
char
*
)
fdt
+
fdt_totalsize
(
fdt
);
int
strtabsize
=
fdt_size_dt_strings
(
fdt
);
int
len
=
strlen
(
s
)
+
1
;
int
struct_top
,
offset
;
unsigned
int
strtabsize
=
fdt_size_dt_strings
(
fdt
);
unsigned
int
len
=
strlen
(
s
)
+
1
;
unsigned
int
struct_top
,
offset
;
offset
=
-
strtabsize
-
len
;
offset
=
strtabsize
+
len
;
struct_top
=
fdt_off_dt_struct
(
fdt
)
+
fdt_size_dt_struct
(
fdt
);
if
(
fdt_totalsize
(
fdt
)
+
offset
<
struct_top
)
if
(
fdt_totalsize
(
fdt
)
-
offset
<
struct_top
)
return
0
;
/* no more room :( */
memcpy
(
strtab
+
offset
,
s
,
len
);
memcpy
(
strtab
-
offset
,
s
,
len
);
fdt_set_size_dt_strings
(
fdt
,
strtabsize
+
len
);
return
offset
;
return
-
offset
;
}
/* Must only be used to roll back in case of error */
...
...
lib/libfdt/fdt_wip.c
View file @
2539dd3f
...
...
@@ -23,7 +23,7 @@ int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset,
if
(
!
propval
)
return
proplen
;
if
(
proplen
<
(
len
+
idx
))
if
(
(
unsigned
)
proplen
<
(
len
+
idx
))
return
-
FDT_ERR_NOSPACE
;
memcpy
((
char
*
)
propval
+
idx
,
val
,
len
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment