diff mbox series

[1/1] rpi: Fix build error when CONFIG_VIDEO is disabled for Raspberry Pi

Message ID 20240920063204.1049202-2-martin.stolpe@gmail.com
State New
Delegated to: Peter Robinson
Headers show
Series rpi: Fix compilation when CONFIG_VIDEO is disabled | expand

Commit Message

Martin Stolpe Sept. 20, 2024, 6:32 a.m. UTC
When the CONFIG_VIDEO option is set to disabled for Raspberry Pi devices
the build will fail with the following error message:
"undefined reference to `fdt_simplefb_enable_and_mem_rsv'."

Signed-off-by: Martin Stolpe <martin.stolpe@gmail.com>
---

 board/raspberrypi/rpi/rpi.c | 2 +-
 boot/fdt_simplefb.c         | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Comments

Martin Stolpe Sept. 24, 2024, 6:26 a.m. UTC | #1
Hi,

Am Fr., 20. Sept. 2024 um 10:10 Uhr schrieb Ivan T. Ivanov <iivanov@suse.de
>:

> Hi,
>
> On 09-20 08:32, Martin Stolpe wrote:
> >
> > When the CONFIG_VIDEO option is set to disabled for Raspberry Pi devices
> > the build will fail with the following error message:
> > "undefined reference to `fdt_simplefb_enable_and_mem_rsv'."
> >
> > Signed-off-by: Martin Stolpe <martin.stolpe@gmail.com>
> > ---
> >
> >  board/raspberrypi/rpi/rpi.c | 2 +-
> >  boot/fdt_simplefb.c         | 2 +-
> >  2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
> > index ab5ea85cf9..bc49708f85 100644
> > --- a/board/raspberrypi/rpi/rpi.c
> > +++ b/board/raspberrypi/rpi/rpi.c
> > @@ -572,7 +572,7 @@ int ft_board_setup(void *blob, struct bd_info *bd)
> >       node = fdt_node_offset_by_compatible(blob, -1,
> "simple-framebuffer");
> >       if (node < 0)
> >               fdt_simplefb_add_node(blob);
> > -     else
> > +     else if (IS_ENABLED(CONFIG_VIDEO))
> >               fdt_simplefb_enable_and_mem_rsv(blob);
>
> I think there is one more user of this function which end of same
> situation stm32mp1.
>

Would it make sense to replace the config option CONFIG_FDT_SIMPLEFB with
CONFIG_VIDEO? CONFIG_FDT_SIMPLEFB is only used in the Raspberry Pi default
configurations but in no other board configuration and I don't see it being
used in the code besides in stm32mp1.c.

Regards
Martin
Devarsh Thakkar Sept. 24, 2024, 6:38 a.m. UTC | #2
Hi Martin, Ivan

On 24/09/24 11:56, Martin Stolpe wrote:
> Hi,
> 
> Am Fr., 20. Sept. 2024 um 10:10 Uhr schrieb Ivan T. Ivanov <iivanov@suse.de
>> :
> 
>> Hi,
>>
>> On 09-20 08:32, Martin Stolpe wrote:
>>>
>>> When the CONFIG_VIDEO option is set to disabled for Raspberry Pi devices
>>> the build will fail with the following error message:
>>> "undefined reference to `fdt_simplefb_enable_and_mem_rsv'."
>>>

Thanks for the patch.

>>> Signed-off-by: Martin Stolpe <martin.stolpe@gmail.com>
>>> ---
>>>
>>>  board/raspberrypi/rpi/rpi.c | 2 +-
>>>  boot/fdt_simplefb.c         | 2 +-
>>>  2 files changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
>>> index ab5ea85cf9..bc49708f85 100644
>>> --- a/board/raspberrypi/rpi/rpi.c
>>> +++ b/board/raspberrypi/rpi/rpi.c
>>> @@ -572,7 +572,7 @@ int ft_board_setup(void *blob, struct bd_info *bd)
>>>       node = fdt_node_offset_by_compatible(blob, -1,
>> "simple-framebuffer");
>>>       if (node < 0)
>>>               fdt_simplefb_add_node(blob);
>>> -     else
>>> +     else if (IS_ENABLED(CONFIG_VIDEO))
>>>               fdt_simplefb_enable_and_mem_rsv(blob);
>>
>> I think there is one more user of this function which end of same
>> situation stm32mp1.
>>
> 
> Would it make sense to replace the config option CONFIG_FDT_SIMPLEFB with
> CONFIG_VIDEO? CONFIG_FDT_SIMPLEFB is only used in the Raspberry Pi default
> configurations but in no other board configuration and I don't see it being
> used in the code besides in stm32mp1.c.
> 

CONFIG_FDT_SIMPLEFB is only used in splash-screen context which in-turn
depends on CONFIG_VIDEO. So CONFIG_FDT_SIMPLEFB is in a way dependent on
CONFIG_VIDEO. We had fixed similar issue in past in vendor tree and by making
CONFIG_FDT_SIMPLEFB dependent on CONFIG_VIDEO using below set of patches [1]
which I was planning to post upstream too.

Kindly let me know If these patches look good to you and fix your problem too,
I can post same set of patches to upstream too.

[1] :
https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=1199800505f11f2162030cb641c6d0c9276d5c9c
[2] :
https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=5b4b8eac243cbd86286ff2cf57ca0469c4d86345

Regards
Devarsh


> Regards
> Martin
>
Martin Stolpe Sept. 26, 2024, 12:26 p.m. UTC | #3
Hi,

Am Di., 24. Sept. 2024 um 08:38 Uhr schrieb Devarsh Thakkar <devarsht@ti.com
>:

>
> CONFIG_FDT_SIMPLEFB is only used in splash-screen context which in-turn
> depends on CONFIG_VIDEO. So CONFIG_FDT_SIMPLEFB is in a way dependent on
> CONFIG_VIDEO. We had fixed similar issue in past in vendor tree and by
> making
> CONFIG_FDT_SIMPLEFB dependent on CONFIG_VIDEO using below set of patches
> [1]
> which I was planning to post upstream too.
>
> Kindly let me know If these patches look good to you and fix your problem
> too,
> I can post same set of patches to upstream too.
>
> [1] :
>
> https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=1199800505f11f2162030cb641c6d0c9276d5c9c
> [2] :
>
> https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=5b4b8eac243cbd86286ff2cf57ca0469c4d86345
>
>
These patches look good to me.

If I understand the code correctly the frame buffer node should only be
created if CONFIG_FDT_SIMPLEFB is enabled. Thus I would change the code
like this:

Signed-off-by: Martin Stolpe <martin.stolpe@gmail.com>
---

 board/raspberrypi/rpi/rpi.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index ab5ea85cf9..47db441696 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -569,11 +569,13 @@ int ft_board_setup(void *blob, struct bd_info *bd)

     update_fdt_from_fw(blob, (void *)fw_dtb_pointer);

-    node = fdt_node_offset_by_compatible(blob, -1, "simple-framebuffer");
-    if (node < 0)
-        fdt_simplefb_add_node(blob);
-    else
-        fdt_simplefb_enable_and_mem_rsv(blob);
+    if (CONFIG_IS_ENABLED(FDT_SIMPLEFB)) {
+        node = fdt_node_offset_by_compatible(blob, -1,
"simple-framebuffer");
+        if (node < 0)
+            fdt_simplefb_add_node(blob);
+        else
+            fdt_simplefb_enable_and_mem_rsv(blob);
+    }

 #ifdef CONFIG_EFI_LOADER
     /* Reserve the spin table */
Devarsh Thakkar Sept. 26, 2024, 4:45 p.m. UTC | #4
Hi Martin,

On 26/09/24 17:56, Martin Stolpe wrote:
> Hi,
> 
> Am Di., 24. Sept. 2024 um 08:38 Uhr schrieb Devarsh Thakkar
> <devarsht@ti.com <mailto:devarsht@ti.com>>:
> 
> 
>     CONFIG_FDT_SIMPLEFB is only used in splash-screen context which in-turn
>     depends on CONFIG_VIDEO. So CONFIG_FDT_SIMPLEFB is in a way dependent on
>     CONFIG_VIDEO. We had fixed similar issue in past in vendor tree and
>     by making
>     CONFIG_FDT_SIMPLEFB dependent on CONFIG_VIDEO using below set of
>     patches [1]
>     which I was planning to post upstream too.
> 
>     Kindly let me know If these patches look good to you and fix your
>     problem too,
>     I can post same set of patches to upstream too.
> 
>     [1] :
>     https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=1199800505f11f2162030cb641c6d0c9276d5c9c <https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=1199800505f11f2162030cb641c6d0c9276d5c9c>
>     [2] :
>     https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=5b4b8eac243cbd86286ff2cf57ca0469c4d86345 <https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=5b4b8eac243cbd86286ff2cf57ca0469c4d86345>
> 
> 
> These patches look good to me.
> 

Thanks for taking a look, I have posted them to the list [1], it would
be great if you could provide a Reviewed-by or Tested-by too.

> If I understand the code correctly the frame buffer node should only be
> created if CONFIG_FDT_SIMPLEFB is enabled. Thus I would change the code
> like this:
> 

Yes, that's true, I think you also need to conditionally compile
ft_board_setup only when CONFIG_OF_BOARD_SETUP is enabled.

[1]: https://lore.kernel.org/all/20240925151354.480704-4-devarsht@ti.com/

Regards
Devarsh
Martin Stolpe Oct. 7, 2024, 12:54 p.m. UTC | #5
Hi Devarsh,

Am Do., 26. Sept. 2024 um 18:45 Uhr schrieb Devarsh Thakkar <devarsht@ti.com
>:

>
> Thanks for taking a look, I have posted them to the list [1], it would
> be great if you could provide a Reviewed-by or Tested-by too.
>

I've tried to compile the project for am64x_evm_a53 with the patches
applied and I've added the following line to
am64x_evm_a53_defconfig: CONFIG_OF_BOARD_SETUP=y
When I then try to compile U-Boot using the following command:
make am64x_evm_a53_defconfig; make

I get the following error message:
aarch64-linux-gnu-ld.bfd: boot/image-fdt.o: in function
`image_setup_libfdt':
/home/mstolpe/repositories/build_base_station/build/workspace/sources/u-boot-copy/boot/image-fdt.c:633:(.text.image_setup_libfdt+0x150):
undefined reference to `ft_board_setup'
aarch64-linux-gnu-ld.bfd: cmd/fdt.o: in function `do_fdt':
/home/mstolpe/repositories/build_base_station/build/workspace/sources/u-boot-copy/cmd/fdt.c:687:(.text.do_fdt+0xf98):
undefined reference to `ft_board_setup'
Segmentation fault (core dumped)
make: *** [Makefile:1801: u-boot] Error 139
make: *** Deleting file 'u-boot'

I guess this shouldn't happen?

BR
Martin
Devarsh Thakkar Oct. 7, 2024, 1:02 p.m. UTC | #6
Hi Martin,

On 07/10/24 18:24, Martin Stolpe wrote:
> Hi Devarsh,
> 
> Am Do., 26. Sept. 2024 um 18:45 Uhr schrieb Devarsh Thakkar <devarsht@ti.com
>> :
> 
>>
>> Thanks for taking a look, I have posted them to the list [1], it would
>> be great if you could provide a Reviewed-by or Tested-by too.
>>
> 
> I've tried to compile the project for am64x_evm_a53 with the patches
> applied and I've added the following line to
> am64x_evm_a53_defconfig: CONFIG_OF_BOARD_SETUP=y
> When I then try to compile U-Boot using the following command:
> make am64x_evm_a53_defconfig; make
> 
> I get the following error message:
> aarch64-linux-gnu-ld.bfd: boot/image-fdt.o: in function
> `image_setup_libfdt':
> /home/mstolpe/repositories/build_base_station/build/workspace/sources/u-boot-copy/boot/image-fdt.c:633:(.text.image_setup_libfdt+0x150):
> undefined reference to `ft_board_setup'
> aarch64-linux-gnu-ld.bfd: cmd/fdt.o: in function `do_fdt':
> /home/mstolpe/repositories/build_base_station/build/workspace/sources/u-boot-copy/cmd/fdt.c:687:(.text.do_fdt+0xf98):
> undefined reference to `ft_board_setup'
> Segmentation fault (core dumped)
> make: *** [Makefile:1801: u-boot] Error 139
> make: *** Deleting file 'u-boot'
> 
> I guess this shouldn't happen?

I think this is expected as you are trying to enable CONFIG_OF_BOARD_SETUP but
AM64 platform does not implement ft_board_setup.

Platforms need to implement ft_board_setup for platform specific knobs (for
e.g. simplefb for splash etc) if using CONFIG_OF_BOARD_SETUP as per below
snippet in boot/image-fdt.c :

        if (IS_ENABLED(CONFIG_OF_BOARD_SETUP)) {

                const char *skip_board_fixup;



                skip_board_fixup = env_get("skip_board_fixup");

                if (skip_board_fixup && ((int)simple_strtol(skip_board_fixup,
NULL, 10) == 1)) {
                        printf("skip board fdt fixup\n");

                } else {

                        fdt_ret = ft_board_setup(blob, gd->bd);

                        if (fdt_ret) {

                                printf("ERROR: board-specific fdt fixup
failed: %s\n",
                                       fdt_strerror(fdt_ret));

                                goto err;

                        }

                }

        }

Regards
Devarsh
> 
> BR
> Martin
>
Martin Stolpe Oct. 11, 2024, 12:22 p.m. UTC | #7
Hi,

Sorry if this is a stupid question but what do I have to do to add a "
Reviewed-by" from myself to this patch series?

BR
Martin
Peter Robinson Oct. 11, 2024, 12:33 p.m. UTC | #8
On Fri, 11 Oct 2024 at 13:22, Martin Stolpe <martinstolpe@gmail.com> wrote:
>
> Hi,
>
> Sorry if this is a stupid question but what do I have to do to add a " Reviewed-by" from myself to this patch series?

Just reply all with the reviewed-by and patchwork will automatically
apply it when I accept it, I think there needs to be a new v2 of this
patch.
diff mbox series

Patch

diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index ab5ea85cf9..bc49708f85 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -572,7 +572,7 @@  int ft_board_setup(void *blob, struct bd_info *bd)
 	node = fdt_node_offset_by_compatible(blob, -1, "simple-framebuffer");
 	if (node < 0)
 		fdt_simplefb_add_node(blob);
-	else
+	else if (IS_ENABLED(CONFIG_VIDEO))
 		fdt_simplefb_enable_and_mem_rsv(blob);
 
 #ifdef CONFIG_EFI_LOADER
diff --git a/boot/fdt_simplefb.c b/boot/fdt_simplefb.c
index 5341554845..b6e916ff7d 100644
--- a/boot/fdt_simplefb.c
+++ b/boot/fdt_simplefb.c
@@ -86,6 +86,7 @@  int fdt_simplefb_add_node(void *blob)
 	return fdt_simplefb_configure_node(blob, off);
 }
 
+#if IS_ENABLED(CONFIG_VIDEO)
 /**
  * fdt_simplefb_enable_existing_node() - enable simple-framebuffer DT node
  *
@@ -103,7 +104,6 @@  static int fdt_simplefb_enable_existing_node(void *blob)
 	return fdt_simplefb_configure_node(blob, off);
 }
 
-#if IS_ENABLED(CONFIG_VIDEO)
 int fdt_simplefb_enable_and_mem_rsv(void *blob)
 {
 	int ret;