Index: u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c
===================================================================
--- u-boot-1.3.2.orig/board/freescale/mpc8313erdb/mpc8313erdb.c	2008-12-09 16:24:39.000000000 +0100
+++ u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c	2008-12-09 16:24:57.000000000 +0100
@@ -44,6 +44,46 @@
 	return 0;
 }
 
+int misc_init_f(void)
+{
+	uchar value;
+	uchar i;
+
+#ifdef PRE_INIT_GPIO
+	value=PRE_INIT_GPIO;
+
+	for(i=0;i<MAX_GPIO_OUT;i++)
+	{
+		if(value&(1<<i))
+		{
+			gpio_set(i);
+		}
+		else
+		{
+			gpio_clear(i);
+		}
+	}
+	udelay(1000);
+#endif
+
+
+#ifdef INIT_GPIO
+	value=INIT_GPIO;
+	for(i=0;i<MAX_GPIO_OUT;i++)
+	{
+		if(value&(1<<i))
+		{
+			gpio_set(i);
+		}
+		else
+		{
+			gpio_clear(i);
+		}
+	}
+	puts("GPIO: ready\n");
+#endif
+}
+
 int checkboard(void)
 {
 	puts("Board: Freescale MPC8313ERDB\n");
@@ -109,7 +149,42 @@
 }
 #endif
 
+#ifdef CONFIG_CMD_GPIO
+void gpio_set(unsigned char ucGpio)
+{
+	unsigned long ulMask=0;
+	volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0];
+	if(ucGpio<32)
+	{
+		ulMask=1<<(31-ucGpio);
+		iopd->dir |= ulMask;
+		iopd->dat |= ulMask;
+	}
+}
+
+void gpio_clear(unsigned char ucGpio)
+{
+	unsigned long ulMask=0;
+	volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0];
+	if(ucGpio<32)
+	{
+		ulMask=1<<(31-ucGpio);
+		iopd->dir |= ulMask;
+		iopd->dat &= ~ulMask;
+	}
+}
 
+char gpio_get(unsigned char ucGpio)
+{
+	unsigned long ulMask=0;
+	volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0];
+	if(ucGpio<32)
+	{
+		ulMask=1<<(31-ucGpio);
+	}
+	return (iopd->dat& ulMask)? 1:0;
+}
+#endif
 /*
  * The following are used to control the SPI chip selects for the SPI command.
  */
Index: u-boot-1.3.2/common/cmd_gpio.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ u-boot-1.3.2/common/cmd_gpio.c	2008-12-09 16:24:57.000000000 +0100
@@ -0,0 +1,77 @@
+/*
+ * (C) Copyright 2001
+ * Alexandre Coffignal, CenoSYS, alexandre.coffignal@cenosys.com
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+
+#include <common.h>
+#include <config.h>
+#include <command.h>
+
+extern void gpio_set(unsigned char ucGpio);
+extern void gpio_clear(unsigned char ucGpio);
+
+int do_gpio (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+	unsigned char ucGpio;
+
+	if (argc < 3)
+		goto usage;
+
+	ucGpio = simple_strtoul (argv[2], NULL, 10);
+
+	if (!strncmp(argv[1], "set", 3))
+	{
+		gpio_set(ucGpio);
+	}
+	else
+		if (!strncmp(argv[1], "clear", 5))
+		{
+			gpio_clear(ucGpio);
+		}
+		else
+			if (!strncmp(argv[1], "get", 3))
+			{
+				printf("%s %s %d = %d\n",argv[0],argv[1],ucGpio, gpio_get(ucGpio));
+				return 0;
+			}
+			else
+				goto usage;
+
+	printf("%s %s %d\n",argv[0],argv[1],ucGpio);
+
+	return 0;
+
+usage :
+	printf ("Usage:\n%s\n", cmdtp->usage);
+	return 1;
+}	/* do_gpio() */
+
+/***************************************************/
+
+U_BOOT_CMD(
+	  gpio,	3,	1,	do_gpio,
+	  "gpio     - General Purpose Input/Output\n",
+	  "        - Set or clear General Purpose Output.\n"
+	  "<set/clear/get> - Set or clear General Purpose Output.\n"
+	  "<gpio> - number of gpio to be set/clear/get \n"
+);
+
Index: u-boot-1.3.2/common/Makefile
===================================================================
--- u-boot-1.3.2.orig/common/Makefile	2008-12-09 16:24:39.000000000 +0100
+++ u-boot-1.3.2/common/Makefile	2008-12-09 16:24:57.000000000 +0100
@@ -50,6 +50,7 @@
 COBJS-$(CONFIG_CMD_DISPLAY) += cmd_display.o
 COBJS-$(CONFIG_CMD_DOC) += cmd_doc.o
 COBJS-$(CONFIG_CMD_DTT) += cmd_dtt.o
+COBJS-$(CONFIG_CMD_GPIO) += cmd_gpio.o
 COBJS-y += cmd_eeprom.o
 COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o
 COBJS-$(CONFIG_CMD_EXT2) += cmd_ext2.o
Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h
===================================================================
--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h	2008-12-09 16:24:39.000000000 +0100
+++ u-boot-1.3.2/include/configs/MPC8313ERDB.h	2008-12-09 16:26:20.000000000 +0100
@@ -49,6 +49,7 @@
 #define CONFIG_SYS_CLK_FREQ	CONFIG_83XX_CLKIN
 
 #define CONFIG_BOARD_EARLY_INIT_F		/* call board_pre_init */
+#define CONFIG_MISC_INIT_F
 
 #define CFG_IMMR		0xE0000000
 
@@ -370,6 +371,7 @@
 #define CONFIG_CMD_NAND
 #define CONFIG_CMD_JFFS2
 #define CONFIG_CMD_SPI
+#define CONFIG_CMD_GPIO
 
 #if defined(CFG_RAMBOOT)
     #undef CONFIG_CMD_ENV
@@ -392,6 +394,11 @@
 #define CONFIG_HARD_SPI			/* SPI with hardware support */
 #undef CONFIG_SOFT_SPI			/* SPI bit-banged */
 
+/* GPIO */
+#define PRE_INIT_GPIO	0x28
+#define INIT_GPIO	0x08
+#define	MAX_GPIO_OUT 	7
+
 /*
  * Miscellaneous configurable options
  */
@@ -457,7 +464,7 @@
 
 /* System IO Config */
 #define CFG_SICRH	(SICRH_TSOBI1 | SICRH_TSOBI2)	/* RGMII */
-#define CFG_SICRL	SICRL_USBDR			/* Enable Internal USB Phy  */
+#define CFG_SICRL	(SICRL_USBDR	|SICRL_LBC)		/* Enable Internal USB Phy  */
 
 #define CFG_HID0_INIT	0x000000000
 #define CFG_HID0_FINAL	(HID0_ENABLE_MACHINE_CHECK | \