All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Saada <David.Saada@ecitele.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users]  [PATCH v2] MPC85xx, MPC83xx: Add/Fix UPM configuration support
Date: Thu, 7 Feb 2008 08:53:46 -0800 (PST)	[thread overview]
Message-ID: <15338111.post@talk.nabble.com> (raw)


Add support for UPM configuration on the 85xx platform.
In addition, on the MPC83xx, remove MPC834x precompiler condition, in order
to support all MPC83xx processors.

Signed-off-by: David Saada <david.saada@ecitele.com>

--- a/include/mpc85xx.h	2008-02-07 12:11:35.873966000 +0200
+++ b/include/mpc85xx.h	2008-02-07 13:13:34.255165000 +0200
@@ -35,7 +35,10 @@
 #define BRx_MS_UPMA	0x00000080	/* U.P.M.A Machine Select	*/
 #define BRx_MS_UPMB	0x000000a0	/* U.P.M.B Machine Select	*/
 #define BRx_MS_UPMC	0x000000c0	/* U.P.M.C Machine Select	*/
+#define BRx_MS_MSK	0x000000e0	/* Machine select mask */
+#define BRx_MS_SHIFT	5		/* Machine select shift */
 #define BRx_PS_8	0x00000800	/*  8 bit port size		*/
+#define BRx_PS_16	0x00001000	/* 16 bit port size		*/
 #define BRx_PS_32	0x00001800	/* 32 bit port size		*/
 #define BRx_BA_MSK	0xffff8000	/* Base Address Mask		*/
 
@@ -53,8 +56,10 @@
 #define ORxU_AM_MSK	0xffff8000	/* Address Mask Mask		*/
 
 #define MxMR_OP_NORM	0x00000000	/* Normal Operation		*/
-#define MxMR_DSx_2_CYCL 0x00400000	/* 2 cycle Disable Period	*/
 #define MxMR_OP_WARR	0x10000000	/* Write to Array		*/
+#define MxMR_DSx_2_CYCL 0x00400000	/* 2 cycle Disable Period	*/
+#define MxMR_DSx_3_CYCL 0x00800000	/* 3 cycle Disable Period	*/
+#define MxMR_GPL4_LPWT  0x00040000	/* LGPL4 Line in LUPWAIT mode	*/
 #define MxMR_BSEL	0x80000000	/* Bus Select			*/
 
 /* helpers to convert values into an OR address mask (GPCM mode) */
--- a/cpu/mpc83xx/cpu.c	2008-02-07 12:11:27.569737000 +0200
+++ b/cpu/mpc83xx/cpu.c	2008-02-07 13:14:44.975179000 +0200
@@ -227,7 +227,6 @@ int checkcpu(void)
  */
 void upmconfig (uint upm, uint *table, uint size)
 {
-#if defined(CONFIG_MPC834X)
 	volatile immap_t *immap = (immap_t *) CFG_IMMR;
 	volatile lbus83xx_t *lbus = &immap->lbus;
 	volatile uchar *dummy = NULL;
@@ -260,10 +259,6 @@ void upmconfig (uint upm, uint *table, u
 
 	/* Set the OP field in the MxMR to "normal" and the MAD field to 000000 */
 	*mxmr &= 0xCFFFFFC0;
-#else
-	printf("Error: %s() not defined for this configuration.\n", __FUNCTION__);
-	hang();
-#endif
 }
 
 
--- a/cpu/mpc85xx/cpu.c	2008-02-07 12:11:27.616748000 +0200
+++ b/cpu/mpc85xx/cpu.c	2008-02-07 13:30:38.359554000 +0200
@@ -29,6 +29,7 @@
 #include <watchdog.h>
 #include <command.h>
 #include <asm/cache.h>
+#include "asm/immap_85xx.h"
 
 int checkcpu (void)
 {
@@ -263,3 +264,68 @@ int dma_xfer(void *dest, uint count, voi
 	return dma_check();
 }
 #endif
+
+/*
+ * Program a UPM with the code supplied in the table.
+ *
+ * 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
+ * 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
+ * the value for 'dummy'.
+ *
+ * The value can be extracted from the base address bits of the
+ * Base Register (BR) associated with the specific UPM.  To find
+ * that BR, we need to scan all BRs until we find the one that
+ * has its MSEL bits matching the UPM we want.  Once we know the
+ * right BR, we can extract the base address bits from it.
+ *
+ * The MxMR and the BR and OR of the chosen bank should all be
+ * configured before calling this function.
+ *
+ * Parameters:
+ * upm: 0=UPMA, 1=UPMB, 2=UPMC
+ * table: Pointer to an array of values to program
+ * size: Number of elements in the array.  Must be 64 or less.
+ */
+void upmconfig (uint upm, uint *table, uint size)
+{
+    volatile ccsr_lbc_t *lbc = (void *)(CFG_MPC85xx_LBC_ADDR);
+	volatile uchar *dummy = NULL;
+	const u32 msel = (upm + 4) << BRx_MS_SHIFT;	/* What the MSEL field in BRn
should be */
+	volatile uint *mxmr = &lbc->mamr + upm;	/* Pointer to mamr, mbmr, or mcmr
*/
+	volatile uint *brx = &lbc->br0;	/* Pointer to BRx */
+	uint i;
+
+	/* Scan all the banks to determine the base address of the device */
+	for (i = 0; i < 8; i++) {
+		if ((*brx & BRx_MS_MSK) == msel) {
+			dummy = (uchar *) (*brx & BRx_BA_MSK);
+			break;
+		}
+		brx += 2; /* Skip to next BRx */
+	}
+
+	if (!dummy) {
+		printf("Error: %s() could not find matching BR\n", __FUNCTION__);
+		hang();
+	}
+
+	/* Set the OP field in the MxMR to "write" and the MAD field to 000000 */
+	*mxmr = (*mxmr & 0xCFFFFFC0) | MxMR_OP_WARR;
+
+	for (i = 0; i < size; i++) {
+		lbc->mdr = table[i];
+		__asm__ __volatile__ ("sync");
+		*dummy;	/* Write the value to memory and increment MAD */
+		__asm__ __volatile__ ("sync");
+	}
+
+	/* Set the OP field in the MxMR to "normal" and the MAD field to 000000 */
+	*mxmr &= 0xCFFFFFC0;
+}
+

-- 
View this message in context: http://www.nabble.com/-PATCH-v2--MPC85xx%2C-MPC83xx%3A-Add-Fix-UPM-configuration-support-tp15338111p15338111.html
Sent from the Uboot - Users mailing list archive at Nabble.com.

             reply	other threads:[~2008-02-07 16:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-07 16:53 David Saada [this message]
2008-02-07 22:32 ` [U-Boot-Users] [PATCH v2] MPC85xx, MPC83xx: Add/Fix UPM configuration support Kim Phillips
2008-02-10 13:14   ` David Saada
2008-02-11 19:11     ` Kim Phillips
2008-02-12  9:46       ` David Saada

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=15338111.post@talk.nabble.com \
    --to=david.saada@ecitele.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.