diff mbox series

[4/4] common: spl: spl: Remove video driver before u-boot proper

Message ID 20230410082021.25246-5-n-jain1@ti.com
State Superseded
Headers show
Series [1/4] configs: am62x_evm_a53_defconfig: Changes in memory map to support SPL splash screen | expand

Commit Message

Nikhil Jain April 10, 2023, 8:20 a.m. UTC
Add method to remove video driver before loading u-boot proper. When
bootstage changes from SPL to u-boot proper, noo method is called to
remove video driver, and at u-boot proper if video driver is not
enabled, the video driver starts displaying garbage on the screen,
because there is no reserved space for video and the frame buffer gets
u-boot proper data written.

Signed-off-by: Nikhil M Jain <n-jain1@ti.com>
---
 common/spl/spl.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

Comments

Simon Glass April 19, 2023, 1:46 a.m. UTC | #1
Hi Nikhil,

On Mon, 10 Apr 2023 at 02:21, Nikhil M Jain <n-jain1@ti.com> wrote:
>
> Add method to remove video driver before loading u-boot proper. When
> bootstage changes from SPL to u-boot proper, noo method is called to
> remove video driver, and at u-boot proper if video driver is not
> enabled, the video driver starts displaying garbage on the screen,
> because there is no reserved space for video and the frame buffer gets
> u-boot proper data written.
>
> Signed-off-by: Nikhil M Jain <n-jain1@ti.com>
> ---
>  common/spl/spl.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index a630e79866..72078a8ebc 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -35,6 +35,8 @@
>  #include <mapmem.h>
>  #include <dm/root.h>
>  #include <dm/util.h>
> +#include <dm/device-internal.h>
> +#include <dm/uclass-internal.h>
>  #include <linux/compiler.h>
>  #include <fdt_support.h>
>  #include <bootcount.h>
> @@ -889,6 +891,19 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
>                 debug("Failed to stash bootstage: err=%d\n", ret);
>  #endif
>
> +#if defined(CONFIG_SPL_VIDEO)

Should use if(IS_ENABLED(...))

But it would be better to pass the frame buffer to U-Boot proper so it
can use the same address. This can be done with a bloblist record. See
for example [1]

> +       struct udevice *dev;
> +       int rc;
> +
> +       rc = uclass_find_device(UCLASS_VIDEO, 0, &dev);

uclass_find_first_device

> +       if (!rc && dev) {
> +               rc = device_remove(dev, DM_REMOVE_NORMAL);
> +               if (rc)
> +                       printf("Cannot remove video device '%s' (err=%d)\n",
> +                              dev->name, rc);
> +       }
> +#endif
> +
>         spl_board_prepare_for_boot();
>         jump_to_image_no_args(&spl_image);
>  }
> --
> 2.34.1
>

Regards,
Simon

[1] https://patchwork.ozlabs.org/project/uboot/patch/20230331103047.26.Ieb0824a81d8ad4109fa501c9497b01b8749f913a@changeid/
Nikhil Jain April 19, 2023, 7:33 a.m. UTC | #2
Hi Simon,

On 19/04/23 07:16, Simon Glass wrote:
> Hi Nikhil,
> 
> On Mon, 10 Apr 2023 at 02:21, Nikhil M Jain <n-jain1@ti.com> wrote:
>>
>> Add method to remove video driver before loading u-boot proper. When
>> bootstage changes from SPL to u-boot proper, noo method is called to
>> remove video driver, and at u-boot proper if video driver is not
>> enabled, the video driver starts displaying garbage on the screen,
>> because there is no reserved space for video and the frame buffer gets
>> u-boot proper data written.
>>
>> Signed-off-by: Nikhil M Jain <n-jain1@ti.com>
>> ---
>>   common/spl/spl.c | 15 +++++++++++++++
>>   1 file changed, 15 insertions(+)
>>
>> diff --git a/common/spl/spl.c b/common/spl/spl.c
>> index a630e79866..72078a8ebc 100644
>> --- a/common/spl/spl.c
>> +++ b/common/spl/spl.c
>> @@ -35,6 +35,8 @@
>>   #include <mapmem.h>
>>   #include <dm/root.h>
>>   #include <dm/util.h>
>> +#include <dm/device-internal.h>
>> +#include <dm/uclass-internal.h>
>>   #include <linux/compiler.h>
>>   #include <fdt_support.h>
>>   #include <bootcount.h>
>> @@ -889,6 +891,19 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
>>                  debug("Failed to stash bootstage: err=%d\n", ret);
>>   #endif
>>
>> +#if defined(CONFIG_SPL_VIDEO)
> 
> Should use if(IS_ENABLED(...))
> 
> But it would be better to pass the frame buffer to U-Boot proper so it
> can use the same address. This can be done with a bloblist record. See
> for example [1]
>
Yes it would be better, I will try to use bloblist for passing frame 
buffer to u-boot.

>> +       struct udevice *dev;
>> +       int rc;
>> +
>> +       rc = uclass_find_device(UCLASS_VIDEO, 0, &dev);
> 
> uclass_find_first_device
> 
>> +       if (!rc && dev) {
>> +               rc = device_remove(dev, DM_REMOVE_NORMAL);
>> +               if (rc)
>> +                       printf("Cannot remove video device '%s' (err=%d)\n",
>> +                              dev->name, rc);
>> +       }
>> +#endif
>> +
>>          spl_board_prepare_for_boot();
>>          jump_to_image_no_args(&spl_image);
>>   }
>> --
>> 2.34.1
>>
> 
> Regards,
> Simon
> 
> [1] https://patchwork.ozlabs.org/project/uboot/patch/20230331103047.26.Ieb0824a81d8ad4109fa501c9497b01b8749f913a@changeid/

Thanks,
Nikhil
diff mbox series

Patch

diff --git a/common/spl/spl.c b/common/spl/spl.c
index a630e79866..72078a8ebc 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -35,6 +35,8 @@ 
 #include <mapmem.h>
 #include <dm/root.h>
 #include <dm/util.h>
+#include <dm/device-internal.h>
+#include <dm/uclass-internal.h>
 #include <linux/compiler.h>
 #include <fdt_support.h>
 #include <bootcount.h>
@@ -889,6 +891,19 @@  void board_init_r(gd_t *dummy1, ulong dummy2)
 		debug("Failed to stash bootstage: err=%d\n", ret);
 #endif
 
+#if defined(CONFIG_SPL_VIDEO)
+	struct udevice *dev;
+	int rc;
+
+	rc = uclass_find_device(UCLASS_VIDEO, 0, &dev);
+	if (!rc && dev) {
+		rc = device_remove(dev, DM_REMOVE_NORMAL);
+		if (rc)
+			printf("Cannot remove video device '%s' (err=%d)\n",
+			       dev->name, rc);
+	}
+#endif
+
 	spl_board_prepare_for_boot();
 	jump_to_image_no_args(&spl_image);
 }