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
"plugins/vscode:/vscode.git/clone" did not exist on "91b771914bc7c43dd7c7a43b586c5de2c225ceb7"
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