ppc4xx: Sequoia: Fix TLB reassignment in NAND booting code
[oweals/u-boot.git] / board / amcc / sequoia / cmd_sequoia.c
index f3803c09f899c85f34458c9421034ee9f3fcae31..6dfd8ba381fc7552064380d69cb689e2a01ae01c 100644 (file)
@@ -25,6 +25,7 @@
 #include <common.h>
 #include <command.h>
 #include <i2c.h>
+#include <asm/io.h>
 
 /*
  * There are 2 versions of production Sequoia & Rainier platforms.
  * All Sequoias & Rainiers select from two possible EEPROMs in Boot
  * Config F. One for 33MHz PCI, one for 66MHz PCI. The following
  * values are for the 33MHz PCI configuration. Byte 5 (0 base) is
- * the only  value affected for a 66MHz PCI and simply needs a +0x10.
+ * the only value affected for a 33MHz PCI and simply needs a | 0x08.
  */
 
 #define NAND_COMPATIBLE        0x01
 #define NOR_COMPATIBLE  0x02
 
-/* check with Stefan on CFG_I2C_EEPROM_ADDR */
+/* check with Stefan on CONFIG_SYS_I2C_EEPROM_ADDR */
 #define I2C_EEPROM_ADDR 0x52
 
 static char *config_labels[] = {
@@ -56,6 +57,7 @@ static char *config_labels[] = {
        "CPU: 416 PLB: 166 OPB: 83 EBC: 55",
        "CPU: 500 PLB: 166 OPB: 83 EBC: 55",
        "CPU: 533 PLB: 133 OPB: 66 EBC: 66",
+       "CPU: 667 PLB: 133 OPB: 66 EBC: 66",
        "CPU: 667 PLB: 166 OPB: 83 EBC: 55",
        NULL
 };
@@ -96,6 +98,11 @@ static u8 boot_configs[][17] = {
                0x87, 0x78, 0x82, 0x52, 0x09, 0x57, 0xa0, 0x30, 0x40,
                0x08, 0x23, 0x50, 0x0d, 0x05, 0x00, 0x00
        },
+       {
+               (NOR_COMPATIBLE),
+               0x87, 0x78, 0xa2, 0x56, 0x09, 0x57, 0xa0, 0x30, 0x40,
+               0x08, 0x23, 0x50, 0x0d, 0x05, 0x00, 0x00
+       },
        {
                (NAND_COMPATIBLE | NOR_COMPATIBLE),
                0x87, 0x78, 0xa2, 0x52, 0x09, 0xd7, 0xa0, 0x30, 0x40,
@@ -121,7 +128,7 @@ static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        extern char console_buffer[];
 
        if (argc < 2) {
-               printf("Usage:\n%s\n", cmdtp->usage);
+               cmd_usage(cmdtp);
                return 1;
        }
 
@@ -200,12 +207,16 @@ static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
 
        /* check CPLD register +5 for PCI 66MHz flag */
-       if (in8(CFG_BCSR_BASE + 5) & 0x01)
-               buf[5] += 0x10;
+       if ((in_8((void *)(CONFIG_SYS_BCSR_BASE + 5)) & CONFIG_SYS_BCSR5_PCI66EN) == 0)
+               /*
+                * PLB-to-PCI divisor = 3 for 33MHz sync PCI
+                * instead of 2 for 66MHz systems
+                */
+               buf[5] |= 0x08;
 
        if (i2c_write(I2C_EEPROM_ADDR, 0, 1, buf, 16) != 0)
                printf("Error writing to EEPROM at address 0x%x\n", I2C_EEPROM_ADDR);
-       udelay(CFG_EEPROM_PAGE_WRITE_DELAY_MS * 1000);
+       udelay(CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS * 1000);
 
        printf("Done\n");
        printf("Please power-cycle the board for the changes to take effect\n");
@@ -215,6 +226,6 @@ static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 U_BOOT_CMD(
        bootstrap,      2,      0,      do_bootstrap,
-       "bootstrap - program the I2C bootstrap EEPROM\n",
+       "program the I2C bootstrap EEPROM",
        "<nand|nor> - strap to boot from NAND or NOR flash\n"
        );