]> www.infradead.org Git - users/rw/ppcboot.git/commitdiff
Patch by Greg Allen, 6 Aug 2002:
authorwdenk <wdenk>
Sat, 10 Aug 2002 13:42:05 +0000 (13:42 +0000)
committerwdenk <wdenk>
Sat, 10 Aug 2002 13:42:05 +0000 (13:42 +0000)
Make the mpc824x correctly report the cpurevision according to
Motorola's docs.

CHANGELOG
README
cpu/mpc824x/cpu.c
include/mpc824x.h

index dc2ed2c8897d23a3c1f6ea4da4fe8abf185f0214..9720c02ad4d6f37162f6fac4dd1119df61f97a7e 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,10 @@
 Modifications for 1.2.0:
 ======================================================================
 
+* Patch by Greg Allen, 6 Aug 2002:
+  Make the mpc824x correctly report the cpurevision according to
+  Motorola's docs.
+
 * Patch by Wolfgang Grandegger, 07 Aug 2002:
   - Support for PN62 boards added.
   - Boards without FLASH are now supported (CFG_NO_FLASH and
diff --git a/README b/README
index 3219d24fa0d0895ee9f01de8792bd3193fd8d67e..cf9474807f64b626a9e777b9c30960004bfc85bc 100644 (file)
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
 #
-# (C) Copyright 2000
+# (C) Copyright 2000 - 2002
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # See file CREDITS for list of people who contributed to this
@@ -72,12 +72,13 @@ Where we come from:
 - start from 8xxrom sources
 - clean up code
 - make it easier to add custom boards
-- eventually make it possible to add other [PowerPC] CPUs
+- make it possible to add other [PowerPC] CPUs
 - extend functions, especially:
   * Provide extended interface to Linux boot loader
   * S-Record download
   * network boot
-  * PCMCIA / CompactFLash / ATA disk boot
+  * PCMCIA / CompactFLash / ATA disk / SCSI ... boot
+- add other CPU families (starting with ARM)
 
 
 Directory Hierarchy:
index 3dce6b07595d8ba8736c897a58b3958a4cde6fcd..3d2dc293d8d1b92b80fa49e95343d7470d99fe4e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2000
+ * (C) Copyright 2000 - 2002
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
 #include <ppcboot.h>
 #include <command.h>
 
-int checkcpu(long clock)
+int checkcpu (long clock)
 {
-  unsigned int pvr = get_pvr();
-  unsigned int version = pvr >>16;
-  unsigned int revision = pvr &0xffff;
-  char buf[32];
+       unsigned int pvr = get_pvr ();
+       unsigned int version = pvr >> 16;
+       unsigned char revision;
+       char buf[32];
 
-  switch(version)
-  {
-    case CPU_TYPE_8240:
-      printf("MPC8240");
-      break;
+       switch (version) {
+       case CPU_TYPE_8240:
+               printf ("MPC8240");
+               break;
 
-    case CPU_TYPE_8245:
-      printf("MPC8245");
-      break;
+       case CPU_TYPE_8245:
+               printf ("MPC8245");
+               break;
 
-    default:
-      return -1; /*not valid for this source*/
-  }
+       default:
+               return -1;              /*not valid for this source */
+       }
 
-  switch(revision)
-  {
-    default: /*currently no info on revision numbers*/
-      printf(" Revision %d.%d",revision>>8, revision & 0xff);
-  }
+       CONFIG_READ_BYTE (REVID, revision);
 
-  printf(" at %s MHz:", strmhz(buf, clock));
+       if (revision) {
+               printf (" Revision %d.%d",
+                       (revision & 0xf0) >> 4,
+                       (revision & 0x0f));
+       } else {
+               return -1;              /* no valid CPU revision info */
+       }
 
-  printf(" %u kB I-Cache", checkicache() >> 10);
-  printf(" %u kB D-Cache", checkdcache() >> 10);
+       printf (" at %s MHz:", strmhz (buf, clock));
 
-  printf("\n");
+       printf (" %u kB I-Cache", checkicache () >> 10);
+       printf (" %u kB D-Cache", checkdcache () >> 10);
 
-  return 0;
+       printf ("\n");
+
+       return 0;
 }
 
 /* ------------------------------------------------------------------------- */
 /* L1 i-cache                                                                */
 
-int checkicache(void)
+int checkicache (void)
 {
-    /*TODO*/
-  return 128*4*32;
+        /*TODO*/
+        return 128 * 4 * 32;
 };
+
 /* ------------------------------------------------------------------------- */
 /* L1 d-cache                                                                */
 
-int checkdcache(void)
+int checkdcache (void)
 {
-    /*TODO*/
-  return 128*4*32;
+        /*TODO*/
+        return 128 * 4 * 32;
 
 };
 
 /*------------------------------------------------------------------- */
 
-int do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
+int do_reset (cmd_tbl_t * cmdtp, bd_t * bd, int flag, int argc,
+                         char *argv[])
 {
        ulong msr, addr;
 
        /* Interrupts and MMU off */
-       __asm__ ("mtspr    81, 0" );
+       __asm__ ("mtspr    81, 0");
 
        /* Interrupts and MMU off */
-       __asm__ __volatile__ ("mfmsr    %0" : "=r"(msr) : );
+       __asm__ __volatile__ ("mfmsr    %0":"=r" (msr):);
+
        msr &= ~0x1030;
-       __asm__ __volatile__ ("mtmsr    %0" : : "r"(msr) );
+       __asm__ __volatile__ ("mtmsr    %0"::"r" (msr));
 
        /*
         * Trying to execute the next instruction at a non-existing address
@@ -103,14 +109,15 @@ int do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
        addr = CFG_RESET_ADDRESS;
 #else
        /*
-        * note: when CFG_MONITOR_BASE points to a RAM address, CFG_MONITOR_BASE
-        * - sizeof (ulong) is usually a valid address. Better pick an address
-        * known to be invalid on your system and assign it to CFG_RESET_ADDRESS.
-        * "(ulong)-1" used to be a good choice for many systems...
+         * note: when CFG_MONITOR_BASE points to a RAM address,
+         * CFG_MONITOR_BASE - sizeof (ulong) is usually a valid
+         * address. Better pick an address known to be invalid on
+         * your system and assign it to CFG_RESET_ADDRESS.
+         * "(ulong)-1" used to be a good choice for many systems...
         */
        addr = CFG_MONITOR_BASE - sizeof (ulong);
 #endif
-       ((void (*)(void ))addr)();
+       ((void (*)(void)) addr) ();
        return 1;
 
 }
@@ -123,7 +130,7 @@ int do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
  */
 unsigned long get_tbclk (void)
 {
-       return ((get_bus_freq(0) + 2L) / 4L);
+       return ((get_bus_freq (0) + 2L) / 4L);
 }
 
 /* ------------------------------------------------------------------------- */
@@ -140,14 +147,14 @@ unsigned long get_tbclk (void)
  *  writing it to config address, and swaps the value to big endian
  *  before returning to the caller.
  */
-unsigned int
-mpc824x_mpc107_getreg(unsigned int regNum)
+unsigned int mpc824x_mpc107_getreg (unsigned int regNum)
 {
-  unsigned int temp;
-  /* swap the addr. to little endian */
-  *(volatile unsigned int *)CHRP_REG_ADDR = PCISWAP(regNum);
-  temp = *(volatile unsigned int *)CHRP_REG_DATA;
-  return PCISWAP(temp);                      /* swap the data upon return */
+       unsigned int temp;
+
+       /* swap the addr. to little endian */
+       *(volatile unsigned int *) CHRP_REG_ADDR = PCISWAP (regNum);
+       temp = *(volatile unsigned int *) CHRP_REG_DATA;
+       return PCISWAP (temp);          /* swap the data upon return */
 }
 
 /*
@@ -155,35 +162,33 @@ mpc824x_mpc107_getreg(unsigned int regNum)
  *  the address to little endian before writing it to config address.
  */
 
-void
-mpc824x_mpc107_setreg(unsigned int regNum, unsigned int regVal)
+void mpc824x_mpc107_setreg (unsigned int regNum, unsigned int regVal)
 {
-    /* swap the addr. to little endian */
-    *(volatile unsigned int *)CHRP_REG_ADDR = PCISWAP(regNum);
-    *(volatile unsigned int *)CHRP_REG_DATA = PCISWAP(regVal);
-    return;
+       /* swap the addr. to little endian */
+       *(volatile unsigned int *) CHRP_REG_ADDR = PCISWAP (regNum);
+       *(volatile unsigned int *) CHRP_REG_DATA = PCISWAP (regVal);
+       return;
 }
 
 
 /*
  *  Write a byte (8 bits) to a memory location.
  */
-void
-mpc824x_mpc107_write8(unsigned int addr, unsigned char data)
+void mpc824x_mpc107_write8 (unsigned int addr, unsigned char data)
 {
-  *(unsigned char*)addr = data;
-  __asm__("sync");
+       *(unsigned char *) addr = data;
+       __asm__ ("sync");
 }
+
 /*
  *  Write a word (16 bits) to a memory location after the value
  *  has been byte swapped (big to little endian or vice versa)
  */
 
-void
-mpc824x_mpc107_write16(unsigned int address, unsigned short data)
+void mpc824x_mpc107_write16 (unsigned int address, unsigned short data)
 {
-  *(volatile unsigned short *)address = BYTE_SWAP_16_BIT(data);
-  __asm__("sync");
+       *(volatile unsigned short *) address = BYTE_SWAP_16_BIT (data);
+       __asm__ ("sync");
 }
 
 /*
@@ -191,20 +196,18 @@ mpc824x_mpc107_write16(unsigned int address, unsigned short data)
  *  has been byte swapped (big to little endian or vice versa)
  */
 
-void
-mpc824x_mpc107_write32(unsigned int address, unsigned int data)
+void mpc824x_mpc107_write32 (unsigned int address, unsigned int data)
 {
-  *(volatile unsigned int *)address = LONGSWAP(data);
-  __asm__("sync");
+       *(volatile unsigned int *) address = LONGSWAP (data);
+       __asm__ ("sync");
 }
 
 /*
  *  Read a byte (8 bits) from a memory location.
  */
-unsigned char
-mpc824x_mpc107_read8(unsigned int addr)
+unsigned char mpc824x_mpc107_read8 (unsigned int addr)
 {
-  return *(volatile unsigned char*)addr;
+       return *(volatile unsigned char *) addr;
 }
 
 
@@ -212,12 +215,12 @@ mpc824x_mpc107_read8(unsigned int addr)
  *  Read a word (16 bits) from a memory location, and byte swap the
  *  value before returning to the caller.
  */
-unsigned short
-mpc824x_mpc107_read16(unsigned int address)
+unsigned short mpc824x_mpc107_read16 (unsigned int address)
 {
-  unsigned short retVal;
-  retVal = BYTE_SWAP_16_BIT(*(unsigned short*)address);
-  return retVal;
+       unsigned short retVal;
+
+       retVal = BYTE_SWAP_16_BIT (*(unsigned short *) address);
+       return retVal;
 }
 
 
@@ -225,12 +228,12 @@ mpc824x_mpc107_read16(unsigned int address)
  *  Read a long word (32 bits) from a memory location, and byte
  *  swap the value before returning to the caller.
  */
-unsigned int
-mpc824x_mpc107_read32(unsigned int address)
+unsigned int mpc824x_mpc107_read32 (unsigned int address)
 {
-    unsigned int retVal;
-    retVal = LONGSWAP(*(unsigned int *)address);
-    return (retVal);
+       unsigned int retVal;
+
+       retVal = LONGSWAP (*(unsigned int *) address);
+       return (retVal);
 }
 
 
@@ -244,13 +247,13 @@ mpc824x_mpc107_read32(unsigned int address)
  *  Output:  The 32 bit little endian value of the register.
  */
 
-unsigned int
-mpc824x_eummbar_read(unsigned int regNum)
+unsigned int mpc824x_eummbar_read (unsigned int regNum)
 {
-    unsigned int temp;
-    temp = *(volatile unsigned int *) (EUMBBAR_VAL + regNum) ;
-    temp = PCISWAP(temp);
-    return temp;
+       unsigned int temp;
+
+       temp = *(volatile unsigned int *) (EUMBBAR_VAL + regNum);
+       temp = PCISWAP (temp);
+       return temp;
 }
 
 
@@ -264,11 +267,10 @@ mpc824x_eummbar_read(unsigned int regNum)
  *         regVal - value to be written to the register.
  */
 
-void
-mpc824x_eummbar_write(unsigned int regNum, unsigned int regVal)
+void mpc824x_eummbar_write (unsigned int regNum, unsigned int regVal)
 {
-    *(volatile unsigned int *) (EUMBBAR_VAL + regNum) = PCISWAP(regVal);
-    return;
+       *(volatile unsigned int *) (EUMBBAR_VAL + regNum) = PCISWAP (regVal);
+       return;
 }
 
 /* ------------------------------------------------------------------------- */
index 712420586c924e1483a7d0608d6e74fb19e942cc..09ccfec2d85b40dfb1c63cc6460d19ba3d4599b2 100644 (file)
 
 #define PCICR          0x80000004  /* PCI Command Register */
 #define PCISR          0x80000006  /* PCI Status Register */
+#define REVID          0x80000008  /* CPU revision id */
 #define PIR            0x80000009  /* PCI Programming Interface Register */
 #define PBCCR          0x8000000b  /* PCI Base Class Code Register */
 #define PCLSR          0x8000000c  /* Processor Cache Line Size Register */