* Clean up CMC PU2 flash driver
* Update MAINTAINERS file
* Fix bug in MPC823 LCD driver
diff --git a/CHANGELOG b/CHANGELOG
index 217fa4e..5a26bfa 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,12 @@
Changes since U-Boot 1.1.1:
======================================================================
+* Clean up CMC PU2 flash driver
+
+* Update MAINTAINERS file
+
+* Fix bug in MPC823 LCD driver
+
* Fix udelay() on AT91RM9200 for delays < 1 ms.
* Enable long help on CMC PU2 board;
diff --git a/MAINTAINERS b/MAINTAINERS
index bd497b8..a9e9a40 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -209,6 +209,13 @@
ep8260 MPC8260
+Peter Pearse <peter.pearse@arm.com>
+
+ Integrator/AP CM 926EJ-S, CM7x0T, CM9x0T
+ Integrator/CP CM 926EJ-S CM920T, CM940T, CM922T-XA10
+ Versatile/AB ARM926EJ-S
+ Versatile/PB ARM926EJ-S
+
Denis Peter <d.peter@mpl.ch>
MIP405 PPC4xx
diff --git a/Makefile b/Makefile
index f2965f7..e19a561 100644
--- a/Makefile
+++ b/Makefile
@@ -1197,12 +1197,12 @@
xtract_omap730p2 = $(subst _cs0boot,,$(subst _cs3boot,, $(subst _config,,$1)))
-integratorcp_config : unconfig
- @./mkconfig $(@:_config=) arm arm926ejs integratorcp
-
integratorap_config : unconfig
@./mkconfig $(@:_config=) arm arm926ejs integratorap
+integratorcp_config : unconfig
+ @./mkconfig $(@:_config=) arm arm926ejs integratorcp
+
lpd7a400_config \
lpd7a404_config: unconfig
@./mkconfig $(@:_config=) arm lh7a40x lpd7a40x
diff --git a/README b/README
index 294f8f7..bb4c90a 100644
--- a/README
+++ b/README
@@ -1977,9 +1977,9 @@
source code. It is used to make hardware dependant
initializations.
-- CFG_IMMR: Physical address of the Internal Memory Mapped
- Register; DO NOT CHANGE! (11-4)
- [MPC8xx systems only]
+- CFG_IMMR: Physical address of the Internal Memory.
+ DO NOT CHANGE unless you know exactly what you're
+ doing! (11-4) [MPC8xx/82xx systems only]
- CFG_INIT_RAM_ADDR:
diff --git a/board/cmc_pu2/flash.c b/board/cmc_pu2/flash.c
index 9baa473..6105d56 100644
--- a/board/cmc_pu2/flash.c
+++ b/board/cmc_pu2/flash.c
@@ -37,11 +37,11 @@
typedef unsigned short FLASH_PORT_WIDTH;
typedef volatile unsigned short FLASH_PORT_WIDTHV;
-#define FPW FLASH_PORT_WIDTH
-#define FPWV FLASH_PORT_WIDTHV
+#define FPW FLASH_PORT_WIDTH
+#define FPWV FLASH_PORT_WIDTHV
#define FLASH_CYCLE1 0x0555
-#define FLASH_CYCLE2 0x02aa
+#define FLASH_CYCLE2 0x02AA
/*-----------------------------------------------------------------------
* Functions
@@ -96,9 +96,9 @@
/* Put FLASH back in read mode */
if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL)
- *base = (FPW)0x00FF00FF; /* Intel Read Mode */
+ *base = (FPW)0x00FF; /* Intel Read Mode */
else if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_AMD)
- *base = (FPW)0x00F000F0; /* AMD Read Mode */
+ *base = (FPW)0x00F0; /* AMD Read Mode */
}
/*-----------------------------------------------------------------------
@@ -183,9 +183,9 @@
/* Write auto select command: read Manufacturer ID */
/* Write auto select command sequence and test FLASH answer */
- addr[FLASH_CYCLE1] = (FPW)0x00AA00AA; /* for AMD, Intel ignores this */
- addr[FLASH_CYCLE2] = (FPW)0x00550055; /* for AMD, Intel ignores this */
- addr[FLASH_CYCLE1] = (FPW)0x00900090; /* selects Intel or AMD */
+ addr[FLASH_CYCLE1] = (FPW)0x00AA; /* for AMD, Intel ignores this */
+ addr[FLASH_CYCLE2] = (FPW)0x0055; /* for AMD, Intel ignores this */
+ addr[FLASH_CYCLE1] = (FPW)0x0090; /* selects Intel or AMD */
/* The manufacturer codes are only 1 byte, so just use 1 byte.
* This works for any bus width and any FLASH device width.
@@ -262,7 +262,7 @@
int flash_erase (flash_info_t *info, int s_first, int s_last)
{
FPWV *addr = (FPWV *)(info->start[0]);
- int flag, prot, sect, l_sect;
+ int flag, prot, sect, ssect, l_sect;
ulong start, now, last;
printf ("flash_erase: first: %d last: %d\n", s_first, s_last);
@@ -297,58 +297,70 @@
printf ("\n");
}
- l_sect = -1;
-
/* Disable interrupts which might cause a timeout here */
flag = disable_interrupts();
- addr[0x0555] = 0x00AA;
- addr[0x02AA] = 0x0055;
- addr[0x0555] = 0x0080;
- addr[0x0555] = 0x00AA;
- addr[0x02AA] = 0x0055;
+ /*
+ * Start erase on unprotected sectors.
+ * Since the flash can erase multiple sectors with one command
+ * we take advantage of that by doing the erase in chunks of
+ * 3 sectors.
+ */
+ for (sect = s_first; sect <= s_last; ) {
+ l_sect = -1;
- /* Start erase on unprotected sectors */
- for (sect = s_first; sect<=s_last; sect++) {
- if (info->protect[sect] == 0) { /* not protected */
- addr = (FPWV *)(info->start[sect]);
- addr[0] = 0x0030;
- l_sect = sect;
+ addr[FLASH_CYCLE1] = 0x00AA;
+ addr[FLASH_CYCLE2] = 0x0055;
+ addr[FLASH_CYCLE1] = 0x0080;
+ addr[FLASH_CYCLE1] = 0x00AA;
+ addr[FLASH_CYCLE2] = 0x0055;
+
+ /* do the erase in chunks of at most 3 sectors */
+ for (ssect = 0; ssect < 3; ssect++) {
+ if ((sect + ssect) > s_last)
+ break;
+ if (info->protect[sect + ssect] == 0) { /* not protected */
+ addr = (FPWV *)(info->start[sect + ssect]);
+ addr[0] = 0x0030;
+ l_sect = sect + ssect;
+ }
}
+ /* wait at least 80us - let's wait 1 ms */
+ udelay (1000);
+
+ /*
+ * We wait for the last triggered sector
+ */
+ if (l_sect < 0)
+ goto DONE;
+
+ start = get_timer (0);
+ last = start;
+ addr = (FPWV *)(info->start[l_sect]);
+ while ((addr[0] & 0x0080) != 0x0080) {
+ if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
+ printf ("Timeout\n");
+ return 1;
+ }
+ /* show that we're waiting */
+ if ((now - last) > 1000) { /* every second */
+ putc ('.');
+ last = now;
+ }
+ }
+ addr = (FPWV *)info->start[0];
+ addr[0] = 0x00F0; /* reset bank */
+ sect += ssect;
}
/* re-enable interrupts if necessary */
if (flag)
enable_interrupts();
- /* wait at least 80us - let's wait 1 ms */
- udelay (1000);
-
- /*
- * We wait for the last triggered sector
- */
- if (l_sect < 0)
- goto DONE;
-
- start = get_timer (0);
- last = start;
- addr = (FPWV *)(info->start[l_sect]);
- while ((addr[0] & 0x00000080) != 0x00000080) {
- if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
- printf ("Timeout\n");
- return 1;
- }
- /* show that we're waiting */
- if ((now - last) > 1000) { /* every second */
- putc ('.');
- last = now;
- }
- }
-
DONE:
/* reset to read mode */
addr = (FPWV *)info->start[0];
- addr[0] = 0x000000F0; /* reset bank */
+ addr[0] = 0x00F0; /* reset bank */
printf (" done\n");
return 0;
@@ -432,9 +444,9 @@
/* Disable interrupts which might cause a timeout here */
flag = disable_interrupts();
- base[FLASH_CYCLE1] = (FPW)0x00AA00AA; /* unlock */
- base[FLASH_CYCLE2] = (FPW)0x00550055; /* unlock */
- base[FLASH_CYCLE1] = (FPW)0x00A000A0; /* selects program mode */
+ base[FLASH_CYCLE1] = (FPW)0x00AA; /* unlock */
+ base[FLASH_CYCLE2] = (FPW)0x0055; /* unlock */
+ base[FLASH_CYCLE1] = (FPW)0x00A0; /* selects program mode */
*dest = data; /* start programming the data */
@@ -445,9 +457,9 @@
start = get_timer (0);
/* data polling for D7 */
- while ((*dest & (FPW)0x00000080) != (data & (FPW)0x00000080)) {
+ while ((*dest & (FPW)0x0080) != (data & (FPW)0x0080)) {
if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
- *dest = (FPW)0x000000F0; /* reset bank */
+ *dest = (FPW)0x00F0; /* reset bank */
return (1);
}
}
diff --git a/common/lcd.c b/common/lcd.c
index 85b44ca..d3ecd92 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -620,6 +620,8 @@
cmap = (ushort *)fbi->palette;
#elif defined(CONFIG_MPC823)
cmap = (ushort *)&(cp->lcd_cmap[255*sizeof(ushort)]);
+#else
+# error "Don't know location of color map"
#endif
/* Set color map */
@@ -631,9 +633,14 @@
( (cte.blue) & 0x001f) ;
#ifdef CFG_INVERT_COLORS
- *cmap++ = 0xffff - colreg;
+ *cmap = 0xffff - colreg;
#else
- *cmap++ = colreg;
+ *cmap = colreg;
+#endif
+#if defined(CONFIG_PXA250)
+ cmap++;
+#elif defined(CONFIG_MPC823)
+ cmap--;
#endif
}
}
diff --git a/doc/README.NetConsole b/doc/README.NetConsole
index aa13627..3a57293 100644
--- a/doc/README.NetConsole
+++ b/doc/README.NetConsole
@@ -25,7 +25,7 @@
stty icanon echo intr ^C
+++++++++++++++++++++++++++++++++++++++++++
-It turned out that 'netcat' couldn't be used to listen to broadcast
+It turns out that 'netcat' cannot be used to listen to broadcast
packets. We developed our own tool 'ncb' (see tools directory) that
listens to broadcast packets on a given port and dumps them to the
standard output. use it as follows:
@@ -87,3 +87,6 @@
as follows:
nc -u -l -p 6666
+
+Note that unlike the U-Boot implementation the Linux netconsole is
+unidirectional, i. e. you have console output only in Linux.