[U-Boot,v1,2/2] imx: mkimage: add size check to the u-boot.imx make target

Message ID 20181107223947.31783-2-marcel@ziswiler.com
State Superseded
Delegated to: Stefano Babic
Headers show
Series
  • [U-Boot,v1,1/2] board: toradex: colibri_vf: efi_loader: unset CONFIG_EFI_UNICODE_CAPITALIZATION
Related show

Commit Message

Marcel Ziswiler Nov. 7, 2018, 10:39 p.m.
From: Marcel Ziswiler <marcel.ziswiler@toradex.com>

The make macro to check if the binary exceeds the board size limit is
taken straight from the root Makefile.

Without this and e.g. enabled EFI Vybrid fails booting as the regular
size limit check does not take the final u-boot.imx binary size into
account which is bigger due to alignment as well as IMX header stuff.

Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>

---

 arch/arm/mach-imx/Makefile | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Comments

Fabio Estevam Nov. 8, 2018, 1:55 a.m. | #1
[Adding Stefano]

On Wed, Nov 7, 2018 at 8:41 PM Marcel Ziswiler <marcel@ziswiler.com> wrote:
>
> From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
>
> The make macro to check if the binary exceeds the board size limit is
> taken straight from the root Makefile.
>
> Without this and e.g. enabled EFI Vybrid fails booting as the regular
> size limit check does not take the final u-boot.imx binary size into
> account which is bigger due to alignment as well as IMX header stuff.
>
> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>

Reviewed-by: Fabio Estevam <festevam@gmail.com>

Hi Stefano, maybe this could be material for 2018.11?

Thanks
Stefano Babic Nov. 8, 2018, 8:43 a.m. | #2
On 08/11/18 02:55, Fabio Estevam wrote:
> [Adding Stefano]
> 
> On Wed, Nov 7, 2018 at 8:41 PM Marcel Ziswiler <marcel@ziswiler.com> wrote:
>>
>> From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
>>
>> The make macro to check if the binary exceeds the board size limit is
>> taken straight from the root Makefile.
>>
>> Without this and e.g. enabled EFI Vybrid fails booting as the regular
>> size limit check does not take the final u-boot.imx binary size into
>> account which is bigger due to alignment as well as IMX header stuff.
>>
>> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> 
> Reviewed-by: Fabio Estevam <festevam@gmail.com>
> 
> Hi Stefano, maybe this could be material for 2018.11?
> 
> Thanks
> 

It makes sense - Tom, could you pick this up or do you prefer a formal PR ?

Regards,
Stefano
Tom Rini Nov. 8, 2018, 12:13 p.m. | #3
On Thu, Nov 08, 2018 at 09:43:56AM +0100, Stefano Babic wrote:
> On 08/11/18 02:55, Fabio Estevam wrote:
> > [Adding Stefano]
> > 
> > On Wed, Nov 7, 2018 at 8:41 PM Marcel Ziswiler <marcel@ziswiler.com> wrote:
> >>
> >> From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> >>
> >> The make macro to check if the binary exceeds the board size limit is
> >> taken straight from the root Makefile.
> >>
> >> Without this and e.g. enabled EFI Vybrid fails booting as the regular
> >> size limit check does not take the final u-boot.imx binary size into
> >> account which is bigger due to alignment as well as IMX header stuff.
> >>
> >> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> > 
> > Reviewed-by: Fabio Estevam <festevam@gmail.com>
> > 
> > Hi Stefano, maybe this could be material for 2018.11?
> > 
> > Thanks
> > 
> 
> It makes sense - Tom, could you pick this up or do you prefer a formal PR ?

PR please, thanks.
Stefano Babic Nov. 8, 2018, 2:07 p.m. | #4
Hi Marcel,

On 08/11/18 02:55, Fabio Estevam wrote:
> [Adding Stefano]
> 
> On Wed, Nov 7, 2018 at 8:41 PM Marcel Ziswiler <marcel@ziswiler.com> wrote:
>>
>> From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
>>
>> The make macro to check if the binary exceeds the board size limit is
>> taken straight from the root Makefile.
>>
>> Without this and e.g. enabled EFI Vybrid fails booting as the regular
>> size limit check does not take the final u-boot.imx binary size into
>> account which is bigger due to alignment as well as IMX header stuff.
>>
>> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> 
> Reviewed-by: Fabio Estevam <festevam@gmail.com>
> 
> Hi Stefano, maybe this could be material for 2018.11?
> 

Added both patches to u-boot-imx, check is effective, now size is too
much and build fails:


Building current source for 1 boards (1 thread, 8 jobs per thread)
       arm:  +   colibri_vf
+u-boot.imx exceeds file size limit:
+  limit:  520192 bytes
+  actual: 526104 bytes
+  excess: 5912 bytes
+make[2]: *** [u-boot.imx] Error 1
+make[1]: *** [u-boot.imx] Error 2
+make: *** [sub-make] Error 2
    0    0    1 /1      colibri_vf

Can you take a look ?

Best regards,
Stefeano
Marcel Ziswiler Nov. 9, 2018, 9:18 a.m. | #5
Hi Stefano

On Thu, 2018-11-08 at 15:07 +0100, Stefano Babic wrote:
> Hi Marcel,
> 
> On 08/11/18 02:55, Fabio Estevam wrote:
> > [Adding Stefano]
> > 
> > On Wed, Nov 7, 2018 at 8:41 PM Marcel Ziswiler <marcel@ziswiler.com
> > > wrote:
> > > 
> > > From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> > > 
> > > The make macro to check if the binary exceeds the board size
> > > limit is
> > > taken straight from the root Makefile.
> > > 
> > > Without this and e.g. enabled EFI Vybrid fails booting as the
> > > regular
> > > size limit check does not take the final u-boot.imx binary size
> > > into
> > > account which is bigger due to alignment as well as IMX header
> > > stuff.
> > > 
> > > Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> > 
> > Reviewed-by: Fabio Estevam <festevam@gmail.com>
> > 
> > Hi Stefano, maybe this could be material for 2018.11?
> > 
> 
> Added both patches to u-boot-imx, check is effective, now size is too
> much and build fails:
> 
> 
> Building current source for 1 boards (1 thread, 8 jobs per thread)
>        arm:  +   colibri_vf
> +u-boot.imx exceeds file size limit:
> +  limit:  520192 bytes
> +  actual: 526104 bytes
> +  excess: 5912 bytes
> +make[2]: *** [u-boot.imx] Error 1
> +make[1]: *** [u-boot.imx] Error 2
> +make: *** [sub-make] Error 2
>     0    0    1 /1      colibri_vf
> 
> Can you take a look ?

Sure, what kind of a tool chain are you using? Might just be that the
GCC 8.2 I was using does a better job in optimising stuff. Yep, with
GCC 7.3.1 it also fails at my end! I guess then we have to drop EFI
entirely but I doubt Mr. Graf will be happy...

> Best regards,
> Stefeano

Cheers

Marcel
Alexander Graf Nov. 9, 2018, 9:41 a.m. | #6
On 11/09/2018 10:18 AM, Marcel Ziswiler wrote:
> Hi Stefano
>
> On Thu, 2018-11-08 at 15:07 +0100, Stefano Babic wrote:
>> Hi Marcel,
>>
>> On 08/11/18 02:55, Fabio Estevam wrote:
>>> [Adding Stefano]
>>>
>>> On Wed, Nov 7, 2018 at 8:41 PM Marcel Ziswiler <marcel@ziswiler.com
>>>> wrote:
>>>>
>>>> From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
>>>>
>>>> The make macro to check if the binary exceeds the board size
>>>> limit is
>>>> taken straight from the root Makefile.
>>>>
>>>> Without this and e.g. enabled EFI Vybrid fails booting as the
>>>> regular
>>>> size limit check does not take the final u-boot.imx binary size
>>>> into
>>>> account which is bigger due to alignment as well as IMX header
>>>> stuff.
>>>>
>>>> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
>>> Reviewed-by: Fabio Estevam <festevam@gmail.com>
>>>
>>> Hi Stefano, maybe this could be material for 2018.11?
>>>
>> Added both patches to u-boot-imx, check is effective, now size is too
>> much and build fails:
>>
>>
>> Building current source for 1 boards (1 thread, 8 jobs per thread)
>>         arm:  +   colibri_vf
>> +u-boot.imx exceeds file size limit:
>> +  limit:  520192 bytes
>> +  actual: 526104 bytes
>> +  excess: 5912 bytes
>> +make[2]: *** [u-boot.imx] Error 1
>> +make[1]: *** [u-boot.imx] Error 2
>> +make: *** [sub-make] Error 2
>>      0    0    1 /1      colibri_vf
>>
>> Can you take a look ?
> Sure, what kind of a tool chain are you using? Might just be that the
> GCC 8.2 I was using does a better job in optimising stuff. Yep, with
> GCC 7.3.1 it also fails at my end! I guess then we have to drop EFI
> entirely but I doubt Mr. Graf will be happy...

I definitely wouldn't be happy, but I've seen us run into tight 
situations with Vybrid before. So yes, if your platform really a) 
doesn't want to ever support EBBR and b) really has very tight size 
constraints, disabling EFI_LOADER is perfectly fine with me.


Alex
Marcel Ziswiler Nov. 9, 2018, 10:23 a.m. | #7
On Fri, 2018-11-09 at 10:41 +0100, Alexander Graf wrote:
> On 11/09/2018 10:18 AM, Marcel Ziswiler wrote:
> > Hi Stefano
> > 
> > On Thu, 2018-11-08 at 15:07 +0100, Stefano Babic wrote:
> > > Hi Marcel,
> > > 
> > > On 08/11/18 02:55, Fabio Estevam wrote:
> > > > [Adding Stefano]
> > > > 
> > > > On Wed, Nov 7, 2018 at 8:41 PM Marcel Ziswiler <marcel@ziswiler
> > > > .com
> > > > > wrote:
> > > > > 
> > > > > From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> > > > > 
> > > > > The make macro to check if the binary exceeds the board size
> > > > > limit is
> > > > > taken straight from the root Makefile.
> > > > > 
> > > > > Without this and e.g. enabled EFI Vybrid fails booting as the
> > > > > regular
> > > > > size limit check does not take the final u-boot.imx binary
> > > > > size
> > > > > into
> > > > > account which is bigger due to alignment as well as IMX
> > > > > header
> > > > > stuff.
> > > > > 
> > > > > Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> > > > 
> > > > Reviewed-by: Fabio Estevam <festevam@gmail.com>
> > > > 
> > > > Hi Stefano, maybe this could be material for 2018.11?
> > > > 
> > > 
> > > Added both patches to u-boot-imx, check is effective, now size is
> > > too
> > > much and build fails:
> > > 
> > > 
> > > Building current source for 1 boards (1 thread, 8 jobs per
> > > thread)
> > >         arm:  +   colibri_vf
> > > +u-boot.imx exceeds file size limit:
> > > +  limit:  520192 bytes
> > > +  actual: 526104 bytes
> > > +  excess: 5912 bytes
> > > +make[2]: *** [u-boot.imx] Error 1
> > > +make[1]: *** [u-boot.imx] Error 2
> > > +make: *** [sub-make] Error 2
> > >      0    0    1 /1      colibri_vf
> > > 
> > > Can you take a look ?
> > 
> > Sure, what kind of a tool chain are you using? Might just be that
> > the
> > GCC 8.2 I was using does a better job in optimising stuff. Yep,
> > with
> > GCC 7.3.1 it also fails at my end! I guess then we have to drop EFI
> > entirely but I doubt Mr. Graf will be happy...
> 
> I definitely wouldn't be happy, but I've seen us run into tight 
> situations with Vybrid before. So yes, if your platform really a) 
> doesn't want to ever support EBBR and b) really has very tight size 
> constraints, disabling EFI_LOADER is perfectly fine with me.

Yes, I'm fully aware of EBBR having attended Grant's talk in Edinburgh
but especially those older raw NAND platforms are probably not the best
candidates for any of this. Unless, of course, we would put some more
effort transitioning them all to SPL and what not to overcome e.g. such
SRAM limitations. I will send a v2 which disables EFI for now.

> Alex

Cheers

Marcel
Marcel Ziswiler Nov. 9, 2018, 2:35 p.m. | #8
Hi Stefano

On Thu, 2018-11-08 at 15:07 +0100, Stefano Babic wrote:
> Hi Marcel,
> 
> On 08/11/18 02:55, Fabio Estevam wrote:
> > [Adding Stefano]
> > 
> > On Wed, Nov 7, 2018 at 8:41 PM Marcel Ziswiler <marcel@ziswiler.com
> > > wrote:
> > > 
> > > From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> > > 
> > > The make macro to check if the binary exceeds the board size
> > > limit is
> > > taken straight from the root Makefile.
> > > 
> > > Without this and e.g. enabled EFI Vybrid fails booting as the
> > > regular
> > > size limit check does not take the final u-boot.imx binary size
> > > into
> > > account which is bigger due to alignment as well as IMX header
> > > stuff.
> > > 
> > > Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> > 
> > Reviewed-by: Fabio Estevam <festevam@gmail.com>
> > 
> > Hi Stefano, maybe this could be material for 2018.11?
> > 
> 
> Added both patches to u-boot-imx, check is effective, now size is too
> much and build fails:
> 
> 
> Building current source for 1 boards (1 thread, 8 jobs per thread)
>        arm:  +   colibri_vf
> +u-boot.imx exceeds file size limit:
> +  limit:  520192 bytes
> +  actual: 526104 bytes
> +  excess: 5912 bytes
> +make[2]: *** [u-boot.imx] Error 1
> +make[1]: *** [u-boot.imx] Error 2
> +make: *** [sub-make] Error 2
>     0    0    1 /1      colibri_vf
> 
> Can you take a look ?

I sent a v2 additionally dropping CONFIG_CMDLINE_EDITING and SPI
support saving another 8 Kb which for me makes it work right back to
GCC 6.1.1 which I believe is anyway about as far back as one can go
even compiling U-Boot. Can you please give that another go?

> Best regards,
> Stefeano

Cheers

Marcel
Stefano Babic Nov. 12, 2018, 11:57 a.m. | #9
On 09/11/18 15:35, Marcel Ziswiler wrote:
> Hi Stefano
> 
> On Thu, 2018-11-08 at 15:07 +0100, Stefano Babic wrote:
>> Hi Marcel,
>>
>> On 08/11/18 02:55, Fabio Estevam wrote:
>>> [Adding Stefano]
>>>
>>> On Wed, Nov 7, 2018 at 8:41 PM Marcel Ziswiler <marcel@ziswiler.com
>>>> wrote:
>>>>
>>>> From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
>>>>
>>>> The make macro to check if the binary exceeds the board size
>>>> limit is
>>>> taken straight from the root Makefile.
>>>>
>>>> Without this and e.g. enabled EFI Vybrid fails booting as the
>>>> regular
>>>> size limit check does not take the final u-boot.imx binary size
>>>> into
>>>> account which is bigger due to alignment as well as IMX header
>>>> stuff.
>>>>
>>>> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
>>>
>>> Reviewed-by: Fabio Estevam <festevam@gmail.com>
>>>
>>> Hi Stefano, maybe this could be material for 2018.11?
>>>
>>
>> Added both patches to u-boot-imx, check is effective, now size is too
>> much and build fails:
>>
>>
>> Building current source for 1 boards (1 thread, 8 jobs per thread)
>>        arm:  +   colibri_vf
>> +u-boot.imx exceeds file size limit:
>> +  limit:  520192 bytes
>> +  actual: 526104 bytes
>> +  excess: 5912 bytes
>> +make[2]: *** [u-boot.imx] Error 1
>> +make[1]: *** [u-boot.imx] Error 2
>> +make: *** [sub-make] Error 2
>>     0    0    1 /1      colibri_vf
>>
>> Can you take a look ?
> 
> I sent a v2 additionally dropping CONFIG_CMDLINE_EDITING and SPI
> support saving another 8 Kb which for me makes it work right back to
> GCC 6.1.1 which I believe is anyway about as far back as one can go
> even compiling U-Boot. Can you please give that another go?

Merged the patchset, it works in my build. I will send PR to Tom.

Regards,
Stefano

Patch

diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
index 72fe23a2b9..53d9e5f42b 100644
--- a/arch/arm/mach-imx/Makefile
+++ b/arch/arm/mach-imx/Makefile
@@ -58,6 +58,21 @@  obj-$(CONFIG_CMD_HDMIDETECT) += cmd_hdmidet.o
 obj-$(CONFIG_CMD_DEKBLOB) += cmd_dek.o
 endif
 
+ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
+BOARD_SIZE_CHECK = \
+        @actual=`wc -c $@ | awk '{print $$1}'`; \
+        limit=`printf "%d" $(CONFIG_BOARD_SIZE_LIMIT)`; \
+        if test $$actual -gt $$limit; then \
+                echo "$@ exceeds file size limit:" >&2 ; \
+                echo "  limit:  $$limit bytes" >&2 ; \
+                echo "  actual: $$actual bytes" >&2 ; \
+                echo "  excess: $$((actual - limit)) bytes" >&2; \
+                exit 1; \
+        fi
+else
+BOARD_SIZE_CHECK =
+endif
+
 PLUGIN = board/$(BOARDDIR)/plugin
 
 ifeq ($(CONFIG_USE_IMXIMG_PLUGIN),y)
@@ -101,6 +116,7 @@  u-boot.imx: MKIMAGEOUTPUT = u-boot.imx.log
 
 u-boot.imx: u-boot.bin u-boot.cfgout $(PLUGIN).bin FORCE
 	$(call if_changed,mkimage)
+	$(BOARD_SIZE_CHECK)
 
 ifeq ($(CONFIG_OF_SEPARATE),y)
 MKIMAGEFLAGS_u-boot-dtb.imx = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) \