summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelvamuthukumar <selva.muthukumar@e-coninfotech.com>2008-10-09 10:29:14 +0530
committerKim Phillips <kim.phillips@freescale.com>2008-10-14 18:10:51 -0500
commit9724555755a6f1066636481b41f7094e0ce93a69 (patch)
tree0fce78878fc7a8ed023e236041c70cd3d72eabb4
parent03e2dbb18e858e2f7a6aaa437f290f3690d02d51 (diff)
downloadu-boot-imx-9724555755a6f1066636481b41f7094e0ce93a69.zip
u-boot-imx-9724555755a6f1066636481b41f7094e0ce93a69.tar.gz
u-boot-imx-9724555755a6f1066636481b41f7094e0ce93a69.tar.bz2
mpc83xx: wait till UPM completes the write to array
Reference manual states that MxMR[MAD] increment is the indication of write to UPM array is complete. Honour that. Also, make the dummy write explicit. also fix the comment. Signed-off-by: Selvamuthukumar <selva.muthukumar@e-coninfotech.com> Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
-rw-r--r--cpu/mpc83xx/cpu.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/cpu/mpc83xx/cpu.c b/cpu/mpc83xx/cpu.c
index 5862acd..99ab216 100644
--- a/cpu/mpc83xx/cpu.c
+++ b/cpu/mpc83xx/cpu.c
@@ -124,8 +124,8 @@ int checkcpu(void)
* The 'dummy' variable is used to increment the MAD. 'dummy' is
* supposed to be a pointer to the memory of the device being
* programmed by the UPM. The data in the MDR is written into
- * memory and the MAD is incremented every time there's a read
- * from 'dummy'. Unfortunately, the current prototype for this
+ * memory and the MAD is incremented every time there's a write
+ * to 'dummy'. Unfortunately, the current prototype for this
* function doesn't allow for passing the address of this
* device, and changing the prototype will break a number lots
* of other code, so we need to use a round-about way of finding
@@ -174,8 +174,9 @@ void upmconfig (uint upm, uint *table, uint size)
for (i = 0; i < size; i++) {
lbus->mdr = table[i];
__asm__ __volatile__ ("sync");
- *dummy; /* Write the value to memory and increment MAD */
+ *dummy = 0; /* Write the value to memory and increment MAD */
__asm__ __volatile__ ("sync");
+ while(((*mxmr & 0x3f) != ((i + 1) & 0x3f)));
}
/* Set the OP field in the MxMR to "normal" and the MAD field to 000000 */