
On 1/12/24 07:10, Venkatesh Yadav Abbarapu wrote:
Create a ft_board_setup() api that gets called as part of bootm/booti before jumping to kernel. In this ft_board_setup() callback that will inspect the DTB and insert the device tree blob with the "kaslr-seed" property.
Signed-off-by: Michal Simek michal.simek@amd.com Signed-off-by: Venkatesh Yadav Abbarapu venkatesh.abbarapu@amd.com
board/xilinx/common/board.c | 59 +++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+)
diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c index 12a877c715..985a3825e6 100644 --- a/board/xilinx/common/board.c +++ b/board/xilinx/common/board.c @@ -682,3 +682,62 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size) return reg + size; } #endif
+#ifdef CONFIG_OF_BOARD_SETUP +int ft_board_setup(void *blob, struct bd_info *bd) +{
- size_t n = 0x8;
this is pretty much macro not variable.
- struct udevice *dev;
- u64 *buf;
- int nodeoffset;
- int ret;
put it on the same line.
- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
debug("No RNG device\n");
return 0;
- }
- buf = malloc(n);
- if (!buf) {
debug("Out of memory\n");
return 0;
- }
Does it really make sense to call malloc and complicate error part just for 8bytes? You can simply create array/variable on stack for it instead and it would be simpler and faster.
- if (dm_rng_read(dev, buf, n)) {
debug("Reading RNG failed\n");
ret = 0;
goto end;
- }
- if (!blob) {
debug("No FDT memory address configured. Please configure\n"
"the FDT address via \"fdt addr <address>\" command.\n"
"Aborting!\n");
ret = 0;
goto end;
- }
- ret = fdt_check_header(blob);
- if (ret < 0) {
printf("fdt_chosen: %s\n", fdt_strerror(ret));
this error is weird. Can you make it more understandable?
goto end;
- }
- nodeoffset = fdt_find_or_add_subnode(blob, 0, "chosen");
- if (nodeoffset < 0) {
printf("Reading chosen node failed\n");
here too. You get this error in boot and you have no idea where this is coming from.
There is going to be error printed from code like "ERROR: board-specific fdt fixup failed"
Maybe it should be enough to simply move all these messages under debug just in case and let code which calls this function to handle it.
ret = -EINVAL;
goto end;
- }
- ret = fdt_setprop(blob, nodeoffset, "kaslr-seed", buf, sizeof(buf));
- if (ret < 0) {
printf("Unable to set kaslr-seed on chosen node: %s\n", fdt_strerror(ret));
goto end;
- }
+end:
- free(buf);
- return ret;
+} +#endif
M