From: wdenk Date: Sat, 10 Aug 2002 13:42:05 +0000 (+0000) Subject: Patch by Greg Allen, 6 Aug 2002: X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ce0007c00e85e85294587fae0c7fa4d4e77a9e31;p=users%2Frw%2Fppcboot.git Patch by Greg Allen, 6 Aug 2002: Make the mpc824x correctly report the cpurevision according to Motorola's docs. --- diff --git a/CHANGELOG b/CHANGELOG index dc2ed2c..9720c02 100644 --- 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 3219d24..cf94748 100644 --- 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: diff --git a/cpu/mpc824x/cpu.c b/cpu/mpc824x/cpu.c index 3dce6b0..3d2dc29 100644 --- a/cpu/mpc824x/cpu.c +++ b/cpu/mpc824x/cpu.c @@ -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 @@ -26,74 +26,80 @@ #include #include -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; } /* ------------------------------------------------------------------------- */ diff --git a/include/mpc824x.h b/include/mpc824x.h index 7124205..09ccfec 100644 --- a/include/mpc824x.h +++ b/include/mpc824x.h @@ -248,6 +248,7 @@ #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 */