<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style>.EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; }</style>
</head>
<body>
<font face="Arial Unicode MS, sans-serif" size="2">
<div>Add support for UPM configuration on the 85xx platform.</div>
<div>In addition, on the MPC83xx, remove MPC834x precompiler condition, in order to support all MPC83xx processors.</div>
<div><font face="Times New Roman, serif" size="3">&nbsp;</font></div>
<div>Signed-off-by: David Saada &lt;david.saada@ecitele.com&gt;</div>
<div><font face="Times New Roman, serif" size="3">&nbsp;</font></div>
<div>cpu/mpc83xx/cpu.c |&nbsp;&nbsp;&nbsp; 5 ----</div>
<div>cpu/mpc85xx/cpu.c |&nbsp;&nbsp; 66 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;</div>
<div>include/mpc85xx.h |&nbsp;&nbsp;&nbsp; 7 &#43;&#43;&#43;&#43;-</div>
<div>3 files changed, 72 insertions(&#43;), 6 deletions(-)</div>
<div><font face="Times New Roman, serif" size="3">&nbsp;</font></div>
<div>--- a/cpu/mpc83xx/cpu.c 2008-05-15 01:42:46.000000000 &#43;0300</div>
<div>&#43;&#43;&#43; b/cpu/mpc83xx/cpu.c 2008-05-18 11:22:34.503036000 &#43;0300</div>
<div>@@ -147,7 &#43;147,6 @@ int checkcpu(void)</div>
<div>&nbsp; */</div>
<div> void upmconfig (uint upm, uint *table, uint size)</div>
<div> {</div>
<div>-#if defined(CONFIG_MPC834X)</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; volatile immap_t *immap = (immap_t *) CFG_IMMR;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; volatile lbus83xx_t *lbus = &amp;immap-&gt;lbus;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; volatile uchar *dummy = NULL;</div>
<div>@@ -180,10 &#43;179,6 @@ void upmconfig (uint upm, uint *table, u</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Set the OP field in the MxMR to &quot;normal&quot; and the MAD field to 000000 */</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *mxmr &amp;= 0xCFFFFFC0;</div>
<div>-#else</div>
<div>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Error: %s() not defined for this configuration.\n&quot;, __FUNCTION__);</div>
<div>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hang();</div>
<div>-#endif</div>
<div> }</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>--- a/cpu/mpc85xx/cpu.c 2008-05-15 01:42:46.000000000 &#43;0300</div>
<div>&#43;&#43;&#43; b/cpu/mpc85xx/cpu.c 2008-05-18 11:22:34.528046000 &#43;0300</div>
<div>@@ -29,6 &#43;29,7 @@</div>
<div> #include &lt;watchdog.h&gt;</div>
<div> #include &lt;command.h&gt;</div>
<div> #include &lt;asm/cache.h&gt;</div>
<div>&#43;#include &quot;asm/immap_85xx.h&quot;</div>
<div>&nbsp;</div>
<div> DECLARE_GLOBAL_DATA_PTR;</div>
<div>&nbsp;</div>
<div>@@ -274,3 &#43;275,68 @@ int dma_xfer(void *dest, uint count, voi</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return dma_check();</div>
<div> }</div>
<div> #endif</div>
<div>&#43;</div>
<div>&#43;/*</div>
<div>&#43; * Program a UPM with the code supplied in the table.</div>
<div>&#43; *</div>
<div>&#43; * The 'dummy' variable is used to increment the MAD. 'dummy' is</div>
<div>&#43; * supposed to be a pointer to the memory of the device being</div>
<div>&#43; * programmed by the UPM.&nbsp; The data in the MDR is written into</div>
<div>&#43; * memory and the MAD is incremented every time there's a read</div>
<div>&#43; * from 'dummy'. Unfortunately, the current prototype for this</div>
<div>&#43; * function doesn't allow for passing the address of this</div>
<div>&#43; * device, and changing the prototype will break a number lots</div>
<div>&#43; * of other code, so we need to use a round-about way of finding</div>
<div>&#43; * the value for 'dummy'.</div>
<div>&#43; *</div>
<div>&#43; * The value can be extracted from the base address bits of the</div>
<div>&#43; * Base Register (BR) associated with the specific UPM.&nbsp; To find</div>
<div>&#43; * that BR, we need to scan all BRs until we find the one that</div>
<div>&#43; * has its MSEL bits matching the UPM we want.&nbsp; Once we know the</div>
<div>&#43; * right BR, we can extract the base address bits from it.</div>
<div>&#43; *</div>
<div>&#43; * The MxMR and the BR and OR of the chosen bank should all be</div>
<div>&#43; * configured before calling this function.</div>
<div>&#43; *</div>
<div>&#43; * Parameters:</div>
<div>&#43; * upm: 0=UPMA, 1=UPMB, 2=UPMC</div>
<div>&#43; * table: Pointer to an array of values to program</div>
<div>&#43; * size: Number of elements in the array.&nbsp; Must be 64 or less.</div>
<div>&#43; */</div>
<div>&#43;void upmconfig (uint upm, uint *table, uint size)</div>
<div>&#43;{</div>
<div>&#43;&nbsp;&nbsp;&nbsp; volatile ccsr_lbc_t *lbc = (void *)(CFG_MPC85xx_LBC_ADDR);</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; volatile uchar *dummy = NULL;</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const u32 msel = (upm &#43; 4) &lt;&lt; BRx_MS_SHIFT; /* What the MSEL field in BRn should be */</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; volatile uint *mxmr = &amp;lbc-&gt;mamr &#43; upm; /* Pointer to mamr, mbmr, or mcmr */</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; volatile uint *brx = &amp;lbc-&gt;br0; /* Pointer to BRx */</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint i;</div>
<div>&#43;</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Scan all the banks to determine the base address of the device */</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; 8; i&#43;&#43;) {</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((*brx &amp; BRx_MS_MSK) == msel) {</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dummy = (uchar *) (*brx &amp; BRx_BA_MSK);</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; brx &#43;= 2; /* Skip to next BRx */</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div>&#43;</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!dummy) {</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Error: %s() could not find matching BR\n&quot;, __FUNCTION__);</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hang();</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div>&#43;</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Set the OP field in the MxMR to &quot;write&quot; and the MAD field to 000000 */</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *mxmr = (*mxmr &amp; 0xCFFFFFC0) | MxMR_OP_WARR;</div>
<div>&#43;</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; size; i&#43;&#43;) {</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lbc-&gt;mdr = table[i];</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __asm__ __volatile__ (&quot;sync&quot;);</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *dummy; /* Write the value to memory and increment MAD */</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __asm__ __volatile__ (&quot;sync&quot;);</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div>&#43;</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Set the OP field in the MxMR to &quot;normal&quot; and the MAD field to 000000 */</div>
<div>&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *mxmr &amp;= 0xCFFFFFC0;</div>
<div>&#43;}</div>
<div>&#43;</div>
<div>--- a/include/mpc85xx.h 2008-05-15 01:42:46.000000000 &#43;0300</div>
<div>&#43;&#43;&#43; b/include/mpc85xx.h 2008-05-18 11:22:34.519035000 &#43;0300</div>
<div>@@ -35,7 &#43;35,10 @@</div>
<div> #define BRx_MS_UPMA&nbsp;&nbsp;&nbsp; 0x00000080&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* U.P.M.A Machine Select&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div> #define BRx_MS_UPMB&nbsp;&nbsp;&nbsp; 0x000000a0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* U.P.M.B Machine Select&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div> #define BRx_MS_UPMC&nbsp;&nbsp;&nbsp; 0x000000c0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* U.P.M.C Machine Select&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div>&#43;#define BRx_MS_MSK&nbsp;&nbsp;&nbsp;&nbsp; 0x000000e0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Machine select mask */</div>
<div>&#43;#define BRx_MS_SHIFT&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Machine select shift */</div>
<div> #define BRx_PS_8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x00000800&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp; 8 bit port size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div>&#43;#define BRx_PS_16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x00001000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 16 bit port size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div> #define BRx_PS_32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x00001800&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 32 bit port size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div> #define BRx_BA_MSK&nbsp;&nbsp;&nbsp;&nbsp; 0xffff8000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Base Address Mask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div>&nbsp;</div>
<div>@@ -53,8 &#43;56,10 @@</div>
<div> #define ORxU_AM_MSK&nbsp;&nbsp;&nbsp; 0xffff8000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Address Mask Mask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div>&nbsp;</div>
<div> #define MxMR_OP_NORM&nbsp;&nbsp; 0x00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Normal Operation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div>-#define MxMR_DSx_2_CYCL 0x00400000&nbsp;&nbsp;&nbsp;&nbsp; /* 2 cycle Disable Period&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div> #define MxMR_OP_WARR&nbsp;&nbsp; 0x10000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Write to Array&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div>&#43;#define MxMR_DSx_2_CYCL 0x00400000&nbsp;&nbsp;&nbsp;&nbsp; /* 2 cycle Disable Period&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div>&#43;#define MxMR_DSx_3_CYCL 0x00800000&nbsp;&nbsp;&nbsp;&nbsp; /* 3 cycle Disable Period&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div>&#43;#define MxMR_GPL4_LPWT&nbsp; 0x00040000&nbsp;&nbsp;&nbsp;&nbsp; /* LGPL4 Line in LUPWAIT mode&nbsp;&nbsp; */</div>
<div> #define MxMR_BSEL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x80000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Bus Select&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</div>
<div>&nbsp;</div>
<div> /* helpers to convert values into an OR address mask (GPCM mode) */</div>
<div><font face="Times New Roman, serif" size="3">&nbsp;</font></div>
</font>
</body>
</html>