[U-Boot-Users] [PATCH][RFC] Add common memory fixup function
Martin Krause
Martin.Krause at tqs.de
Tue Nov 27 09:13:06 CET 2007
Kumar Gala wrote on Monday, November 26, 2007 9:56 PM:
> diff --git a/common/fdt_support.c b/common/fdt_support.c
> index c67bb3d..e6de10f 100644
> --- a/common/fdt_support.c
> +++ b/common/fdt_support.c
> @@ -441,6 +441,66 @@ void do_fixup_by_compat_u32(void *fdt, const
> char *compat, do_fixup_by_compat(fdt, compat, prop, &val, 4,
> create); }
>
> +int fdt_fixup_memory(void *blob, u64 start, u64 size)
> +{
> + int i, err, nodeoffset, len = 0;
> + u8 tmp[16];
> + const u32 *addrcell, *sizecell;
> +
> + err = fdt_check_header(blob);
> + if (err < 0) {
> + printf("%s: %s\n", __FUNCTION__, fdt_strerror(err));
> + return err;
> + }
> +
> + /* update, or add and update /memory node */
> + nodeoffset = fdt_path_offset(blob, "/memory");
> + if (nodeoffset < 0) {
> + nodeoffset = fdt_add_subnode(blob, 0, "memory");
> + if (nodeoffset < 0)
> + printf("WARNING: could not create /memory: %s.\n",
> + fdt_strerror(nodeoffset));
> + return nodeoffset;
> + }
> + err = fdt_setprop(blob, nodeoffset, "device_type", "memory",
> + sizeof("memory"));
> + if (err < 0) {
> + printf("WARNING: could not set %s %s.\n", "device_type",
> + fdt_strerror(err));
> + return err;
> + }
> +
> + addrcell = fdt_getprop(blob, 0, "#address-cells", NULL);
> + if ((addrcell) && (*addrcell == 2)) {
> + for (i = 0; i <= 7; i++)
> + tmp[i] = (start >> ((7 - i) * 8)) & 0xff;
> + len = 8;
> + } else {
> + for (i = 0; i <= 3; i++)
> + tmp[i] = (start >> ((3 - i) * 8)) & 0xff;
> + len = 4;
> + }
Could this perhaps lead to endianess issues under some special
circumstances?
Best Regards,
Martin Krause
More information about the U-Boot
mailing list