* Patch by Andreas Engel, 12 Jul 2004:
  Replaced hardcoded PL011 clock frequency with config variable.
  Fixed wrong CONFIG_CMD_DFL doc.

* Patch by Thomas Viehweger, 09 Jun 2004:
  make it possible to remove chpart when there is only one partition
diff --git a/CHANGELOG b/CHANGELOG
index 4470f8c..7a9fc1f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,13 @@
 Changes since U-Boot 1.1.1:
 ======================================================================
 
+* Patch by Andreas Engel, 12 Jul 2004:
+  Replaced hardcoded PL011 clock frequency with config variable.
+  Fixed wrong CONFIG_CMD_DFL doc.
+
+* Patch by Thomas Viehweger, 09 Jun 2004:
+  make it possible to remove chpart when there is only one partition
+
 * Add support for console over UDP (compatible to Ingo Molnar's
   netconsole patch under Linux)
 
diff --git a/README b/README
index 0d6eac9..570b668 100644
--- a/README
+++ b/README
@@ -380,6 +380,27 @@
 		expect it to be in bytes, others in MB.
 		Define CONFIG_MEMSIZE_IN_BYTES to make it in bytes.
 
+- Serial Ports:
+		CFG_PL010_SERIAL
+
+		Define this if you want support for Amba PrimeCell PL010 UARTs.
+
+		CFG_PL011_SERIAL
+
+		Define this if you want support for Amba PrimeCell PL011 UARTs.
+
+		CONFIG_PL011_CLOCK
+
+		If you have Amba PrimeCell PL011 UARTs, set this variable to
+		the clock speed of the UARTs.
+
+		CONFIG_PL01x_PORTS
+
+		If you have Amba PrimeCell PL010 or PL011 UARTs on your board,
+		define this to a list of base addresses for each (supported)
+		port. See e.g. include/configs/versatile.h
+
+
 - Console Interface:
 		Depending on board, define exactly one serial port
 		(like CONFIG_8xx_CONS_SMC1, CONFIG_8xx_CONS_SMC2,
@@ -541,22 +562,23 @@
 		CFG_CMD_ASKENV	* ask for env variable
 		CFG_CMD_AUTOSCRIPT Autoscript Support
 		CFG_CMD_BDI	  bdinfo
-		CFG_CMD_BEDBUG	  Include BedBug Debugger
+		CFG_CMD_BEDBUG	* Include BedBug Debugger
 		CFG_CMD_BMP	* BMP support
+		CFG_CMD_BSP	* Board specific commands
 		CFG_CMD_BOOTD	  bootd
-		CFG_CMD_CACHE	  icache, dcache
+		CFG_CMD_CACHE	* icache, dcache
 		CFG_CMD_CONSOLE	  coninfo
 		CFG_CMD_DATE	* support for RTC, date/time...
-		CFG_CMD_DHCP	  DHCP support
+		CFG_CMD_DHCP	* DHCP support
 		CFG_CMD_DIAG	* Diagnostics
 		CFG_CMD_DOC	* Disk-On-Chip Support
-		CFG_CMD_DTT	  Digital Therm and Thermostat
+		CFG_CMD_DTT	* Digital Therm and Thermostat
 		CFG_CMD_ECHO	* echo arguments
 		CFG_CMD_EEPROM	* EEPROM read/write support
-		CFG_CMD_ELF	  bootelf, bootvx
+		CFG_CMD_ELF	* bootelf, bootvx
 		CFG_CMD_ENV	  saveenv
 		CFG_CMD_FDC	* Floppy Disk Support
-		CFG_CMD_FAT	  FAT partition support
+		CFG_CMD_FAT	* FAT partition support
 		CFG_CMD_FDOS	* Dos diskette Support
 		CFG_CMD_FLASH	  flinfo, erase, protect
 		CFG_CMD_FPGA	  FPGA device initialization support
@@ -567,7 +589,7 @@
 		CFG_CMD_IMLS	  List all found images
 		CFG_CMD_IMMAP	* IMMR dump support
 		CFG_CMD_IRQ	* irqinfo
-		CFG_CMD_ITEST	* Integer/string test of 2 values
+		CFG_CMD_ITEST	  Integer/string test of 2 values
 		CFG_CMD_JFFS2	* JFFS2 Support
 		CFG_CMD_KGDB	* kgdb
 		CFG_CMD_LOADB	  loadb
@@ -575,8 +597,8 @@
 		CFG_CMD_MEMORY	  md, mm, nm, mw, cp, cmp, crc, base,
 				  loop, loopw, mtest
 		CFG_CMD_MISC	  Misc functions like sleep etc
-		CFG_CMD_MMC	  MMC memory mapped support
-		CFG_CMD_MII	  MII utility commands
+		CFG_CMD_MMC	* MMC memory mapped support
+		CFG_CMD_MII	* MII utility commands
 		CFG_CMD_NAND	* NAND support
 		CFG_CMD_NET	  bootp, tftpboot, rarpboot
 		CFG_CMD_PCI	* pciinfo
@@ -585,7 +607,7 @@
 		CFG_CMD_PORTIO	* Port I/O
 		CFG_CMD_REGINFO * Register dump
 		CFG_CMD_RUN	  run command in env variable
-		CFG_CMD_SAVES	  save S record dump
+		CFG_CMD_SAVES	* save S record dump
 		CFG_CMD_SCSI	* SCSI Support
 		CFG_CMD_SDRAM	* print SDRAM configuration information
 		CFG_CMD_SETGETDCR Support for DCR Register access (4xx only)
@@ -783,6 +805,24 @@
 		enabled with CFG_CMD_MMC. The MMC driver also works with
 		the FAT fs. This is enabled with CFG_CMD_FAT.
 
+- Journaling Flash filesystem support:
+		CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE,
+		CONFIG_JFFS2_NAND_DEV
+		Define these for a default partition on a NAND device
+
+		CFG_JFFS2_FIRST_SECTOR,
+		CFG_JFFS2_FIRST_BANK, CFG_JFFS2_NUM_BANKS
+		Define these for a default partition on a NOR device
+
+		CFG_JFFS_CUSTOM_PART
+		Define this to create an own partition. You have to provide a
+		function struct part_info* jffs2_part_info(int part_num)
+
+		If you define only one JFFS2 partition you may also want to
+		#define CFG_JFFS_SINGLE_PART    1
+		to disable the command chpart. This is the default when you
+		have not defined a custom partition
+
 - Keyboard Support:
 		CONFIG_ISA_KEYBOARD
 
diff --git a/common/cmd_jffs2.c b/common/cmd_jffs2.c
index e49b74d..f7a5f9e 100644
--- a/common/cmd_jffs2.c
+++ b/common/cmd_jffs2.c
@@ -47,6 +47,8 @@
 
 #ifndef CFG_JFFS_CUSTOM_PART
 
+#define CFG_JFFS_SINGLE_PART	1
+
 static struct part_info part;
 
 #ifndef CONFIG_JFFS2_NAND
@@ -80,9 +82,6 @@
 			flash_info[CFG_JFFS2_FIRST_BANK].start[0];
 #endif
 
-		/* unused in current jffs2 loader */
-		part.erasesize = 0;
-
 		/* Mark the struct as ready */
 		part.usr_priv=(void*)1;
 
@@ -230,6 +229,7 @@
 	return 0;
 }
 
+#ifndef CFG_JFFS_SINGLE_PART
 int
 do_jffs2_chpart(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
@@ -257,6 +257,7 @@
 	return 0;
 
 }
+#endif	/* CFG_JFFS_SINGLE_PART */
 
 /***************************************************/
 
diff --git a/drivers/serial_pl010.c b/drivers/serial_pl010.c
index 7ff4b85..417b6ae 100644
--- a/drivers/serial_pl010.c
+++ b/drivers/serial_pl010.c
@@ -38,13 +38,10 @@
 #define IO_READ(addr) (*(volatile unsigned int *)(addr))
 
 /* Integrator AP has two UARTs, we use the first one, at 38400-8-N-1 */
-#define NUM_PORTS 2
 #define CONSOLE_PORT CONFIG_CONS_INDEX
 #define baudRate CONFIG_BAUDRATE
-static volatile unsigned char *const port[NUM_PORTS] = {
-	(void *) (CFG_SERIAL0),
-	(void *) (CFG_SERIAL1)
-};
+static volatile unsigned char *const port[] = CONFIG_PL01x_PORTS;
+#define NUM_PORTS (sizeof(port)/sizeof(port[0]))
 
 
 static void pl010_putc (int portnum, char c);
diff --git a/drivers/serial_pl011.c b/drivers/serial_pl011.c
index 0e13226..4d35fe5 100644
--- a/drivers/serial_pl011.c
+++ b/drivers/serial_pl011.c
@@ -41,14 +41,11 @@
  * IntegratorCP has two UARTs, use the first one, at 38400-8-N-1
  * Versatile PB has four UARTs.
  */
-#define NUM_PORTS 2
+
 #define CONSOLE_PORT CONFIG_CONS_INDEX
 #define baudRate CONFIG_BAUDRATE
-static volatile unsigned char *const port[NUM_PORTS] = {
-	(void *) (CFG_SERIAL0),
-	(void *) (CFG_SERIAL1)
-};
-
+static volatile unsigned char *const port[] = CONFIG_PL01x_PORTS;
+#define NUM_PORTS (sizeof(port)/sizeof(port[0]))
 
 static void pl011_putc (int portnum, char c);
 static int pl011_getc (int portnum);
@@ -73,20 +70,11 @@
 	 ** IBRD = UART_CLK / (16 * BAUD_RATE)
 	 ** FBRD = ROUND((64 * MOD(UART_CLK,(16 * BAUD_RATE))) / (16 * BAUD_RATE))
 	 */
-#ifdef CONFIG_VERSATILE
 	temp = 16 * baudRate;
-	divider = 24000000 / temp;
-	remainder = 24000000 % temp;
+	divider = CONFIG_PL011_CLOCK / temp;
+	remainder = CONFIG_PL011_CLOCK % temp;
 	temp = (8 * remainder) / baudRate;
 	fraction = (temp >> 1) + (temp & 1);
-#endif
-#ifdef CONFIG_INTEGRATOR
-	temp = 16 * baudRate;
-	divider = 14745600 / temp;
-	remainder = 14745600 % temp;
-	temp = (8 * remainder) / baudRate;
-	fraction = (temp >> 1) + (temp & 1);
-#endif
 
 	IO_WRITE (port[CONSOLE_PORT] + UART_PL011_IBRD, divider);
 	IO_WRITE (port[CONSOLE_PORT] + UART_PL011_FBRD, fraction);
@@ -104,7 +92,7 @@
 		  (UART_PL011_CR_UARTEN | UART_PL011_CR_TXE |
 		   UART_PL011_CR_RXE));
 
-	return (0);
+	return 0;
 }
 
 void serial_putc (const char c)
diff --git a/include/configs/integratorap.h b/include/configs/integratorap.h
index 1f0792f..2674b52 100644
--- a/include/configs/integratorap.h
+++ b/include/configs/integratorap.h
@@ -60,6 +60,7 @@
 #define CFG_PL010_SERIAL
 #define CONFIG_CONS_INDEX	0
 #define CONFIG_BAUDRATE         38400
+#define CONFIG_PL01x_PORTS	{ (void *) (CFG_SERIAL0), (void *) (CFG_SERIAL1) }
 #define CFG_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
 #define CFG_SERIAL0		0x16000000
 #define CFG_SERIAL1		0x17000000
diff --git a/include/configs/integratorcp.h b/include/configs/integratorcp.h
index eb814e7..1369748 100644
--- a/include/configs/integratorcp.h
+++ b/include/configs/integratorcp.h
@@ -66,6 +66,8 @@
  * NS16550 Configuration
  */
 #define CFG_PL011_SERIAL
+#define CONFIG_PL011_CLOCK	14745600
+#define CONFIG_PL01x_PORTS	{ (void *)CFG_SERIAL0, (void *)CFG_SERIAL1 }
 #define CONFIG_CONS_INDEX	0
 #define CONFIG_BAUDRATE	38400
 #define CFG_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
diff --git a/include/configs/versatile.h b/include/configs/versatile.h
index 8df0e46..49d7251 100644
--- a/include/configs/versatile.h
+++ b/include/configs/versatile.h
@@ -87,7 +87,10 @@
  * NS16550 Configuration
  */
 #define CFG_PL011_SERIAL
+#define CONFIG_PL011_CLOCK	24000000
+#define CONFIG_PL01x_PORTS	{ (void *)CFG_SERIAL0, (void *)CFG_SERIAL1 }
 #define CONFIG_CONS_INDEX	0
+
 #define CONFIG_BAUDRATE         38400
 #define CFG_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
 #define CFG_SERIAL0		0x101F1000