diff mbox series

[U-Boot,07/40] RFC: binman: Allow sections to have an offset

Message ID 20190130035935.235565-8-sjg@chromium.org
State Superseded
Delegated to: Bin Meng
Headers show
Series x86: Add support for booting from TPL | expand

Commit Message

Simon Glass Jan. 30, 2019, 3:59 a.m. UTC
At present sections are always placed automatically. Even if an 'offset'
property is provided it is ignored. Update the logic to support an offset
for sections.

Note: Needs a test updates

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 tools/binman/bsection.py      | 5 +++--
 tools/binman/etype/section.py | 3 ++-
 2 files changed, 5 insertions(+), 3 deletions(-)

Comments

Bin Meng Feb. 22, 2019, 7:18 a.m. UTC | #1
Hi Simon,

On Wed, Jan 30, 2019 at 12:00 PM Simon Glass <sjg@chromium.org> wrote:
>
> At present sections are always placed automatically. Even if an 'offset'
> property is provided it is ignored. Update the logic to support an offset
> for sections.
>
> Note: Needs a test updates
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  tools/binman/bsection.py      | 5 +++--
>  tools/binman/etype/section.py | 3 ++-
>  2 files changed, 5 insertions(+), 3 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

x86 is not using 'offset' in section so it should be fine. I think we
will need update tools/binman/README to document 'offset' too.

Regards,
Bin
diff mbox series

Patch

diff --git a/tools/binman/bsection.py b/tools/binman/bsection.py
index ccf2920c5b..4a5ced201e 100644
--- a/tools/binman/bsection.py
+++ b/tools/binman/bsection.py
@@ -57,7 +57,7 @@  class Section(object):
         self._name = name
         self._node = node
         self._image = image
-        self._offset = 0
+        self._offset = None
         self._size = None
         self._align_size = None
         self._pad_before = 0
@@ -75,6 +75,7 @@  class Section(object):
 
     def _ReadNode(self):
         """Read properties from the section node"""
+        self._offset = fdt_util.GetInt(self._node, 'offset')
         self._size = fdt_util.GetInt(self._node, 'size')
         self._align_size = fdt_util.GetInt(self._node, 'align-size')
         if tools.NotPowerOfTwo(self._align_size):
@@ -130,7 +131,7 @@  class Section(object):
             entry.AddMissingProperties()
 
     def SetCalculatedProperties(self):
-        state.SetInt(self._node, 'offset', self._offset)
+        state.SetInt(self._node, 'offset', self._offset or 0)
         state.SetInt(self._node, 'size', self._size)
         image_pos = self._image_pos
         if self._parent_section:
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index 7f1b413604..3681a48468 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -67,7 +67,8 @@  class Entry_section(Entry):
     def Pack(self, offset):
         """Pack all entries into the section"""
         self._section.PackEntries()
-        self._section.SetOffset(offset)
+        if self._section._offset is None:
+            self._section.SetOffset(offset)
         self.size = self._section.GetSize()
         return super(Entry_section, self).Pack(offset)