diff mbox

[U-Boot] video: cfb_console: fix 32-bit display on 64-bit architectures

Message ID 1488762818-21115-1-git-send-email-andre.przywara@arm.com
State Accepted
Commit 1d4ed26fafb4250a1a9f9aba55de05062330ea5b
Delegated to: Anatolij Gustschin
Headers show

Commit Message

Andre Przywara March 6, 2017, 1:13 a.m. UTC
"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: Andre Przywara <andre.przywara@arm.com>
---
 drivers/video/cfb_console.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Anatolij Gustschin March 7, 2017, 8:25 p.m. UTC | #1
On Mon,  6 Mar 2017 01:13:38 +0000
Andre Przywara andre.przywara@arm.com wrote:

> "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: Andre Przywara <andre.przywara@arm.com>
> ---
>  drivers/video/cfb_console.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)

applied to u-boot-video/master. Thanks!

--
Anatolij
diff mbox

Patch

diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
index 3c0696e..d75abb6 100644
--- a/drivers/video/cfb_console.c
+++ b/drivers/video/cfb_console.c
@@ -1079,8 +1079,8 @@  __weak void video_set_lut(unsigned int index, unsigned char r,
 }
 
 #define FILL_32BIT_X888RGB(r,g,b) {			\
-	*(unsigned long *)fb =				\
-		SWAP32((unsigned long)(((r<<16) |	\
+	*(u32 *)fb =				\
+		SWAP32((unsigned int)(((r<<16) |	\
 					(g<<8)  |	\
 					 b)));		\
 	fb += 4;					\
@@ -1161,7 +1161,7 @@  static void draw_bitmap(uchar **fb, uchar *bm, struct palette *p,
 		break;
 	case GDF_32BIT_X888RGB:
 		for (i = 0; i < cnt; i++) {
-			*(unsigned long *) addr = p[bm[*off]].ce.dw;
+			*(u32 *) addr = p[bm[*off]].ce.dw;
 			addr += 4;
 		}
 		break;
@@ -1825,8 +1825,8 @@  static void plot_logo_or_black(void *screen, int x, int y, int black)
 							 (b >> 3)));
 				break;
 			case GDF_32BIT_X888RGB:
-				*(unsigned long *) dest =
-					SWAP32((unsigned long) (
+				*(u32 *) dest =
+					SWAP32((u32) (
 							(r << 16) |
 							(g <<  8) |
 							 b));