* Map ISP1362 USB OTG controller for NSCU board
authorwdenk <wdenk>
Tue, 5 Aug 2003 17:43:17 +0000 (17:43 +0000)
committerwdenk <wdenk>
Tue, 5 Aug 2003 17:43:17 +0000 (17:43 +0000)
* Patch by Brad Parker, 02 Aug 2003:
  fix sc520_cdp problems

* Implement Boot Cycle Detection (Req. 2.3 of OSDL CGL Reqirements)

* Allow erase command to cross flash bank boundaries

17 files changed:
CHANGELOG
Makefile
board/sc520_cdp/Makefile
board/sc520_cdp/flash.c
board/sc520_cdp/sc520_cdp.c
board/sc520_cdp/u-boot.lds
board/tqm8xx/tqm8xx.c
common/cmd_bootm.c
common/cmd_flash.c
common/main.c
cpu/mpc8260/commproc.c
cpu/mpc8xx/commproc.c
include/asm-ppc/cpm_8260.h
include/common.h
include/commproc.h
include/configs/NSCU.h
tools/mkimage.c

index 96548e4dbc2763967d904af666f4ad70073801a5..a517ec9b5790741c3fe3f49fdf6591511acf6107 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,15 @@
 Changes for U-Boot 0.4.5:
 ======================================================================
 
+* Map ISP1362 USB OTG controller for NSCU board
+
+* Patch by Brad Parker, 02 Aug 2003:
+  fix sc520_cdp problems
+
+* Implement Boot Cycle Detection (Req. 2.3 of OSDL CGL Reqirements)
+
+* Allow erase command to cross flash bank boundaries
+
 * Patch by Scott McNutt, 21 Jul 2003:
   Add support for LynuxWorks Kernel Downloadable Images (KDIs).
   Both LynxOS and BlueCat linux KDIs are supported.
index f3751770aaf2a3e9779d7468cb28e3f6be82b8c9..c4bb10c2cf886c668c30e525f0e204fbf5878450 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -116,13 +116,12 @@ LIBS += post/libpost.a post/cpu/libcpu.a
 LIBS += common/libcommon.a
 LIBS += lib_generic/libgeneric.a
 
+#########################################################################
 #########################################################################
 
-all:           u-boot.srec u-boot.bin System.map
+ALL = u-boot.srec u-boot.bin System.map
 
-install:       all
-               -cp u-boot.bin /tftpboot/u-boot.bin
-               -cp u-boot.bin /net/denx/tftpboot/u-boot.bin
+all:           $(ALL)
 
 u-boot.srec:   u-boot
                $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
@@ -130,6 +129,13 @@ u-boot.srec:       u-boot
 u-boot.bin:    u-boot
                $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
 
+u-boot.img:    u-boot.bin
+               ./tools/mkimage -A $(ARCH) -T firmware -C none \
+               -a $(TEXT_BASE) -e 0 \
+               -n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' include/version.h | \
+                       sed -e 's/"[     ]*$$/ for $(BOARD) board"/') \
+               -d $< $@
+
 u-boot.dis:    u-boot
                $(OBJDUMP) -d $< > $@
 
@@ -864,7 +870,7 @@ clobber:    clean
                | xargs rm -f
        rm -f $(OBJS) *.bak tags TAGS
        rm -fr *.*~
-       rm -f u-boot u-boot.bin u-boot.srec u-boot.map System.map
+       rm -f u-boot u-boot.map $(ALL)
        rm -f tools/crc32.c tools/environment.c tools/env/crc32.c
        rm -f tools/inca-swap-bytes cpu/mpc824x/bedbug_603e.c
        rm -f include/asm/proc include/asm/arch include/asm
index f9a36f9f4210088f8f9f741ff08f196948160efb..ab06ebc81afe4207a293849e31818681085940aa 100644 (file)
@@ -29,7 +29,7 @@ OBJS  := sc520_cdp.o flash.o
 SOBJS  := sc520_cdp_asm.o sc520_cdp_asm16.o
 
 $(LIB):        $(OBJS) $(SOBJS)
-       $(AR) crv $@ $(OBJS)
+       $(AR) crv $@ $(OBJS) $(SOBJS)
 
 clean:
        rm -f $(SOBJS) $(OBJS)
index a4d37e508770ce2bc4a04978cb7a64825b833b71..2f7ce5254af44419bb6f882f1b1d0127969260a8 100644 (file)
@@ -325,7 +325,7 @@ void flash_print_info(flash_info_t *info)
        }
        printf ("\n");
 
-       done:
+done:  ;
 }
 
 /*-----------------------------------------------------------------------
index 0fc836c629c7a2ea9c0579e9cc2d2787400721ed..cd523248268556ef0f7bbbea46cac1d91a89c846 100644 (file)
@@ -28,7 +28,7 @@
 #include <asm/pci.h>
 #include <asm/ic/sc520.h>
 #include <asm/ic/ali512x.h>
-#include <ssi.h>
+#include <spi.h>
 
 #undef SC520_CDP_DEBUG
 
@@ -557,6 +557,19 @@ void ssi_chip_select(int dev)
        }
 }
 
+void spi_eeprom_probe(int x)
+{
+}
+
+int spi_eeprom_read(int x, int offset, char *buffer, int len)
+{
+       return 0;
+}
+
+int spi_eeprom_write(int x, int offset, char *buffer, int len)
+{
+       return 0;
+}
 
 void spi_init_f(void)
 {
@@ -585,6 +598,9 @@ ssize_t spi_read(uchar *addr, int alen, uchar *buffer, int len)
 #endif
 #ifdef CONFIG_SC520_CDP_USE_MW
        res = mw_eeprom_read(2, offset, buffer, len);
+#endif
+#if !defined(CONFIG_SC520_CDP_USE_SPI) && !defined(CONFIG_SC520_CDP_USE_MW)
+       res = 0;
 #endif
        return res;
 }
@@ -606,6 +622,9 @@ ssize_t spi_write(uchar *addr, int alen, uchar *buffer, int len)
 #endif
 #ifdef CONFIG_SC520_CDP_USE_MW
        res = mw_eeprom_write(2, offset, buffer, len);
+#endif
+#if !defined(CONFIG_SC520_CDP_USE_SPI) && !defined(CONFIG_SC520_CDP_USE_MW)
+       res = 0;
 #endif
        return res;
 }
index 1944a74aaa06b09f8b79f3c09a3ce3ad50cfecc6..9d2f71c33a8431f1fcf7bab56618a0fd18d645e3 100644 (file)
@@ -31,7 +31,7 @@ SECTIONS
        .text  : { *(.text); }
 
        . = ALIGN(4);
-       .rodata : { *(.rodata) }
+       .rodata : { *(.rodata) *(.rodata.str1.1) *(.rodata.str1.32) }
 
        . = 0x400000;                       /* Ram data segment to use */
        _i386boot_romdata_dest = ABSOLUTE(.);
index 05004829bf0c1ac62f525af07386317e0cce62d1..f9b04f8aa6cfd93f2ae15d2b6c46935374d7406a 100644 (file)
@@ -363,7 +363,13 @@ long int initdram (int board_type)
        memctl->memc_mcr = 0x011C | UPMB;
 #endif                                                 /* CONFIG_CAN_DRIVER */
 
-
+#ifdef CONFIG_ISP1362_USB
+       /* Initialize OR5 / BR5 */
+       memctl->memc_or5 = CFG_OR5_ISP1362;
+       memctl->memc_br5 = CFG_BR5_ISP1362;
+#endif                                                 /* CONFIG_ISP1362_USB */
+           
+           
        return (size_b0 + size_b1);
 }
 
index 794f0de13fb83bf9fc00ffece42df6ca0ff4dd84..44331ab17819033d3ae007e4a8404dde3c56f881 100644 (file)
@@ -1012,9 +1012,9 @@ int do_imls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        printf ("Image at %08lX:\n", (ulong)hdr);
                        print_image_hdr( hdr );
                        putc ('\n');
-               next_sector:
+next_sector:           ;
                }
-       next_bank:
+next_bank:     ;
        }
 
        return (0);
index 811b89b004fb3fd1b43dbbb33003d914bdf242e1..4de022ee8f13cc48e8a92c930624c3bc3d3d28a9 100644 (file)
@@ -56,45 +56,120 @@ extern flash_info_t flash_info[];  /* info for FLASH chips */
  *                       or an invalid flash bank.
  */
 static int
-abbrev_spec(char *str, flash_info_t **pinfo, int *psf, int *psl)
+abbrev_spec (char *str, flash_info_t ** pinfo, int *psf, int *psl)
 {
-    flash_info_t *fp;
-    int bank, first, last;
-    char *p, *ep;
+       flash_info_t *fp;
+       int bank, first, last;
+       char *p, *ep;
 
-    if ((p = strchr(str, ':')) == NULL)
-       return 0;
-    *p++ = '\0';
+       if ((p = strchr (str, ':')) == NULL)
+               return 0;
+       *p++ = '\0';
 
-    bank = simple_strtoul(str, &ep, 10);
-    if (ep == str || *ep != '\0' ||
-      bank < 1 || bank > CFG_MAX_FLASH_BANKS ||
-      (fp = &flash_info[bank - 1])->flash_id == FLASH_UNKNOWN)
-       return -1;
+       bank = simple_strtoul (str, &ep, 10);
+       if (ep == str || *ep != '\0' ||
+               bank < 1 || bank > CFG_MAX_FLASH_BANKS ||
+               (fp = &flash_info[bank - 1])->flash_id == FLASH_UNKNOWN)
+               return -1;
+
+       str = p;
+       if ((p = strchr (str, '-')) != NULL)
+               *p++ = '\0';
+
+       first = simple_strtoul (str, &ep, 10);
+       if (ep == str || *ep != '\0' || first >= fp->sector_count)
+               return -1;
+
+       if (p != NULL) {
+               last = simple_strtoul (p, &ep, 10);
+               if (ep == p || *ep != '\0' ||
+                       last < first || last >= fp->sector_count)
+                       return -1;
+       } else {
+               last = first;
+       }
 
-    str = p;
-    if ((p = strchr(str, '-')) != NULL)
-       *p++ = '\0';
+       *pinfo = fp;
+       *psf = first;
+       *psl = last;
+
+       return 1;
+}
+
+static int
+flash_fill_sect_ranges (ulong addr_first, ulong addr_last,
+                       int *s_first, int *s_last,
+                       int *s_count )
+{
+       flash_info_t *info;
+       ulong bank;
+       int rcode = 0;
+
+       *s_count = 0;
+
+       for (bank=0; bank < CFG_MAX_FLASH_BANKS; ++bank) {
+               s_first[bank] = -1;     /* first sector to erase        */
+               s_last [bank] = -1;     /* last  sector to erase        */
+       }
+
+       for (bank=0,info=&flash_info[0];
+            (bank < CFG_MAX_FLASH_BANKS) && (addr_first <= addr_last);
+            ++bank, ++info) {
+               ulong b_end;
+               int sect;
+               short s_end;
+
+               if (info->flash_id == FLASH_UNKNOWN) {
+                       continue;
+               }
+
+               b_end = info->start[0] + info->size - 1;        /* bank end addr */
+               s_end = info->sector_count - 1;                 /* last sector   */
+
+
+               for (sect=0; sect < info->sector_count; ++sect) {
+                       ulong end;      /* last address in current sect */
 
-    first = simple_strtoul(str, &ep, 10);
-    if (ep == str || *ep != '\0' || first >= fp->sector_count)
-       return -1;
+                       end = (sect == s_end) ? b_end : info->start[sect + 1] - 1;
 
-    if (p != NULL) {
-       last = simple_strtoul(p, &ep, 10);
-       if (ep == p || *ep != '\0' ||
-         last < first || last >= fp->sector_count)
-           return -1;
-    }
-    else
-       last = first;
+                       if (addr_first > end)
+                               continue;
+                       if (addr_last < info->start[sect])
+                               continue;
 
-    *pinfo = fp;
-    *psf = first;
-    *psl = last;
+                       if (addr_first == info->start[sect]) {
+                               s_first[bank] = sect;
+                       }
+                       if (addr_last  == end) {
+                               s_last[bank]  = sect;
+                       }
+               }
+               if (s_first[bank] >= 0) {
+                       if (s_last[bank] < 0) {
+                               if (addr_last > b_end) {
+                                       s_last[bank] = s_end;
+                               } else {
+                                       printf ("Error: end address"
+                                               " not on sector boundary\n");
+                                       rcode = 1;
+                                       break;
+                               }
+                       }
+                       if (s_last[bank] < s_first[bank]) {
+                               printf ("Error: end sector"
+                                       " precedes start sector\n");
+                               rcode = 1;
+                               break;
+                       }
+                       sect = s_last[bank];
+                       addr_first = (sect == s_end) ? b_end + 1: info->start[sect + 1];
+                       (*s_count) += s_last[bank] - s_first[bank] + 1;
+               }
+       }
 
-    return 1;
+       return rcode;
 }
+
 int do_flinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        ulong bank;
@@ -180,7 +255,6 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                return 1;
        }
 
-       printf ("Erase Flash from 0x%08lx to 0x%08lx ", addr_first, addr_last);
        rcode = flash_sect_erase(addr_first, addr_last);
        return rcode;
 }
@@ -189,53 +263,32 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)
 {
        flash_info_t *info;
        ulong bank;
-       int s_first, s_last;
-       int erased;
+       int s_first[CFG_MAX_FLASH_BANKS], s_last[CFG_MAX_FLASH_BANKS];
+       int erased = 0;
+       int planned;
        int rcode = 0;
 
-       erased = 0;
-
-       for (bank=0,info=&flash_info[0]; bank < CFG_MAX_FLASH_BANKS; ++bank, ++info) {
-               ulong b_end;
-               int sect;
-
-               if (info->flash_id == FLASH_UNKNOWN) {
-                       continue;
-               }
-
-               b_end = info->start[0] + info->size - 1; /* bank end addr */
-
-               s_first = -1;           /* first sector to erase        */
-               s_last  = -1;           /* last  sector to erase        */
-
-               for (sect=0; sect < info->sector_count; ++sect) {
-                       ulong end;              /* last address in current sect */
-                       short s_end;
-
-                       s_end = info->sector_count - 1;
-
-                       end = (sect == s_end) ? b_end : info->start[sect + 1] - 1;
-
-                       if (addr_first > end)
-                               continue;
-                       if (addr_last < info->start[sect])
-                               continue;
-
-                       if (addr_first == info->start[sect]) {
-                               s_first = sect;
-                       }
-                       if (addr_last  == end) {
-                               s_last  = sect;
+       rcode = flash_fill_sect_ranges (addr_first, addr_last,
+                                       s_first, s_last, &planned );
+
+       if (planned && (rcode == 0)) {
+               for (bank=0,info=&flash_info[0];
+                    (bank < CFG_MAX_FLASH_BANKS) && (rcode == 0);
+                    ++bank, ++info) {
+                       if (s_first[bank]>=0) {
+                               erased += s_last[bank] - s_first[bank] + 1;
+                               printf ("Erase Flash from 0x%08lx to 0x%08lx "
+                                       "in Bank # %ld ",
+                                       info->start[s_first[bank]],
+                                       (s_last[bank] == info->sector_count) ?
+                                               info->start[0] + info->size - 1:
+                                               info->start[s_last[bank]+1] - 1,
+                                       bank+1);
+                               rcode = flash_erase (info, s_first[bank], s_last[bank]);
                        }
                }
-               if (s_first>=0 && s_first<=s_last) {
-                       erased += s_last - s_first + 1;
-                       rcode = flash_erase (info, s_first, s_last);
-               }
-       }
-       if (erased) {
                printf ("Erased %d sectors\n", erased);
-       } else {
+       } else if (rcode == 0) {
                printf ("Error: start and/or end address"
                        " not on sector boundary\n");
                rcode = 1;
@@ -243,7 +296,6 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)
        return rcode;
 }
 
-
 int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        flash_info_t *info;
@@ -256,11 +308,11 @@ int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                return 1;
        }
 
-       if (strcmp(argv[1], "off") == 0)
+       if (strcmp(argv[1], "off") == 0) {
                p = 0;
-       else if (strcmp(argv[1], "on") == 0)
+       } else if (strcmp(argv[1], "on") == 0) {
                p = 1;
-       else {
+       else {
                printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }
@@ -370,66 +422,43 @@ int flash_sect_protect (int p, ulong addr_first, ulong addr_last)
 {
        flash_info_t *info;
        ulong bank;
-       int s_first, s_last;
+       int s_first[CFG_MAX_FLASH_BANKS], s_last[CFG_MAX_FLASH_BANKS];
        int protected, i;
-       int rcode = 0;
+       int planned;
+       int rcode;
 
-       protected = 0;
+       rcode = flash_fill_sect_ranges( addr_first, addr_last, s_first, s_last, &planned );
 
-       for (bank=0,info=&flash_info[0]; bank < CFG_MAX_FLASH_BANKS; ++bank, ++info) {
-               ulong b_end;
-               int sect;
-
-               if (info->flash_id == FLASH_UNKNOWN) {
-                       continue;
-               }
-
-               b_end = info->start[0] + info->size - 1; /* bank end addr */
-
-               s_first = -1;           /* first sector to erase        */
-               s_last  = -1;           /* last  sector to erase        */
-
-               for (sect=0; sect < info->sector_count; ++sect) {
-                       ulong end;              /* last address in current sect */
-                       short s_end;
-
-                       s_end = info->sector_count - 1;
-
-                       end = (sect == s_end) ? b_end : info->start[sect + 1] - 1;
+       protected = 0;
 
-                       if (addr_first > end)
-                               continue;
-                       if (addr_last < info->start[sect])
+       if (planned && (rcode == 0)) {
+               for (bank=0,info=&flash_info[0]; bank < CFG_MAX_FLASH_BANKS; ++bank, ++info) {
+                       if (info->flash_id == FLASH_UNKNOWN) {
                                continue;
-
-                       if (addr_first == info->start[sect]) {
-                               s_first = sect;
-                       }
-                       if (addr_last  == end) {
-                               s_last  = sect;
                        }
-               }
-               if (s_first>=0 && s_first<=s_last) {
-                       protected += s_last - s_first + 1;
-                       for (i=s_first; i<=s_last; ++i) {
+
+                       if (s_first[bank]>=0 && s_first[bank]<=s_last[bank]) {
+                               debug ("Protecting sectors %d..%d in bank %ld\n",
+                                       s_first[bank], s_last[bank], bank+1);
+                               protected += s_last[bank] - s_first[bank] + 1;
+                               for (i=s_first[bank]; i<=s_last[bank]; ++i) {
 #if defined(CFG_FLASH_PROTECTION)
-                               if (flash_real_protect(info, i, p))
-                                       rcode = 1;
-                               putc ('.');
+                                       if (flash_real_protect(info, i, p))
+                                               rcode = 1;
+                                       putc ('.');
 #else
-                               info->protect[i] = p;
+                                       info->protect[i] = p;
 #endif /* CFG_FLASH_PROTECTION */
+                               }
                        }
-               }
 #if defined(CFG_FLASH_PROTECTION)
-               if (!rcode) putc ('\n');
+                       if (!rcode) putc ('\n');
 #endif /* CFG_FLASH_PROTECTION */
+               }
 
-       }
-       if (protected) {
                printf ("%sProtected %d sectors\n",
                        p ? "" : "Un-", protected);
-       } else {
+       } else if (rcode == 0) {
                printf ("Error: start and/or end address"
                        " not on sector boundary\n");
                rcode = 1;
index 5ddecca736684cefb2335759632e23bde744c4d9..d08bc47d73604ee5bc053e6f5fd0aae9d4ee122c 100644 (file)
@@ -32,6 +32,8 @@
 #include <hush.h>
 #endif
 
+#include <post.h>
+
 #if defined(CONFIG_BOOT_RETRY_TIME) && defined(CONFIG_RESET_TO_RETRY)
 extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);              /* for do_reset() prototype */
 #endif
@@ -258,6 +260,12 @@ void main_loop (void)
 #ifdef CONFIG_PREBOOT
        char *p;
 #endif
+#ifdef CONFIG_BOOTCOUNT_LIMIT
+       unsigned long bootcount = 0;
+       unsigned long bootlimit = 0;
+       char *bcs;
+       char bcs_set[16];
+#endif /* CONFIG_BOOTCOUNT_LIMIT */
 
 #if defined(CONFIG_VFD) && defined(VFD_TEST_LOGO)
        ulong bmp = 0;          /* default bitmap */
@@ -270,6 +278,16 @@ void main_loop (void)
        trab_vfd (bmp);
 #endif /* CONFIG_VFD && VFD_TEST_LOGO */
 
+#ifdef CONFIG_BOOTCOUNT_LIMIT
+       bootcount = bootcount_load();
+       bootcount++;
+       bootcount_store (bootcount);
+       sprintf (bcs_set, "%lu", bootcount);
+       setenv ("bootcount", bcs_set);
+       bcs = getenv ("bootlimit");
+       bootlimit = bcs ? simple_strtoul (bcs, NULL, 10) : 0;
+#endif /* CONFIG_BOOTCOUNT_LIMIT */
+
 #ifdef CONFIG_MODEM_SUPPORT
        debug ("DEBUG: main_loop:   do_mdm_init=%d\n", do_mdm_init);
        if (do_mdm_init) {
@@ -322,7 +340,15 @@ void main_loop (void)
        init_cmd_timeout ();
 # endif        /* CONFIG_BOOT_RETRY_TIME */
 
-       s = getenv ("bootcmd");
+#ifdef CONFIG_BOOTCOUNT_LIMIT
+       if (bootlimit && (bootcount > bootlimit)) {
+               printf ("Warning: Bootlimit (%u) exceeded. Using altbootcmd.\n",
+                       (unsigned)bootlimit);
+               s = getenv ("altbootcmd");
+       }
+       else
+#endif /* CONFIG_BOOTCOUNT_LIMIT */
+               s = getenv ("bootcmd");
 
        debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");
 
index 72cceb3cc4b2d335739203ce2d7809bd1c5d7a4b..ceb9275d264d45cda102c4658a77edebc13933f6 100644 (file)
@@ -208,3 +208,27 @@ ulong post_word_load (void)
 }
 
 #endif /* CONFIG_POST || CONFIG_LOGBUFFER*/
+
+#ifdef CONFIG_BOOTCOUNT_LIMIT
+
+void bootcount_store (ulong a)
+{
+       volatile ulong *save_addr =
+               (volatile ulong *)(CFG_IMMR + CPM_BOOTCOUNT_ADDR);
+
+       save_addr[0] = a;
+       save_addr[1] = BOOTCOUNT_MAGIC;
+}
+
+ulong bootcount_load (void)
+{
+       volatile ulong *save_addr =
+               (volatile ulong *)(CFG_IMMR + CPM_BOOTCOUNT_ADDR);
+
+       if (save_addr[1] != BOOTCOUNT_MAGIC)
+               return 0;
+       else
+               return save_addr[0];
+}
+
+#endif /* CONFIG_BOOTCOUNT_LIMIT */
index 37c72a7273ee3700e46ba821afb4b455189b3266..75740e07f2bd00ef78071c6d5568bf7e89748f13 100644 (file)
@@ -110,3 +110,29 @@ ulong post_word_load (void)
 }
 
 #endif /* CONFIG_POST || CONFIG_LOGBUFFER*/
+
+#ifdef CONFIG_BOOTCOUNT_LIMIT
+
+void bootcount_store (ulong a)
+{
+       volatile ulong *save_addr =
+               (volatile ulong *)( ((immap_t *) CFG_IMMR)->im_cpm.cp_dpmem +
+                                   CPM_BOOTCOUNT_ADDR );
+
+       save_addr[0] = a;
+       save_addr[1] = BOOTCOUNT_MAGIC;
+}
+
+ulong bootcount_load (void)
+{
+       volatile ulong *save_addr =
+               (volatile ulong *)( ((immap_t *) CFG_IMMR)->im_cpm.cp_dpmem +
+                                   CPM_BOOTCOUNT_ADDR );
+
+       if (save_addr[1] != BOOTCOUNT_MAGIC)
+               return 0;
+       else
+               return save_addr[0];
+}
+
+#endif /* CONFIG_BOOTCOUNT_LIMIT */
index 5c70603f48565bdd077b6e56f817c6a4228082e9..b3d08ffd4d75c152d21dd36fcc4fb0cb1c510122 100644 (file)
@@ -141,6 +141,13 @@ typedef struct cpm_buf_desc {
 #else
 #define CPM_POST_WORD_ADDR     CFG_CPM_POST_WORD_ADDR
 #endif
+
+#ifndef CFG_CPM_BOOTCOUNT_ADDR
+#define CPM_BOOTCOUNT_ADDR     (CPM_POST_WORD_ADDR - 2*sizeof(ulong))
+#else
+#define CPM_BOOTCOUNT_ADDR     CFG_CPM_BOOTCOUNT_ADDR
+#endif
+
 #define PROFF_SCC1             ((uint)0x8000)
 #define PROFF_SCC2             ((uint)0x8100)
 #define PROFF_SCC3             ((uint)0x8200)
index 5158f97ece3774105087e557a5919b387bfce289..94007195852017522454b9b1614e6de6d3e94279 100644 (file)
@@ -236,7 +236,7 @@ extern void  pic_write (uchar reg, uchar val);
 # define CFG_DEF_EEPROM_ADDR CFG_I2C_EEPROM_ADDR
 #endif /* CONFIG_SPI || !defined(CFG_I2C_EEPROM_ADDR) */
 
-#if defined(CONFIG_PCU_E) || defined(CONFIG_CCM) || defined(CONFIG_ATC)
+#if defined(CONFIG_SPI)
 extern void spi_init_f (void);
 extern void spi_init_r (void);
 extern ssize_t spi_read  (uchar *, int, uchar *, int);
@@ -400,6 +400,9 @@ uint        dpram_alloc(uint size);
 uint   dpram_alloc_align(uint size,uint align);
 void   post_word_store (ulong);
 ulong  post_word_load (void);
+void   bootcount_store (ulong);
+ulong  bootcount_load (void);
+#define BOOTCOUNT_MAGIC                0xB001C041
 
 /* $(CPU)/.../<eth> */
 void mii_init (void);
index 68452483513fb7876219a47346383819ecb597c3..63dcc4c9a3dcdf03c6195a6d404af7fc8d4ab0b8 100644 (file)
 #define CPM_POST_WORD_ADDR     CFG_CPM_POST_WORD_ADDR
 #endif
 
+#ifndef CFG_CPM_BOOTCOUNT_ADDR
+#define CPM_BOOTCOUNT_ADDR     (CPM_POST_WORD_ADDR - 2*sizeof(ulong))
+#else
+#define CPM_BOOTCOUNT_ADDR     CFG_CPM_BOOTCOUNT_ADDR
+#endif
+
 #define BD_IIC_START   ((uint) 0x0400) /* <- please use CPM_I2C_BASE !! */
 
 /* Export the base address of the communication processor registers
index 81694538821e67ae75edd073ad5be437b8a320e4..3bf54d2eb9d241b6ab65d0785bd8c1bbc0fc0e31 100644 (file)
@@ -90,6 +90,8 @@
 
 #define        CONFIG_RTC_MPC8xx               /* use internal RTC of MPC8xx   */
 
+#define        CONFIG_ISP1362_USB              /* ISP1362 USB OTG controller   */
+
 #define CONFIG_COMMANDS              ( CONFIG_CMD_DFL  | \
                                CFG_CMD_ASKENV  | \
                                CFG_CMD_DHCP    | \
                                        BR_PS_8 | BR_MS_UPMB | BR_V )
 #endif /* CONFIG_CAN_DRIVER */
 
+#ifdef CONFIG_ISP1362_USB
+#define        CFG_ISP1362_BASE        0xD0000000      /* ISP1362 mapped at 0xD0000000 */
+#define CFG_ISP1362_OR_AM      0xFFFF8000      /* 32 kB address mask           */
+#define CFG_OR5_ISP1362                (CFG_ISP1362_OR_AM | OR_CSNT_SAM | \
+                                OR_ACS_DIV2       | OR_BI       | OR_SCY_5_CLK)
+#define CFG_BR5_ISP1362                ((CFG_ISP1362_BASE & BR_BA_MSK) | \
+                                BR_PS_16          | BR_MS_GPCM | BR_V )
+#endif /* CONFIG_ISP1362_USB */
+                                
 /*
  * Memory Periodic Timer Prescaler
  *
index c2e9fa0b619cdcc914ccfa5ea699791bc7c1243e..9de022488779b3382a8498d625e0476ad70c997b 100644 (file)
@@ -603,8 +603,8 @@ print_header (image_header_t *hdr)
        printf ("Image Type:   "); print_type(hdr);
        printf ("Data Size:    %d Bytes = %.2f kB = %.2f MB\n",
                size, (double)size / 1.024e3, (double)size / 1.048576e6 );
-       printf ("Load Address: 0x%08x\n", ntohl(hdr->ih_load));
-       printf ("Entry Point:  0x%08x\n", ntohl(hdr->ih_ep));
+       printf ("Load Address: 0x%08X\n", ntohl(hdr->ih_load));
+       printf ("Entry Point:  0x%08X\n", ntohl(hdr->ih_ep));
 
        if (hdr->ih_type == IH_TYPE_MULTI || hdr->ih_type == IH_TYPE_SCRIPT) {
                int i, ptrs;
@@ -631,7 +631,7 @@ print_header (image_header_t *hdr)
                                 * if planning to do something with
                                 * multiple files
                                 */
-                               printf ("    Offset = %08x\n", pos);
+                               printf ("    Offset = %08X\n", pos);
                        }
                        /* copy_file() will pad the first files to even word align */
                        size += 3;