diff --git a/board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c b/board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c
index 4449376..b70637f 100644
--- a/board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c
+++ b/board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c
@@ -32,40 +32,55 @@
 #include "../common/pixis.h"
 #include "../common/fsl_diu_fb.h"
 
+#if defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE)
+#include <devices.h>
+#include <video_fb.h>
+#endif
 
 extern unsigned int FSL_Logo_BMP[];
 
+static int xres, yres;
+
 
 void mpc8610hpcd_diu_init(void)
 {
 	char *monitor_port;
-	int xres, gamma_fix;
+	int gamma_fix;
 	unsigned int pixel_format;
 	unsigned char tmp_val;
+	unsigned char pixis_arch;
 
 	tmp_val = in8(PIXIS_BASE + PIXIS_BRDCFG0);
-	monitor_port = getenv ("monitor");
+	pixis_arch = in8(PIXIS_BASE + PIXIS_VER);
 
+	monitor_port = getenv("monitor");
 	if (!strncmp(monitor_port, "0", 1)) {	/* 0 - DVI */
 		xres = 1280;
-		pixel_format = 0x88882317;
+		yres = 1024;
+		if (pixis_arch == 0x01)
+			pixel_format = 0x88882317;
+		else
+			pixel_format = 0x88883316;
 		gamma_fix = 0;
 		out8(PIXIS_BASE + PIXIS_BRDCFG0, tmp_val | 0x08);
 
 	} else if (!strncmp(monitor_port, "1", 1)) { /* 1 - Single link LVDS */
 		xres = 1024;
+		yres = 768;
 		pixel_format = 0x88883316;
 		gamma_fix = 0;
 		out8(PIXIS_BASE + PIXIS_BRDCFG0, (tmp_val & 0xf7) | 0x10);
 
 	} else if (!strncmp(monitor_port, "2", 1)) { /* 2 - Double link LVDS */
 		xres = 1280;
+		yres = 1024;
 		pixel_format = 0x88883316;
 		gamma_fix = 1;
 		out8(PIXIS_BASE + PIXIS_BRDCFG0, tmp_val & 0xe7);
 
 	} else {	/* DVI */
 		xres = 1280;
+		yres = 1024;
 		pixel_format = 0x88882317;
 		gamma_fix = 0;
 		out8(PIXIS_BASE + PIXIS_BRDCFG0, tmp_val | 0x08);
@@ -86,7 +101,12 @@
 	}
 
 	if (!strncmp(argv[1],"init",4)) {
+#if defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE)
+		fsl_diu_clear_screen();
+		drv_video_init();
+#else
 		mpc8610hpcd_diu_init();
+#endif
 	} else {
 		addr = simple_strtoul(argv[1], NULL, 16);
 		fsl_diu_clear_screen();
@@ -102,4 +122,56 @@
 	"init\n    - initialize DIU\n"
 	"addr\n    - display bmp at address 'addr'\n"
 	);
+
+
+#if defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE)
+
+/*
+ * The Graphic Device
+ */
+GraphicDevice ctfb;
+void *video_hw_init(void)
+{
+	GraphicDevice *pGD = (GraphicDevice *) &ctfb;
+	struct fb_info *info;
+
+	mpc8610hpcd_diu_init();
+
+	/* fill in Graphic device struct */
+	sprintf(pGD->modeIdent,
+		"%dx%dx%d %ldkHz %ldHz",
+		xres, yres, 32, 64, 60);
+
+	pGD->frameAdrs = (unsigned int)fsl_fb_open(&info);
+	pGD->winSizeX = xres;
+	pGD->winSizeY = yres - info->logo_height;
+	pGD->plnSizeX = pGD->winSizeX;
+	pGD->plnSizeY = pGD->winSizeY;
+
+	pGD->gdfBytesPP = 4;
+	pGD->gdfIndex = GDF_32BIT_X888RGB;
+
+	pGD->isaBase = 0;
+	pGD->pciBase = 0;
+	pGD->memSize = info->screen_size - info->logo_size;
+
+	/* Cursor Start Address */
+	pGD->dprBase = 0;
+	pGD->vprBase = 0;
+	pGD->cprBase = 0;
+
+	return (void *)pGD;
+}
+
+void video_set_lut (unsigned int index,	/* color number */
+		    unsigned char r,	/* red */
+		    unsigned char g,	/* green */
+		    unsigned char b	/* blue */
+		    )
+{
+	return;
+}
+
+#endif /* defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE) */
+
 #endif /* CONFIG_FSL_DIU_FB */
