* Patch by  Pierre Aubert, 11 Mar 2004:
  - add bitmap command and splash screen support in cfb console
  - add [optional] origin in the bitmap display command

* Patch by Travis Sawyer, 11 Mar 2004:
  Fix ocotea board early init interrupt setup.

* Patch by Thomas Viehweger, 11 Mar 2004:
  Remove redundand code; add  PCI-specific bits to include/mpc8260.h
diff --git a/CHANGELOG b/CHANGELOG
index e46b433..e438069 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,16 @@
 Changes for U-Boot 1.0.2:
 ======================================================================
 
+* Patch by  Pierre Aubert, 11 Mar 2004:
+  - add bitmap command and splash screen support in cfb console
+  - add [optional] origin in the bitmap display command
+
+* Patch by Travis Sawyer, 11 Mar 2004:
+  Fix ocotea board early init interrupt setup.
+
+* Patch by Thomas Viehweger, 11 Mar 2004:
+  Remove redundand code; add  PCI-specific bits to include/mpc8260.h
+
 * Patch by Stephan Linz, 09 Mar 2004
   - Add support for the SSV ADNP/ESC1 (Nios Softcore)
 
diff --git a/board/ocotea/ocotea.c b/board/ocotea/ocotea.c
index 4324e57..2e720b2 100644
--- a/board/ocotea/ocotea.c
+++ b/board/ocotea/ocotea.c
@@ -36,6 +36,7 @@
 
 int board_early_init_f (void)
 {
+	unsigned long mfr;
 	/*-------------------------------------------------------------------------+
 	  | Initialize EBC CONFIG
 	  +-------------------------------------------------------------------------*/
@@ -116,6 +117,23 @@
 	mtdcr (uic1vr, 0x00000001);	/* int31 highest, base=0x000 */
 	mtdcr (uic1sr, 0xffffffff);	/* clear all */
 
+	mtdcr (uic2sr, 0xffffffff);	/* clear all */
+	mtdcr (uic2er, 0x00000000);	/* disable all */
+	mtdcr (uic2cr, 0x00000000);	/* all non-critical */
+	mtdcr (uic2pr, 0xffffffff);	/* per ref-board manual */
+	mtdcr (uic2tr, 0x00ff8c0f);	/* per ref-board manual */
+	mtdcr (uic2vr, 0x00000001);	/* int31 highest, base=0x000 */
+	mtdcr (uic2sr, 0xffffffff);	/* clear all */
+
+	mtdcr (uicb0sr, 0xfc000000); /* clear all */
+	mtdcr (uicb0er, 0x00000000); /* disable all */
+	mtdcr (uicb0cr, 0x00000000); /* all non-critical */
+	mtdcr (uicb0pr, 0xfc000000); /* */
+	mtdcr (uicb0tr, 0x00000000); /* */
+	mtdcr (uicb0vr, 0x00000001); /* */
+	mfsdr (sdr_mfr, mfr);
+	mfr &= ~SDR0_MFR_ECS_MASK;
+/*	mtsdr(sdr_mfr, mfr); */
 	fpga_init();
 
 	return 0;
diff --git a/common/cmd_bmp.c b/common/cmd_bmp.c
index 6dd6070..c1d4c0b 100644
--- a/common/cmd_bmp.c
+++ b/common/cmd_bmp.c
@@ -32,7 +32,7 @@
 #if (CONFIG_COMMANDS & CFG_CMD_BMP)
 
 static int bmp_info (ulong addr);
-static int bmp_display (ulong addr);
+static int bmp_display (ulong addr, int x, int y);
 
 /*
  * Subroutine:  do_bmp
@@ -47,6 +47,7 @@
 int do_bmp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
 	ulong addr;
+	int x = 0, y = 0;
 
 	switch (argc) {
 	case 2:		/* use load_addr as default address */
@@ -55,6 +56,11 @@
 	case 3:		/* use argument */
 		addr = simple_strtoul(argv[2], NULL, 16);
 		break;
+	case 5:
+		addr = simple_strtoul(argv[2], NULL, 16);
+	        x = simple_strtoul(argv[3], NULL, 10);
+	        y = simple_strtoul(argv[4], NULL, 10);
+	        break;
 	default:
 		printf ("Usage:\n%s\n", cmdtp->usage);
 		return 1;
@@ -66,7 +72,7 @@
 	if (strncmp(argv[1],"info",1) == 0) {
 		return (bmp_info(addr));
 	} else if (strncmp(argv[1],"display",1) == 0) {
-		return (bmp_display(addr));
+	    return (bmp_display(addr, x, y));
 	} else {
 		printf ("Usage:\n%s\n", cmdtp->usage);
 		return 1;
@@ -74,10 +80,10 @@
 }
 
 U_BOOT_CMD(
-	bmp,	3,	1,	do_bmp,
+	bmp,	5,	1,	do_bmp,
 	"bmp     - manipulate BMP image data\n",
-	"info <imageAddr>    - display image info\n"
-	"bmp display <imageAddr> - display image\n"
+	"info <imageAddr>          - display image info\n"
+	"bmp display <imageAddr> [x y] - display image at x,y\n"
 );
 
 /*
@@ -115,11 +121,17 @@
  * Return:      None
  *
  */
-static int bmp_display(ulong addr)
+static int bmp_display(ulong addr, int x, int y)
 {
-	extern int lcd_display_bitmap (ulong);
+#ifdef CONFIG_LCD
+    extern int lcd_display_bitmap (ulong, int, int);
 
-	return (lcd_display_bitmap (addr));
+	return (lcd_display_bitmap (addr, x, y));
+#endif
+#ifdef CONFIG_VIDEO
+	extern int video_display_bitmap (ulong, int, int);
+	return (video_display_bitmap (addr, x, y));
+#endif
 }
 
 #endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) */
diff --git a/cpu/mpc8260/cpu_init.c b/cpu/mpc8260/cpu_init.c
index fd09a8d..babcce4 100644
--- a/cpu/mpc8260/cpu_init.c
+++ b/cpu/mpc8260/cpu_init.c
@@ -98,7 +98,9 @@
 void cpu_init_f (volatile immap_t * immr)
 {
 	DECLARE_GLOBAL_DATA_PTR;
-
+#if !defined(CONFIG_COGENT)		/* done in start.S for the cogent */
+	uint sccr;
+#endif
 	volatile memctl8260_t *memctl = &immr->im_memctl;
 	extern void m8260_cpm_reset (void);
 
@@ -131,7 +133,10 @@
 
 #if !defined(CONFIG_COGENT)		/* done in start.S for the cogent */
 	/* System clock control register (9-8) */
-	immr->im_clkrst.car_sccr = CFG_SCCR;
+	sccr = immr->im_clkrst.car_sccr &
+		(SCCR_PCI_MODE | SCCR_PCI_MODCK | SCCR_PCIDF_MSK);
+	immr->im_clkrst.car_sccr = sccr |
+		(CFG_SCCR & ~(SCCR_PCI_MODE | SCCR_PCI_MODCK | SCCR_PCIDF_MSK) );
 #endif /* !CONFIG_COGENT */
 
 	/*
diff --git a/cpu/mpc8xx/lcd.c b/cpu/mpc8xx/lcd.c
index 5405cb4..f7620ef 100644
--- a/cpu/mpc8xx/lcd.c
+++ b/cpu/mpc8xx/lcd.c
@@ -1205,7 +1205,7 @@
  * Display the BMP file located at address bmp_image.
  * Only uncompressed
  */
-int lcd_display_bitmap(ulong bmp_image)
+int lcd_display_bitmap(ulong bmp_image, int x, int y)
 {
 	volatile immap_t *immr = (immap_t *) CFG_IMMR;
 	volatile cpm8xx_t *cp = &(immr->im_cpm);
@@ -1277,16 +1277,14 @@
 	}
 
 	padded_line = (width&0x3) ? ((width&~0x3)+4) : (width);
-	if (width>panel_info.vl_col)
-		width = panel_info.vl_col;
-	if (height>panel_info.vl_row)
-		height = panel_info.vl_row;
+	if ((x + width)>panel_info.vl_col)
+		width = panel_info.vl_col - x;
+	if ((y + height)>panel_info.vl_row)
+		height = panel_info.vl_row - y;
 
 	bmap = (uchar *)bmp + le32_to_cpu (bmp->header.data_offset);
-	fb   = (uchar *)
-		(lcd_base +
-		 (((height>=panel_info.vl_row) ? panel_info.vl_row : height)-1)
-		 * lcd_line_length);
+	fb   = (uchar *) (lcd_base +
+		 (y + height - 1) * lcd_line_length + x);
 	for (i = 0; i < height; ++i) {
 		WATCHDOG_RESET();
 		for (j = 0; j < width ; j++)
@@ -1317,7 +1315,7 @@
 	if ((s = getenv("splashimage")) != NULL) {
 		addr = simple_strtoul(s, NULL, 16);
 
-		if (lcd_display_bitmap (addr) == 0) {
+		if (lcd_display_bitmap (addr, 0, 0) == 0) {
 			return ((void *)lcd_base);
 		}
 	}
diff --git a/drivers/cfb_console.c b/drivers/cfb_console.c
index 22382af..fee0386 100644
--- a/drivers/cfb_console.c
+++ b/drivers/cfb_console.c
@@ -12,7 +12,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
@@ -42,30 +42,30 @@
  (for SMI LynxE graphic chip)
 
  CONFIG_VIDEO_SMI_LYNXEM - use graphic driver for SMI 710,712,810
- VIDEO_FB_LITTLE_ENDIAN  - framebuffer organisation default: big endian
- VIDEO_HW_RECTFILL       - graphic driver supports hardware rectangle fill
- VIDEO_HW_BITBLT         - graphic driver supports hardware bit blt
+ VIDEO_FB_LITTLE_ENDIAN	 - framebuffer organisation default: big endian
+ VIDEO_HW_RECTFILL	 - graphic driver supports hardware rectangle fill
+ VIDEO_HW_BITBLT	 - graphic driver supports hardware bit blt
 
  Console Parameters are set by graphic drivers global struct:
 
- VIDEO_VISIBLE_COLS          - x resolution
- VIDEO_VISIBLE_ROWS          - y resolution
- VIDEO_PIXEL_SIZE            - storage size in byte per pixel
- VIDEO_DATA_FORMAT           - graphical data format GDF
- VIDEO_FB_ADRS               - start of video memory
+ VIDEO_VISIBLE_COLS	     - x resolution
+ VIDEO_VISIBLE_ROWS	     - y resolution
+ VIDEO_PIXEL_SIZE	     - storage size in byte per pixel
+ VIDEO_DATA_FORMAT	     - graphical data format GDF
+ VIDEO_FB_ADRS		     - start of video memory
 
- CONFIG_I8042_KBD            - AT Keyboard driver for i8042
- VIDEO_KBD_INIT_FCT          - init function for keyboard
- VIDEO_TSTC_FCT              - keyboard_tstc function
- VIDEO_GETC_FCT              - keyboard_getc function
+ CONFIG_I8042_KBD	     - AT Keyboard driver for i8042
+ VIDEO_KBD_INIT_FCT	     - init function for keyboard
+ VIDEO_TSTC_FCT		     - keyboard_tstc function
+ VIDEO_GETC_FCT		     - keyboard_getc function
 
- CONFIG_CONSOLE_CURSOR       - on/off drawing cursor is done with delay
+ CONFIG_CONSOLE_CURSOR	     - on/off drawing cursor is done with delay
 			       loop in VIDEO_TSTC_FCT (i8042)
  CFG_CONSOLE_BLINK_COUNT     - value for delay loop - blink rate
- CONFIG_CONSOLE_TIME         - display time/date in upper right corner,
+ CONFIG_CONSOLE_TIME	     - display time/date in upper right corner,
 			       needs CFG_CMD_DATE and CONFIG_CONSOLE_CURSOR
- CONFIG_VIDEO_LOGO           - display Linux Logo in upper left corner
- CONFIG_VIDEO_BMP_LOGO       - use bmp_logo instead of linux_logo
+ CONFIG_VIDEO_LOGO	     - display Linux Logo in upper left corner
+ CONFIG_VIDEO_BMP_LOGO	     - use bmp_logo instead of linux_logo
  CONFIG_CONSOLE_EXTRA_INFO   - display additional board information strings
 			       that normaly goes to serial port. This define
 			       requires a board specific function:
@@ -80,10 +80,10 @@
 			       have none or more than one Keyboard devices
 			       (USB Keyboard, AT Keyboard).
 
-CONFIG_VIDEO_SW_CURSOR:      - Draws a cursor after the last character. No
+CONFIG_VIDEO_SW_CURSOR:	     - Draws a cursor after the last character. No
 			       blinking is provided. Uses the macros CURSOR_SET
 			       and CURSOR_OFF.
-CONFIG_VIDEO_HW_CURSOR:      - Uses the hardware cursor capability of the
+CONFIG_VIDEO_HW_CURSOR:	     - Uses the hardware cursor capability of the
 			       graphic chip. Uses the macro CURSOR_SET.
 			       ATTENTION: If booting an OS, the display driver
 			       must disable the hardware register of the graphic
@@ -97,11 +97,11 @@
 #include <malloc.h>
 
 /*****************************************************************************/
-/* Console device defines with SMI graphic                                   */
-/* Any other graphic must change this section                                */
+/* Console device defines with SMI graphic				     */
+/* Any other graphic must change this section				     */
 /*****************************************************************************/
 
-#ifdef  CONFIG_VIDEO_SMI_LYNXEM
+#ifdef	CONFIG_VIDEO_SMI_LYNXEM
 
 #define VIDEO_FB_LITTLE_ENDIAN
 #define VIDEO_HW_RECTFILL
@@ -109,9 +109,9 @@
 #endif
 
 /*****************************************************************************/
-/* Defines for the CT69000 driver                                            */
+/* Defines for the CT69000 driver					     */
 /*****************************************************************************/
-#ifdef  CONFIG_VIDEO_CT69000
+#ifdef	CONFIG_VIDEO_CT69000
 
 #define VIDEO_FB_LITTLE_ENDIAN
 #define VIDEO_HW_RECTFILL
@@ -119,7 +119,7 @@
 #endif
 
 /*****************************************************************************/
-/* Defines for the SED13806 driver                                           */
+/* Defines for the SED13806 driver					     */
 /*****************************************************************************/
 #ifdef CONFIG_VIDEO_SED13806
 
@@ -129,34 +129,34 @@
 #endif
 
 /*****************************************************************************/
-/* Include video_fb.h after definitions of VIDEO_HW_RECTFILL etc             */
+/* Include video_fb.h after definitions of VIDEO_HW_RECTFILL etc	     */
 /*****************************************************************************/
 #include <video_fb.h>
 
 /*****************************************************************************/
-/* some Macros                                                               */
+/* some Macros								     */
 /*****************************************************************************/
-#define VIDEO_VISIBLE_COLS      (pGD->winSizeX)
-#define VIDEO_VISIBLE_ROWS      (pGD->winSizeY)
-#define VIDEO_PIXEL_SIZE        (pGD->gdfBytesPP)
-#define VIDEO_DATA_FORMAT       (pGD->gdfIndex)
-#define VIDEO_FB_ADRS           (pGD->frameAdrs)
+#define VIDEO_VISIBLE_COLS	(pGD->winSizeX)
+#define VIDEO_VISIBLE_ROWS	(pGD->winSizeY)
+#define VIDEO_PIXEL_SIZE	(pGD->gdfBytesPP)
+#define VIDEO_DATA_FORMAT	(pGD->gdfIndex)
+#define VIDEO_FB_ADRS		(pGD->frameAdrs)
 
 /*****************************************************************************/
-/* Console device defines with i8042 keyboard controller                     */
-/* Any other keyboard controller must change this section                    */
+/* Console device defines with i8042 keyboard controller		     */
+/* Any other keyboard controller must change this section		     */
 /*****************************************************************************/
 
-#ifdef  CONFIG_I8042_KBD
+#ifdef	CONFIG_I8042_KBD
 #include <i8042.h>
 
-#define VIDEO_KBD_INIT_FCT      i8042_kbd_init()
-#define VIDEO_TSTC_FCT          i8042_tstc
-#define VIDEO_GETC_FCT          i8042_getc
+#define VIDEO_KBD_INIT_FCT	i8042_kbd_init()
+#define VIDEO_TSTC_FCT		i8042_tstc
+#define VIDEO_GETC_FCT		i8042_getc
 #endif
 
 /*****************************************************************************/
-/* Console device                                                            */
+/* Console device							     */
 /*****************************************************************************/
 
 #include <version.h>
@@ -168,19 +168,24 @@
 
 #endif
 
+#if (CONFIG_COMMANDS & CFG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
+#include <watchdog.h>
+#include <bmp_layout.h>
+#endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) || CONFIG_SPLASH_SCREEN */
+
 /*****************************************************************************/
-/* Cursor definition:                                                        */
+/* Cursor definition:							     */
 /* CONFIG_CONSOLE_CURSOR:  Uses a timer function (see drivers/i8042.c) to    */
-/*                         let the cursor blink. Uses the macros CURSOR_OFF  */
-/*                         and CURSOR_ON.                                    */
-/* CONFIG_VIDEO_SW_CURSOR: Draws a cursor after the last character. No       */
-/*                         blinking is provided. Uses the macros CURSOR_SET  */
-/*                         and CURSOR_OFF.                                   */
-/* CONFIG_VIDEO_HW_CURSOR: Uses the hardware cursor capability of the        */
-/*                         graphic chip. Uses the macro CURSOR_SET.          */
-/*                         ATTENTION: If booting an OS, the display driver   */
-/*                         must disable the hardware register of the graphic */
-/*                         chip. Otherwise a blinking field is displayed     */
+/*			   let the cursor blink. Uses the macros CURSOR_OFF  */
+/*			   and CURSOR_ON.				     */
+/* CONFIG_VIDEO_SW_CURSOR: Draws a cursor after the last character. No	     */
+/*			   blinking is provided. Uses the macros CURSOR_SET  */
+/*			   and CURSOR_OFF.				     */
+/* CONFIG_VIDEO_HW_CURSOR: Uses the hardware cursor capability of the	     */
+/*			   graphic chip. Uses the macro CURSOR_SET.	     */
+/*			   ATTENTION: If booting an OS, the display driver   */
+/*			   must disable the hardware register of the graphic */
+/*			   chip. Otherwise a blinking field is displayed     */
 /*****************************************************************************/
 #if !defined(CONFIG_CONSOLE_CURSOR) && \
     !defined(CONFIG_VIDEO_SW_CURSOR) && \
@@ -191,11 +196,11 @@
 #define CURSOR_SET
 #endif
 
-#ifdef  CONFIG_CONSOLE_CURSOR
-#ifdef  CURSOR_ON
-#error  only one of CONFIG_CONSOLE_CURSOR,CONFIG_VIDEO_SW_CURSOR,CONFIG_VIDEO_HW_CURSOR can be defined
+#ifdef	CONFIG_CONSOLE_CURSOR
+#ifdef	CURSOR_ON
+#error	only one of CONFIG_CONSOLE_CURSOR,CONFIG_VIDEO_SW_CURSOR,CONFIG_VIDEO_HW_CURSOR can be defined
 #endif
-void    console_cursor (int state);
+void	console_cursor (int state);
 #define CURSOR_ON  console_cursor(1);
 #define CURSOR_OFF console_cursor(0);
 #define CURSOR_SET
@@ -203,14 +208,14 @@
 #warning Cursor drawing on/off needs timer function s.a. drivers/i8042.c
 #endif
 #else
-#ifdef  CONFIG_CONSOLE_TIME
-#error  CONFIG_CONSOLE_CURSOR must be defined for CONFIG_CONSOLE_TIME
+#ifdef	CONFIG_CONSOLE_TIME
+#error	CONFIG_CONSOLE_CURSOR must be defined for CONFIG_CONSOLE_TIME
 #endif
 #endif /* CONFIG_CONSOLE_CURSOR */
 
-#ifdef  CONFIG_VIDEO_SW_CURSOR
-#ifdef  CURSOR_ON
-#error  only one of CONFIG_CONSOLE_CURSOR,CONFIG_VIDEO_SW_CURSOR,CONFIG_VIDEO_HW_CURSOR can be defined
+#ifdef	CONFIG_VIDEO_SW_CURSOR
+#ifdef	CURSOR_ON
+#error	only one of CONFIG_CONSOLE_CURSOR,CONFIG_VIDEO_SW_CURSOR,CONFIG_VIDEO_HW_CURSOR can be defined
 #endif
 #define CURSOR_ON
 #define CURSOR_OFF video_putchar(console_col * VIDEO_FONT_WIDTH,\
@@ -220,78 +225,78 @@
 
 
 #ifdef CONFIG_VIDEO_HW_CURSOR
-#ifdef  CURSOR_ON
-#error  only one of CONFIG_CONSOLE_CURSOR,CONFIG_VIDEO_SW_CURSOR,CONFIG_VIDEO_HW_CURSOR can be defined
+#ifdef	CURSOR_ON
+#error	only one of CONFIG_CONSOLE_CURSOR,CONFIG_VIDEO_SW_CURSOR,CONFIG_VIDEO_HW_CURSOR can be defined
 #endif
 #define CURSOR_ON
 #define CURSOR_OFF
 #define CURSOR_SET video_set_hw_cursor(console_col * VIDEO_FONT_WIDTH, \
 		  (console_row * VIDEO_FONT_HEIGHT) + VIDEO_LOGO_HEIGHT);
-#endif  /* CONFIG_VIDEO_HW_CURSOR */
+#endif	/* CONFIG_VIDEO_HW_CURSOR */
 
-#ifdef  CONFIG_VIDEO_LOGO
-#ifdef  CONFIG_VIDEO_BMP_LOGO
+#ifdef	CONFIG_VIDEO_LOGO
+#ifdef	CONFIG_VIDEO_BMP_LOGO
 #include <bmp_logo.h>
-#define VIDEO_LOGO_WIDTH        BMP_LOGO_WIDTH
-#define VIDEO_LOGO_HEIGHT       BMP_LOGO_HEIGHT
-#define VIDEO_LOGO_LUT_OFFSET   BMP_LOGO_OFFSET
-#define VIDEO_LOGO_COLORS       BMP_LOGO_COLORS
+#define VIDEO_LOGO_WIDTH	BMP_LOGO_WIDTH
+#define VIDEO_LOGO_HEIGHT	BMP_LOGO_HEIGHT
+#define VIDEO_LOGO_LUT_OFFSET	BMP_LOGO_OFFSET
+#define VIDEO_LOGO_COLORS	BMP_LOGO_COLORS
 
-#else   /* CONFIG_VIDEO_BMP_LOGO */
-#define LINUX_LOGO_WIDTH        80
-#define LINUX_LOGO_HEIGHT       80
-#define LINUX_LOGO_COLORS       214
-#define LINUX_LOGO_LUT_OFFSET   0x20
+#else	/* CONFIG_VIDEO_BMP_LOGO */
+#define LINUX_LOGO_WIDTH	80
+#define LINUX_LOGO_HEIGHT	80
+#define LINUX_LOGO_COLORS	214
+#define LINUX_LOGO_LUT_OFFSET	0x20
 #define __initdata
 #include <linux_logo.h>
-#define VIDEO_LOGO_WIDTH        LINUX_LOGO_WIDTH
-#define VIDEO_LOGO_HEIGHT       LINUX_LOGO_HEIGHT
-#define VIDEO_LOGO_LUT_OFFSET   LINUX_LOGO_LUT_OFFSET
-#define VIDEO_LOGO_COLORS       LINUX_LOGO_COLORS
-#endif  /* CONFIG_VIDEO_BMP_LOGO */
-#define VIDEO_INFO_X            (VIDEO_LOGO_WIDTH)
-#define VIDEO_INFO_Y            (VIDEO_FONT_HEIGHT/2)
-#else   /* CONFIG_VIDEO_LOGO */
-#define VIDEO_LOGO_WIDTH        0
-#define VIDEO_LOGO_HEIGHT       0
-#endif  /* CONFIG_VIDEO_LOGO */
+#define VIDEO_LOGO_WIDTH	LINUX_LOGO_WIDTH
+#define VIDEO_LOGO_HEIGHT	LINUX_LOGO_HEIGHT
+#define VIDEO_LOGO_LUT_OFFSET	LINUX_LOGO_LUT_OFFSET
+#define VIDEO_LOGO_COLORS	LINUX_LOGO_COLORS
+#endif	/* CONFIG_VIDEO_BMP_LOGO */
+#define VIDEO_INFO_X		(VIDEO_LOGO_WIDTH)
+#define VIDEO_INFO_Y		(VIDEO_FONT_HEIGHT/2)
+#else	/* CONFIG_VIDEO_LOGO */
+#define VIDEO_LOGO_WIDTH	0
+#define VIDEO_LOGO_HEIGHT	0
+#endif	/* CONFIG_VIDEO_LOGO */
 
-#define VIDEO_COLS              VIDEO_VISIBLE_COLS
-#define VIDEO_ROWS              VIDEO_VISIBLE_ROWS
-#define VIDEO_SIZE              (VIDEO_ROWS*VIDEO_COLS*VIDEO_PIXEL_SIZE)
-#define VIDEO_PIX_BLOCKS        (VIDEO_SIZE >> 2)
-#define VIDEO_LINE_LEN          (VIDEO_COLS*VIDEO_PIXEL_SIZE)
-#define VIDEO_BURST_LEN         (VIDEO_COLS/8)
+#define VIDEO_COLS		VIDEO_VISIBLE_COLS
+#define VIDEO_ROWS		VIDEO_VISIBLE_ROWS
+#define VIDEO_SIZE		(VIDEO_ROWS*VIDEO_COLS*VIDEO_PIXEL_SIZE)
+#define VIDEO_PIX_BLOCKS	(VIDEO_SIZE >> 2)
+#define VIDEO_LINE_LEN		(VIDEO_COLS*VIDEO_PIXEL_SIZE)
+#define VIDEO_BURST_LEN		(VIDEO_COLS/8)
 
-#ifdef  CONFIG_VIDEO_LOGO
-#define CONSOLE_ROWS            ((VIDEO_ROWS - VIDEO_LOGO_HEIGHT) / VIDEO_FONT_HEIGHT)
+#ifdef	CONFIG_VIDEO_LOGO
+#define CONSOLE_ROWS		((VIDEO_ROWS - VIDEO_LOGO_HEIGHT) / VIDEO_FONT_HEIGHT)
 #else
-#define CONSOLE_ROWS            (VIDEO_ROWS / VIDEO_FONT_HEIGHT)
+#define CONSOLE_ROWS		(VIDEO_ROWS / VIDEO_FONT_HEIGHT)
 #endif
 
-#define CONSOLE_COLS            (VIDEO_COLS / VIDEO_FONT_WIDTH)
-#define CONSOLE_ROW_SIZE        (VIDEO_FONT_HEIGHT * VIDEO_LINE_LEN)
-#define CONSOLE_ROW_FIRST       (video_console_address)
-#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)
+#define CONSOLE_COLS		(VIDEO_COLS / VIDEO_FONT_WIDTH)
+#define CONSOLE_ROW_SIZE	(VIDEO_FONT_HEIGHT * VIDEO_LINE_LEN)
+#define CONSOLE_ROW_FIRST	(video_console_address)
+#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)
 
 /* Macros */
-#ifdef  VIDEO_FB_LITTLE_ENDIAN
-#define SWAP16(x)        ((((x) & 0x00ff) << 8) | ( (x) >> 8))
-#define SWAP32(x)        ((((x) & 0x000000ff) << 24) | (((x) & 0x0000ff00) << 8)|\
+#ifdef	VIDEO_FB_LITTLE_ENDIAN
+#define SWAP16(x)	 ((((x) & 0x00ff) << 8) | ( (x) >> 8))
+#define SWAP32(x)	 ((((x) & 0x000000ff) << 24) | (((x) & 0x0000ff00) << 8)|\
 			  (((x) & 0x00ff0000) >>  8) | (((x) & 0xff000000) >> 24) )
-#define SHORTSWAP32(x)   ((((x) & 0x000000ff) <<  8) | (((x) & 0x0000ff00) >> 8)|\
+#define SHORTSWAP32(x)	 ((((x) & 0x000000ff) <<  8) | (((x) & 0x0000ff00) >> 8)|\
 			  (((x) & 0x00ff0000) <<  8) | (((x) & 0xff000000) >> 8) )
 #else
-#define SWAP16(x)        (x)
-#define SWAP32(x)        (x)
-#define SHORTSWAP32(x)   (x)
+#define SWAP16(x)	 (x)
+#define SWAP32(x)	 (x)
+#define SHORTSWAP32(x)	 (x)
 #endif
 
 #if defined(DEBUG) || defined(DEBUG_CFB_CONSOLE)
-#define PRINTD(x)         printf(x)
+#define PRINTD(x)	  printf(x)
 #else
 #define PRINTD(x)
 #endif
@@ -299,8 +304,8 @@
 
 #ifdef CONFIG_CONSOLE_EXTRA_INFO
 extern void video_get_info_str (    /* setup a board string: type, speed, etc. */
-    int line_number,        /* location to place info string beside logo */
-    char *info              /* buffer for info string */
+    int line_number,	    /* location to place info string beside logo */
+    char *info		    /* buffer for info string */
     );
 
 #endif
@@ -308,8 +313,8 @@
 /* Locals */
 static GraphicDevice *pGD;	/* Pointer to Graphic array */
 
-static void *video_fb_address;          /* frame buffer address */
-static void *video_console_address;     /* console buffer start address */
+static void *video_fb_address;		/* frame buffer address */
+static void *video_console_address;	/* console buffer start address */
 
 static int console_col = 0; /* cursor col */
 static int console_row = 0; /* cursor row */
@@ -367,184 +372,189 @@
 
 /******************************************************************************/
 
-
 static void video_drawchars (int xx, int yy, unsigned char *s, int count)
 {
-    u8  *cdat, *dest, *dest0;
-    int rows, offset, c;
+	u8 *cdat, *dest, *dest0;
+	int rows, offset, c;
 
-    offset = yy * VIDEO_LINE_LEN + xx * VIDEO_PIXEL_SIZE;
-    dest0 = video_fb_address + offset;
+	offset = yy * VIDEO_LINE_LEN + xx * VIDEO_PIXEL_SIZE;
+	dest0 = video_fb_address + offset;
 
-    switch (VIDEO_DATA_FORMAT)
-    {
-    case GDF__8BIT_INDEX:
-    case GDF__8BIT_332RGB:
-	while (count--)
-	{
-	c = *s ;
-	cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
-	for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN)
-	{
-	    u8 bits = *cdat++;
-	    ((u32 *)dest)[0] = (video_font_draw_table8[bits >> 4] & eorx) ^ bgx;
-	    ((u32 *)dest)[1] = (video_font_draw_table8[bits & 15] & eorx) ^ bgx;
-	}
-	dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
-	s++;
-	}
-	break;
+	switch (VIDEO_DATA_FORMAT) {
+	case GDF__8BIT_INDEX:
+	case GDF__8BIT_332RGB:
+		while (count--) {
+			c = *s;
+			cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
+			for (rows = VIDEO_FONT_HEIGHT, dest = dest0;
+			     rows--;
+			     dest += VIDEO_LINE_LEN) {
+				u8 bits = *cdat++;
 
-    case GDF_15BIT_555RGB:
-	while (count--)
-	{
-	c = *s ;
-	cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
-	for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN)
-	{
-	    u8 bits = *cdat++;
-	    ((u32 *)dest)[0] = SHORTSWAP32((video_font_draw_table15[bits >> 6] & eorx) ^ bgx);
-	    ((u32 *)dest)[1] = SHORTSWAP32((video_font_draw_table15[bits >> 4 & 3] & eorx) ^ bgx);
-	    ((u32 *)dest)[2] = SHORTSWAP32((video_font_draw_table15[bits >> 2 & 3] & eorx) ^ bgx);
-	    ((u32 *)dest)[3] = SHORTSWAP32((video_font_draw_table15[bits & 3] & eorx) ^ bgx);
-	    }
-	    dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
-	    s++ ;
-	}
-	break;
+				((u32 *) dest)[0] = (video_font_draw_table8[bits >> 4] & eorx) ^ bgx;
+				((u32 *) dest)[1] = (video_font_draw_table8[bits & 15] & eorx) ^ bgx;
+			}
+			dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
+			s++;
+		}
+		break;
 
-    case GDF_16BIT_565RGB:
-	while (count--)
-	{
-	c = *s ;
-	cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
-	for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN)
-	{
-	    u8 bits = *cdat++;
-	    ((u32 *)dest)[0] = SHORTSWAP32((video_font_draw_table16[bits >> 6] & eorx) ^ bgx);
-	    ((u32 *)dest)[1] = SHORTSWAP32((video_font_draw_table16[bits >> 4 & 3] & eorx) ^ bgx);
-	    ((u32 *)dest)[2] = SHORTSWAP32((video_font_draw_table16[bits >> 2 & 3] & eorx) ^ bgx);
-	    ((u32 *)dest)[3] = SHORTSWAP32((video_font_draw_table16[bits & 3] & eorx) ^ bgx);
-	}
-	dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
-	s++ ;
-	}
-	break;
+	case GDF_15BIT_555RGB:
+		while (count--) {
+			c = *s;
+			cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
+			for (rows = VIDEO_FONT_HEIGHT, dest = dest0;
+			     rows--;
+			     dest += VIDEO_LINE_LEN) {
+				u8 bits = *cdat++;
 
-    case GDF_32BIT_X888RGB:
-	while (count--)
-	{
-	c = *s ;
-	cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
-	for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN)
-	{
-	    u8 bits = *cdat++;
-	    ((u32 *)dest)[0] = SWAP32((video_font_draw_table32[bits >> 4][0] & eorx) ^ bgx);
-	    ((u32 *)dest)[1] = SWAP32((video_font_draw_table32[bits >> 4][1] & eorx) ^ bgx);
-	    ((u32 *)dest)[2] = SWAP32((video_font_draw_table32[bits >> 4][2] & eorx) ^ bgx);
-	    ((u32 *)dest)[3] = SWAP32((video_font_draw_table32[bits >> 4][3] & eorx) ^ bgx);
-	    ((u32 *)dest)[4] = SWAP32((video_font_draw_table32[bits & 15][0] & eorx) ^ bgx);
-	    ((u32 *)dest)[5] = SWAP32((video_font_draw_table32[bits & 15][1] & eorx) ^ bgx);
-	    ((u32 *)dest)[6] = SWAP32((video_font_draw_table32[bits & 15][2] & eorx) ^ bgx);
-	    ((u32 *)dest)[7] = SWAP32((video_font_draw_table32[bits & 15][3] & eorx) ^ bgx);
-	}
-	dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
-	s++ ;
-	}
-	break;
+				((u32 *) dest)[0] = SHORTSWAP32 ((video_font_draw_table15 [bits >> 6] & eorx) ^ bgx);
+				((u32 *) dest)[1] = SHORTSWAP32 ((video_font_draw_table15 [bits >> 4 & 3] & eorx) ^ bgx);
+				((u32 *) dest)[2] = SHORTSWAP32 ((video_font_draw_table15 [bits >> 2 & 3] & eorx) ^ bgx);
+				((u32 *) dest)[3] = SHORTSWAP32 ((video_font_draw_table15 [bits & 3] & eorx) ^ bgx);
+			}
+			dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
+			s++;
+		}
+		break;
 
-    case GDF_24BIT_888RGB:
-	while (count--)
-	{
-	c = *s ;
-	cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
-	for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN)
-	{
-	    u8 bits = *cdat++;
-	    ((u32 *)dest)[0] = (video_font_draw_table24[bits >> 4][0] & eorx) ^ bgx;
-	    ((u32 *)dest)[1] = (video_font_draw_table24[bits >> 4][1] & eorx) ^ bgx;
-	    ((u32 *)dest)[2] = (video_font_draw_table24[bits >> 4][2] & eorx) ^ bgx;
-	    ((u32 *)dest)[3] = (video_font_draw_table24[bits & 15][0] & eorx) ^ bgx;
-	    ((u32 *)dest)[4] = (video_font_draw_table24[bits & 15][1] & eorx) ^ bgx;
-	    ((u32 *)dest)[5] = (video_font_draw_table24[bits & 15][2] & eorx) ^ bgx;
-	}
-	dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
-	s++ ;
+	case GDF_16BIT_565RGB:
+		while (count--) {
+			c = *s;
+			cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
+			for (rows = VIDEO_FONT_HEIGHT, dest = dest0;
+			     rows--;
+			     dest += VIDEO_LINE_LEN) {
+				u8 bits = *cdat++;
+
+				((u32 *) dest)[0] = SHORTSWAP32 ((video_font_draw_table16 [bits >> 6] & eorx) ^ bgx);
+				((u32 *) dest)[1] = SHORTSWAP32 ((video_font_draw_table16 [bits >> 4 & 3] & eorx) ^ bgx);
+				((u32 *) dest)[2] = SHORTSWAP32 ((video_font_draw_table16 [bits >> 2 & 3] & eorx) ^ bgx);
+				((u32 *) dest)[3] = SHORTSWAP32 ((video_font_draw_table16 [bits & 3] & eorx) ^ bgx);
+			}
+			dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
+			s++;
+		}
+		break;
+
+	case GDF_32BIT_X888RGB:
+		while (count--) {
+			c = *s;
+			cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
+			for (rows = VIDEO_FONT_HEIGHT, dest = dest0;
+			     rows--;
+			     dest += VIDEO_LINE_LEN) {
+				u8 bits = *cdat++;
+
+				((u32 *) dest)[0] = SWAP32 ((video_font_draw_table32 [bits >> 4][0] & eorx) ^ bgx);
+				((u32 *) dest)[1] = SWAP32 ((video_font_draw_table32 [bits >> 4][1] & eorx) ^ bgx);
+				((u32 *) dest)[2] = SWAP32 ((video_font_draw_table32 [bits >> 4][2] & eorx) ^ bgx);
+				((u32 *) dest)[3] = SWAP32 ((video_font_draw_table32 [bits >> 4][3] & eorx) ^ bgx);
+				((u32 *) dest)[4] = SWAP32 ((video_font_draw_table32 [bits & 15][0] & eorx) ^ bgx);
+				((u32 *) dest)[5] = SWAP32 ((video_font_draw_table32 [bits & 15][1] & eorx) ^ bgx);
+				((u32 *) dest)[6] = SWAP32 ((video_font_draw_table32 [bits & 15][2] & eorx) ^ bgx);
+				((u32 *) dest)[7] = SWAP32 ((video_font_draw_table32 [bits & 15][3] & eorx) ^ bgx);
+			}
+			dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
+			s++;
+		}
+		break;
+
+	case GDF_24BIT_888RGB:
+		while (count--) {
+			c = *s;
+			cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
+			for (rows = VIDEO_FONT_HEIGHT, dest = dest0;
+			     rows--;
+			     dest += VIDEO_LINE_LEN) {
+				u8 bits = *cdat++;
+
+				((u32 *) dest)[0] = (video_font_draw_table24[bits >> 4][0] & eorx) ^ bgx;
+				((u32 *) dest)[1] = (video_font_draw_table24[bits >> 4][1] & eorx) ^ bgx;
+				((u32 *) dest)[2] = (video_font_draw_table24[bits >> 4][2] & eorx) ^ bgx;
+				((u32 *) dest)[3] = (video_font_draw_table24[bits & 15][0] & eorx) ^ bgx;
+				((u32 *) dest)[4] = (video_font_draw_table24[bits & 15][1] & eorx) ^ bgx;
+				((u32 *) dest)[5] = (video_font_draw_table24[bits & 15][2] & eorx) ^ bgx;
+			}
+			dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
+			s++;
+		}
+		break;
 	}
-	break;
-    }
 }
 
 /*****************************************************************************/
 
-static inline void video_drawstring(int xx, int yy, unsigned char *s)
+static inline void video_drawstring (int xx, int yy, unsigned char *s)
 {
-    video_drawchars (xx, yy, s, strlen(s));
+	video_drawchars (xx, yy, s, strlen (s));
 }
 
 /*****************************************************************************/
 
-static void video_putchar(int xx, int yy, unsigned char c)
+static void video_putchar (int xx, int yy, unsigned char c)
 {
-    video_drawchars (xx, yy + VIDEO_LOGO_HEIGHT, &c, 1);
+	video_drawchars (xx, yy + VIDEO_LOGO_HEIGHT, &c, 1);
 }
 
 /*****************************************************************************/
 #if defined(CONFIG_CONSOLE_CURSOR) || defined(CONFIG_VIDEO_SW_CURSOR)
-static void video_set_cursor(void)
+static void video_set_cursor (void)
 {
-    /* swap drawing colors */
-    eorx = fgx;
-    fgx  = bgx;
-    bgx  = eorx;
-    eorx = fgx ^ bgx;
-    /* draw cursor */
-    video_putchar (console_col * VIDEO_FONT_WIDTH,
-		   console_row * VIDEO_FONT_HEIGHT, ' ');
-    /* restore drawing colors */
-    eorx = fgx;
-    fgx  = bgx;
-    bgx  = eorx;
-    eorx = fgx ^ bgx;
+	/* swap drawing colors */
+	eorx = fgx;
+	fgx = bgx;
+	bgx = eorx;
+	eorx = fgx ^ bgx;
+	/* draw cursor */
+	video_putchar (console_col * VIDEO_FONT_WIDTH,
+		       console_row * VIDEO_FONT_HEIGHT,
+		       ' ');
+	/* restore drawing colors */
+	eorx = fgx;
+	fgx = bgx;
+	bgx = eorx;
+	eorx = fgx ^ bgx;
 }
 #endif
 /*****************************************************************************/
 #ifdef CONFIG_CONSOLE_CURSOR
 void console_cursor (int state)
 {
-    static int last_state = 0;
+	static int last_state = 0;
+
 #ifdef CONFIG_CONSOLE_TIME
-    struct rtc_time tm;
-    char info[16];
+	struct rtc_time tm;
+	char info[16];
 
-    /* time update only if cursor is on (faster scroll) */
-    if (state)
-    {
-    rtc_get (&tm);
+	/* time update only if cursor is on (faster scroll) */
+	if (state) {
+		rtc_get (&tm);
 
-    sprintf(info, " %02d:%02d:%02d ", tm.tm_hour, tm.tm_min, tm.tm_sec);
-    video_drawstring(VIDEO_VISIBLE_COLS-10*VIDEO_FONT_WIDTH,
-	     VIDEO_INFO_Y, info);
+		sprintf (info, " %02d:%02d:%02d ", tm.tm_hour, tm.tm_min,
+			 tm.tm_sec);
+		video_drawstring (VIDEO_VISIBLE_COLS - 10 * VIDEO_FONT_WIDTH,
+				  VIDEO_INFO_Y, info);
 
-    sprintf(info, "%02d.%02d.%04d", tm.tm_mday, tm.tm_mon, tm.tm_year);
-    video_drawstring(VIDEO_VISIBLE_COLS-10*VIDEO_FONT_WIDTH,
-	     VIDEO_INFO_Y+1*VIDEO_FONT_HEIGHT, info);
-    }
+		sprintf (info, "%02d.%02d.%04d", tm.tm_mday, tm.tm_mon,
+			 tm.tm_year);
+		video_drawstring (VIDEO_VISIBLE_COLS - 10 * VIDEO_FONT_WIDTH,
+				  VIDEO_INFO_Y + 1 * VIDEO_FONT_HEIGHT, info);
+	}
 #endif
 
-    if (state && (last_state != state))
-    {
-	video_set_cursor();
-    }
+	if (state && (last_state != state)) {
+		video_set_cursor ();
+	}
 
-    if (!state && (last_state != state))
-    {
-	/* clear cursor */
-	video_putchar (console_col * VIDEO_FONT_WIDTH,
-		       console_row * VIDEO_FONT_HEIGHT, ' ');
-    }
+	if (!state && (last_state != state)) {
+		/* clear cursor */
+		video_putchar (console_col * VIDEO_FONT_WIDTH,
+			       console_row * VIDEO_FONT_HEIGHT,
+			       ' ');
+	}
 
-    last_state = state;
+	last_state = state;
 }
 #endif
 
@@ -553,8 +563,8 @@
 #ifndef VIDEO_HW_RECTFILL
 static void memsetl (int *p, int c, int v)
 {
-    while (c--)
-	*(p++) = v;
+	while (c--)
+		*(p++) = v;
 }
 #endif
 
@@ -563,8 +573,8 @@
 #ifndef VIDEO_HW_BITBLT
 static void memcpyl (int *d, int *s, int c)
 {
-    while (c--)
-	*(d++) = *(s++);
+	while (c--)
+		*(d++) = *(s++);
 }
 #endif
 
@@ -572,34 +582,33 @@
 
 static void console_scrollup (void)
 {
-    /* copy up rows ignoring the first one */
+	/* 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 */
-    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_hw_bitblt (VIDEO_PIXEL_SIZE,	/* bytes per pixel */
+			 0,	/* source pos x */
+			 VIDEO_LOGO_HEIGHT + VIDEO_FONT_HEIGHT, /* 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 */
+		);
 #else
-    memcpyl (CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND, CONSOLE_SCROLL_SIZE >> 2);
+	memcpyl (CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,
+		 CONSOLE_SCROLL_SIZE >> 2);
 #endif
 
-    /* clear the last one */
+	/* clear the last one */
 #ifdef VIDEO_HW_RECTFILL
-    video_hw_rectfill (
-    VIDEO_PIXEL_SIZE,     /* bytes per pixel */
-    0,                    /* dest pos x */
-    VIDEO_VISIBLE_ROWS - VIDEO_FONT_HEIGHT,  /* dest pos y */
-    VIDEO_VISIBLE_COLS,   /* frame width */
-    VIDEO_FONT_HEIGHT,    /* frame height */
-    CONSOLE_BG_COL          /* fill color */
-    );
+	video_hw_rectfill (VIDEO_PIXEL_SIZE,	/* bytes per pixel */
+			   0,	/* dest pos x */
+			   VIDEO_VISIBLE_ROWS - VIDEO_FONT_HEIGHT,	/* dest pos y */
+			   VIDEO_VISIBLE_COLS,	/* frame width */
+			   VIDEO_FONT_HEIGHT,	/* frame height */
+			   CONSOLE_BG_COL	/* fill color */
+		);
 #else
-    memsetl (CONSOLE_ROW_LAST, CONSOLE_ROW_SIZE >> 2, CONSOLE_BG_COL);
+	memsetl (CONSOLE_ROW_LAST, CONSOLE_ROW_SIZE >> 2, CONSOLE_BG_COL);
 #endif
 }
 
@@ -607,87 +616,338 @@
 
 static void console_back (void)
 {
-    CURSOR_OFF
-    console_col--;
+	CURSOR_OFF console_col--;
 
-    if (console_col < 0)
-    {
-	console_col = CONSOLE_COLS - 1;
-	console_row--;
-	if (console_row < 0)
-	console_row = 0;
-    }
-    video_putchar (console_col * VIDEO_FONT_WIDTH,
-		   console_row * VIDEO_FONT_HEIGHT, ' ');
+	if (console_col < 0) {
+		console_col = CONSOLE_COLS - 1;
+		console_row--;
+		if (console_row < 0)
+			console_row = 0;
+	}
+	video_putchar (console_col * VIDEO_FONT_WIDTH,
+		       console_row * VIDEO_FONT_HEIGHT,
+		       ' ');
 }
 
 /*****************************************************************************/
 
 static void console_newline (void)
 {
-    CURSOR_OFF
-    console_row++;
-    console_col = 0;
+	CURSOR_OFF console_row++;
+	console_col = 0;
 
-    /* Check if we need to scroll the terminal */
-    if (console_row >= CONSOLE_ROWS)
-    {
-    /* Scroll everything up */
-    console_scrollup ();
+	/* Check if we need to scroll the terminal */
+	if (console_row >= CONSOLE_ROWS) {
+		/* Scroll everything up */
+		console_scrollup ();
 
-    /* Decrement row number */
-    console_row--;
-    }
+		/* Decrement row number */
+		console_row--;
+	}
 }
 
 /*****************************************************************************/
 
 void video_putc (const char c)
 {
-    switch (c)
-    {
-    case 13: /* ignore */
-	break;
+	switch (c) {
+	case 13:		/* ignore */
+		break;
 
-    case '\n': /* next line */
-	console_newline();
-	break;
+	case '\n':		/* next line */
+		console_newline ();
+		break;
 
-    case 9:    /* tab 8 */
-	CURSOR_OFF
-	console_col |=  0x0008;
-	console_col &= ~0x0007;
+	case 9:		/* tab 8 */
+		CURSOR_OFF console_col |= 0x0008;
+		console_col &= ~0x0007;
 
-	if (console_col >= CONSOLE_COLS)
-	    console_newline();
-	break;
+		if (console_col >= CONSOLE_COLS)
+			console_newline ();
+		break;
 
-    case 8:    /* backspace */
-	console_back();
-	break;
+	case 8:		/* backspace */
+		console_back ();
+		break;
 
-    default: /* draw the char */
-	video_putchar (console_col * VIDEO_FONT_WIDTH,
-		       console_row * VIDEO_FONT_HEIGHT, c);
-	console_col++ ;
+	default:		/* draw the char */
+		video_putchar (console_col * VIDEO_FONT_WIDTH,
+			       console_row * VIDEO_FONT_HEIGHT,
+			       c);
+		console_col++;
 
-	/* check for newline */
-	if (console_col >= CONSOLE_COLS)
-	    console_newline();
-    }
-    CURSOR_SET
-}
+		/* check for newline */
+		if (console_col >= CONSOLE_COLS)
+			console_newline ();
+	}
+CURSOR_SET}
 
 
 /*****************************************************************************/
 
 void video_puts (const char *s)
 {
+	int count = strlen (s);
+
+	while (count--)
+		video_putc (*s++);
+}
+
+/*****************************************************************************/
+
+#if (CONFIG_COMMANDS & CFG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
+
+#define FILL_8BIT_332RGB(r,g,b)	{			\
+	*fb = ((r>>5)<<5) | ((g>>5)<<2) | (b>>6);	\
+	fb ++;						\
+}
+
+#define FILL_15BIT_555RGB(r,g,b) {			\
+	*(unsigned short *)fb = SWAP16((unsigned short)(((r>>3)<<10) | ((g>>3)<<5) | (b>>3))); \
+	fb += 2;					\
+}
+
+#define FILL_16BIT_565RGB(r,g,b) {			\
+	*(unsigned short *)fb = SWAP16((unsigned short)((((r)>>3)<<11) | (((g)>>2)<<5) | ((b)>>3))); \
+	fb += 2;					\
+}
+
+#define FILL_32BIT_X888RGB(r,g,b) {			\
+	*(unsigned long *)fb = SWAP32((unsigned long)(((r<<16) | (g<<8) | b))); \
+	fb += 4;					\
+}
+
+#ifdef VIDEO_FB_LITTLE_ENDIAN
+#define FILL_24BIT_888RGB(r,g,b) {			\
+	fb[0] = b;					\
+	fb[1] = g;					\
+	fb[2] = r;					\
+	fb += 3;					\
+}
+#else
+#define FILL_24BIT_888RGB(r,g,b) {			\
+	fb[0] = r;					\
+	fb[1] = g;					\
+	fb[2] = b;					\
+	fb += 3;					\
+}
+#endif
+
+
+/*
+ * Display the BMP file located at address bmp_image.
+ * Only uncompressed
+ */
+int video_display_bitmap (ulong bmp_image, int x, int y)
+{
-    int count = strlen(s);
+	ushort xcount, ycount;
+	uchar *fb;
+	bmp_image_t *bmp = (bmp_image_t *) bmp_image;
+	uchar *bmap;
+	ushort padded_line;
+	unsigned long width, height, bpp;
+	unsigned colors;
+	unsigned long compression;
+	bmp_color_table_entry_t cte;
 
-    while(count--)
-	video_putc(*s++);
+	WATCHDOG_RESET ();
+
+	if (!((bmp->header.signature[0] == 'B') &&
+	      (bmp->header.signature[1] == 'M'))) {
+		printf ("Error: no valid bmp image at %lx\n", bmp_image);
+		return 1;
+	}
+
+	width = le32_to_cpu (bmp->header.width);
+	height = le32_to_cpu (bmp->header.height);
+	bpp = le16_to_cpu (bmp->header.bit_count);
+	colors = le32_to_cpu (bmp->header.colors_used);
+	compression = le32_to_cpu (bmp->header.compression);
+
+	debug ("Display-bmp: %d x %d  with %d colors\n",
+	       width, height, colors);
+
+	if (compression != BMP_BI_RGB) {
+		printf ("Error: compression type %ld not supported\n",
+			compression);
+		return 1;
+	}
+
+	padded_line = (((width * bpp + 7) / 8) + 3) & ~0x3;
+
+	if ((x + width) > VIDEO_VISIBLE_COLS)
+		width = VIDEO_VISIBLE_COLS - x;
+	if ((y + height) > VIDEO_VISIBLE_ROWS)
+		height = VIDEO_VISIBLE_ROWS - y;
+
+	bmap = (uchar *) bmp + le32_to_cpu (bmp->header.data_offset);
+	fb = (uchar *) (video_fb_address +
+			((y + height - 1) * VIDEO_COLS * VIDEO_PIXEL_SIZE) +
+			x * VIDEO_PIXEL_SIZE);
+
+	/* We handle only 8bpp or 24 bpp bitmap */
+	switch (le16_to_cpu (bmp->header.bit_count)) {
+	case 8:
+		padded_line -= width;
+		if (VIDEO_DATA_FORMAT == GDF__8BIT_INDEX) {
+			/* Copy colormap					     */
+			for (xcount = 0; xcount < colors; ++xcount) {
+				cte = bmp->color_table[xcount];
+				video_set_lut (xcount, cte.red, cte.green, cte.blue);
+			}
+		}
+		ycount = height;
+		switch (VIDEO_DATA_FORMAT) {
+		case GDF__8BIT_INDEX:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					*fb++ = *bmap++;
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		case GDF__8BIT_332RGB:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					cte = bmp->color_table[*bmap++];
+					FILL_8BIT_332RGB (cte.red, cte.green, cte.blue);
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		case GDF_15BIT_555RGB:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					cte = bmp->color_table[*bmap++];
+					FILL_15BIT_555RGB (cte.red, cte.green, cte.blue);
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		case GDF_16BIT_565RGB:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					cte = bmp->color_table[*bmap++];
+					FILL_16BIT_565RGB (cte.red, cte.green, cte.blue);
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		case GDF_32BIT_X888RGB:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					cte = bmp->color_table[*bmap++];
+					FILL_32BIT_X888RGB (cte.red, cte.green, cte.blue);
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		case GDF_24BIT_888RGB:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					cte = bmp->color_table[*bmap++];
+					FILL_24BIT_888RGB (cte.red, cte.green, cte.blue);
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		}
+		break;
+	case 24:
+		padded_line -= 3 * width;
+		ycount = height;
+		switch (VIDEO_DATA_FORMAT) {
+		case GDF__8BIT_332RGB:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					FILL_8BIT_332RGB (bmap[2], bmap[1], bmap[0]);
+					bmap += 3;
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		case GDF_15BIT_555RGB:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					FILL_15BIT_555RGB (bmap[2], bmap[1], bmap[0]);
+					bmap += 3;
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		case GDF_16BIT_565RGB:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					FILL_16BIT_565RGB (bmap[2], bmap[1], bmap[0]);
+					bmap += 3;
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		case GDF_32BIT_X888RGB:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					FILL_32BIT_X888RGB (bmap[2], bmap[1], bmap[0]);
+					bmap += 3;
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		case GDF_24BIT_888RGB:
+			while (ycount--) {
+				WATCHDOG_RESET ();
+				xcount = width;
+				while (xcount--) {
+					FILL_24BIT_888RGB (bmap[2], bmap[1], bmap[0]);
+					bmap += 3;
+				}
+				bmap += padded_line;
+				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;
+			}
+			break;
+		default:
+			printf ("Error: 24 bits/pixel bitmap incompatible with current video mode\n");
+			break;
+		}
+		break;
+	default:
+		printf ("Error: %d bit/pixel bitmaps not supported by U-Boot\n",
+			le16_to_cpu (bmp->header.bit_count));
+		break;
+	}
+	return (0);
 }
+#endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) || CONFIG_SPLASH_SCREEN */
 
 /*****************************************************************************/
 
@@ -695,93 +955,87 @@
 void logo_plot (void *screen, int width, int x, int y)
 {
 
-    int skip = (width - VIDEO_LOGO_WIDTH) * VIDEO_PIXEL_SIZE,
-	xcount, i,
-	ycount = VIDEO_LOGO_HEIGHT;
-    unsigned char
-	*source,
-	*dest   = (unsigned char *) screen + ((y * width * VIDEO_PIXEL_SIZE) + x),
-	r, g, b, *logo_red, *logo_blue, *logo_green;
+	int xcount, i;
+	int skip   = (width - VIDEO_LOGO_WIDTH) * VIDEO_PIXEL_SIZE;
+	int ycount = VIDEO_LOGO_HEIGHT;
+	unsigned char r, g, b, *logo_red, *logo_blue, *logo_green;
+	unsigned char *source;
+	unsigned char *dest = (unsigned char *)screen + ((y * width * VIDEO_PIXEL_SIZE) + x);
 
 #ifdef CONFIG_VIDEO_BMP_LOGO
-    source = bmp_logo_bitmap;
+	source = bmp_logo_bitmap;
 
-    /* Allocate temporary space for computing colormap                       */
-    logo_red = malloc (BMP_LOGO_COLORS);
-    logo_green = malloc (BMP_LOGO_COLORS);
-    logo_blue = malloc (BMP_LOGO_COLORS);
-    /* Compute color map                                                     */
-    for (i = 0; i < VIDEO_LOGO_COLORS; i++) {
-	logo_red [i] = (bmp_logo_palette [i] & 0x0f00) >> 4;
-	logo_green [i] = (bmp_logo_palette [i] & 0x00f0);
-	logo_blue [i] = (bmp_logo_palette [i] & 0x000f) << 4;
-    }
+	/* Allocate temporary space for computing colormap			 */
+	logo_red = malloc (BMP_LOGO_COLORS);
+	logo_green = malloc (BMP_LOGO_COLORS);
+	logo_blue = malloc (BMP_LOGO_COLORS);
+	/* Compute color map							 */
+	for (i = 0; i < VIDEO_LOGO_COLORS; i++) {
+		logo_red[i] = (bmp_logo_palette[i] & 0x0f00) >> 4;
+		logo_green[i] = (bmp_logo_palette[i] & 0x00f0);
+		logo_blue[i] = (bmp_logo_palette[i] & 0x000f) << 4;
+	}
 #else
-    source = linux_logo;
-    logo_red = linux_logo_red;
-    logo_green = linux_logo_green;
-    logo_blue = linux_logo_blue;
+	source = linux_logo;
+	logo_red = linux_logo_red;
+	logo_green = linux_logo_green;
+	logo_blue = linux_logo_blue;
 #endif
 
-    if (VIDEO_DATA_FORMAT == GDF__8BIT_INDEX)
-    {
-	for (i = 0; i < VIDEO_LOGO_COLORS; i++)
-	{
-	    video_set_lut (i + VIDEO_LOGO_LUT_OFFSET,
-			   logo_red [i], logo_green [i], logo_blue [i]);
+	if (VIDEO_DATA_FORMAT == GDF__8BIT_INDEX) {
+		for (i = 0; i < VIDEO_LOGO_COLORS; i++) {
+			video_set_lut (i + VIDEO_LOGO_LUT_OFFSET,
+				       logo_red[i], logo_green[i], logo_blue[i]);
+		}
 	}
-    }
 
-    while (ycount--)
-    {
-	xcount = VIDEO_LOGO_WIDTH;
-	while (xcount--)
-	{
-	    r = logo_red [*source - VIDEO_LOGO_LUT_OFFSET];
-	    g = logo_green [*source - VIDEO_LOGO_LUT_OFFSET];
-	    b = logo_blue [*source - VIDEO_LOGO_LUT_OFFSET];
+	while (ycount--) {
+		xcount = VIDEO_LOGO_WIDTH;
+		while (xcount--) {
+			r = logo_red[*source - VIDEO_LOGO_LUT_OFFSET];
+			g = logo_green[*source - VIDEO_LOGO_LUT_OFFSET];
+			b = logo_blue[*source - VIDEO_LOGO_LUT_OFFSET];
 
-	    switch (VIDEO_DATA_FORMAT)
-	    {
-	    case GDF__8BIT_INDEX:
-		*dest = *source;
-		break;
-	    case GDF__8BIT_332RGB:
-		*dest = ((r>>5)<<5) | ((g>>5)<<2) | (b>>6);
-		break;
-	    case GDF_15BIT_555RGB:
-		*(unsigned short *)dest =
-		    SWAP16((unsigned short)(((r>>3)<<10) | ((g>>3)<<5) | (b>>3)));
-		break;
-	    case GDF_16BIT_565RGB:
-		*(unsigned short *)dest =
-		    SWAP16((unsigned short)(((r>>3)<<11) | ((g>>2)<<5) | (b>>3)));
-		break;
-	    case GDF_32BIT_X888RGB:
-		*(unsigned long  *)dest =
-		    SWAP32((unsigned long)((r<<16) | (g<<8) | b));
-		break;
-	    case GDF_24BIT_888RGB:
+			switch (VIDEO_DATA_FORMAT) {
+			case GDF__8BIT_INDEX:
+				*dest = *source;
+				break;
+			case GDF__8BIT_332RGB:
+				*dest = ((r >> 5) << 5) | ((g >> 5) << 2) | (b >> 6);
+				break;
+			case GDF_15BIT_555RGB:
+				*(unsigned short *) dest =
+					SWAP16 ((unsigned short) (((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3)));
+				break;
+			case GDF_16BIT_565RGB:
+				*(unsigned short *) dest =
+					SWAP16 ((unsigned short) (((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3)));
+				break;
+			case GDF_32BIT_X888RGB:
+				*(unsigned long *) dest =
+					SWAP32 ((unsigned long) ((r << 16) | (g << 8) | b));
+				break;
+			case GDF_24BIT_888RGB:
 #ifdef VIDEO_FB_LITTLE_ENDIAN
-		dest[0] = b;
-		dest[1] = g;
-		dest[2] = r;
+				dest[0] = b;
+				dest[1] = g;
+				dest[2] = r;
 #else
-		dest[0] = r;
-		dest[1] = g;
-		dest[2] = b;
+				dest[0] = r;
+				dest[1] = g;
+				dest[2] = b;
 #endif
-		break;
-	    }
-	    source++;
-	    dest += VIDEO_PIXEL_SIZE;
+				break;
+			}
+			source++;
+			dest += VIDEO_PIXEL_SIZE;
+		}
+		dest += skip;
 	}
-	dest += skip;
-    }
 #ifdef CONFIG_VIDEO_BMP_LOGO
-    free (logo_red);
-    free (logo_green);
-    free (logo_blue);
+	free (logo_red);
+	free (logo_green);
+	free (logo_blue);
 #endif
 }
 
@@ -789,98 +1043,123 @@
 
 static void *video_logo (void)
 {
-    char info[128];
-    extern char version_string;
+	char info[128];
+	extern char version_string;
+
+#ifdef CONFIG_SPLASH_SCREEN
+	char *s;
+	ulong addr;
+
+	if ((s = getenv ("splashimage")) != NULL) {
+		addr = simple_strtoul (s, NULL, 16);
+
+		if (video_display_bitmap (addr, 0, 0) == 0) {
+			return ((void *) (video_fb_address));
+		}
+	}
+#endif /* CONFIG_SPLASH_SCREEN */
+
 
-    logo_plot (video_fb_address, VIDEO_COLS, 0, 0);
+	logo_plot (video_fb_address, VIDEO_COLS, 0, 0);
 
-    sprintf(info, " %s", &version_string);
-    video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, info);
+	sprintf (info, " %s", &version_string);
+	video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, info);
 
 #ifdef CONFIG_CONSOLE_EXTRA_INFO
-    {
-    int i, n = ((VIDEO_LOGO_HEIGHT-VIDEO_FONT_HEIGHT)/VIDEO_FONT_HEIGHT);
+	{
+		int i, n = ((VIDEO_LOGO_HEIGHT - VIDEO_FONT_HEIGHT) / VIDEO_FONT_HEIGHT);
 
-    for (i = 1; i < n; i++)
-    {
-	video_get_info_str (i, info);
-	if (*info)
-	video_drawstring (VIDEO_INFO_X,
-			  VIDEO_INFO_Y + i*VIDEO_FONT_HEIGHT, info);
-    }
-    }
+		for (i = 1; i < n; i++) {
+			video_get_info_str (i, info);
+			if (*info)
+				video_drawstring (VIDEO_INFO_X,
+						  VIDEO_INFO_Y + i * VIDEO_FONT_HEIGHT,
+						  info);
+		}
+	}
 #endif
 
-    return (video_fb_address + VIDEO_LOGO_HEIGHT * VIDEO_LINE_LEN);
+	return (video_fb_address + VIDEO_LOGO_HEIGHT * VIDEO_LINE_LEN);
 }
 #endif
 
 
 /*****************************************************************************/
 
-static int video_init(void)
+static int video_init (void)
 {
-    unsigned char color8;
+	unsigned char color8;
 
-    if ((pGD=video_hw_init()) == NULL)
-	return -1;
+	if ((pGD = video_hw_init ()) == NULL)
+		return -1;
 
-    video_fb_address = (void*)VIDEO_FB_ADRS;
+	video_fb_address = (void *) VIDEO_FB_ADRS;
 #ifdef CONFIG_VIDEO_HW_CURSOR
-    video_init_hw_cursor(VIDEO_FONT_WIDTH, VIDEO_FONT_HEIGHT);
+	video_init_hw_cursor (VIDEO_FONT_WIDTH, VIDEO_FONT_HEIGHT);
 #endif
 
-    /* Init drawing pats */
-    switch (VIDEO_DATA_FORMAT)
-    {
-    case GDF__8BIT_INDEX:
-	video_set_lut (0x01, CONSOLE_FG_COL, CONSOLE_FG_COL, CONSOLE_FG_COL);
-	video_set_lut (0x00, CONSOLE_BG_COL, CONSOLE_BG_COL, CONSOLE_BG_COL);
-	fgx = 0x01010101;
-	bgx = 0x00000000;
-	break;
-    case GDF__8BIT_332RGB:
-	color8 = ((CONSOLE_FG_COL & 0xe0) | ((CONSOLE_FG_COL>>3) & 0x1c) | CONSOLE_FG_COL>>6);
-	fgx = (color8<<24) | (color8<<16) | (color8<<8) | color8;
-	color8 = ((CONSOLE_BG_COL & 0xe0) | ((CONSOLE_BG_COL>>3) & 0x1c) | CONSOLE_BG_COL>>6);
-	bgx = (color8<<24) | (color8<<16) | (color8<<8) | color8;
-	break;
-    case GDF_15BIT_555RGB:
-	fgx = (((CONSOLE_FG_COL>>3)<<26) | ((CONSOLE_FG_COL>>3)<<21) | ((CONSOLE_FG_COL>>3)<<16) |
-	   ((CONSOLE_FG_COL>>3)<<10) | ((CONSOLE_FG_COL>>3)<<5)  |  (CONSOLE_FG_COL>>3));
-	bgx = (((CONSOLE_BG_COL>>3)<<26) | ((CONSOLE_BG_COL>>3)<<21) | ((CONSOLE_BG_COL>>3)<<16) |
-	   ((CONSOLE_BG_COL>>3)<<10) | ((CONSOLE_BG_COL>>3)<<5)  |  (CONSOLE_BG_COL>>3));
-	break;
-    case GDF_16BIT_565RGB:
-	fgx = (((CONSOLE_FG_COL>>3)<<27) | ((CONSOLE_FG_COL>>2)<<21) | ((CONSOLE_FG_COL>>3)<<16) |
-	   ((CONSOLE_FG_COL>>3)<<11) | ((CONSOLE_FG_COL>>2)<<5)  |  (CONSOLE_FG_COL>>3));
-	bgx = (((CONSOLE_BG_COL>>3)<<27) | ((CONSOLE_BG_COL>>2)<<21) | ((CONSOLE_BG_COL>>3)<<16) |
-	   ((CONSOLE_BG_COL>>3)<<11) | ((CONSOLE_BG_COL>>2)<<5)  |  (CONSOLE_BG_COL>>3));
-	break;
-    case GDF_32BIT_X888RGB:
-	fgx = (CONSOLE_FG_COL<<16) | (CONSOLE_FG_COL<<8) | CONSOLE_FG_COL;
-	bgx = (CONSOLE_BG_COL<<16) | (CONSOLE_BG_COL<<8) | CONSOLE_BG_COL;
-	break;
-    case GDF_24BIT_888RGB:
-	fgx = (CONSOLE_FG_COL<<24) | (CONSOLE_FG_COL<<16) | (CONSOLE_FG_COL<<8) | CONSOLE_FG_COL;
-	bgx = (CONSOLE_BG_COL<<24) | (CONSOLE_BG_COL<<16) | (CONSOLE_BG_COL<<8) | CONSOLE_BG_COL;
-	break;
-    }
-    eorx = fgx ^ bgx;
+	/* Init drawing pats */
+	switch (VIDEO_DATA_FORMAT) {
+	case GDF__8BIT_INDEX:
+		video_set_lut (0x01, CONSOLE_FG_COL, CONSOLE_FG_COL, CONSOLE_FG_COL);
+		video_set_lut (0x00, CONSOLE_BG_COL, CONSOLE_BG_COL, CONSOLE_BG_COL);
+		fgx = 0x01010101;
+		bgx = 0x00000000;
+		break;
+	case GDF__8BIT_332RGB:
+		color8 = ((CONSOLE_FG_COL & 0xe0) |
+			  ((CONSOLE_FG_COL >> 3) & 0x1c) | CONSOLE_FG_COL >> 6);
+		fgx = (color8 << 24) | (color8 << 16) | (color8 << 8) | color8;
+		color8 = ((CONSOLE_BG_COL & 0xe0) |
+			  ((CONSOLE_BG_COL >> 3) & 0x1c) | CONSOLE_BG_COL >> 6);
+		bgx = (color8 << 24) | (color8 << 16) | (color8 << 8) | color8;
+		break;
+	case GDF_15BIT_555RGB:
+		fgx = (((CONSOLE_FG_COL >> 3) << 26) |
+		       ((CONSOLE_FG_COL >> 3) << 21) | ((CONSOLE_FG_COL >> 3) << 16) |
+		       ((CONSOLE_FG_COL >> 3) << 10) | ((CONSOLE_FG_COL >> 3) << 5) |
+		       (CONSOLE_FG_COL >> 3));
+		bgx = (((CONSOLE_BG_COL >> 3) << 26) |
+		       ((CONSOLE_BG_COL >> 3) << 21) | ((CONSOLE_BG_COL >> 3) << 16) |
+		       ((CONSOLE_BG_COL >> 3) << 10) | ((CONSOLE_BG_COL >> 3) << 5) |
+		       (CONSOLE_BG_COL >> 3));
+		break;
+	case GDF_16BIT_565RGB:
+		fgx = (((CONSOLE_FG_COL >> 3) << 27) |
+		       ((CONSOLE_FG_COL >> 2) << 21) | ((CONSOLE_FG_COL >> 3) << 16) |
+		       ((CONSOLE_FG_COL >> 3) << 11) | ((CONSOLE_FG_COL >> 2) << 5) |
+		       (CONSOLE_FG_COL >> 3));
+		bgx = (((CONSOLE_BG_COL >> 3) << 27) |
+		       ((CONSOLE_BG_COL >> 2) << 21) | ((CONSOLE_BG_COL >> 3) << 16) |
+		       ((CONSOLE_BG_COL >> 3) << 11) | ((CONSOLE_BG_COL >> 2) << 5) |
+		       (CONSOLE_BG_COL >> 3));
+		break;
+	case GDF_32BIT_X888RGB:
+		fgx = (CONSOLE_FG_COL << 16) | (CONSOLE_FG_COL << 8) | CONSOLE_FG_COL;
+		bgx = (CONSOLE_BG_COL << 16) | (CONSOLE_BG_COL << 8) | CONSOLE_BG_COL;
+		break;
+	case GDF_24BIT_888RGB:
+		fgx = (CONSOLE_FG_COL << 24) | (CONSOLE_FG_COL << 16) |
+			(CONSOLE_FG_COL << 8) | CONSOLE_FG_COL;
+		bgx = (CONSOLE_BG_COL << 24) | (CONSOLE_BG_COL << 16) |
+			(CONSOLE_BG_COL << 8) | CONSOLE_BG_COL;
+		break;
+	}
+	eorx = fgx ^ bgx;
 
 #ifdef CONFIG_VIDEO_LOGO
-    /* Plot the logo and get start point of console */
-    PRINTD("Video: Drawing the logo ...\n");
-    video_console_address = video_logo();
+	/* Plot the logo and get start point of console */
+	PRINTD ("Video: Drawing the logo ...\n");
+	video_console_address = video_logo ();
 #else
-    video_console_address = video_fb_address;
+	video_console_address = video_fb_address;
 #endif
 
-    /* Initialize the console */
-    console_col  = 0;
-    console_row  = 0;
+	/* Initialize the console */
+	console_col = 0;
+	console_row = 0;
 
-    return 0 ;
+	return 0;
 }
 
 
@@ -888,60 +1167,57 @@
 
 int drv_video_init (void)
 {
-    int skip_dev_init;
-    device_t console_dev;
-    char *penv;
+	int skip_dev_init;
+	device_t console_dev;
+	char *penv;
 
-    skip_dev_init = 0;
+	skip_dev_init = 0;
 
-     /* Force console i/o to serial ? */
-    if ((penv = getenv ("console")) != NULL)
-	if (strcmp (penv, "serial") == 0)
-	    return 0;
+	/* Force console i/o to serial ? */
+	if ((penv = getenv ("console")) != NULL)
+		if (strcmp (penv, "serial") == 0)
+			return 0;
 
-   /* Init video chip - returns with framebuffer cleared */
-    if (video_init() == -1)
-	skip_dev_init = 1;
+	/* Init video chip - returns with framebuffer cleared */
+	if (video_init () == -1)
+		skip_dev_init = 1;
 #ifdef CONFIG_VGA_AS_SINGLE_DEVICE
-   /* Devices VGA and Keyboard will be assigned seperately */
-    /* Init vga device */
-    if (!skip_dev_init)
-    {
-	memset (&console_dev, 0, sizeof(console_dev));
-	strcpy(console_dev.name, "vga");
-	console_dev.ext   = DEV_EXT_VIDEO;    /* Video extensions */
-	console_dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_SYSTEM;
-	console_dev.putc  = video_putc;        /* 'putc' function */
-	console_dev.puts  = video_puts;        /* 'puts' function */
-	console_dev.tstc  = NULL;              /* 'tstc' function */
-	console_dev.getc  = NULL;              /* 'getc' function */
+	/* Devices VGA and Keyboard will be assigned seperately */
+	/* Init vga device */
+	if (!skip_dev_init) {
+		memset (&console_dev, 0, sizeof (console_dev));
+		strcpy (console_dev.name, "vga");
+		console_dev.ext = DEV_EXT_VIDEO;	/* Video extensions */
+		console_dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_SYSTEM;
+		console_dev.putc = video_putc;	/* 'putc' function */
+		console_dev.puts = video_puts;	/* 'puts' function */
+		console_dev.tstc = NULL;	/* 'tstc' function */
+		console_dev.getc = NULL;	/* 'getc' function */
 
-	if (device_register (&console_dev) == 0)
-	    return 1;
-    }
+		if (device_register (&console_dev) == 0)
+			return 1;
+	}
 #else
-    PRINTD("KBD: Keyboard init ...\n");
-    if (VIDEO_KBD_INIT_FCT == -1)
-	skip_dev_init = 1;
+	PRINTD ("KBD: Keyboard init ...\n");
+	if (VIDEO_KBD_INIT_FCT == -1)
+		skip_dev_init = 1;
 
-    /* Init console device */
-    if (!skip_dev_init)
-    {
-	memset (&console_dev, 0, sizeof(console_dev));
-	strcpy(console_dev.name, "console");
-	console_dev.ext   = DEV_EXT_VIDEO;    /* Video extensions */
-	console_dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM;
-	console_dev.putc  = video_putc;        /* 'putc' function */
-	console_dev.puts  = video_puts;        /* 'puts' function */
-	console_dev.tstc  = VIDEO_TSTC_FCT;    /* 'tstc' function */
-	console_dev.getc  = VIDEO_GETC_FCT;    /* 'getc' function */
+	/* Init console device */
+	if (!skip_dev_init) {
+		memset (&console_dev, 0, sizeof (console_dev));
+		strcpy (console_dev.name, "console");
+		console_dev.ext = DEV_EXT_VIDEO;	/* Video extensions */
+		console_dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM;
+		console_dev.putc = video_putc;	/* 'putc' function */
+		console_dev.puts = video_puts;	/* 'puts' function */
+		console_dev.tstc = VIDEO_TSTC_FCT;	/* 'tstc' function */
+		console_dev.getc = VIDEO_GETC_FCT;	/* 'getc' function */
 
-	if (device_register (&console_dev) == 0)
-	    return 1;
-    }
+		if (device_register (&console_dev) == 0)
+			return 1;
+	}
 #endif /* CONFIG_VGA_AS_SINGLE_DEVICE */
-    /* No console dev available */
-    return 0;
+	/* No console dev available */
+	return 0;
 }
-
 #endif /* CONFIG_CFB_CONSOLE */
diff --git a/include/configs/IceCube.h b/include/configs/IceCube.h
index 39a91424..37c76c3 100644
--- a/include/configs/IceCube.h
+++ b/include/configs/IceCube.h
@@ -174,16 +174,16 @@
 /*
  * Flash configuration
  */
-#define CFG_FLASH_BASE		0xff000000
+#define CFG_FLASH_BASE		0xFF000000
 #define CFG_FLASH_SIZE		0x01000000
 #if !defined(CFG_LOWBOOT)
-#define CFG_ENV_ADDR		(CFG_FLASH_BASE + 0x740000 + 0x800000)
+#define CFG_ENV_ADDR		(CFG_FLASH_BASE + 0x00740000 + 0x00800000)
 #else	/* CFG_LOWBOOT */
 #if defined(CFG_LOWBOOT08)
-#define CFG_ENV_ADDR		(CFG_FLASH_BASE + 0x30000 + 0x800000)
+#define CFG_ENV_ADDR		(CFG_FLASH_BASE + 0x00040000 + 0x00800000)
 #endif
 #if defined(CFG_LOWBOOT16)
-#define CFG_ENV_ADDR		(CFG_FLASH_BASE + 0x30000)
+#define CFG_ENV_ADDR		(CFG_FLASH_BASE + 0x00040000)
 #endif
 #endif	/* CFG_LOWBOOT */
 #define CFG_MAX_FLASH_BANKS	2	/* max num of memory banks      */
@@ -207,7 +207,7 @@
 /*
  * Memory map
  */
-#define CFG_MBAR		0xf0000000
+#define CFG_MBAR		0xF0000000
 #define CFG_SDRAM_BASE		0x00000000
 #define CFG_DEFAULT_MBAR	0x80000000
 
@@ -279,10 +279,10 @@
 
 #ifdef CONFIG_MPC5200_DDR
 
-#define CFG_BOOTCS_START	0xff800000
+#define CFG_BOOTCS_START	0xFF800000
 #define CFG_BOOTCS_SIZE		0x00800000
 #define CFG_BOOTCS_CFG		0x00047801
-#define CFG_CS1_START		0xff000000
+#define CFG_CS1_START		0xFF000000
 #define CFG_CS1_SIZE		0x00800000
 #define CFG_CS1_CFG		0x00047800
 
@@ -335,7 +335,7 @@
 #define CFG_ATA_REG_OFFSET	(CFG_ATA_DATA_OFFSET)
 
 /* Offset for alternate registers	*/
-#define CFG_ATA_ALT_OFFSET	(0x005c)
+#define CFG_ATA_ALT_OFFSET	(0x005C)
 
 /* Interval between registers                                                */
 #define CFG_ATA_STRIDE          4
diff --git a/include/mpc8260.h b/include/mpc8260.h
index 8bddd6a6..c93370c 100644
--- a/include/mpc8260.h
+++ b/include/mpc8260.h
@@ -288,6 +288,10 @@
 /*-----------------------------------------------------------------------
  * SCCR - System Clock Control Register					 9-8
  */
+#define SCCR_PCI_MODE	0x00000100	/* PCI Mode	*/
+#define SCCR_PCI_MODCK	0x00000080	/* Value of PCI_MODCK pin	*/
+#define SCCR_PCIDF_MSK	0x00000078	/* PCI division factor	*/
+#define SCCR_PCIDF_SHIFT 3
 #define SCCR_CLPD	0x00000004	/* CPM Low Power Disable	*/
 #define SCCR_DFBRG_MSK	0x00000003	/* Division factor of BRGCLK Mask */
 #define SCCR_DFBRG_SHIFT 0