Hi Bastian,

there is a number of issues with this patch, please see comments
below.

On Fri, 10 Aug 2012 09:26:43 +0200
Bastian Ruppert <bastian.rupp...@sewerin.de> wrote:

> Signed-off-by: Bastian Ruppert <bastian.rupp...@sewerin.de>
> CC: Anatolij Gustschin <ag...@denx.de>
> CC: Tom Rini <tr...@ti.com>
> CC: Stefano Babic <sba...@denx.de>
> ---
>  drivers/video/cfb_console.c |   61 
> ++++++++++++++++++++++++++++---------------
>  1 files changed, 40 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
> index 19d061f..21b52bd 100644
> --- a/drivers/video/cfb_console.c
> +++ b/drivers/video/cfb_console.c
> @@ -66,7 +66,11 @@
>   * CONFIG_CONSOLE_TIME             - display time/date in upper right
>   *                           corner, needs CONFIG_CMD_DATE and
>   *                           CONFIG_CONSOLE_CURSOR
> - * CONFIG_VIDEO_LOGO       - display Linux Logo in upper left corner
> + * CONFIG_VIDEO_LOGO       - display Linux Logo in upper left corner.
> + *                           Use CONFIG_SPLASH_SCREEN_ALIGN with
> + *                           environment variable "splashpos" to place
> + *                           the logo on other position. In this case
> + *                           no CONSOLE_EXTRA_INFO is possible.
>   * CONFIG_VIDEO_BMP_LOGO      - use bmp_logo instead of linux_logo
>   * CONFIG_CONSOLE_EXTRA_INFO  - display additional board information
>   *                           strings that normaly goes to serial
> @@ -369,6 +373,8 @@ static void *video_fb_address;    /* frame buffer address 
> */
>  static void *video_console_address;  /* console buffer start address */
>  
>  static int video_logo_height = VIDEO_LOGO_HEIGHT;
> +static int video_logo_xpos;
> +static int video_logo_ypos;
>  
>  static int __maybe_unused cursor_state;
>  static int __maybe_unused old_col;
> @@ -1594,40 +1600,53 @@ static void *video_logo(void)
>       __maybe_unused int y_off = 0;
>  
>  #ifdef CONFIG_SPLASH_SCREEN
> -     char *s;
>       ulong addr;
> -
> -     s = getenv("splashimage");
> +#endif
> +#if defined(CONFIG_SPLASH_SCREEN) || defined(CONFIG_SPLASH_SCREEN_ALIGN)
> +     char *s;
> +#endif

these ifdefs should be better reduced, I think we can use __maybe_unused
here, like for y_off above.

> +#ifdef CONFIG_SPLASH_SCREEN_ALIGN
> +     s = getenv("splashpos");
>       if (s != NULL) {
> -             int x = 0, y = 0;
> +             if (s[0] == 'm')
> +                     video_logo_xpos = BMP_ALIGN_CENTER;

The 'm' case will work with splashscreen, but not with the video logo.
There is no proper offset calculation in logo_plot() if xpos or ypos
are set to BMP_ALIGN_CENTER. As a result the logo offset will be wrong
and an access to wrong offset can even brick the board (on boards with
small frame buffers).

...
> +
> +             if (video_display_bitmap(addr,                  \
> +                                     video_logo_xpos,        \

no need to use "\" here.

...
> +     logo_plot(video_fb_address,             \
> +             VIDEO_COLS,                     \
> +             video_logo_xpos,                \

ditto.

...
> +#ifdef CONFIG_SPLASH_SCREEN_ALIGN
> +     /* when using splashpos for video_logo, no console output */
> +     return (video_fb_address + video_logo_height * VIDEO_LINE_LEN);

The returned address is used as text console offset, so if the logo is
moved down, the video_logo_height should be increased by video_logo_ypos.
Otherwise the text and cursor positions will be wrong in the video
console.

I've fixed these issues and submitted a patch v2 3/6. Please test.

Thanks,

Anatolij
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to