[U-Boot] [PATCH v2 04/22] x86: video: Add support for CONFIG_CONSOLE_SCROLL_LINES

Simon Glass sjg at chromium.org
Tue Jan 20 01:33:08 CET 2015


Hi Anatolij,

On 1 January 2015 at 16:17, Simon Glass <sjg at chromium.org> wrote:
> Some machines are very slow to scroll their displays. To cope with this,
> support the CONFIG_CONSOLE_SCROLL_LINES option. Setting this to 5 allows
> the display to operate at an acceptable speed by scrolling 5 lines at
> a time.
>
> This same option is available for LCDs so when these systems are unified
> this code can be unified also.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>

Are you happy with this patch? If so, is it OK for me to pick it up via x86?

> ---
>
> Changes in v2: None
>
>  drivers/video/cfb_console.c | 26 +++++++++++++++++---------
>  1 file changed, 17 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
> index a653bb4..75cdf61 100644
> --- a/drivers/video/cfb_console.c
> +++ b/drivers/video/cfb_console.c
> @@ -312,7 +312,11 @@ void console_cursor(int state);
>  #define CONSOLE_ROW_SECOND     (video_console_address + CONSOLE_ROW_SIZE)
>  #define CONSOLE_ROW_LAST       (video_console_address + CONSOLE_SIZE - CONSOLE_ROW_SIZE)
>  #define CONSOLE_SIZE           (CONSOLE_ROW_SIZE * CONSOLE_ROWS)
> -#define CONSOLE_SCROLL_SIZE    (CONSOLE_SIZE - CONSOLE_ROW_SIZE)
> +
> +/* By default we scroll by a single line */
> +#ifndef CONFIG_CONSOLE_SCROLL_LINES
> +#define CONFIG_CONSOLE_SCROLL_LINES 1
> +#endif
>
>  /* Macros */
>  #ifdef VIDEO_FB_LITTLE_ENDIAN
> @@ -753,26 +757,33 @@ static void console_clear_line(int line, int begin, int end)
>
>  static void console_scrollup(void)
>  {
> +       const int rows = CONFIG_CONSOLE_SCROLL_LINES;
> +       int i;
> +
>         /* copy up rows ignoring the first one */
>
>  #ifdef VIDEO_HW_BITBLT
>         video_hw_bitblt(VIDEO_PIXEL_SIZE,       /* bytes per pixel */
>                         0,                      /* source pos x */
>                         video_logo_height +
> -                               VIDEO_FONT_HEIGHT, /* source pos y */
> +                               VIDEO_FONT_HEIGHT * rows, /* source pos y */
>                         0,                      /* dest pos x */
>                         video_logo_height,      /* dest pos y */
>                         VIDEO_VISIBLE_COLS,     /* frame width */
>                         VIDEO_VISIBLE_ROWS
>                         - video_logo_height
> -                       - VIDEO_FONT_HEIGHT     /* frame height */
> +                       - VIDEO_FONT_HEIGHT * rows      /* frame height */
>                 );
>  #else
> -       memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,
> -               CONSOLE_SCROLL_SIZE >> 2);
> +       memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_FIRST + rows * CONSOLE_ROW_SIZE,
> +               (CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows) >> 2);
>  #endif
>         /* clear the last one */
> -       console_clear_line(CONSOLE_ROWS - 1, 0, CONSOLE_COLS - 1);
> +       for (i = 1; i <= rows; i++)
> +               console_clear_line(CONSOLE_ROWS - i, 0, CONSOLE_COLS - 1);
> +
> +       /* Decrement row number */
> +       console_row -= rows;
>  }
>
>  static void console_back(void)
> @@ -884,9 +895,6 @@ static void console_newline(int n)
>         if (console_row >= CONSOLE_ROWS) {
>                 /* Scroll everything up */
>                 console_scrollup();
> -
> -               /* Decrement row number */
> -               console_row = CONSOLE_ROWS - 1;
>         }
>  }
>
> --
> 2.2.0.rc0.207.ga3a616c
>

Regards,
Simon


More information about the U-Boot mailing list