ppc4xx: Fix "bootstrap" command for Katmai board

The board specific "bootstrap" command is now fixed and can
be used for the AMCC Katmai board to configure different
CPU/PLB/OPB frequencies.

Signed-off-by: Stefan Roese <sr@denx.de>
This commit is contained in:
Stefan Roese 2007-03-31 08:47:34 +02:00
parent 94f54703c3
commit 490e5730c6

View File

@ -27,6 +27,8 @@
#include <i2c.h> #include <i2c.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
#define CONFIG_STRESS /* enable 667 MHz CPU freq selection */
static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{ {
uchar chip; uchar chip;
@ -49,55 +51,28 @@ static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
else else
chip = IIC0_ALT_BOOTPROM_ADDR; chip = IIC0_ALT_BOOTPROM_ADDR;
do { /* on Katmai SysClk is always 33MHz */
printf("enter sys clock frequency 33 or 66 Mhz or quit to abort\n"); strcpy(sysClock, "33");
nbytes = readline (" ? ");
if (strcmp(console_buffer, "quit") == 0)
return 0;
if ((strcmp(console_buffer, "33") != 0) &
(strcmp(console_buffer, "66") != 0))
nbytes=0;
strcpy(sysClock, console_buffer);
} while (nbytes == 0);
do { do {
if (strcmp(sysClock, "66") == 0) {
printf("enter cpu clock frequency 400, 533 Mhz or quit to abort\n");
} else {
#ifdef CONFIG_STRESS #ifdef CONFIG_STRESS
printf("enter cpu clock frequency 400, 500, 533, 667 Mhz or quit to abort\n"); printf("enter cpu clock frequency 400, 500, 533, 667 Mhz or quit to abort\n");
#else #else
printf("enter cpu clock frequency 400, 500, 533 Mhz or quit to abort\n"); printf("enter cpu clock frequency 400, 500, 533 Mhz or quit to abort\n");
#endif #endif
}
nbytes = readline (" ? "); nbytes = readline (" ? ");
if (strcmp(console_buffer, "quit") == 0) if (strcmp(console_buffer, "quit") == 0)
return 0; return 0;
if (strcmp(sysClock, "66") == 0) { if ((strcmp(console_buffer, "400") != 0) &&
if ((strcmp(console_buffer, "400") != 0) & (strcmp(console_buffer, "500") != 0) &&
(strcmp(console_buffer, "533") != 0) (strcmp(console_buffer, "533") != 0)
#ifdef CONFIG_STRESS #ifdef CONFIG_STRESS
& (strcmp(console_buffer, "667") != 0) && (strcmp(console_buffer, "667") != 0)
#endif #endif
) { ) {
nbytes = 0; nbytes = 0;
}
} else {
if ((strcmp(console_buffer, "400") != 0) &
(strcmp(console_buffer, "500") != 0) &
(strcmp(console_buffer, "533") != 0)
#ifdef CONFIG_STRESS
& (strcmp(console_buffer, "667") != 0)
#endif
) {
nbytes = 0;
}
} }
strcpy(cpuClock, console_buffer); strcpy(cpuClock, console_buffer);
@ -124,13 +99,13 @@ static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 0; return 0;
if (strcmp(cpuClock, "400") == 0) { if (strcmp(cpuClock, "400") == 0) {
if ((strcmp(console_buffer, "100") != 0) & if ((strcmp(console_buffer, "100") != 0) &&
(strcmp(console_buffer, "133") != 0)) (strcmp(console_buffer, "133") != 0))
nbytes = 0; nbytes = 0;
} }
#ifdef CONFIG_STRESS #ifdef CONFIG_STRESS
if (strcmp(cpuClock, "667") == 0) { if (strcmp(cpuClock, "667") == 0) {
if ((strcmp(console_buffer, "133") != 0) & if ((strcmp(console_buffer, "133") != 0) &&
(strcmp(console_buffer, "166") != 0)) (strcmp(console_buffer, "166") != 0))
nbytes = 0; nbytes = 0;
} }
@ -147,9 +122,9 @@ static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
if (strcmp(console_buffer, "quit") == 0) if (strcmp(console_buffer, "quit") == 0)
return 0; return 0;
if ((strcmp(console_buffer, "33") != 0) & if ((strcmp(console_buffer, "33") != 0) &&
(strcmp(console_buffer, "66") != 0) & (strcmp(console_buffer, "66") != 0) &&
(strcmp(console_buffer, "100") != 0) & (strcmp(console_buffer, "100") != 0) &&
(strcmp(console_buffer, "133") != 0)) { (strcmp(console_buffer, "133") != 0)) {
nbytes = 0; nbytes = 0;
} }
@ -176,11 +151,11 @@ static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
} while (nbytes == 0); } while (nbytes == 0);
if (strcmp(sysClock, "33") == 0) { if (strcmp(sysClock, "33") == 0) {
if ((strcmp(cpuClock, "400") == 0) & if ((strcmp(cpuClock, "400") == 0) &&
(strcmp(plbClock, "100") == 0)) (strcmp(plbClock, "100") == 0))
data = 0x8678c206; data = 0x8678c206;
if ((strcmp(cpuClock, "400") == 0) & if ((strcmp(cpuClock, "400") == 0) &&
(strcmp(plbClock, "133") == 0)) (strcmp(plbClock, "133") == 0))
data = 0x8678c2c6; data = 0x8678c2c6;
@ -189,42 +164,16 @@ static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
if ((strcmp(cpuClock, "533") == 0)) if ((strcmp(cpuClock, "533") == 0))
data = 0x87790252; data = 0x87790252;
#ifdef CONFIG_STRESS #ifdef CONFIG_STRESS
if ((strcmp(cpuClock, "667") == 0) & if ((strcmp(cpuClock, "667") == 0) &&
(strcmp(plbClock, "133") == 0)) (strcmp(plbClock, "133") == 0))
data = 0x87794256; data = 0x87794256;
if ((strcmp(cpuClock, "667") == 0) & if ((strcmp(cpuClock, "667") == 0) &&
(strcmp(plbClock, "166") == 0)) (strcmp(plbClock, "166") == 0))
data = 0x87794206; data = 0x87794206;
#endif #endif
} }
if (strcmp(sysClock, "66") == 0) {
if ((strcmp(cpuClock, "400") == 0) &
(strcmp(plbClock, "100") == 0))
data = 0x84706206;
if ((strcmp(cpuClock, "400") == 0) &
(strcmp(plbClock, "133") == 0))
data = 0x847062c6;
if ((strcmp(cpuClock, "533") == 0))
data = 0x85708206;
#ifdef CONFIG_STRESS
if ((strcmp(cpuClock, "667") == 0) &
(strcmp(plbClock, "133") == 0))
data = 0x8570a256;
if ((strcmp(cpuClock, "667") == 0) &
(strcmp(plbClock, "166") == 0))
data = 0x8570a206;
#endif
}
#ifdef DEBUG #ifdef DEBUG
printf(" pin strap0 to write in i2c = %x\n", data); printf(" pin strap0 to write in i2c = %x\n", data);
#endif /* DEBUG */ #endif /* DEBUG */
@ -233,16 +182,16 @@ static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
printf("Error writing strap0 in %s\n", argv[2]); printf("Error writing strap0 in %s\n", argv[2]);
if (strcmp(pcixClock, "33") == 0) if (strcmp(pcixClock, "33") == 0)
data = 0x00000701; data = 0x000007E1;
if (strcmp(pcixClock, "66") == 0) if (strcmp(pcixClock, "66") == 0)
data = 0x00000601; data = 0x000006E1;
if (strcmp(pcixClock, "100") == 0) if (strcmp(pcixClock, "100") == 0)
data = 0x00000501; data = 0x000005E1;
if (strcmp(pcixClock, "133") == 0) if (strcmp(pcixClock, "133") == 0)
data = 0x00000401; data = 0x000004E1;
if (strcmp(plbClock, "166") == 0) if (strcmp(plbClock, "166") == 0)
data |= 0x05950000; data |= 0x05950000;