All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] binman: Skip node generation for images read from files
@ 2022-01-17  6:28 Jan Kiszka
  2022-01-26 15:57 ` Simon Glass
  0 siblings, 1 reply; 3+ messages in thread
From: Jan Kiszka @ 2022-01-17  6:28 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List; +Cc: Su, Bao Cheng (RC-CN DF FA R&D)

From: Jan Kiszka <jan.kiszka@siemens.com>

We can and should run the node generator only when creating a new image.
When we read it back, there is no need to generate nodes - they already
exits, and binman does not dive that deep into the image - and there is
no way to provide the required fdt-list. So forward the mode from the
image to every Entry object it contains so that Entry_fit can simply
skip generator nodes when reading them from an fdtmap.

This unbreaks all read-backs of images that contain generator nodes in
their fdtmap.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---

Changes in v2:
  - more verbose commit log

  tools/binman/entry.py         | 5 ++++-
  tools/binman/etype/fit.py     | 2 +-
  tools/binman/etype/section.py | 4 ++--
  tools/binman/image.py         | 7 ++++---
  4 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/tools/binman/entry.py b/tools/binman/entry.py
index bac90bbbcd..fdb9746fda 100644
--- a/tools/binman/entry.py
+++ b/tools/binman/entry.py
@@ -75,7 +75,7 @@ class Entry(object):
              available. This is mainly used for testing.
          external: True if this entry contains an external binary blob
      """
-    def __init__(self, section, etype, node, name_prefix=''):
+    def __init__(self, section, etype, node, name_prefix='', generate=None):
          # Put this here to allow entry-docs and help to work without libfdt
          global state
          from binman import state
@@ -105,6 +105,9 @@ class Entry(object):
          self.external = False
          self.allow_missing = False
          self.allow_fake = False
+        if generate == None:
+            generate = section.generate if section else True
+        self.generate = generate
  
      @staticmethod
      def FindEntryClass(etype, expanded):
diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py
index b41187df80..4e4d2f9c22 100644
--- a/tools/binman/etype/fit.py
+++ b/tools/binman/etype/fit.py
@@ -193,7 +193,7 @@ class Entry_fit(Entry):
                      # the FIT (e.g. "/images/kernel/u-boot"), so don't call
                      # fsw.add_node() or _AddNode() for it.
                      pass
-                elif subnode.name.startswith('@'):
+                elif self.generate and subnode.name.startswith('@'):
                      if self._fdts:
                          # Generate notes for each FDT
                          for seq, fdt_fname in enumerate(self._fdts):
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index 7a55d03231..319156a09a 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -154,9 +154,9 @@ class Entry_section(Entry):
      available. This is set by the `SetAllowMissing()` method, if
      `--allow-missing` is passed to binman.
      """
-    def __init__(self, section, etype, node, test=False):
+    def __init__(self, section, etype, node, test=False, generate=None):
          if not test:
-            super().__init__(section, etype, node)
+            super().__init__(section, etype, node, generate=generate)
          self._entries = OrderedDict()
          self._pad_byte = 0
          self._sort = False
diff --git a/tools/binman/image.py b/tools/binman/image.py
index f0a7d65299..1ff97e687c 100644
--- a/tools/binman/image.py
+++ b/tools/binman/image.py
@@ -69,8 +69,9 @@ class Image(section.Entry_section):
              version which does not support all the entry types.
      """
      def __init__(self, name, node, copy_to_orig=True, test=False,
-                 ignore_missing=False, use_expanded=False, missing_etype=False):
-        super().__init__(None, 'section', node, test=test)
+                 ignore_missing=False, use_expanded=False, missing_etype=False,
+                 generate=True):
+        super().__init__(None, 'section', node, test=test, generate=generate)
          self.copy_to_orig = copy_to_orig
          self.name = 'main-section'
          self.image_name = name
@@ -130,7 +131,7 @@ class Image(section.Entry_section):
          # Return an Image with the associated nodes
          root = dtb.GetRoot()
          image = Image('image', root, copy_to_orig=False, ignore_missing=True,
-                      missing_etype=True)
+                      missing_etype=True, generate=False)
  
          image.image_node = fdt_util.GetString(root, 'image-node', 'image')
          image.fdtmap_dtb = dtb
-- 
2.31.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] binman: Skip node generation for images read from files
  2022-01-17  6:28 [PATCH v2] binman: Skip node generation for images read from files Jan Kiszka
@ 2022-01-26 15:57 ` Simon Glass
  2022-01-26 17:18   ` Jan Kiszka
  0 siblings, 1 reply; 3+ messages in thread
From: Simon Glass @ 2022-01-26 15:57 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: U-Boot Mailing List, Su, Bao Cheng (RC-CN DF FA R&D)

Hi Jan,

On Mon, 17 Jan 2022 at 00:28, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>
> From: Jan Kiszka <jan.kiszka@siemens.com>
>
> We can and should run the node generator only when creating a new image.
> When we read it back, there is no need to generate nodes - they already
> exits, and binman does not dive that deep into the image - and there is
> no way to provide the required fdt-list. So forward the mode from the
> image to every Entry object it contains so that Entry_fit can simply
> skip generator nodes when reading them from an fdtmap.
>
> This unbreaks all read-backs of images that contain generator nodes in
> their fdtmap.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>
> Changes in v2:
>   - more verbose commit log
>
>   tools/binman/entry.py         | 5 ++++-
>   tools/binman/etype/fit.py     | 2 +-
>   tools/binman/etype/section.py | 4 ++--
>   tools/binman/image.py         | 7 ++++---
>   4 files changed, 11 insertions(+), 7 deletions(-)

Did you miss my other comments and a test?

>
> diff --git a/tools/binman/entry.py b/tools/binman/entry.py
> index bac90bbbcd..fdb9746fda 100644
> --- a/tools/binman/entry.py
> +++ b/tools/binman/entry.py
> @@ -75,7 +75,7 @@ class Entry(object):
>               available. This is mainly used for testing.
>           external: True if this entry contains an external binary blob
>       """
> -    def __init__(self, section, etype, node, name_prefix=''):
> +    def __init__(self, section, etype, node, name_prefix='', generate=None):
>           # Put this here to allow entry-docs and help to work without libfdt
>           global state
>           from binman import state
> @@ -105,6 +105,9 @@ class Entry(object):
>           self.external = False
>           self.allow_missing = False
>           self.allow_fake = False
> +        if generate == None:
> +            generate = section.generate if section else True
> +        self.generate = generate
>
>       @staticmethod
>       def FindEntryClass(etype, expanded):
> diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py
> index b41187df80..4e4d2f9c22 100644
> --- a/tools/binman/etype/fit.py
> +++ b/tools/binman/etype/fit.py
> @@ -193,7 +193,7 @@ class Entry_fit(Entry):
>                       # the FIT (e.g. "/images/kernel/u-boot"), so don't call
>                       # fsw.add_node() or _AddNode() for it.
>                       pass
> -                elif subnode.name.startswith('@'):
> +                elif self.generate and subnode.name.startswith('@'):
>                       if self._fdts:
>                           # Generate notes for each FDT
>                           for seq, fdt_fname in enumerate(self._fdts):
> diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
> index 7a55d03231..319156a09a 100644
> --- a/tools/binman/etype/section.py
> +++ b/tools/binman/etype/section.py
> @@ -154,9 +154,9 @@ class Entry_section(Entry):
>       available. This is set by the `SetAllowMissing()` method, if
>       `--allow-missing` is passed to binman.
>       """
> -    def __init__(self, section, etype, node, test=False):
> +    def __init__(self, section, etype, node, test=False, generate=None):
>           if not test:
> -            super().__init__(section, etype, node)
> +            super().__init__(section, etype, node, generate=generate)
>           self._entries = OrderedDict()
>           self._pad_byte = 0
>           self._sort = False
> diff --git a/tools/binman/image.py b/tools/binman/image.py
> index f0a7d65299..1ff97e687c 100644
> --- a/tools/binman/image.py
> +++ b/tools/binman/image.py
> @@ -69,8 +69,9 @@ class Image(section.Entry_section):
>               version which does not support all the entry types.
>       """
>       def __init__(self, name, node, copy_to_orig=True, test=False,
> -                 ignore_missing=False, use_expanded=False, missing_etype=False):
> -        super().__init__(None, 'section', node, test=test)
> +                 ignore_missing=False, use_expanded=False, missing_etype=False,
> +                 generate=True):
> +        super().__init__(None, 'section', node, test=test, generate=generate)
>           self.copy_to_orig = copy_to_orig
>           self.name = 'main-section'
>           self.image_name = name
> @@ -130,7 +131,7 @@ class Image(section.Entry_section):
>           # Return an Image with the associated nodes
>           root = dtb.GetRoot()
>           image = Image('image', root, copy_to_orig=False, ignore_missing=True,
> -                      missing_etype=True)
> +                      missing_etype=True, generate=False)
>
>           image.image_node = fdt_util.GetString(root, 'image-node', 'image')
>           image.fdtmap_dtb = dtb
> --
> 2.31.1

Regards,
Simon

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] binman: Skip node generation for images read from files
  2022-01-26 15:57 ` Simon Glass
@ 2022-01-26 17:18   ` Jan Kiszka
  0 siblings, 0 replies; 3+ messages in thread
From: Jan Kiszka @ 2022-01-26 17:18 UTC (permalink / raw)
  To: Simon Glass; +Cc: U-Boot Mailing List, Su, Bao Cheng (RC-CN DF FA R&D)

On 26.01.22 16:57, Simon Glass wrote:
> Hi Jan,
> 
> On Mon, 17 Jan 2022 at 00:28, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>>
>> From: Jan Kiszka <jan.kiszka@siemens.com>
>>
>> We can and should run the node generator only when creating a new image.
>> When we read it back, there is no need to generate nodes - they already
>> exits, and binman does not dive that deep into the image - and there is
>> no way to provide the required fdt-list. So forward the mode from the
>> image to every Entry object it contains so that Entry_fit can simply
>> skip generator nodes when reading them from an fdtmap.
>>
>> This unbreaks all read-backs of images that contain generator nodes in
>> their fdtmap.
>>
>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>> ---
>>
>> Changes in v2:
>>    - more verbose commit log
>>
>>    tools/binman/entry.py         | 5 ++++-
>>    tools/binman/etype/fit.py     | 2 +-
>>    tools/binman/etype/section.py | 4 ++--
>>    tools/binman/image.py         | 7 ++++---
>>    4 files changed, 11 insertions(+), 7 deletions(-)
> 
> Did you miss my other comments and a test?
> 

Sorry, I indeed the other comments on the code - after ignoring the one 
about a test case. ENOTIME.

Jan

>>
>> diff --git a/tools/binman/entry.py b/tools/binman/entry.py
>> index bac90bbbcd..fdb9746fda 100644
>> --- a/tools/binman/entry.py
>> +++ b/tools/binman/entry.py
>> @@ -75,7 +75,7 @@ class Entry(object):
>>                available. This is mainly used for testing.
>>            external: True if this entry contains an external binary blob
>>        """
>> -    def __init__(self, section, etype, node, name_prefix=''):
>> +    def __init__(self, section, etype, node, name_prefix='', generate=None):
>>            # Put this here to allow entry-docs and help to work without libfdt
>>            global state
>>            from binman import state
>> @@ -105,6 +105,9 @@ class Entry(object):
>>            self.external = False
>>            self.allow_missing = False
>>            self.allow_fake = False
>> +        if generate == None:
>> +            generate = section.generate if section else True
>> +        self.generate = generate
>>
>>        @staticmethod
>>        def FindEntryClass(etype, expanded):
>> diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py
>> index b41187df80..4e4d2f9c22 100644
>> --- a/tools/binman/etype/fit.py
>> +++ b/tools/binman/etype/fit.py
>> @@ -193,7 +193,7 @@ class Entry_fit(Entry):
>>                        # the FIT (e.g. "/images/kernel/u-boot"), so don't call
>>                        # fsw.add_node() or _AddNode() for it.
>>                        pass
>> -                elif subnode.name.startswith('@'):
>> +                elif self.generate and subnode.name.startswith('@'):
>>                        if self._fdts:
>>                            # Generate notes for each FDT
>>                            for seq, fdt_fname in enumerate(self._fdts):
>> diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
>> index 7a55d03231..319156a09a 100644
>> --- a/tools/binman/etype/section.py
>> +++ b/tools/binman/etype/section.py
>> @@ -154,9 +154,9 @@ class Entry_section(Entry):
>>        available. This is set by the `SetAllowMissing()` method, if
>>        `--allow-missing` is passed to binman.
>>        """
>> -    def __init__(self, section, etype, node, test=False):
>> +    def __init__(self, section, etype, node, test=False, generate=None):
>>            if not test:
>> -            super().__init__(section, etype, node)
>> +            super().__init__(section, etype, node, generate=generate)
>>            self._entries = OrderedDict()
>>            self._pad_byte = 0
>>            self._sort = False
>> diff --git a/tools/binman/image.py b/tools/binman/image.py
>> index f0a7d65299..1ff97e687c 100644
>> --- a/tools/binman/image.py
>> +++ b/tools/binman/image.py
>> @@ -69,8 +69,9 @@ class Image(section.Entry_section):
>>                version which does not support all the entry types.
>>        """
>>        def __init__(self, name, node, copy_to_orig=True, test=False,
>> -                 ignore_missing=False, use_expanded=False, missing_etype=False):
>> -        super().__init__(None, 'section', node, test=test)
>> +                 ignore_missing=False, use_expanded=False, missing_etype=False,
>> +                 generate=True):
>> +        super().__init__(None, 'section', node, test=test, generate=generate)
>>            self.copy_to_orig = copy_to_orig
>>            self.name = 'main-section'
>>            self.image_name = name
>> @@ -130,7 +131,7 @@ class Image(section.Entry_section):
>>            # Return an Image with the associated nodes
>>            root = dtb.GetRoot()
>>            image = Image('image', root, copy_to_orig=False, ignore_missing=True,
>> -                      missing_etype=True)
>> +                      missing_etype=True, generate=False)
>>
>>            image.image_node = fdt_util.GetString(root, 'image-node', 'image')
>>            image.fdtmap_dtb = dtb
>> --
>> 2.31.1
> 
> Regards,
> Simon

-- 
Siemens AG, Technology
Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-01-26 17:19 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-17  6:28 [PATCH v2] binman: Skip node generation for images read from files Jan Kiszka
2022-01-26 15:57 ` Simon Glass
2022-01-26 17:18   ` Jan Kiszka

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.