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
4a81a9f1
Commit
4a81a9f1
authored
Mar 23, 2021
by
André Przywara
Committed by
TrustedFirmware Code Review
Mar 23, 2021
Browse files
Merge "fdt: Use proper #address-cells and #size-cells for reserved-memory" into integration
parents
9e28b854
81146c46
Changes
1
Show whitespace changes
Inline
Side-by-side
common/fdt_fixup.c
View file @
4a81a9f1
...
...
@@ -188,6 +188,8 @@ int dt_add_psci_cpu_enable_methods(void *fdt)
*
* See reserved-memory/reserved-memory.txt in the (Linux kernel) DT binding
* documentation for details.
* According to this binding, the address-cells and size-cells must match
* those of the root node.
*
* Return: 0 on success, a negative error value otherwise.
******************************************************************************/
...
...
@@ -195,23 +197,37 @@ int fdt_add_reserved_memory(void *dtb, const char *node_name,
uintptr_t
base
,
size_t
size
)
{
int
offs
=
fdt_path_offset
(
dtb
,
"/reserved-memory"
);
uint32_t
addresses
[
3
];
uint32_t
addresses
[
4
];
int
ac
,
sc
;
unsigned
int
idx
=
0
;
ac
=
fdt_address_cells
(
dtb
,
0
);
sc
=
fdt_size_cells
(
dtb
,
0
);
if
(
offs
<
0
)
{
/* create if not existing yet */
offs
=
fdt_add_subnode
(
dtb
,
0
,
"reserved-memory"
);
if
(
offs
<
0
)
if
(
offs
<
0
)
{
return
offs
;
fdt_setprop_u32
(
dtb
,
offs
,
"#address-cells"
,
2
);
fdt_setprop_u32
(
dtb
,
offs
,
"#size-cells"
,
1
);
}
fdt_setprop_u32
(
dtb
,
offs
,
"#address-cells"
,
ac
);
fdt_setprop_u32
(
dtb
,
offs
,
"#size-cells"
,
sc
);
fdt_setprop
(
dtb
,
offs
,
"ranges"
,
NULL
,
0
);
}
addresses
[
0
]
=
cpu_to_fdt32
(
HIGH_BITS
(
base
));
addresses
[
1
]
=
cpu_to_fdt32
(
base
&
0xffffffff
);
addresses
[
2
]
=
cpu_to_fdt32
(
size
&
0xffffffff
);
if
(
ac
>
1
)
{
addresses
[
idx
]
=
cpu_to_fdt32
(
HIGH_BITS
(
base
));
idx
++
;
}
addresses
[
idx
]
=
cpu_to_fdt32
(
base
&
0xffffffff
);
idx
++
;
if
(
sc
>
1
)
{
addresses
[
idx
]
=
cpu_to_fdt32
(
HIGH_BITS
(
size
));
idx
++
;
}
addresses
[
idx
]
=
cpu_to_fdt32
(
size
&
0xffffffff
);
idx
++
;
offs
=
fdt_add_subnode
(
dtb
,
offs
,
node_name
);
fdt_setprop
(
dtb
,
offs
,
"no-map"
,
NULL
,
0
);
fdt_setprop
(
dtb
,
offs
,
"reg"
,
addresses
,
12
);
fdt_setprop
(
dtb
,
offs
,
"reg"
,
addresses
,
idx
*
sizeof
(
uint32_t
)
);
return
0
;
}
...
...
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