[U-Boot-Users] [PATCH] mpc85xx: make the MxMR register in upmconfig as a parameter

Sebastian Siewior bigeasy at linutronix.de
Mon Jul 14 12:54:32 CEST 2008


The default value for the MxMR register is not always the right one.
This patch adds the value of MxMR register as an additional
parameter (plus a few defines instead of hex coded values).

Signed-off-by: Sebastian Siewior <bigeasy at linutronix.de>
---
 cpu/mpc85xx/cpu.c |   17 +++++++++++------
 include/common.h  |    4 ++++
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/cpu/mpc85xx/cpu.c b/cpu/mpc85xx/cpu.c
index 2373b4a..081e804 100644
--- a/cpu/mpc85xx/cpu.c
+++ b/cpu/mpc85xx/cpu.c
@@ -314,16 +314,21 @@ int dma_xfer(void *dest, uint count, void *src) {
 	return dma_check();
 }
 #endif
+
+#define MXMR_OP_NORMAL	(0x00000000)
+#define MXMR_OP_WRITE	(0x10000000)
+#define MXMR_OP_READ	(0x20000000)
+#define MXMR_OP_RUN	(0x30000000)
+
 /*
- * Configures a UPM. Currently, the loop fields in MxMR (RLF, WLF and TLF)
- * are hardcoded as "1"."size" is the number or entries, not a sizeof.
+ * Configures a UPM. The MxMR mode is the fourth parameter.
+ * "size" is the number or entries, not a sizeof.
  */
-void upmconfig (uint upm, uint * table, uint size)
+void upmconfig(uint upm, uint *table, uint size, unsigned int mxmr_mode)
 {
 	int i, mdr, mad, old_mad = 0;
 	volatile u32 *mxmr;
 	volatile ccsr_lbc_t *lbc = (void *)(CFG_MPC85xx_LBC_ADDR);
-	int loopval = 0x00004440;
 	volatile u32 *brp,*orp;
 	volatile u8* dummy = NULL;
 	int upmmask;
@@ -364,7 +369,7 @@ void upmconfig (uint upm, uint * table, uint size)
 
 	for (i = 0; i < size; i++) {
 		/* 1 */
-		out_be32(mxmr, loopval | 0x10000000 | i); /* OP_WRITE */
+		out_be32(mxmr, mxmr_mode | MXMR_OP_WRITE | i);
 		/* 2 */
 		out_be32(&lbc->mdr, table[i]);
 		/* 3 */
@@ -377,5 +382,5 @@ void upmconfig (uint upm, uint * table, uint size)
 		} while (mad <= old_mad && !(!mad && i == (size-1)));
 		old_mad = mad;
 	}
-	out_be32(mxmr, loopval); /* OP_NORMAL */
+	out_be32(mxmr, mxmr_mode | MXMR_OP_NORMAL);
 }
diff --git a/include/common.h b/include/common.h
index 10b997e..0c0ef5b 100644
--- a/include/common.h
+++ b/include/common.h
@@ -441,7 +441,11 @@ void		ppcDWstore(unsigned int *addr, unsigned int *value);
 int	checkcpu      (void);
 int	checkicache   (void);
 int	checkdcache   (void);
+#ifdef CONFIG_MPC85xx
+void	upmconfig     (unsigned int, unsigned int *, unsigned int, unsigned int);
+#else
 void	upmconfig     (unsigned int, unsigned int *, unsigned int);
+#endif
 ulong	get_tbclk     (void);
 void	reset_cpu     (ulong addr);
 #if defined (CONFIG_OF_LIBFDT) && defined (CONFIG_OF_BOARD_SETUP)
-- 
1.5.5.2





More information about the U-Boot mailing list