
27 Nov
2007
27 Nov
'07
9:13 a.m.
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