Commit 1d4ed26f authored by Andre Przywara's avatar Andre Przywara Committed by Anatolij Gustschin

video: cfb_console: fix 32-bit display on 64-bit architectures

"unsigned long" is a lousy data type when it comes to match peripheral
hardware registers with a fixed size.
Just do the obvious and match a 32-bit display format with an "u32"
data type for casting.
This fixes the logo display on 64-bit architectures, which produced
a black line on the right side of the logo with non-black backgrounds.
Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
parent 3fd2b3aa
...@@ -1079,8 +1079,8 @@ __weak void video_set_lut(unsigned int index, unsigned char r, ...@@ -1079,8 +1079,8 @@ __weak void video_set_lut(unsigned int index, unsigned char r,
} }
#define FILL_32BIT_X888RGB(r,g,b) { \ #define FILL_32BIT_X888RGB(r,g,b) { \
*(unsigned long *)fb = \ *(u32 *)fb = \
SWAP32((unsigned long)(((r<<16) | \ SWAP32((unsigned int)(((r<<16) | \
(g<<8) | \ (g<<8) | \
b))); \ b))); \
fb += 4; \ fb += 4; \
...@@ -1161,7 +1161,7 @@ static void draw_bitmap(uchar **fb, uchar *bm, struct palette *p, ...@@ -1161,7 +1161,7 @@ static void draw_bitmap(uchar **fb, uchar *bm, struct palette *p,
break; break;
case GDF_32BIT_X888RGB: case GDF_32BIT_X888RGB:
for (i = 0; i < cnt; i++) { for (i = 0; i < cnt; i++) {
*(unsigned long *) addr = p[bm[*off]].ce.dw; *(u32 *) addr = p[bm[*off]].ce.dw;
addr += 4; addr += 4;
} }
break; break;
...@@ -1825,8 +1825,8 @@ static void plot_logo_or_black(void *screen, int x, int y, int black) ...@@ -1825,8 +1825,8 @@ static void plot_logo_or_black(void *screen, int x, int y, int black)
(b >> 3))); (b >> 3)));
break; break;
case GDF_32BIT_X888RGB: case GDF_32BIT_X888RGB:
*(unsigned long *) dest = *(u32 *) dest =
SWAP32((unsigned long) ( SWAP32((u32) (
(r << 16) | (r << 16) |
(g << 8) | (g << 8) |
b)); b));
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment