<p>Patrick Rudolph has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/28002">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">lib/fit: support booting initrd placed above 4GiB<br><br>Store initrd offset as 64bit integer.<br><br>Tested on Cavium CN81XX EVB: The initrd could be loaded when placed<br>above 4GiB. Previously it failed to find the initrd.<br><br>Change-Id: I5d1ae860ae4a4465546bc0ef89937d611d1e56ab<br>Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com><br>---<br>M src/include/device_tree.h<br>M src/lib/device_tree.c<br>M src/lib/fit.c<br>3 files changed, 21 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/02/28002/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/include/device_tree.h b/src/include/device_tree.h</span><br><span>index 7f725e4..4c1a37c 100644</span><br><span>--- a/src/include/device_tree.h</span><br><span>+++ b/src/include/device_tree.h</span><br><span>@@ -158,6 +158,7 @@</span><br><span>               size_t size);</span><br><span> void dt_add_string_prop(struct device_tree_node *node, const char *name, char *str);</span><br><span> void dt_add_u32_prop(struct device_tree_node *node, const char *name, u32 val);</span><br><span style="color: hsl(120, 100%, 40%);">+void dt_add_u64_prop(struct device_tree_node *node, const char *name, u64 val);</span><br><span> void dt_add_reg_prop(struct device_tree_node *node, u64 *addrs, u64 *sizes,</span><br><span>                     int count, u32 addr_cells, u32 size_cells);</span><br><span> int dt_set_bin_prop_by_path(struct device_tree *tree, const char *path,</span><br><span>diff --git a/src/lib/device_tree.c b/src/lib/device_tree.c</span><br><span>index 00b36fd..df6cb11 100644</span><br><span>--- a/src/lib/device_tree.c</span><br><span>+++ b/src/lib/device_tree.c</span><br><span>@@ -882,6 +882,22 @@</span><br><span> }</span><br><span> </span><br><span> /*</span><br><span style="color: hsl(120, 100%, 40%);">+ * Add a 64-bit integer property to a node, or update it if it already exists.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param node          The device tree node to add to.</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param name         The name of the new property.</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param val            The integer to be stored in the property.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+void dt_add_u64_prop(struct device_tree_node *node, const char *name, u64 val)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     u64 *val_ptr = malloc(sizeof(val));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!val_ptr)</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       *val_ptr = htobe64(val);</span><br><span style="color: hsl(120, 100%, 40%);">+      dt_add_bin_prop(node, name, val_ptr, sizeof(*val_ptr));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span>  * Add a 'reg' address list property to a node, or update it if it exists.</span><br><span>  *</span><br><span>  * @param node          The device tree node to add to.</span><br><span>diff --git a/src/lib/fit.c b/src/lib/fit.c</span><br><span>index fe8a82e..68f5bed 100644</span><br><span>--- a/src/lib/fit.c</span><br><span>+++ b/src/lib/fit.c</span><br><span>@@ -212,12 +212,11 @@</span><br><span>     struct device_tree_node *node;</span><br><span>       node = dt_find_node(tree->root, path, NULL, NULL, 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* Warning: this assumes the ramdisk is currently located below 4GiB. */</span><br><span style="color: hsl(0, 100%, 40%);">-        u32 start = (uintptr_t)ramdisk_addr;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 end = start + ramdisk_size;</span><br><span style="color: hsl(120, 100%, 40%);">+       u64 start = (uintptr_t)ramdisk_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u64 end = start + ramdisk_size;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     dt_add_u32_prop(node, "linux,initrd-start", start);</span><br><span style="color: hsl(0, 100%, 40%);">-   dt_add_u32_prop(node, "linux,initrd-end", end);</span><br><span style="color: hsl(120, 100%, 40%);">+     dt_add_u64_prop(node, "linux,initrd-start", start);</span><br><span style="color: hsl(120, 100%, 40%);">+ dt_add_u64_prop(node, "linux,initrd-end", end);</span><br><span> }</span><br><span> </span><br><span> static void update_reserve_map(uint64_t start, uint64_t end,</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/28002">change 28002</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/28002"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I5d1ae860ae4a4465546bc0ef89937d611d1e56ab </div>
<div style="display:none"> Gerrit-Change-Number: 28002 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Patrick Rudolph <patrick.rudolph@9elements.com> </div>