diff options
author | Tom Rini <trini@konsulko.com> | 2020-01-02 18:12:05 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-01-02 18:12:05 -0500 |
commit | 4b75aa5aa78768fc81b782ee51d960dfed76f6e1 (patch) | |
tree | 92e1792a6466478babc3ba4a70e4e286a5d73e81 | |
parent | 28aa6dc29a0f35c5c5d969c83428a50361932f5b (diff) | |
parent | bf8363931f8bc2a2746f892f154efd170bd5b42e (diff) | |
download | u-boot-4b75aa5aa78768fc81b782ee51d960dfed76f6e1.zip u-boot-4b75aa5aa78768fc81b782ee51d960dfed76f6e1.tar.gz u-boot-4b75aa5aa78768fc81b782ee51d960dfed76f6e1.tar.bz2 |
Merge tag 'fixes-v2020.01' of https://gitlab.denx.de/u-boot/custodians/u-boot-video
- fix missing graphics output on some x86 boards
- avoid using #ifdef in video code
- add .gitignore for video font *.S files
-rw-r--r-- | drivers/video/Kconfig | 5 | ||||
-rw-r--r-- | drivers/video/console_normal.c | 125 | ||||
-rw-r--r-- | drivers/video/console_rotate.c | 325 | ||||
-rw-r--r-- | drivers/video/fonts/.gitignore | 1 | ||||
-rw-r--r-- | drivers/video/vidconsole-uclass.c | 22 | ||||
-rw-r--r-- | drivers/video/video-uclass.c | 54 |
6 files changed, 257 insertions, 275 deletions
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index 4cde0ac..50ab365 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -38,7 +38,6 @@ config BACKLIGHT_GPIO config VIDEO_BPP8 bool "Support 8-bit-per-pixel displays" depends on DM_VIDEO - default n help Support drawing text and bitmaps onto a 8-bit-per-pixel display. Enabling this will include code to support this display. Without @@ -48,7 +47,6 @@ config VIDEO_BPP8 config VIDEO_BPP16 bool "Support 16-bit-per-pixel displays" depends on DM_VIDEO - default n help Support drawing text and bitmaps onto a 16-bit-per-pixel display. Enabling this will include code to support this display. Without @@ -58,7 +56,7 @@ config VIDEO_BPP16 config VIDEO_BPP32 bool "Support 32-bit-per-pixel displays" depends on DM_VIDEO - default n + default y if X86 help Support drawing text and bitmaps onto a 32-bit-per-pixel display. Enabling this will include code to support this display. Without @@ -68,7 +66,6 @@ config VIDEO_BPP32 config VIDEO_ANSI bool "Support ANSI escape sequences in video console" depends on DM_VIDEO - default n help Enable ANSI escape sequence decoding for a more fully functional console. diff --git a/drivers/video/console_normal.c b/drivers/video/console_normal.c index 2f25af7..c3f7ef8 100644 --- a/drivers/video/console_normal.c +++ b/drivers/video/console_normal.c @@ -16,39 +16,36 @@ static int console_normal_set_row(struct udevice *dev, uint row, int clr) { struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent); - void * __maybe_unused line; - int __maybe_unused pixels = VIDEO_FONT_HEIGHT * vid_priv->xsize; - int __maybe_unused i; + void *line; + int pixels = VIDEO_FONT_HEIGHT * vid_priv->xsize; + int i; line = vid_priv->fb + row * VIDEO_FONT_HEIGHT * vid_priv->line_length; switch (vid_priv->bpix) { -#ifdef CONFIG_VIDEO_BPP8 - case VIDEO_BPP8: { - uint8_t *dst = line; + case VIDEO_BPP8: + if (IS_ENABLED(CONFIG_VIDEO_BPP8)) { + uint8_t *dst = line; - for (i = 0; i < pixels; i++) - *dst++ = clr; - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP16 - case VIDEO_BPP16: { - uint16_t *dst = line; - - for (i = 0; i < pixels; i++) - *dst++ = clr; - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP32 - case VIDEO_BPP32: { - uint32_t *dst = line; - - for (i = 0; i < pixels; i++) - *dst++ = clr; - break; - } -#endif + for (i = 0; i < pixels; i++) + *dst++ = clr; + break; + } + case VIDEO_BPP16: + if (IS_ENABLED(CONFIG_VIDEO_BPP16)) { + uint16_t *dst = line; + + for (i = 0; i < pixels; i++) + *dst++ = clr; + break; + } + case VIDEO_BPP32: + if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { + uint32_t *dst = line; + + for (i = 0; i < pixels; i++) + *dst++ = clr; + break; + } default: return -ENOSYS; } @@ -76,7 +73,7 @@ static int console_normal_putc_xy(struct udevice *dev, uint x_frac, uint y, struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev); struct udevice *vid = dev->parent; struct video_priv *vid_priv = dev_get_uclass_priv(vid); - int __maybe_unused i, row; + int i, row; void *line = vid_priv->fb + y * vid_priv->line_length + VID_TO_PIXEL(x_frac) * VNBYTES(vid_priv->bpix); @@ -85,45 +82,45 @@ static int console_normal_putc_xy(struct udevice *dev, uint x_frac, uint y, for (row = 0; row < VIDEO_FONT_HEIGHT; row++) { unsigned int idx = (u8)ch * VIDEO_FONT_HEIGHT + row; - uchar __maybe_unused bits = video_fontdata[idx]; + uchar bits = video_fontdata[idx]; switch (vid_priv->bpix) { -#ifdef CONFIG_VIDEO_BPP8 - case VIDEO_BPP8: { - uint8_t *dst = line; - - for (i = 0; i < VIDEO_FONT_WIDTH; i++) { - *dst++ = (bits & 0x80) ? vid_priv->colour_fg - : vid_priv->colour_bg; - bits <<= 1; + case VIDEO_BPP8: + if (IS_ENABLED(CONFIG_VIDEO_BPP8)) { + uint8_t *dst = line; + + for (i = 0; i < VIDEO_FONT_WIDTH; i++) { + *dst++ = (bits & 0x80) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + bits <<= 1; + } + break; } - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP16 - case VIDEO_BPP16: { - uint16_t *dst = line; - - for (i = 0; i < VIDEO_FONT_WIDTH; i++) { - *dst++ = (bits & 0x80) ? vid_priv->colour_fg - : vid_priv->colour_bg; - bits <<= 1; + case VIDEO_BPP16: + if (IS_ENABLED(CONFIG_VIDEO_BPP16)) { + uint16_t *dst = line; + + for (i = 0; i < VIDEO_FONT_WIDTH; i++) { + *dst++ = (bits & 0x80) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + bits <<= 1; + } + break; } - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP32 - case VIDEO_BPP32: { - uint32_t *dst = line; - - for (i = 0; i < VIDEO_FONT_WIDTH; i++) { - *dst++ = (bits & 0x80) ? vid_priv->colour_fg - : vid_priv->colour_bg; - bits <<= 1; + case VIDEO_BPP32: + if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { + uint32_t *dst = line; + + for (i = 0; i < VIDEO_FONT_WIDTH; i++) { + *dst++ = (bits & 0x80) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + bits <<= 1; + } + break; } - break; - } -#endif default: return -ENOSYS; } diff --git a/drivers/video/console_rotate.c b/drivers/video/console_rotate.c index 71a5c5e..b485255 100644 --- a/drivers/video/console_rotate.c +++ b/drivers/video/console_rotate.c @@ -22,33 +22,30 @@ static int console_set_row_1(struct udevice *dev, uint row, int clr) (row + 1) * VIDEO_FONT_HEIGHT * pbytes; for (j = 0; j < vid_priv->ysize; j++) { switch (vid_priv->bpix) { -#ifdef CONFIG_VIDEO_BPP8 - case VIDEO_BPP8: { - uint8_t *dst = line; + case VIDEO_BPP8: + if (IS_ENABLED(CONFIG_VIDEO_BPP8)) { + uint8_t *dst = line; - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) - *dst++ = clr; - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP16 - case VIDEO_BPP16: { - uint16_t *dst = line; + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) + *dst++ = clr; + break; + } + case VIDEO_BPP16: + if (IS_ENABLED(CONFIG_VIDEO_BPP16)) { + uint16_t *dst = line; - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) - *dst++ = clr; - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP32 - case VIDEO_BPP32: { - uint32_t *dst = line; + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) + *dst++ = clr; + break; + } + case VIDEO_BPP32: + if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { + uint32_t *dst = line; - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) - *dst++ = clr; - break; - } -#endif + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) + *dst++ = clr; + break; + } default: return -ENOSYS; } @@ -99,39 +96,39 @@ static int console_putc_xy_1(struct udevice *dev, uint x_frac, uint y, char ch) for (col = 0; col < VIDEO_FONT_HEIGHT; col++) { switch (vid_priv->bpix) { -#ifdef CONFIG_VIDEO_BPP8 - case VIDEO_BPP8: { - uint8_t *dst = line; - - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { - *dst-- = (pfont[i] & mask) ? vid_priv->colour_fg - : vid_priv->colour_bg; + case VIDEO_BPP8: + if (IS_ENABLED(CONFIG_VIDEO_BPP8)) { + uint8_t *dst = line; + + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { + *dst-- = (pfont[i] & mask) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + } + break; } - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP16 - case VIDEO_BPP16: { - uint16_t *dst = line; - - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { - *dst-- = (pfont[i] & mask) ? vid_priv->colour_fg - : vid_priv->colour_bg; + case VIDEO_BPP16: + if (IS_ENABLED(CONFIG_VIDEO_BPP16)) { + uint16_t *dst = line; + + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { + *dst-- = (pfont[i] & mask) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + } + break; } - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP32 - case VIDEO_BPP32: { - uint32_t *dst = line; - - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { - *dst-- = (pfont[i] & mask) ? vid_priv->colour_fg - : vid_priv->colour_bg; + case VIDEO_BPP32: + if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { + uint32_t *dst = line; + + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { + *dst-- = (pfont[i] & mask) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + } + break; } - break; - } -#endif default: return -ENOSYS; } @@ -153,33 +150,30 @@ static int console_set_row_2(struct udevice *dev, uint row, int clr) line = vid_priv->fb + vid_priv->ysize * vid_priv->line_length - (row + 1) * VIDEO_FONT_HEIGHT * vid_priv->line_length; switch (vid_priv->bpix) { -#ifdef CONFIG_VIDEO_BPP8 - case VIDEO_BPP8: { - uint8_t *dst = line; + case VIDEO_BPP8: + if (IS_ENABLED(CONFIG_VIDEO_BPP8)) { + uint8_t *dst = line; - for (i = 0; i < pixels; i++) - *dst++ = clr; - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP16 - case VIDEO_BPP16: { - uint16_t *dst = line; - - for (i = 0; i < pixels; i++) - *dst++ = clr; - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP32 - case VIDEO_BPP32: { - uint32_t *dst = line; - - for (i = 0; i < pixels; i++) - *dst++ = clr; - break; - } -#endif + for (i = 0; i < pixels; i++) + *dst++ = clr; + break; + } + case VIDEO_BPP16: + if (IS_ENABLED(CONFIG_VIDEO_BPP16)) { + uint16_t *dst = line; + + for (i = 0; i < pixels; i++) + *dst++ = clr; + break; + } + case VIDEO_BPP32: + if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { + uint32_t *dst = line; + + for (i = 0; i < pixels; i++) + *dst++ = clr; + break; + } default: return -ENOSYS; } @@ -226,42 +220,42 @@ static int console_putc_xy_2(struct udevice *dev, uint x_frac, uint y, char ch) uchar bits = video_fontdata[idx]; switch (vid_priv->bpix) { -#ifdef CONFIG_VIDEO_BPP8 - case VIDEO_BPP8: { - uint8_t *dst = line; - - for (i = 0; i < VIDEO_FONT_WIDTH; i++) { - *dst-- = (bits & 0x80) ? vid_priv->colour_fg - : vid_priv->colour_bg; - bits <<= 1; + case VIDEO_BPP8: + if (IS_ENABLED(CONFIG_VIDEO_BPP8)) { + uint8_t *dst = line; + + for (i = 0; i < VIDEO_FONT_WIDTH; i++) { + *dst-- = (bits & 0x80) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + bits <<= 1; + } + break; } - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP16 - case VIDEO_BPP16: { - uint16_t *dst = line; - - for (i = 0; i < VIDEO_FONT_WIDTH; i++) { - *dst-- = (bits & 0x80) ? vid_priv->colour_fg - : vid_priv->colour_bg; - bits <<= 1; + case VIDEO_BPP16: + if (IS_ENABLED(CONFIG_VIDEO_BPP16)) { + uint16_t *dst = line; + + for (i = 0; i < VIDEO_FONT_WIDTH; i++) { + *dst-- = (bits & 0x80) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + bits <<= 1; + } + break; } - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP32 - case VIDEO_BPP32: { - uint32_t *dst = line; - - for (i = 0; i < VIDEO_FONT_WIDTH; i++) { - *dst-- = (bits & 0x80) ? vid_priv->colour_fg - : vid_priv->colour_bg; - bits <<= 1; + case VIDEO_BPP32: + if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { + uint32_t *dst = line; + + for (i = 0; i < VIDEO_FONT_WIDTH; i++) { + *dst-- = (bits & 0x80) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + bits <<= 1; + } + break; } - break; - } -#endif default: return -ENOSYS; } @@ -281,33 +275,30 @@ static int console_set_row_3(struct udevice *dev, uint row, int clr) line = vid_priv->fb + row * VIDEO_FONT_HEIGHT * pbytes; for (j = 0; j < vid_priv->ysize; j++) { switch (vid_priv->bpix) { -#ifdef CONFIG_VIDEO_BPP8 - case VIDEO_BPP8: { - uint8_t *dst = line; + case VIDEO_BPP8: + if (IS_ENABLED(CONFIG_VIDEO_BPP8)) { + uint8_t *dst = line; - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) - *dst++ = clr; - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP16 - case VIDEO_BPP16: { - uint16_t *dst = line; + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) + *dst++ = clr; + break; + } + case VIDEO_BPP16: + if (IS_ENABLED(CONFIG_VIDEO_BPP16)) { + uint16_t *dst = line; - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) - *dst++ = clr; - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP32 - case VIDEO_BPP32: { - uint32_t *dst = line; + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) + *dst++ = clr; + break; + } + case VIDEO_BPP32: + if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { + uint32_t *dst = line; - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) - *dst++ = clr; - break; - } -#endif + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) + *dst++ = clr; + break; + } default: return -ENOSYS; } @@ -356,39 +347,39 @@ static int console_putc_xy_3(struct udevice *dev, uint x_frac, uint y, char ch) for (col = 0; col < VIDEO_FONT_HEIGHT; col++) { switch (vid_priv->bpix) { -#ifdef CONFIG_VIDEO_BPP8 - case VIDEO_BPP8: { - uint8_t *dst = line; - - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { - *dst++ = (pfont[i] & mask) ? vid_priv->colour_fg - : vid_priv->colour_bg; + case VIDEO_BPP8: + if (IS_ENABLED(CONFIG_VIDEO_BPP8)) { + uint8_t *dst = line; + + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { + *dst++ = (pfont[i] & mask) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + } + break; } - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP16 - case VIDEO_BPP16: { - uint16_t *dst = line; - - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { - *dst++ = (pfont[i] & mask) ? vid_priv->colour_fg - : vid_priv->colour_bg; + case VIDEO_BPP16: + if (IS_ENABLED(CONFIG_VIDEO_BPP16)) { + uint16_t *dst = line; + + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { + *dst++ = (pfont[i] & mask) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + } + break; } - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP32 - case VIDEO_BPP32: { - uint32_t *dst = line; - - for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { - *dst++ = (pfont[i] & mask) ? vid_priv->colour_fg - : vid_priv->colour_bg; + case VIDEO_BPP32: + if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { + uint32_t *dst = line; + + for (i = 0; i < VIDEO_FONT_HEIGHT; i++) { + *dst++ = (pfont[i] & mask) ? + vid_priv->colour_fg : + vid_priv->colour_bg; + } + break; } - break; - } -#endif default: return -ENOSYS; } diff --git a/drivers/video/fonts/.gitignore b/drivers/video/fonts/.gitignore new file mode 100644 index 0000000..86ec950 --- /dev/null +++ b/drivers/video/fonts/.gitignore @@ -0,0 +1 @@ +*.S diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c index c690ece..75c7e25 100644 --- a/drivers/video/vidconsole-uclass.c +++ b/drivers/video/vidconsole-uclass.c @@ -116,7 +116,6 @@ static void vidconsole_newline(struct udevice *dev) video_sync(dev->parent, false); } -#if CONFIG_IS_ENABLED(VIDEO_BPP16) || CONFIG_IS_ENABLED(VIDEO_BPP32) static const struct vid_rgb colors[VID_COLOR_COUNT] = { { 0x00, 0x00, 0x00 }, /* black */ { 0xc0, 0x00, 0x00 }, /* red */ @@ -135,23 +134,22 @@ static const struct vid_rgb colors[VID_COLOR_COUNT] = { { 0x00, 0xff, 0xff }, /* bright cyan */ { 0xff, 0xff, 0xff }, /* white */ }; -#endif u32 vid_console_color(struct video_priv *priv, unsigned int idx) { switch (priv->bpix) { -#if CONFIG_IS_ENABLED(VIDEO_BPP16) case VIDEO_BPP16: - return ((colors[idx].r >> 3) << 11) | - ((colors[idx].g >> 2) << 5) | - ((colors[idx].b >> 3) << 0); -#endif -#if CONFIG_IS_ENABLED(VIDEO_BPP32) + if (CONFIG_IS_ENABLED(VIDEO_BPP16)) { + return ((colors[idx].r >> 3) << 11) | + ((colors[idx].g >> 2) << 5) | + ((colors[idx].b >> 3) << 0); + } case VIDEO_BPP32: - return (colors[idx].r << 16) | - (colors[idx].g << 8) | - (colors[idx].b << 0); -#endif + if (CONFIG_IS_ENABLED(VIDEO_BPP32)) { + return (colors[idx].r << 16) | + (colors[idx].g << 8) | + (colors[idx].b << 0); + } default: /* * For unknown bit arrangements just support diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index 5ea7568..12057c8 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -92,26 +92,24 @@ int video_clear(struct udevice *dev) struct video_priv *priv = dev_get_uclass_priv(dev); switch (priv->bpix) { -#ifdef CONFIG_VIDEO_BPP16 - case VIDEO_BPP16: { - u16 *ppix = priv->fb; - u16 *end = priv->fb + priv->fb_size; - - while (ppix < end) - *ppix++ = priv->colour_bg; - break; - } -#endif -#ifdef CONFIG_VIDEO_BPP32 - case VIDEO_BPP32: { - u32 *ppix = priv->fb; - u32 *end = priv->fb + priv->fb_size; - - while (ppix < end) - *ppix++ = priv->colour_bg; - break; - } -#endif + case VIDEO_BPP16: + if (IS_ENABLED(CONFIG_VIDEO_BPP16)) { + u16 *ppix = priv->fb; + u16 *end = priv->fb + priv->fb_size; + + while (ppix < end) + *ppix++ = priv->colour_bg; + break; + } + case VIDEO_BPP32: + if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { + u32 *ppix = priv->fb; + u32 *end = priv->fb + priv->fb_size; + + while (ppix < end) + *ppix++ = priv->colour_bg; + break; + } default: memset(priv->fb, priv->colour_bg, priv->fb_size); break; @@ -125,14 +123,14 @@ void video_set_default_colors(struct udevice *dev, bool invert) struct video_priv *priv = dev_get_uclass_priv(dev); int fore, back; -#ifdef CONFIG_SYS_WHITE_ON_BLACK - /* White is used when switching to bold, use light gray here */ - fore = VID_LIGHT_GRAY; - back = VID_BLACK; -#else - fore = VID_BLACK; - back = VID_WHITE; -#endif + if (CONFIG_IS_ENABLED(SYS_WHITE_ON_BLACK)) { + /* White is used when switching to bold, use light gray here */ + fore = VID_LIGHT_GRAY; + back = VID_BLACK; + } else { + fore = VID_BLACK; + back = VID_WHITE; + } if (invert) { int temp; |