fdtdec: optionally add property no-map to created reserved memory node
Add boolean input argument @no_map to helper function fdtdec_add_reserved_memory() to add or not "no-map" property for an added reserved memory node. Property no-map is used by the Linux kernel to not not map memory in its static memory mapping. It is needed for example for the| consistency of system non-cached memory and to prevent speculative accesses to some firewalled memory. No functional change. A later change will update to OPTEE library to add no-map property to OP-TEE reserved memory nodes. Signed-off-by: Etienne Carriere <etienne.carriere@st.com> Signed-off-by: Patrice Chotard <patrice.chotard@st.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
68de0679c9
commit
ccaa5747bd
@ -75,7 +75,7 @@ int riscv_fdt_copy_resv_mem_node(const void *src, void *dst)
|
||||
pmp_mem.start = addr;
|
||||
pmp_mem.end = addr + size - 1;
|
||||
err = fdtdec_add_reserved_memory(dst, basename, &pmp_mem,
|
||||
&phandle);
|
||||
&phandle, false);
|
||||
if (err < 0 && err != -FDT_ERR_EXISTS) {
|
||||
log_err("failed to add reserved memory: %d\n", err);
|
||||
return err;
|
||||
|
@ -1029,7 +1029,7 @@ static inline int fdtdec_set_phandle(void *blob, int node, uint32_t phandle)
|
||||
* };
|
||||
* uint32_t phandle;
|
||||
*
|
||||
* fdtdec_add_reserved_memory(fdt, "framebuffer", &fb, &phandle);
|
||||
* fdtdec_add_reserved_memory(fdt, "framebuffer", &fb, &phandle, false);
|
||||
*
|
||||
* This results in the following subnode being added to the top-level
|
||||
* /reserved-memory node:
|
||||
@ -1056,11 +1056,12 @@ static inline int fdtdec_set_phandle(void *blob, int node, uint32_t phandle)
|
||||
* @param carveout information about the carveout region
|
||||
* @param phandlep return location for the phandle of the carveout region
|
||||
* can be NULL if no phandle should be added
|
||||
* @param no_map add "no-map" property if true
|
||||
* @return 0 on success or a negative error code on failure
|
||||
*/
|
||||
int fdtdec_add_reserved_memory(void *blob, const char *basename,
|
||||
const struct fdt_memory *carveout,
|
||||
uint32_t *phandlep);
|
||||
uint32_t *phandlep, bool no_map);
|
||||
|
||||
/**
|
||||
* fdtdec_get_carveout() - reads a carveout from an FDT
|
||||
|
10
lib/fdtdec.c
10
lib/fdtdec.c
@ -1316,7 +1316,7 @@ static int fdtdec_init_reserved_memory(void *blob)
|
||||
|
||||
int fdtdec_add_reserved_memory(void *blob, const char *basename,
|
||||
const struct fdt_memory *carveout,
|
||||
uint32_t *phandlep)
|
||||
uint32_t *phandlep, bool no_map)
|
||||
{
|
||||
fdt32_t cells[4] = {}, *ptr = cells;
|
||||
uint32_t upper, lower, phandle;
|
||||
@ -1416,6 +1416,12 @@ int fdtdec_add_reserved_memory(void *blob, const char *basename,
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
if (no_map) {
|
||||
err = fdt_setprop(blob, node, "no-map", NULL, 0);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
/* return the phandle for the new node for the caller to use */
|
||||
if (phandlep)
|
||||
*phandlep = phandle;
|
||||
@ -1481,7 +1487,7 @@ int fdtdec_set_carveout(void *blob, const char *node, const char *prop_name,
|
||||
fdt32_t value;
|
||||
void *prop;
|
||||
|
||||
err = fdtdec_add_reserved_memory(blob, name, carveout, &phandle);
|
||||
err = fdtdec_add_reserved_memory(blob, name, carveout, &phandle, false);
|
||||
if (err < 0) {
|
||||
debug("failed to add reserved memory: %d\n", err);
|
||||
return err;
|
||||
|
@ -192,7 +192,7 @@ int optee_copy_fdt_nodes(const void *old_blob, void *new_blob)
|
||||
ret = fdtdec_add_reserved_memory(new_blob,
|
||||
nodename,
|
||||
&carveout,
|
||||
NULL);
|
||||
NULL, false);
|
||||
free(oldname);
|
||||
|
||||
if (ret < 0)
|
||||
|
@ -80,7 +80,7 @@ static int dm_test_fdtdec_add_reserved_memory(struct unit_test_state *uts)
|
||||
resv.start = 0x1000;
|
||||
resv.end = 0x1fff;
|
||||
ut_assertok(fdtdec_add_reserved_memory(blob, "rsvd_region",
|
||||
&resv, &phandle));
|
||||
&resv, &phandle, false));
|
||||
|
||||
/* Test /reserve-memory and its subnode should exist */
|
||||
parent = fdt_path_offset(blob, "/reserved-memory");
|
||||
@ -101,7 +101,7 @@ static int dm_test_fdtdec_add_reserved_memory(struct unit_test_state *uts)
|
||||
resv.start = 0x2000;
|
||||
resv.end = 0x2fff;
|
||||
ut_assertok(fdtdec_add_reserved_memory(blob, "rsvd_region1",
|
||||
&resv, &phandle1));
|
||||
&resv, &phandle1, false));
|
||||
subnode = fdt_path_offset(blob, "/reserved-memory/rsvd_region1");
|
||||
ut_assert(subnode > 0);
|
||||
|
||||
@ -115,7 +115,7 @@ static int dm_test_fdtdec_add_reserved_memory(struct unit_test_state *uts)
|
||||
resv.start = 0x1000;
|
||||
resv.end = 0x1fff;
|
||||
ut_assertok(fdtdec_add_reserved_memory(blob, "rsvd_region2",
|
||||
&resv, &phandle1));
|
||||
&resv, &phandle1, false));
|
||||
subnode = fdt_path_offset(blob, "/reserved-memory/rsvd_region2");
|
||||
ut_assert(subnode < 0);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user