Skip to contentSkip to conversation

common/lcd cleanup

PATCH Superseded Nikita Kiryanov 5 participants 13 messages Aug 9, 2012 – Sep 24, 2012

lore
Share & tools
lore
#0 lore raw

v3 cover common/lcd cleanup

This patch series attempts to simplify #ifdef complexity in common/lcd.c.

It was compile tested on Arm and PowerPC using MAKEALL

Changes in V3:
- Rebased on latest u-boot-video
- Removed volatile qualifiers in patch 3 since the use of volatile is discouraged and it looks like it is safe to remove them.

Changes in V2:
- Rebased on u-boot-video
- patches 2 and 3 of original patchset dropped because I'm not sure what to do about them
- simplify lcd_logo: used bitmap_display() to further simplify code
- simplify lcd_display_bitmap: fixed pointer increment error
- simplify lcd_display_bitmap: change to simplify lcd_logo breaks MCC200 board because it does not #define CONFIG_CMD_BMP. Added a local implementation of bitmap_display().

Nikita Kiryanov (4):
common lcd: simplify lcd_logo
common lcd: simplify lcd_display
common lcd: simplify core functions
common lcd: simplify lcd_display_bitmap

 board/mcc200/lcd.c |   20 +++++++
 common/lcd.c       |  145 +++++++++++++++++++++++++++-------------------------
 2 files changed, 96 insertions(+), 69 deletions(-)
Signature · 1 line
1.7.5.4
#1 lore raw

PATCH v3 1/4 common lcd: simplify lcd_logo

Simplify lcd_logo by extracting bmp unzip into its own function.

---

Changes in V2:
- used bitmap_display() to further simplify code

 common/lcd.c |   12 +-----------
 1 files changed, 1 insertions(+), 11 deletions(-)
common/lcd.c +1 -11
index 506a138..8890635 100644
@@ -842,17 +842,7 @@ static void *lcd_logo(void)
 		}
 #endif /* CONFIG_SPLASH_SCREEN_ALIGN */
 
-#ifdef CONFIG_VIDEO_BMP_GZIP
-		bmp_image_t *bmp = (bmp_image_t *)addr;
-		unsigned long len;
-
-		if (!((bmp->header.signature[0] == 'B') &&
-			(bmp->header.signature[1] == 'M'))) {
-			addr = (ulong)gunzip_bmp(addr, &len);
-		}
-#endif
-
-		if (lcd_display_bitmap(addr, x, y) == 0)
+		if (bmp_display(addr, x, y) == 0)
 			return (void *)lcd_base;
 	}
 #endif /* CONFIG_SPLASH_SCREEN */
Signature · 1 line
1.7.5.4
#2 lore raw

PATCH v3 2/4 common lcd: simplify lcd_display

In reply to Nikita Kiryanov

Simplify lcd_display by centralizing code into a funciton

---
 common/lcd.c |   27 ++++++++++++++++++---------
 1 files changed, 18 insertions(+), 9 deletions(-)
common/lcd.c +18 -9
index 8890635..4a5c8d5 100644
@@ -607,6 +607,22 @@ static inline void bitmap_plot(int x, int y) {}
 
 #ifdef CONFIG_SPLASH_SCREEN_ALIGN
 #define BMP_ALIGN_CENTER	0x7FFF
+
+static void splash_align_axis(int *axis, unsigned long panel_size,
+					unsigned long picture_size)
+{
+	unsigned long panel_picture_delta = panel_size - picture_size;
+	unsigned long axis_alignment;
+
+	if (*axis == BMP_ALIGN_CENTER)
+		axis_alignment = panel_picture_delta / 2;
+	else if (*axis < 0)
+		axis_alignment = panel_picture_delta + *axis + 1;
+	else
+		return;
+
+	*axis = max(0, axis_alignment);
+}
 #endif
 
 int lcd_display_bitmap(ulong bmp_image, int x, int y)
@@ -722,15 +738,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 	padded_line = (width&0x3) ? ((width&~0x3)+4) : (width);
 
 #ifdef CONFIG_SPLASH_SCREEN_ALIGN
-	if (x == BMP_ALIGN_CENTER)
-		x = max(0, (pwidth - width) / 2);
-	else if (x < 0)
-		x = max(0, pwidth - width + x + 1);
-
-	if (y == BMP_ALIGN_CENTER)
-		y = max(0, (panel_info.vl_row - height) / 2);
-	else if (y < 0)
-		y = max(0, panel_info.vl_row - height + y + 1);
+	splash_align_axis(&x, pwidth, width);
+	splash_align_axis(&y, panel_info.vl_row, height);
 #endif /* CONFIG_SPLASH_SCREEN_ALIGN */
 
 	if ((x + width) > pwidth)
Signature · 1 line
1.7.5.4
#3 lore raw

PATCH v3 3/4 common lcd: simplify core functions

In reply to Nikita Kiryanov

Move highly platform dependant code into its own function to reduce the number of #ifdefs in the bigger functions

---

Changes in V3:
- Removed volatile qualifiers in patch 3 since the use of volatile is discouraged and it looks like it is safe to remove them.

 common/lcd.c |   62 ++++++++++++++++++++++++++++-----------------------------
 1 files changed, 30 insertions(+), 32 deletions(-)
common/lcd.c +30 -32
index 4a5c8d5..0f93eae 100644
@@ -498,23 +498,37 @@ static int lcd_getbgcolor(void)
 /************************************************************************/
 /* ** Chipset depending Bitmap / Logo stuff...                          */
 /************************************************************************/
+static inline ushort *configuration_get_cmap(void)
+{
+#if defined CONFIG_CPU_PXA
+	struct pxafb_info *fbi = &panel_info.pxa;
+	return (ushort *)fbi->palette;
+#elif defined(CONFIG_MPC823)
+	immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
+	cpm8xx_t *cp = &(immr->im_cpm);
+	return (ushort *)&(cp->lcd_cmap[255 * sizeof(ushort)]);
+#elif defined(CONFIG_ATMEL_LCD)
+	return (ushort *)(panel_info.mmio + ATMEL_LCDC_LUT(0));
+#else
+	return (ushort *)panel_info.cmap;
+#endif
+}
+
 #ifdef CONFIG_LCD_LOGO
 void bitmap_plot(int x, int y)
 {
 #ifdef CONFIG_ATMEL_LCD
-	uint *cmap;
+	uint *cmap = (uint *)bmp_logo_palette;
 #else
-	ushort *cmap;
+	ushort *cmap = (ushort *)bmp_logo_palette;
 #endif
 	ushort i, j;
 	uchar *bmap;
 	uchar *fb;
 	ushort *fb16;
-#if defined(CONFIG_CPU_PXA)
-	struct pxafb_info *fbi = &panel_info.pxa;
-#elif defined(CONFIG_MPC823)
-	volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
-	volatile cpm8xx_t *cp = &(immr->im_cpm);
+#if defined(CONFIG_MPC823)
+	immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
+	cpm8xx_t *cp = &(immr->im_cpm);
 #endif
 
 	debug("Logo: width %d  height %d  colors %d  cmap %d\n",
@@ -525,20 +539,17 @@ void bitmap_plot(int x, int y)
 	fb   = (uchar *)(lcd_base + y * lcd_line_length + x);
 
 	if (NBITS(panel_info.vl_bpix) < 12) {
-		/* Leave room for default color map */
-#if defined(CONFIG_CPU_PXA)
-		cmap = (ushort *) fbi->palette;
-#elif defined(CONFIG_MPC823)
+		/* Leave room for default color map
+		 * default case: generic system with no cmap (most likely 16bpp)
+		 * cmap was set to the source palette, so no change is done.
+		 * This avoids even more ifdefs in the next stanza
+		 */
+#if defined(CONFIG_MPC823)
 		cmap = (ushort *) &(cp->lcd_cmap[BMP_LOGO_OFFSET * sizeof(ushort)]);
 #elif defined(CONFIG_ATMEL_LCD)
-		cmap = (uint *) (panel_info.mmio + ATMEL_LCDC_LUT(0));
+		cmap = (uint *)configuration_get_cmap();
 #else
-		/*
-		 * default case: generic system with no cmap (most likely 16bpp)
-		 * We set cmap to the source palette, so no change is done.
-		 * This avoids even more ifdef in the next stanza
-		 */
-		cmap = bmp_logo_palette;
+		cmap = configuration_get_cmap();
 #endif
 
 		WATCHDOG_RESET();
@@ -639,12 +650,6 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 	unsigned long width, height, byte_width;
 	unsigned long pwidth = panel_info.vl_col;
 	unsigned colors, bpix, bmp_bpix;
-#if defined(CONFIG_CPU_PXA)
-	struct pxafb_info *fbi = &panel_info.pxa;
-#elif defined(CONFIG_MPC823)
-	volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
-	volatile cpm8xx_t *cp = &(immr->im_cpm);
-#endif
 
 	if (!((bmp->header.signature[0] == 'B') &&
 		(bmp->header.signature[1] == 'M'))) {
@@ -682,14 +687,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 #if !defined(CONFIG_MCC200)
 	/* MCC200 LCD doesn't need CMAP, supports 1bpp b&w only */
 	if (bmp_bpix == 8) {
-#if defined(CONFIG_CPU_PXA)
-		cmap = (ushort *)fbi->palette;
-#elif defined(CONFIG_MPC823)
-		cmap = (ushort *)&(cp->lcd_cmap[255*sizeof(ushort)]);
-#elif !defined(CONFIG_ATMEL_LCD) && !defined(CONFIG_EXYNOS_FB)
-		cmap = panel_info.cmap;
-#endif
-
+		cmap = configuration_get_cmap();
 		cmap_base = cmap;
 
 		/* Set color map */
Signature · 1 line
1.7.5.4
#4 lore raw

PATCH v3 4/4 common lcd: simplify lcd_display_bitmap

In reply to Nikita Kiryanov

Move highly platform dependant code into its own functions to reduce the number of #ifdefs in lcd_display_bitmap

To avoid breaking the mcc200 board which does not #define CONFIG_CMD_BMP, this patch also implements bmp_display() for mcc200.

---

Changes in V2:
- fixed pointer increment error
- change to simplify lcd_logo breaks MCC200 board because it does not #define CONFIG_CMD_BMP. Added a local implementation of bitmap_display().

 board/mcc200/lcd.c |   20 ++++++++++++++++++++
 common/lcd.c       |   44 +++++++++++++++++++++++++++-----------------
 2 files changed, 47 insertions(+), 17 deletions(-)
board/mcc200/lcd.c +20 -0
index d8f754c..893f4b7 100644
@@ -21,6 +21,7 @@
 #include <common.h>
 #include <lcd.h>
 #include <mpc5xxx.h>
+#include <malloc.h>
 
 #ifdef CONFIG_LCD
 
@@ -210,4 +211,23 @@ void show_progress (int size, int tot)
 }
 
 #endif
+
+int bmp_display(ulong addr, int x, int y)
+{
+	int ret;
+	bmp_image_t *bmp = (bmp_image_t *)addr;
+
+	if (!bmp) {
+		printf("There is no valid bmp file at the given address\n");
+		return 1;
+	}
+
+	ret = lcd_display_bitmap((ulong)bmp, x, y);
+
+	if ((unsigned long)bmp != addr)
+		free(bmp);
+
+	return ret;
+}
+
 #endif /* CONFIG_LCD */
common/lcd.c +27 -17

62 lines not on this page · raw message

Signature · 1 line
1.7.5.4
#5 lore raw

v3 cover common/lcd cleanup

In reply to Nikita Kiryanov

Gentle ping.

Quoted 29 lines · Nikita Kiryanov

This patch series attempts to simplify #ifdef complexity in common/lcd.c.

It was compile tested on Arm and PowerPC using MAKEALL

Changes in V3:
- Rebased on latest u-boot-video
- Removed volatile qualifiers in patch 3 since the use of volatile is discouraged and it looks like it is safe to remove them.

Changes in V2:
- Rebased on u-boot-video
- patches 2 and 3 of original patchset dropped because I'm not sure what to do about them
- simplify lcd_logo: used bitmap_display() to further simplify code
- simplify lcd_display_bitmap: fixed pointer increment error
- simplify lcd_display_bitmap: change to simplify lcd_logo breaks MCC200 board because it does not #define CONFIG_CMD_BMP. Added a local implementation of bitmap_display().

Nikita Kiryanov (4):
common lcd: simplify lcd_logo
common lcd: simplify lcd_display
common lcd: simplify core functions
common lcd: simplify lcd_display_bitmap

  board/mcc200/lcd.c |   20 +++++++
  common/lcd.c       |  145 +++++++++++++++++++++++++++-------------------------
  2 files changed, 96 insertions(+), 69 deletions(-)
#6 lore raw

v3 cover common/lcd cleanup

Gentle ping.

-----Original Message-----
From: [email protected] [mailto:u-boot-bounces at lists.denx.de] On Behalf Of Nikita Kiryanov
Sent: Monday, August 20, 2012 9:16 AM
To: Nikita Kiryanov
Cc: u-boot at lists.denx.de
Subject: Re: [U-Boot] [PATCH V3 0/4] common/lcd cleanup

Gentle ping.

Quoted 7 lines · Nikita Kiryanov

This patch series attempts to simplify #ifdef complexity in common/lcd.c.

It was compile tested on Arm and PowerPC using MAKEALL

Changes in V3:
- Rebased on latest u-boot-video
- Removed volatile qualifiers in patch 3 since the use of volatile

is

Quoted 10 lines

discouraged and it looks like it is safe to remove them.

Changes in V2:
- Rebased on u-boot-video
- patches 2 and 3 of original patchset dropped because I'm not sure what to do about them
- simplify lcd_logo: used bitmap_display() to further simplify code
- simplify lcd_display_bitmap: fixed pointer increment error
- simplify lcd_display_bitmap: change to simplify lcd_logo breaks MCC200 board because it does not #define CONFIG_CMD_BMP. Added a

local

Quoted 10 lines

implementation of bitmap_display().

Nikita Kiryanov (4):
common lcd: simplify lcd_logo
common lcd: simplify lcd_display
common lcd: simplify core functions
common lcd: simplify lcd_display_bitmap

  board/mcc200/lcd.c |   20 +++++++
  common/lcd.c       |  145

+++++++++++++++++++++++++++-------------------------

Quoted 2 lines
  2 files changed, 96 insertions(+), 69 deletions(-)

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

#7 lore raw

v3 cover common/lcd cleanup

In reply to Nikita Kiryanov

Hi guys,

This series is waiting for several month already.
Only the V3 is one month old and hasn't got any comments so far. So, if Anatolij for some reason cannot deal with it, please merge it via a staging tree of yours.

Thanks

Quoted 29 lines · Nikita Kiryanov

This patch series attempts to simplify #ifdef complexity in common/lcd.c.

It was compile tested on Arm and PowerPC using MAKEALL

Changes in V3:
- Rebased on latest u-boot-video
- Removed volatile qualifiers in patch 3 since the use of volatile is discouraged and it looks like it is safe to remove them.

Changes in V2:
- Rebased on u-boot-video
- patches 2 and 3 of original patchset dropped because I'm not sure what to do about them
- simplify lcd_logo: used bitmap_display() to further simplify code
- simplify lcd_display_bitmap: fixed pointer increment error
- simplify lcd_display_bitmap: change to simplify lcd_logo breaks MCC200 board because it does not #define CONFIG_CMD_BMP. Added a local implementation of bitmap_display().

Nikita Kiryanov (4):
common lcd: simplify lcd_logo
common lcd: simplify lcd_display
common lcd: simplify core functions
common lcd: simplify lcd_display_bitmap

 board/mcc200/lcd.c |   20 +++++++
 common/lcd.c       |  145 +++++++++++++++++++++++++++-------------------------
 2 files changed, 96 insertions(+), 69 deletions(-)
Signature · 2 lines
Regards,
Igor.
#8 lore raw

v3 cover common/lcd cleanup

Dear Igor Grinberg,

Quoted 6 lines

Hi guys,

This series is waiting for several month already.
Only the V3 is one month old and hasn't got any comments so far. So, if Anatolij for some reason cannot deal with it, please merge it via a staging tree of yours.

Anatolij, poke?

It was probably forgotten, simple bump would suffice. Sorry for the delay.

Quoted 32 lines

Thanks

Quoted 29 lines · Nikita Kiryanov

This patch series attempts to simplify #ifdef complexity in common/lcd.c.

It was compile tested on Arm and PowerPC using MAKEALL

Changes in V3:
- Rebased on latest u-boot-video
- Removed volatile qualifiers in patch 3 since the use of volatile is discouraged and it looks like it is safe to remove them.

Changes in V2:
- Rebased on u-boot-video
- patches 2 and 3 of original patchset dropped because I'm not sure what to do about them
- simplify lcd_logo: used bitmap_display() to further simplify code
- simplify lcd_display_bitmap: fixed pointer increment error
- simplify lcd_display_bitmap: change to simplify lcd_logo breaks MCC200 board because it does not #define CONFIG_CMD_BMP. Added a local implementation of bitmap_display().

Nikita Kiryanov (4):
common lcd: simplify lcd_logo
common lcd: simplify lcd_display
common lcd: simplify core functions
common lcd: simplify lcd_display_bitmap

 board/mcc200/lcd.c |   20 +++++++
 common/lcd.c       |  145

+++++++++++++++++++++++++++------------------------- 2 files changed, 96 insertions(+), 69 deletions(-)

Best regards,
Marek Vasut

#9 lore raw

v3 cover common/lcd cleanup

In reply to Igor Grinberg

Hi,

Quoted 6 lines · On Wed, 05 Sep 2012 09:51:12 +0300 Igor Grinberg <[email protected]>…

Hi guys,

This series is waiting for several month already.
Only the V3 is one month old and hasn't got any comments so far. So, if Anatolij for some reason cannot deal with it, please merge it via a staging tree of yours.

Sorry for the delay, I'm really busy with other projects and have only very limitted capacity to process U-Boot patches. These are not lost, and assigned to me at patchwork. For now I've applied this series, hope it will not break anything for all these affected platforms. But please do not expect me pushing to u-boot/master this week, Wolfgang won't pull this week anyway, I'm afraid.

Thanks for the patience, and sorry again

Anatolij

#10 lore raw

PATCH 1/1 common/lcd: fix build breakage for at91sam9x5ek and trats boards

In reply to Nikita Kiryanov

Commit 203c37b8c5556aad1901ce4954792afd718c7d42
(common lcd: simplify core functions)

and commit bfdcc65e1163b4891643c2a670570c478b9af2a4 (common lcd: simplify lcd_display_bitmap)

caused build breakage for at91sam9x5ek board configurations and for trats board. Fix these build errors.

---
 common/lcd.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)
common/lcd.c +10 -4
index fcc09ac..b6be800 100644
@@ -509,8 +509,14 @@ static inline ushort *configuration_get_cmap(void)
 	return (ushort *)&(cp->lcd_cmap[255 * sizeof(ushort)]);
 #elif defined(CONFIG_ATMEL_LCD)
 	return (ushort *)(panel_info.mmio + ATMEL_LCDC_LUT(0));
+#elif !defined(CONFIG_ATMEL_HLCD) && !defined(CONFIG_EXYNOS_FB)
+	return panel_info.cmap;
 #else
-	return (ushort *)panel_info.cmap;
+#if defined(CONFIG_LCD_LOGO)
+	return bmp_logo_palette;
+#else
+	return NULL;
+#endif
 #endif
 }
 
@@ -636,10 +642,10 @@ static void splash_align_axis(int *axis, unsigned long panel_size,
 }
 #endif
 
-#if defined CONFIG_CPU_PXA || defined(CONFIG_ATMEL_LCD)
-#define FB_PUT_BYTE(fb, from) *(fb)++ = *(from)++
-#elif defined(CONFIG_MPC823) || defined(CONFIG_MCC200)
+#if defined(CONFIG_MPC823) || defined(CONFIG_MCC200)
 #define FB_PUT_BYTE(fb, from) *(fb)++ = (255 - *(from)++)
+#else
+#define FB_PUT_BYTE(fb, from) *(fb)++ = *(from)++
 #endif
 
 #if defined(CONFIG_BMP_16BPP)
Signature · 1 line
1.7.7.6
#11 lore raw

PATCH 1/1 common/lcd: fix build breakage for at91sam9x5ek and trats boards

Quoted 49 lines · Anatolij Gustschin

Commit 203c37b8c5556aad1901ce4954792afd718c7d42
(common lcd: simplify core functions)

and commit bfdcc65e1163b4891643c2a670570c478b9af2a4 (common lcd: simplify lcd_display_bitmap)

caused build breakage for at91sam9x5ek board configurations and for trats board. Fix these build errors.

---
  common/lcd.c |   14 ++++++++++----
  1 files changed, 10 insertions(+), 4 deletions(-)
common/lcd.c +10 -4
index fcc09ac..b6be800 100644
@@ -509,8 +509,14 @@ static inline ushort *configuration_get_cmap(void)
  	return (ushort *)&(cp->lcd_cmap[255 * sizeof(ushort)]);
  #elif defined(CONFIG_ATMEL_LCD)
  	return (ushort *)(panel_info.mmio + ATMEL_LCDC_LUT(0));
+#elif !defined(CONFIG_ATMEL_HLCD) && !defined(CONFIG_EXYNOS_FB)
+	return panel_info.cmap;
  #else
-	return (ushort *)panel_info.cmap;
+#if defined(CONFIG_LCD_LOGO)
+	return bmp_logo_palette;
+#else
+	return NULL;
+#endif
  #endif
  }
 
@@ -636,10 +642,10 @@ static void splash_align_axis(int *axis, unsigned long panel_size,
  }
  #endif
 
-#if defined CONFIG_CPU_PXA || defined(CONFIG_ATMEL_LCD)
-#define FB_PUT_BYTE(fb, from) *(fb)++ = *(from)++
-#elif defined(CONFIG_MPC823) || defined(CONFIG_MCC200)
+#if defined(CONFIG_MPC823) || defined(CONFIG_MCC200)
  #define FB_PUT_BYTE(fb, from) *(fb)++ = (255 - *(from)++)
+#else
+#define FB_PUT_BYTE(fb, from) *(fb)++ = *(from)++
  #endif
 
  #if defined(CONFIG_BMP_16BPP)
#12 lore raw

PATCH 1/1 common/lcd: fix build breakage for at91sam9x5ek and trats boards

In reply to Anatolij Gustschin
Quoted 6 lines · On Sat, 22 Sep 2012 18:55:53 +0200 Anatolij Gustschin <[email protected]> wrote:

Commit 203c37b8c5556aad1901ce4954792afd718c7d42
(common lcd: simplify core functions)

and commit bfdcc65e1163b4891643c2a670570c478b9af2a4 (common lcd: simplify lcd_display_bitmap)

Quoted 7 lines

caused build breakage for at91sam9x5ek board configurations and for trats board. Fix these build errors.

---
 common/lcd.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)

Applied to u-boot-video/master.

Anatolij