On Tue, 20 May 2008 10:32:24 +0300
David Saada <[EMAIL PROTECTED]> wrote:

> 
> > Can we merge the register definition files and have a single upm_config
> > for mpc8[356]xx instead of duplicating it as being done here?
> 
> Not sure that I'm the right person for this job, as I don't have an 86xx 
> based board.

86xx can be tested by others; point here is to avoid code duplication.

> Also, I'm not sure this would be a good idea: There are some
> differences between the registers in these 3 families, and the header
> file would look pretty ugly (many ifdefs). Even the UPM code won't be

the registers have a common base, and all the registers this patch uses
are the same on all of them.  I don't see why they can't be unified
into a common include/asm-ppc/immap_8xxx.h file.

> the same: for instance, the mpc85xx code scans the BR registers (which
> are adjacent) to determine the UPM machine, while in the 83xx we need
> to scan the lbus banks (and extract the BRs from there). This means
> that we will also have many ifdefs there as well.

afaict, the code this patch introduces for 85xx is functionally
identical to that of 83xx:

  * Program a UPM with the code supplied in the table.
  *
  * The 'dummy' variable is used to increment the MAD. 'dummy' is
@@ -133,7 +13,7 @@
  *
  * 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 8 BRs until we find the one that
+ * 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.
  *
@@ -147,20 +27,20 @@
  */
 void upmconfig (uint upm, uint *table, uint size)
 {
-       volatile immap_t *immap = (immap_t *) CFG_IMMR;
-       volatile lbus83xx_t *lbus = &immap->lbus;
+    volatile ccsr_lbc_t *lbc = (void *)(CFG_MPC85xx_LBC_ADDR);
        volatile uchar *dummy = NULL;
-       const u32 msel = (upm + 4) << BR_MSEL_SHIFT;    /* What
the MSEL field in BRn should be */
-       volatile u32 *mxmr = &lbus->mamr + upm; /* Pointer to
mamr, mbmr, or mcmr */
+       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 ((lbus->bank[i].br & BR_MSEL) == msel) {
-                       dummy = (uchar *) (lbus->bank[i].br & BR_BA);
+               if ((*brx & BRx_MS_MSK) == msel) {
+                       dummy = (uchar *) (*brx & BRx_BA_MSK);
                        break;
                }
+               brx += 2; /* Skip to next BRx */
        }
 
        if (!dummy) {
@@ -169,10 +49,10 @@
        }
 
        /* Set the OP field in the MxMR to "write" and the MAD field
to 000000 */
-       *mxmr = (*mxmr & 0xCFFFFFC0) | 0x10000000;
+       *mxmr = (*mxmr & 0xCFFFFFC0) | MxMR_OP_WARR;
 
        for (i = 0; i < size; i++) {
-               lbus->mdr = table[i];
+               lbc->mdr = table[i];
                __asm__ __volatile__ ("sync");
                *dummy; /* Write the value to memory and
increment MAD */ __asm__ __volatile__ ("sync");

btw, I don't see arch/powerpc/sysdev/fsl_lbc.c functionally differing
among the families either.

am I missing something?

> David.

Kim

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft 
Defy all challenges. Microsoft(R) Visual Studio 2008. 
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
U-Boot-Users mailing list
U-Boot-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users

Reply via email to