Skip to content
Snippets Groups Projects
fdtdec.c 26.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	if (!mem) {
    		debug("%s: No memory type for '%s', using /memory\n", __func__,
    		      prop_name);
    		mem = "/memory";
    	}
    
    	node = fdt_path_offset(blob, mem);
    	if (node < 0) {
    		debug("%s: Failed to find node '%s': %s\n", __func__, mem,
    		      fdt_strerror(node));
    		return -ENOENT;
    	}
    
    	/*
    	 * Not strictly correct - the memory may have multiple banks. We just
    	 * use the first
    	 */
    	if (fdtdec_decode_region(blob, node, "reg", &base, &size)) {
    		debug("%s: Failed to decode memory region %s\n", __func__,
    		      mem);
    		return -EINVAL;
    	}
    
    	snprintf(prop_name, sizeof(prop_name), "%s-offset%s", mem_type,
    		 suffix);
    	if (fdtdec_decode_region(blob, config_node, prop_name, &offset,
    				 &offset_size)) {
    		debug("%s: Failed to decode memory region '%s'\n", __func__,
    		      prop_name);
    		return -EINVAL;
    	}
    
    	*basep = base + offset;
    	*sizep = offset_size;
    
    	return 0;
    }