{
        int len, ret, nodeoffset = 0;
        char module_name[MODULE_NAME_MAXLEN] = {0};
-       ulong memory_data[2] = {0};
 
        compose_module_name(hw_id, module_name);
        len = strlen(module_name) + 1;
        printf("ft_blob_update(): cannot set /model property err:%s\n",
                fdt_strerror(ret));
 
-       memory_data[0] = cpu_to_be32(bd->bi_memstart);
-       memory_data[1] = cpu_to_be32(bd->bi_memsize);
+       ret = fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);
 
-       nodeoffset = fdt_path_offset (blob, "/memory");
-       if (nodeoffset >= 0) {
-               ret = fdt_setprop(blob, nodeoffset, "reg", memory_data,
-                                       sizeof(memory_data));
-       if (ret < 0)
+       if (ret < 0) {
                printf("ft_blob_update): cannot set /memory/reg "
                        "property err:%s\n", fdt_strerror(ret));
        }
-       else {
-               /* memory node is required in dts */
-               printf("ft_blob_update(): cannot find /memory node "
-               "err:%s\n", fdt_strerror(nodeoffset));
-       }
 }
 #endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
 
 
  */
 void ft_blob_update(void *blob, bd_t *bd)
 {
-       int ret, nodeoffset = 0;
-       ulong memory_data[2] = {0};
+       int ret;
 
-       memory_data[0] = cpu_to_be32(bd->bi_memstart);
-       memory_data[1] = cpu_to_be32(bd->bi_memsize);
+       ret = fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);
 
-       nodeoffset = fdt_path_offset (blob, "/memory");
-       if (nodeoffset >= 0) {
-               ret = fdt_setprop(blob, nodeoffset, "reg", memory_data,
-                                       sizeof(memory_data));
-       if (ret < 0)
+       if (ret < 0) {
                printf("ft_blob_update): cannot set /memory/reg "
                        "property err:%s\n", fdt_strerror(ret));
        }
-       else {
-               /* memory node is required in dts */
-               printf("ft_blob_update(): cannot find /memory node "
-               "err:%s\n", fdt_strerror(nodeoffset));
-       }
 }
 
 void ft_board_setup(void *blob, bd_t *bd)
 
 #include <ft_build.h>
 #elif defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
+#include <fdt_support.h>
 #endif
 
 DECLARE_GLOBAL_DATA_PTR;
        int nodeoffset;
        int err;
        int j;
-       int tmp[2];
 
        for (j = 0; j < (sizeof(fixup_props) / sizeof(fixup_props[0])); j++) {
                nodeoffset = fdt_path_offset(blob, fixup_props[j].node);
                }
        }
 
-       /* 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)
-                       debug("failed to add /memory node: %s\n",
-                             fdt_strerror(nodeoffset));
-       }
-       if (nodeoffset >= 0) {
-               fdt_setprop(blob, nodeoffset, "device_type",
-                           "memory", sizeof("memory"));
-               tmp[0] = cpu_to_be32(bd->bi_memstart);
-               tmp[1] = cpu_to_be32(bd->bi_memsize);
-               fdt_setprop(blob, nodeoffset, "reg", tmp, sizeof(tmp));
-       }
+       fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);
 }
 #elif defined(CONFIG_OF_FLAT_TREE)
 void