]> www.infradead.org Git - users/rw/ppcboot.git/commitdiff
* Some cleanup.
authorwdenk <wdenk>
Wed, 15 May 2002 22:03:13 +0000 (22:03 +0000)
committerwdenk <wdenk>
Wed, 15 May 2002 22:03:13 +0000 (22:03 +0000)
* Patch by Stefan Roese, 15 May 2002:

  - Support for esd CPCI-405 Version 2 added.
  - esd FPGA booting reworked, Xilinx Spartan 2 support added.
  - I2C settings changed for esd boards (new version supported).
  - 405gp_pci: changed vga board handling.

* Patch by Nye Liu, 14 May 2002
  - fix some problems on ZUMA boards like
    non-standard mii reg (Intel LXT972A)
  - only allow stack below 256M (for configurations over 256M - ugly)
  - 74xx_7xx: unlock cache just before booting linux

41 files changed:
CHANGELOG
MAKEALL
Makefile
board/esd/ar405/ar405.c
board/esd/canbt/canbt.c
board/esd/common/fpga.c
board/esd/cpci405/cpci405.c
board/esd/cpci405/cpci405.h [deleted file]
board/esd/cpci405/fpgadata_cpci405.c [moved from board/esd/cpci405/fpgadata.c with 100% similarity]
board/esd/cpci405/fpgadata_cpci4052.c [new file with mode: 0644]
board/esd/cpciiser4/cpciiser4.c
board/esd/du405/du405.c
board/evb64260/eth.c
board/evb64260/eth_addrtbl.c
board/evb64260/evb64260.c
board/evb64260/flash.c
board/evb64260/misc.S
board/evb64260/mpsc.c
board/evb64260/pci.c
board/evb64260/sdram_init.c
board/evb64260/serial.c
board/oxc/oxc.c
board/pcippc2/pcippc2.c
common/board.c
common/cmd_bootm.c
cpu/74xx_7xx/start.S
cpu/ppc4xx/405gp_pci.c
drivers/pci.c
examples/eepro100_eeprom.c
include/asm/cache.h
include/cmd_bsp.h
include/config_CPCI405.h
include/config_CPCI4052.h [new file with mode: 0644]
include/config_CPCIISER4.h
include/config_DU405.h
include/config_OCRTC.h
include/config_ORSG.h
include/config_OXC.h
include/config_ZUMA.h
include/galileo/core.h
include/ppcboot.h

index 3f0671dd467c45b61d3220f2e5174e96c7c6520b..9d1f1c9d5b4a0d7ff203953dba06282ad1c29a36 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
 Modifications for 1.1.6:
 ======================================================================
 
+* Patch by Stefan Roese, 15 May 2002:
+
+  - Support for esd CPCI-405 Version 2 added.
+  - esd FPGA booting reworked, Xilinx Spartan 2 support added.
+  - I2C settings changed for esd boards (new version supported).
+  - 405gp_pci: changed vga board handling.
+
+* Patch by Nye Liu, 14 May 2002
+  - fix some problems on ZUMA boards like
+    non-standard mii reg (Intel LXT972A)
+  - only allow stack below 256M (for configurations over 256M - ugly)
+  - 74xx_7xx: unlock cache just before booting linux
+
 * Fixed flash problems on OXC board.
 
 * That ugly bug raised it's head again: Fixed mkimage bug that caused
diff --git a/MAKEALL b/MAKEALL
index 61f1a146691abf0ec598607ba99e73a6605791b6..9b6bdfe91c8e9c94382d0f63c969e03c30d95ae2 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -34,9 +34,10 @@ LIST_8xx="   \
 
 LIST_4xx="     \
        ADCIOP          AR405           CANBT           CPCI405         \
-       CPCIISER4       CRAYL1          DASA_SIM        DU405           \
-       ERIC            MIP405          OCRTC           ORSG            \
-       PIP405          W7OLMC          W7OLMG          WALNUT405       \
+       CPCI4052        CPCIISER4       CRAYL1          DASA_SIM        \
+       DU405           ERIC            MIP405          OCRTC           \
+       ORSG            PIP405          W7OLMC          W7OLMG          \
+       WALNUT405       \
 "
 
 #########################################################################
index 1ebd2957210950de3a8d194a38fccd3b4fc906b2..835d5a3e0158342ac76ac929011c57e551ddcff9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -508,8 +508,9 @@ CANBT_config:       unconfig
        echo "VENDOR = esd"     >>config.mk ;   \
        echo "#include <config_$(@:_config=).h>" >config.h
 
-CPCI405_config:        unconfig
-       @echo "Configuring for $(@:_config=) Board..." ; \
+CPCI405_config         \
+CPCI4052_config:       unconfig
+       @echo "Configuring for $(call xtract,$@) Board..." ; \
        cd ./include ;                          \
        echo "ARCH  = ppc"      > config.mk ;   \
        echo "BOARD = cpci405"  >>config.mk ;   \
index 7c27b43f2c2164cbd5582624fc0bf5c243dffb5d..78ceaade3ea1c8ca719814d90444be782f54e7f2 100644 (file)
@@ -49,17 +49,19 @@ const unsigned char fpgadata[] =
 int board_pre_init (void)
 {
   int index, len, i;
+  int status;
 
 #ifdef FPGA_DEBUG
   /* set up serial port with default baudrate */
-  serial_init(0, CONFIG_BAUDRATE);
+  serial_init(get_gclk_freq(), CONFIG_BAUDRATE);
   console_init_f();
 #endif
 
   /*
    * Boot onboard FPGA
    */
-  if (fpga_boot_compressed() != 0)
+  status = fpga_boot((unsigned char *)fpgadata, sizeof(fpgadata));
+  if (status != 0)
     {
       /* booting FPGA failed */
 #ifndef FPGA_DEBUG
@@ -67,7 +69,20 @@ int board_pre_init (void)
       serial_init(0, CONFIG_BAUDRATE);
       console_init_f();
 #endif
-      printf("\nFPGA: Booting failed!\n ");
+      printf("\nFPGA: Booting failed ");
+      switch (status)
+        {
+        case ERROR_FPGA_PRG_INIT_LOW:
+          printf("(Timeout: INIT not low after asserting PROGRAM*)\n ");
+          break;
+        case ERROR_FPGA_PRG_INIT_HIGH:
+          printf("(Timeout: INIT not high after deasserting PROGRAM*)\n ");
+          break;
+        case ERROR_FPGA_PRG_DONE:
+          printf("(Timeout: DONE not high after programming FPGA)\n ");
+          break;
+        }
+
       /* display infos on fpgaimage */
       index = 15;
       for (i=0; i<4; i++)
index 517869c21a4351094aa285d3bf801dfd7da5662f..a4f6f8d99f9a3d58b2e40ccb8cfe1d7952ba660d 100644 (file)
@@ -60,20 +60,20 @@ int board_pre_init (void)
 
 #ifdef FPGA_DEBUG
   /* set up serial port with default baudrate */
-  serial_init(0, CONFIG_BAUDRATE);
+  serial_init(get_gclk_freq(), CONFIG_BAUDRATE);
   console_init_f();
 #endif
 
   /*
    * Boot onboard FPGA
    */
-  status = fpga_boot_compressed();
+  status = fpga_boot((unsigned char *)fpgadata, sizeof(fpgadata));
   if (status != 0)
     {
       /* booting FPGA failed */
 #ifndef FPGA_DEBUG
       /* set up serial port with default baudrate */
-      serial_init(0, CONFIG_BAUDRATE);
+      serial_init(get_gclk_freq(), CONFIG_BAUDRATE);
       console_init_f();
 #endif
       printf("\nFPGA: Booting failed ");
index 906ccf5e640a46fbe16ffc25427f793cd18fc389..e15eb731bea3a4f36cfde84536d3ec7fd64be58e 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * (C) Copyright 2001
  * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com
+ * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
  *
  * See file CREDITS for list of people who contributed to this
  * project.
 
 /* ------------------------------------------------------------------------- */
 
+#ifdef FPGA_DEBUG
+#define DBG(x...) printf(x)
+#else
+#define DBG(x...)
+#endif /* DEBUG */
+
 #define MAX_ONES               226
-#define FPGA_PRG_SLEEP         32        /* fpga program sleep-time */
 
 #define IBM405GP_GPIO0_OR      0xef600700  /* GPIO Output */
 #define IBM405GP_GPIO0_TCR     0xef600704  /* GPIO Three-State Control */
 #define IBM405GP_GPIO0_ODR     0xef600718  /* GPIO Open Drain */
 #define IBM405GP_GPIO0_IR      0xef60071c  /* GPIO Input */
 
-#define FPGA_PRG               0x04000000  /* FPGA program pin (ppc output) */
-#define FPGA_CLK               0x02000000  /* FPGA clk pin (ppc output)     */
-#define FPGA_DATA              0x01000000  /* FPGA data pin (ppc output)    */
-#define FPGA_DONE              0x00800000  /* FPGA done pin (ppc input)     */
-#define FPGA_INIT              0x00400000  /* FPGA init pin (pcc input)     */
+#ifdef CFG_FPGA_PRG
+# define FPGA_PRG              CFG_FPGA_PRG /* FPGA program pin (ppc output)*/
+# define FPGA_CLK              CFG_FPGA_CLK /* FPGA clk pin (ppc output)    */
+# define FPGA_DATA             CFG_FPGA_DATA /* FPGA data pin (ppc output)  */
+# define FPGA_DONE             CFG_FPGA_DONE /* FPGA done pin (ppc input)   */
+# define FPGA_INIT             CFG_FPGA_INIT /* FPGA init pin (ppc input)   */
+#else
+# define FPGA_PRG              0x04000000  /* FPGA program pin (ppc output) */
+# define FPGA_CLK              0x02000000  /* FPGA clk pin (ppc output)     */
+# define FPGA_DATA             0x01000000  /* FPGA data pin (ppc output)    */
+# define FPGA_DONE             0x00800000  /* FPGA done pin (ppc input)     */
+# define FPGA_INIT             0x00400000  /* FPGA init pin (ppc input)     */
+#endif
 
 #define ERROR_FPGA_PRG_INIT_LOW  -1        /* Timeout after PRG* asserted   */
 #define ERROR_FPGA_PRG_INIT_HIGH -2        /* Timeout after PRG* deasserted */
         SET_FPGA(FPGA_PRG | FPGA_CLK | FPGA_DATA);} /* set data to 1  */
 
 
-static int fpga_boot_compressed(void)
+static int fpga_boot(unsigned char *fpgadata, int size)
 {
   int i,index,len;
+  int count;
+#ifdef CFG_FPGA_SPARTAN2
+  int j;
+#else
   unsigned char b;
-  int size = sizeof(fpgadata);
   int bit;
-  int start;
+#endif
 
   /* display infos on fpgaimage */
   index = 15;
   for (i=0; i<4; i++)
     {
       len = fpgadata[index];
-#ifdef FPGA_DEBUG
-      printf("FPGA: %s\n", &(fpgadata[index+1]));
-#endif
+      DBG("FPGA: %s\n", &(fpgadata[index+1]));
       index += len+3;
     }
 
+#ifdef CFG_FPGA_SPARTAN2
+  /* search for preamble 0xFFFFFFFF */
+  while (1)
+    {
+      if ((fpgadata[index] == 0xff) && (fpgadata[index+1] == 0xff) && 
+          (fpgadata[index+2] == 0xff) && (fpgadata[index+3] == 0xff))
+        break; /* preamble found */
+      else
+        index++;
+    }
+#else
   /* search for preamble 0xFF2X */
   for (index = 0; index < size-1 ; index++)
     {
@@ -86,12 +112,11 @@ static int fpga_boot_compressed(void)
        break;
     }
   index += 2;
-
-#ifdef FPGA_DEBUG
-  printf("FPGA: COMPRESSED configdata starts at position 0x%x\n",index);
-  printf("FPGA: length of fpga-data %d\n", size-index);
 #endif
 
+  DBG("FPGA: configdata starts at position 0x%x\n",index);
+  DBG("FPGA: length of fpga-data %d\n", size-index);
+
   /*
    * Setup port pins for fpga programming
    */
@@ -99,60 +124,72 @@ static int fpga_boot_compressed(void)
   out32(IBM405GP_GPIO0_TCR, FPGA_PRG | FPGA_CLK | FPGA_DATA);  /* setup for output        */
   out32(IBM405GP_GPIO0_OR,  FPGA_PRG | FPGA_CLK | FPGA_DATA);  /* set output pins to high */
 
-#ifdef FPGA_DEBUG
-  printf("%s\n",((in32(IBM405GP_GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE" );
-#endif
+  DBG("%s, ",((in32(IBM405GP_GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE" );
+  DBG("%s\n",((in32(IBM405GP_GPIO0_IR) & FPGA_INIT) == 0) ? "NOT INIT" : "INIT" );
 
   /*
    * Init fpga by asserting and deasserting PROGRAM*
    */
   SET_FPGA(FPGA_CLK | FPGA_DATA);
 
-  /* Setup timeout timer */
-  start = get_timer(0);
-
   /* Wait for FPGA init line low */
+  count = 0;
   while (in32(IBM405GP_GPIO0_IR) & FPGA_INIT)
     {
+      udelay(1000); /* wait 1ms */
       /* Check for timeout - 100us max, so use 3ms */
-      if (get_timer(start) > 3)
+      if (count++ > 3)
         {
-#ifdef FPGA_DEBUG
-          printf("FPGA: Booting failed!\n");
-#endif
+          DBG("FPGA: Booting failed!\n");
           return ERROR_FPGA_PRG_INIT_LOW;
         }
     }
 
-#ifdef FPGA_DEBUG
-  printf("%s\n",((in32(IBM405GP_GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE" );
-#endif
+  DBG("%s, ",((in32(IBM405GP_GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE" );
+  DBG("%s\n",((in32(IBM405GP_GPIO0_IR) & FPGA_INIT) == 0) ? "NOT INIT" : "INIT" );
 
   /* deassert PROGRAM* */
   SET_FPGA(FPGA_PRG | FPGA_CLK | FPGA_DATA);
 
   /* Wait for FPGA end of init period .  */
+  count = 0;
   while (!(in32(IBM405GP_GPIO0_IR) & FPGA_INIT))
     {
+      udelay(1000); /* wait 1ms */
       /* Check for timeout */
-      if (get_timer(start) > 3)
+      if (count++ > 3)
         {
-#ifdef FPGA_DEBUG
-          printf("FPGA: Booting failed!\n");
-#endif
+          DBG("FPGA: Booting failed!\n");
           return ERROR_FPGA_PRG_INIT_HIGH;
         }
     }
 
-#ifdef FPGA_DEBUG
-  printf("%s\n",((in32(IBM405GP_GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE" );
-#endif
+  DBG("%s, ",((in32(IBM405GP_GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE" );
+  DBG("%s\n",((in32(IBM405GP_GPIO0_IR) & FPGA_INIT) == 0) ? "NOT INIT" : "INIT" );
 
-#ifdef FPGA_DEBUG
-  printf("write configuration data into fpga\n");
-#endif
+  DBG("write configuration data into fpga\n");
   /* write configuration-data into fpga... */
 
+#ifdef CFG_FPGA_SPARTAN2
+  /*
+   * Load uncompressed image into fpga
+   */
+  for (i=index; i<size; i++)
+    {
+      for (j=0; j<8; j++)
+        {
+          if ((fpgadata[i] & 0x80) == 0x80)
+           {
+              FPGA_WRITE_1;
+           }
+          else
+           {
+              FPGA_WRITE_0;
+           }
+          fpgadata[i] <<= 1;
+        }
+    }
+#else
   /* send 0xff 0x20 */
   FPGA_WRITE_1; FPGA_WRITE_1; FPGA_WRITE_1; FPGA_WRITE_1;
   FPGA_WRITE_1; FPGA_WRITE_1; FPGA_WRITE_1; FPGA_WRITE_1;
@@ -198,33 +235,28 @@ static int fpga_boot_compressed(void)
           FPGA_WRITE_1;
         }
     }
-
-#ifdef FPGA_DEBUG
-  printf("%s\n",((in32(IBM405GP_GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE" );
 #endif
 
+  DBG("%s, ",((in32(IBM405GP_GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE" );
+  DBG("%s\n",((in32(IBM405GP_GPIO0_IR) & FPGA_INIT) == 0) ? "NOT INIT" : "INIT" );
+
   /*
    * Check if fpga's DONE signal - correctly booted ?
    */
 
-  /* Setup timer */
-  start = get_timer(0);
-
   /* Wait for FPGA end of programming period .  */
+  count = 0;
   while (!(in32(IBM405GP_GPIO0_IR) & FPGA_DONE))
     {
+      udelay(1000); /* wait 1ms */
       /* Check for timeout */
-      if (get_timer(start) > 3)
+      if (count++ > 3)
         {
-#ifdef FPGA_DEBUG
-          printf("FPGA: Booting failed!\n");
-#endif
+          DBG("FPGA: Booting failed!\n");
           return ERROR_FPGA_PRG_DONE;
         }
     }
 
-#ifdef FPGA_DEBUG
-  printf("FPGA: Booting successful!\n");
-#endif
+  DBG("FPGA: Booting successful!\n");
   return 0;
 }
index 1b48c8ceed41cdef1569554b9e7668f71e0cc1dc..667485261d749c58eb464e38c1a3470c8fc16e5a 100644 (file)
  */
 
 #include <ppcboot.h>
-#include "cpci405.h"
 #include <asm/processor.h>
 #include <command.h>
 #include <cmd_boot.h>
+#include <malloc.h>
 
 /* ------------------------------------------------------------------------- */
 
 /* fpga configuration data - generated by bin2cc */
 const unsigned char fpgadata[] =
 {
-#include "fpgadata.c"
+#ifdef CONFIG_CPCI405_VER2
+# include "fpgadata_cpci4052.c"
+#else
+# include "fpgadata_cpci405.c"
+#endif
 };
 
 /*
@@ -45,69 +49,89 @@ const unsigned char fpgadata[] =
 #include "../common/fpga.c"
 
 
+/* Prototypes */
+int version2(void);
+int gunzip(void *, int, unsigned char *, int *);
+
+
 int board_pre_init (void)
 {
+#ifndef CONFIG_CPCI405_VER2
   int index, len, i;
   int status;
+#endif
 
 #ifdef FPGA_DEBUG
   /* set up serial port with default baudrate */
-  serial_init(0, CONFIG_BAUDRATE);
+  serial_init(get_gclk_freq(), CONFIG_BAUDRATE);
   console_init_f();
 #endif
 
+  /*
+   * First pull fpga-prg pin low, to disable fpga logic (on version 2 board)
+   */
+  out32(IBM405GP_GPIO0_ODR, 0x00000000);                       /* no open drain pins      */
+  out32(IBM405GP_GPIO0_TCR, CFG_FPGA_PRG);                     /* setup for output        */
+  out32(IBM405GP_GPIO0_OR,  CFG_FPGA_PRG);                     /* set output pins to high */
+  out32(IBM405GP_GPIO0_OR, 0);                                 /* pull prg low            */
+
   /*
    * Boot onboard FPGA
    */
-  status = fpga_boot_compressed();
-  if (status != 0)
+#ifndef CONFIG_CPCI405_VER2
+  if (!version2())
     {
-      /* booting FPGA failed */
+      status = fpga_boot((unsigned char *)fpgadata, sizeof(fpgadata));
+      if (status != 0)
+        {
+         /* booting FPGA failed */
 #ifndef FPGA_DEBUG
-      /* set up serial port with default baudrate */
-      serial_init(0, CONFIG_BAUDRATE);
-      console_init_f();
+         /* set up serial port with default baudrate */
+         serial_init(get_gclk_freq(), CONFIG_BAUDRATE);
+         console_init_f();
 #endif
-      printf("\nFPGA: Booting failed ");
-      switch (status)
-        {
-        case ERROR_FPGA_PRG_INIT_LOW:
-          printf("(Timeout: INIT not low after asserting PROGRAM*)\n ");
-          break;
-        case ERROR_FPGA_PRG_INIT_HIGH:
-          printf("(Timeout: INIT not high after deasserting PROGRAM*)\n ");
-          break;
-        case ERROR_FPGA_PRG_DONE:
-          printf("(Timeout: DONE not high after programming FPGA)\n ");
-          break;
-        }
-
-      /* display infos on fpgaimage */
-      index = 15;
-      for (i=0; i<4; i++)
-       {
-         len = fpgadata[index];
-         printf("FPGA: %s\n", &(fpgadata[index+1]));
-         index += len+3;
-       }
-      putc ('\n');
-      /* delayed reboot */
-      for (i=20; i>0; i--)
-       {
-         printf("Rebooting in %2d seconds \r",i);
-         for (index=0;index<1000;index++)
-           udelay(1000);
+         printf("\nFPGA: Booting failed ");
+         switch (status)
+           {
+           case ERROR_FPGA_PRG_INIT_LOW:
+             printf("(Timeout: INIT not low after asserting PROGRAM*)\n ");
+             break;
+           case ERROR_FPGA_PRG_INIT_HIGH:
+             printf("(Timeout: INIT not high after deasserting PROGRAM*)\n ");
+             break;
+           case ERROR_FPGA_PRG_DONE:
+             printf("(Timeout: DONE not high after programming FPGA)\n ");
+             break;
+           }
+
+         /* display infos on fpgaimage */
+         index = 15;
+         for (i=0; i<4; i++)
+           {
+             len = fpgadata[index];
+             printf("FPGA: %s\n", &(fpgadata[index+1]));
+             index += len+3;
+           }
+         putc ('\n');
+         /* delayed reboot */
+         for (i=20; i>0; i--)
+           {
+             printf("Rebooting in %2d seconds \r",i);
+             for (index=0;index<1000;index++)
+               udelay(1000);
+           }
+         putc ('\n');
+         do_reset(NULL, NULL, 0, 0, NULL);
        }
-      putc ('\n');
-      do_reset(NULL, NULL, 0, 0, NULL);
     }
+#endif /* !CONFIG_CPCI405_VER2 */
 
   /*
    * IRQ 0-15  405GP internally generated; active high; level sensitive
    * IRQ 16    405GP internally generated; active low; level sensitive
    * IRQ 17-24 RESERVED
    * IRQ 25 (EXT IRQ 0) CAN0; active low; level sensitive
-   * IRQ 26 (EXT IRQ 1) CAN1; active low; level sensitive
+   * IRQ 26 (EXT IRQ 1) CAN1 (+FPGA on CPCI4052) ; active low; level sensitive
    * IRQ 27 (EXT IRQ 2) PCI SLOT 0; active low; level sensitive
    * IRQ 28 (EXT IRQ 3) PCI SLOT 1; active low; level sensitive
    * IRQ 29 (EXT IRQ 4) PCI SLOT 2; active low; level sensitive
@@ -130,11 +154,15 @@ int board_pre_init (void)
 
 int ctermm2(void)
 {
+#ifdef CONFIG_CPCI405_VER2
+  return 0;                           /* no, board is cpci405 */
+#else
   if ((*(unsigned char *)0xf0000400 == 0x00) &&
       (*(unsigned char *)0xf0000401 == 0x01))
     return 0;                           /* no, board is cpci405 */
   else
     return -1;                          /* yes, board is cterm-m2 */
+#endif
 }
 
 
@@ -147,6 +175,31 @@ int cpci405_host(void)
 }
 
 
+int version2(void)
+{
+  unsigned long cntrl0Reg;
+  unsigned long value;
+
+  /*
+   * Setup GPIO pins (CS2/GPIO11 as GPIO)
+   */
+  cntrl0Reg = mfdcr(cntrl0);
+  mtdcr(cntrl0, cntrl0Reg | 0x02000000);
+
+  value = in32(IBM405GP_GPIO0_IR) & 0x02000000;
+
+  /*
+   * Setup GPIO pins (CS2/GPIO11 as CS again)
+   */
+  mtdcr(cntrl0, cntrl0Reg);
+
+  if (value)
+    return -1;                          /* yes, board is version 2.x */
+  else
+    return 0;                           /* no, board is version 1.x */
+}
+
+
 int misc_init_f(void)
 {
   return 0;  /* dummy implementation */
@@ -157,6 +210,97 @@ void misc_init_r(bd_t *bd)
 {
   char *       tmp;                    /* Temporary char pointer      */
 
+#ifdef CONFIG_CPCI405_VER2
+  unsigned char *dst;
+  ulong len;
+  int status;
+  int index;
+  int i;
+  unsigned long cntrl0Reg;
+
+  /*
+   * On CPCI-405 version 2 the environment is saved in eeprom!
+   * FPGA can be gzip compressed (malloc) and booted this late.
+   */
+
+  if (version2())
+    {
+      /*
+       * Setup GPIO pins (CS6+CS7 as GPIO)
+       */
+      cntrl0Reg = mfdcr(cntrl0);
+      mtdcr(cntrl0, cntrl0Reg | 0x00300000);
+      
+      dst = malloc(CFG_FPGA_MAX_SIZE);
+      if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, (int *)&len) != 0)
+        {
+         printf ("GUNZIP ERROR - must RESET board to recover\n");
+         do_reset (NULL, NULL, 0, 0, NULL);
+       }
+
+      status = fpga_boot(dst, len);
+      if (status != 0)
+        {
+         printf("\nFPGA: Booting failed ");
+         switch (status)
+           {
+           case ERROR_FPGA_PRG_INIT_LOW:
+             printf("(Timeout: INIT not low after asserting PROGRAM*)\n ");
+             break;
+           case ERROR_FPGA_PRG_INIT_HIGH:
+             printf("(Timeout: INIT not high after deasserting PROGRAM*)\n ");
+             break;
+           case ERROR_FPGA_PRG_DONE:
+             printf("(Timeout: DONE not high after programming FPGA)\n ");
+             break;
+           }
+
+         /* display infos on fpgaimage */
+         index = 15;
+         for (i=0; i<4; i++)
+           {
+             len = dst[index];
+             printf("FPGA: %s\n", &(dst[index+1]));
+             index += len+3;
+           }
+         putc ('\n');
+         /* delayed reboot */
+         for (i=20; i>0; i--)
+           {
+             printf("Rebooting in %2d seconds \r",i);
+             for (index=0;index<1000;index++)
+               udelay(1000);
+           }
+         putc ('\n');
+         do_reset(NULL, NULL, 0, 0, NULL);
+       }
+
+      /* restore gpio/cs settings */
+      mtdcr(cntrl0, cntrl0Reg);
+
+      puts("FPGA:  ");
+
+      /* display infos on fpgaimage */
+      index = 15;
+      for (i=0; i<4; i++)
+        {
+         len = dst[index];
+         printf("%s ", &(dst[index+1]));
+         index += len+3;
+       }
+      putc ('\n');
+
+      free(dst);
+    }
+  else
+    {
+      printf("\n*** PPCBoot Version does not match Board Version!\n");
+      printf("*** CPCI-405 Version 2.x detected!\n");
+      printf("*** Please use correct PPCBoot version (CPCI4052)!\n\n");
+    }
+
+#else /* CONFIG_CPCI405_VER2 */
+
   /*
    * Generate last byte of ip-addr from code-plug @ 0xf0000400
    */
@@ -180,6 +324,15 @@ void misc_init_r(bd_t *bd)
         }
     }
 
+  if (version2())
+    {
+      printf("\n*** PPCBoot Version does not match Board Version!\n");
+      printf("*** CPCI-405 Board Version 1.x detected!\n");
+      printf("*** Please use correct PPCBoot version (CPCI405)!\n\n");
+    }
+
+#endif /* CONFIG_CPCI405_VER2 */
+
   /*
    * Write ethernet addr in NVRAM for VxWorks
    */
@@ -194,8 +347,10 @@ void misc_init_r(bd_t *bd)
 
 int checkboard (void)
 {
+#ifndef CONFIG_CPCI405_VER2
     int index;
     int len;
+#endif
     unsigned char str[64];
     int i = getenv_r ("serial#", str, sizeof(str));
 
@@ -205,14 +360,28 @@ int checkboard (void)
     else
       puts(str);
 
+    if (version2())
+      printf(" (Ver 2.x, ");
+    else
+      printf(" (Ver 1.x, ");
+
+#if 0
+    if ((*(unsigned short *)((unsigned long)CFG_FPGA_BASE_ADDR) + CFG_FPGA_STATUS)
+       & CFG_FPGA_STATUS_FLASH)
+      printf("FLASH Bank A, ");
+    else
+      printf("FLASH Bank B, ");
+#endif
+           
     if (ctermm2())
-      printf(" (CTERM-M2 - Id=0x%02x)", *(unsigned char *)0xf0000400);
+      printf("CTERM-M2 - Id=0x%02x)", *(unsigned char *)0xf0000400);
     else
       if (cpci405_host())
-        printf(" (PCI Host Version)");
+        printf("PCI Host Version)");
       else
-        printf(" (PCI Adapter Version)");
+        printf("PCI Adapter Version)");
 
+#ifndef CONFIG_CPCI405_VER2
     puts("\nFPGA:  ");
 
     /* display infos on fpgaimage */
@@ -223,6 +392,7 @@ int checkboard (void)
         printf("%s ", &(fpgadata[index+1]));
         index += len+3;
       }
+#endif
 
     putc ('\n');
 
@@ -257,3 +427,25 @@ int testdram (void)
 }
 
 /* ------------------------------------------------------------------------- */
+
+#ifdef CONFIG_CPCI405_VER2
+#ifdef CONFIG_IDE_RESET
+
+void ide_set_reset(int on)
+{
+       volatile unsigned short *fpga_mode = (unsigned short *)CFG_FPGA_BASE_ADDR;
+
+       /*
+        * Assert or deassert CompactFlash Reset Pin
+        */
+       if (on) {               /* assert RESET */
+               *fpga_mode &= ~(CFG_FPGA_MODE_CF_RESET);
+       } else {                /* release RESET */
+               *fpga_mode |= CFG_FPGA_MODE_CF_RESET;
+       }
+}
+
+#endif /* CONFIG_IDE_RESET */
+#endif /* CONFIG_CPCI405_VER2 */
+
+/* ------------------------------------------------------------------------- */
diff --git a/board/esd/cpci405/cpci405.h b/board/esd/cpci405/cpci405.h
deleted file mode 100644 (file)
index 5fc313a..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * (C) Copyright 2000
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-/****************************************************************************
- * FLASH Memory Map as used by TQ Monitor:
- *
- *                          Start Address    Length
- * +-----------------------+ 0x4000_0000     Start of Flash -----------------
- * | MON8xx code           | 0x4000_0100     Reset Vector
- * +-----------------------+ 0x400?_????
- * | (unused)              |
- * +-----------------------+ 0x4001_FF00
- * | Ethernet Addresses    |                 0x78
- * +-----------------------+ 0x4001_FF78
- * | (Reserved for MON8xx) |                 0x44
- * +-----------------------+ 0x4001_FFBC
- * | Lock Address          |                 0x04
- * +-----------------------+ 0x4001_FFC0                     ^
- * | Hardware Information  |                 0x40            | MON8xx
- * +=======================+ 0x4002_0000 (sector border)    -----------------
- * | Autostart Header      |                                 | Applications
- * | ...                   |                                 v
- *
- *****************************************************************************/
diff --git a/board/esd/cpci405/fpgadata_cpci4052.c b/board/esd/cpci405/fpgadata_cpci4052.c
new file mode 100644 (file)
index 0000000..4a97e6b
--- /dev/null
@@ -0,0 +1,692 @@
+  0x1f,0x8b,0x08,0x08,0xc5,0x7d,0xdf,0x3c,0x00,0x03,0x63,0x70,0x63,0x69,0x34,0x30,
+  0x35,0x5f,0x32,0x5f,0x30,0x31,0x2e,0x62,0x69,0x74,0x00,0xed,0x9c,0x7f,0x74,0x14,
+  0xd7,0x95,0xe7,0x6f,0xbd,0xaa,0x96,0x4a,0xdd,0x2d,0x75,0xa9,0x25,0x91,0x8e,0x0d,
+  0xb8,0xd4,0x12,0xb8,0xad,0x69,0x89,0xa6,0x65,0x63,0x8d,0xac,0xb4,0x9e,0x7e,0x40,
+  0x3a,0x36,0x09,0x8a,0xe3,0x4c,0xd8,0xc4,0x49,0x9a,0x98,0xcc,0x68,0x66,0x89,0x07,
+  0xec,0xcc,0x1e,0x36,0xc7,0x27,0xe7,0xe9,0x07,0x46,0x20,0x26,0x34,0x36,0x13,0xe3,
+  0x19,0x4e,0xa6,0xc1,0xc4,0x51,0x1c,0x92,0x34,0xe0,0x1f,0xb2,0x4d,0x9c,0x42,0xc8,
+  0xa4,0x01,0x05,0x2b,0xc4,0x67,0x43,0x6c,0xaf,0x69,0x12,0xc5,0x23,0xdb,0x0a,0x91,
+  0xb1,0xc7,0xe1,0x97,0xad,0xbd,0xaf,0x7e,0x4b,0xc2,0xde,0xec,0x64,0xcf,0x99,0x3d,
+  0x67,0x29,0xfe,0xe0,0xc2,0x53,0x55,0xdf,0xf7,0xea,0xbe,0xcf,0xfb,0xde,0xfb,0x5e,
+  0x0b,0x8a,0x02,0x93,0xc6,0x1f,0x00,0x61,0x15,0x94,0xde,0xb5,0xf6,0xae,0xbf,0xbd,
+  0x31,0x76,0xd3,0x97,0xe3,0x5f,0x8e,0x2d,0xae,0xbb,0xfb,0xae,0xd5,0xf0,0x15,0xf0,
+  0xc6,0xef,0x5d,0x7c,0xd3,0xd7,0xd7,0x2d,0xbe,0xf1,0x46,0xb8,0x0b,0x7c,0xf1,0x58,
+  0x2c,0xbe,0x28,0x76,0xd3,0xa2,0xc5,0xf5,0xb0,0x1a,0x8a,0x16,0xc7,0x1a,0x6f,0x6c,
+  0x68,0x8c,0xdd,0x04,0x5f,0x05,0x48,0xf5,0x4d,0xe1,0xf5,0xd8,0xc3,0x9f,0xfd,0xeb,
+  0x18,0x30,0x01,0x00,0x0a,0x63,0x42,0x8a,0xff,0x5d,0x10,0x13,0x54,0x01,0x58,0x73,
+  0x6d,0x0c,0x34,0xfe,0x6f,0x30,0xdb,0x8b,0x62,0xa0,0xba,0xff,0x2d,0xc4,0x80,0x42,
+  0x07,0x94,0x7f,0x0d,0x82,0x31,0x98,0x71,0x09,0x20,0x31,0xc3,0xfa,0xb0,0x36,0x32,
+  0xb3,0x89,0x5f,0x7f,0x42,0x5b,0xf0,0x0a,0x4d,0xd2,0x7f,0xb4,0xcd,0xf8,0x6b,0x2a,
+  0x08,0xe5,0xe0,0x01,0x41,0xef,0x91,0x69,0x34,0x0f,0x1b,0xf7,0x69,0x9e,0xcb,0xf0,
+  0x33,0x76,0x33,0x44,0xcf,0xfd,0xf6,0x15,0x79,0xb8,0x3b,0xa6,0x16,0x67,0x85,0x49,
+  0x58,0x6b,0x78,0xa4,0x9c,0x85,0x7e,0xa8,0x83,0xe4,0x65,0x32,0x95,0xdc,0xcc,0xc2,
+  0x99,0xbe,0x9f,0x90,0xbc,0x64,0xf4,0xb9,0xcf,0x33,0x02,0x3d,0x91,0x28,0x95,0x63,
+  0x30,0xe2,0xcd,0x30,0x95,0x16,0xc5,0xc2,0xbf,0x11,0x8c,0xfb,0xb4,0x8a,0xbd,0xd0,
+  0xaf,0x61,0x5b,0xb6,0x75,0x02,0xfa,0xd9,0x6e,0x4d,0xde,0x17,0x9c,0x94,0xa8,0xe1,
+  0x4c,0xc5,0x1f,0xf0,0xbf,0x96,0xdc,0xef,0xcf,0x8a,0x13,0x90,0x84,0xf8,0xed,0xc5,
+  0x07,0x85,0x51,0xc9,0xb8,0x2f,0x2f,0x3c,0x47,0xa7,0xa0,0x99,0x05,0xb2,0xe2,0x2b,
+  0xf2,0x7d,0x24,0x30,0x16,0x98,0x0c,0x9e,0x87,0x94,0xde,0x46,0x95,0x7f,0x0c,0x1f,
+  0x87,0x46,0xcd,0x9f,0x25,0x51,0xc8,0x49,0xd7,0xd0,0x92,0xac,0x38,0x2a,0xa9,0x7a,
+  0x5b,0x4e,0x88,0xc2,0x26,0x08,0xbf,0xf8,0xc3,0x49,0xd2,0xac,0x75,0x69,0x6a,0x4a,
+  0xce,0x92,0x73,0x60,0x7c,0x5e,0xde,0xf3,0x49,0xe8,0x81,0x08,0x8d,0xc4,0x48,0x89,
+  0xb2,0x9b,0x45,0x52,0x5e,0x20,0xe7,0x71,0x1c,0xf8,0xa5,0x0a,0x5e,0xf8,0x16,0x53,
+  0xbf,0x5a,0xf4,0xdf,0xbd,0xf3,0x3b,0x1e,0xcd,0x57,0x8d,0xcb,0xff,0x85,0x9c,0x32,
+  0xef,0x4b,0xca,0x1e,0x38,0x9c,0x69,0xa0,0xcb,0x1b,0xcb,0x4a,0xc8,0x6f,0x07,0x1a,
+  0xbe,0x52,0x52,0x27,0x9e,0x34,0xdf,0x1b,0x9d,0xb7,0x8f,0xbe,0xaf,0x24,0xe8,0x8a,
+  0x27,0x0e,0x4f,0x64,0x4e,0x97,0x36,0x6b,0xbe,0xb7,0xc4,0xd1,0x02,0xc3,0xcf,0x01,
+  0xcf,0x04,0x1c,0x67,0x31,0xad,0xee,0x39,0xb1,0xb8,0x7a,0x1c,0x12,0x34,0xc0,0xc4,
+  0x1a,0x73,0x3c,0x93,0xa5,0x7d,0xf0,0x2d,0xa8,0xa4,0xf2,0x5a,0x32,0x97,0xed,0x11,
+  0x8a,0x35,0x9f,0x42,0x82,0x92,0x71,0x9f,0x06,0xdf,0x86,0x8d,0x7d,0x95,0x79,0x6f,
+  0x03,0x7c,0x09,0x9e,0xd0,0x6a,0x53,0xbe,0xce,0x30,0xc6,0xa4,0x71,0x5f,0xf9,0xf3,
+  0xd0,0xcd,0xd4,0xbc,0x1c,0x23,0xcb,0x61,0x5f,0x77,0x74,0xd4,0x17,0xc3,0xfb,0x8c,
+  0xf7,0x30,0x5e,0x31,0xd0,0x7a,0x42,0xaa,0x1f,0x28,0xc9,0x88,0x9d,0xf0,0x1c,0x34,
+  0xf7,0x5d,0x97,0x2f,0x6c,0x34,0x9f,0x99,0x84,0x3c,0x9c,0x87,0x04,0xa0,0x0b,0x4c,
+  0x42,0x5f,0x82,0x68,0x9c,0x04,0xe3,0x3e,0x59,0x99,0x80,0x5f,0x4b,0x8d,0x34,0x9a,
+  0x16,0xc7,0x6e,0x3f,0x0a,0x61,0x1a,0x50,0x80,0x98,0xcf,0x64,0xd2,0x32,0x1c,0xcf,
+  0x3a,0x2a,0xa7,0xc9,0xbf,0x41,0x57,0x4b,0x78,0xa5,0x2f,0x4d,0x54,0x50,0xf4,0xb6,
+  0x90,0xa7,0x9a,0x3e,0x0c,0xd5,0xd8,0x16,0x1c,0x8b,0x6c,0xea,0x7b,0x8c,0x62,0x5b,
+  0x81,0x39,0x66,0x72,0x7b,0x2f,0xeb,0x82,0x68,0x52,0x0e,0xb6,0x0e,0xf7,0x6d,0x02,
+  0x95,0xfa,0x82,0xde,0x6e,0xc1,0x18,0xb3,0xc1,0xe2,0x14,0x9c,0xea,0x68,0x2c,0x8f,
+  0x32,0x31,0x0f,0xc9,0x82,0x46,0xd8,0xca,0xc4,0x3a,0xd1,0x18,0x97,0x1d,0xf3,0xc6,
+  0xe8,0x7b,0xb0,0x68,0xe9,0xa2,0x6d,0x22,0x37,0x6e,0xa6,0xbe,0x5f,0x88,0x7f,0x4d,
+  0xd6,0x9a,0x9f,0xf7,0x22,0x3b,0x2a,0x34,0x27,0x97,0x3f,0x50,0xf6,0x22,0xfb,0x39,
+  0x34,0x53,0x7f,0x5a,0x7c,0xcd,0x1c,0xcf,0x06,0x78,0x1d,0x46,0xc3,0x75,0xd7,0xd4,
+  0xb2,0xe0,0x19,0xd8,0x8c,0x81,0x2a,0x6f,0x98,0x73,0xc2,0xec,0x83,0xec,0x79,0x1e,
+  0xba,0xe4,0x68,0xbb,0x5c,0x4e,0x9e,0xf7,0xa2,0x53,0x9a,0xac,0x90,0x6e,0x33,0x3e,
+  0x43,0x15,0x7b,0xe4,0x87,0xa5,0xba,0x65,0x9b,0xd2,0xad,0x63,0x8a,0xd9,0xd1,0x23,
+  0xe6,0x98,0x65,0x2a,0xc6,0xe0,0x28,0x4b,0xac,0x8d,0xa6,0x0b,0x86,0xa5,0x4d,0xed,
+  0x4d,0x9d,0x91,0x1d,0xe2,0x80,0x19,0x67,0x11,0xf8,0x2e,0x5c,0xd0,0x12,0xa9,0xc2,
+  0x74,0xe1,0x98,0x74,0x81,0x24,0x56,0x07,0x76,0x8a,0xc7,0xcc,0x77,0x14,0x51,0x76,
+  0xc1,0xb8,0x14,0x27,0x3f,0x62,0x9f,0x51,0xa5,0x53,0x1d,0x09,0xd9,0xcf,0xc4,0x63,
+  0xd6,0x7d,0x52,0x88,0xbf,0xf7,0xac,0x9c,0x41,0x97,0xbf,0x05,0x8b,0xd2,0x91,0x0c,
+  0x39,0x66,0x4e,0xd1,0x88,0x67,0x05,0x7b,0x04,0xd4,0xb5,0x35,0x31,0x0c,0xae,0x6d,
+  0x12,0xfa,0x19,0xc3,0x36,0x33,0x3e,0x4b,0xe7,0xaa,0x1b,0xb3,0xea,0x32,0x79,0x3d,
+  0x29,0x27,0xf7,0x7b,0x16,0x61,0xe0,0x14,0xe4,0xcc,0xb1,0x8e,0xc0,0x1c,0xf8,0xb7,
+  0xbd,0x8b,0x3b,0x4b,0x1a,0xc4,0x20,0xfc,0x8a,0x7d,0x2c,0xef,0x5f,0x2f,0x1e,0x33,
+  0xe3,0x53,0xae,0xd8,0x03,0x97,0x20,0xd1,0x82,0xf3,0x28,0x0f,0x17,0x85,0x26,0xfa,
+  0xe5,0xac,0x38,0x64,0xc6,0x27,0xf5,0xbc,0x01,0x97,0xd2,0xf5,0x99,0xe5,0x4f,0x57,
+  0x9d,0xa3,0xa7,0x59,0x62,0x4f,0xe0,0x82,0x38,0x6a,0x8e,0xe7,0x40,0xe9,0x3f,0xf7,
+  0xf6,0xb0,0x47,0x34,0xb9,0x81,0x1c,0x61,0xdd,0xca,0xd7,0x22,0xbe,0x75,0xe4,0x0d,
+  0x73,0x5c,0xf0,0x2d,0xb1,0xa7,0x42,0x0b,0x7a,0x23,0xeb,0xc8,0x28,0x3c,0x04,0xb5,
+  0x9a,0x6f,0x6d,0x70,0x98,0x1a,0xfd,0x4b,0x95,0xe7,0x84,0x9e,0x55,0xab,0x87,0xd1,
+  0x75,0x0d,0xba,0x65,0x3f,0xf5,0x2d,0x81,0x53,0xe6,0x7b,0x18,0xa8,0xf8,0x3e,0xfd,
+  0xa3,0x76,0xb3,0x16,0xcd,0x12,0x8d,0xbc,0x84,0x83,0xe7,0xcb,0xda,0xcf,0x64,0x30,
+  0x82,0x7e,0x36,0x68,0x8b,0xb2,0xe2,0xeb,0x70,0xb1,0x22,0x71,0x87,0x2f,0x2b,0xfe,
+  0xce,0x8c,0x4f,0x41,0x99,0x24,0x2f,0xc0,0x2d,0x5a,0xf1,0x64,0xe9,0x24,0xfc,0x81,
+  0x36,0xd3,0xc0,0xa4,0x98,0x6f,0x37,0xda,0xba,0xa4,0xd5,0xc8,0xa5,0xb0,0x16,0xc9,
+  0x92,0xdf,0x28,0x2f,0xe5,0xeb,0xd6,0xe1,0x33,0xf3,0xd4,0x88,0x4f,0x26,0x74,0x42,
+  0xbf,0xf4,0x77,0x99,0xa2,0x2c,0x39,0x43,0x1f,0x13,0xea,0x26,0x7d,0xd9,0xd6,0xbc,
+  0x39,0x9e,0x32,0x78,0xa1,0x3f,0xa6,0x6a,0x91,0x7a,0x92,0xd3,0x1e,0x50,0xd6,0xb4,
+  0xf8,0x62,0xe1,0x21,0xb3,0x77,0x20,0x77,0xc2,0x0b,0xc9,0x46,0x56,0xfc,0x78,0x4f,
+  0x3e,0xf3,0x26,0x24,0x86,0x0b,0x1f,0x17,0xf3,0xc4,0x78,0x66,0x66,0xde,0xaf,0xe1,
+  0x8f,0xd0,0xac,0xad,0x98,0x2c,0xd4,0xfa,0xde,0x57,0x9b,0x3f,0x19,0x38,0xb7,0x71,
+  0xbc,0xc0,0x64,0x9d,0xe7,0x5d,0x78,0x01,0xe2,0x49,0x7f,0x52,0x7c,0xf2,0x8e,0xd3,
+  0xa4,0x3e,0x1f,0x38,0x2f,0x3a,0xfc,0x7c,0x0d,0x59,0x57,0xf5,0xf5,0xe4,0x6e,0x22,
+  0x49,0x3d,0xad,0xe1,0x9c,0x6f,0x10,0x7d,0xb1,0xf8,0x39,0x0c,0x5d,0x38,0xed,0x22,
+  0xe9,0xee,0x5e,0xf6,0xa0,0xa2,0x0e,0xdd,0x86,0xfc,0xf4,0x98,0xcf,0x2c,0x7d,0x94,
+  0xf7,0x8f,0x26,0x19,0x01,0xb5,0xbf,0x72,0xf7,0xa1,0xb6,0x2c,0x99,0x34,0xc7,0x8c,
+  0x56,0x9c,0x80,0xe3,0x90,0xa5,0x18,0x5e,0xdf,0x6d,0x7d,0x09,0xe2,0xda,0x8a,0x6c,
+  0x9b,0xc3,0xcf,0x83,0xdc,0x4f,0xba,0x42,0x13,0xdf,0x81,0xf7,0x59,0xb3,0x16,0x98,
+  0x2c,0x3b,0xaf,0x98,0xf7,0x29,0x7b,0xe5,0xa3,0x90,0xe8,0xf4,0x33,0xdf,0x1e,0x72,
+  0x58,0x8a,0x6b,0x5b,0xb3,0x55,0x36,0x3f,0x97,0x2e,0x0c,0xf6,0xab,0x8b,0xd6,0xca,
+  0x52,0x58,0x55,0x5e,0x86,0xdd,0x9a,0xcf,0xcd,0xcf,0x76,0xda,0x2d,0xad,0x69,0xe9,
+  0x93,0xba,0x7b,0x49,0x97,0xa0,0x1e,0x42,0xf6,0x38,0xfc,0xbc,0x99,0xde,0xcf,0x6a,
+  0x57,0x27,0x5f,0x27,0x73,0xc8,0x3f,0x3d,0x58,0x99,0xf7,0xad,0x27,0x39,0x17,0x3f,
+  0x0f,0xa9,0x4d,0x9d,0xfe,0x6b,0xc4,0xde,0xbe,0xc3,0x99,0xd8,0x78,0xe0,0x96,0xaa,
+  0x93,0xe6,0x50,0xd3,0x79,0xdb,0x61,0x0a,0x9a,0x3e,0x17,0xe8,0xc2,0x21,0xbe,0x54,
+  0xda,0x3c,0x1c,0x98,0x44,0x5f,0x0c,0x3f,0x39,0x3f,0x8f,0x31,0x1c,0x4f,0x26,0x4a,
+  0x70,0x0a,0xe2,0x79,0x5c,0x28,0xde,0xb0,0xf9,0xb9,0x93,0x74,0x83,0x9a,0x94,0x69,
+  0xb0,0x1c,0x7a,0xa1,0x52,0x43,0x90,0x9e,0xb4,0xf9,0xf9,0x0c,0x6c,0xe8,0x5e,0x90,
+  0x92,0x97,0x93,0x25,0xf0,0x20,0xab,0xcc,0xf7,0xad,0x27,0x93,0x36,0x3f,0x4f,0x40,
+  0x8f,0xb4,0x90,0xca,0xde,0x65,0xb5,0x6a,0x4f,0x52,0xe5,0x73,0xec,0xa4,0x64,0xbc,
+  0xdb,0xf1,0xd2,0x67,0xd4,0x13,0xf0,0x14,0xf3,0xaf,0x16,0x1b,0xc9,0xab,0xed,0x61,
+  0xe6,0xcf,0x88,0x17,0xcd,0xb5,0x0a,0xf9,0xa9,0x9e,0x87,0x46,0xe4,0x67,0x5b,0x9e,
+  0x1a,0x20,0xad,0x72,0xf8,0x89,0x9c,0x40,0xbc,0xfb,0xb7,0x8b,0x7b,0xc8,0x05,0x88,
+  0xd3,0x40,0x5a,0x1c,0xb2,0xf9,0xd9,0xae,0xf3,0xb3,0x38,0x1d,0xac,0x86,0x5f,0xc3,
+  0x6e,0xce,0xc8,0xbc,0xc5,0x4f,0xa1,0x9a,0xf4,0xc3,0xdd,0x29,0x44,0xce,0x1e,0xb2,
+  0x0f,0x5f,0x72,0x11,0xb2,0xc7,0xe2,0xa7,0x54,0x0d,0x5d,0xea,0xdd,0xc9,0x4f,0xa4,
+  0x89,0x44,0xb6,0xa9,0xc8,0x4f,0xa5,0x60,0xa8,0xd4,0x18,0x33,0xce,0xcf,0x1c,0xba,
+  0xe0,0xf7,0x88,0xbb,0x5a,0xcf,0x77,0xc4,0xca,0x8b,0x99,0x78,0x56,0x34,0xde,0xc3,
+  0x8e,0x79,0x2f,0x7a,0xdf,0x53,0x9a,0xdb,0x03,0xa3,0x65,0xef,0xc0,0x94,0x32,0x9f,
+  0xfb,0xf2,0x5a,0x81,0xc5,0xcf,0x61,0x38,0xaa,0xc6,0x93,0xd8,0x26,0xc1,0xaf,0xd5,
+  0x78,0x47,0x20,0x5d,0x75,0xc4,0xe2,0xa7,0x92,0x87,0xbe,0x60,0x95,0xb2,0x22,0xd3,
+  0x1d,0x66,0x7d,0x91,0xdd,0xb2,0x8f,0x11,0x87,0x9f,0xff,0x03,0x36,0xb0,0xca,0x76,
+  0x5f,0xda,0x5b,0xad,0x6e,0x8b,0x45,0x92,0x5e,0x85,0x0c,0x39,0xfc,0x94,0xfe,0x71,
+  0x41,0x15,0xdd,0xbc,0x9f,0x54,0x2b,0x9b,0x94,0x1a,0xde,0x3f,0x87,0x9f,0xaf,0xc1,
+  0x51,0xba,0x9f,0xfa,0xe6,0x8a,0x92,0xf6,0x6b,0xad,0x91,0x96,0xa4,0xc5,0x71,0x33,
+  0x3e,0x23,0xc2,0x77,0xc9,0x05,0x39,0x41,0xb7,0xa2,0x7b,0xf2,0x05,0x58,0xc2,0xfd,
+  0x3c,0x66,0xae,0xef,0x11,0x25,0x83,0xf1,0xdb,0x0c,0x52,0x2f,0x32,0x6b,0x9c,0xc6,
+  0xf9,0xa2,0x65,0xf3,0x53,0x90,0x61,0x33,0xad,0x63,0xfe,0xfc,0x50,0x04,0x36,0x4b,
+  0xbb,0x99,0x2f,0xd3,0x7a,0xcc,0xe2,0xa0,0x67,0x39,0x3c,0x42,0xa3,0xac,0x28,0x46,
+  0x46,0xe0,0x07,0xd0,0xae,0xf5,0x3b,0xfc,0xcc,0x08,0x31,0x79,0x03,0x44,0x33,0x45,
+  0x93,0xa4,0x89,0x6d,0x84,0x05,0xc3,0x5f,0x58,0x4b,0xc6,0xcd,0xfb,0x06,0xe4,0xf9,
+  0xf0,0x6f,0x3d,0x1f,0x53,0xe7,0xad,0x14,0x5f,0x85,0x3f,0xb0,0x27,0xce,0x04,0xd6,
+  0x8b,0x6f,0x58,0xfc,0x9c,0x97,0x81,0x0b,0x38,0xd6,0x25,0x8a,0xf8,0x7b,0xed,0x52,
+  0x67,0xe3,0xcb,0xc5,0xc8,0x4f,0x62,0xf8,0x09,0x9e,0xf7,0xe1,0x6c,0x57,0x9c,0x63,
+  0xf3,0xb4,0x74,0xfa,0xe1,0xf8,0xef,0x02,0x4f,0x8b,0xcc,0xe2,0xa7,0xb0,0x9f,0xf5,
+  0x66,0x2a,0xbf,0xeb,0x6b,0xf4,0xee,0x8c,0xf5,0xf4,0xa8,0x63,0x62,0x83,0x8b,0x9f,
+  0x07,0xb5,0x27,0xd5,0x4a,0xd5,0x37,0x49,0x2e,0xc3,0x43,0xea,0x0d,0x39,0xdf,0x3d,
+  0x84,0x99,0xf1,0xa9,0x96,0x1f,0x86,0x1d,0x68,0xfb,0x7e,0x42,0xb6,0xe2,0xc4,0xaf,
+  0xd1,0x70,0x8e,0xe5,0x6c,0x7e,0xfe,0x88,0x3e,0xdb,0xbb,0x5f,0x0b,0x64,0xc4,0xd3,
+  0xf4,0x34,0x02,0x11,0xa1,0xfe,0x98,0xcd,0xcf,0x3c,0x7d,0xbd,0x2b,0xf1,0x8b,0x40,
+  0xb6,0x70,0x02,0x41,0xba,0x50,0xd3,0x81,0x6f,0xf1,0xf3,0xb2,0xf7,0x4d,0xa8,0xa7,
+  0x01,0xad,0xa7,0x09,0x4e,0x43,0xbd,0xe6,0x9d,0x14,0x35,0x8b,0x9f,0x94,0x62,0x7c,
+  0xd6,0x74,0xf4,0x6f,0x17,0xef,0x2b,0xef,0x27,0x61,0x0d,0x85,0x9a,0xcd,0x4f,0x4f,
+  0x14,0x1e,0x83,0xf0,0xa8,0x2f,0x43,0xf6,0xc2,0xbf,0x00,0x6f,0xc3,0xd8,0x35,0xe3,
+  0xb3,0x5c,0x95,0xfb,0x20,0x92,0xf3,0x2d,0x21,0x13,0xd0,0xa3,0xaa,0x47,0x71,0x1e,
+  0x0d,0x99,0xeb,0x3b,0x78,0xd6,0xc0,0x1b,0x6a,0x7c,0x79,0xe0,0xd1,0xb2,0x83,0xf0,
+  0xab,0xf5,0xf5,0x43,0xd1,0xc7,0x45,0xcd,0x8c,0xcf,0x4c,0x45,0x9e,0x0e,0xd2,0xe6,
+  0xe5,0x81,0x7a,0xf1,0x3e,0xb8,0x54,0xd9,0x3c,0x54,0xfc,0x76,0x8f,0xc3,0xcf,0x8b,
+  0xf0,0x2e,0xbb,0x99,0x46,0xcf,0x63,0xdb,0x1f,0xa0,0x5e,0x2d,0x76,0xf1,0x13,0xff,
+  0x6c,0xee,0x0d,0x83,0xbc,0x83,0x24,0xc8,0x56,0xd4,0x98,0xf2,0xa0,0xa3,0x3f,0xdb,
+  0xc7,0xe0,0x59,0xae,0x43,0xb2,0xa8,0x89,0x7a,0x40,0x6d,0x41,0x5f,0x1c,0xfd,0x99,
+  0x41,0xee,0xea,0xf7,0x45,0x49,0xbf,0x90,0x41,0x3d,0x08,0x16,0x3f,0xc1,0xf3,0x06,
+  0x3d,0xc7,0x96,0xe4,0xa2,0xd7,0x88,0x6b,0xc8,0x71,0x88,0xaf,0x45,0xbe,0x68,0x16,
+  0x3f,0x4b,0xb3,0xf0,0x3e,0x7c,0x4c,0x0a,0x8c,0xfa,0x5e,0x41,0x40,0xe9,0x6b,0x8e,
+  0xa3,0x3f,0xbf,0x8b,0xf3,0xaf,0x71,0xc4,0xff,0x80,0xb8,0x86,0xbd,0x09,0xf1,0xf6,
+  0x5a,0x97,0xfe,0xf4,0x00,0xca,0x0f,0xfc,0xbc,0xed,0xad,0x1f,0x53,0x37,0x9e,0x0a,
+  0xbb,0xf5,0xa7,0x86,0x1a,0xbc,0x3b,0x19,0x59,0x1b,0x52,0xc8,0x0a,0x78,0x84,0x0d,
+  0xa0,0x60,0x76,0xf8,0x89,0xa2,0x1d,0xf5,0x67,0xaa,0x6f,0x25,0xf9,0x0e,0x6c,0x64,
+  0x95,0x29,0x5c,0xe8,0x6d,0xfd,0xb9,0xd2,0x23,0x1d,0x86,0x06,0xea,0x0f,0x8a,0xcb,
+  0xd9,0x6f,0x21,0x86,0xef,0xae,0xcc,0xd6,0x9f,0x73,0x1f,0x47,0xf7,0x12,0xed,0x01,
+  0xc5,0xf7,0x45,0xf5,0x6d,0x5c,0xab,0xb8,0x16,0x0e,0xa6,0xcc,0x79,0xab,0xc1,0xc9,
+  0xae,0xf8,0x21,0xbf,0x22,0xd6,0x2a,0xc7,0xc3,0x71,0xea,0xcf,0xb6,0xd9,0xfc,0x14,
+  0xd2,0x70,0x3f,0xc7,0x66,0x07,0xd9,0x02,0x1b,0x23,0x55,0x34,0xe2,0xf0,0x53,0x85,
+  0x27,0xe1,0xdb,0xa8,0x31,0xbd,0x49,0x32,0x1f,0x7a,0xb2,0x37,0xe4,0x65,0x87,0x9f,
+  0x9d,0xe5,0xc3,0xf0,0x80,0xa6,0x6a,0xde,0xb9,0xad,0x5b,0xa0,0x87,0x0c,0x0c,0x0d,
+  0x70,0x7e,0x9a,0xfa,0x53,0x1a,0x84,0x57,0x59,0x7d,0x57,0xdd,0xeb,0x81,0x88,0x72,
+  0x0c,0x6e,0x31,0xf8,0x69,0x3c,0x33,0x89,0x7c,0x19,0x0f,0x1d,0x84,0xe2,0xae,0xc2,
+  0x3c,0x2e,0x60,0x4b,0x84,0x69,0xfa,0x73,0x0f,0xaa,0xb7,0x04,0x55,0x1f,0x10,0xab,
+  0xe1,0xf5,0x4c,0x9c,0x6e,0x99,0xce,0xcf,0xef,0x73,0x59,0x16,0x22,0x12,0xdd,0xa4,
+  0xed,0xee,0x90,0x5d,0xfc,0xf4,0x54,0xc3,0x26,0x5a,0x47,0xbd,0xc8,0x25,0xe5,0xfb,
+  0xb2,0x3a,0x94,0x9c,0xce,0xcf,0x5d,0x10,0xfd,0xc4,0x66,0x85,0x48,0xac,0x4b,0x05,
+  0x2a,0x2b,0x76,0x7c,0x0e,0xce,0x3b,0x43,0x91,0x9f,0xe5,0xdf,0xca,0x88,0x2a,0x8c,
+  0x43,0x90,0x0b,0x51,0x8b,0x9f,0x83,0xf3,0xde,0xe1,0xaf,0xbb,0xfd,0x93,0x93,0xbe,
+  0x31,0x7a,0x21,0xd8,0xec,0xe6,0x67,0x83,0x67,0x0c,0x7e,0x0e,0xf1,0x9c,0x7f,0xd4,
+  0x77,0xe3,0xee,0x9f,0x57,0x2f,0xe6,0xfa,0xf3,0x51,0x8b,0x83,0x90,0x67,0xa7,0x20,
+  0x1c,0x92,0x19,0xa9,0xc4,0x80,0x0c,0xcb,0x32,0xe7,0xa7,0x31,0x66,0x49,0x3a,0xa6,
+  0x76,0x41,0x66,0x59,0x0e,0x59,0xae,0x74,0x51,0xb5,0x55,0xd7,0x9f,0x46,0xff,0x90,
+  0x9f,0xf0,0x30,0xca,0xe3,0xbe,0x34,0xc1,0xce,0x80,0x9a,0x73,0xeb,0x4f,0xcf,0x11,
+  0xf5,0x28,0x8b,0xd3,0xe8,0xf6,0xeb,0x25,0xe1,0x28,0xec,0x5f,0x89,0x02,0x7d,0xc0,
+  0x8c,0xcf,0x4e,0xe5,0x51,0x76,0x81,0x26,0xb4,0x40,0xfa,0xc7,0x63,0xf0,0x16,0xcf,
+  0x2d,0xa6,0xf3,0xf3,0xbc,0xba,0x04,0x9a,0x58,0x59,0x5e,0xca,0xf5,0xc6,0x25,0x97,
+  0xfe,0x94,0xa5,0x06,0x78,0x52,0x0b,0x67,0x42,0x77,0x93,0x8b,0xa8,0x3f,0xab,0x98,
+  0xcc,0xf5,0xa7,0x39,0x66,0x9e,0xe5,0xf2,0x3e,0xad,0xfa,0x8c,0x1c,0x21,0x43,0x87,
+  0xbb,0x21,0x93,0x77,0xeb,0xcf,0x96,0xb9,0xda,0x13,0xb2,0xda,0x83,0xcb,0xec,0x28,
+  0x6c,0x84,0x2a,0xbe,0xde,0x5a,0xfc,0x8c,0x84,0xe6,0xc3,0xbf,0xb3,0x9b,0x7e,0x27,
+  0xaf,0x17,0x87,0x30,0x81,0x5c,0x9c,0xf1,0xaf,0x2f,0x73,0xf8,0x79,0x50,0x7d,0x8b,
+  0x24,0x1e,0xd6,0x71,0xf4,0x36,0x26,0x74,0x7f,0x8f,0xfc,0x34,0xe3,0x33,0x25,0x3d,
+  0x47,0x87,0x32,0x07,0xc6,0xfc,0xeb,0xab,0xf6,0xd3,0x17,0x58,0x73,0x2a,0x7a,0xa1,
+  0xca,0xd6,0x9f,0xb0,0x93,0xdc,0xbf,0xa3,0x72,0x8b,0xfc,0x0f,0xb7,0x06,0xbb,0x37,
+  0x42,0x2d,0x2d,0x76,0xe9,0x4f,0xba,0x53,0xda,0x08,0x95,0x87,0xe5,0xb5,0xdd,0x8c,
+  0x3d,0x04,0x8b,0x40,0x46,0xfd,0x69,0xc6,0x27,0x2d,0xff,0x21,0xed,0x26,0x99,0xac,
+  0xdc,0x84,0x0e,0x3c,0x08,0x51,0xcc,0xe6,0x89,0xad,0x3f,0x3d,0x3f,0x81,0x43,0x2c,
+  0xce,0xa2,0x07,0xc5,0x01,0x5c,0x8b,0x13,0x1a,0xd7,0x13,0xd6,0x58,0x2b,0x97,0xe1,
+  0x02,0x6d,0x86,0xc0,0x7e,0xdf,0x38,0xbc,0x29,0x25,0x3a,0x02,0x2e,0xfd,0xd9,0x71,
+  0xb9,0xfa,0xe7,0xb0,0xa4,0xdb,0x3f,0x29,0x3e,0x83,0xc1,0x51,0x7f,0x4e,0x42,0xfd,
+  0x29,0x59,0xfa,0x73,0x0d,0xd9,0x94,0x0f,0x43,0xa4,0x29,0x18,0x81,0x03,0xc8,0xa5,
+  0x1a,0x97,0xfe,0x44,0x0e,0x6e,0x62,0xd5,0x1f,0x45,0xf6,0xec,0x4a,0x3f,0xcd,0xc2,
+  0xd4,0xeb,0xe2,0xa7,0xe4,0x07,0xa6,0xaa,0x80,0xaf,0xdb,0x5f,0x79,0x80,0xb7,0xb9,
+  0xf8,0x19,0x6a,0xc2,0x75,0x7a,0x09,0xa0,0x7b,0x03,0xc8,0xf2,0xfd,0x38,0x6f,0xc5,
+  0xbc,0xc5,0xcf,0x79,0xaf,0xc0,0x65,0x05,0xfd,0x9c,0xf4,0x4d,0xa0,0x2f,0x1f,0xe3,
+  0x5c,0x72,0xf8,0x39,0xc1,0x87,0x31,0x73,0x5d,0x56,0xfc,0xad,0xf2,0xcb,0xca,0xfa,
+  0x51,0xbf,0x9b,0x9f,0x63,0xc8,0xc1,0x3a,0xf6,0x85,0x9d,0x24,0xdf,0xf7,0x03,0x16,
+  0x1e,0x91,0xf7,0xe3,0x34,0xb4,0xf4,0x67,0xae,0xa7,0x07,0xd6,0x30,0xdf,0x8d,0x64,
+  0x18,0xf5,0x67,0xe4,0x90,0x1c,0xdf,0x7d,0xce,0xe6,0xe7,0x00,0xcf,0xfb,0xd3,0xbe,
+  0x6c,0xc1,0x18,0xfc,0x40,0x88,0x68,0x0d,0x6e,0x7e,0x62,0x7e,0x0b,0x89,0xb5,0xbe,
+  0x6c,0x4f,0x5e,0x39,0x0d,0x8d,0xa3,0xe8,0xa7,0xf5,0xfe,0xf2,0xa5,0x5c,0xd7,0x35,
+  0xaf,0x0d,0x8c,0x8a,0xe7,0xe5,0x3f,0xc2,0x12,0xcc,0xdf,0xab,0xce,0x5b,0xba,0x55,
+  0xd9,0xcb,0xef,0xc3,0x6e,0x55,0xe5,0xb1,0x7f,0xf1,0xd1,0xa8,0x9b,0x9f,0x75,0x05,
+  0xf8,0x79,0x1c,0xd3,0xe3,0xf0,0xe3,0x56,0x7d,0x3d,0x7a,0xd7,0xe6,0xa7,0x9f,0x3e,
+  0x28,0xe0,0x1a,0xae,0x62,0x32,0x7b,0x40,0xa5,0x80,0xf1,0x39,0x69,0x0e,0x99,0x0a,
+  0x05,0xf4,0x21,0xb6,0xe8,0x51,0x39,0x49,0xce,0xf5,0x7e,0xaf,0xbb,0x52,0x2d,0x5a,
+  0x5f,0xf0,0xbe,0x59,0xf3,0x48,0x86,0xbc,0xec,0x97,0x6a,0x62,0xa0,0xb6,0x51,0x3c,
+  0x02,0x6f,0x67,0x63,0xe3,0x3b,0x6f,0x71,0xf2,0xf7,0xb9,0x03,0xf4,0x4d,0x4c,0x17,
+  0x03,0xfb,0xc4,0x61,0x9e,0x28,0x0d,0xbb,0x6a,0x09,0x72,0x85,0xde,0xbf,0x54,0xf1,
+  0x00,0x72,0x02,0x0d,0x75,0x39,0xc6,0xae,0xcd,0xcf,0xed,0x32,0x0f,0x4b,0x99,0x42,
+  0x48,0xfe,0x1e,0xe5,0x31,0x88,0x9c,0x4f,0x99,0xbe,0x7c,0x07,0xbe,0xc7,0x16,0xa5,
+  0x8a,0x1a,0x48,0x1c,0xbe,0x97,0xa9,0xcd,0xeb,0x2c,0x37,0x9e,0xd9,0x59,0x3e,0xb2,
+  0xe1,0x11,0x21,0x2a,0xa3,0xeb,0x11,0xfa,0x08,0xe8,0x39,0xde,0x4b,0x96,0xfe,0x2c,
+  0x7f,0x1a,0xde,0x20,0xcd,0x83,0xc5,0x79,0xb1,0x01,0x5e,0xc3,0xb9,0x22,0x23,0x3f,
+  0xcd,0x18,0x4c,0xe2,0x1b,0xdc,0x21,0x24,0x74,0xfd,0xa9,0x0e,0x1a,0x89,0xfc,0x49,
+  0xcb,0x4f,0xe4,0xe7,0x51,0x03,0x01,0x63,0xf0,0x3a,0x31,0xf5,0xa7,0xd1,0xc6,0xa4,
+  0x6a,0xc2,0xf5,0x27,0xca,0xb2,0x31,0x61,0x13,0x10,0x5d,0x7f,0x0a,0x2e,0x7e,0xc2,
+  0x42,0x2a,0x60,0x1b,0x7c,0x9f,0x86,0x35,0x9f,0x9b,0x9f,0x12,0xcf,0xdf,0x69,0x7f,
+  0x90,0x0c,0xc3,0x26,0x35,0x93,0xf4,0xb9,0xf9,0xd9,0x42,0x73,0x9e,0x25,0xe5,0x98,
+  0xb6,0x9f,0xa1,0x03,0x10,0x2f,0x0f,0x6c,0x10,0xcf,0x16,0xda,0xfc,0x6c,0xbf,0x80,
+  0xe3,0x12,0xf8,0x45,0xdb,0x8b,0xca,0x05,0x2e,0x44,0xd3,0xe2,0x59,0x9b,0x9f,0xef,
+  0xc0,0x7b,0x18,0xb2,0xc5,0xe9,0x1e,0x14,0xa2,0x03,0xf1,0x95,0x81,0xed,0xe2,0x59,
+  0xb0,0xf8,0x79,0x66,0x74,0x10,0xea,0x36,0xcb,0xbd,0xf0,0x06,0x1b,0x40,0x7e,0xde,
+  0x46,0xd0,0x17,0xb3,0xef,0x9e,0x5e,0x75,0x1f,0xf6,0xa1,0x48,0x51,0x86,0x11,0xa4,
+  0xea,0x4a,0x5f,0x90,0x58,0x6b,0x47,0xa8,0xfc,0x7b,0xf0,0x34,0xd4,0xb5,0xd3,0x74,
+  0x10,0xfb,0x80,0x1a,0xda,0x97,0x9e,0x73,0xc4,0x63,0xce,0x69,0x09,0x73,0x74,0x29,
+  0x41,0x8b,0x77,0xf4,0xfc,0x0e,0x0e,0x09,0xf1,0x3b,0xd1,0x97,0x71,0xeb,0x3d,0xe0,
+  0x98,0x5d,0xe0,0x63,0xf6,0x80,0x38,0xa6,0x5c,0x82,0xe7,0xf8,0x98,0xbd,0x64,0x69,
+  0x4c,0x65,0x17,0xcb,0x41,0x1c,0xfc,0xac,0xb0,0x92,0x0b,0x6d,0x01,0xf9,0xe9,0x35,
+  0x63,0x49,0x96,0x6e,0xc1,0xf5,0xbd,0x92,0x63,0xb3,0x01,0x36,0x2b,0x75,0x5d,0x68,
+  0x98,0xa9,0x21,0xf2,0x73,0x05,0x97,0x1f,0xda,0x35,0x31,0x12,0x55,0x7a,0xa8,0xfe,
+  0x6e,0x5b,0xed,0xfc,0xe8,0x23,0x7c,0x59,0x3f,0xe4,0x5d,0x4f,0xe6,0x22,0x3f,0x6b,
+  0x27,0x30,0x26,0x92,0x36,0x3f,0x9f,0xe3,0xd8,0xcc,0x97,0x34,0x90,0xeb,0xd0,0x68,
+  0xca,0xfb,0xef,0xab,0xba,0xb5,0xc0,0x7c,0xe6,0xbc,0x3d,0x88,0xcd,0x3a,0xad,0x98,
+  0xd7,0xc8,0x2e,0xd1,0xc4,0xc9,0x40,0xb6,0xa7,0xdb,0xcc,0xdf,0x53,0xe5,0xcf,0xd1,
+  0x17,0xd2,0x89,0x31,0xff,0x85,0xaa,0xbb,0xe9,0xe9,0xd1,0xe6,0x31,0x14,0xa2,0x21,
+  0xb3,0x7f,0x03,0x32,0x97,0x11,0x75,0xaf,0xc9,0xeb,0xc3,0xaf,0xc2,0xc6,0x5d,0xd1,
+  0xbc,0x38,0x48,0x6a,0xcc,0xfe,0x01,0xec,0xe4,0x2e,0x68,0xf2,0x3a,0x72,0x9f,0xfa,
+  0x90,0x52,0x3b,0xec,0x5b,0x4b,0x0a,0x2c,0x7e,0x4a,0x5b,0x48,0x0f,0xd4,0xfd,0x06,
+  0x5d,0xc7,0x44,0x09,0xe3,0x13,0xf5,0xa7,0x62,0xde,0x37,0x50,0xf1,0x18,0xe3,0xf3,
+  0x3d,0x3a,0x58,0xf5,0x4d,0xf2,0x32,0x34,0x1f,0x42,0x08,0xd5,0x99,0x31,0x9f,0x81,
+  0x33,0x7c,0xfa,0x68,0x81,0x7d,0x82,0xee,0x27,0xd7,0x9f,0xe3,0x92,0xa5,0x3f,0xc7,
+  0x75,0x09,0x85,0xfc,0xbc,0x8c,0x09,0x72,0xb3,0x76,0x1b,0xf2,0x73,0xb5,0xc5,0xcf,
+  0x55,0xea,0xb3,0xd8,0xbf,0xbe,0x2c,0x79,0x05,0x5e,0x4e,0xd5,0x61,0xbe,0x19,0x76,
+  0xf2,0xf7,0x35,0xa8,0xeb,0x38,0x0b,0x50,0x63,0x22,0x14,0x0e,0xf1,0xdc,0xde,0xce,
+  0xdf,0xfd,0xec,0x80,0x1a,0x3d,0x25,0xc7,0xc9,0x84,0xfa,0xa0,0xba,0x26,0x77,0x5b,
+  0x3d,0xb1,0xf3,0xf7,0xd0,0x1a,0x0d,0x7d,0xb9,0x55,0x7e,0xaa,0x07,0x27,0x70,0x43,
+  0xf3,0xa9,0xc0,0xb9,0x9e,0x7c,0xd8,0xca,0xdf,0x27,0xb4,0x4b,0xc1,0xe6,0x5c,0x60,
+  0x7f,0xd9,0x2b,0x91,0x8b,0x6a,0xe2,0x44,0x60,0x7f,0xd5,0x78,0xa1,0xc5,0xcf,0xf7,
+  0xe1,0x05,0x96,0xe0,0x69,0xfb,0xfb,0x70,0x99,0x4d,0xcb,0xdf,0x35,0xe5,0x35,0x82,
+  0xfc,0xcc,0xfb,0x06,0xc9,0x59,0x18,0x84,0x30,0x37,0x2c,0x7d,0x9d,0x5c,0x3a,0xa1,
+  0x98,0x43,0x35,0x02,0x59,0x0c,0x00,0x9f,0x5b,0x7f,0xee,0xe1,0xae,0xf3,0x34,0x7a,
+  0x02,0xb2,0x4a,0x98,0x1b,0x16,0x3f,0x59,0xc5,0x30,0xc7,0x0a,0x1f,0xaa,0x09,0x38,
+  0xaf,0xc5,0xb9,0xa1,0x59,0xfc,0x14,0xb8,0xae,0xe3,0x69,0x3b,0x8e,0xd9,0x65,0xc3,
+  0x70,0xf8,0xb9,0xc7,0x18,0x6b,0xfd,0x3e,0xd0,0xef,0xb3,0x98,0xd5,0x87,0x73,0xfa,
+  0x59,0xfd,0xf3,0x5a,0x27,0xb8,0x9f,0xd3,0xf3,0xf7,0xe5,0x70,0x60,0x86,0x9f,0x16,
+  0x3f,0x33,0x5d,0x73,0x30,0xf3,0xad,0xe5,0x69,0xfb,0xab,0xf0,0x04,0xd3,0xf3,0xf7,
+  0x53,0x66,0x5b,0x52,0xf6,0x63,0x0c,0x36,0xe5,0x03,0x31,0xf1,0x84,0x76,0x9e,0xc6,
+  0x34,0x34,0x4e,0x9a,0xf1,0x49,0xe7,0x99,0x7e,0x66,0xd1,0xcf,0x29,0xc3,0xa9,0xd1,
+  0x02,0x33,0x5e,0x3c,0x63,0xb2,0xe1,0x27,0xe6,0x24,0x17,0x0c,0x3f,0x6d,0x7e,0x6e,
+  0xdb,0x0e,0x4f,0xe9,0xa5,0x23,0x7c,0xef,0x4f,0xc0,0x2e,0x6e,0x9c,0x34,0x63,0x89,
+  0xc1,0xb7,0x2d,0x5f,0xbe,0x23,0x99,0xbe,0xe4,0xec,0xfc,0xfd,0x88,0xd3,0x87,0x7d,
+  0x49,0xbd,0x0f,0x2f,0x39,0xf5,0x4f,0x76,0x11,0x12,0x0c,0xf3,0xa3,0x71,0x78,0x57,
+  0x8d,0x73,0xe3,0xa2,0x75,0x9f,0x53,0xff,0xb4,0x0d,0x87,0x9f,0x63,0x9c,0x05,0x2d,
+  0x3a,0x3f,0xcd,0x5c,0xd4,0xe1,0xe7,0x6a,0xce,0x17,0x9d,0x9f,0x68,0x84,0x8d,0xfc,
+  0xdd,0x0c,0x33,0x1c,0x6b,0x57,0xdb,0x42,0x3a,0x9d,0x9f,0xb0,0x0f,0xf9,0x89,0xd8,
+  0x1c,0xc6,0x36,0x9e,0xbf,0x3b,0xfc,0xc4,0xfc,0xdd,0xf6,0x65,0xb2,0x63,0x09,0x37,
+  0x2c,0x7e,0xe6,0x50,0x7f,0x5e,0xb0,0x58,0xfe,0x9e,0x61,0x9c,0xb5,0xeb,0x9f,0xc3,
+  0x4e,0x1b,0xfa,0xd9,0x52,0x98,0xb6,0xf9,0xb9,0x1e,0xf5,0x35,0xf2,0x13,0x30,0x6d,
+  0x47,0x23,0x12,0xe6,0x86,0xc5,0x4f,0x19,0xef,0xdb,0x27,0x44,0xe9,0xb5,0xba,0x2f,
+  0x6a,0x35,0xf7,0xe5,0xa4,0x39,0x2e,0xa1,0xcf,0xee,0x91,0x78,0x1f,0xae,0x75,0xf5,
+  0xef,0x88,0xd9,0xf7,0x4c,0xb9,0xce,0xc8,0x96,0x15,0xe9,0xb2,0x31,0xe5,0x2d,0x45,
+  0x1f,0x17,0x9b,0x9f,0xb0,0xc7,0x3d,0x66,0x89,0xe9,0xfc,0xcc,0x40,0x8e,0x60,0xce,
+  0x6c,0x8c,0x35,0x2f,0x9a,0x94,0x39,0xf5,0xcf,0x88,0xb4,0xb9,0xa0,0xae,0x0b,0x73,
+  0xca,0x71,0x78,0x06,0xc2,0x98,0xbf,0xdb,0xf3,0x96,0xe7,0xef,0x7c,0x1e,0x79,0xf9,
+  0xbb,0x3d,0x60,0xc4,0xe7,0x90,0xcd,0xcf,0x84,0xce,0x2c,0x3d,0x5e,0x9e,0x52,0x56,
+  0xf1,0x9a,0x63,0xce,0xd2,0xbb,0xf2,0x7c,0xf2,0x33,0xf6,0xb1,0x7c,0xc9,0x7a,0xcc,
+  0xdf,0xa7,0xd8,0xbe,0x3c,0xe6,0xef,0xc7,0x6c,0x7e,0xee,0xd5,0xe7,0xca,0x75,0x3a,
+  0x3f,0x3b,0xe7,0xeb,0x31,0x68,0xd7,0x3f,0xdf,0xc7,0x1f,0x47,0x6c,0xf2,0xf9,0x3e,
+  0x65,0xcc,0xf7,0x53,0x16,0xeb,0x4a,0x77,0xb2,0xa7,0x84,0xda,0x71,0xfc,0xbc,0x13,
+  0xf0,0x53,0xb8,0x89,0x7f,0xde,0x1b,0x66,0x5c,0x83,0xb6,0x33,0x86,0xb1,0x9b,0xe3,
+  0xbe,0x28,0x3f,0xc5,0x24,0x0a,0x0d,0xa7,0xfe,0x79,0x16,0xe7,0x9f,0x19,0x9f,0x07,
+  0x52,0xd5,0xdc,0x18,0xb5,0x98,0x5c,0xf1,0x23,0x73,0xde,0x22,0x0b,0xa6,0x54,0x3e,
+  0x1f,0xca,0xce,0xda,0x31,0x8f,0xee,0x09,0xc6,0x9c,0x56,0x0c,0x87,0x0b,0xc7,0x9d,
+  0xfc,0x1d,0xd3,0xf6,0x9b,0x11,0x01,0x85,0x7c,0x8e,0x61,0xde,0x3f,0xd9,0x96,0xa7,
+  0x66,0x7e,0x04,0x6b,0xf4,0xfa,0xa7,0x2f,0x2b,0xee,0xc5,0x31,0x0b,0x73,0x46,0x9e,
+  0x71,0xe9,0xcf,0x7f,0x81,0x85,0x06,0x7b,0x9e,0x25,0x35,0xdc,0xc8,0x0b,0x56,0x7c,
+  0x46,0x85,0x7e,0x50,0x87,0x7c,0xb1,0xd6,0x91,0xea,0x67,0x41,0xaf,0xe5,0x0d,0x99,
+  0x6b,0x1c,0xc8,0x51,0x78,0x19,0x96,0x70,0x3f,0x7f,0xaf,0x4d,0x41,0xa3,0x5e,0x4b,
+  0x10,0x2d,0x7e,0xea,0xd3,0x7c,0x08,0x71,0xb4,0xd7,0x04,0x54,0x95,0x55,0xd3,0xd1,
+  0x84,0xb3,0xf4,0x52,0x3a,0x80,0x64,0x56,0x9b,0x20,0x17,0xa9,0x19,0xeb,0x1f,0x74,
+  0xf8,0x29,0x4f,0x30,0xe4,0x92,0x2a,0xf7,0x91,0x1a,0xda,0xaf,0x21,0xa0,0x90,0x9f,
+  0x05,0x46,0x1f,0x72,0x9e,0x91,0xa2,0x03,0x6a,0x04,0xfa,0x14,0xe2,0xe7,0x1b,0x34,
+  0x47,0xdd,0xfc,0x14,0xf6,0x72,0x9e,0x09,0x91,0x34,0x89,0x74,0xf7,0xf7,0xe9,0x20,
+  0x9d,0x34,0xc7,0x0c,0x2a,0x78,0xa9,0xa3,0x31,0xe5,0xcf,0xf8,0xa2,0x70,0x9c,0x35,
+  0x1a,0x1c,0x74,0xea,0x9f,0x53,0xf0,0xc5,0xd5,0x81,0x14,0x7f,0xb7,0x26,0x3f,0xcd,
+  0xfb,0x3a,0x94,0xbd,0xd2,0x25,0x2f,0xd7,0x9f,0x18,0x13,0xc7,0x69,0x7c,0xc8,0xef,
+  0xd6,0x9f,0xd1,0xd0,0xb3,0x14,0xd7,0x9c,0xc1,0xee,0x13,0xf0,0x72,0xdf,0x92,0x51,
+  0x77,0xfe,0xce,0xf9,0x49,0xa3,0x4c,0x96,0xc9,0xb0,0xdc,0xc3,0xd4,0xd1,0x1b,0x38,
+  0x3f,0x8d,0x71,0x39,0x0f,0x5f,0xa2,0x4f,0xb1,0x28,0xea,0xcf,0xe0,0xc5,0xc8,0xbf,
+  0x66,0x16,0xe4,0x8b,0xbe,0x41,0x72,0xa6,0xae,0x4b,0xe2,0x4c,0x78,0x3b,0xd3,0x34,
+  0x10,0x0d,0x89,0xaf,0xb1,0xe3,0x99,0xf8,0x78,0x71,0x03,0xea,0x4f,0xa3,0x8d,0xce,
+  0x3b,0x98,0x9c,0x52,0x12,0x7d,0x7c,0x6a,0x51,0x0c,0x00,0xae,0x3f,0x3b,0x4c,0xce,
+  0xcb,0x15,0x67,0xe1,0x07,0x2c,0xae,0x49,0x0b,0x7b,0xaa,0xe1,0x70,0xd7,0x7e,0x5e,
+  0xff,0x1c,0x32,0xfb,0x97,0x2b,0x3d,0x88,0xf3,0x41,0xd0,0xe4,0x94,0xae,0x27,0xf4,
+  0xfa,0xe7,0xed,0x76,0xfe,0xce,0xd7,0x7e,0x15,0x65,0x67,0x4d,0x81,0xb0,0x95,0xd5,
+  0x9e,0x91,0x1d,0x7e,0xa2,0xfe,0xe4,0x43,0x3c,0x2a,0x2f,0x26,0x7e,0x66,0x6a,0x94,
+  0xcf,0x5b,0xfc,0xf4,0x8c,0xc3,0x31,0x50,0x59,0x64,0x00,0x65,0xc4,0x89,0x64,0x42,
+  0xd7,0x9f,0x56,0xfe,0x2e,0x60,0x4e,0x09,0x4b,0x88,0xc1,0x4f,0x4a,0x70,0x4e,0x23,
+  0x43,0x0c,0x5f,0x64,0xce,0x02,0x05,0x75,0x96,0xd2,0x76,0x7d,0xd1,0x51,0x39,0x31,
+  0x83,0x9f,0xf2,0xd3,0x43,0x98,0xbf,0xef,0xe0,0xf9,0x6d,0xa6,0xce,0xad,0x3f,0x1b,
+  0x38,0x3f,0xe5,0xba,0xf6,0xa2,0x93,0x64,0x0f,0x7c,0x5f,0xd5,0xdb,0x4e,0x58,0x9a,
+  0xa8,0x9c,0xf3,0xb3,0x36,0x29,0xdf,0xee,0xed,0xed,0xdb,0xa5,0xae,0xa1,0xa2,0x42,
+  0x8e,0x55,0x18,0xaf,0x7d,0xb0,0x78,0x15,0x9d,0xfc,0x74,0x02,0xbe,0xa8,0x95,0x65,
+  0x30,0x51,0x6c,0xda,0x1e,0x70,0xd5,0x3f,0x2b,0xc6,0xb8,0xe6,0x6b,0xbf,0x6e,0x5b,
+  0xd5,0xd7,0x5b,0xbf,0x18,0xe4,0xbe,0x54,0xbd,0x66,0x8e,0xd9,0x0e,0x61,0x0c,0xfe,
+  0x27,0xea,0x90,0xad,0xa3,0xe2,0x8d,0xca,0x7b,0x6a,0x73,0x47,0x49,0x1a,0x13,0x02,
+  0xa3,0x7f,0x0d,0x21,0xc6,0x06,0x55,0xe4,0x67,0xc6,0xab,0xc2,0x33,0xb4,0x4e,0xbe,
+  0x16,0xf3,0x77,0x33,0x3e,0x93,0x52,0xaf,0xba,0x4d,0x8e,0x76,0xf8,0xca,0x17,0x7a,
+  0x04,0x0c,0x00,0xfa,0xcf,0x4a,0xc1,0x49,0xc1,0xe8,0x5f,0x48,0xda,0x63,0xad,0x01,
+  0xd5,0xc2,0xd3,0x7a,0x1f,0x5a,0x8f,0x98,0x63,0xcd,0xf7,0x8f,0x7e,0x2d,0x20,0x23,
+  0xb7,0xaf,0xaa,0xd6,0x19,0xe9,0xaa,0x7f,0x26,0x05,0x43,0x7f,0x6e,0x4d,0xb7,0xd9,
+  0xfc,0xb4,0xd6,0x3f,0x99,0xf3,0x93,0xeb,0x4f,0xc9,0x87,0x86,0x51,0xff,0xb4,0xc6,
+  0x33,0xe2,0x89,0x60,0xda,0x1e,0x66,0x90,0x21,0x68,0x08,0x37,0x67,0xfa,0xa7,0xd7,
+  0x3f,0x51,0x7f,0x0e,0xb3,0x06,0xf2,0x29,0xcc,0x7d,0xf5,0x39,0x6d,0xe5,0xef,0xec,
+  0xd3,0xf3,0xb5,0xfb,0x71,0x29,0xc5,0x9c,0xf9,0x34,0x3c,0xd8,0xbd,0x60,0x1b,0x32,
+  0x2b,0x6f,0xd6,0xb6,0xfb,0xe4,0xf9,0xec,0x85,0xee,0x58,0xde,0xdf,0x20,0x9e,0x80,
+  0x5f,0xa1,0x10,0x5d,0xb1,0x5e,0xfc,0x8d,0xbd,0x7f,0x64,0xf0,0x73,0x51,0x56,0x8c,
+  0xc2,0x9b,0x68,0x6c,0xe5,0x6b,0xb8,0xe1,0x27,0x95,0x7e,0x8c,0xf3,0xbd,0x78,0xac,
+  0xe4,0x69,0xf1,0x6e,0xfa,0x74,0xfa,0x33,0xf9,0x15,0xe7,0x05,0xcd,0x62,0x5d,0xe8,
+  0x3b,0xf0,0x24,0x8b,0xe6,0xe5,0x8b,0xa4,0x04,0xfe,0xa9,0xa7,0x72,0x2f,0xae,0xe1,
+  0x36,0x3f,0x51,0x7f,0x3e,0x05,0x37,0xe4,0xbc,0x93,0xe4,0x4e,0xf5,0x09,0xb5,0x52,
+  0xeb,0x5f,0x5b,0x60,0xdd,0x97,0x92,0xb6,0x08,0x07,0xf4,0xb4,0xa8,0xa0,0x24,0xb2,
+  0x8d,0xa8,0xda,0xb5,0x31,0x3b,0x76,0x07,0x2b,0x0e,0xf2,0xa1,0xd2,0x70,0x8a,0xfc,
+  0x3d,0xbc,0x4d,0xf7,0xd3,0x80,0x93,0xbf,0x73,0x7e,0x9e,0x87,0xf9,0x86,0x26,0xba,
+  0xb4,0x05,0x17,0x57,0xa7,0xfe,0xc9,0x73,0xfb,0x29,0xbe,0x05,0x72,0x5e,0xbc,0xdc,
+  0x7b,0x11,0xca,0x52,0xc8,0x82,0x9c,0x59,0xff,0xdc,0x27,0xa1,0xc6,0xec,0xd5,0x71,
+  0x74,0x56,0x1e,0xd7,0x76,0x53,0xe4,0xcb,0xb8,0xad,0x3f,0xa3,0xb8,0x5c,0xd6,0x0d,
+  0xfb,0xf6,0x23,0x3f,0x9f,0xd6,0x6a,0x72,0xb7,0xb9,0xeb,0x9f,0xc5,0x4a,0x56,0xf6,
+  0x6b,0xbe,0x38,0x19,0xd1,0x76,0x29,0x91,0xbe,0xfe,0xd8,0x03,0x43,0x1e,0xa3,0x77,
+  0xac,0xf8,0x3e,0xae,0x7b,0x86,0x03,0x07,0x7a,0x26,0x32,0xe7,0xd5,0xc6,0x57,0x03,
+  0x4f,0xda,0xf5,0xcf,0xdd,0x15,0xef,0xc1,0x94,0x9c,0x68,0x0f,0x9c,0x6c,0x7b,0x87,
+  0x4d,0xc4,0x10,0xb2,0xfb,0x7b,0x6c,0x7e,0x7a,0xce,0x11,0xcc,0xdf,0xf3,0x81,0x41,
+  0x7d,0x3d,0x6a,0x9e,0xbe,0x7f,0x34,0xa2,0xda,0xfa,0xf3,0x59,0xc3,0x98,0xb4,0xf7,
+  0x8f,0xc6,0x99,0xa5,0x3f,0x05,0x53,0x1c,0xb9,0xf3,0xf7,0x1f,0x98,0xfa,0x53,0x30,
+  0x84,0xa1,0xad,0x3f,0xa1,0xe2,0x90,0xa3,0x3f,0x2f,0x49,0xba,0x91,0x03,0x87,0x9f,
+  0xa7,0x2d,0xfd,0x39,0x35,0x53,0x7f,0xee,0x52,0x8e,0x1b,0xcb,0x02,0x5f,0x28,0x12,
+  0x6e,0xfd,0x99,0xf3,0xdc,0xa0,0x19,0xeb,0x51,0x30,0x6a,0x0a,0xdf,0xe0,0xbb,0xb6,
+  0xfe,0x6c,0xe7,0xec,0xe1,0xee,0x6d,0x91,0x1f,0xd4,0xfd,0x2c,0x38,0x67,0x46,0x44,
+  0x4a,0x98,0x0f,0x5b,0xb9,0xd4,0x3b,0xef,0x7d,0x8e,0x3d,0x64,0x88,0xbf,0xcb,0x66,
+  0x5b,0x52,0x2e,0x26,0xc7,0xa1,0x61,0x02,0xc7,0xe5,0x47,0xec,0x97,0xd0,0xc4,0xf5,
+  0xe7,0x4b,0xb6,0xfe,0x3c,0x68,0xb8,0xf7,0x96,0x78,0x9f,0xf4,0xa6,0xe1,0xa7,0xa3,
+  0x3f,0x5d,0xfa,0xfa,0x12,0x7c,0x73,0x9a,0xfe,0x2c,0xdd,0x49,0x2c,0x3d,0x21,0x98,
+  0x42,0xd4,0xca,0xdf,0xf5,0xfd,0x77,0x4b,0x0b,0x3f,0xd5,0x55,0x3b,0x5d,0x7f,0x9e,
+  0xa5,0xb6,0xd6,0x37,0xc7,0xda,0xae,0x7f,0x56,0x0c,0x22,0x3f,0x4d,0xfd,0x69,0x0a,
+  0xd1,0x3f,0x55,0x7f,0x1e,0x75,0x74,0xdd,0x4c,0x7e,0xda,0xf9,0xbb,0x05,0x9a,0xbc,
+  0x39,0x2e,0x46,0xfe,0x3e,0xbd,0xcd,0xa5,0x3f,0x49,0x97,0xa5,0x3f,0x4d,0x21,0xea,
+  0xe8,0xcf,0x55,0xbc,0xfe,0x39,0xcd,0x17,0x4b,0x7f,0xee,0x28,0x7e,0xc7,0xad,0x31,
+  0xa7,0xe9,0xcf,0x1d,0x98,0xbf,0xcf,0xf4,0xf3,0xac,0xbd,0x7f,0xf4,0x9b,0x4c,0x9f,
+  0xae,0x3f,0xc1,0x16,0xa2,0x8e,0xfe,0x3c,0x22,0xcc,0xf4,0xc5,0xd6,0x9f,0x15,0xbd,
+  0x6c,0x56,0x1f,0x2c,0xfd,0x59,0x31,0x46,0x66,0x7e,0x9e,0xa5,0x3f,0x23,0x26,0x3f,
+  0x3f,0x40,0x7f,0xe2,0xfb,0xfa,0x26,0xef,0x96,0x2d,0xb4,0x6d,0xfd,0xe9,0x69,0x84,
+  0xcd,0x42,0x1d,0xbb,0xcd,0xd0,0x9f,0x75,0xac,0x24,0x23,0x76,0x9b,0xe3,0xc9,0xf9,
+  0x69,0x84,0x65,0xab,0xfd,0x6e,0x87,0xec,0xfd,0xa3,0x50,0xc6,0xd8,0xea,0x2e,0x78,
+  0x45,0x4f,0x5c,0xbc,0x6b,0x49,0x9f,0xbd,0x7f,0x94,0xe8,0xe6,0x21,0x1b,0xe0,0xfa,
+  0xf3,0x8f,0x28,0x44,0x75,0xfd,0x69,0xbe,0xdb,0x79,0x8f,0xd1,0x37,0x9d,0x18,0x4c,
+  0x4c,0xd7,0x9f,0xaf,0x62,0xbe,0x79,0x4b,0x3e,0xf0,0x34,0xce,0xf7,0x4b,0x69,0x7d,
+  0xbe,0x5b,0x75,0xa2,0x81,0xd2,0x1d,0x18,0x83,0xd1,0xf1,0xfe,0x6f,0x60,0x9c,0x3d,
+  0x95,0xd1,0xe3,0xf3,0x0d,0xb3,0x4d,0x81,0x9f,0xc0,0x43,0x92,0xa1,0x3f,0x39,0x48,
+  0xa7,0xeb,0xcf,0x1c,0x99,0x1d,0x9f,0xe6,0x33,0x2b,0x9e,0x51,0xf9,0x74,0x5d,0x61,
+  0xf8,0xa2,0x4f,0x60,0x4b,0x7f,0xa6,0x61,0xcc,0xc9,0x29,0x0d,0xa3,0xcd,0xca,0xdf,
+  0xd3,0xca,0x79,0x3d,0x6d,0xb7,0x59,0xf0,0xc9,0xc9,0xb2,0xfc,0x1d,0x56,0xfe,0xfe,
+  0xd5,0x94,0x9d,0xdf,0x72,0xbe,0xdc,0xe6,0xae,0x7f,0xca,0x30,0xad,0xcd,0x9d,0xbf,
+  0x4b,0x7e,0xa9,0x47,0x8a,0x9e,0xf4,0xdd,0xd8,0x8d,0x7e,0xaa,0xfa,0xa0,0x5b,0x79,
+  0x00,0x2b,0xee,0x24,0xc7,0xd5,0xc4,0x29,0xc4,0xe6,0xef,0x29,0xf7,0xa5,0x38,0x5b,
+  0x96,0x2f,0x70,0xf4,0xa7,0x5e,0x5e,0x98,0x2c,0x43,0x5f,0x14,0xdd,0xa9,0xf1,0xfb,
+  0xed,0xfd,0x77,0x69,0xaa,0x26,0xa1,0xf9,0xf3,0x62,0x53,0xef,0xcf,0x7b,0xe3,0xa9,
+  0xc0,0x80,0x18,0xb3,0xf4,0x27,0x8c,0x40,0x37,0x8d,0x72,0x39,0x57,0x4b,0xfb,0x79,
+  0x6e,0x91,0xf1,0xc6,0x24,0x4b,0x7f,0x4e,0xc0,0x23,0x10,0x4d,0x47,0x1a,0x88,0x5f,
+  0xec,0x81,0x8c,0xe6,0x53,0x49,0xdc,0xe2,0x67,0xe9,0x16,0xba,0x19,0xdb,0xf0,0xbe,
+  0x2d,0x2d,0x3d,0x6a,0x58,0x13,0x55,0x12,0xb3,0xf8,0x29,0x9c,0x85,0xd7,0x93,0x89,
+  0x51,0x7f,0x56,0xa8,0x55,0x8f,0x7b,0xe2,0x67,0x70,0xbe,0xab,0xf6,0xfe,0xd1,0x73,
+  0xf0,0x3e,0x34,0x8f,0xa2,0x7b,0xf7,0x71,0x96,0x8f,0x07,0xf2,0xae,0xfd,0xa3,0xbd,
+  0xe4,0x28,0x8d,0xef,0xf0,0x67,0xab,0xa2,0xda,0x71,0xcc,0x03,0xfc,0x03,0xe2,0x2f,
+  0xcc,0x77,0x74,0xca,0x13,0x65,0x9b,0x61,0xf7,0x0e,0x79,0x7f,0xe9,0xd7,0x50,0x9b,
+  0x86,0x73,0x91,0x3d,0xc4,0x55,0xff,0x44,0x7e,0xa6,0x68,0xe4,0xf1,0xee,0x6e,0xbe,
+  0xbe,0x6b,0x5e,0xd5,0xde,0x3f,0xc2,0xb5,0x0f,0x36,0xa6,0x57,0xe5,0xe5,0xf3,0xe4,
+  0x25,0xb2,0x31,0x5d,0x39,0xe6,0xbd,0x1b,0xf9,0x69,0xdc,0x97,0x0c,0x95,0xc0,0xe1,
+  0x4c,0xac,0xd3,0x3f,0x28,0x3e,0xca,0x5e,0xce,0x66,0xcf,0x94,0xd4,0xb8,0xea,0x9f,
+  0xc8,0x4f,0x05,0xd7,0xaa,0xac,0xb8,0x86,0x1f,0xb8,0x1a,0x2e,0xce,0x8b,0xa3,0x0b,
+  0x0d,0x3f,0x65,0x1c,0x97,0x0b,0x2c,0x4e,0xfd,0xcf,0x88,0x61,0x38,0x0c,0xfb,0x35,
+  0x7f,0x06,0xd7,0x5b,0x53,0x7f,0x0a,0xb8,0x86,0x4b,0x28,0x3b,0xd7,0x79,0x65,0x5d,
+  0x7f,0x7a,0x53,0xe4,0x5c,0xb5,0x71,0x1f,0xea,0x4f,0x75,0x5f,0xb7,0xca,0xb7,0xb0,
+  0xbe,0x0d,0x3f,0x66,0x55,0x79,0x6f,0x27,0xbe,0x77,0xa3,0x7f,0x9d,0xe5,0x27,0xe0,
+  0x00,0x0b,0x6b,0xf2,0x8d,0xdd,0x5b,0xe0,0x91,0xf4,0xea,0xbc,0x37,0x13,0x74,0xf6,
+  0x8f,0x06,0xe0,0x7d,0xb9,0x8a,0x2d,0xcf,0x94,0x0d,0xc2,0x59,0x88,0x0f,0x94,0xe4,
+  0x91,0x9f,0xc6,0x33,0x93,0x7c,0x4f,0xc3,0x98,0xca,0x29,0x08,0xe9,0x39,0xa5,0x7b,
+  0xff,0x48,0xe6,0x08,0x88,0x66,0xab,0xb8,0xf8,0x43,0x87,0xd3,0x65,0x04,0xac,0xfd,
+  0xa3,0x6a,0xf9,0x69,0xe3,0x58,0x8f,0x91,0xdf,0xca,0xe9,0x6e,0xd7,0xf9,0x25,0xb0,
+  0xdb,0xf6,0x61,0x8e,0x2e,0xbb,0xce,0x2f,0x61,0xfe,0x8e,0x61,0x99,0x94,0x83,0x64,
+  0x98,0xed,0xc3,0x98,0x90,0x15,0x2f,0xb1,0xeb,0x9f,0xab,0xe8,0xf9,0x8e,0x6f,0x96,
+  0xcb,0x1e,0xf1,0x0c,0x1a,0xf1,0xf2,0xe8,0x06,0xb1,0xce,0xcc,0x8f,0xf8,0xfe,0xd1,
+  0x7b,0x4a,0xf3,0x70,0x60,0x1b,0xb9,0x4c,0x79,0xb1,0x13,0xc5,0xe6,0xb9,0x42,0xa3,
+  0x0f,0x83,0x1e,0xe4,0xfc,0xe2,0x78,0x8b,0x94,0xee,0xa9,0xee,0x38,0x0a,0xe8,0x67,
+  0xa9,0xb8,0xd0,0xae,0x7f,0x6a,0xac,0x2f,0x16,0x56,0x60,0x0f,0x51,0x69,0x5f,0x24,
+  0x2c,0xcb,0x43,0x64,0xbe,0x9d,0x3f,0x6c,0xcf,0x6c,0x50,0x2b,0x3f,0x25,0xdf,0xde,
+  0xbd,0x1d,0x7e,0xa8,0x56,0xde,0x1a,0xba,0x9d,0x04,0xad,0x7d,0xa7,0xf2,0xc7,0xd9,
+  0x0f,0xa1,0xaa,0x45,0x1e,0x25,0xdb,0xc9,0x0f,0xd5,0x2a,0x2a,0x77,0xb4,0x16,0x58,
+  0x7b,0x1a,0xd2,0x1e,0xe4,0xe7,0x7e,0x1a,0xdd,0x5e,0xb4,0x47,0x3a,0xc3,0x8d,0xb4,
+  0x2f,0xe2,0xec,0x1f,0xf1,0x2d,0x10,0xc4,0x66,0xdb,0x6a,0x6e,0x74,0x72,0x7e,0x3a,
+  0xfb,0x47,0x7a,0xfd,0x73,0x39,0x13,0xcf,0xa0,0x10,0xdd,0x0f,0x7e,0x4d,0xf4,0x5a,
+  0x6b,0x15,0x44,0xc0,0xcb,0xf8,0xd1,0x08,0xe4,0xe7,0xe6,0xae,0x30,0x93,0xc7,0x89,
+  0xd7,0xde,0x3f,0xfa,0x1a,0xdf,0x6b,0x3d,0x94,0xcc,0xd2,0x11,0xa5,0x0c,0xbe,0xa2,
+  0x15,0x45,0xb0,0xcd,0xca,0xdf,0xcb,0x61,0xa3,0x5c,0x09,0x32,0x25,0xb8,0xbc,0xfa,
+  0x2b,0xa9,0x90,0xef,0x8e,0x38,0xfb,0x47,0x64,0x88,0xc5,0xf8,0xb1,0xa5,0x57,0xe1,
+  0x34,0xab,0xcf,0xd4,0xae,0x17,0x6b,0xc2,0xc6,0x58,0xf3,0xfa,0xe7,0x45,0x6b,0xad,
+  0x7a,0x43,0xf8,0x26,0xa0,0xf8,0x1b,0xba,0xdf,0xf0,0x33,0x25,0xbd,0x01,0x47,0xd3,
+  0xf5,0x63,0x25,0xe7,0xc5,0x04,0xbd,0x80,0x7a,0xa9,0x70,0x13,0x66,0x09,0xd6,0xfe,
+  0xd1,0xee,0xea,0x4d,0x7d,0x95,0xaa,0x0f,0xc4,0x56,0xc8,0xee,0xab,0xbd,0xd5,0x97,
+  0xc3,0xc4,0xd3,0xb8,0x2f,0x88,0x99,0xc0,0x76,0x65,0x01,0xaf,0x33,0xdc,0x09,0x4f,
+  0xc8,0xb5,0xac,0x7f,0xa5,0x5d,0xff,0x4c,0x96,0x6b,0xa8,0xeb,0xaa,0xf1,0x3e,0xf2,
+  0x15,0xc8,0xb2,0x28,0xe0,0x5a,0x15,0x32,0xe3,0x73,0xd0,0xb3,0x97,0xbc,0xac,0x3d,
+  0x39,0x84,0x2e,0xac,0x51,0x2f,0x31,0x04,0x69,0xc6,0x57,0x63,0xef,0x1f,0x8d,0xa1,
+  0xd6,0xf8,0x06,0xac,0xe8,0xe6,0xe7,0xac,0x70,0x60,0x57,0x64,0x70,0x61,0x32,0x19,
+  0x89,0xfa,0xf3,0x55,0xa8,0x47,0x54,0x09,0xf7,0x71,0x90,0xb2,0x80,0x6b,0xff,0x08,
+  0xda,0xf5,0xfd,0x62,0x1f,0x43,0xe8,0x1c,0x83,0x12,0xd0,0x19,0x69,0xe9,0xcf,0x4e,
+  0xd8,0x86,0xc3,0x88,0x08,0xdf,0x8b,0x0b,0x7d,0x89,0xa6,0x17,0x77,0xcc,0xb1,0x6e,
+  0xaf,0xf4,0x77,0xc9,0x19,0xc9,0x07,0x05,0x5d,0xc0,0x68,0xb4,0xe5,0x5a,0x12,0xb6,
+  0xd6,0x77,0xf6,0xd1,0x4e,0xf9,0x54,0x2a,0xfe,0x52,0x60,0x9f,0xf8,0x43,0x76,0x54,
+  0x4d,0xf4,0x06,0xbe,0xdd,0x93,0x17,0x4c,0xfd,0x39,0x6f,0x92,0x5e,0xbe,0x21,0x21,
+  0x5f,0x37,0x24,0x56,0xb2,0x09,0xda,0x2c,0x07,0x4e,0xba,0xf4,0xe7,0xfb,0xf4,0x05,
+  0x43,0x76,0x1a,0xfa,0xb3,0xc4,0xad,0x3f,0xf9,0xf1,0xcd,0x0f,0xd2,0x9f,0x23,0xe9,
+  0x69,0x6b,0x8e,0xd7,0xad,0x3f,0xb7,0xcc,0x5a,0x03,0x1c,0xfd,0x39,0xe1,0xd6,0x67,
+  0xba,0xb0,0xd7,0x5c,0xfa,0x73,0x6a,0x86,0xfe,0xbc,0x3c,0x7d,0xff,0x68,0xda,0x9a,
+  0xfa,0xa2,0xad,0x3f,0x6b,0xb5,0x99,0x9f,0xe7,0xae,0x7f,0xce,0x5c,0x1b,0xed,0xfd,
+  0xa3,0xd2,0xf9,0xb6,0xe6,0x93,0x9e,0x9a,0xa9,0x3f,0xa3,0x88,0x3f,0x5d,0x76,0x8e,
+  0xf0,0x42,0xe8,0xb4,0xfa,0x67,0x85,0xe1,0xe7,0x0a,0x97,0x9f,0x8e,0xfe,0x1c,0x21,
+  0xb7,0xcd,0x5c,0xfb,0x1d,0xfd,0xe9,0xaa,0x67,0xcd,0xd4,0x9f,0xdf,0xd1,0x7d,0x69,
+  0xd3,0xf5,0x27,0x9b,0xa1,0x3f,0x27,0x66,0xf5,0xc1,0x55,0xff,0xfc,0x3f,0xd1,0x9f,
+  0x6d,0x33,0xf5,0x67,0xf1,0x9f,0xa7,0x3f,0x67,0xd5,0x3f,0x67,0xeb,0x4f,0xe3,0x99,
+  0x33,0xf4,0xe7,0x92,0xe9,0xfa,0x73,0x6c,0xb6,0xfe,0xb4,0xcf,0x2f,0xfd,0xfb,0x87,
+  0xe9,0x4f,0xd6,0x67,0xd7,0x3f,0x4d,0xfd,0x69,0x9f,0x5f,0x1a,0xde,0xf4,0xc1,0xfa,
+  0x73,0xcf,0x6c,0x0d,0xfd,0xa7,0xe8,0x4f,0xf8,0x50,0xfd,0xa9,0x9f,0xcf,0x2a,0xe6,
+  0xfd,0x3b,0x35,0x43,0x7f,0x4a,0x8d,0xfc,0x78,0x2a,0xdf,0x3f,0x1a,0xd7,0x8d,0x69,
+  0xf5,0xcf,0xbb,0x05,0xae,0x3f,0xf5,0xf3,0x4b,0x66,0x7e,0x64,0xd7,0x3f,0x4b,0xb9,
+  0xfe,0x5c,0x84,0xf9,0x3b,0x79,0xdf,0x0a,0x1c,0xfb,0xfc,0x27,0xea,0xcf,0x5f,0xe1,
+  0x74,0x2d,0x5e,0x8f,0xf3,0xf6,0x57,0xa6,0xfe,0xb4,0xf3,0x77,0xb7,0xfe,0x24,0x46,
+  0xfe,0xee,0xaa,0x7f,0xba,0xe7,0xfb,0x98,0xef,0xc2,0x74,0xfd,0x39,0x23,0x3e,0x2d,
+  0xfd,0x69,0xed,0x1f,0xd9,0x6d,0xd7,0xae,0x0d,0x5b,0xfb,0xef,0xa8,0x3f,0x67,0xc5,
+  0xe7,0xa8,0xad,0x3f,0x07,0xc9,0xcc,0x79,0x3b,0xce,0x0c,0x5f,0xf4,0xfa,0xe7,0xcc,
+  0x36,0x7b,0xff,0x68,0x86,0xfe,0x0c,0xb8,0xf7,0x8f,0xbe,0x96,0x9a,0x39,0xdf,0x9d,
+  0xfa,0x27,0x9d,0xce,0x1e,0xef,0xb4,0xfd,0xa3,0x59,0x7e,0x0e,0x31,0xb3,0x7b,0xb8,
+  0x48,0xcd,0xe4,0x52,0xfe,0x7e,0x53,0x7f,0x16,0x5f,0x9e,0xc5,0x25,0x47,0x7f,0xe2,
+  0x30,0x6e,0x48,0xe4,0x70,0x3c,0xcf,0xc2,0xe9,0xed,0xcd,0x43,0xd7,0x21,0x3f,0x2d,
+  0xb6,0x2a,0x13,0x2a,0x62,0x73,0x8c,0xf3,0x53,0x41,0x5f,0x62,0xae,0xfd,0xa3,0x9c,
+  0x67,0x84,0x1d,0x10,0xa2,0xea,0xb5,0xb1,0xe0,0x88,0xf0,0x60,0x65,0xf4,0x90,0xd7,
+  0x55,0xff,0x2c,0xd5,0xeb,0x9f,0x7c,0x59,0x98,0x28,0x45,0x43,0xf6,0xb9,0xf6,0xdf,
+  0x2b,0x5c,0x63,0xf6,0xb2,0x27,0xf1,0x56,0xc0,0x75,0x7e,0x89,0xf3,0x53,0xb8,0x4e,
+  0xdb,0x8a,0x7e,0x2a,0xe8,0xa7,0x3a,0xed,0xfc,0x92,0x5e,0xd3,0x61,0xfa,0x7d,0x6f,
+  0x32,0xfe,0x00,0xfb,0xfc,0xa7,0xe6,0x89,0xf2,0xcf,0x63,0xb7,0x0d,0x06,0x27,0xe0,
+  0xbf,0x1a,0x1f,0x6c,0xf1,0x73,0xdc,0xda,0x3f,0xfa,0x4b,0x1c,0xb3,0x2a,0x23,0x3e,
+  0x2d,0x7e,0x4e,0x0a,0xd7,0x21,0xaa,0xbe,0x36,0xd6,0x8f,0xcc,0x62,0xdf,0x63,0xb5,
+  0xe3,0xbe,0x6f,0xcc,0xc9,0x99,0xfb,0xa2,0x49,0xb9,0x84,0xbd,0xcd,0x9a,0xd6,0x04,
+  0x1a,0x0b,0x4f,0xc0,0x6f,0x33,0x4d,0xe3,0x81,0x06,0xd7,0xfe,0xd1,0x5e,0x7a,0x49,
+  0x69,0x5e,0x8a,0x6b,0x15,0x76,0x86,0x0b,0x27,0x37,0x3f,0xcf,0x0a,0xf8,0x1e,0xf2,
+  0xa8,0x5b,0xa3,0xfc,0x9c,0x80,0x9b,0x9f,0x46,0xfd,0x33,0xaa,0xc9,0x6b,0x5b,0xe7,
+  0x82,0x51,0x83,0x0f,0x3b,0xfb,0x47,0xc8,0xcf,0xde,0xda,0xbc,0x77,0x3d,0xf9,0x12,
+  0x3a,0xa5,0xef,0x1f,0xf5,0x99,0x7e,0x26,0xf5,0xfa,0xa7,0xbe,0x44,0x2d,0xb7,0xf6,
+  0x18,0x6c,0x7e,0x96,0x72,0x7e,0x36,0x77,0x95,0x64,0xca,0x3a,0x95,0x8b,0x50,0xcf,
+  0xf9,0xf9,0xcc,0x34,0x7e,0xd6,0x81,0x87,0x89,0x19,0xa9,0xe1,0x0a,0xfb,0x47,0x82,
+  0xb5,0x17,0x82,0xfa,0x73,0x45,0xba,0x6c,0xc6,0xfe,0x51,0x4b,0x09,0xf2,0x45,0xe1,
+  0xfa,0xf3,0x53,0x6e,0x7e,0x2e,0x34,0x90,0xb3,0xad,0x00,0xf5,0xa7,0x14,0xd6,0x6e,
+  0x4b,0x07,0x67,0xec,0x1f,0x7d,0xc2,0xab,0xb4,0x22,0xb3,0x98,0x6a,0x9c,0xb9,0x34,
+  0xee,0xe3,0xfc,0x1c,0xb4,0xf9,0xd9,0xc1,0xeb,0x83,0x85,0x36,0x3f,0xe7,0x8d,0x49,
+  0x17,0x84,0xe6,0xa5,0x25,0x8a,0x38,0xa6,0x5c,0x10,0x7e,0xda,0x7e,0x24,0x5d,0x66,
+  0xf1,0x13,0xf3,0x77,0x8a,0xa8,0xca,0x05,0x46,0xf5,0xbd,0xa5,0xf9,0xad,0x68,0x9c,
+  0x90,0x2c,0x7e,0x6a,0x6c,0x50,0xa8,0x53,0x2c,0x7e,0x72,0xe3,0x08,0xb1,0xf6,0xdf,
+  0xd1,0x05,0x29,0xda,0x8e,0x43,0x85,0x46,0xcd,0x2c,0x7e,0x62,0x1f,0x3a,0x5c,0xfc,
+  0x9c,0x56,0xff,0x9c,0xc9,0xc8,0x71,0x73,0x5c,0x3a,0x8d,0xfc,0x7d,0xf5,0x34,0x7e,
+  0xda,0xe7,0xe7,0x33,0x2a,0xf2,0x53,0xf1,0xeb,0xfd,0x13,0x12,0xe0,0x3e,0x3f,0xef,
+  0xb9,0x45,0x46,0x6c,0x76,0xc9,0xf9,0xd6,0x71,0xe9,0x39,0x49,0x07,0xa9,0xc3,0xcf,
+  0x15,0x7a,0x6d,0xa6,0xc8,0x9a,0xd3,0x32,0xcf,0x29,0xad,0xfc,0xfd,0x1a,0x1e,0x2f,
+  0xf9,0x22,0x63,0xbf,0x31,0xca,0x41,0x9a,0xb3,0xf3,0xf7,0x39,0xc0,0xf7,0x8f,0x8a,
+  0xb9,0xfe,0x7c,0x57,0x3f,0x3f,0xdf,0xe6,0xec,0x1f,0x65,0x2c,0x04,0xf0,0x02,0xe3,
+  0x4c,0x7e,0x26,0xa7,0x58,0x62,0x0c,0x71,0x9b,0xa0,0xba,0xd1,0xd0,0x66,0xef,0xbf,
+  0x97,0x7e,0x0b,0x0e,0x6c,0xc3,0xa5,0x3b,0x46,0xe6,0xf3,0xcd,0xb7,0x7c,0xff,0x5f,
+  0x92,0x1a,0x3b,0x7f,0xc7,0xdc,0x29,0xa8,0xf3,0x73,0x2e,0x7b,0xd2,0x00,0x29,0xd8,
+  0xfc,0xb4,0x71,0xe4,0x87,0x2c,0x44,0x27,0xa7,0xed,0xbf,0xef,0xd5,0x11,0xce,0xeb,
+  0x6e,0xf2,0x25,0x31,0xf1,0x0a,0x1a,0x35,0x76,0xfe,0x3e,0x0e,0x97,0x0a,0x8c,0xdc,
+  0x5e,0xb9,0x44,0x9a,0xb8,0x31,0x5e,0x6e,0xe6,0x40,0xca,0x3b,0x16,0xaa,0x0e,0xea,
+  0x39,0xb3,0xdf,0x39,0xff,0xd9,0x8b,0xf7,0xeb,0xd8,0x1c,0x6c,0x43,0x16,0x0c,0xd5,
+  0x69,0xaa,0xfb,0xfc,0x7c,0xd4,0x68,0xdb,0x8f,0x70,0x7e,0xb6,0xa8,0xce,0x38,0xff,
+  0x69,0xe7,0xef,0xbb,0x0e,0xc8,0xd1,0x11,0xce,0x4f,0x0d,0x93,0xe7,0x63,0x7d,0xf1,
+  0x56,0x5b,0x7f,0x16,0xaf,0x61,0x97,0xc2,0x89,0x93,0x81,0x27,0xaa,0xf6,0x66,0x2e,
+  0x29,0x89,0x53,0xfe,0x27,0x45,0xcd,0xce,0xdf,0x27,0x32,0x97,0x6a,0xd0,0x97,0x51,
+  0x71,0x2f,0xfb,0x83,0xda,0x7c,0x2c,0xf0,0x6e,0xcf,0xb8,0x19,0x67,0x3a,0x3f,0xd9,
+  0xcd,0x8e,0xfe,0x74,0xd7,0x3f,0x43,0xb6,0xec,0xbc,0x92,0xfe,0x74,0xf6,0x84,0x67,
+  0xd6,0x3f,0x3d,0x7b,0xcd,0x65,0x21,0x6c,0xad,0x0f,0xe1,0x2b,0xf2,0xd3,0x34,0x3e,
+  0x4c,0x7f,0xba,0xcf,0x2f,0x59,0xf7,0x49,0xe6,0x0b,0x29,0x77,0xf6,0x8f,0xac,0x65,
+  0xc8,0x5e,0x8f,0xe2,0x76,0xfe,0xbe,0x7c,0x96,0x9f,0x0d,0x66,0xec,0xa6,0xe0,0x4b,
+  0x86,0xd4,0xfb,0x86,0xa5,0x3f,0xcf,0x87,0x13,0x66,0x5b,0x52,0x5e,0x6e,0xc8,0xce,
+  0x5b,0x4c,0xfd,0xb9,0x62,0x5f,0xd1,0x35,0x0e,0x3f,0x67,0xf5,0xc1,0xe2,0x27,0xcf,
+  0xdf,0x67,0xb6,0xd9,0xfa,0xf3,0xa3,0x3b,0x25,0x63,0x59,0x0f,0xce,0xd2,0x9f,0x7c,
+  0xff,0xc8,0x3e,0x0b,0x30,0x43,0x7f,0x76,0x4a,0xdc,0xf5,0x3a,0xb3,0x0f,0x64,0x46,
+  0xfd,0xd3,0x96,0x9d,0x86,0xb1,0xd5,0xa5,0x3f,0x85,0xcc,0x87,0xd4,0x3f,0x0d,0x2d,
+  0xf5,0x01,0xfa,0x13,0x5c,0xf9,0xfb,0x34,0xfd,0xd9,0x60,0xe6,0xef,0x45,0x57,0xa8,
+  0x7f,0x1a,0xfb,0x47,0x75,0xfc,0xd8,0x27,0x32,0x8b,0xac,0xb9,0xd2,0xfe,0x7b,0xf1,
+  0x95,0xea,0x9f,0x57,0x60,0x96,0xc3,0x4f,0x77,0x1b,0x99,0xae,0x3f,0x43,0xee,0xfd,
+  0xf7,0xe9,0xfa,0x33,0x89,0xb3,0x8c,0xcb,0xce,0xe3,0x57,0xd2,0x9f,0xce,0xfe,0x11,
+  0xf6,0x81,0xcc,0xd4,0x9f,0xfa,0xe7,0xf9,0xae,0xa0,0x3f,0xad,0xfd,0x23,0xee,0x8b,
+  0x3c,0x43,0x7f,0xca,0xca,0x8c,0xb1,0x8e,0xba,0xf9,0x19,0xd1,0xcb,0x9e,0x3e,0xab,
+  0xfe,0x29,0x4f,0xdf,0x7f,0x9f,0x16,0x9f,0xb2,0x53,0xff,0x64,0xa5,0x73,0x9d,0xf3,
+  0x1a,0x4f,0x19,0x42,0x34,0xe7,0xec,0x1f,0x59,0x65,0x4f,0x5e,0xff,0x6c,0xce,0x2f,
+  0x5f,0x5f,0xe5,0xe8,0xcf,0xbd,0xca,0xac,0x18,0xb4,0xe6,0x91,0xf4,0x9c,0x35,0xcd,
+  0xed,0xf9,0x6e,0xeb,0xcf,0xd0,0x4e,0xe3,0xf3,0x62,0xb3,0xf5,0xa7,0xce,0xcf,0x19,
+  0xda,0x74,0xd8,0x8e,0xcf,0x2d,0xee,0x3e,0xac,0xd1,0xe3,0xb3,0xd7,0x7c,0x66,0xc5,
+  0xec,0xb9,0x72,0xd6,0xd4,0x9f,0x69,0x97,0xfe,0x94,0x8d,0x39,0x6d,0xd7,0x3f,0x33,
+  0x8a,0x2e,0xa1,0xa6,0xeb,0x4f,0x93,0x9f,0xbb,0xa4,0x35,0xae,0xf9,0x2e,0x19,0x67,
+  0x94,0x52,0x96,0xfe,0x8c,0x4e,0x6b,0xd3,0xfa,0xa7,0xf1,0xd3,0xf0,0xf3,0xc6,0xd9,
+  0xfa,0x13,0xf9,0x69,0xf8,0xf2,0xb8,0xe3,0xa7,0xad,0x3f,0xe7,0xcd,0xd2,0x9f,0x6d,
+  0xe3,0x0b,0x2d,0xd6,0x9d,0xa5,0xc7,0xbb,0x9b,0xc7,0x50,0x2f,0xa1,0x91,0xd6,0xcf,
+  0x83,0xb9,0xf2,0xf7,0xe0,0xcb,0x0b,0xeb,0x8e,0x86,0xe2,0x64,0x82,0x3d,0xa2,0xd6,
+  0xe5,0x7c,0xf1,0xe9,0xdf,0xdf,0x94,0x11,0xef,0xb1,0x6e,0x9e,0x5c,0xae,0x99,0x7e,
+  0x7e,0x69,0x8b,0xf4,0x2f,0xa0,0xa3,0x7f,0x42,0xe1,0x1b,0x49,0xfd,0x33,0xf3,0xf7,
+  0x26,0x6c,0xab,0xb2,0x13,0x79,0xd7,0xfe,0x3b,0x8e,0xd9,0x22,0x6d,0xd1,0xe4,0x5d,
+  0xdc,0xcf,0xeb,0xb4,0xc2,0xe9,0xfa,0xf3,0x78,0x75,0x3c,0xe7,0xc7,0x75,0x8c,0x9f,
+  0xbb,0xd7,0xfc,0xfb,0x7d,0x8a,0x8b,0x9f,0xfd,0x5a,0xcd,0x68,0xe4,0x27,0xe4,0xc7,
+  0xed,0xfd,0x6a,0x8d,0xe6,0x3d,0x68,0xf3,0x13,0xf3,0x77,0xa5,0x07,0xaa,0x79,0x58,
+  0x46,0xc1,0x34,0x1a,0xcc,0xf1,0x4c,0xb5,0xcc,0xe7,0x9a,0x6f,0x2c,0xb9,0x9e,0x7c,
+  0x47,0xdd,0x98,0xa9,0xfd,0x1d,0x8a,0x3f,0xd9,0xfe,0xfe,0x51,0x5d,0xf7,0xf1,0x81,
+  0x25,0xe3,0xcb,0x1b,0x0f,0xd7,0xb1,0xc3,0x6c,0x89,0xe6,0x8f,0xf5,0x04,0xed,0xef,
+  0x6f,0x72,0xfd,0x79,0xed,0x30,0xd7,0x9f,0xf4,0x12,0x69,0xd4,0xbe,0x9c,0x9d,0xfe,
+  0xfd,0x4d,0x74,0x6f,0x79,0xb6,0x8d,0x9f,0x2f,0x40,0x3f,0x07,0xdb,0x6a,0xac,0xfd,
+  0x5b,0x5d,0x7f,0xea,0xdb,0xee,0x4d,0xf0,0x2b,0xc3,0x08,0x9a,0xf7,0x19,0xf9,0x7b,
+  0x25,0x3f,0xf6,0xc9,0x8b,0x0a,0x0b,0xf2,0xa1,0xf5,0xad,0xb1,0x69,0xf9,0x7b,0xea,
+  0x50,0x04,0xd7,0x77,0xf2,0x20,0xec,0xd1,0x3a,0x63,0xde,0x20,0xb8,0xf3,0xf7,0x38,
+  0xf3,0x67,0x84,0x08,0x1c,0x13,0x96,0x30,0x29,0x23,0x36,0x5a,0xf5,0x4f,0xae,0x3f,
+  0x89,0xfe,0xb5,0x23,0xeb,0x4c,0x8d,0xab,0xfe,0x39,0x76,0xc7,0x51,0xbd,0xec,0x29,
+  0x56,0x1b,0x5f,0x44,0x42,0x7e,0xda,0xf5,0xcf,0xd5,0xea,0xf7,0x49,0xb8,0xa3,0x31,
+  0xed,0xad,0x26,0x9b,0x5a,0xeb,0x3e,0x2d,0x6f,0x9f,0x76,0x7e,0xbe,0x0b,0xd4,0xd6,
+  0xa4,0xd2,0x2a,0x29,0x9b,0xe4,0x68,0xab,0x9c,0xee,0x76,0xeb,0xcf,0x5d,0x90,0xa1,
+  0x28,0x3b,0x25,0xa5,0x4b,0x8a,0xd2,0xc8,0x74,0xfd,0xa9,0x75,0xc4,0xca,0x93,0x9e,
+  0xb6,0x4a,0x34,0x9a,0x2a,0xfc,0x9e,0xb2,0xb3,0x66,0xfd,0x13,0xf5,0xa7,0x72,0x41,
+  0xd2,0x8f,0xcd,0x8f,0xf9,0x4d,0x2e,0xbd,0x56,0x66,0xf4,0x61,0x87,0xe7,0x77,0x70,
+  0x81,0xea,0xc7,0x53,0xf9,0x81,0xd5,0x38,0xff,0xc2,0x54,0x81,0x9d,0xbf,0x6b,0xe9,
+  0x41,0x75,0x37,0x62,0x53,0xa4,0x30,0x0a,0x61,0x28,0xd6,0xbc,0x25,0x76,0xfe,0xfe,
+  0x22,0x3c,0x21,0x54,0xb6,0xf6,0x77,0x74,0x97,0xab,0x1b,0x22,0x95,0xb7,0xca,0x1d,
+  0x61,0xe2,0x7c,0xff,0x08,0xe5,0x5c,0x15,0xed,0x1f,0x0d,0xde,0x01,0xff,0x2a,0x55,
+  0xd2,0xa2,0x51,0xa7,0xfe,0x59,0x61,0xc8,0xf1,0x80,0x31,0x2e,0xfb,0xf9,0xb8,0x44,
+  0xec,0xef,0x1f,0x21,0x3f,0x65,0xb3,0xfe,0xc9,0xfd,0xbc,0x6e,0xda,0xf9,0x79,0x95,
+  0xd7,0x3f,0xa3,0xac,0x52,0x55,0x72,0x1e,0x7e,0x10,0xd4,0xe7,0xb5,0xf9,0xf9,0x17,
+  0xc0,0xbf,0xfe,0x2c,0x67,0xd4,0x1a,0x5e,0xb8,0xcb,0xc8,0x03,0x76,0xfd,0x93,0xeb,
+  0xcf,0x07,0x35,0x15,0xe7,0x43,0xd0,0x2f,0xf5,0x83,0x9a,0xdf,0x94,0xb5,0xeb,0x9f,
+  0x19,0x01,0x43,0xa1,0xa8,0xf2,0x37,0x72,0x8a,0x94,0x4a,0x1b,0xa0,0x72,0x68,0xd3,
+  0x5a,0xbb,0xfe,0x39,0x20,0x07,0xe1,0x85,0xee,0xfa,0xcc,0xf2,0xf3,0x6d,0xf3,0x95,
+  0x23,0xac,0x3e,0x53,0xfc,0xba,0x58,0xe3,0xfa,0xfe,0x91,0x7e,0x2e,0x28,0x63,0x68,
+  0x61,0x56,0xb2,0xdf,0xad,0x3f,0x5b,0x5e,0x49,0xef,0x5f,0xed,0xbf,0x20,0xd6,0xd1,
+  0xd3,0xe9,0xfa,0xd5,0xfe,0x53,0x6d,0x60,0x7f,0x7f,0xf3,0x39,0xd8,0xca,0xc2,0xab,
+  0xe4,0xd7,0xc5,0x2f,0xd0,0x27,0x36,0xfc,0x45,0xaa,0xf8,0xa2,0xf8,0x77,0xe6,0xb8,
+  0x84,0x90,0x9f,0xbd,0xa4,0x12,0x92,0x7c,0x2f,0xeb,0x49,0xa8,0x14,0xe4,0x5b,0xa7,
+  0xe9,0x4f,0x7d,0x8f,0x21,0x13,0x1e,0xc7,0x75,0x4c,0xe5,0xe7,0xe7,0x93,0xf6,0xf7,
+  0x8f,0xf6,0xca,0x5f,0xe0,0xdb,0x00,0x69,0xd4,0x3d,0x2f,0xe3,0xc4,0x88,0xa2,0xfe,
+  0x34,0x9f,0x89,0xfc,0x94,0x4c,0x54,0xad,0xb6,0x73,0x66,0x2b,0x06,0x95,0x49,0xfe,
+  0xb5,0x23,0xe6,0xff,0x85,0xd8,0x04,0x2f,0x28,0x37,0x8f,0xfa,0xf2,0x22,0xd8,0xdf,
+  0xdf,0x4c,0xf1,0xaf,0x39,0xe5,0xe5,0xc7,0xc9,0x02,0xf8,0xc1,0x50,0xcd,0x39,0x84,
+  0x65,0xc6,0xce,0xdf,0xfd,0x90,0x16,0xd4,0x5c,0xdf,0x76,0x9c,0xef,0x3e,0x58,0x78,
+  0xe8,0x36,0x25,0x9c,0x71,0xce,0xcf,0xb3,0x9e,0x54,0x64,0x24,0x59,0x5f,0x53,0xdc,
+  0xfb,0x48,0x2c,0x82,0x3c,0x0b,0x76,0x3b,0xfa,0x53,0x3b,0xd5,0x8a,0xf3,0x28,0xdd,
+  0x53,0x0b,0x87,0x23,0x4b,0x72,0x81,0xee,0x1e,0x66,0x9f,0x9f,0x9f,0xf8,0xc5,0xb3,
+  0xb4,0xf9,0x94,0x6f,0x7f,0xdb,0x7b,0x70,0xa9,0x5a,0xdf,0xf8,0xb0,0xce,0xcf,0xc3,
+  0xf3,0x2d,0xc2,0x5a,0xfa,0x8a,0x72,0xb3,0x54,0xfc,0xbc,0xb0,0x8e,0xbe,0xd2,0x81,
+  0x86,0xb6,0x18,0xcc,0xb6,0x76,0xcf,0x3a,0xb8,0x93,0x7e,0x4e,0xf1,0x1c,0x29,0xac,
+  0x84,0x3b,0xe1,0x23,0x8a,0x47,0x5b,0xdc,0x61,0x7e,0x20,0x11,0x54,0x96,0x54,0x83,
+  0xb2,0x74,0xbf,0x65,0x30,0xd5,0xbc,0x8f,0x81,0x27,0x05,0x2b,0x61,0x0e,0x66,0x8e,
+  0xc2,0x2a,0xd3,0xb0,0xda,0x9e,0x4f,0x7a,0xee,0x81,0x3b,0xd9,0xe7,0x54,0x4f,0xce,
+  0x73,0x2f,0xdc,0x99,0xfe,0x88,0xea,0x3c,0xf3,0xf9,0x0e,0x48,0x09,0x21,0x28,0x80,
+  0x52,0xc6,0x0d,0x75,0x19,0x1a,0xb6,0x2f,0x54,0x52,0x05,0x99,0xb5,0x82,0xc2,0xa4,
+  0xca,0x2e,0x19,0x5a,0xcb,0x15,0xa7,0xed,0x76,0x81,0x76,0x75,0x64,0xee,0x90,0x2b,
+  0x44,0x6e,0xa4,0xd0,0x00,0xdb,0x4f,0xbf,0xf0,0x39,0x68,0xd1,0x94,0xb5,0x92,0x5f,
+  0xf8,0x08,0xb4,0x8c,0xa2,0x61,0x97,0x74,0x98,0x8c,0xd1,0x2f,0xeb,0xa6,0xb4,0x18,
+  0x64,0x8a,0x8c,0xe8,0xb2,0xfd,0x4c,0x11,0x59,0xe8,0x06,0x95,0x85,0x54,0x12,0x12,
+  0xba,0x95,0x14,0x0b,0x09,0x8e,0x9f,0x85,0xab,0x85,0x4f,0xc0,0xed,0xf4,0x0e,0xe6,
+  0xb1,0x0c,0xdb,0x97,0xa4,0x90,0x82,0x53,0xb0,0x04,0x6a,0x99,0x69,0xcc,0x73,0xda,
+  0x5a,0xa5,0x18,0xf3,0xab,0x6d,0x32,0x0c,0x15,0xa0,0x11,0x13,0x65,0x70,0xc6,0x13,
+  0x28,0x4e,0x3a,0x10,0x55,0xe3,0x18,0x0c,0x43,0x43,0xb3,0xfd,0x14,0x17,0x20,0x91,
+  0xd5,0xb2,0xa8,0x74,0x5c,0x40,0x23,0x83,0x86,0xdd,0xf6,0x7c,0x9b,0x27,0xa5,0x25,
+  0xd5,0xbf,0xf2,0x4b,0x87,0x3d,0x6b,0xb5,0x95,0xb1,0xa0,0xbf,0x9c,0xd9,0x7e,0xb6,
+  0x42,0xac,0x4b,0x56,0x89,0xac,0x60,0x47,0xd0,0x68,0x95,0xc1,0xed,0xcb,0x8d,0x5d,
+  0x45,0xea,0xb2,0xa4,0xf2,0x80,0xb4,0xba,0xeb,0xa3,0x9c,0x88,0x4e,0x1b,0x0e,0xbe,
+  0xd0,0x0a,0x9f,0x65,0xe5,0x86,0xd1,0xc1,0xca,0x9d,0xf1,0x2c,0x10,0x5a,0x58,0x47,
+  0xaa,0x3c,0xe4,0xb1,0x0d,0x67,0x3c,0x89,0x20,0xb1,0x4f,0xa8,0x4a,0xa7,0x14,0xf4,
+  0x48,0xac,0x45,0x55,0x92,0xce,0x58,0x3f,0xbf,0x4c,0xfc,0x74,0xd7,0x8b,0xa9,0x9b,
+  0x42,0xf3,0x0c,0xe3,0x1f,0x42,0xf3,0xa8,0xed,0xe7,0xb2,0xc2,0x75,0xec,0xce,0xd4,
+  0xe7,0x1a,0x2a,0x8e,0x78,0xee,0xed,0x42,0x23,0x54,0x61,0xc7,0xe0,0xd2,0x56,0x58,
+  0xc7,0x5e,0x49,0x15,0x86,0x8a,0x8f,0x08,0xdc,0xb8,0x39,0x54,0xac,0x95,0x5a,0x6d,
+  0xcb,0xa4,0xc5,0xcc,0x9f,0xfa,0x48,0x08,0x8e,0x14,0x70,0x43,0x0c,0x81,0x56,0x6a,
+  0x3e,0x13,0x90,0x96,0x6c,0x25,0x86,0x25,0xf0,0x97,0x28,0xab,0x73,0x64,0x0f,0x03,
+  0xeb,0x2a,0x90,0x56,0xb1,0x64,0x6a,0x4e,0x08,0x63,0xb7,0x12,0x8d,0x60,0x48,0xb2,
+  0xdb,0x96,0x52,0xcf,0x5a,0x58,0x0e,0x9f,0x03,0x49,0xab,0xe0,0x46,0x19,0x1a,0xd6,
+  0x33,0xd1,0x97,0x94,0x35,0x9e,0x5f,0xe1,0xe3,0xe9,0x57,0x98,0xed,0x4b,0xab,0xa4,
+  0x76,0x85,0x32,0xcb,0xe4,0xd2,0x6e,0x6e,0xa8,0x68,0xb8,0xda,0x04,0x7a,0xe8,0x8e,
+  0xd8,0x1d,0xfe,0x0a,0xc3,0xf8,0xac,0x5c,0x41,0x6d,0x3f,0xc5,0xca,0x0e,0x76,0x47,
+  0xa6,0x42,0xf6,0xb4,0x0a,0x68,0xa8,0x68,0x50,0xeb,0x3b,0x31,0xc0,0x57,0x73,0x05,
+  0xbd,0x15,0x64,0x89,0x22,0x20,0x24,0x10,0xcc,0x65,0x8c,0x3f,0x93,0x40,0x17,0xce,
+  0x2a,0x39,0x44,0x74,0x23,0x25,0x87,0xc0,0xf6,0x93,0x16,0xa6,0x84,0x95,0xf0,0x2e,
+  0x54,0x30,0x0f,0x37,0xfe,0x0a,0x0d,0xf3,0x0c,0x24,0xce,0x23,0x5c,0x45,0x72,0x18,
+  0x96,0x7e,0x26,0x58,0xb1,0x66,0x8f,0x0b,0x48,0x7c,0x3e,0xb4,0xf1,0xb7,0xac,0x52,
+  0x99,0xff,0x9e,0x0e,0xa7,0x4d,0x81,0x6a,0x6c,0xc3,0x95,0x2a,0x0d,0xd7,0x2b,0x45,
+  0x94,0x74,0xb8,0xda,0x3c,0x9e,0xc5,0x90,0xa4,0x65,0x31,0xa9,0x57,0xa8,0x4c,0x25,
+  0x3b,0xcb,0xae,0x71,0xc6,0x13,0xaa,0x3c,0x9d,0xda,0xe7,0x63,0x7f,0xb5,0xc5,0xf3,
+  0x88,0xe7,0x6f,0xf3,0x9f,0x5f,0x3f,0x67,0x8b,0x67,0xda,0x33,0x05,0xfc,0x18,0xaa,
+  0xa4,0xa1,0xda,0x53,0x04,0xad,0x1d,0x8a,0xd3,0x26,0x4b,0xa9,0xd2,0x90,0xb4,0x4c,
+  0x28,0xed,0x6b,0x5f,0x55,0x1a,0x2a,0x40,0xc3,0xe5,0x67,0x4b,0x47,0xe9,0x1d,0xd2,
+  0x67,0x85,0x0a,0x8a,0x46,0x39,0x1a,0xff,0x44,0x9d,0xfb,0x2a,0x5b,0xe5,0x3b,0xba,
+  0x2b,0xd4,0x0d,0xc9,0x55,0xdc,0xf0,0xa8,0x1b,0x9c,0x36,0xaf,0x40,0x18,0x64,0xf8,
+  0x17,0xe1,0x3d,0x30,0x40,0x1f,0x85,0x88,0xf3,0x44,0xf0,0x8b,0x9f,0x11,0x7a,0xb5,
+  0xca,0x58,0x68,0xb9,0xf8,0x99,0xca,0xed,0x47,0x56,0xc5,0x42,0xae,0x67,0x16,0xde,
+  0x23,0x70,0x66,0x55,0xe4,0x3c,0xf7,0x28,0x68,0x84,0x2b,0x34,0xbb,0x4d,0x54,0xa8,
+  0xa6,0xc4,0x7a,0xfd,0x42,0x15,0x70,0x03,0x31,0xe3,0x3c,0xb3,0x79,0x6a,0xc5,0xd4,
+  0x2f,0xa7,0xde,0x99,0x7a,0xcf,0x36,0xe0,0x4f,0xba,0x96,0xbc,0xec,0x5b,0x32,0xf4,
+  0xf3,0xec,0x81,0x35,0xd1,0xd3,0xc6,0x7d,0x13,0x4e,0xdb,0xf5,0x4d,0xcb,0x5f,0x28,
+  0xab,0x1f,0x1e,0x79,0xab,0xbe,0xd9,0x68,0x7b,0xcb,0xf5,0x79,0xeb,0x93,0x47,0x82,
+  0x8b,0xc7,0xb6,0xac,0xba,0x25,0xc4,0x8d,0xde,0x2d,0xab,0x9c,0x36,0x0f,0xac,0xd3,
+  0x76,0x76,0x14,0x96,0x7f,0xf4,0xf9,0x82,0x75,0x74,0x67,0xc7,0xf5,0xe5,0x1f,0x75,
+  0xfa,0x20,0x15,0x72,0xce,0xff,0x4d,0xc8,0x33,0x5c,0xb1,0x4e,0xb8,0x93,0x7e,0x44,
+  0xf9,0xa2,0xd3,0x06,0x82,0x0a,0x6e,0xce,0xbb,0xe6,0x0a,0x06,0x48,0x0a,0x42,0xf8,
+  0xe3,0x02,0x93,0x56,0xa1,0x51,0x20,0x0b,0x4e,0x9b,0x2c,0xdd,0x43,0xe7,0xb2,0x8f,
+  0xab,0xa5,0xc7,0xe0,0x9e,0xae,0xb9,0xac,0xb0,0xba,0xd4,0xf5,0x4c,0x83,0xf3,0x78,
+  0x1f,0x7f,0x00,0x2c,0x03,0xd7,0x7d,0xe5,0xd2,0x02,0xa1,0x48,0xc5,0x50,0xd8,0x06,
+  0x0b,0x85,0xa2,0x58,0xeb,0x5a,0x57,0x4c,0x54,0x41,0xb2,0x2b,0x18,0x93,0xfa,0x4a,
+  0x17,0xc2,0xad,0x42,0x30,0xd5,0x3e,0xe0,0xcc,0x14,0xcd,0x8f,0x53,0x15,0x34,0x21,
+  0xc6,0x21,0xca,0x50,0x8f,0xc6,0x04,0x6a,0xcd,0x15,0x6d,0x8e,0x54,0x21,0x09,0x20,
+  0x39,0xbf,0xfe,0x45,0x30,0x97,0x69,0xbc,0x8f,0x12,0xee,0x46,0x25,0x2e,0x53,0x7a,
+  0xb8,0xf3,0x09,0xe0,0xb4,0xe9,0xf3,0xe1,0xbf,0xf1,0x35,0x07,0x17,0x1f,0x68,0xc5,
+  0xf5,0xc8,0x6c,0x53,0x04,0x20,0x29,0xd8,0x81,0x6b,0xd5,0x0d,0xcc,0xcb,0x8d,0x85,
+  0x50,0x64,0x9d,0xa9,0xa1,0x4b,0x5b,0x0b,0x62,0x5d,0x7e,0xf5,0x2e,0xe4,0x3c,0x70,
+  0x43,0x94,0x15,0x8b,0x21,0x54,0x92,0x2d,0xbc,0xe7,0xf0,0x73,0xd0,0xe0,0x4e,0x53,
+  0xa3,0x0d,0x7c,0x4a,0x9c,0x7f,0x41,0x0f,0x95,0x37,0xe0,0xfa,0x90,0xe5,0xeb,0x83,
+  0xfd,0xcc,0x36,0x89,0xe3,0x7d,0x19,0x2f,0xe1,0x87,0xbb,0x42,0x59,0xc2,0xf9,0x62,
+  0x3e,0x53,0xe0,0x5c,0x9a,0xab,0x16,0x22,0x97,0x24,0xce,0x3a,0xce,0x79,0xf3,0xbe,
+  0x0e,0xc1,0x2b,0x85,0xbb,0xe4,0x4c,0x6b,0x44,0xd9,0x8c,0x46,0x08,0x0d,0x7b,0x1e,
+  0xd1,0xa5,0x48,0x17,0xa1,0x1d,0x4a,0x41,0x91,0x11,0x2d,0xe5,0xf0,0x59,0x28,0x6d,
+  0x35,0x9f,0x99,0x94,0x0a,0xa0,0x8d,0x29,0x79,0xa9,0x41,0x28,0x81,0x16,0xa6,0xa4,
+  0x94,0x90,0x00,0x56,0x6e,0xa1,0xcf,0x23,0x9a,0x51,0x22,0x12,0x29,0x85,0x5e,0x34,
+  0x64,0xeb,0x14,0x35,0x3e,0x13,0xf1,0xce,0x0c,0xce,0x17,0x7e,0x9a,0x0d,0xe7,0xbf,
+  0x1a,0x2a,0xb6,0x59,0x27,0x7c,0x4a,0xba,0xb7,0x6b,0x6e,0xfe,0x6f,0x1a,0x4a,0x4f,
+  0xa0,0xb1,0x32,0xff,0xf1,0x06,0x3b,0x26,0xa8,0xf0,0x29,0xe4,0xfc,0x4e,0xc4,0xbb,
+  0x70,0x44,0xe2,0xc6,0xf5,0x21,0x3b,0x3e,0x3b,0x96,0x2e,0xd3,0xf1,0x7e,0x57,0x48,
+  0x39,0x02,0x8b,0x71,0x7d,0x20,0xa1,0x8a,0x21,0xbb,0xef,0xd7,0xc0,0x42,0x56,0xa4,
+  0xce,0x49,0xc2,0x03,0x50,0xdd,0xfb,0x89,0x4c,0xb0,0x53,0x62,0x66,0x54,0x50,0x28,
+  0xe1,0x5f,0xf6,0x9c,0x24,0x21,0xf8,0x96,0x54,0xc9,0x42,0x78,0x1f,0xf6,0xdd,0x0c,
+  0x8a,0xa5,0x7f,0x2b,0x7d,0x03,0x4a,0xb6,0x7d,0x9c,0xc1,0x38,0x34,0x78,0x4a,0x04,
+  0x1e,0x33,0xf6,0x33,0x3f,0x0f,0xab,0xbb,0x8a,0x32,0x05,0x9d,0xca,0x3f,0x43,0x35,
+  0x2b,0xca,0xb4,0x76,0x82,0xfd,0x4c,0x41,0xe7,0x3c,0x0e,0x71,0x29,0x5f,0x03,0x14,
+  0xe4,0xbc,0xc0,0x14,0xfb,0xbd,0x03,0x3d,0x54,0xae,0x4a,0xfe,0xd2,0x36,0xe8,0x38,
+  0x54,0x1e,0x5b,0xea,0x17,0xac,0xbe,0x53,0x8c,0x2e,0x5c,0x46,0x55,0x8f,0x8c,0x2f,
+  0xeb,0x76,0x6e,0xf0,0x36,0xf3,0xbd,0x1b,0x78,0x67,0xa8,0x7b,0x04,0xd0,0x39,0x8f,
+  0xc1,0x2a,0xd8,0xcf,0xd4,0xf1,0xae,0xca,0x32,0x0f,0x4f,0xe4,0x7c,0x44,0x06,0xdb,
+  0xcf,0x16,0x29,0x45,0xf9,0xf4,0x29,0xed,0x2a,0x48,0xb5,0xa0,0x21,0xd9,0xfd,0xe3,
+  0x6b,0x08,0xdf,0xa9,0x24,0xc8,0xeb,0x82,0x6a,0x78,0x98,0xff,0xa6,0x05,0xe7,0xbd,
+  0x77,0x16,0xd4,0x80,0x97,0x7d,0x25,0xa3,0x0c,0x90,0x08,0xbe,0x5f,0x92,0xb1,0xe3,
+  0xb3,0x03,0x3f,0xba,0xaa,0x43,0xa6,0xe4,0x46,0xfe,0x2b,0x5b,0x52,0xfe,0x49,0x52,
+  0x6e,0xfe,0xa6,0x28,0x1e,0xbb,0x12,0x2c,0x80,0x22,0x0d,0xd1,0xbf,0x1d,0xae,0x87,
+  0x62,0x4a,0xbe,0x0e,0x56,0xad,0x84,0xc7,0xe7,0x2a,0x2d,0xa4,0x2c,0x8b,0x0a,0x1b,
+  0xa5,0xd4,0xa1,0x50,0x1a,0x07,0xc1,0x89,0x4f,0x7e,0x16,0x42,0x56,0x88,0xa2,0xf0,
+  0x89,0x86,0xf3,0x28,0xe6,0x1a,0xcf,0x24,0xc7,0x3b,0xe3,0x78,0x6f,0x4f,0x71,0xce,
+  0x97,0x96,0x3a,0xe3,0x89,0x99,0x16,0xe2,0xdd,0x53,0xbf,0x8d,0xe6,0x3b,0x3e,0x5d,
+  0xde,0xbb,0x14,0xb6,0x39,0xe3,0x89,0x61,0x1e,0x2a,0x2f,0xc4,0x97,0x41,0xd5,0xdb,
+  0xa1,0x1c,0x39,0x6f,0x8f,0x27,0x72,0x49,0xe2,0x61,0xd9,0x81,0x9c,0x17,0x80,0xd1,
+  0x30,0xb8,0xe3,0x73,0xb9,0x58,0x26,0xb0,0x8e,0x9b,0x62,0xc9,0xe5,0x05,0x65,0xc0,
+  0x6e,0x5f,0x55,0x2e,0xdb,0xcf,0x14,0x92,0x0b,0xee,0x29,0x9d,0x0b,0x1f,0x57,0x1f,
+  0xce,0x45,0xe2,0x95,0x68,0x80,0x6b,0xcd,0x31,0xf0,0x8e,0x48,0xad,0x0a,0x25,0x87,
+  0x39,0x5b,0xff,0x2f,0x70,0xbe,0x96,0xff,0xf8,0xef,0xaf,0x7c,0x5f,0x3d,0xff,0xaf,
+  0xb7,0xaf,0xdc,0xc6,0xf1,0x5e,0xb6,0xcf,0xf0,0xe5,0x67,0x0f,0x2c,0xee,0xfd,0xc7,
+  0x0b,0x4e,0x1b,0xe9,0xc5,0x24,0x36,0xc2,0x93,0x58,0xcb,0x70,0xda,0xf8,0x34,0x07,
+  0x5d,0x53,0xd8,0x86,0x73,0xf5,0x82,0x7e,0x54,0x45,0x71,0x0c,0xe7,0xfa,0xb0,0xfb,
+  0xf8,0xaf,0x71,0xd0,0xb5,0x42,0x4f,0xcc,0x34,0xac,0x4f,0x33,0x88,0xaa,0xce,0x30,
+  0xcc,0x36,0x54,0x8b,0x2a,0xf4,0xf1,0x5f,0x1b,0x60,0x19,0x4e,0xdb,0xec,0x3b,0x9d,
+  0x36,0x6f,0x2f,0xd9,0x85,0x8b,0x77,0x8d,0x62,0x1b,0xae,0xfb,0x24,0xc2,0x5f,0xb8,
+  0xaa,0xd8,0x86,0xeb,0xf3,0x66,0xf5,0xcf,0x6e,0x53,0xf8,0xef,0x47,0x1b,0x81,0x7b,
+  0x61,0xae,0x66,0x1a,0x0a,0x91,0xec,0xfb,0x36,0xc6,0x2a,0x47,0xe4,0x7b,0xad,0xfb,
+  0xee,0x25,0x73,0xed,0xef,0xdc,0xf1,0x38,0xeb,0x02,0x5b,0x29,0xa1,0x71,0x85,0xf1,
+  0x34,0x3b,0xe2,0x1e,0x4f,0x85,0x89,0x31,0x18,0x81,0x7a,0xe7,0x67,0xfd,0x9a,0xfd,
+  0x3d,0xc5,0x0f,0xbe,0x9a,0x9a,0x66,0xff,0x5f,0x20,0xf0,0xbf,0xbd,0xed,0xcf,0xb8,
+  0x9a,0xa7,0xa6,0xa6,0xb4,0x69,0xc6,0xff,0x9b,0x6d,0x1f,0x1e,0xf3,0x33,0x63,0xc2,
+  0x75,0xe3,0x9f,0x15,0xf3,0xf5,0xb3,0xa2,0xfa,0xca,0x31,0xef,0xb4,0xc9,0xff,0xd1,
+  0x98,0x67,0x46,0xa8,0xcf,0x3d,0xb6,0x31,0x6e,0x18,0x43,0xce,0x7d,0x24,0xf8,0x01,
+  0xfd,0xc3,0x4f,0xee,0x56,0xec,0x18,0x9c,0x15,0xf3,0xd8,0xad,0x11,0xa7,0x7f,0x18,
+  0xfc,0x43,0x4e,0xcc,0x7f,0xe0,0x5c,0x81,0x0f,0xe9,0x1f,0x7c,0xe0,0x6c,0x07,0x1e,
+  0xf3,0x30,0xeb,0xba,0x1a,0xf3,0x7f,0x46,0xdb,0x07,0x5f,0xfc,0x77,0x39,0x12,0xfd,
+  0xef,0x96,0x9f,0xfd,0xa9,0xf7,0x5c,0xbd,0xae,0x5e,0x57,0xaf,0xab,0xd7,0xd5,0xeb,
+  0xea,0xf5,0xff,0xcb,0xa5,0xaf,0x93,0x44,0x5f,0x27,0xb5,0xff,0x6c,0x5f,0xae,0x5e,
+  0x57,0xaf,0xab,0xd7,0xd5,0xeb,0xea,0x75,0xf5,0xfa,0xcf,0xb8,0x62,0xfc,0x77,0xf7,
+  0x43,0xe0,0xa7,0x66,0x65,0x56,0x8c,0x01,0x2d,0xfc,0xf0,0x9f,0xd7,0x7f,0xce,0x13,
+  0x83,0x8c,0xe0,0xdc,0xbf,0x27,0x3d,0xd3,0xd7,0xff,0x05,0x2f,0x2f,0xc7,0xce,0xd5,
+  0x60,0x00,0x00,
index 3274e8c92394f89251426817e0f587157a382ad7..09f157b2e2699863ee65c33ea9253fec0ab5f018 100644 (file)
@@ -53,17 +53,19 @@ int board_pre_init (void)
 {
   int index, len, i;
   volatile unsigned char dummy;
+  int status;
 
 #ifdef FPGA_DEBUG
   /* set up serial port with default baudrate */
-  serial_init(0, CONFIG_BAUDRATE);
+  serial_init(get_gclk_freq(), CONFIG_BAUDRATE);
   console_init_f();
 #endif
 
   /*
    * Boot onboard FPGA
    */
-  if (fpga_boot_compressed() != 0)
+  status = fpga_boot((unsigned char *)fpgadata, sizeof(fpgadata));
+  if (status != 0)
     {
       /* booting FPGA failed */
 #ifndef FPGA_DEBUG
@@ -71,7 +73,20 @@ int board_pre_init (void)
       serial_init(0, CONFIG_BAUDRATE);
       console_init_f();
 #endif
-      printf("\nFPGA: Booting failed!\n ");
+      printf("\nFPGA: Booting failed ");
+      switch (status)
+        {
+        case ERROR_FPGA_PRG_INIT_LOW:
+          printf("(Timeout: INIT not low after asserting PROGRAM*)\n ");
+          break;
+        case ERROR_FPGA_PRG_INIT_HIGH:
+          printf("(Timeout: INIT not high after deasserting PROGRAM*)\n ");
+          break;
+        case ERROR_FPGA_PRG_DONE:
+          printf("(Timeout: DONE not high after programming FPGA)\n ");
+          break;
+        }
+
       /* display infos on fpgaimage */
       index = 15;
       for (i=0; i<4; i++)
index 015625d4364f55a02fdc01b901f755c1de19a4c4..279827bd171e9ac307f9d8a9d29553615f22937c 100644 (file)
@@ -65,7 +65,7 @@ int board_pre_init (void)
   /*
    * Boot onboard FPGA
    */
-  status = fpga_boot_compressed();
+  status = fpga_boot((unsigned char *)fpgadata, sizeof(fpgadata));
   if (status != 0)
     {
       /* booting FPGA failed */
index 923fd9f9a440805ff2f89c45262dbe7adb91e18e..7221b6354fd01a7c5a1020887ade38c7e685498d 100644 (file)
@@ -79,7 +79,7 @@ struct eth_dev_s {
 };
 
 
-#ifdef ZUMA_NTL
+#ifdef CONFIG_INTEL_LXT97X
 /* for intel LXT972 */
 static const char ether_port_phy_addr[3]={0,1,2};
 #else
@@ -132,7 +132,7 @@ static void gt6426x_handle_SMI(struct eth_dev_s *p, unsigned int icr)
                psr&2?"FD":"HD",
                psr&4?" FC":"nFC");
 
-#ifdef ZUMA_NTL /* non-standard mii reg (intel lxt972a) */
+#ifdef CONFIG_INTEL_LXT97X /* non-standard mii reg (intel lxt972a) */
        {
         unsigned short mii_11;
        mii_11=miiphy_read_ret(ether_port_phy_addr[p->dev],0x11);
@@ -148,7 +148,7 @@ static void gt6426x_handle_SMI(struct eth_dev_s *p, unsigned int icr)
                ""
                );
        }
-#endif /* ZUMA_NTL */
+#endif /* CONFIG_INTEL_LXT97X */
 #endif /* DEBUG */
     }
 }
@@ -484,7 +484,7 @@ gt6426x_eth_probe(void *v, bd_t *bis)
        for(i=0;i<255; i++)
            temp=GTREGREAD(ETHERNET0_MIB_COUNTER_BASE + reg_base +i);
 
-#ifdef ZUMA_NTL
+#ifdef CONFIG_INTEL_LXT97X
        /* for intel LXT972 */
 
        /* led 1: 0x1=txact
@@ -564,19 +564,19 @@ gt6426x_eth_probe(void *v, bd_t *bis)
        check_phy_state(p);
 #endif
 
-       printf("Waiting for link up..\n");
-       temp = 10000;
+       printf("%s: Waiting for link up..\n", wp->name);
+       temp = 10 * 1000;
        /* wait for link back up */
        while(!(GTREGREAD(ETHERNET0_PORT_STATUS_REGISTER + reg_base) & 8)
                        && (--temp > 0)){
-           udelay(10);
+           udelay(1000);       /* wait 1 ms */
        }
        if ( temp == 0) {
-               printf("Failed!\n");
+               printf("%s: Failed!\n", wp->name);
                return (0);
        }
 
-       printf("OK!\n");
+       printf("%s: OK!\n", wp->name);
 
        p->tdn = 0;
        p->rdn = 0;
@@ -655,7 +655,7 @@ gt6426x_eth_probe(void *v, bd_t *bis)
 
        /* Start Rx*/
        GT_REG_WRITE(ETHERNET0_SDMA_COMMAND_REGISTER + reg_base, 0x00000080);
-       printf("gt6426x eth device %d init success \n", dev );
+       printf("%s: gt6426x eth device %d init success \n", wp->name, dev );
        return 1;
 }
 
index c38d4d753d19cad9db143b0235f71808745405ac..404c5e9e3e6dea8770560e42950f9e4cbf1af386 100644 (file)
 
 #ifdef CONFIG_GT_USE_MAC_HASH_TABLE
 
-static u32           addressTableHashMode[ GAL_ETH_DEVS ] = { 0, 0, 0 };
-static u32           addressTableHashSize[ GAL_ETH_DEVS ] = { 0, 0, 0 };
-static addrTblEntry *addressTableBase[     GAL_ETH_DEVS ] = { 0, 0, 0 };
-static void         *realAddrTableBase[    GAL_ETH_DEVS ] = { 0, 0, 0 };
+static u32           addressTableHashMode[ GAL_ETH_DEVS ] = { 0, };
+static u32           addressTableHashSize[ GAL_ETH_DEVS ] = { 0, };
+static addrTblEntry *addressTableBase[     GAL_ETH_DEVS ] = { 0, };
+static void         *realAddrTableBase[    GAL_ETH_DEVS ] = { 0, };
 
 static const u32 hashLength[ 2 ] = {
     (0x8000),             /* 8K * 4 entries */
index 6e582d52e3dfd487221542c4a138368dd72d8f01..b083d28dc3d2879f9d203d4d0a6c35e8a03607bb 100644 (file)
@@ -37,7 +37,7 @@
 #include "mpsc.h"
 #include "i2c.h"
 #include "64260.h"
-#ifdef ZUMA_NTL
+#ifdef CONFIG_ZUMA_V2
 extern void zuma_mbox_init(void);
 #endif
 
@@ -238,7 +238,7 @@ board_pre_init(void)
         * on-board sram on the eval board, and updates the correct
         * registers to boot from the sram. (device0)
         */
-#ifdef ZUMA_NTL
+#ifdef CONFIG_ZUMA_V2
        /* Zuma has no SRAM */
        sram_boot = 0;
 #else
@@ -310,7 +310,7 @@ misc_init_r(bd_t *bd)
        mpsc_init2();
 #endif
 
-#ifdef ZUMA_NTL
+#ifdef CONFIG_ZUMA_V2
        zuma_mbox_init();
 #endif
 
@@ -356,7 +356,7 @@ checkboard (void)
 void
 debug_led(int led, int mode)
 {
-#ifndef ZUMA_NTL
+#ifndef CONFIG_ZUMA_V2
         volatile int *addr = NULL;
         int dummy;
 
@@ -391,7 +391,7 @@ debug_led(int led, int mode)
         }
 
         dummy = *addr;
-#endif /* ZUMA_NTL */
+#endif /* CONFIG_ZUMA_V2 */
 }
 
 void
index e07514619d1767866c8e5ce3633272f4224fe00c..6d979d3463545c2e5c416ca7aae16d3191cd4110 100644 (file)
@@ -38,6 +38,9 @@
 #define FLASH_MAN_UNKNOWN 0xFFFF0000
 
 /* #define DEBUG */
+/* #define FLASH_ID_OVERRIDE */        /* Hack to set type to 040B if ROM emulator is installed.
+                                * Can be used to program a ROM in circuit if a programmer
+                                * is not available by swapping the rom out. */
 
 /* Intel flash commands */
 int flash_erase_intel(flash_info_t *info, int s_first, int s_last);
@@ -286,9 +289,16 @@ flash_get_size (int portwidth, vu_long *addr, flash_info_t *info)
            if(*caddr==0xf0) {
                /* this area is ROM */
                *caddr=save;
+#ifndef FLASH_ID_OVERRIDE
                info->flash_id = FLASH_ROM + FLASH_MAN_UNKNOWN;
                info->sector_count = 8;
                info->size = 0x80000;
+#else
+               info->flash_id = FLASH_MAN_AMD + FLASH_AM040;
+               info->sector_count = 8;
+               info->size = 0x80000;
+               info->chipwidth=1;
+#endif
                flash_get_offsets(base, info);
                return info->size;
            }
@@ -322,9 +332,16 @@ flash_get_size (int portwidth, vu_long *addr, flash_info_t *info)
            (caddr[1] == old[1])) {
 
            /* this area is ROM */
+#ifndef FLASH_ID_OVERRIDE
            info->flash_id = FLASH_ROM + FLASH_MAN_UNKNOWN;
            info->sector_count = 8;
            info->size = 0x80000;
+#else
+               info->flash_id = FLASH_MAN_AMD + FLASH_AM040;
+               info->sector_count = 8;
+               info->size = 0x80000;
+               info->chipwidth=1;
+#endif
            flash_get_offsets(base, info);
            return info->size;
 #ifdef DEBUG
index 6e31731921d47b02ecb3b5e0e96094d59442cd8b..85cc252221ff1363b62d0ef0fd237d88c7ad90e0 100644 (file)
@@ -145,8 +145,8 @@ board_asm_init:
        stwbrx  r6, r5, r3
 
        /* now, poll for the change */
-       lwbrx   r7, r5, r4
-1:     cmp     cr0, r7, r6
+1:     lwbrx   r7, r5, r4
+       cmp     cr0, r7, r6
        bne     1b
 
        /* done! */
index 10a90947f6f001210f86b6bc2fd22ef99eb1c878..ac5b3dcfc0634a984b561e80a522182c778b9193 100644 (file)
@@ -270,7 +270,7 @@ mpsc_init(int baud)
 
        /* BRG CONFIG */
        galbrg_set_baudrate(CHANNEL, baud);
-#ifdef ZUMA_NTL
+#ifdef CONFIG_ZUMA_V2
        galbrg_set_clksrc(CHANNEL,0x8); /* connect TCLK -> BRG */
 #else
        galbrg_set_clksrc(CHANNEL,0);
@@ -383,7 +383,7 @@ galbrg_set_baudrate(int channel, int rate)
 
        galbrg_disable(channel);
 
-#ifdef ZUMA_NTL
+#ifdef CONFIG_ZUMA_V2
        /* from tclk */
        clock = (CFG_BUS_HZ/(16*rate)) - 1;
 #else
index be284c4c227ef48ebb65432edfea5c85d50a2d5b..fb1494973cf97e128a749190557b23f7e6a0c5e2 100644 (file)
@@ -7,11 +7,8 @@
 
 #include <galileo/pci.h>
 
-#undef DEBUG
-#undef IDE_SET_NATIVE_MODE
-
 static const unsigned char pci_irq_swizzle[2][PCI_MAX_DEVICES] = {
-#ifdef ZUMA_NTL
+#ifdef CONFIG_ZUMA_V2
     {0,0,0,0,0,0,0,29, [8 ... PCI_MAX_DEVICES-1]=0},
     {0,0,0,0,0,0,0,28, [8 ... PCI_MAX_DEVICES-1]=0}
 #else  /* EVB??? This is a guess */
@@ -534,7 +531,7 @@ static int gt_read_config_dword(struct pci_controller *hose,
                                pci_dev_t dev,
                                int offset, u32* value)
 {
-    *value = pciReadConfigReg((PCI_HOST) hose->cfg_addr, offset, dev);
+    *value = pciReadConfigReg((PCI_HOST) hose->cfg_addr, offset, PCI_DEV(dev));
     return 0;
 }
 
@@ -542,7 +539,7 @@ static int gt_write_config_dword(struct pci_controller *hose,
                                 pci_dev_t dev,
                                 int offset, u32 value)
 {
-    pciWriteConfigReg((PCI_HOST)hose->cfg_addr, offset, dev, value);
+    pciWriteConfigReg((PCI_HOST)hose->cfg_addr, offset, PCI_DEV(dev), value);
     return 0;
 }
 
@@ -640,6 +637,10 @@ pci_init(bd_t *bd)
     pciArbiterEnable(PCI_HOST0);
     pciParkingDisable(PCI_HOST0,1,1,1,1,1,1,1);
 
+    command = pciReadConfigReg(PCI_HOST0, PCI_COMMAND, SELF);
+    command |= PCI_COMMAND_MASTER;
+    pciWriteConfigReg(PCI_HOST0, PCI_COMMAND, SELF, command);
+
     pci0_hose.last_busno = pci_hose_scan(&pci0_hose);
 
     command = pciReadConfigReg(PCI_HOST0, PCI_COMMAND, SELF);
@@ -673,6 +674,10 @@ pci_init(bd_t *bd)
     pciArbiterEnable(PCI_HOST1);
     pciParkingDisable(PCI_HOST1,1,1,1,1,1,1,1);
 
+    command = pciReadConfigReg(PCI_HOST1, PCI_COMMAND, SELF);
+    command |= PCI_COMMAND_MASTER;
+    pciWriteConfigReg(PCI_HOST1, PCI_COMMAND, SELF, command);
+
     pci1_hose.last_busno = pci_hose_scan(&pci1_hose);
 
     command = pciReadConfigReg(PCI_HOST1, PCI_COMMAND, SELF);
index abc01864c344726c5eb154bb2fd77a410130e823..8a4ffdd3f6ee0476b129e08ec12448df909cf27a 100644 (file)
@@ -35,7 +35,7 @@
 #include "i2c.h"
 #include "64260.h"
 
-#undef DEBUG
+/* #define     DEBUG */
 #define        MAP_PCI
 
 #ifdef DEBUG
 #define DP(x)
 #endif
 
-/* ------------------------------------------------------------------------- */
+#define GB         (1 << 30)
+
+/* structure to store the relevant information about an sdram bank */
+typedef struct sdram_info {
+       uchar drb_size;
+       uchar registered, ecc;
+       uchar tpar;
+       uchar tras_clocks;
+       uchar burst_len;
+       uchar banks, slot;
+       int size;       /* detected size, not from I2C but from dram_size() */
+} sdram_info_t;
 
-int
+#ifdef DEBUG
+void dump_dimm_info(struct sdram_info *d)
+{
+    static const char *ecc_legend[]={""," Parity"," ECC"};
+    printf("dimm%s %sDRAM: %dMibytes:\n",
+           ecc_legend[d->ecc],
+           d->registered?"R":"",
+           (d->size>>20));
+    printf("  drb=%d tpar=%d tras=%d burstlen=%d banks=%d slot=%d\n",
+           d->drb_size, d->tpar, d->tras_clocks, d->burst_len,
+           d->banks, d->slot);
+}
+#endif
+
+static int
 memory_map_bank(unsigned int bankNo,
                unsigned int bankBase,
                unsigned int bankLength)
 {
-#ifdef MAP_PCI
-       PCI_HOST host;
-#endif
-
-
 #ifdef DEBUG
        if (bankLength > 0) {
-               printf("\nmapping bank %d at %08x - %08x",
+               printf("mapping bank %d at %08x - %08x\n",
                       bankNo, bankBase, bankBase + bankLength - 1);
        } else {
-               printf("\nunmapping bank %d", bankNo);
+               printf("unmapping bank %d\n", bankNo);
        }
 #endif
 
        memoryMapBank(bankNo, bankBase, bankLength);
 
+       return 0;
+}
+
 #ifdef MAP_PCI
+static int
+memory_map_bank_pci(unsigned int bankNo,
+               unsigned int bankBase,
+               unsigned int bankLength)
+{
+       PCI_HOST host;
        for (host=PCI_HOST0;host<=PCI_HOST1;host++) {
                const int features=
                        PREFETCH_ENABLE |
@@ -85,24 +114,15 @@ memory_map_bank(unsigned int bankNo,
 
                pciSetRegionFeatures(host, bankNo, features, bankBase, bankLength);
        }
-#endif
        return 0;
 }
+#endif
 
-#define GB         (1 << 30)
+/* ------------------------------------------------------------------------- */
 
 /* much of this code is based on (or is) the code in the pip405 port */
 /* thanks go to the authors of said port - Josh */
 
-/* structure to store the relevant information about an sdram bank */
-typedef struct sdram_info {
-       uchar drb_size;
-       uchar registered, ecc;
-       uchar tpar;
-       uchar tras_clocks;
-       uchar burst_len;
-       uchar banks, slot;
-} sdram_info_t;
 
 /*
  * translate ns.ns/10 coding of SPD timing values
@@ -131,32 +151,37 @@ NSto10PS(unsigned char spd_byte)
        return(spd_byte*100);
 }
 
-/* This code reads the SPD chip on the sdram and populates
- * the array which is passed in with the relevant information */
+#ifdef CONFIG_ZUMA_V2
 static int
 check_dimm(uchar slot, sdram_info_t *info)
 {
-#ifdef ZUMA_NTL
-       /* zero all the values */
+        /* assume 2 dimms, 2 banks each 256M - we dont have an
+        * dimm i2c so rely on the detection routines later */
+
        memset(info, 0, sizeof(*info));
 
-       if (!slot) {
-           info->slot = 0;
-           info->banks = 1;
+       info->slot = slot;
+       info->banks = 2;        /* Detect later */
            info->registered = 0;
-           info->drb_size = 16; /* 16 - 256MBit, 32 - 512MBit */
+       info->drb_size = 32;    /* 16 - 256MBit, 32 - 512MBit
+                                  but doesn't matter, both do same
+                                  thing in setup_sdram() */
            info->tpar = 3;
            info->tras_clocks = 5;
            info->burst_len = 4;
-
 #ifdef CONFIG_ECC
-           /* check for ECC/parity [0 = none, 1 = parity, 2 = ecc] */
-           info->ecc = 2;
-#endif
-       }
+       info->ecc = 0;          /* Detect later */
+#endif /* CONFIG_ECC */
        return 0;
+}
 
-#else
+#else /* ! CONFIG_ZUMA_V2 */
+
+/* This code reads the SPD chip on the sdram and populates
+ * the array which is passed in with the relevant information */
+static int
+check_dimm(uchar slot, sdram_info_t *info)
+{
        uchar addr = slot == 0 ? DIMM0_I2C_ADDR : DIMM1_I2C_ADDR;
        int ret;
        uchar rows, cols, sdram_banks, supp_cal, width, cal_val;
@@ -250,23 +275,95 @@ check_dimm(uchar slot, sdram_info_t *info)
        /* compute the module DRB size */
        info->drb_size = (((1 << (rows + cols)) * sdram_banks) * width) / _16M;
 
+       DP(printf("drb_size set to: %d\n", info->drb_size));
+
        /* find the burst len */
        info->burst_len = data[16] & 0xf;
        if ((info->burst_len & 8) == 8) {
                info->burst_len = 1;
        } else if ((info->burst_len & 4) == 4) {
                info->burst_len = 0;
-       } else
+       } else {
                return 0;
+       }
 
        info->slot = slot;
+       return 0;
+}
+#endif /* ! CONFIG_ZUMA_V2 */
+
+static int
+setup_sdram_common(sdram_info_t info[2])
+{
+       ulong tmp;
+       int tpar=2, tras_clocks=5, registered=1, ecc=2;
+
+       if(!info[0].banks && !info[1].banks) return 0;
+
+       if(info[0].banks) {
+           if(info[0].tpar>tpar) tpar=info[0].tpar;
+           if(info[0].tras_clocks>tras_clocks) tras_clocks=info[0].tras_clocks;
+           if(!info[0].registered) registered=0;
+           if(info[0].ecc!=2) ecc=0;
+       }
+
+       if(info[1].banks) {
+           if(info[1].tpar>tpar) tpar=info[1].tpar;
+           if(info[1].tras_clocks>tras_clocks) tras_clocks=info[1].tras_clocks;
+           if(!info[1].registered) registered=0;
+           if(info[1].ecc!=2) ecc=0;
+       }
+
+       /* SDRAM configuration */
+       tmp = GTREGREAD(SDRAM_CONFIGURATION);
+
+       /* Turn on physical interleave if both DIMMs
+        * have even numbers of banks. */
+       if( (info[0].banks == 0 || info[0].banks == 2) &&
+           (info[1].banks == 0 || info[1].banks == 2) ) {
+           /* physical interleave on */
+           tmp &= ~(1 << 15);
+       } else {
+           /* physical interleave off */
+           tmp |= (1 << 15);
+       }
+       
+       tmp |= (registered << 17);
+
+       /* Use buffer 1 to return read data to the CPU
+        * See Res #12 */
+       tmp |= (1 << 26);
+
+       GT_REG_WRITE(SDRAM_CONFIGURATION, tmp);
+       DP(printf("SDRAM config: %08x\n",
+               GTREGREAD(SDRAM_CONFIGURATION)));
+
+       /* SDRAM timing */
+       tmp = (((tpar == 3) ? 2 : 1) |
+              (((tpar == 3) ? 2 : 1) << 2) |
+              (((tpar == 3) ? 2 : 1) << 4) |
+              (tras_clocks << 8));
+
+#ifdef CONFIG_ECC
+       /* Setup ECC */
+       if (ecc == 2) tmp |= 1<<13;
+#endif /* CONFIG_ECC */
+
+       GT_REG_WRITE(SDRAM_TIMING, tmp);
+       DP(printf("SDRAM timing: %08x (%d,%d,%d,%d)\n",
+               GTREGREAD(SDRAM_TIMING), tpar,tpar,tpar,tras_clocks));
+
+       /* SDRAM address decode register */
+       /* program this with the default value */
+       GT_REG_WRITE(SDRAM_ADDRESS_DECODE, 0x2);
+       DP(printf("SDRAM decode: %08x\n",
+               GTREGREAD(SDRAM_ADDRESS_DECODE)));
 
        return 0;
-#endif
 }
 
 /* sets up the GT properly with information passed in */
-int
+static int
 setup_sdram(sdram_info_t *info)
 {
        ulong tmp, check;
@@ -274,16 +371,13 @@ setup_sdram(sdram_info_t *info)
        int i;
 
        /* sanity checking */
-       if (! info->banks) {
-               printf("setup_sdram called with 0 banks\n");
-               return 1;
-       }
+       if (! info->banks) return 0;
 
        /* ---------------------------- */
        /* Program the GT with the discovered data */
 
        /* bank parameters */
-       tmp = 0;
+       tmp = (0xf<<16);        /* leave all virt bank pages open */
 
        DP(printf("drb_size: %d\n", info->drb_size));
        switch (info->drb_size) {
@@ -305,48 +399,13 @@ setup_sdram(sdram_info_t *info)
 
        /* SDRAM bank parameters */
        /* the param registers for slot 1 (banks 2+3) are offset by 0x8 */
-       DP(printf("setting up slot %d config with: %08lx\n", info->slot, tmp));
        GT_REG_WRITE(SDRAM_BANK0PARAMETERS + (info->slot * 0x8), tmp);
        GT_REG_WRITE(SDRAM_BANK1PARAMETERS + (info->slot * 0x8), tmp);
-
-       /* SDRAM configuration */
-       tmp = GTREGREAD(SDRAM_CONFIGURATION);
-
-       tmp |= (info->registered << 17);
-
-       /* Use buffer 1 to return read data to the CPU
-        * See Res #12 */
-       tmp |= (1 << 26);
-
-       GT_REG_WRITE(SDRAM_CONFIGURATION, tmp);
-
-       DP(printf("sdram_conf: %08x\n", GTREGREAD(SDRAM_CONFIGURATION)));
-
-       /* SDRAM timing */
-       DP(printf("setting timing parameters to: %d\n", info->tpar));
-
-       tmp = (((info->tpar == 3) ? 2 : 1) |
-              (((info->tpar == 3) ? 2 : 1) << 2) |
-              (((info->tpar == 3) ? 2 : 1) << 4) |
-              (info->tras_clocks << 8));
-
-       /* Is this right? RGF */
-       if (info->ecc == 2)
-               tmp |= 1<<13;
-
-       DP(printf("setting up sdram_timing with: %08lx\n", tmp));
-       GT_REG_WRITE(SDRAM_TIMING, tmp);
-
-       /* SDRAM address decode register */
-       /* program this with the default value */
-       GT_REG_WRITE(SDRAM_ADDRESS_DECODE, 0x2);
-
-       DP(printf("SDRAM address decode: %08x\n",
-                 GTREGREAD(SDRAM_ADDRESS_DECODE)));
+       DP(printf("SDRAM bankparam slot %d (bank %d+%d): %08lx\n", info->slot, info->slot*2, (info->slot*2)+1, tmp));
 
        /* set the SDRAM configuration for each bank */
        for (i = info->slot * 2; i < ((info->slot * 2) + info->banks); i++) {
-               DP(printf("\n*** Running a MRS cycle for bank %d ***\n", i));
+               DP(printf("*** Running a MRS cycle for bank %d ***\n", i));
 
                /* map the bank */
                memory_map_bank(i, 0, GB/4);
@@ -368,6 +427,7 @@ setup_sdram(sdram_info_t *info)
 
                /* unmap the bank */
                memory_map_bank(i, 0, 0);
+               DP(printf("*** MRS cycle for bank %d done ***\n", i));
        }
 
        return 0;
@@ -423,11 +483,12 @@ dram_size(long int *base, long int maxsize)
 long int
 initdram(int board_type)
 {
-       int s0 = 0, s1 = 0;
-       int checkbank[4] = { [0 ... 3] = 0 };
-        ulong bank_no, realsize, total, check;
-       sdram_info_t dimm1, dimm2;
+       ulong checkbank[4] = { [0 ... 3] = 0 };
+       int bank_no;
+        ulong total;
        int nhr;
+       sdram_info_t dimm_info[2];
+
 
        /* first, use the SPD to get info about the SDRAM */
 
@@ -438,27 +499,27 @@ initdram(int board_type)
                printf("Skipping SDRAM setup due to NHR bit being set\n");
        } else {
                /* DIMM0 */
-               s0 = check_dimm(0, &dimm1);
+               check_dimm(0, &dimm_info[0]);
 
                /* DIMM1 */
-               s1 = check_dimm(1, &dimm2);
+               check_dimm(1, &dimm_info[1]);
 
+               /* unmap all banks */
                memory_map_bank(0, 0, 0);
                memory_map_bank(1, 0, 0);
                memory_map_bank(2, 0, 0);
                memory_map_bank(3, 0, 0);
 
                /* Now, program the GT with the correct values */
-               if (dimm1.tpar > dimm2.tpar)
-                       dimm2.tpar = dimm1.tpar;
-               else if(dimm2.tpar > dimm1.tpar)
-                       dimm1.tpar = dimm2.tpar;
+               if (setup_sdram_common(dimm_info)) {
+                       printf("Setup common failed.\n");
+               }
 
-               if (dimm1.banks && setup_sdram(&dimm1)) {
+               if (setup_sdram(&dimm_info[0])) {
                        printf("Setup for DIMM1 failed.\n");
                }
 
-               if (dimm2.banks && setup_sdram(&dimm2)) {
+               if (setup_sdram(&dimm_info[1])) {
                        printf("Setup for DIMM2 failed.\n");
                }
 
@@ -467,35 +528,83 @@ initdram(int board_type)
        }
        /* next, size the SDRAM banks */
 
-       realsize = total = 0;
-       check = GB/4;
-       if (dimm1.banks > 0) checkbank[0] = 1;
-       if (dimm1.banks > 1) checkbank[1] = 1;
-       if (dimm1.banks > 2)
+       total = 0;
+       if (dimm_info[0].banks > 0) checkbank[0] = 1;
+       if (dimm_info[0].banks > 1) checkbank[1] = 1;
+       if (dimm_info[0].banks > 2)
                printf("Error, SPD claims DIMM1 has >2 banks\n");
 
-       if (dimm2.banks > 0) checkbank[2] = 1;
-       if (dimm2.banks > 1) checkbank[3] = 1;
-       if (dimm2.banks > 2)
+       if (dimm_info[1].banks > 0) checkbank[2] = 1;
+       if (dimm_info[1].banks > 1) checkbank[3] = 1;
+       if (dimm_info[1].banks > 2)
                printf("Error, SPD claims DIMM2 has >2 banks\n");
 
+       /* Generic dram sizer: works even if we don't have i2c DIMMs,
+        * as long as the timing settings are more or less correct */
+
+       /*
+        * pass 1: size all the banks, using first bat (0-256M)
+        *         limitation: we only support 256M per bank due to 
+        *         us only having 1 BAT for all DRAM
+        */
        for (bank_no = 0; bank_no < CFG_DRAM_BANKS; bank_no++) {
                /* skip over banks that are not populated */
                if (! checkbank[bank_no])
                        continue;
 
-               if ((total + check) > CFG_GT_REGS)
-                       check = CFG_GT_REGS - total;
+               DP(printf("checking bank %d\n", bank_no));
 
-               memory_map_bank(bank_no, total, check);
-               realsize = dram_size((long int *)total, check);
-               memory_map_bank(bank_no, total, realsize);
+               memory_map_bank(bank_no, 0, GB/4);
+               checkbank[bank_no] = dram_size(NULL, GB/4);
+               memory_map_bank(bank_no, 0, 0);
 
-               total += realsize;
+               DP(printf("bank %d %08lx\n", bank_no, checkbank[bank_no]));
        }
 
+       /*
+        * pass 2: contiguously map each bank into physical address 
+        *         space.
+        */
+       dimm_info[0].banks=dimm_info[1].banks=0;
+       for (bank_no = 0; bank_no < CFG_DRAM_BANKS; bank_no++) {
+               if(!checkbank[bank_no]) continue;
+
+               dimm_info[bank_no/2].banks++;
+               dimm_info[bank_no/2].size+=checkbank[bank_no];
+
+               memory_map_bank(bank_no, total, checkbank[bank_no]);
+#ifdef MAP_PCI
+               memory_map_bank_pci(bank_no, total, checkbank[bank_no]);
+#endif
+               total += checkbank[bank_no]; 
+       }
+
+#ifdef CONFIG_ECC
+#ifdef CONFIG_ZUMA_V2
+       /*
+        * We always enable ECC when bank 2 and 3 are unpopulated
+        * If we 2 or 3 are populated, we CAN'T support ECC.
+        * (Zuma boards only support ECC in banks 0 and 1; assume that
+        * in that configuration, ECC chips are mounted, even for stacked
+        * chips)
+        */
+       if (checkbank[2]==0 && checkbank[3]==0) {
+               dimm_info[0].ecc=2;
+               GT_REG_WRITE(SDRAM_TIMING, GTREGREAD(SDRAM_TIMING) | (1 << 13));
+               /* TODO: do we have to run MRS cycles again? */
+       }
+#endif /* CONFIG_ZUMA_V2 */
+
        if (GTREGREAD(SDRAM_TIMING) & (1 << 13)) {
                puts("[ECC] ");
        }
-        return(total);
+#endif /* CONFIG_ECC */
+
+#ifdef DEBUG
+       dump_dimm_info(&dimm_info[0]);
+       dump_dimm_info(&dimm_info[1]);
+#endif
+       /* TODO: return at MOST 256M? */
+        /* return total > GB/4 ? GB/4 : total; */
+       return total;
 }
index 3d53a2fdc74157b905dd88f8134bef7ecc4b036c..b078abfc32bf3f2ab3bdfa0e0ff0c4e2347249e0 100644 (file)
 #include <ppcboot.h>
 #include <command.h>
 #include <galileo/memory.h>
+
+#if (defined CFG_INIT_CHAN1) || (defined CFG_INIT_CHAN2)
 #include <ns16550.h>
+#endif
+
 #include "serial.h"
 
 #include "mpsc.h"
index 4475fc80e9638ee60c24436ea34a6683774c112b..43cbf589978054e65f67feaa2935b4c71f28e0af 100644 (file)
@@ -113,9 +113,10 @@ void pci_init (bd_t * bd)
        pci_mpc824x_init(bd, &hose);
 }
 
-void board_pre_init(void)
+int board_pre_init(void)
 {
        *(volatile unsigned char *)(CFG_CPLD_RESET) = 0x89;
+       return 0;
 }
 
 #ifdef CONFIG_WATCHDOG
index 6019bd9065eff424b7e2875276af691d9265fcc7..41e07fed5cd7475dc3071583c20a8c087909f5f2 100644 (file)
@@ -175,8 +175,6 @@ void watchdog_reset (void)
 #if (CONFIG_COMMANDS & CFG_CMD_BSP)
 int do_wd (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 {
-       uchar reg, val;
-
        switch (argc) {
        case 1:
                printf ("Watchdog timer status is %s\n",
@@ -207,4 +205,3 @@ int do_wd (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 
 #endif /* CFG_CMD_BSP */
 #endif /* CONFIG_WATCHDOG */
-
index 5338c6b5b3d2e3d4d0f2ab390405956bcd384aa5..5413a450f3fcd3538ee7c71b3e54875687e87bac 100644 (file)
@@ -355,7 +355,12 @@ board_init_f (ulong bootflag)
     if (CFG_MONITOR_LEN > len)
        len = CFG_MONITOR_LEN;
 
+#ifndef        CONFIG_VERY_BIG_RAM
     addr = CFG_SDRAM_BASE + dram_size;
+#else
+    /* only allow stack below 256M */
+    addr = CFG_SDRAM_BASE + (dram_size > 256<<20) ? 256<<20 : dram_size;
+#endif
 
 #ifdef CONFIG_PRAM
     /*
index 295dee470a21ae9c680f412a43a7635ecbe37e04..546804a72a9ddebd8dea50d014d82716aad6d15e 100644 (file)
 # define SHOW_BOOT_PROGRESS(arg)
 #endif
 
+#ifdef CFG_INIT_RAM_LOCK
+#include <asm/cache.h>
+#endif
+
 int  gunzip (void *, int, unsigned char *, int *);
 
 static void *zalloc(void *, unsigned, unsigned);
@@ -509,6 +513,9 @@ do_bootm_linux (cmd_tbl_t *cmdtp, bd_t *bd, int flag,
 #endif
        SHOW_BOOT_PROGRESS (15);
 
+#ifdef CFG_INIT_RAM_LOCK
+       unlock_ram_in_cache();
+#endif
        /*
         * Linux Kernel Parameters:
         *   r3: ptr to board info data
index 7b98e44e07de28db2008d9d2117a15f23ce6277b..02b89b77fade86990b9bd41b5691ea7629255b16 100644 (file)
@@ -329,23 +329,7 @@ in_flash:
        sync
 
 #ifdef CFG_INIT_RAM_LOCK
-       /* Allocate Initial RAM in data cache.
-        */
-       lis     r3, (CFG_INIT_RAM_ADDR & ~31)@h
-       ori     r3, r3, (CFG_INIT_RAM_ADDR & ~31)@l
-       li      r2, ((CFG_INIT_RAM_END & ~31) + \
-                    (CFG_INIT_RAM_ADDR & 31) + 31) / 32
-       mtctr   r2
-1:
-       dcbz    r0, r3
-       addi    r3, r3, 32
-       bdnz    1b
-
-       /* Lock the data cache */
-       mfspr   r0, HID0
-       ori     r0, r0, 0x1000
-       sync
-       mtspr   HID0, r0
+       bl      lock_ram_in_cache
        sync
 #endif
 
@@ -827,3 +811,49 @@ trap_reloc:
        isync
 
        blr
+
+#ifdef CFG_INIT_RAM_LOCK
+lock_ram_in_cache:
+       /* Allocate Initial RAM in data cache.
+        */
+       lis     r3, (CFG_INIT_RAM_ADDR & ~31)@h
+       ori     r3, r3, (CFG_INIT_RAM_ADDR & ~31)@l
+       li      r2, ((CFG_INIT_RAM_END & ~31) + \
+                    (CFG_INIT_RAM_ADDR & 31) + 31) / 32
+       mtctr   r2
+1:
+       dcbz    r0, r3
+       addi    r3, r3, 32
+       bdnz    1b
+
+       /* Lock the data cache */
+       mfspr   r0, HID0
+       ori     r0, r0, 0x1000
+       sync
+       mtspr   HID0, r0
+       sync
+       blr
+
+.globl unlock_ram_in_cache
+unlock_ram_in_cache:
+       /* invalidate the INIT_RAM section */
+       lis     r3, (CFG_INIT_RAM_ADDR & ~31)@h
+       ori     r3, r3, (CFG_INIT_RAM_ADDR & ~31)@l
+       li      r2, ((CFG_INIT_RAM_END & ~31) + \
+                    (CFG_INIT_RAM_ADDR & 31) + 31) / 32
+       mtctr   r2
+1:     icbi    r0, r3
+       addi    r3, r3, 32
+       bdnz    1b
+       sync                    /* Wait for all icbi to complete on bus */
+       isync
+
+       /* Unlock the data cache */
+       mfspr   r0, HID0
+       li      r3,0x1000
+       andc    r0,r0,r3
+       sync
+       mtspr   HID0, r0
+       sync
+       blr
+#endif
index 5d3d2fe864ca586ceda8421eb8c5b7d96603a56a..9331436ab10bc7ba20c8fcffd47e37b4baade2ff 100644 (file)
@@ -63,6 +63,8 @@
 |  26-Feb-02   stefan.roese@esd-electronics.com
 |              - Bug fixed in pci configuration (Andrew May)
 |              - Removed pci class code init for CPCI405 board
+|  15-May-02   stefan.roese@esd-electronics.com
+|              - New vga device handling
 +----------------------------------------------------------------------------*/
 
 #include <ppcboot.h>
@@ -309,7 +311,14 @@ void pci_405gp_fixup_irq(struct pci_controller *hose, pci_dev_t dev)
 void pci_405gp_setup_vga(struct pci_controller *hose, pci_dev_t dev, 
                         struct pci_config_table *entry)
 {
-  pciauto_setup_device(hose, dev, 6, hose->pci_fb, hose->pci_io);
+  unsigned int cmdstat = 0;
+
+  pciauto_setup_device(hose, dev, 6, hose->pci_mem, hose->pci_io);
+
+  /* always enable io space on vga boards */
+  pci_hose_read_config_dword(hose, dev, PCI_COMMAND, &cmdstat);
+  cmdstat |= PCI_COMMAND_IO;
+  pci_hose_write_config_dword(hose, dev, PCI_COMMAND, cmdstat);
 }
 
 #if !(defined(CONFIG_PIP405) || defined (CONFIG_MIP405))
index 9f89f566bcb9a12d63dcd439775a13dfd0d29fd1..176f4941d59c70fbb2caf3434d9144da1a80e31c 100644 (file)
@@ -38,7 +38,6 @@
 #include <asm/io.h>
 #include <pci.h>
 
-#undef DEBUG
 #ifdef DEBUG
 #define DBG(x...) printf(x)
 #else
@@ -446,13 +445,14 @@ int pci_hose_scan_bus(struct pci_controller *hose, int bus)
 
                pci_hose_read_config_byte(hose, dev, PCI_HEADER_TYPE, &header_type);
 
-               if (!PCI_FUNC(dev))
-                       found_multi = header_type & 0x80;
-
                pci_hose_read_config_word(hose, dev, PCI_VENDOR_ID, &vendor);
 
                if (vendor != 0xffff && vendor != 0x0000)
                {
+
+                       if (!PCI_FUNC(dev))
+                               found_multi = header_type & 0x80;
+
                        DBG("PCI Scan: Found Bus %d, Device %d, Function %d\n",
                            PCI_BUS(dev), PCI_DEV(dev), PCI_FUNC(dev) );
 
index 13ee3cdc071aac784c072685802c07eb7b2b43c7..8604ce6136ab4f9ad595be931bb3ea6a3ff648c4 100644 (file)
@@ -1,21 +1,24 @@
 /*
-       Copyright 1998-2001 by Donald Becker.
-       This software may be used and distributed according to the terms of
-       the GNU General Public License (GPL), incorporated herein by reference.
-       Contact the author for use under other terms.
-
-       This program must be compiled with "-O"!
-       See the bottom of this file for the suggested compile-command.
-
-       The author may be reached as becker@scyld.com, or C/O
-        Scyld Computing Corporation
-        410 Severn Ave., Suite 210
-        Annapolis MD 21403
-
-       Common-sense licensing statement: Using any portion of this program in
-       your own program means that you must give credit to the original author
-       and release the resulting code under the GPL.
-*/
+ * Copyright 1998-2001 by Donald Becker.
+ * This software may be used and distributed according to the terms of
+ * the GNU General Public License (GPL), incorporated herein by reference.
+ * Contact the author for use under other terms.
+ *
+ * This program must be compiled with "-O"!
+ * See the bottom of this file for the suggested compile-command.
+ *
+ * The author may be reached as becker@scyld.com, or C/O
+ *  Scyld Computing Corporation
+ *  410 Severn Ave., Suite 210
+ *  Annapolis MD 21403
+ *
+ * Common-sense licensing statement: Using any portion of this program in
+ * your own program means that you must give credit to the original author
+ * and release the resulting code under the GPL.
+ */
+
+#define _PPC_STRING_H_         /* avoid unnecessary str/mem functions */
+#define _LINUX_STRING_H_       /* avoid unnecessary str/mem functions */
 
 #include <ppcboot.h>
 #include <syscall.h>
@@ -25,15 +28,15 @@ static int reset_eeprom(unsigned long ioaddr, unsigned char *hwaddr);
 int eepro100_eeprom(void)
 {
        int ret = 0;
-       
+
        unsigned char hwaddr1[6] = { 0x00, 0x00, 0x02, 0x03, 0x04, 0x05 };
        unsigned char hwaddr2[6] = { 0x00, 0x00, 0x02, 0x03, 0x04, 0x06 };
-       
+
 #if defined(CONFIG_OXC)
        ret |= reset_eeprom(0x80000000, hwaddr1);
        ret |= reset_eeprom(0x81000000, hwaddr2);
 #endif
-       
+
        return ret;
 }
 
@@ -156,7 +159,7 @@ static void write_eeprom(long ioaddr, int index, int value, int addr_len)
        eeprom_busy_poll(ee_ioaddr);                    /* Typical 0 ticks */
        /* Enable programming modes. */
        do_eeprom_cmd(ioaddr, (0x4f << (addr_len-4)), 3 + addr_len);
-       /* Do the actual write. */ 
+       /* Do the actual write. */
        do_eeprom_cmd(ioaddr,
                                  (((EE_WRITE_CMD<<addr_len) | index)<<16) | (value & 0xffff),
                                  3 + addr_len + 16);
@@ -200,7 +203,7 @@ static int reset_eeprom(unsigned long ioaddr, unsigned char *hwaddr)
                        mon_printf("failed\n");
                        return 1;
                }
-               
+
        mon_printf("done\n");
        return 0;
 }
index 35b074dad1a81af0af0097604143514a182117e1..5befab4d536894040b45939a259217e6e93ba688 100644 (file)
@@ -35,6 +35,9 @@
 extern void flush_dcache_range(unsigned long start, unsigned long stop);
 extern void clean_dcache_range(unsigned long start, unsigned long stop);
 extern void invalidate_dcache_range(unsigned long start, unsigned long stop);
+#ifdef CFG_INIT_RAM_LOCK
+extern void unlock_ram_in_cache(void);
+#endif /* CFG_INIT_RAM_LOCK */
 #endif /* __ASSEMBLY__ */
 
 /* prep registers for L2 */
index 69b10dd5246a3c62656fcf5c0ae03ed8e3c1a505..df56de1d30a6f2b0fb5714f8e511ffc2f844a1ca 100644 (file)
@@ -170,7 +170,7 @@ int do_crayL1 (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);
 
 #if defined (CONFIG_EVB64260)
 /* ----- EVB64260 -------------------------------------------------------------*/
-#ifdef ZUMA_NTL
+#ifdef CONFIG_ZUMA_V2
 #define CMD_TBL_BSP  ZUMA_TBL_ENTRY
 
 #define ZUMA_TBL_ENTRY MK_CMD_TBL_ENTRY(                               \
index bc3eb99cd0292790c92b19f17ab00546bbf4497b..ad5abd5cb8473f49837174a59d122445f4ecb319 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_BITS 4   /* The Catalyst CAT24WC08 has   */
                                        /* 16 byte page write mode using*/
                                        /* last 4 bits of the address   */
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
+#define CFG_EEPROM_PAGE_WRITE_ENABLE 
 
 /*-----------------------------------------------------------------------
  * Cache Configuration
 #define CFG_EBC_PB5AP           0x04005B80  /* TWT=8,WBN=1,WBF=1,TH=5,RE=1,SOR=1*/
 #define CFG_EBC_PB5CR           0xF0318000  /* BAS=0xF03,BS=1MB,BU=R/W,BW=8bit  */
 
+/*-----------------------------------------------------------------------
+ * FPGA stuff
+ */
 
-/* Configuration Port location */
-#define CONFIG_PORT_ADDR       0xF0000500
+/* FPGA program pin configuration */
+#define CFG_FPGA_PRG            0x04000000  /* FPGA program pin (ppc output) */
+#define CFG_FPGA_CLK            0x02000000  /* FPGA clk pin (ppc output)     */
+#define CFG_FPGA_DATA           0x01000000  /* FPGA data pin (ppc output)    */
+#define CFG_FPGA_INIT           0x00400000  /* FPGA init pin (ppc input)     */
+#define CFG_FPGA_DONE           0x00800000  /* FPGA done pin (ppc input)     */
 
 /*-----------------------------------------------------------------------
  * Definitions for initial stack pointer and data area (in data cache)
diff --git a/include/config_CPCI4052.h b/include/config_CPCI4052.h
new file mode 100644 (file)
index 0000000..94b645a
--- /dev/null
@@ -0,0 +1,364 @@
+/*
+ * (C) Copyright 2001
+ * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_405GP           1       /* This is a PPC405 CPU         */
+#define CONFIG_4xx             1       /* ...member of PPC4xx family   */
+#define CONFIG_CPCI405         1       /* ...on a CPCI405 board        */
+#define CONFIG_CPCI405_VER2     1       /* ...version 2                 */
+
+#define CONFIG_BOARD_PRE_INIT   1       /* call board_pre_init()        */
+
+#define CONFIG_SYS_CLK_FREQ     33333333 /* external frequency to pll   */
+
+#define CONFIG_BAUDRATE                9600
+#define CONFIG_BOOTDELAY       3       /* autoboot after 3 seconds     */
+
+#if 0
+#define CONFIG_PREBOOT                                                          \
+        "crc32 f0207004 ffc 0;"                                                 \
+        "if cmp 0 f0207000 1;"                                                  \
+        "then;echo Old CRC is correct;crc32 f0207004 ff4 f0207000;"             \
+        "else;echo Old CRC is bad;fi"
+#endif
+
+#undef CONFIG_BOOTARGS
+#define CONFIG_RAMBOOTCOMMAND                                                  \
+       "setenv bootargs root=/dev/ram rw nfsroot=$(serverip):$(rootpath) "     \
+       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "bootm ffc00000 ffca0000"
+#define CONFIG_NFSBOOTCOMMAND                                                  \
+       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
+       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "bootm ffc00000"
+#define CONFIG_BOOTCOMMAND CONFIG_RAMBOOTCOMMAND
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
+
+#define CONFIG_MII             1       /* MII PHY management           */
+#define        CONFIG_PHY_ADDR         0       /* PHY address                  */
+
+#define CONFIG_RTC_M48T35A     1               /* ST Electronics M48 timekeeper */
+
+#define CONFIG_COMMANDS              ( CONFIG_CMD_DFL  | \
+                               CFG_CMD_PCI     | \
+                               CFG_CMD_IRQ     | \
+                               CFG_CMD_IDE     | \
+                               CFG_CMD_ELF     | \
+                               CFG_CMD_DATE    | \
+                               CFG_CMD_I2C     | \
+                               CFG_CMD_EEPROM  )
+
+#define CONFIG_MAC_PARTITION
+#define CONFIG_DOS_PARTITION
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#undef  CONFIG_WATCHDOG                        /* watchdog disabled            */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_PROMPT     "=> "           /* Monitor Command Prompt       */
+
+#undef CFG_HUSH_PARSER                 /* use "hush" command parser    */
+#ifdef CFG_HUSH_PARSER
+#define        CFG_PROMPT_HUSH_PS2     "> "
+#endif
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define        CFG_CBSIZE      1024            /* Console I/O Buffer Size      */
+#else
+#define        CFG_CBSIZE      256             /* Console I/O Buffer Size      */
+#endif
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args   */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size    */
+
+#define CFG_DEVICE_NULLDEV      1       /* include nulldev device       */
+
+#define CFG_CONSOLE_INFO_QUIET  1       /* don't print console @ startup*/
+
+#define CFG_MEMTEST_START      0x0400000       /* memtest works on     */
+#define CFG_MEMTEST_END                0x0C00000       /* 4 ... 12 MB in DRAM  */
+
+#undef  CFG_EXT_SERIAL_CLOCK           /* no external serial clock used */
+#define CFG_IGNORE_405_UART_ERRATA_59   /* ignore ppc405gp errata #59   */
+#define CFG_BASE_BAUD       691200
+
+/* The following table includes the supported baudrates */
+#define CFG_BAUDRATE_TABLE      \
+        { 300, 600, 1200, 2400, 4800, 9600, 19200, 38400,     \
+         57600, 115200, 230400, 460800, 921600 }
+
+#define CFG_LOAD_ADDR  0x100000        /* default load address */
+#define CFG_EXTBDINFO  1               /* To use extended board_into (bd_t) */
+
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
+#define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *-----------------------------------------------------------------------
+ */
+#define PCI_HOST_ADAPTER 0              /* configure as pci adapter     */
+#define PCI_HOST_FORCE  1               /* configure as pci host        */
+#define PCI_HOST_AUTO   2               /* detected via arbiter enable  */
+
+#define CONFIG_PCI                     /* include pci support          */
+#define CONFIG_PCI_HOST        PCI_HOST_AUTO   /* select pci host function     */
+#define CONFIG_PCI_PNP                 /* do pci plug-and-play         */
+                                        /* resource configuration       */
+
+#define CONFIG_PCI_SCAN_SHOW            /* print pci devices @ startup  */
+
+#define CFG_PCI_SUBSYS_VENDORID 0x12FE  /* PCI Vendor ID: esd gmbh      */
+#define CFG_PCI_SUBSYS_DEVICEID 0x0405  /* PCI Device ID: CPCI-405      */
+#define CFG_PCI_SUBSYS_DEVICEID2 0x0406 /* PCI Device ID: CPCI-405-A    */
+#define CFG_PCI_CLASSCODE       0x0b20  /* PCI Class Code: Processor/PPC*/
+#define CFG_PCI_PTM1LA  0x00000000      /* point to sdram               */
+#define CFG_PCI_PTM1MS  0xfc000001      /* 64MB, enable hard-wired to 1 */
+#define CFG_PCI_PTM1PCI 0x00000000      /* Host: use this pci address   */
+#define CFG_PCI_PTM2LA  0xffc00000      /* point to flash               */
+#define CFG_PCI_PTM2MS  0xffc00001      /* 4MB, enable                  */
+#define CFG_PCI_PTM2PCI 0x04000000      /* Host: use this pci address   */
+
+/*-----------------------------------------------------------------------
+ * IDE/ATA stuff
+ *-----------------------------------------------------------------------
+ */
+#undef  CONFIG_IDE_8xx_DIRECT               /* no pcmcia interface required */
+#undef  CONFIG_IDE_LED                  /* no led for ide supported     */
+#define CONFIG_IDE_RESET       1       /* reset for ide supported      */
+
+#define        CFG_IDE_MAXBUS          1               /* max. 1 IDE busses    */
+#define        CFG_IDE_MAXDEVICE       (CFG_IDE_MAXBUS*1) /* max. 1 drives per IDE bus */
+
+#define        CFG_ATA_BASE_ADDR       0xF0100000
+#define        CFG_ATA_IDE0_OFFSET     0x0000
+
+#define CFG_ATA_DATA_OFFSET    0x0000  /* Offset for data I/O                  */
+#define        CFG_ATA_REG_OFFSET      0x0000  /* Offset for normal register accesses  */
+#define CFG_ATA_ALT_OFFSET     0x0000  /* Offset for alternate registers       */
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CFG_SDRAM_BASE _must_ start at 0
+ */
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_FLASH_BASE         0xFFFD0000
+#define CFG_MONITOR_BASE       CFG_FLASH_BASE
+#define CFG_MONITOR_LEN                (192 * 1024)    /* Reserve 196 kB for Monitor   */
+#define CFG_MALLOC_LEN         (128 * 1024)    /* Reserve 128 kB for malloc()  */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#define CFG_MAX_FLASH_BANKS    2       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     256     /* max number of sectors on one chip    */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+
+#define CFG_FLASH_WORD_SIZE     unsigned short  /* flash word size (width)      */
+#define CFG_FLASH_ADDR0         0x5555  /* 1st address for flash config cycles  */
+#define CFG_FLASH_ADDR1         0x2AAA  /* 2nd address for flash config cycles  */
+/*
+ * The following defines are added for buggy IOP480 byte interface.
+ * All other boards should use the standard values (CPCI405 etc.)
+ */
+#define CFG_FLASH_READ0         0x0000  /* 0 is standard                        */
+#define CFG_FLASH_READ1         0x0001  /* 1 is standard                        */
+#define CFG_FLASH_READ2         0x0002  /* 2 is standard                        */
+
+#define CFG_FLASH_EMPTY_INFO            /* print 'E' for empty sector on flinfo */
+
+#if 0 /* Use NVRAM for environment variables */
+/*-----------------------------------------------------------------------
+ * NVRAM organization
+ */
+#define CFG_ENV_IS_IN_NVRAM    1       /* use NVRAM for environment vars       */
+#define CFG_ENV_SIZE           0x0ff8          /* Size of Environment vars     */
+#define CFG_ENV_ADDR           \
+       (CFG_NVRAM_BASE_ADDR+CFG_NVRAM_SIZE-(CFG_ENV_SIZE+8))   /* Env  */  
+
+#else /* Use EEPROM for environment variables */
+
+#define CFG_ENV_IS_IN_EEPROM    1       /* use EEPROM for environment vars */
+#define CFG_ENV_OFFSET          0x000   /* environment starts at the beginning of the EEPROM */
+#define CFG_ENV_SIZE            0x800   /* 2048 bytes may be used for env vars*/
+                                   /* total size of a CAT24WC16 is 2048 bytes */
+#endif
+
+#define CFG_NVRAM_BASE_ADDR    0xf0200000              /* NVRAM base address   */
+#define CFG_NVRAM_SIZE         (32*1024)               /* NVRAM size           */
+#define CFG_NVRAM_VXWORKS_OFFS 0x6900          /* Offset for VxWorks eth-addr  */
+
+/*-----------------------------------------------------------------------
+ * I2C EEPROM (CAT24WC16) for environment
+ */
+#define CONFIG_HARD_I2C                        /* I2c with hardware support */
+#define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
+#define CFG_I2C_SLAVE          0x7F
+
+#define CFG_I2C_EEPROM_ADDR    0x50    /* EEPROM CAT28WC08             */
+#define CFG_I2C_EEPROM_ADDR_LEN        1       /* Bytes of address             */
+/* mask of address bits that overflow into the "EEPROM chip address"    */
+#define CFG_I2C_EEPROM_ADDR_OVERFLOW   0x07
+#define CFG_EEPROM_PAGE_WRITE_BITS 4   /* The Catalyst CAT24WC08 has   */
+                                       /* 16 byte page write mode using*/
+                                       /* last 4 bits of the address   */
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
+#define CFG_EEPROM_PAGE_WRITE_ENABLE 
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_CACHELINE_SIZE     32      /* ...                  */
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
+#endif
+
+/*
+ * Init Memory Controller:
+ *
+ * BR0/1 and OR0/1 (FLASH)
+ */
+
+#define FLASH_BASE0_PRELIM     0xFF800000      /* FLASH bank #0        */
+#define FLASH_BASE1_PRELIM     0xFFC00000      /* FLASH bank #1        */
+
+/*-----------------------------------------------------------------------
+ * External Bus Controller (EBC) Setup
+ */
+
+/* Memory Bank 0 (Flash Bank 0) initialization                                  */
+#define CFG_EBC_PB0AP           0x92015480
+#define CFG_EBC_PB0CR           0xFFC5A000  /* BAS=0xFFC,BS=4MB,BU=R/W,BW=16bit */
+
+/* Memory Bank 1 (Flash Bank 1) initialization                                  */
+#define CFG_EBC_PB1AP           0x92015480
+#define CFG_EBC_PB1CR           0xFF85A000  /* BAS=0xFF8,BS=4MB,BU=R/W,BW=16bit */
+
+/* Memory Bank 2 (CAN0, 1) initialization                                       */
+#define CFG_EBC_PB2AP           0x010053C0  /* BWT=2,WBN=1,WBF=1,TH=1,RE=1,SOR=1,BEM=1 */
+#define CFG_EBC_PB2CR           0xF0018000  /* BAS=0xF00,BS=1MB,BU=R/W,BW=8bit  */
+
+/* Memory Bank 3 (CompactFlash IDE) initialization                              */
+#define CFG_EBC_PB3AP           0x010053C0  /* BWT=2,WBN=1,WBF=1,TH=1,RE=1,SOR=1,BEM=1 */
+#define CFG_EBC_PB3CR           0xF011A000  /* BAS=0xF01,BS=1MB,BU=R/W,BW=16bit */
+
+/* Memory Bank 4 (NVRAM/RTC) initialization                                     */
+#define CFG_EBC_PB4AP           0x01005280  /* TWT=2,WBN=1,WBF=1,TH=1,SOR=1     */
+#define CFG_EBC_PB4CR           0xF0218000  /* BAS=0xF02,BS=1MB,BU=R/W,BW=8bit  */
+
+/* Memory Bank 5 (optional Quart) initialization                                */
+#define CFG_EBC_PB5AP           0x04005B80  /* TWT=8,WBN=1,WBF=1,TH=5,RE=1,SOR=1*/
+#define CFG_EBC_PB5CR           0xF0318000  /* BAS=0xF03,BS=1MB,BU=R/W,BW=8bit  */
+
+/* Memory Bank 6 (FPGA internal) initialization                                 */
+#define CFG_EBC_PB6AP           0x010053C0  /* BWT=2,WBN=1,WBF=1,TH=1,RE=1,SOR=1,BEM=1 */
+#define CFG_EBC_PB6CR           0xF041A000  /* BAS=0xF01,BS=1MB,BU=R/W,BW=16bit */
+#define CFG_FPGA_BASE_ADDR      0xF0400000
+
+/*-----------------------------------------------------------------------
+ * FPGA stuff
+ */
+/* FPGA internal regs */
+#define CFG_FPGA_MODE           0x00
+#define CFG_FPGA_STATUS         0x02
+#define CFG_FPGA_TS             0x04
+#define CFG_FPGA_TS_LOW         0x06
+#define CFG_FPGA_TS_CAP0        0x08
+#define CFG_FPGA_TS_CAP0_LOW    0x0a
+#define CFG_FPGA_TS_CAP1        0x0c
+#define CFG_FPGA_TS_CAP1_LOW    0x0e
+
+/* FPGA Mode Reg */
+#define CFG_FPGA_MODE_CF_RESET  0x0001
+#define CFG_FPGA_MODE_IRQ_ENABLE 0x0100
+
+/* FPGA Status Reg */
+#define CFG_FPGA_STATUS_DIP0    0x0001
+#define CFG_FPGA_STATUS_DIP1    0x0002
+#define CFG_FPGA_STATUS_DIP2    0x0004
+#define CFG_FPGA_STATUS_FLASH   0x0008
+
+#define CFG_FPGA_SPARTAN2       1           /* using Xilinx Spartan 2 now    */
+#define CFG_FPGA_MAX_SIZE       32*1024     /* 32kByte is enough for XC2S15  */
+
+/* FPGA program pin configuration */
+#define CFG_FPGA_PRG            0x04000000  /* FPGA program pin (ppc output) */
+#define CFG_FPGA_CLK            0x02000000  /* FPGA clk pin (ppc output)     */
+#define CFG_FPGA_DATA           0x01000000  /* FPGA data pin (ppc output)    */
+#define CFG_FPGA_INIT           0x00010000  /* FPGA init pin (ppc input)     */
+#define CFG_FPGA_DONE           0x00008000  /* FPGA done pin (ppc input)     */
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in data cache)
+ */
+#if 1 /* test-only */
+#define CFG_INIT_DCACHE_CS      7       /* use cs # 7 for data cache memory    */
+
+#define CFG_INIT_RAM_ADDR       0x40000000  /* use data cache                  */
+#else
+#define CFG_INIT_RAM_ADDR      0x00df0000 /* inside of SDRAM                   */
+#endif
+#define CFG_INIT_RAM_END        0x2000  /* End of used area in RAM             */
+#define CFG_INIT_DATA_SIZE      128  /* size in bytes reserved for initial data */
+#define CFG_INIT_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_INIT_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET      CFG_INIT_DATA_OFFSET
+
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
+#define BOOTFLAG_WARM  0x02            /* Software reboot                      */
+
+#endif /* __CONFIG_H */
index a7ec1d4313ea32d15cfe00e660e43e7c767b7bcb..5830a452249e49c3bb2b83a8b0c4ad50a0d21a21 100644 (file)
 #define CFG_I2C_SLAVE          0x7F
 
 #define CFG_I2C_EEPROM_ADDR    0x50    /* EEPROM CAT28WC08             */
-#define CFG_I2C_EEPROM_ADDR_LEN        1       /* bytes of address             */
+#define CFG_I2C_EEPROM_ADDR_LEN        1       /* Bytes of address             */
 /* mask of address bits that overflow into the "EEPROM chip address"    */
 #define CFG_I2C_EEPROM_ADDR_OVERFLOW   0x07
 #define CFG_EEPROM_PAGE_WRITE_BITS 4   /* The Catalyst CAT24WC08 has   */
                                        /* 16 byte page write mode using*/
                                        /* last 4 bits of the address   */
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
+#define CFG_EEPROM_PAGE_WRITE_ENABLE 
 
 #define CFG_ENV_IS_IN_EEPROM    1       /* use EEPROM for environment vars */
 #define CFG_ENV_OFFSET          0x000   /* environment starts at the beginning of the EEPROM */
index 6b191a7ab3e73890eb50f6fd7456160de40d9d72..1e2ca733e37b75c32f23755bfebe24b34a7b5b58 100644 (file)
 #define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
 #define CFG_I2C_SLAVE          0x7F
 
-#define CFG_I2C_EEPROM_ADDR    0x50
-#define CFG_I2C_EEPROM_ADDR_LEN        1
+#define CFG_I2C_EEPROM_ADDR    0x50    /* EEPROM CAT28WC08             */
+#define CFG_I2C_EEPROM_ADDR_LEN        1       /* Bytes of address             */
 /* mask of address bits that overflow into the "EEPROM chip address"    */
 #define CFG_I2C_EEPROM_ADDR_OVERFLOW   0x07
 #define CFG_EEPROM_PAGE_WRITE_BITS 4   /* The Catalyst CAT24WC08 has   */
                                        /* 16 byte page write mode using*/
                                        /* last 4 bits of the address   */
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
+#define CFG_EEPROM_PAGE_WRITE_ENABLE 
 
 #define CFG_ENV_IS_IN_EEPROM    1       /* use EEPROM for environment vars */
 #define CFG_ENV_OFFSET          0x000   /* environment starts at the beginning of the EEPROM */
index 6d8a8429c41a7e3a8230851ff7cdb794e3825b3d..9f3bc5a261976e8440ae78c1bfee83fe5ad54574 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_BITS 4   /* The Catalyst CAT24WC08 has   */
                                        /* 16 byte page write mode using*/
                                        /* last 4 bits of the address   */
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
+#define CFG_EEPROM_PAGE_WRITE_ENABLE 
 
 /*-----------------------------------------------------------------------
  * Cache Configuration
index 000b640a4ce5d222c44061c643b7e2b3a08160d0..b68e90f932557a6ae3e97990f8a6b8994e5e2fb6 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_BITS 4   /* The Catalyst CAT24WC08 has   */
                                        /* 16 byte page write mode using*/
                                        /* last 4 bits of the address   */
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
+#define CFG_EEPROM_PAGE_WRITE_ENABLE 
 
 /*-----------------------------------------------------------------------
  * Cache Configuration
index 5b9aaa9a781d569e49cfc26e895e2567cd6428cf..4399bde8c16fb6d747f0f4351070c0a42de2320e 100644 (file)
 #define CFG_FLASH0_BASE                0xFFF00000
 #define CFG_FLASH1_BASE                0xFFE00000
 #define CFG_FLASH_BASE         (0-flash_info[0].size)
+#define CFG_FLASH_PRELIMBASE   0xFF800000
 
 #define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
 #define CFG_MAX_FLASH_SECT     32      /* max number of sectors on one chip    */
index 53efa16def74cc52b6115f3a06ba408613633bac..9f6434fb8ea5b149ef915dbf98a1a3b8573847a1 100644 (file)
 
 #include <asm/processor.h>
 
+#define CFG_GT_6426x        GT_64260 /* with a 64260 system controller */
+#define CONFIG_ETHER_PORT_MII  /* use two MII ports */
+#define CONFIG_INTEL_LXT97X    /* Intel LXT97X phy */
+
 #ifndef __ASSEMBLY__
 #include <galileo/core.h>
 #endif
@@ -37,8 +41,9 @@
 #include "../board/evb64260/local.h"
 
 #define CONFIG_EVB64260                1       /* this is an EVB64260 board    */
-#define ZUMA_NTL               1       /* temporary, will rename to something nicer */
-#define CFG_GT_6426x        GT_64260 /* with a 64260 system controller */
+#define CONFIG_ZUMA_V2         1       /* always define this for ZUMA v2 */
+
+/* #define CONFIG_ZUMA_V2_OLD  1 */    /* backwards compat for old V2 board */
 
 #define CONFIG_BAUDRATE                38400   /* console baudrate = 38400     */
 
@@ -77,8 +82,6 @@
 /* define this if you want to enable GT MAC filtering */
 #define CONFIG_GT_USE_MAC_HASH_TABLE
  
-#define CONFIG_ETHER_PORT_MII  /* use MII */
-
 #if 1
 #define CONFIG_BOOTDELAY       -1      /* autoboot disabled            */
 #else
 #define CONFIG_BOOTP_MASK      (CONFIG_BOOTP_DEFAULT | \
                                 CONFIG_BOOTP_BOOTFILESIZE)
 
-#define CONFIG_MII
+#define CONFIG_MII             /* enable MII commands */
+
 #define CONFIG_COMMANDS                (CONFIG_CMD_DFL | \
                                 CFG_CMD_ASKENV | \
                                 CFG_CMD_BSP    | \
 #define CFG_GT_REGS            0xf8000000      /* later mapped GT_REGS */
 #define CFG_DEV_BASE           0xf0000000
 #define CFG_DEV0_SIZE          _64M /* zuma flash @ 0xf000.0000*/
-#define CFG_DEV1_SIZE           _8M /* unused */
+#define CFG_DEV1_SIZE           _8M /* zuma IDE   @ 0xf400.0000 */
 #define CFG_DEV2_SIZE           _8M /* unused */
 #define CFG_DEV3_SIZE           _8M /* unused */
 
        /* 11|00|0100|10 01|100|0 00|10 0|100 0|011 1|100 */
        /*  3| 0|.... ..| 1| 4 |  0 |  4 |   8 |   7 | 4  */
 
+#define CFG_DEV1_PAR           0xc01b6ac5
+       /*     c    0     1     b     6     a     c     5 */
+       /* 33 22|2222|22 22|111 1|11 11|1 1  |     |      */
+       /* 10 98|7654|32 10|987 6|54 32|1 098|7 654|3 210 */
+       /* 11|00|0000|00 01|101|1 01|10 1|010 1|100 0|101 */
+       /*  3| 0|.... ..| 1| 5 |  5 |  5 |   5 |   8 | 5  */
+
+
+
 #define CFG_8BIT_BOOT_PAR      0xc00b5e7c
 
 #define CFG_MPP_CONTROL_0      0x00007777 /* GPP[7:4] : REQ0[1:0] GNT0[1:0] */
 #define CFG_MPP_CONTROL_1      0x00000000 /* GPP[15:12] : GPP[11:8] */
 #define CFG_MPP_CONTROL_2      0x00008888 /* GPP[23:20] : REQ1[1:0] GNT1[1:0] */
-#define CFG_MPP_CONTROL_3      0x00009900 /* GPP[31:28] (pci int[3:0]) */
-                                          /* WDE WDNMI GPP[25:24] */
+#define CFG_MPP_CONTROL_3      0x00000000 /* GPP[31:28] (int[3:0]) */
+                                          /* GPP[27:24] (27 is int4, rest are GPP) */
 
 #define CFG_SERIAL_PORT_MUX    0x00001101 /* 11=MPSC1/MPSC0 01=ETH,  0=only MII */
-#define CFG_GPP_LEVEL_CONTROL  0xf000c000 /* GPP[31:28] ints GPP[15:14] led */
+#define CFG_GPP_LEVEL_CONTROL  0xf8000000 /* interrupt inputs: GPP[31:27] */
 
-#define CFG_SDRAM_CONFIG       0xf4e18200      /* 0x448 */
+#define CFG_SDRAM_CONFIG       0xe4e18200      /* 0x448 */
                                /* idmas use buffer 1,1
                                   comm use buffer 1
-                                  pci use buffer 1,0
+                                  pci use buffer 0,0 (pci1->0 pci0->0)
                                   cpu use buffer 1 (R*18)
                                   normal load (see also ifdef HVL)
                                   standard SDRAM (see also ifdef REG)
                                   non staggered refresh */
                                /* 31:26  25 23  20 19 18 16 */
-                               /* 111101 00 111 0  0  00 1 */
+                               /* 111001 00 111 0  0  00 1 */
 
                                /* refresh count=0x200
-                                  phy interleave disable (only one bank)
+                                  phy interleave disable (by default,
+                                  set later by dram config..)
                                   virt interleave enable */
                                /* 15 14 13:0 */
                                /* 1  0  0x200 */
 #define CFG_PCI1_IO_SPACE      (CFG_PCI1_IO_BASE)
 #define CFG_PCI1_IO_SPACE_PCI  0x00000000
 
-/*
- * NS16550 Configuration
- */
-#define CFG_NS16550
-
-#define CFG_NS16550_REG_SIZE   -4
-
-#define CFG_NS16550_CLK                3686400
-
-#define CFG_NS16550_COM1       (CFG_DUART_IO + 0)
-#define CFG_NS16550_COM2       (CFG_DUART_IO + 0x20)
 
 /*----------------------------------------------------------------------
  * Initial BAT mappings
index 33033a38d723b10c29348aa4be673a88ba340ba9..56db09782aa6292b89b26ba860a9abc3c65f1978 100644 (file)
@@ -24,7 +24,11 @@ extern unsigned int INTERNAL_REG_BASE_ADDR;
 #define GT_64261       1
 
 #if (CFG_GT_6426x == GT_64260)
+#ifdef CONFIG_ETHER_PORT_MII
+#define GAL_ETH_DEVS 2
+#else
 #define GAL_ETH_DEVS 3
+#endif
 #elif (CFG_GT_6426x == GT_64261)
 #define GAL_ETH_DEVS 2
 #else
index 45dcf6c9d70d8fc089eaff1b1af235e8836f598a..627fd13a6606d2912e3ce92e111c64d66549fe7f 100644 (file)
@@ -323,16 +323,16 @@ void  perform_soft_reset(void);
 void   load_sernum_ethaddr(bd_t *bd);
 #endif
 
-#if defined(CONFIG_CU824)      || \
+#if defined(CONFIG_BOARD_PRE_INIT) || \
+    defined(CONFIG_CU824)      || \
     defined(CONFIG_EP8260)     || \
+    defined(CONFIG_EVB64260)   || \
     defined(CONFIG_LWMON)      || \
-    defined(CONFIG_MIP405)     || \
     defined(CONFIG_MPC8260ADS) || \
-    defined(CONFIG_PIP405)     || \
+    defined(CONFIG_OXC)                || \
     defined(CONFIG_RPXSUPER)   || \
     defined(CONFIG_W7O)                || \
-    defined(CONFIG_WALNUT405)  || \
-    defined(CONFIG_BOARD_PRE_INIT)
+    defined(CONFIG_WALNUT405)
 /* $(BOARD)/$(BOARD).c */
 int    board_pre_init (void);
 #endif
@@ -410,23 +410,13 @@ ulong     get_tbclk     (void);
 #if defined(CONFIG_8260)
 void   get_8260_clks (void);
 void   prt_8260_clks (void);
-#elif defined(CONFIG_4xx)      || \
-      defined(CONFIG_8xx)      || \
-      defined(CONFIG_BAB750)   || \
-      defined(CONFIG_CU824)    || \
-      defined(CONFIG_EVB64260) || \
-      defined(CONFIG_IOP480)   || \
-      defined(CONFIG_MOUSSE)   || \
-      defined(CONFIG_MUSENKI)   || \
-      defined(CONFIG_SANDPOINT)
+#else
 ulong  get_gclk_freq (void);
-ulong  get_OPB_freq (void);
+#endif
 #ifdef CONFIG_4xx
+ulong  get_OPB_freq (void);
 ulong  get_PCI_freq (void);
 #endif
-#elif defined(CONFIG_74xx_7xx)
-ulong  get_gclk_freq (void);
-#endif
 
 ulong  get_bus_freq  (ulong);