BFIN_BOARDS = bf533-ezkit bf533-stamp bf537-stamp bf561-ezkit
 
 $(BFIN_BOARDS:%=%_config)      : unconfig
-       @$(MKCONFIG) $(@:_config=) blackfin $(firstword $(subst -, ,$@)) $(@:_config=)
+       @$(MKCONFIG) $(@:_config=) blackfin blackfin $(@:_config=)
 
 $(BFIN_BOARDS):
        $(MAKE) $@_config
               $(obj)board/netstar/{eeprom,crcek,crcit,*.srec,*.bin}      \
               $(obj)board/trab/trab_fkt   $(obj)board/voiceblue/eeprom   \
               $(obj)board/{integratorap,integratorcp}/u-boot.lds         \
-              $(obj)board/{bf533-ezkit,bf533-stamp,bf537-stamp,bf561-ezkit}/u-boot.lds
+              $(obj)board/{bf533-ezkit,bf533-stamp,bf537-stamp,bf561-ezkit}/u-boot.lds \
+              $(obj)cpu/blackfin/bootrom-asm-offsets.[chs]
        @rm -f $(obj)include/bmp_logo.h $(obj)nand_spl/{u-boot-spl,u-boot-spl.map}
        @rm -f $(obj)onenand_ipl/onenand-{ipl,ipl.bin,ipl-2k.bin,ipl-4k.bin,ipl.map}
        @rm -f $(obj)api_examples/demo $(VERSION_FILE)
 
 # MA 02111-1307 USA
 #
 
+CONFIG_BFIN_CPU := $(strip $(subst ",,$(CONFIG_BFIN_CPU)))
+CONFIG_BFIN_BOOT_MODE := $(strip $(subst ",,$(CONFIG_BFIN_BOOT_MODE)))
+
 PLATFORM_RELFLAGS += -ffixed-P5
 PLATFORM_CPPFLAGS += -DCONFIG_BLACKFIN
 
 
        $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
 
 u-boot.lds: u-boot.lds.S
-       $(CPP) $(CPPFLAGS) -P -Ubfin $^ > $@.tmp
+       $(CPP) $(CPPFLAGS) -D__ASSEMBLY__ -P -Ubfin $^ > $@.tmp
        mv -f $@.tmp $@
 
 clean:
 
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 # MA 02111-1307 USA
 #
-# TEXT_BASE should be defined as the MAX_SDRAM Address - 256k bytes
-#  256k is defined as CFG_MONITOR_LEN in ./include/configs/<board>.h
-TEXT_BASE = 0x01FC0000
+
+# This is not actually used for Blackfin boards so do not change it
+#TEXT_BASE = do-not-use-me
 
 /*
  * U-boot - u-boot.lds.S
  *
- * Copyright (c) 2005-2007 Analog Device Inc.
+ * Copyright (c) 2005-2008 Analog Device Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  */
 
 #include <config.h>
+#include <asm/blackfin.h>
+#undef ALIGN
+
+/* If we don't actually load anything into L1 data, this will avoid
+ * a syntax error.  If we do actually load something into L1 data,
+ * we'll get a linker memory load error (which is what we'd want).
+ * This is here in the first place so we can quickly test building
+ * for different CPU's which may lack non-cache L1 data.
+ */
+#ifndef L1_DATA_B_SRAM
+# define L1_DATA_B_SRAM      CFG_MONITOR_BASE
+# define L1_DATA_B_SRAM_SIZE 0
+#endif
 
 OUTPUT_ARCH(bfin)
-SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib);
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
-SECTIONS
+
+/* The 0xC offset is so we don't clobber the tiny LDR jump block. */
+MEMORY
 {
-  /* Read-only sections, merged into text segment: */
-  . = + SIZEOF_HEADERS;
-  .interp : { *(.interp) }
-  .hash          : { *(.hash)          }
-  .dynsym        : { *(.dynsym)                }
-  .dynstr        : { *(.dynstr)                }
-  .rel.text      : { *(.rel.text)      }
-  .rela.text     : { *(.rela.text)     }
-  .rel.data      : { *(.rel.data)      }
-  .rela.data     : { *(.rela.data)     }
-  .rel.rodata    : { *(.rel.rodata)    }
-  .rela.rodata   : { *(.rela.rodata)   }
-  .rel.got       : { *(.rel.got)       }
-  .rela.got      : { *(.rela.got)      }
-  .rel.ctors     : { *(.rel.ctors)     }
-  .rela.ctors    : { *(.rela.ctors)    }
-  .rel.dtors     : { *(.rel.dtors)     }
-  .rela.dtors    : { *(.rela.dtors)    }
-  .rel.bss       : { *(.rel.bss)       }
-  .rela.bss      : { *(.rela.bss)      }
-  .rel.plt       : { *(.rel.plt)       }
-  .rela.plt      : { *(.rela.plt)      }
-  .init          : { *(.init)          }
-  .plt : { *(.plt) }
-  . = CFG_MONITOR_BASE;
-  .text      :
-  {
-    /* WARNING - the following is hand-optimized to fit within */
-    /* the sector before the environment sector. If it throws  */
-    /* an error during compilation remove an object here to get        */
-    /* it linked after the configuration sector.               */
+       ram     : ORIGIN = CFG_MONITOR_BASE, LENGTH = CFG_MONITOR_LEN
+       l1_code : ORIGIN = L1_INST_SRAM+0xC, LENGTH = L1_INST_SRAM_SIZE
+       l1_data : ORIGIN = L1_DATA_B_SRAM,   LENGTH = L1_DATA_B_SRAM_SIZE
+}
 
-    cpu/bf533/start.o          (.text)
-    cpu/bf533/start1.o         (.text)
-    cpu/bf533/traps.o          (.text)
-    cpu/bf533/interrupt.o      (.text)
-    cpu/bf533/serial.o         (.text)
-    common/dlmalloc.o          (.text)
-/*  lib_blackfin/bf533_string.o        (.text) */
-/*  lib_generic/vsprintf.o     (.text) */
-    lib_generic/crc32.o                (.text)
-    lib_generic/zlib.o         (.text)
-    board/bf533-ezkit/bf533-ezkit.o            (.text)
+SECTIONS
+{
+       .text :
+       {
+#ifdef ENV_IS_EMBEDDED
+               /* WARNING - the following is hand-optimized to fit within
+                * the sector before the environment sector. If it throws
+                * an error during compilation remove an object here to get
+                * it linked after the configuration sector.
+                */
 
-    . = DEFINED(env_offset) ? env_offset : .;
-    common/environment.o       (.text)
+               cpu/blackfin/start.o            (.text)
+               cpu/blackfin/traps.o            (.text)
+               cpu/blackfin/interrupt.o        (.text)
+               cpu/blackfin/serial.o           (.text)
+               common/dlmalloc.o               (.text)
+               lib_generic/crc32.o             (.text)
+               lib_generic/zlib.o              (.text)
+               board/bf533-ezkit/bf533-ezkit.o         (.text)
 
-    *(.text)
-    *(.fixup)
-    *(.got1)
-  }
-  _etext = .;
-  PROVIDE (etext = .);
-  .rodata    :
-  {
-    *(.rodata)
-    *(.rodata1)
-    *(.rodata.str1.4)
-  }
-  .fini      : { *(.fini)    } =0
-  .ctors     : { *(.ctors)   }
-  .dtors     : { *(.dtors)   }
+               . = DEFINED(env_offset) ? env_offset : .;
+               common/environment.o    (.text)
+#endif
 
-  /* Read-write section, merged into data segment: */
-  . = (. + 0x00FF) & 0xFFFFFF00;
-  _erotext = .;
-  PROVIDE (erotext = .);
-  .reloc   :
-  {
-    *(.got)
-    _GOT2_TABLE_ = .;
-    *(.got2)
-    _FIXUP_TABLE_ = .;
-    *(.fixup)
-  }
-  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
-  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+               *(.text .text.*)
+       } >ram
 
-  .data    :
-  {
-    *(.data)
-    *(.data1)
-    *(.sdata)
-    *(.sdata2)
-    *(.dynamic)
-    CONSTRUCTORS
-  }
-  _edata  =  .;
-  PROVIDE (edata = .);
+       .rodata :
+       {
+               . = ALIGN(4);
+               *(.rodata .rodata.*)
+               *(.rodata1)
+               *(.eh_frame)
+               . = ALIGN(4);
+       } >ram
 
-  ___u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  ___u_boot_cmd_end = .;
+       .data :
+       {
+               . = ALIGN(256);
+               *(.data .data.*)
+               *(.data1)
+               *(.sdata)
+               *(.sdata2)
+               *(.dynamic)
+               CONSTRUCTORS
+       } >ram
 
+       .u_boot_cmd :
+       {
+               ___u_boot_cmd_start = .;
+               *(.u_boot_cmd)
+               ___u_boot_cmd_end = .;
+       } >ram
 
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+       .text_l1 :
+       {
+               . = ALIGN(4);
+               __stext_l1 = .;
+               *(.l1.text)
+               . = ALIGN(4);
+               __etext_l1 = .;
+       } >l1_code AT>ram
+       __stext_l1_lma = LOADADDR(.text_l1);
 
-  . = ALIGN(256);
-  __init_begin = .;
-  .text.init : { *(.text.init) }
-  .data.init : { *(.data.init) }
-  . = ALIGN(256);
-  __init_end = .;
+       .data_l1 :
+       {
+               . = ALIGN(4);
+               __sdata_l1 = .;
+               *(.l1.data)
+               *(.l1.bss)
+               . = ALIGN(4);
+               __edata_l1 = .;
+       } >l1_data AT>ram
+       __sdata_l1_lma = LOADADDR(.data_l1);
 
-  __bss_start = .;
-  .bss       :
-  {
-   *(.sbss) *(.scommon)
-   *(.dynbss)
-   *(.bss)
-   *(COMMON)
-  }
-  _end = . ;
-  PROVIDE (end = .);
+       .bss :
+       {
+               . = ALIGN(4);
+               __bss_start = .;
+               *(.sbss) *(.scommon)
+               *(.dynbss)
+               *(.bss .bss.*)
+               *(COMMON)
+               __bss_end = .;
+       } >ram
 }
 
        $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
 
 u-boot.lds: u-boot.lds.S
-       $(CPP) $(CPPFLAGS) -P -Ubfin $^ > $@.tmp
+       $(CPP) $(CPPFLAGS) -D__ASSEMBLY__ -P -Ubfin $^ > $@.tmp
        mv -f $@.tmp $@
 
 clean:
 
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 # MA 02111-1307 USA
 #
-# TEXT_BASE should be defined as the MAX_SDRAM Address - 256k bytes
-#  256k is defined as CFG_MONITOR_LEN in ./include/configs/<board>.h
-TEXT_BASE = 0x07FC0000
+
+# This is not actually used for Blackfin boards so do not change it
+#TEXT_BASE = do-not-use-me
 
 /*
  * U-boot - u-boot.lds.S
  *
- * Copyright (c) 2005-2007 Analog Device Inc.
+ * Copyright (c) 2005-2008 Analog Device Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  */
 
 #include <config.h>
+#include <asm/blackfin.h>
+#undef ALIGN
+
+/* If we don't actually load anything into L1 data, this will avoid
+ * a syntax error.  If we do actually load something into L1 data,
+ * we'll get a linker memory load error (which is what we'd want).
+ * This is here in the first place so we can quickly test building
+ * for different CPU's which may lack non-cache L1 data.
+ */
+#ifndef L1_DATA_B_SRAM
+# define L1_DATA_B_SRAM      CFG_MONITOR_BASE
+# define L1_DATA_B_SRAM_SIZE 0
+#endif
 
 OUTPUT_ARCH(bfin)
-SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib);
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
-SECTIONS
+
+/* The 0xC offset is so we don't clobber the tiny LDR jump block. */
+MEMORY
 {
-  /* Read-only sections, merged into text segment: */
-  . = + SIZEOF_HEADERS;
-  .interp : { *(.interp) }
-  .hash          : { *(.hash)          }
-  .dynsym        : { *(.dynsym)                }
-  .dynstr        : { *(.dynstr)                }
-  .rel.text      : { *(.rel.text)      }
-  .rela.text     : { *(.rela.text)     }
-  .rel.data      : { *(.rel.data)      }
-  .rela.data     : { *(.rela.data)     }
-  .rel.rodata    : { *(.rel.rodata)    }
-  .rela.rodata   : { *(.rela.rodata)   }
-  .rel.got       : { *(.rel.got)       }
-  .rela.got      : { *(.rela.got)      }
-  .rel.ctors     : { *(.rel.ctors)     }
-  .rela.ctors    : { *(.rela.ctors)    }
-  .rel.dtors     : { *(.rel.dtors)     }
-  .rela.dtors    : { *(.rela.dtors)    }
-  .rel.bss       : { *(.rel.bss)       }
-  .rela.bss      : { *(.rela.bss)      }
-  .rel.plt       : { *(.rel.plt)       }
-  .rela.plt      : { *(.rela.plt)      }
-  .init          : { *(.init)          }
-  .plt : { *(.plt) }
-  . = CFG_MONITOR_BASE;
-  .text      :
-  {
-    /* WARNING - the following is hand-optimized to fit within */
-    /* the sector before the environment sector. If it throws  */
-    /* an error during compilation remove an object here to get        */
-    /* it linked after the configuration sector.               */
+       ram     : ORIGIN = CFG_MONITOR_BASE, LENGTH = CFG_MONITOR_LEN
+       l1_code : ORIGIN = L1_INST_SRAM+0xC, LENGTH = L1_INST_SRAM_SIZE
+       l1_data : ORIGIN = L1_DATA_B_SRAM,   LENGTH = L1_DATA_B_SRAM_SIZE
+}
 
-    cpu/bf533/start.o          (.text)
-    cpu/bf533/start1.o         (.text)
-    cpu/bf533/traps.o          (.text)
-    cpu/bf533/interrupt.o      (.text)
-    cpu/bf533/serial.o         (.text)
-    common/dlmalloc.o          (.text)
-/*  lib_blackfin/bf533_string.o        (.text) */
-/*  lib_generic/vsprintf.o     (.text) */
-    lib_generic/crc32.o                (.text)
-/*  lib_generic/zlib.o         (.text) */
-/*  board/stamp/stamp.o                (.text) */
+SECTIONS
+{
+       .text :
+       {
+#ifdef ENV_IS_EMBEDDED
+               /* WARNING - the following is hand-optimized to fit within
+                * the sector before the environment sector. If it throws
+                * an error during compilation remove an object here to get
+                * it linked after the configuration sector.
+                */
 
-    . = DEFINED(env_offset) ? env_offset : .;
-    common/environment.o       (.text)
+               cpu/blackfin/start.o            (.text)
+               cpu/blackfin/traps.o            (.text)
+               cpu/blackfin/interrupt.o        (.text)
+               cpu/blackfin/serial.o           (.text)
+               common/dlmalloc.o               (.text)
+               lib_generic/crc32.o             (.text)
 
-    *(.text)
-    *(.fixup)
-    *(.got1)
-  }
-  _etext = .;
-  PROVIDE (etext = .);
-  .rodata    :
-  {
-    *(.rodata)
-    *(.rodata1)
-    *(.rodata.str1.4)
-  }
-  .fini      : { *(.fini)    } =0
-  .ctors     : { *(.ctors)   }
-  .dtors     : { *(.dtors)   }
+               . = DEFINED(env_offset) ? env_offset : .;
+               common/environment.o    (.text)
+#endif
 
-  /* Read-write section, merged into data segment: */
-  . = (. + 0x00FF) & 0xFFFFFF00;
-  _erotext = .;
-  PROVIDE (erotext = .);
-  .reloc   :
-  {
-    *(.got)
-    _GOT2_TABLE_ = .;
-    *(.got2)
-    _FIXUP_TABLE_ = .;
-    *(.fixup)
-  }
-  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
-  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+               *(.text .text.*)
+       } >ram
 
-  .data    :
-  {
-    *(.data)
-    *(.data1)
-    *(.sdata)
-    *(.sdata2)
-    *(.dynamic)
-    CONSTRUCTORS
-  }
-  _edata  =  .;
-  PROVIDE (edata = .);
+       .rodata :
+       {
+               . = ALIGN(4);
+               *(.rodata .rodata.*)
+               *(.rodata1)
+               *(.eh_frame)
+               . = ALIGN(4);
+       } >ram
 
-  ___u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  ___u_boot_cmd_end = .;
+       .data :
+       {
+               . = ALIGN(256);
+               *(.data .data.*)
+               *(.data1)
+               *(.sdata)
+               *(.sdata2)
+               *(.dynamic)
+               CONSTRUCTORS
+       } >ram
 
+       .u_boot_cmd :
+       {
+               ___u_boot_cmd_start = .;
+               *(.u_boot_cmd)
+               ___u_boot_cmd_end = .;
+       } >ram
 
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+       .text_l1 :
+       {
+               . = ALIGN(4);
+               __stext_l1 = .;
+               *(.l1.text)
+               . = ALIGN(4);
+               __etext_l1 = .;
+       } >l1_code AT>ram
+       __stext_l1_lma = LOADADDR(.text_l1);
 
-  . = ALIGN(256);
-  __init_begin = .;
-  .text.init : { *(.text.init) }
-  .data.init : { *(.data.init) }
-  . = ALIGN(256);
-  __init_end = .;
+       .data_l1 :
+       {
+               . = ALIGN(4);
+               __sdata_l1 = .;
+               *(.l1.data)
+               *(.l1.bss)
+               . = ALIGN(4);
+               __edata_l1 = .;
+       } >l1_data AT>ram
+       __sdata_l1_lma = LOADADDR(.data_l1);
 
-  __bss_start = .;
-  .bss       :
-  {
-   *(.sbss) *(.scommon)
-   *(.dynbss)
-   *(.bss)
-   *(COMMON)
-  }
-  _end = . ;
-  PROVIDE (end = .);
+       .bss :
+       {
+               . = ALIGN(4);
+               __bss_start = .;
+               *(.sbss) *(.scommon)
+               *(.dynbss)
+               *(.bss .bss.*)
+               *(COMMON)
+               __bss_end = .;
+       } >ram
 }
 
        $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
 
 u-boot.lds: u-boot.lds.S
-       $(CPP) $(CPPFLAGS) -P -Ubfin $^ > $@.tmp
+       $(CPP) $(CPPFLAGS) -D__ASSEMBLY__ -P -Ubfin $^ > $@.tmp
        mv -f $@.tmp $@
 
 clean:
 
 /* miscellaneous platform dependent initialisations */
 int misc_init_r(void)
 {
-#if (BFIN_BOOT_MODE == BF537_BYPASS_BOOT)
+#if defined(CONFIG_CMD_NET)
        char nid[32];
        unsigned char *pMACaddr = (unsigned char *)0x203F0000;
-       u8 SrcAddr[6] = { 0x02, 0x80, 0xAD, 0x20, 0x31, 0xB8 };
 
-#if defined(CONFIG_CMD_NET)
        /* The 0xFF check here is to make sure we don't use the address
         * in flash if it's simply been erased (aka all 0xFF values) */
        if (getenv("ethaddr") == NULL && is_valid_ether_addr(pMACaddr)) {
                setenv("ethaddr", nid);
        }
 #endif
-#endif                         /* BFIN_BOOT_MODE == BF537_BYPASS_BOOT */
 
 #if defined(CONFIG_BFIN_IDE)
 #if defined(CONFIG_BFIN_TRUE_IDE)
 #endif                         /* CONFIG_MISC_INIT_R */
 
 #ifdef CONFIG_POST
-#if (BFIN_BOOT_MODE != BF537_BYPASS_BOOT)
-/* Using sw10-PF5 as the hotkey */
-int post_hotkeys_pressed(void)
-{
-       return 0;
-}
-#else
 /* Using sw10-PF5 as the hotkey */
 int post_hotkeys_pressed(void)
 {
        }
 }
 #endif
-#endif
 
 #if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
 void post_word_store(ulong a)
 
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 # MA 02111-1307 USA
 #
-# TEXT_BASE should be defined as the MAX_SDRAM Address - 256k bytes
-#  256k is defined as CFG_MONITOR_LEN in ./include/configs/<board>.h
-TEXT_BASE = 0x03FC0000
+
+# This is not actually used for Blackfin boards so do not change it
+#TEXT_BASE = do-not-use-me
+
+# Set some default LDR flags based on boot mode.
+LDR_FLAGS-BFIN_BOOT_UART       := --port g --gpio 6
+LDR_FLAGS += $(LDR_FLAGS-$(CONFIG_BFIN_BOOT_MODE))
 
 /*
  * U-boot - u-boot.lds.S
  *
- * Copyright (c) 2005-2007 Analog Device Inc.
+ * Copyright (c) 2005-2008 Analog Device Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  */
 
 #include <config.h>
+#include <asm/blackfin.h>
+#undef ALIGN
+
+/* If we don't actually load anything into L1 data, this will avoid
+ * a syntax error.  If we do actually load something into L1 data,
+ * we'll get a linker memory load error (which is what we'd want).
+ * This is here in the first place so we can quickly test building
+ * for different CPU's which may lack non-cache L1 data.
+ */
+#ifndef L1_DATA_B_SRAM
+# define L1_DATA_B_SRAM      CFG_MONITOR_BASE
+# define L1_DATA_B_SRAM_SIZE 0
+#endif
 
 OUTPUT_ARCH(bfin)
-SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib);
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
+
+/* The 0xC offset is so we don't clobber the tiny LDR jump block. */
 MEMORY
- {
- ram :    ORIGIN = (CFG_MONITOR_BASE), LENGTH = (256 * 1024)
- l1_code : ORIGIN = 0xFFA00000, LENGTH = 0xC000
- l1_data : ORIGIN = 0xFF900000, LENGTH = 0x4000
- }
+{
+       ram     : ORIGIN = CFG_MONITOR_BASE, LENGTH = CFG_MONITOR_LEN
+       l1_code : ORIGIN = L1_INST_SRAM+0xC, LENGTH = L1_INST_SRAM_SIZE
+       l1_data : ORIGIN = L1_DATA_B_SRAM,   LENGTH = L1_DATA_B_SRAM_SIZE
+}
 
 SECTIONS
 {
-  /* Read-only sections, merged into text segment: */
-  . = + SIZEOF_HEADERS; /*0x1000;*/
-  .interp : { *(.interp) }
-  .hash          : { *(.hash)          }
-  .dynsym        : { *(.dynsym)                }
-  .dynstr        : { *(.dynstr)                }
-  .rel.text      : { *(.rel.text)      }
-  .rela.text     : { *(.rela.text)     }
-  .rel.data      : { *(.rel.data)      }
-  .rela.data     : { *(.rela.data)     }
-  .rel.rodata    : { *(.rel.rodata)    }
-  .rela.rodata   : { *(.rela.rodata)   }
-  .rel.got       : { *(.rel.got)       }
-  .rela.got      : { *(.rela.got)      }
-  .rel.ctors     : { *(.rel.ctors)     }
-  .rela.ctors    : { *(.rela.ctors)    }
-  .rel.dtors     : { *(.rel.dtors)     }
-  .rela.dtors    : { *(.rela.dtors)    }
-  .rel.bss       : { *(.rel.bss)       }
-  .rela.bss      : { *(.rela.bss)      }
-  .rel.plt       : { *(.rel.plt)       }
-  .rela.plt      : { *(.rela.plt)      }
-  .init          : { *(.init)          }
-  .plt : { *(.plt) }
-  . = CFG_MONITOR_BASE;
-  .text      :
-  {
-    /* WARNING - the following is hand-optimized to fit within */
-    /* the sector before the environment sector. If it throws  */
-    /* an error during compilation remove an object here to get        */
-    /* it linked after the configuration sector.               */
-
-    cpu/bf537/start.o          (.text)
-    cpu/bf537/start1.o         (.text)
-    cpu/bf537/traps.o          (.text)
-    cpu/bf537/interrupt.o      (.text)
-    cpu/bf537/serial.o         (.text)
-    common/dlmalloc.o          (.text)
-/*  lib_blackfin/bf533_string.o        (.text) */
-/*  lib_generic/vsprintf.o     (.text) */
-    lib_generic/crc32.o                (.text)
-/*  lib_generic/zlib.o         (.text) */
-/*  board/bf537-stamp/bf537-stamp.o            (.text) */
-
-    . = DEFINED(env_offset) ? env_offset : .;
-    common/environment.o       (.text)
-
-    *(EXCLUDE_FILE (board/bf537-stamp/post-memory.o) .text)
-    *(.fixup)
-    *(.got1)
-  }  > ram
-  _etext = .;
-  PROVIDE (etext = .);
-  .text_l1     :
-  {
-  . = ALIGN(4) ;
-  _text_l1 = .;
-  PROVIDE (text_l1 = .);
-  board/bf537-stamp/post-memory.o   (.text)
-  . = ALIGN(4) ;
-  _etext_l1 = .;
-  PROVIDE (etext_l1 = .);
-  } > l1_code AT > ram
-
-  .rodata :
-  {
-    . = ALIGN(4);
-    *(EXCLUDE_FILE (board/bf537-stamp/post-memory.o) .rodata)
-    *(EXCLUDE_FILE (board/bf537-stamp/post-memory.o) .rodata1)
-    *(EXCLUDE_FILE (board/bf537-stamp/post-memory.o) .rodata.str1.4)
-    *(.eh_frame)
-    . = ALIGN(4);
-  } > ram
-
-  . = ALIGN(4);
-  _erodata = .;
-  PROVIDE (erodata = .);
-  .rodata_l1 :
- {
-   . = ALIGN(4) ;
-   _rodata_l1 = .;
-   PROVIDE (rodata_l1 = .);
-   board/bf537-stamp/post-memory.o (.rodata)
-   board/bf537-stamp/post-memory.o (.rodata1)
-   board/bf537-stamp/post-memory.o (.rodata.str1.4)
-   . = ALIGN(4) ;
-   _erodata_l1 = .;
-   PROVIDE(erodata_l1 = .);
- } > l1_data AT > ram
-
-  .fini      : { *(.fini)    } =0
-  .ctors     : { *(.ctors)   }
-  .dtors     : { *(.dtors)   }
-
-  /* Read-write section, merged into data segment: */
-  . = (. + 0x00FF) & 0xFFFFFF00;
-  _erotext = .;
-  PROVIDE (erotext = .);
-  .reloc   :
-  {
-    *(.got)
-    _GOT2_TABLE_ = .;
-    *(.got2)
-    _FIXUP_TABLE_ = .;
-    *(.fixup)
-  }
-  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
-  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
-
-  .data    :
-  {
-    *(.data)
-    *(.data1)
-    *(.sdata)
-    *(.sdata2)
-    *(.dynamic)
-    CONSTRUCTORS
-  } > ram
-  _edata  =  .;
-  PROVIDE (edata = .);
-
-  ___u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) } > ram
-  ___u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
-
-  . = ALIGN(256);
-  __init_begin = .;
-  .text.init : { *(.text.init) }
-  .data.init : { *(.data.init) }
-  . = ALIGN(256);
-  __init_end = .;
-
-  .bss       :
-  {
-  __bss_start = .;
-   *(.sbss) *(.scommon)
-   *(.dynbss)
-   *(.bss)
-   *(COMMON)
-  } > ram
-  _end = . ;
-  PROVIDE (end = .);
+       .text :
+       {
+#ifdef ENV_IS_EMBEDDED
+               /* WARNING - the following is hand-optimized to fit within
+                * the sector before the environment sector. If it throws
+                * an error during compilation remove an object here to get
+                * it linked after the configuration sector.
+                */
+
+               cpu/blackfin/start.o            (.text)
+               cpu/blackfin/traps.o            (.text)
+               cpu/blackfin/interrupt.o        (.text)
+               cpu/blackfin/serial.o           (.text)
+               common/dlmalloc.o               (.text)
+               lib_generic/crc32.o             (.text)
+
+               . = DEFINED(env_offset) ? env_offset : .;
+               common/environment.o    (.text)
+#endif
+
+               *(.text .text.*)
+       } >ram
+
+       .rodata :
+       {
+               . = ALIGN(4);
+               *(.rodata .rodata.*)
+               *(.rodata1)
+               *(.eh_frame)
+               . = ALIGN(4);
+       } >ram
+
+       .data :
+       {
+               . = ALIGN(256);
+               *(.data .data.*)
+               *(.data1)
+               *(.sdata)
+               *(.sdata2)
+               *(.dynamic)
+               CONSTRUCTORS
+       } >ram
+
+       .u_boot_cmd :
+       {
+               ___u_boot_cmd_start = .;
+               *(.u_boot_cmd)
+               ___u_boot_cmd_end = .;
+       } >ram
+
+       .text_l1 :
+       {
+               . = ALIGN(4);
+               __stext_l1 = .;
+               *(.l1.text)
+               . = ALIGN(4);
+               __etext_l1 = .;
+       } >l1_code AT>ram
+       __stext_l1_lma = LOADADDR(.text_l1);
+
+       .data_l1 :
+       {
+               . = ALIGN(4);
+               __sdata_l1 = .;
+               *(.l1.data)
+               *(.l1.bss)
+               . = ALIGN(4);
+               __edata_l1 = .;
+       } >l1_data AT>ram
+       __sdata_l1_lma = LOADADDR(.data_l1);
+
+       .bss :
+       {
+               . = ALIGN(4);
+               __bss_start = .;
+               *(.sbss) *(.scommon)
+               *(.dynbss)
+               *(.bss .bss.*)
+               *(COMMON)
+               __bss_end = .;
+       } >ram
 }
 
        $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
 
 u-boot.lds: u-boot.lds.S
-       $(CPP) $(CPPFLAGS) -P -Ubfin $^ > $@.tmp
+       $(CPP) $(CPPFLAGS) -D__ASSEMBLY__ -P -Ubfin $^ > $@.tmp
        mv -f $@.tmp $@
 
 clean:
 
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 # MA 02111-1307 USA
 #
-# TEXT_BASE should be defined as the MAX_SDRAM Address - 256k bytes
-#  256k is defined as CFG_MONITOR_LEN in ./include/configs/<board>.h
-TEXT_BASE = 0x03FC0000
+
+# This is not actually used for Blackfin boards so do not change it
+#TEXT_BASE = do-not-use-me
 
 /*
  * U-boot - u-boot.lds.S
  *
- * Copyright (c) 2005-2007 Analog Device Inc.
+ * Copyright (c) 2005-2008 Analog Device Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  */
 
 #include <config.h>
+#include <asm/blackfin.h>
+#undef ALIGN
+
+/* If we don't actually load anything into L1 data, this will avoid
+ * a syntax error.  If we do actually load something into L1 data,
+ * we'll get a linker memory load error (which is what we'd want).
+ * This is here in the first place so we can quickly test building
+ * for different CPU's which may lack non-cache L1 data.
+ */
+#ifndef L1_DATA_B_SRAM
+# define L1_DATA_B_SRAM      CFG_MONITOR_BASE
+# define L1_DATA_B_SRAM_SIZE 0
+#endif
 
 OUTPUT_ARCH(bfin)
-OUTPUT_ARCH(bfin)
-SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib);
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
-SECTIONS
+
+/* The 0xC offset is so we don't clobber the tiny LDR jump block. */
+MEMORY
 {
-  /* Read-only sections, merged into text segment: */
-  . = + SIZEOF_HEADERS;
-  .interp : { *(.interp) }
-  .hash                : { *(.hash)            }
-  .dynsym      : { *(.dynsym)          }
-  .dynstr      : { *(.dynstr)          }
-  .rel.text    : { *(.rel.text)        }
-  .rela.text   : { *(.rela.text)       }
-  .rel.data    : { *(.rel.data)        }
-  .rela.data   : { *(.rela.data)       }
-  .rel.rodata  : { *(.rel.rodata)      }
-  .rela.rodata : { *(.rela.rodata)     }
-  .rel.got     : { *(.rel.got)         }
-  .rela.got    : { *(.rela.got)        }
-  .rel.ctors   : { *(.rel.ctors)       }
-  .rela.ctors  : { *(.rela.ctors)      }
-  .rel.dtors   : { *(.rel.dtors)       }
-  .rela.dtors  : { *(.rela.dtors)      }
-  .rel.bss     : { *(.rel.bss) }
-  .rela.bss    : { *(.rela.bss)        }
-  .rel.plt     : { *(.rel.plt) }
-  .rela.plt    : { *(.rela.plt)        }
-  .init                : { *(.init)            }
-  .plt : { *(.plt) }
-  . = CFG_MONITOR_BASE;
-  .text      :
-  {
-    /* WARNING - the following is hand-optimized to fit within */
-    /* the sector before the environment sector. If it throws  */
-    /* an error during compilation remove an object here to get        */
-    /* it linked after the configuration sector.               */
+       ram     : ORIGIN = CFG_MONITOR_BASE, LENGTH = CFG_MONITOR_LEN
+       l1_code : ORIGIN = L1_INST_SRAM+0xC, LENGTH = L1_INST_SRAM_SIZE
+       l1_data : ORIGIN = L1_DATA_B_SRAM,   LENGTH = L1_DATA_B_SRAM_SIZE
+}
 
-    cpu/bf561/start.o          (.text)
-    cpu/bf561/start1.o         (.text)
-    cpu/bf561/traps.o          (.text)
-    cpu/bf561/interrupt.o      (.text)
-    cpu/bf561/serial.o         (.text)
-    common/dlmalloc.o          (.text)
-/*  lib_blackfin/bf533_string.o        (.text) */
-/*  lib_generic/vsprintf.o     (.text) */
-    lib_generic/crc32.o                (.text)
-    lib_generic/zlib.o         (.text)
-    board/bf561-ezkit/bf561-ezkit.o            (.text)
+SECTIONS
+{
+       .text :
+       {
+#ifdef ENV_IS_EMBEDDED
+               /* WARNING - the following is hand-optimized to fit within
+                * the sector before the environment sector. If it throws
+                * an error during compilation remove an object here to get
+                * it linked after the configuration sector.
+                */
 
-    . = DEFINED(env_offset) ? env_offset : .;
-    common/environment.o       (.text)
+               cpu/blackfin/start.o            (.text)
+               cpu/blackfin/traps.o            (.text)
+               cpu/blackfin/interrupt.o        (.text)
+               cpu/blackfin/serial.o           (.text)
+               common/dlmalloc.o               (.text)
+               lib_generic/crc32.o             (.text)
+               lib_generic/zlib.o              (.text)
+               board/bf561-ezkit/bf561-ezkit.o         (.text)
 
-    *(.text)
-    *(.fixup)
-    *(.got1)
-  }
-  _etext = .;
-  PROVIDE (etext = .);
-  .rodata    :
-  {
-    *(.rodata)
-    *(.rodata1)
-    *(.rodata.str1.4)
-  }
-  .fini      : { *(.fini)    } =0
-  .ctors     : { *(.ctors)   }
-  .dtors     : { *(.dtors)   }
+               . = DEFINED(env_offset) ? env_offset : .;
+               common/environment.o    (.text)
+#endif
 
-  /* Read-write section, merged into data segment: */
-  . = (. + 0x00FF) & 0xFFFFFF00;
-  _erotext = .;
-  PROVIDE (erotext = .);
-  .reloc   :
-  {
-    *(.got)
-    _GOT2_TABLE_ = .;
-    *(.got2)
-    _FIXUP_TABLE_ = .;
-    *(.fixup)
-  }
-  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
-  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+               *(.text .text.*)
+       } >ram
 
-  .data    :
-  {
-    *(.data)
-    *(.data1)
-    *(.sdata)
-    *(.sdata2)
-    *(.dynamic)
-    CONSTRUCTORS
-  }
-  _edata  =  .;
-  PROVIDE (edata = .);
+       .rodata :
+       {
+               . = ALIGN(4);
+               *(.rodata .rodata.*)
+               *(.rodata1)
+               *(.eh_frame)
+               . = ALIGN(4);
+       } >ram
 
-  ___u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  ___u_boot_cmd_end = .;
+       .data :
+       {
+               . = ALIGN(256);
+               *(.data .data.*)
+               *(.data1)
+               *(.sdata)
+               *(.sdata2)
+               *(.dynamic)
+               CONSTRUCTORS
+       } >ram
 
+       .u_boot_cmd :
+       {
+               ___u_boot_cmd_start = .;
+               *(.u_boot_cmd)
+               ___u_boot_cmd_end = .;
+       } >ram
 
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+       .text_l1 :
+       {
+               . = ALIGN(4);
+               __stext_l1 = .;
+               *(.l1.text)
+               . = ALIGN(4);
+               __etext_l1 = .;
+       } >l1_code AT>ram
+       __stext_l1_lma = LOADADDR(.text_l1);
 
-  . = ALIGN(256);
-  __init_begin = .;
-  .text.init : { *(.text.init) }
-  .data.init : { *(.data.init) }
-  . = ALIGN(256);
-  __init_end = .;
+       .data_l1 :
+       {
+               . = ALIGN(4);
+               __sdata_l1 = .;
+               *(.l1.data)
+               *(.l1.bss)
+               . = ALIGN(4);
+               __edata_l1 = .;
+       } >l1_data AT>ram
+       __sdata_l1_lma = LOADADDR(.data_l1);
 
-  __bss_start = .;
-  .bss       :
-  {
-   *(.sbss) *(.scommon)
-   *(.dynbss)
-   *(.bss)
-   *(COMMON)
-  }
-  _end = . ;
-  PROVIDE (end = .);
+       .bss :
+       {
+               . = ALIGN(4);
+               __bss_start = .;
+               *(.sbss) *(.scommon)
+               *(.dynbss)
+               *(.bss .bss.*)
+               *(COMMON)
+               __bss_end = .;
+       } >ram
 }
 
+++ /dev/null
-# U-boot - Makefile
-#
-# Copyright (c) 2005-2007 Analog Devices Inc.
-#
-# (C) Copyright 2000-2006
-# 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., 51 Franklin St, Fifth Floor, Boston,
-# MA 02110-1301 USA
-#
-
-include $(TOPDIR)/config.mk
-
-LIB    = $(obj)lib$(CPU).a
-
-SOBJS  = start.o start1.o interrupt.o cache.o flush.o init_sdram.o
-COBJS  = cpu.o traps.o ints.o serial.o interrupts.o video.o
-
-EXTRA = init_sdram_bootrom_initblock.o
-
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
-START  := $(addprefix $(obj),$(START))
-
-all:   $(obj).depend $(START) $(LIB) $(obj).depend $(EXTRA)
-
-$(LIB):        $(OBJS)
-       $(AR) $(ARFLAGS) $@ $(OBJS)
-
-#########################################################################
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
 
+++ /dev/null
-/*
- * U-boot - bf533_serial.h Serial Driver defines
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on
- * bf533_serial.h: Definitions for the BlackFin BF533 DSP serial driver.
- * Copyright (C) 2003  Bas Vermeulen <bas@buyways.nl>
- *                     BuyWays B.V. (www.buyways.nl)
- *
- * Based heavily on:
- * blkfinserial.h: Definitions for the BlackFin DSP serial driver.
- *
- * Copyright (C) 2001  Tony Z. Kou     tonyko@arcturusnetworks.com
- * Copyright (C) 2001   Arcturus Networks Inc. <www.arcturusnetworks.com>
- *
- * Based on code from 68328serial.c which was:
- * Copyright (C) 1995       David S. Miller    <davem@caip.rutgers.edu>
- * Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com>
- * Copyright (C) 1998, 1999 D. Jeff Dionne     <jeff@uclinux.org>
- * Copyright (C) 1999       Vladimir Gurevich  <vgurevic@cisco.com>
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#ifndef _Bf533_SERIAL_H
-#define _Bf533_SERIAL_H
-
-#include <linux/config.h>
-#include <asm/blackfin.h>
-
-#define SYNC_ALL       __asm__ __volatile__ ("ssync;\n")
-#define ACCESS_LATCH   *pUART_LCR |= DLAB;
-#define ACCESS_PORT_IER        *pUART_LCR &= (~DLAB);
-
-void serial_setbrg(void);
-static void local_put_char(char ch);
-void calc_baud(void);
-void serial_setbrg(void);
-int serial_init(void);
-void serial_putc(const char c);
-int serial_tstc(void);
-int serial_getc(void);
-void serial_puts(const char *s);
-static void local_put_char(char ch);
-
-int baud_table[5] = { 9600, 19200, 38400, 57600, 115200 };
-
-struct {
-       unsigned char dl_high;
-       unsigned char dl_low;
-} hw_baud_table[5];
-
-#ifdef CONFIG_STAMP
-extern unsigned long pll_div_fact;
-#endif
-
-#endif
 
+++ /dev/null
-#define ASSEMBLY
-#include <asm/linkage.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/mach-common/bits/mpu.h>
-
-.text
-.align 2
-ENTRY(_blackfin_icache_flush_range)
-       R2 = -32;
-       R2 = R0 & R2;
-       P0 = R2;
-       P1 = R1;
-       CSYNC;
-       1:
-       IFLUSH[P0++];
-       CC = P0 < P1(iu);
-       IF CC JUMP 1b(bp);
-       IFLUSH[P0];
-       SSYNC;
-       RTS;
-
-ENTRY(_blackfin_dcache_flush_range)
-       R2 = -32;
-       R2 = R0 & R2;
-       P0 = R2;
-       P1 = R1;
-       CSYNC;
-1:
-       FLUSH[P0++];
-       CC = P0 < P1(iu);
-       IF CC JUMP 1b(bp);
-       FLUSH[P0];
-       SSYNC;
-       RTS;
-
-ENTRY(_icache_invalidate)
-ENTRY(_invalidate_entire_icache)
-       [--SP] = (R7:5);
-
-       P0.L = (IMEM_CONTROL & 0xFFFF);
-       P0.H = (IMEM_CONTROL >> 16);
-       R7 =[P0];
-
-       /*
-        * Clear the IMC bit , All valid bits in the instruction
-        * cache are set to the invalid state
-        */
-       BITCLR(R7, IMC_P);
-       CLI R6;
-       /* SSYNC required before invalidating cache. */
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-
-       /* Configures the instruction cache agian */
-       R6 = (IMC | ENICPLB);
-       R7 = R7 | R6;
-
-       CLI R6;
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-
-       (R7:5) =[SP++];
-       RTS;
-
-/*
- * Invalidate the Entire Data cache by
- * clearing DMC[1:0] bits
- */
-ENTRY(_invalidate_entire_dcache)
-ENTRY(_dcache_invalidate)
-       [--SP] = (R7:6);
-
-       P0.L = (DMEM_CONTROL & 0xFFFF);
-       P0.H = (DMEM_CONTROL >> 16);
-       R7 =[P0];
-
-       /*
-        * Clear the DMC[1:0] bits, All valid bits in the data
-        * cache are set to the invalid state
-        */
-       BITCLR(R7, DMC0_P);
-       BITCLR(R7, DMC1_P);
-       CLI R6;
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-       /* Configures the data cache again */
-
-       R6 = (ACACHE_BCACHE | ENDCPLB | PORT_PREF0);
-       R7 = R7 | R6;
-
-       CLI R6;
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-
-       (R7:6) =[SP++];
-       RTS;
-
-ENTRY(_blackfin_dcache_invalidate_range)
-       R2 = -32;
-       R2 = R0 & R2;
-       P0 = R2;
-       P1 = R1;
-       CSYNC;
-1:
-       FLUSHINV[P0++];
-       CC = P0 < P1(iu);
-       IF CC JUMP 1b(bp);
-
-       /*
-        * If the data crosses a cache line, then we'll be pointing to
-        * the last cache line, but won't have flushed/invalidated it yet, so do
-        * one more.
-        */
-       FLUSHINV[P0];
-       SSYNC;
-       RTS;
 
+++ /dev/null
-# U-boot - config.mk
-#
-# Copyright (c) 2005-2007 Analog Devices Inc.
-#
-# (C) Copyright 2000-2004
-# 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., 51 Franklin St, Fifth Floor, Boston,
-# MA 02110-1301 USA
-#
-
-PLATFORM_RELFLAGS += -mcpu=bf533
 
+++ /dev/null
-/*
- * U-boot - cpu.c CPU specific functions
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <asm/blackfin.h>
-#include <command.h>
-#include <asm/entry.h>
-#include <asm/cplb.h>
-#include <asm/io.h>
-
-#define CACHE_ON 1
-#define CACHE_OFF 0
-
-extern unsigned int icplb_table[page_descriptor_table_size][2];
-extern unsigned int dcplb_table[page_descriptor_table_size][2];
-
-int do_reset(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
-{
-       __asm__ __volatile__("cli r3;" "P0 = %0;" "JUMP (P0);"::"r"(L1_INST_SRAM)
-           );
-
-       return 0;
-}
-
-/* These functions are just used to satisfy the linker */
-int cpu_init(void)
-{
-       return 0;
-}
-
-int cleanup_before_linux(void)
-{
-       return 0;
-}
-
-void icache_enable(void)
-{
-       unsigned int *I0, *I1;
-       int i, j = 0;
-
-       /* Before enable icache, disable it first */
-       icache_disable();
-       I0 = (unsigned int *)ICPLB_ADDR0;
-       I1 = (unsigned int *)ICPLB_DATA0;
-
-       /* make sure the locked ones go in first */
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (CPLB_LOCK & icplb_table[i][1]) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                                icplb_table[i][0], icplb_table[i][1]);
-                       *I0++ = icplb_table[i][0];
-                       *I1++ = icplb_table[i][1];
-                       j++;
-               }
-       }
-
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (!(CPLB_LOCK & icplb_table[i][1])) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                                icplb_table[i][0], icplb_table[i][1]);
-                       *I0++ = icplb_table[i][0];
-                       *I1++ = icplb_table[i][1];
-                       j++;
-                       if (j == 16) {
-                               break;
-                       }
-               }
-       }
-
-       /* Fill the rest with invalid entry */
-       if (j <= 15) {
-               for (; j < 16; j++) {
-                       debug("filling %i with 0", j);
-                       *I1++ = 0x0;
-               }
-
-       }
-
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)IMEM_CONTROL = IMC | ENICPLB;
-       SSYNC();
-}
-
-void icache_disable(void)
-{
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)IMEM_CONTROL &= ~(IMC | ENICPLB);
-       SSYNC();
-}
-
-int icache_status(void)
-{
-       unsigned int value;
-       value = *(unsigned int *)IMEM_CONTROL;
-
-       if (value & (IMC | ENICPLB))
-               return CACHE_ON;
-       else
-               return CACHE_OFF;
-}
-
-void dcache_enable(void)
-{
-       unsigned int *I0, *I1;
-       unsigned int temp;
-       int i, j = 0;
-
-       /* Before enable dcache, disable it first */
-       dcache_disable();
-       I0 = (unsigned int *)DCPLB_ADDR0;
-       I1 = (unsigned int *)DCPLB_DATA0;
-
-       /* make sure the locked ones go in first */
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (CPLB_LOCK & dcplb_table[i][1]) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                                dcplb_table[i][0], dcplb_table[i][1]);
-                       *I0++ = dcplb_table[i][0];
-                       *I1++ = dcplb_table[i][1];
-                       j++;
-               } else {
-                       debug("skip   %02i %02i 0x%08x 0x%08x\n", i, j,
-                                dcplb_table[i][0], dcplb_table[i][1]);
-               }
-       }
-
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (!(CPLB_LOCK & dcplb_table[i][1])) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                                dcplb_table[i][0], dcplb_table[i][1]);
-                       *I0++ = dcplb_table[i][0];
-                       *I1++ = dcplb_table[i][1];
-                       j++;
-                       if (j == 16) {
-                               break;
-                       }
-               }
-       }
-
-       /* Fill the rest with invalid entry */
-       if (j <= 15) {
-               for (; j < 16; j++) {
-                       debug("filling %i with 0", j);
-                       *I1++ = 0x0;
-               }
-       }
-
-       temp = *(unsigned int *)DMEM_CONTROL;
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)DMEM_CONTROL =
-           ACACHE_BCACHE | ENDCPLB | PORT_PREF0 | temp;
-       SSYNC();
-}
-
-void dcache_disable(void)
-{
-       unsigned int *I0, *I1;
-       int i;
-
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)DMEM_CONTROL &=
-           ~(ACACHE_BCACHE | ENDCPLB | PORT_PREF0);
-       SSYNC();
-
-       /* after disable dcache,
-        * clear it so we don't confuse the next application
-        */
-       I0 = (unsigned int *)DCPLB_ADDR0;
-       I1 = (unsigned int *)DCPLB_DATA0;
-
-       for (i = 0; i < 16; i++) {
-               *I0++ = 0x0;
-               *I1++ = 0x0;
-       }
-}
-
-int dcache_status(void)
-{
-       unsigned int value;
-       value = *(unsigned int *)DMEM_CONTROL;
-       if (value & (ENDCPLB))
-               return CACHE_ON;
-       else
-               return CACHE_OFF;
-}
 
+++ /dev/null
-/*
- *  U-boot - cpu.h
- *
- *  Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#ifndef _CPU_H_
-#define _CPU_H_
-
-#include <command.h>
-
-#define INTERNAL_IRQS (32)
-#define NUM_IRQ_NODES 16
-#define DEF_INTERRUPT_FLAGS 1
-#define MAX_TIM_LOAD   0xFFFFFFFF
-
-void blackfin_irq_panic(int reason, struct pt_regs *reg);
-extern void dump(struct pt_regs *regs);
-void display_excp(void);
-asmlinkage void evt_nmi(void);
-asmlinkage void evt_exception(void);
-asmlinkage void trap(void);
-asmlinkage void evt_ivhw(void);
-asmlinkage void evt_rst(void);
-asmlinkage void evt_timer(void);
-asmlinkage void evt_evt7(void);
-asmlinkage void evt_evt8(void);
-asmlinkage void evt_evt9(void);
-asmlinkage void evt_evt10(void);
-asmlinkage void evt_evt11(void);
-asmlinkage void evt_evt12(void);
-asmlinkage void evt_evt13(void);
-asmlinkage void evt_soft_int1(void);
-asmlinkage void evt_system_call(void);
-void blackfin_irq_panic(int reason, struct pt_regs *regs);
-void blackfin_free_irq(unsigned int irq, void *dev_id);
-void call_isr(int irq, struct pt_regs *fp);
-void blackfin_do_irq(int vec, struct pt_regs *fp);
-void blackfin_init_IRQ(void);
-void blackfin_enable_irq(unsigned int irq);
-void blackfin_disable_irq(unsigned int irq);
-extern int do_reset(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]);
-int blackfin_request_irq(unsigned int irq,
-                        void (*handler) (int, void *, struct pt_regs *),
-                        unsigned long flags, const char *devname,
-                        void *dev_id);
-void timer_init(void);
-#endif
 
+++ /dev/null
-/* Copyright (C) 2003-2007 Analog Devices Inc.
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.
- */
-
-#define ASSEMBLY
-
-#include <asm/linkage.h>
-#include <asm/cplb.h>
-#include <config.h>
-#include <asm/blackfin.h>
-
-.text
-
-/* This is an external function being called by the user
- * application through __flush_cache_all. Currently this function
- * serves the purpose of flushing all the pending writes in
- * in the instruction cache.
- */
-
-ENTRY(_flush_instruction_cache)
-       [--SP] = ( R7:6, P5:4 );
-       LINK 12;
-       SP += -12;
-       P5.H = (ICPLB_ADDR0 >> 16);
-       P5.L = (ICPLB_ADDR0 & 0xFFFF);
-       P4.H = (ICPLB_DATA0 >> 16);
-       P4.L = (ICPLB_DATA0 & 0xFFFF);
-       R7 = CPLB_VALID | CPLB_L1_CHBL;
-       R6 = 16;
-inext: R0 = [P5++];
-       R1 = [P4++];
-       [--SP] =  RETS;
-       CALL _icplb_flush;      /* R0 = page, R1 = data*/
-       RETS = [SP++];
-iskip: R6 += -1;
-       CC = R6;
-       IF CC JUMP inext;
-       SSYNC;
-       SP += 12;
-       UNLINK;
-       ( R7:6, P5:4 ) = [SP++];
-       RTS;
-
-/* This is an internal function to flush all pending
- * writes in the cache associated with a particular ICPLB.
- *
- * R0 -  page's start address
- * R1 -  CPLB's data field.
- */
-
-.align 2
-ENTRY(_icplb_flush)
-       [--SP] = ( R7:0, P5:0 );
-       [--SP] = LC0;
-       [--SP] = LT0;
-       [--SP] = LB0;
-       [--SP] = LC1;
-       [--SP] = LT1;
-       [--SP] = LB1;
-
-       /* If it's a 1K or 4K page, then it's quickest to
-        * just systematically flush all the addresses in
-        * the page, regardless of whether they're in the
-        * cache, or dirty. If it's a 1M or 4M page, there
-        * are too many addresses, and we have to search the
-        * cache for lines corresponding to the page.
-        */
-
-       CC = BITTST(R1, 17);    /* 1MB or 4MB */
-       IF !CC JUMP iflush_whole_page;
-
-       /* We're only interested in the page's size, so extract
-        * this from the CPLB (bits 17:16), and scale to give an
-        * offset into the page_size and page_prefix tables.
-        */
-
-       R1 <<= 14;
-       R1 >>= 30;
-       R1 <<= 2;
-
-       /* We can also determine the sub-bank used, because this is
-        * taken from bits 13:12 of the address.
-        */
-
-       R3 = ((12<<8)|2);               /* Extraction pattern */
-       nop;                            /* Anamoly 05000209 */
-       R4 = EXTRACT(R0, R3.L) (Z);     /* Extract bits */
-
-       /* Save in extraction pattern for later deposit. */
-       R3.H = R4.L << 0;
-
-       /* So:
-        * R0 = Page start
-        * R1 = Page length (actually, offset into size/prefix tables)
-        * R3 = sub-bank deposit values
-        *
-        * The cache has 2 Ways, and 64 sets, so we iterate through
-        * the sets, accessing the tag for each Way, for our Bank and
-        * sub-bank, looking for dirty, valid tags that match our
-        * address prefix.
-        */
-
-       P5.L = (ITEST_COMMAND & 0xFFFF);
-       P5.H = (ITEST_COMMAND >> 16);
-       P4.L = (ITEST_DATA0 & 0xFFFF);
-       P4.H = (ITEST_DATA0 >> 16);
-
-       P0.L = page_prefix_table;
-       P0.H = page_prefix_table;
-       P1 = R1;
-       R5 = 0;                 /* Set counter*/
-       P0 = P1 + P0;
-       R4 = [P0];              /* This is the address prefix*/
-
-       /* We're reading (bit 1==0) the tag (bit 2==0), and we
-        * don't care about which double-word, since we're only
-        * fetching tags, so we only have to set Set, Bank,
-        * Sub-bank and Way.
-        */
-
-       P2 = 4;
-       LSETUP (ifs1, ife1) LC1 = P2;
-ifs1:  P0 = 32;                /* iterate over all sets*/
-       LSETUP (ifs0, ife0) LC0 = P0;
-ifs0:  R6 = R5 << 5;           /* Combine set*/
-       R6.H = R3.H << 0 ;      /* and sub-bank*/
-       [P5] = R6;              /* Issue Command*/
-       SSYNC;                  /* CSYNC will not work here :(*/
-       R7 = [P4];              /* and read Tag.*/
-       CC = BITTST(R7, 0);     /* Check if valid*/
-       IF !CC JUMP ifskip;     /* and skip if not.*/
-
-       /* Compare against the page address. First, plant bits 13:12
-        * into the tag, since those aren't part of the returned data.
-        */
-
-       R7 = DEPOSIT(R7, R3);   /* set 13:12*/
-       R1 = R7 & R4;           /* Mask off lower bits*/
-       CC = R1 == R0;          /* Compare against page start.*/
-       IF !CC JUMP ifskip;     /* Skip it if it doesn't match.*/
-
-       /* Tag address matches against page, so this is an entry
-        * we must flush.
-        */
-
-       R7 >>= 10;              /* Mask off the non-address bits*/
-       R7 <<= 10;
-       P3 = R7;
-       IFLUSH [P3];            /* And flush the entry*/
-ifskip:
-ife0:  R5 += 1;                /* Advance to next Set*/
-ife1:  NOP;
-
-ifinished:
-       SSYNC;                  /* Ensure the data gets out to mem.*/
-
-       /*Finished. Restore context.*/
-       LB1 = [SP++];
-       LT1 = [SP++];
-       LC1 = [SP++];
-       LB0 = [SP++];
-       LT0 = [SP++];
-       LC0 = [SP++];
-       ( R7:0, P5:0 ) = [SP++];
-       RTS;
-
-iflush_whole_page:
-       /* It's a 1K or 4K page, so quicker to just flush the
-        * entire page.
-        */
-
-       P1 = 32;                /* For 1K pages*/
-       P2 = P1 << 2;           /* For 4K pages*/
-       P0 = R0;                /* Start of page*/
-       CC = BITTST(R1, 16);    /* Whether 1K or 4K*/
-       IF CC P1 = P2;
-       P1 += -1;               /* Unroll one iteration*/
-       SSYNC;
-       IFLUSH [P0++];          /* because CSYNC can't end loops.*/
-       LSETUP (isall, ieall) LC0 = P1;
-isall:
-       IFLUSH [P0++];
-ieall:
-       NOP;
-       SSYNC;
-       JUMP ifinished;
-
-/* This is an external function being called by the user
- * application through __flush_cache_all. Currently this function
- * serves the purpose of flushing all the pending writes in
- * in the data cache.
- */
-
-ENTRY(_flush_data_cache)
-       [--SP] = ( R7:6, P5:4 );
-       LINK 12;
-       SP += -12;
-       P5.H = (DCPLB_ADDR0 >> 16);
-       P5.L = (DCPLB_ADDR0 & 0xFFFF);
-       P4.H = (DCPLB_DATA0 >> 16);
-       P4.L = (DCPLB_DATA0 & 0xFFFF);
-       R7 = CPLB_VALID | CPLB_L1_CHBL | CPLB_DIRTY (Z);
-       R6 = 16;
-next:  R0 = [P5++];
-       R1 = [P4++];
-       CC = BITTST(R1, 14);    /* Is it write-through?*/
-       IF CC JUMP skip;        /* If so, ignore it.*/
-       R2 = R1 & R7;           /* Is it a dirty, cached page?*/
-       CC = R2;
-       IF !CC JUMP skip;       /* If not, ignore it.*/
-       [--SP] = RETS;
-       CALL _dcplb_flush;      /* R0 = page, R1 = data*/
-       RETS = [SP++];
-skip:  R6 += -1;
-       CC = R6;
-       IF CC JUMP next;
-       SSYNC;
-       SP += 12;
-       UNLINK;
-       ( R7:6, P5:4 ) = [SP++];
-       RTS;
-
-/* This is an internal function to flush all pending
- * writes in the cache associated with a particular DCPLB.
- *
- * R0 -  page's start address
- * R1 -  CPLB's data field.
- */
-
-.align 2
-ENTRY(_dcplb_flush)
-       [--SP] = ( R7:0, P5:0 );
-       [--SP] = LC0;
-       [--SP] = LT0;
-       [--SP] = LB0;
-       [--SP] = LC1;
-       [--SP] = LT1;
-       [--SP] = LB1;
-
-       /* If it's a 1K or 4K page, then it's quickest to
-        * just systematically flush all the addresses in
-        * the page, regardless of whether they're in the
-        * cache, or dirty. If it's a 1M or 4M page, there
-        * are too many addresses, and we have to search the
-        * cache for lines corresponding to the page.
-        */
-
-       CC = BITTST(R1, 17);    /* 1MB or 4MB */
-       IF !CC JUMP dflush_whole_page;
-
-       /* We're only interested in the page's size, so extract
-        * this from the CPLB (bits 17:16), and scale to give an
-        * offset into the page_size and page_prefix tables.
-        */
-
-       R1 <<= 14;
-       R1 >>= 30;
-       R1 <<= 2;
-
-       /* The page could be mapped into Bank A or Bank B, depending
-        * on (a) whether both banks are configured as cache, and
-        * (b) on whether address bit A[x] is set. x is determined
-        * by DCBS in DMEM_CONTROL
-        */
-
-       R2 = 0;                 /* Default to Bank A (Bank B would be 1)*/
-
-       P0.L = (DMEM_CONTROL & 0xFFFF);
-       P0.H = (DMEM_CONTROL >> 16);
-
-       R3 = [P0];              /* If Bank B is not enabled as cache*/
-       CC = BITTST(R3, 2);     /* then Bank A is our only option.*/
-       IF CC JUMP bank_chosen;
-
-       R4 = 1<<14;             /* If DCBS==0, use A[14].*/
-       R5 = R4 << 7;           /* If DCBS==1, use A[23];*/
-       CC = BITTST(R3, 4);
-       IF CC R4 = R5;          /* R4 now has either bit 14 or bit 23 set.*/
-       R5 = R0 & R4;           /* Use it to test the Page address*/
-       CC = R5;                /* and if that bit is set, we use Bank B,*/
-       R2 = CC;                /* else we use Bank A.*/
-       R2 <<= 23;              /* The Bank selection's at posn 23.*/
-
-bank_chosen:
-
-       /* We can also determine the sub-bank used, because this is
-        * taken from bits 13:12 of the address.
-        */
-
-       R3 = ((12<<8)|2);               /* Extraction pattern */
-       nop;                            /*Anamoly 05000209*/
-       R4 = EXTRACT(R0, R3.L) (Z);     /* Extract bits*/
-       /* Save in extraction pattern for later deposit.*/
-       R3.H = R4.L << 0;
-
-       /* So:
-        * R0 = Page start
-        * R1 = Page length (actually, offset into size/prefix tables)
-        * R2 = Bank select mask
-        * R3 = sub-bank deposit values
-        *
-        * The cache has 2 Ways, and 64 sets, so we iterate through
-        * the sets, accessing the tag for each Way, for our Bank and
-        * sub-bank, looking for dirty, valid tags that match our
-        * address prefix.
-        */
-
-       P5.L = (DTEST_COMMAND & 0xFFFF);
-       P5.H = (DTEST_COMMAND >> 16);
-       P4.L = (DTEST_DATA0 & 0xFFFF);
-       P4.H = (DTEST_DATA0 >> 16);
-
-       P0.L = page_prefix_table;
-       P0.H = page_prefix_table;
-       P1 = R1;
-       R5 = 0;                 /* Set counter*/
-       P0 = P1 + P0;
-       R4 = [P0];              /* This is the address prefix*/
-
-
-       /* We're reading (bit 1==0) the tag (bit 2==0), and we
-        * don't care about which double-word, since we're only
-        * fetching tags, so we only have to set Set, Bank,
-        * Sub-bank and Way.
-        */
-
-       P2 = 2;
-       LSETUP (fs1, fe1) LC1 = P2;
-fs1:   P0 = 64;                /* iterate over all sets*/
-       LSETUP (fs0, fe0) LC0 = P0;
-fs0:   R6 = R5 << 5;           /* Combine set*/
-       R6.H = R3.H << 0 ;      /* and sub-bank*/
-       R6 = R6 | R2;           /* and Bank. Leave Way==0 at first.*/
-       BITSET(R6,14);
-       [P5] = R6;              /* Issue Command*/
-       SSYNC;
-       R7 = [P4];              /* and read Tag.*/
-       CC = BITTST(R7, 0);     /* Check if valid*/
-       IF !CC JUMP fskip;      /* and skip if not.*/
-       CC = BITTST(R7, 1);     /* Check if dirty*/
-       IF !CC JUMP fskip;      /* and skip if not.*/
-
-       /* Compare against the page address. First, plant bits 13:12
-        * into the tag, since those aren't part of the returned data.
-        */
-
-       R7 = DEPOSIT(R7, R3);   /* set 13:12*/
-       R1 = R7 & R4;           /* Mask off lower bits*/
-       CC = R1 == R0;          /* Compare against page start.*/
-       IF !CC JUMP fskip;      /* Skip it if it doesn't match.*/
-
-       /* Tag address matches against page, so this is an entry
-        * we must flush.
-        */
-
-       R7 >>= 10;              /* Mask off the non-address bits*/
-       R7 <<= 10;
-       P3 = R7;
-       SSYNC;
-       FLUSHINV [P3];          /* And flush the entry*/
-fskip:
-fe0:   R5 += 1;                /* Advance to next Set*/
-fe1:   BITSET(R2, 26);         /* Go to next Way.*/
-
-dfinished:
-       SSYNC;                  /* Ensure the data gets out to mem.*/
-
-       /*Finished. Restore context.*/
-       LB1 = [SP++];
-       LT1 = [SP++];
-       LC1 = [SP++];
-       LB0 = [SP++];
-       LT0 = [SP++];
-       LC0 = [SP++];
-       ( R7:0, P5:0 ) = [SP++];
-       RTS;
-
-dflush_whole_page:
-
-       /* It's a 1K or 4K page, so quicker to just flush the
-        * entire page.
-        */
-
-       P1 = 32;                /* For 1K pages*/
-       P2 = P1 << 2;           /* For 4K pages*/
-       P0 = R0;                /* Start of page*/
-       CC = BITTST(R1, 16);    /* Whether 1K or 4K*/
-       IF CC P1 = P2;
-       P1 += -1;               /* Unroll one iteration*/
-       SSYNC;
-       FLUSHINV [P0++];        /* because CSYNC can't end loops.*/
-       LSETUP (eall, eall) LC0 = P1;
-eall:  FLUSHINV [P0++];
-       SSYNC;
-       JUMP dfinished;
-
-.align 4;
-page_prefix_table:
-.byte4         0xFFFFFC00;     /* 1K */
-.byte4 0xFFFFF000;     /* 4K */
-.byte4 0xFFF00000;     /* 1M */
-.byte4 0xFFC00000;     /* 4M */
-.page_prefix_table.end:
 
+++ /dev/null
-#define ASSEMBLY
-
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/mem_init.h>
-#include <asm/mach-common/bits/bootrom.h>
-#include <asm/mach-common/bits/ebiu.h>
-#include <asm/mach-common/bits/pll.h>
-#include <asm/mach-common/bits/uart.h>
-.global init_sdram;
-
-#if (CONFIG_CCLK_DIV == 1)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV1
-#endif
-#if (CONFIG_CCLK_DIV == 2)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV2
-#endif
-#if (CONFIG_CCLK_DIV == 4)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV4
-#endif
-#if (CONFIG_CCLK_DIV == 8)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV8
-#endif
-#ifndef CONFIG_CCLK_ACT_DIV
-#define CONFIG_CCLK_ACT_DIV   CONFIG_CCLK_DIV_not_defined_properly
-#endif
-
-init_sdram:
-       [--SP] = ASTAT;
-       [--SP] = RETS;
-       [--SP] = (R7:0);
-       [--SP] = (P5:0);
-
-#if (BFIN_BOOT_MODE == BF533_SPI_BOOT)
-       p0.h = hi(SPI_BAUD);
-       p0.l = lo(SPI_BAUD);
-       r0.l = CONFIG_SPI_BAUD;
-       w[p0] = r0.l;
-       SSYNC;
-#endif
-
-       /*
-        * PLL_LOCKCNT - how many SCLK Cycles to delay while PLL becomes stable
-        */
-       p0.h = hi(PLL_LOCKCNT);
-       p0.l = lo(PLL_LOCKCNT);
-       r0 = 0x300(Z);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * Put SDRAM in self-refresh, incase anything is running
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITSET (R0, 24);
-       [P2] = R0;
-       SSYNC;
-
-       /*
-        *  Set PLL_CTL with the value that we calculate in R0
-        *   - [14:09] = MSEL[5:0] : CLKIN / VCO multiplication factors
-        *   - [8]     = BYPASS    : BYPASS the PLL, run CLKIN into CCLK/SCLK
-        *   - [7]     = output delay (add 200ps of delay to mem signals)
-        *   - [6]     = input delay (add 200ps of input delay to mem signals)
-        *   - [5]     = PDWN      : 1=All Clocks off
-        *   - [3]     = STOPCK    : 1=Core Clock off
-        *   - [1]     = PLL_OFF   : 1=Disable Power to PLL
-        *   - [0]     = DF        : 1=Pass CLKIN/2 to PLL / 0=Pass CLKIN to PLL
-        *   all other bits set to zero
-        */
-
-       r0 = CONFIG_VCO_MULT & 63;      /* Load the VCO multiplier         */
-       r0 = r0 << 9;                   /* Shift it over,                  */
-       r1 = CONFIG_CLKIN_HALF;         /* Do we need to divide CLKIN by 2?*/
-       r0 = r1 | r0;
-       r1 = CONFIG_PLL_BYPASS;         /* Bypass the PLL?                 */
-       r1 = r1 << 8;                   /* Shift it over                   */
-       r0 = r1 | r0;                   /* add them all together           */
-
-       p0.h = hi(PLL_CTL);
-       p0.l = lo(PLL_CTL);             /* Load the address                */
-       cli r2;                         /* Disable interrupts              */
-       ssync;
-       w[p0] = r0.l;                   /* Set the value                   */
-       idle;                           /* Wait for the PLL to stablize    */
-       sti r2;                         /* Enable interrupts               */
-
-check_again:
-       p0.h = hi(PLL_STAT);
-       p0.l = lo(PLL_STAT);
-       R0 = W[P0](Z);
-       CC = BITTST(R0,5);
-       if ! CC jump check_again;
-
-       /* Configure SCLK & CCLK Dividers */
-       r0 = (CONFIG_CCLK_ACT_DIV | CONFIG_SCLK_DIV);
-       p0.h = hi(PLL_DIV);
-       p0.l = lo(PLL_DIV);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * We now are running at speed, time to set the Async mem bank wait states
-        * This will speed up execution, since we are normally running from FLASH.
-        */
-
-       p2.h = (EBIU_AMBCTL1 >> 16);
-       p2.l = (EBIU_AMBCTL1 & 0xFFFF);
-       r0.h = (AMBCTL1VAL >> 16);
-       r0.l = (AMBCTL1VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMBCTL0 >> 16);
-       p2.l = (EBIU_AMBCTL0 & 0xFFFF);
-       r0.h = (AMBCTL0VAL >> 16);
-       r0.l = (AMBCTL0VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMGCTL >> 16);
-       p2.l = (EBIU_AMGCTL & 0xffff);
-       r0 = AMGCTLVAL;
-       w[p2] = r0;
-       ssync;
-
-       /*
-        * Now, Initialize the SDRAM,
-        * start with the SDRAM Refresh Rate Control Register
-        */
-       p0.l = lo(EBIU_SDRRC);
-       p0.h = hi(EBIU_SDRRC);
-       r0 = mem_SDRRC;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Memory Bank Control Register - bank specific parameters
-        */
-       p0.l = (EBIU_SDBCTL & 0xFFFF);
-       p0.h = (EBIU_SDBCTL >> 16);
-       r0 = mem_SDBCTL;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Global Control Register - global programmable parameters
-        * Disable self-refresh
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITCLR (R0, 24);
-
-       /*
-        * Check if SDRAM is already powered up, if it is, enable self-refresh
-        */
-       p0.h = hi(EBIU_SDSTAT);
-       p0.l = lo(EBIU_SDSTAT);
-       r2.l = w[p0];
-       cc = bittst(r2,3);
-       if !cc jump skip;
-       NOP;
-       BITSET (R0, 23);
-skip:
-       [P2] = R0;
-       SSYNC;
-
-       /* Write in the new value in the register */
-       R0.L = lo(mem_SDGCTL);
-       R0.H = hi(mem_SDGCTL);
-       [P2] = R0;
-       SSYNC;
-       nop;
-
-       (P5:0) = [SP++];
-       (R7:0) = [SP++];
-       RETS   = [SP++];
-       ASTAT  = [SP++];
-       RTS;
 
+++ /dev/null
-#define ASSEMBLY
-
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/mem_init.h>
-#include <asm/mach-common/bits/bootrom.h>
-#include <asm/mach-common/bits/ebiu.h>
-#include <asm/mach-common/bits/pll.h>
-#include <asm/mach-common/bits/uart.h>
-.global init_sdram;
-
-#if (CONFIG_CCLK_DIV == 1)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV1
-#endif
-#if (CONFIG_CCLK_DIV == 2)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV2
-#endif
-#if (CONFIG_CCLK_DIV == 4)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV4
-#endif
-#if (CONFIG_CCLK_DIV == 8)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV8
-#endif
-#ifndef CONFIG_CCLK_ACT_DIV
-#define CONFIG_CCLK_ACT_DIV   CONFIG_CCLK_DIV_not_defined_properly
-#endif
-
-init_sdram:
-       [--SP] = ASTAT;
-       [--SP] = RETS;
-       [--SP] = (R7:0);
-       [--SP] = (P5:0);
-
-#if (BFIN_BOOT_MODE == BF533_SPI_BOOT)
-       p0.h = hi(SPI_BAUD);
-       p0.l = lo(SPI_BAUD);
-       r0.l = CONFIG_SPI_BAUD_INITBLOCK;
-       w[p0] = r0.l;
-       SSYNC;
-#endif
-
-       /*
-        * PLL_LOCKCNT - how many SCLK Cycles to delay while PLL becomes stable
-        */
-       p0.h = hi(PLL_LOCKCNT);
-       p0.l = lo(PLL_LOCKCNT);
-       r0 = 0x300(Z);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * Put SDRAM in self-refresh, incase anything is running
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITSET (R0, 24);
-       [P2] = R0;
-       SSYNC;
-
-       /*
-        *  Set PLL_CTL with the value that we calculate in R0
-        *   - [14:09] = MSEL[5:0] : CLKIN / VCO multiplication factors
-        *   - [8]     = BYPASS    : BYPASS the PLL, run CLKIN into CCLK/SCLK
-        *   - [7]     = output delay (add 200ps of delay to mem signals)
-        *   - [6]     = input delay (add 200ps of input delay to mem signals)
-        *   - [5]     = PDWN      : 1=All Clocks off
-        *   - [3]     = STOPCK    : 1=Core Clock off
-        *   - [1]     = PLL_OFF   : 1=Disable Power to PLL
-        *   - [0]     = DF        : 1=Pass CLKIN/2 to PLL / 0=Pass CLKIN to PLL
-        *   all other bits set to zero
-        */
-
-       r0 = CONFIG_VCO_MULT & 63;      /* Load the VCO multiplier         */
-       r0 = r0 << 9;                   /* Shift it over,                  */
-       r1 = CONFIG_CLKIN_HALF;         /* Do we need to divide CLKIN by 2?*/
-       r0 = r1 | r0;
-       r1 = CONFIG_PLL_BYPASS;         /* Bypass the PLL?                 */
-       r1 = r1 << 8;                   /* Shift it over                   */
-       r0 = r1 | r0;                   /* add them all together           */
-
-       p0.h = hi(PLL_CTL);
-       p0.l = lo(PLL_CTL);             /* Load the address                */
-       cli r2;                         /* Disable interrupts              */
-       ssync;
-       w[p0] = r0.l;                   /* Set the value                   */
-       idle;                           /* Wait for the PLL to stablize    */
-       sti r2;                         /* Enable interrupts               */
-
-check_again:
-       p0.h = hi(PLL_STAT);
-       p0.l = lo(PLL_STAT);
-       R0 = W[P0](Z);
-       CC = BITTST(R0,5);
-       if ! CC jump check_again;
-
-       /* Configure SCLK & CCLK Dividers */
-       r0 = (CONFIG_CCLK_ACT_DIV | CONFIG_SCLK_DIV);
-       p0.h = hi(PLL_DIV);
-       p0.l = lo(PLL_DIV);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * We now are running at speed, time to set the Async mem bank wait states
-        * This will speed up execution, since we are normally running from FLASH.
-        */
-
-       p2.h = (EBIU_AMBCTL1 >> 16);
-       p2.l = (EBIU_AMBCTL1 & 0xFFFF);
-       r0.h = (AMBCTL1VAL >> 16);
-       r0.l = (AMBCTL1VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMBCTL0 >> 16);
-       p2.l = (EBIU_AMBCTL0 & 0xFFFF);
-       r0.h = (AMBCTL0VAL >> 16);
-       r0.l = (AMBCTL0VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMGCTL >> 16);
-       p2.l = (EBIU_AMGCTL & 0xffff);
-       r0 = AMGCTLVAL;
-       w[p2] = r0;
-       ssync;
-
-       /*
-        * Now, Initialize the SDRAM,
-        * start with the SDRAM Refresh Rate Control Register
-        */
-       p0.l = lo(EBIU_SDRRC);
-       p0.h = hi(EBIU_SDRRC);
-       r0 = mem_SDRRC;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Memory Bank Control Register - bank specific parameters
-        */
-       p0.l = (EBIU_SDBCTL & 0xFFFF);
-       p0.h = (EBIU_SDBCTL >> 16);
-       r0 = mem_SDBCTL;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Global Control Register - global programmable parameters
-        * Disable self-refresh
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITCLR (R0, 24);
-
-       /*
-        * Check if SDRAM is already powered up, if it is, enable self-refresh
-        */
-       p0.h = hi(EBIU_SDSTAT);
-       p0.l = lo(EBIU_SDSTAT);
-       r2.l = w[p0];
-       cc = bittst(r2,3);
-       if !cc jump skip;
-       NOP;
-       BITSET (R0, 23);
-skip:
-       [P2] = R0;
-       SSYNC;
-
-       /* Write in the new value in the register */
-       R0.L = lo(mem_SDGCTL);
-       R0.H = hi(mem_SDGCTL);
-       [P2] = R0;
-       SSYNC;
-       nop;
-
-       (P5:0) = [SP++];
-       (R7:0) = [SP++];
-       RETS   = [SP++];
-       ASTAT  = [SP++];
-       RTS;
 
+++ /dev/null
-/*
- * U-boot - interrupt.S Processing of interrupts and exception handling
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * (C) Copyright 2000-2004
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * This file is based on interrupt.S
- *
- * Copyright (C) 2003  Metrowerks, Inc. <mwaddel@metrowerks.com>
- * Copyright (C) 2002  Arcturus Networks Ltd. Ted Ma <mated@sympatico.ca>
- * Copyright (C) 1998  D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>,
- *                     Kenneth Albanowski <kjahds@kjahds.com>,
- *                     The Silver Hammer Group, Ltd.
- *
- * (c) 1995, Dionne & Associates
- * (c) 1995, DKG Display Tech.
- *
- * This file is also based on exception.asm
- * (C) Copyright 2001-2005 - Analog Devices, Inc.  All rights reserved.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#define ASSEMBLY
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/entry.h>
-
-.global _blackfin_irq_panic;
-
-.text
-.align 2
-
-#ifndef CONFIG_KGDB
-.global _evt_emulation
-_evt_emulation:
-       SAVE_CONTEXT
-       r0 = 0;
-       r1 = seqstat;
-       sp += -12;
-       call _blackfin_irq_panic;
-       sp += 12;
-       rte;
-#endif
-
-.global _evt_nmi
-_evt_nmi:
-       SAVE_CONTEXT
-       r0 = 2;
-       r1 = RETN;
-       sp += -12;
-       call _blackfin_irq_panic;
-       sp += 12;
-
-_evt_nmi_exit:
-       rtn;
-
-.global _trap
-_trap:
-       SAVE_ALL_SYS
-       r0 = sp;        /* stack frame pt_regs pointer argument ==> r0 */
-       sp += -12;
-       call _trap_c
-       sp += 12;
-       RESTORE_ALL_SYS
-       rtx;
-
-.global _evt_rst
-_evt_rst:
-       SAVE_CONTEXT
-       r0 = 1;
-       r1 = RETN;
-       sp += -12;
-       call _do_reset;
-       sp += 12;
-
-_evt_rst_exit:
-       rtn;
-
-irq_panic:
-       r0 = 3;
-       r1 =  sp;
-       sp += -12;
-       call _blackfin_irq_panic;
-       sp += 12;
-
-.global _evt_ivhw
-_evt_ivhw:
-       SAVE_CONTEXT
-       RAISE 14;
-
-_evt_ivhw_exit:
-        rti;
-
-.global _evt_timer
-_evt_timer:
-       SAVE_CONTEXT
-       r0 = 6;
-       sp += -12;
-       /* Polling method used now. */
-       /* call timer_int; */
-       sp += 12;
-       RESTORE_CONTEXT
-       rti;
-       nop;
-
-.global _evt_evt7
-_evt_evt7:
-       SAVE_CONTEXT
-       r0 = 7;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt7_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt8
-_evt_evt8:
-       SAVE_CONTEXT
-       r0 = 8;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt8_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt9
-_evt_evt9:
-       SAVE_CONTEXT
-       r0 = 9;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt9_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt10
-_evt_evt10:
-       SAVE_CONTEXT
-       r0 = 10;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt10_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt11
-_evt_evt11:
-       SAVE_CONTEXT
-       r0 = 11;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt11_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt12
-_evt_evt12:
-       SAVE_CONTEXT
-       r0 = 12;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-evt_evt12_exit:
-        RESTORE_CONTEXT
-        rti;
-
-.global _evt_evt13
-_evt_evt13:
-       SAVE_CONTEXT
-       r0 = 13;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt13_exit:
-        RESTORE_CONTEXT
-        rti;
-
-.global _evt_system_call
-_evt_system_call:
-       [--sp] = r0;
-       [--SP] = RETI;
-       r0 = [sp++];
-       r0 += 2;
-       [--sp] = r0;
-       RETI = [SP++];
-       r0 = [SP++];
-       SAVE_CONTEXT
-       sp += -12;
-       call _exception_handle;
-       sp += 12;
-       RESTORE_CONTEXT
-       RTI;
-
-evt_system_call_exit:
-       rti;
-
-.global _evt_soft_int1
-_evt_soft_int1:
-       [--sp] = r0;
-       [--SP] = RETI;
-       r0 = [sp++];
-       r0 += 2;
-       [--sp] = r0;
-       RETI = [SP++];
-       r0 = [SP++];
-       SAVE_CONTEXT
-       sp += -12;
-       call _exception_handle;
-       sp += 12;
-       RESTORE_CONTEXT
-       RTI;
-
-evt_soft_int1_exit:
-       rti;
 
+++ /dev/null
-/*
- * U-boot - interrupts.c Interrupt related routines
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on interrupts.c
- * Copyright 1996 Roman Zippel
- * Copyright 1999 D. Jeff Dionne <jeff@uclinux.org>
- * Copyright 2000-2001 Lineo, Inc. D. Jefff Dionne <jeff@lineo.ca>
- * Copyright 2002 Arcturus Networks Inc. MaTed <mated@sympatico.ca>
- * Copyright 2003 Metrowerks/Motorola
- * Copyright 2003 Bas Vermeulen <bas@buyways.nl>,
- *                     BuyWays B.V. (www.buyways.nl)
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include "cpu.h"
-
-static ulong timestamp;
-static ulong last_time;
-static int int_flag;
-
-int irq_flags;                 /* needed by asm-blackfin/system.h */
-
-/* Functions just to satisfy the linker */
-
-/*
- * This function is derived from PowerPC code (read timebase as long long).
- * On BF533 it just returns the timer value.
- */
-unsigned long long get_ticks(void)
-{
-       return get_timer(0);
-}
-
-/*
- * This function is derived from PowerPC code (timebase clock frequency).
- * On BF533 it returns the number of timer ticks per second.
- */
-ulong get_tbclk(void)
-{
-       ulong tbclk;
-
-       tbclk = CFG_HZ;
-       return tbclk;
-}
-
-void enable_interrupts(void)
-{
-}
-
-int disable_interrupts(void)
-{
-       return 1;
-}
-
-int interrupt_init(void)
-{
-       return (0);
-}
-
-void udelay(unsigned long usec)
-{
-       unsigned long delay, start, stop;
-       unsigned long cclk;
-       cclk = (CONFIG_CCLK_HZ);
-
-       while (usec > 1) {
-               /*
-                * how many clock ticks to delay?
-                *  - request(in useconds) * clock_ticks(Hz) / useconds/second
-                */
-               if (usec < 1000) {
-                       delay = (usec * (cclk / 244)) >> 12;
-                       usec = 0;
-               } else {
-                       delay = (1000 * (cclk / 244)) >> 12;
-                       usec -= 1000;
-               }
-
-               asm volatile (" %0 = CYCLES;":"=r" (start));
-               do {
-                       asm volatile (" %0 = CYCLES; ":"=r" (stop));
-               } while (stop - start < delay);
-       }
-
-       return;
-}
-
-void timer_init(void)
-{
-       *pTCNTL = 0x1;
-       *pTSCALE = 0x0;
-       *pTCOUNT = MAX_TIM_LOAD;
-       *pTPERIOD = MAX_TIM_LOAD;
-       *pTCNTL = 0x7;
-       asm("CSYNC;");
-
-       timestamp = 0;
-       last_time = 0;
-}
-
-/* Any network command or flash
- * command is started get_timer shall
- * be called before TCOUNT gets reset,
- * to implement the accurate timeouts.
- *
- * How ever milliconds doesn't return
- * the number that has been elapsed from
- * the last reset.
- *
- *  As get_timer is used in the u-boot
- *  only for timeouts this should be
- *  sufficient
- */
-ulong get_timer(ulong base)
-{
-       ulong milisec;
-
-       /* Number of clocks elapsed */
-       ulong clocks = (MAX_TIM_LOAD - (*pTCOUNT));
-
-       /**
-        * Find if the TCOUNT is reset
-        * timestamp gives the number of times
-        * TCOUNT got reset
-        */
-       if (clocks < last_time)
-               timestamp++;
-       last_time = clocks;
-
-       /* Get the number of milliseconds */
-       milisec = clocks / (CONFIG_CCLK_HZ / 1000);
-
-       /**
-        * Find the number of millisonds
-        * that got elapsed before this TCOUNT cycle
-        */
-       milisec += timestamp * (MAX_TIM_LOAD / (CONFIG_CCLK_HZ / 1000));
-
-       return (milisec - base);
-}
 
+++ /dev/null
-/*
- * U-boot - ints.c Interrupt related routines
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on ints.c
- *
- * Apr18 2003, Changed by HuTao to support interrupt cascading for Blackfin
- *             drivers
- *
- * Copyright 1996 Roman Zippel
- * Copyright 1999 D. Jeff Dionne <jeff@uclinux.org>
- * Copyright 2000-2001 Lineo, Inc. D. Jefff Dionne <jeff@lineo.ca>
- * Copyright 2002 Arcturus Networks Inc. MaTed <mated@sympatico.ca>
- * Copyright 2003 Metrowerks/Motorola
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <linux/stddef.h>
-#include <asm/system.h>
-#include <asm/traps.h>
-#include <asm/io.h>
-#include <asm/errno.h>
-#include <asm/blackfin.h>
-#include "cpu.h"
-
-void blackfin_irq_panic(int reason, struct pt_regs *regs)
-{
-       printf("\n\nException: IRQ 0x%x entered\n", reason);
-       printf("code=[0x%x], ", (unsigned int)(regs->seqstat & 0x3f));
-       printf("stack frame=0x%x, ", (unsigned int)regs);
-       printf("bad PC=0x%04x\n", (unsigned int)regs->pc);
-       dump(regs);
-       printf("Unhandled IRQ or exceptions!\n");
-       printf("Please reset the board \n");
-}
-
-void blackfin_init_IRQ(void)
-{
-       *(unsigned volatile long *)(SIC_IMASK) = 0;
-#ifndef CONFIG_KGDB
-       *(unsigned volatile long *)(EVT1) = 0x0;
-#endif
-       *(unsigned volatile long *)(EVT2) =
-           (unsigned volatile long)evt_nmi;
-       *(unsigned volatile long *)(EVT3) =
-           (unsigned volatile long)trap;
-       *(unsigned volatile long *)(EVT5) =
-           (unsigned volatile long)evt_ivhw;
-       *(unsigned volatile long *)(EVT0) =
-           (unsigned volatile long)evt_rst;
-       *(unsigned volatile long *)(EVT6) =
-           (unsigned volatile long)evt_timer;
-       *(unsigned volatile long *)(EVT7) =
-           (unsigned volatile long)evt_evt7;
-       *(unsigned volatile long *)(EVT8) =
-           (unsigned volatile long)evt_evt8;
-       *(unsigned volatile long *)(EVT9) =
-           (unsigned volatile long)evt_evt9;
-       *(unsigned volatile long *)(EVT10) =
-           (unsigned volatile long)evt_evt10;
-       *(unsigned volatile long *)(EVT11) =
-           (unsigned volatile long)evt_evt11;
-       *(unsigned volatile long *)(EVT12) =
-           (unsigned volatile long)evt_evt12;
-       *(unsigned volatile long *)(EVT13) =
-           (unsigned volatile long)evt_evt13;
-       *(unsigned volatile long *)(EVT14) =
-           (unsigned volatile long)evt_system_call;
-       *(unsigned volatile long *)(EVT15) =
-           (unsigned volatile long)evt_soft_int1;
-       *(volatile unsigned long *)ILAT = 0;
-       asm("csync;");
-       *(volatile unsigned long *)IMASK = 0xffbf;
-       asm("csync;");
-}
-
-void exception_handle(void)
-{
-#if defined (CONFIG_PANIC_HANG)
-       display_excp();
-#else
-       udelay(100000);         /* allow messages to go out */
-       do_reset(NULL, 0, 0, NULL);
-#endif
-}
-
-void display_excp(void)
-{
-       printf("Exception!\n");
-}
 
+++ /dev/null
-/*
- * U-boot - serial.c Serial driver for BF533
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on
- * bf533_serial.c: Serial driver for BlackFin BF533 DSP internal UART.
- * Copyright (c) 2003  Bas Vermeulen <bas@buyways.nl>,
- *                     BuyWays B.V. (www.buyways.nl)
- *
- * Based heavily on blkfinserial.c
- * blkfinserial.c: Serial driver for BlackFin DSP internal USRTs.
- * Copyright(c) 2003   Metrowerks      <mwaddel@metrowerks.com>
- * Copyright(c)        2001    Tony Z. Kou     <tonyko@arcturusnetworks.com>
- * Copyright(c)        2001-2002 Arcturus Networks Inc. <www.arcturusnetworks.com>
- *
- * Based on code from 68328 version serial driver imlpementation which was:
- * Copyright (C) 1995       David S. Miller    <davem@caip.rutgers.edu>
- * Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com>
- * Copyright (C) 1998, 1999 D. Jeff Dionne     <jeff@uclinux.org>
- * Copyright (C) 1999       Vladimir Gurevich  <vgurevic@cisco.com>
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <asm/delay.h>
-#include <asm/io.h>
-#include "bf533_serial.h"
-#include <asm/mach-common/bits/uart.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-unsigned long pll_div_fact;
-
-void calc_baud(void)
-{
-       unsigned char i;
-       int temp;
-       u_long sclk = get_sclk();
-
-       for (i = 0; i < sizeof(baud_table) / sizeof(int); i++) {
-               temp = sclk / (baud_table[i] * 8);
-               if ((temp & 0x1) == 1) {
-                       temp++;
-               }
-               temp = temp / 2;
-               hw_baud_table[i].dl_high = (temp >> 8) & 0xFF;
-               hw_baud_table[i].dl_low = (temp) & 0xFF;
-       }
-}
-
-void serial_setbrg(void)
-{
-       int i;
-
-       calc_baud();
-
-       for (i = 0; i < sizeof(baud_table) / sizeof(int); i++) {
-               if (gd->baudrate == baud_table[i])
-                       break;
-       }
-
-       /* Enable UART */
-       *pUART_GCTL |= UCEN;
-       SSYNC();
-
-       /* Set DLAB in LCR to Access DLL and DLH */
-       ACCESS_LATCH;
-       SSYNC();
-
-       *pUART_DLL = hw_baud_table[i].dl_low;
-       SSYNC();
-       *pUART_DLH = hw_baud_table[i].dl_high;
-       SSYNC();
-
-       /* Clear DLAB in LCR to Access THR RBR IER */
-       ACCESS_PORT_IER;
-       SSYNC();
-
-       /* Enable  ERBFI and ELSI interrupts
-        * to poll SIC_ISR register*/
-       *pUART_IER = ELSI | ERBFI | ETBEI;
-       SSYNC();
-
-       /* Set LCR to Word Lengh 8-bit word select */
-       *pUART_LCR = WLS_8;
-       SSYNC();
-
-       return;
-}
-
-int serial_init(void)
-{
-       serial_setbrg();
-       return (0);
-}
-
-void serial_putc(const char c)
-{
-       if ((*pUART_LSR) & TEMT) {
-               if (c == '\n')
-                       serial_putc('\r');
-
-               local_put_char(c);
-       }
-
-       while (!((*pUART_LSR) & TEMT))
-               SYNC_ALL;
-
-       return;
-}
-
-int serial_tstc(void)
-{
-       if (*pUART_LSR & DR)
-               return 1;
-       else
-               return 0;
-}
-
-int serial_getc(void)
-{
-       unsigned short uart_lsr_val, uart_rbr_val;
-       unsigned long isr_val;
-       int ret;
-
-       /* Poll for RX Interrupt */
-       while (!serial_tstc())
-               continue;
-       asm("csync;");
-
-       uart_lsr_val = *pUART_LSR;      /* Clear status bit */
-       uart_rbr_val = *pUART_RBR;      /* getc() */
-
-       if (uart_lsr_val & (OE|PE|FE|BI)) {
-               ret = -1;
-       } else {
-               ret = uart_rbr_val & 0xff;
-       }
-
-       return ret;
-}
-
-void serial_puts(const char *s)
-{
-       while (*s) {
-               serial_putc(*s++);
-       }
-}
-
-static void local_put_char(char ch)
-{
-       int flags = 0;
-       unsigned long isr_val;
-
-       /* Poll for TX Interruput */
-       while (!(*pUART_LSR & THRE))
-               continue;
-       asm("csync;");
-
-       *pUART_THR = ch;        /* putc() */
-
-       return;
-}
 
+++ /dev/null
-/*
- * U-boot - start.S Startup file of u-boot for BF533/BF561
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on head.S
- * Copyright (c) 2003  Metrowerks/Motorola
- * Copyright (C) 1998  D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>,
- *                     Kenneth Albanowski <kjahds@kjahds.com>,
- *                     The Silver Hammer Group, Ltd.
- * (c) 1995, Dionne & Associates
- * (c) 1995, DKG Display Tech.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-/*
- * Note: A change in this file subsequently requires a change in
- *       board/$(board_name)/config.mk for a valid u-boot.bin
- */
-
-#define ASSEMBLY
-
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-
-#include <asm/mach-common/bits/core.h>
-#include <asm/mach-common/bits/dma.h>
-#include <asm/mach-common/bits/pll.h>
-
-.global _stext;
-.global __bss_start;
-.global start;
-.global _start;
-.global edata;
-.global _exit;
-.global init_sdram;
-
-#if (CONFIG_CCLK_DIV == 1)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV1
-#endif
-#if (CONFIG_CCLK_DIV == 2)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV2
-#endif
-#if (CONFIG_CCLK_DIV == 4)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV4
-#endif
-#if (CONFIG_CCLK_DIV == 8)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV8
-#endif
-#ifndef CONFIG_CCLK_ACT_DIV
-#define CONFIG_CCLK_ACT_DIV   CONFIG_CCLK_DIV_not_defined_properly
-#endif
-
-.text
-_start:
-start:
-_stext:
-
-       R0 = 0x32;
-       SYSCFG = R0;
-       SSYNC;
-
-       /* As per HW reference manual DAG registers,
-        * DATA and Address resgister shall be zero'd
-        * in initialization, after a reset state
-        */
-       r1 = 0; /* Data registers zero'd */
-       r2 = 0;
-       r3 = 0;
-       r4 = 0;
-       r5 = 0;
-       r6 = 0;
-       r7 = 0;
-
-       p0 = 0; /* Address registers zero'd */
-       p1 = 0;
-       p2 = 0;
-       p3 = 0;
-       p4 = 0;
-       p5 = 0;
-
-       i0 = 0; /* DAG Registers zero'd */
-       i1 = 0;
-       i2 = 0;
-       i3 = 0;
-       m0 = 0;
-       m1 = 0;
-       m3 = 0;
-       m3 = 0;
-       l0 = 0;
-       l1 = 0;
-       l2 = 0;
-       l3 = 0;
-       b0 = 0;
-       b1 = 0;
-       b2 = 0;
-       b3 = 0;
-
-       /* Set loop counters to zero, to make sure that
-        * hw loops are disabled.
-        */
-       r0  = 0;
-       lc0 = r0;
-       lc1 = r0;
-
-       SSYNC;
-
-       /* Check soft reset status */
-       p0.h = SWRST >> 16;
-       p0.l = SWRST & 0xFFFF;
-       r0.l = w[p0];
-
-       cc = bittst(r0, 15);
-       if !cc jump no_soft_reset;
-
-       /* Clear Soft reset */
-       r0 = 0x0000;
-       w[p0] = r0;
-       ssync;
-
-no_soft_reset:
-       nop;
-
-       /* Clear EVT registers */
-       p0.h = (EVT0 >> 16);
-       p0.l = (EVT0 & 0xFFFF);
-       p0 += 8;
-       p1 = 14;
-       r1 = 0;
-       LSETUP(4,4) lc0 = p1;
-       [ p0 ++ ] = r1;
-
-       p0.h = hi(SIC_IWR);
-       p0.l = lo(SIC_IWR);
-       r0.l = 0x1;
-       w[p0] = r0.l;
-       SSYNC;
-
-       sp.l = (0xffb01000 & 0xFFFF);
-       sp.h = (0xffb01000 >> 16);
-
-       call init_sdram;
-
-       /* relocate into to RAM */
-       call get_pc;
-offset:
-       r2.l = offset;
-       r2.h = offset;
-       r3.l = start;
-       r3.h = start;
-       r1 = r2 - r3;
-
-       r0 = r0 - r1;
-       p1 = r0;
-
-       p2.l = (CFG_MONITOR_BASE & 0xffff);
-       p2.h = (CFG_MONITOR_BASE >> 16);
-
-       p3 = 0x04;
-       p4.l = ((CFG_MONITOR_BASE + CFG_MONITOR_LEN) & 0xffff);
-       p4.h = ((CFG_MONITOR_BASE + CFG_MONITOR_LEN) >> 16);
-loop1:
-       r1 = [p1 ++ p3];
-       [p2 ++ p3] = r1;
-       cc=p2==p4;
-       if !cc jump loop1;
-       /*
-        * configure STACK
-        */
-       r0.h = (CONFIG_STACKBASE >> 16);
-       r0.l = (CONFIG_STACKBASE & 0xFFFF);
-       sp = r0;
-       fp = sp;
-
-       /*
-        * This next section keeps the processor in supervisor mode
-        * during kernel boot.  Switches to user mode at end of boot.
-        * See page 3-9 of Hardware Reference manual for documentation.
-        */
-
-       /* To keep ourselves in the supervisor mode */
-       p0.l = (EVT15 & 0xFFFF);
-       p0.h = (EVT15 >> 16);
-
-       p1.l = _real_start;
-       p1.h = _real_start;
-       [p0] = p1;
-
-       p0.l = (IMASK & 0xFFFF);
-       p0.h = (IMASK >> 16);
-       r0.l = LO(EVT_IVG15);
-       r0.h = HI(EVT_IVG15);
-       [p0] = r0;
-       raise 15;
-       p0.l = WAIT_HERE;
-       p0.h = WAIT_HERE;
-       reti = p0;
-       rti;
-
-WAIT_HERE:
-       jump WAIT_HERE;
-
-.global _real_start;
-_real_start:
-       [ -- sp ] = reti;
-
-       /* DMA reset code to Hi of L1 SRAM */
-copy:
-       /* P1 Points to the beginning of SYSTEM MMR Space */
-       P1.H = hi(SYSMMR_BASE);
-       P1.L = lo(SYSMMR_BASE);
-
-       R0.H = reset_start;     /* Source Address (high) */
-       R0.L = reset_start;     /* Source Address (low) */
-       R1.H = reset_end;
-       R1.L = reset_end;
-       R2 = R1 - R0;           /* Count */
-       R1.H = hi(L1_INST_SRAM);        /* Destination Address (high) */
-       R1.L = lo(L1_INST_SRAM);        /* Destination Address (low) */
-       R3.L = DMAEN;           /* Source DMAConfig Value (8-bit words) */
-       /* Destination DMAConfig Value (8-bit words) */
-       R4.L = (DI_EN | WNR | DMAEN);
-
-DMA:
-       R6 = 0x1 (Z);
-       W[P1+OFFSET_(MDMA_S0_X_MODIFY)] = R6;   /* Source Modify = 1 */
-       W[P1+OFFSET_(MDMA_D0_X_MODIFY)] = R6;   /* Destination Modify = 1 */
-
-       [P1+OFFSET_(MDMA_S0_START_ADDR)] = R0;  /* Set Source Base Address */
-       W[P1+OFFSET_(MDMA_S0_X_COUNT)] = R2;    /* Set Source Count */
-       /* Set Source  DMAConfig = DMA Enable,
-       Memory Read,  8-Bit Transfers, 1-D DMA, Flow - Stop */
-       W[P1+OFFSET_(MDMA_S0_CONFIG)] = R3;
-
-       /* Set Destination Base Address */
-       [P1+OFFSET_(MDMA_D0_START_ADDR)] = R1;
-       W[P1+OFFSET_(MDMA_D0_X_COUNT)] = R2;    /* Set Destination Count */
-       /* Set Destination DMAConfig = DMA Enable,
-       Memory Write, 8-Bit Transfers, 1-D DMA, Flow - Stop, IOC */
-       W[P1+OFFSET_(MDMA_D0_CONFIG)] = R4;
-
-WAIT_DMA_DONE:
-       p0.h = hi(MDMA_D0_IRQ_STATUS);
-       p0.l = lo(MDMA_D0_IRQ_STATUS);
-       R0 = W[P0](Z);
-       CC = BITTST(R0, 0);
-       if ! CC jump WAIT_DMA_DONE
-
-       R0 = 0x1;
-
-       /* Write 1 to clear DMA interrupt */
-       W[P1+OFFSET_(MDMA_D0_IRQ_STATUS)] = R0;
-
-       /* Initialize BSS Section with 0 s */
-       p1.l = __bss_start;
-       p1.h = __bss_start;
-       p2.l = _end;
-       p2.h = _end;
-       r1 = p1;
-       r2 = p2;
-       r3 = r2 - r1;
-       r3 = r3 >> 2;
-       p3 = r3;
-       lsetup (_clear_bss, _clear_bss_end ) lc1 = p3;
-       CC = p2<=p1;
-       if CC jump _clear_bss_skip;
-       r0 = 0;
-_clear_bss:
-_clear_bss_end:
-       [p1++] = r0;
-_clear_bss_skip:
-
-       p0.l = _start1;
-       p0.h = _start1;
-       jump (p0);
-
-reset_start:
-       p0.h = WDOG_CNT >> 16;
-       p0.l = WDOG_CNT & 0xffff;
-       r0 = 0x0010;
-       w[p0] = r0;
-       p0.h = WDOG_CTL >> 16;
-       p0.l = WDOG_CTL & 0xffff;
-       r0 = 0x0000;
-       w[p0] = r0;
-reset_wait:
-       jump reset_wait;
-
-reset_end: nop;
-
-_exit:
-       jump.s  _exit;
-get_pc:
-       r0 = rets;
-       rts;
 
+++ /dev/null
-/*
- * U-boot - start1.S Code running out of RAM after relocation
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#define ASSEMBLY
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-
-.global        start1;
-.global        _start1;
-
-.text
-_start1:
-start1:
-       sp += -12;
-       call    _board_init_f;
-       sp += 12;
 
+++ /dev/null
-/*
- * U-boot - traps.c Routines related to interrupts and exceptions
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on
- * No original Copyright holder listed,
- * Probabily original (C) Roman Zippel (assigned DJD, 1999)
- *
- * Copyright 2003 Metrowerks - for Blackfin
- * Copyright 2000-2001 Lineo, Inc. D. Jeff Dionne <jeff@lineo.ca>
- * Copyright 1999-2000 D. Jeff Dionne, <jeff@uclinux.org>
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <linux/types.h>
-#include <asm/errno.h>
-#include <asm/system.h>
-#include <asm/traps.h>
-#include "cpu.h"
-#include <asm/cplb.h>
-#include <asm/io.h>
-#include <asm/mach-common/bits/core.h>
-#include <asm/mach-common/bits/mpu.h>
-
-void init_IRQ(void)
-{
-       blackfin_init_IRQ();
-       return;
-}
-
-void process_int(unsigned long vec, struct pt_regs *fp)
-{
-       printf("interrupt\n");
-       return;
-}
-
-extern unsigned int icplb_table[page_descriptor_table_size][2];
-extern unsigned int dcplb_table[page_descriptor_table_size][2];
-
-unsigned long last_cplb_fault_retx;
-
-static unsigned int cplb_sizes[4] =
-    { 1024, 4 * 1024, 1024 * 1024, 4 * 1024 * 1024 };
-
-void trap_c(struct pt_regs *regs)
-{
-       unsigned int addr;
-       unsigned long trapnr = (regs->seqstat) & EXCAUSE;
-       unsigned int i, j, size, *I0, *I1;
-       unsigned short data = 0;
-
-       switch (trapnr) {
-       /* 0x26 - Data CPLB Miss */
-       case VEC_CPLB_M:
-
-#if ANOMALY_05000261
-               /*
-                * Work around an anomaly: if we see a new DCPLB fault,
-                * return without doing anything. Then,
-                * if we get the same fault again, handle it.
-                */
-               addr = last_cplb_fault_retx;
-               last_cplb_fault_retx = regs->retx;
-               printf("this time, curr = 0x%08x last = 0x%08x\n",
-                      addr, last_cplb_fault_retx);
-               if (addr != last_cplb_fault_retx)
-                       goto trap_c_return;
-#endif
-               data = 1;
-
-       case VEC_CPLB_I_M:
-
-               if (data) {
-                       addr = *(unsigned int *)pDCPLB_FAULT_ADDR;
-               } else {
-                       addr = *(unsigned int *)pICPLB_FAULT_ADDR;
-               }
-               for (i = 0; i < page_descriptor_table_size; i++) {
-                       if (data) {
-                               size = cplb_sizes[dcplb_table[i][1] >> 16];
-                               j = dcplb_table[i][0];
-                       } else {
-                               size = cplb_sizes[icplb_table[i][1] >> 16];
-                               j = icplb_table[i][0];
-                       }
-                       if ((j <= addr) && ((j + size) > addr)) {
-                               debug("found %i 0x%08x\n", i, j);
-                               break;
-                       }
-               }
-               if (i == page_descriptor_table_size) {
-                       printf("something is really wrong\n");
-                       do_reset(NULL, 0, 0, NULL);
-               }
-
-               /* Turn the cache off */
-               if (data) {
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)DMEM_CONTROL &=
-                           ~(ACACHE_BCACHE | ENDCPLB | PORT_PREF0);
-                       SSYNC();
-               } else {
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)IMEM_CONTROL &= ~(IMC | ENICPLB);
-                       SSYNC();
-               }
-
-               if (data) {
-                       I0 = (unsigned int *)DCPLB_ADDR0;
-                       I1 = (unsigned int *)DCPLB_DATA0;
-               } else {
-                       I0 = (unsigned int *)ICPLB_ADDR0;
-                       I1 = (unsigned int *)ICPLB_DATA0;
-               }
-
-               j = 0;
-               while (*I1 & CPLB_LOCK) {
-                       debug("skipping %i %08p - %08x\n", j, I1, *I1);
-                       *I0++;
-                       *I1++;
-                       j++;
-               }
-
-               debug("remove %i 0x%08x  0x%08x\n", j, *I0, *I1);
-
-               for (; j < 15; j++) {
-                       debug("replace %i 0x%08x  0x%08x\n", j, I0, I0 + 1);
-                       *I0++ = *(I0 + 1);
-                       *I1++ = *(I1 + 1);
-               }
-
-               if (data) {
-                       *I0 = dcplb_table[i][0];
-                       *I1 = dcplb_table[i][1];
-                       I0 = (unsigned int *)DCPLB_ADDR0;
-                       I1 = (unsigned int *)DCPLB_DATA0;
-               } else {
-                       *I0 = icplb_table[i][0];
-                       *I1 = icplb_table[i][1];
-                       I0 = (unsigned int *)ICPLB_ADDR0;
-                       I1 = (unsigned int *)ICPLB_DATA0;
-               }
-
-               for (j = 0; j < 16; j++) {
-                       debug("%i 0x%08x  0x%08x\n", j, *I0++, *I1++);
-               }
-
-               /* Turn the cache back on */
-               if (data) {
-                       j = *(unsigned int *)DMEM_CONTROL;
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)DMEM_CONTROL =
-                           ACACHE_BCACHE | ENDCPLB | PORT_PREF0 | j;
-                       SSYNC();
-               } else {
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)IMEM_CONTROL = IMC | ENICPLB;
-                       SSYNC();
-               }
-
-               break;
-       default:
-               /* All traps come here */
-               printf("code=[0x%x], ", (unsigned int)(regs->seqstat & 0x3f));
-               printf("stack frame=0x%x, ", (unsigned int)regs);
-               printf("bad PC=0x%04x\n", (unsigned int)regs->pc);
-               dump(regs);
-               printf("\n\n");
-
-               printf("Unhandled IRQ or exceptions!\n");
-               printf("Please reset the board \n");
-               do_reset(NULL, 0, 0, NULL);
-       }
-
-       return;
-
-}
-
-void dump(struct pt_regs *fp)
-{
-       debug("RETE:  %08lx  RETN: %08lx  RETX: %08lx  RETS: %08lx\n",
-                fp->rete, fp->retn, fp->retx, fp->rets);
-       debug("IPEND: %04lx  SYSCFG: %04lx\n", fp->ipend, fp->syscfg);
-       debug("SEQSTAT: %08lx    SP: %08lx\n", (long)fp->seqstat, (long)fp);
-       debug("R0: %08lx    R1: %08lx    R2: %08lx    R3: %08lx\n",
-                fp->r0, fp->r1, fp->r2, fp->r3);
-       debug("R4: %08lx    R5: %08lx    R6: %08lx    R7: %08lx\n",
-                fp->r4, fp->r5, fp->r6, fp->r7);
-       debug("P0: %08lx    P1: %08lx    P2: %08lx    P3: %08lx\n",
-                fp->p0, fp->p1, fp->p2, fp->p3);
-       debug("P4: %08lx    P5: %08lx    FP: %08lx\n",
-                fp->p4, fp->p5, fp->fp);
-       debug("A0.w: %08lx    A0.x: %08lx    A1.w: %08lx    A1.x: %08lx\n",
-                fp->a0w, fp->a0x, fp->a1w, fp->a1x);
-
-       debug("LB0: %08lx  LT0: %08lx  LC0: %08lx\n",
-                fp->lb0, fp->lt0, fp->lc0);
-       debug("LB1: %08lx  LT1: %08lx  LC1: %08lx\n",
-                fp->lb1, fp->lt1, fp->lc1);
-       debug("B0: %08lx  L0: %08lx  M0: %08lx  I0: %08lx\n",
-                fp->b0, fp->l0, fp->m0, fp->i0);
-       debug("B1: %08lx  L1: %08lx  M1: %08lx  I1: %08lx\n",
-                fp->b1, fp->l1, fp->m1, fp->i1);
-       debug("B2: %08lx  L2: %08lx  M2: %08lx  I2: %08lx\n",
-                fp->b2, fp->l2, fp->m2, fp->i2);
-       debug("B3: %08lx  L3: %08lx  M3: %08lx  I3: %08lx\n",
-                fp->b3, fp->l3, fp->m3, fp->i3);
-
-       debug("DCPLB_FAULT_ADDR=%p\n", *pDCPLB_FAULT_ADDR);
-       debug("ICPLB_FAULT_ADDR=%p\n", *pICPLB_FAULT_ADDR);
-
-}
 
+++ /dev/null
-/*
- * (C) Copyright 2000
- * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
- * (C) Copyright 2002
- * Wolfgang Denk, wd@denx.de
- * (C) Copyright 2006
- * Aubrey Li, aubrey.li@analog.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
- */
-
-#include <stdarg.h>
-#include <common.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <i2c.h>
-#include <linux/types.h>
-#include <devices.h>
-
-#ifdef CONFIG_VIDEO
-#define NTSC_FRAME_ADDR 0x06000000
-#include "video.h"
-
-/* NTSC OUTPUT SIZE  720 * 240 */
-#define VERTICAL       2
-#define HORIZONTAL     4
-
-int is_vblank_line(const int line)
-{
-       /*
-        *  This array contains a single bit for each line in
-        *  an NTSC frame.
-        */
-       if ((line <= 18) || (line >= 264 && line <= 281) || (line == 528))
-               return true;
-
-       return false;
-}
-
-int NTSC_framebuffer_init(char *base_address)
-{
-       const int NTSC_frames = 1;
-       const int NTSC_lines = 525;
-       char *dest = base_address;
-       int frame_num, line_num;
-
-       for (frame_num = 0; frame_num < NTSC_frames; ++frame_num) {
-               for (line_num = 1; line_num <= NTSC_lines; ++line_num) {
-                       unsigned int code;
-                       int offset = 0;
-                       int i;
-
-                       if (is_vblank_line(line_num))
-                               offset++;
-
-                       if (line_num > 266 || line_num < 3)
-                               offset += 2;
-
-                       /* Output EAV code */
-                       code = SystemCodeMap[offset].EAV;
-                       write_dest_byte((char)(code >> 24) & 0xff);
-                       write_dest_byte((char)(code >> 16) & 0xff);
-                       write_dest_byte((char)(code >> 8) & 0xff);
-                       write_dest_byte((char)(code) & 0xff);
-
-                       /* Output horizontal blanking */
-                       for (i = 0; i < 67 * 2; ++i) {
-                               write_dest_byte(0x80);
-                               write_dest_byte(0x10);
-                       }
-
-                       /* Output SAV */
-                       code = SystemCodeMap[offset].SAV;
-                       write_dest_byte((char)(code >> 24) & 0xff);
-                       write_dest_byte((char)(code >> 16) & 0xff);
-                       write_dest_byte((char)(code >> 8) & 0xff);
-                       write_dest_byte((char)(code) & 0xff);
-
-                       /* Output empty horizontal data */
-                       for (i = 0; i < 360 * 2; ++i) {
-                               write_dest_byte(0x80);
-                               write_dest_byte(0x10);
-                       }
-               }
-       }
-
-       return dest - base_address;
-}
-
-void fill_frame(char *Frame, int Value)
-{
-       int *OddPtr32;
-       int OddLine;
-       int *EvenPtr32;
-       int EvenLine;
-       int i;
-       int *data;
-       int m, n;
-
-       /* fill odd and even frames */
-       for (OddLine = 22, EvenLine = 285; OddLine < 263; OddLine++, EvenLine++) {
-               OddPtr32 = (int *)((Frame + (OddLine * 1716)) + 276);
-               EvenPtr32 = (int *)((Frame + (EvenLine * 1716)) + 276);
-               for (i = 0; i < 360; i++, OddPtr32++, EvenPtr32++) {
-                       *OddPtr32 = Value;
-                       *EvenPtr32 = Value;
-               }
-       }
-
-       for (m = 0; m < VERTICAL; m++) {
-               data = (int *)u_boot_logo.data;
-               for (OddLine = (22 + m), EvenLine = (285 + m);
-                    OddLine < (u_boot_logo.height * VERTICAL) + (22 + m);
-                    OddLine += VERTICAL, EvenLine += VERTICAL) {
-                       OddPtr32 = (int *)((Frame + ((OddLine) * 1716)) + 276);
-                       EvenPtr32 =
-                           (int *)((Frame + ((EvenLine) * 1716)) + 276);
-                       for (i = 0; i < u_boot_logo.width / 2; i++) {
-                               /* enlarge one pixel to m x n */
-                               for (n = 0; n < HORIZONTAL; n++) {
-                                       *OddPtr32++ = *data;
-                                       *EvenPtr32++ = *data;
-                               }
-                               data++;
-                       }
-               }
-       }
-}
-
-void video_putc(const char c)
-{
-}
-
-void video_puts(const char *s)
-{
-}
-
-static int video_init(void)
-{
-       char *NTSCFrame;
-       NTSCFrame = (char *)NTSC_FRAME_ADDR;
-       NTSC_framebuffer_init(NTSCFrame);
-       fill_frame(NTSCFrame, BLUE);
-
-       *pPPI_CONTROL = 0x0082;
-       *pPPI_FRAME = 0x020D;
-
-       *pDMA0_START_ADDR = NTSCFrame;
-       *pDMA0_X_COUNT = 0x035A;
-       *pDMA0_X_MODIFY = 0x0002;
-       *pDMA0_Y_COUNT = 0x020D;
-       *pDMA0_Y_MODIFY = 0x0002;
-       *pDMA0_CONFIG = 0x1015;
-       *pPPI_CONTROL = 0x0083;
-       return 0;
-}
-
-int drv_video_init(void)
-{
-       int error, devices = 1;
-
-       device_t videodev;
-
-       video_init();           /* Video initialization */
-
-       memset(&videodev, 0, sizeof(videodev));
-
-       strcpy(videodev.name, "video");
-       videodev.ext = DEV_EXT_VIDEO;   /* Video extensions */
-       videodev.flags = DEV_FLAGS_OUTPUT;      /* Output only */
-       videodev.putc = video_putc;     /* 'putc' function */
-       videodev.puts = video_puts;     /* 'puts' function */
-
-       error = device_register(&videodev);
-
-       return (error == 0) ? devices : error;
-}
-#endif
 
+++ /dev/null
-#include <video_logo.h>
-#define write_dest_byte(val) {*dest++=val;}
-#define BLACK   (0x01800180)   /* black pixel pattern  */
-#define BLUE    (0x296E29F0)   /* blue pixel pattern   */
-#define RED     (0x51F0515A)   /* red pixel pattern    */
-#define MAGENTA (0x6ADE6ACA)   /* magenta pixel pattern */
-#define GREEN   (0x91229136)   /* green pixel pattern  */
-#define CYAN    (0xAA10AAA6)   /* cyan pixel pattern   */
-#define YELLOW  (0xD292D210)   /* yellow pixel pattern */
-#define WHITE   (0xFE80FE80)   /* white pixel pattern  */
-
-#define true   1
-#define false  0
-
-typedef struct {
-       unsigned int SAV;
-       unsigned int EAV;
-} SystemCodeType;
-
-const SystemCodeType SystemCodeMap[4] = {
-       {0xFF000080, 0xFF00009D},
-       {0xFF0000AB, 0xFF0000B6},
-       {0xFF0000C7, 0xFF0000DA},
-       {0xFF0000EC, 0xFF0000F1}
-};
 
+++ /dev/null
-# U-boot - Makefile
-#
-# Copyright (c) 2005-2007 Analog Devices Inc.
-#
-# (C) Copyright 2000-2004
-# 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., 51 Franklin St, Fifth Floor, Boston,
-# MA 02110-1301 USA
-#
-
-include $(TOPDIR)/config.mk
-
-LIB    = $(obj)lib$(CPU).a
-
-SOBJS  = start.o start1.o interrupt.o cache.o flush.o init_sdram.o
-COBJS  = cpu.o traps.o ints.o serial.o interrupts.o video.o i2c.o
-
-EXTRA = init_sdram_bootrom_initblock.o
-
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
-START  := $(addprefix $(obj),$(START))
-
-all:   $(obj).depend $(START) $(LIB) $(obj).depend $(EXTRA)
-
-$(LIB):        $(OBJS)
-       $(AR) $(ARFLAGS) $@ $(OBJS)
-
-#########################################################################
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
 
+++ /dev/null
-#define ASSEMBLY
-#include <asm/linkage.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/mach-common/bits/mpu.h>
-
-.text
-.align 2
-ENTRY(_blackfin_icache_flush_range)
-       R2 = -32;
-       R2 = R0 & R2;
-       P0 = R2;
-       P1 = R1;
-       CSYNC;
-       1:
-       IFLUSH[P0++];
-       CC = P0 < P1(iu);
-       IF CC JUMP 1b(bp);
-       IFLUSH[P0];
-       SSYNC;
-       RTS;
-
-ENTRY(_blackfin_dcache_flush_range)
-       R2 = -32;
-       R2 = R0 & R2;
-       P0 = R2;
-       P1 = R1;
-       CSYNC;
-1:
-       FLUSH[P0++];
-       CC = P0 < P1(iu);
-       IF CC JUMP 1b(bp);
-       FLUSH[P0];
-       SSYNC;
-       RTS;
-
-ENTRY(_icache_invalidate)
-ENTRY(_invalidate_entire_icache)
-       [--SP] = (R7:5);
-
-       P0.L = (IMEM_CONTROL & 0xFFFF);
-       P0.H = (IMEM_CONTROL >> 16);
-       R7 =[P0];
-
-       /*
-        * Clear the IMC bit , All valid bits in the instruction
-        * cache are set to the invalid state
-        */
-       BITCLR(R7, IMC_P);
-       CLI R6;
-       /* SSYNC required before invalidating cache. */
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-
-       /* Configures the instruction cache agian */
-       R6 = (IMC | ENICPLB);
-       R7 = R7 | R6;
-
-       CLI R6;
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-
-       (R7:5) =[SP++];
-       RTS;
-
-/*
- * Invalidate the Entire Data cache by
- * clearing DMC[1:0] bits
- */
-ENTRY(_invalidate_entire_dcache)
-ENTRY(_dcache_invalidate)
-       [--SP] = (R7:6);
-
-       P0.L = (DMEM_CONTROL & 0xFFFF);
-       P0.H = (DMEM_CONTROL >> 16);
-       R7 =[P0];
-
-       /*
-        * Clear the DMC[1:0] bits, All valid bits in the data
-        * cache are set to the invalid state
-        */
-       BITCLR(R7, DMC0_P);
-       BITCLR(R7, DMC1_P);
-       CLI R6;
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-       /* Configures the data cache again */
-
-       R6 = (ACACHE_BCACHE | ENDCPLB | PORT_PREF0);
-       R7 = R7 | R6;
-
-       CLI R6;
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-
-       (R7:6) =[SP++];
-       RTS;
-
-ENTRY(_blackfin_dcache_invalidate_range)
-       R2 = -32;
-       R2 = R0 & R2;
-       P0 = R2;
-       P1 = R1;
-       CSYNC;
-1:
-       FLUSHINV[P0++];
-       CC = P0 < P1(iu);
-       IF CC JUMP 1b(bp);
-
-       /*
-        * If the data crosses a cache line, then we'll be pointing to
-        * the last cache line, but won't have flushed/invalidated it yet, so do
-        * one more.
-        */
-       FLUSHINV[P0];
-       SSYNC;
-       RTS;
 
+++ /dev/null
-# U-boot - config.mk
-#
-# Copyright (c) 2005-2007 Analog Devices Inc.
-#
-# (C) Copyright 2000-2004
-# 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., 51 Franklin St, Fifth Floor, Boston,
-# MA 02110-1301 USA
-#
-
-PLATFORM_RELFLAGS += -mcpu=bf537
 
+++ /dev/null
-/*
- * U-boot - cpu.c CPU specific functions
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <asm/blackfin.h>
-#include <command.h>
-#include <asm/entry.h>
-#include <asm/cplb.h>
-#include <asm/io.h>
-
-#define CACHE_ON 1
-#define CACHE_OFF 0
-
-extern unsigned int icplb_table[page_descriptor_table_size][2];
-extern unsigned int dcplb_table[page_descriptor_table_size][2];
-
-int do_reset(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
-{
-       __asm__ __volatile__("cli r3;" "P0 = %0;" "JUMP (P0);"::"r"(L1_INST_SRAM)
-           );
-
-       return 0;
-}
-
-/* These functions are just used to satisfy the linker */
-int cpu_init(void)
-{
-       return 0;
-}
-
-int cleanup_before_linux(void)
-{
-       return 0;
-}
-
-void icache_enable(void)
-{
-       unsigned int *I0, *I1;
-       int i, j = 0;
-
-       if ((*pCHIPID >> 28) < 2)
-               return;
-
-       /* Before enable icache, disable it first */
-       icache_disable();
-       I0 = (unsigned int *)ICPLB_ADDR0;
-       I1 = (unsigned int *)ICPLB_DATA0;
-
-       /* make sure the locked ones go in first */
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (CPLB_LOCK & icplb_table[i][1]) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                                icplb_table[i][0], icplb_table[i][1]);
-                       *I0++ = icplb_table[i][0];
-                       *I1++ = icplb_table[i][1];
-                       j++;
-               }
-       }
-
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (!(CPLB_LOCK & icplb_table[i][1])) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                                icplb_table[i][0], icplb_table[i][1]);
-                       *I0++ = icplb_table[i][0];
-                       *I1++ = icplb_table[i][1];
-                       j++;
-                       if (j == 16) {
-                               break;
-                       }
-               }
-       }
-
-       /* Fill the rest with invalid entry */
-       if (j <= 15) {
-               for (; j < 16; j++) {
-                       debug("filling %i with 0", j);
-                       *I1++ = 0x0;
-               }
-
-       }
-
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)IMEM_CONTROL = IMC | ENICPLB;
-       SSYNC();
-}
-
-void icache_disable(void)
-{
-       if ((*pCHIPID >> 28) < 2)
-               return;
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)IMEM_CONTROL &= ~(IMC | ENICPLB);
-       SSYNC();
-}
-
-int icache_status(void)
-{
-       unsigned int value;
-       value = *(unsigned int *)IMEM_CONTROL;
-
-       if (value & (IMC | ENICPLB))
-               return CACHE_ON;
-       else
-               return CACHE_OFF;
-}
-
-void dcache_enable(void)
-{
-       unsigned int *I0, *I1;
-       unsigned int temp;
-       int i, j = 0;
-
-       /* Before enable dcache, disable it first */
-       dcache_disable();
-       I0 = (unsigned int *)DCPLB_ADDR0;
-       I1 = (unsigned int *)DCPLB_DATA0;
-
-       /* make sure the locked ones go in first */
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (CPLB_LOCK & dcplb_table[i][1]) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                                dcplb_table[i][0], dcplb_table[i][1]);
-                       *I0++ = dcplb_table[i][0];
-                       *I1++ = dcplb_table[i][1];
-                       j++;
-               } else {
-                       debug("skip   %02i %02i 0x%08x 0x%08x\n", i, j,
-                                dcplb_table[i][0], dcplb_table[i][1]);
-               }
-       }
-
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (!(CPLB_LOCK & dcplb_table[i][1])) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                                dcplb_table[i][0], dcplb_table[i][1]);
-                       *I0++ = dcplb_table[i][0];
-                       *I1++ = dcplb_table[i][1];
-                       j++;
-                       if (j == 16) {
-                               break;
-                       }
-               }
-       }
-
-       /* Fill the rest with invalid entry */
-       if (j <= 15) {
-               for (; j < 16; j++) {
-                       debug("filling %i with 0", j);
-                       *I1++ = 0x0;
-               }
-       }
-
-       temp = *(unsigned int *)DMEM_CONTROL;
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)DMEM_CONTROL =
-           ACACHE_BCACHE | ENDCPLB | PORT_PREF0 | temp;
-       SSYNC();
-}
-
-void dcache_disable(void)
-{
-       unsigned int *I0, *I1;
-       int i;
-
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)DMEM_CONTROL &=
-           ~(ACACHE_BCACHE | ENDCPLB | PORT_PREF0);
-       SSYNC();
-
-       /* after disable dcache,
-        * clear it so we don't confuse the next application
-        */
-       I0 = (unsigned int *)DCPLB_ADDR0;
-       I1 = (unsigned int *)DCPLB_DATA0;
-
-       for (i = 0; i < 16; i++) {
-               *I0++ = 0x0;
-               *I1++ = 0x0;
-       }
-}
-
-int dcache_status(void)
-{
-       unsigned int value;
-       value = *(unsigned int *)DMEM_CONTROL;
-
-       if (value & (ENDCPLB))
-               return CACHE_ON;
-       else
-               return CACHE_OFF;
-}
 
+++ /dev/null
-/*
- *  U-boot - cpu.h
- *
- *  Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#ifndef _CPU_H_
-#define _CPU_H_
-
-#include <command.h>
-
-#define INTERNAL_IRQS (32)
-#define NUM_IRQ_NODES 16
-#define DEF_INTERRUPT_FLAGS 1
-#define MAX_TIM_LOAD   0xFFFFFFFF
-
-void blackfin_irq_panic(int reason, struct pt_regs *reg);
-extern void dump(struct pt_regs *regs);
-void display_excp(void);
-asmlinkage void evt_nmi(void);
-asmlinkage void evt_exception(void);
-asmlinkage void trap(void);
-asmlinkage void evt_ivhw(void);
-asmlinkage void evt_rst(void);
-asmlinkage void evt_timer(void);
-asmlinkage void evt_evt7(void);
-asmlinkage void evt_evt8(void);
-asmlinkage void evt_evt9(void);
-asmlinkage void evt_evt10(void);
-asmlinkage void evt_evt11(void);
-asmlinkage void evt_evt12(void);
-asmlinkage void evt_evt13(void);
-asmlinkage void evt_soft_int1(void);
-asmlinkage void evt_system_call(void);
-void blackfin_irq_panic(int reason, struct pt_regs *regs);
-void blackfin_free_irq(unsigned int irq, void *dev_id);
-void call_isr(int irq, struct pt_regs *fp);
-void blackfin_do_irq(int vec, struct pt_regs *fp);
-void blackfin_init_IRQ(void);
-void blackfin_enable_irq(unsigned int irq);
-void blackfin_disable_irq(unsigned int irq);
-extern int do_reset(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]);
-int blackfin_request_irq(unsigned int irq,
-                        void (*handler) (int, void *, struct pt_regs *),
-                        unsigned long flags, const char *devname,
-                        void *dev_id);
-void timer_init(void);
-#endif
 
+++ /dev/null
-/* Copyright (C) 2003-2007 Analog Devices Inc.
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.
- */
-
-#define ASSEMBLY
-
-#include <asm/linkage.h>
-#include <asm/cplb.h>
-#include <config.h>
-#include <asm/blackfin.h>
-
-.text
-
-/* This is an external function being called by the user
- * application through __flush_cache_all. Currently this function
- * serves the purpose of flushing all the pending writes in
- * in the instruction cache.
- */
-
-ENTRY(_flush_instruction_cache)
-       [--SP] = ( R7:6, P5:4 );
-       LINK 12;
-       SP += -12;
-       P5.H = (ICPLB_ADDR0 >> 16);
-       P5.L = (ICPLB_ADDR0 & 0xFFFF);
-       P4.H = (ICPLB_DATA0 >> 16);
-       P4.L = (ICPLB_DATA0 & 0xFFFF);
-       R7 = CPLB_VALID | CPLB_L1_CHBL;
-       R6 = 16;
-inext: R0 = [P5++];
-       R1 = [P4++];
-       [--SP] =  RETS;
-       CALL _icplb_flush;      /* R0 = page, R1 = data*/
-       RETS = [SP++];
-iskip: R6 += -1;
-       CC = R6;
-       IF CC JUMP inext;
-       SSYNC;
-       SP += 12;
-       UNLINK;
-       ( R7:6, P5:4 ) = [SP++];
-       RTS;
-
-/* This is an internal function to flush all pending
- * writes in the cache associated with a particular ICPLB.
- *
- * R0 -  page's start address
- * R1 -  CPLB's data field.
- */
-
-.align 2
-ENTRY(_icplb_flush)
-       [--SP] = ( R7:0, P5:0 );
-       [--SP] = LC0;
-       [--SP] = LT0;
-       [--SP] = LB0;
-       [--SP] = LC1;
-       [--SP] = LT1;
-       [--SP] = LB1;
-
-       /* If it's a 1K or 4K page, then it's quickest to
-        * just systematically flush all the addresses in
-        * the page, regardless of whether they're in the
-        * cache, or dirty. If it's a 1M or 4M page, there
-        * are too many addresses, and we have to search the
-        * cache for lines corresponding to the page.
-        */
-
-       CC = BITTST(R1, 17);    /* 1MB or 4MB */
-       IF !CC JUMP iflush_whole_page;
-
-       /* We're only interested in the page's size, so extract
-        * this from the CPLB (bits 17:16), and scale to give an
-        * offset into the page_size and page_prefix tables.
-        */
-
-       R1 <<= 14;
-       R1 >>= 30;
-       R1 <<= 2;
-
-       /* We can also determine the sub-bank used, because this is
-        * taken from bits 13:12 of the address.
-        */
-
-       R3 = ((12<<8)|2);               /* Extraction pattern */
-       nop;                            /* Anamoly 05000209 */
-       R4 = EXTRACT(R0, R3.L) (Z);     /* Extract bits */
-
-       /* Save in extraction pattern for later deposit. */
-       R3.H = R4.L << 0;
-
-       /* So:
-        * R0 = Page start
-        * R1 = Page length (actually, offset into size/prefix tables)
-        * R3 = sub-bank deposit values
-        *
-        * The cache has 2 Ways, and 64 sets, so we iterate through
-        * the sets, accessing the tag for each Way, for our Bank and
-        * sub-bank, looking for dirty, valid tags that match our
-        * address prefix.
-        */
-
-       P5.L = (ITEST_COMMAND & 0xFFFF);
-       P5.H = (ITEST_COMMAND >> 16);
-       P4.L = (ITEST_DATA0 & 0xFFFF);
-       P4.H = (ITEST_DATA0 >> 16);
-
-       P0.L = page_prefix_table;
-       P0.H = page_prefix_table;
-       P1 = R1;
-       R5 = 0;                 /* Set counter*/
-       P0 = P1 + P0;
-       R4 = [P0];              /* This is the address prefix*/
-
-       /* We're reading (bit 1==0) the tag (bit 2==0), and we
-        * don't care about which double-word, since we're only
-        * fetching tags, so we only have to set Set, Bank,
-        * Sub-bank and Way.
-        */
-
-       P2 = 4;
-       LSETUP (ifs1, ife1) LC1 = P2;
-ifs1:  P0 = 32;                /* iterate over all sets*/
-       LSETUP (ifs0, ife0) LC0 = P0;
-ifs0:  R6 = R5 << 5;           /* Combine set*/
-       R6.H = R3.H << 0 ;      /* and sub-bank*/
-       [P5] = R6;              /* Issue Command*/
-       SSYNC;                  /* CSYNC will not work here :(*/
-       R7 = [P4];              /* and read Tag.*/
-       CC = BITTST(R7, 0);     /* Check if valid*/
-       IF !CC JUMP ifskip;     /* and skip if not.*/
-
-       /* Compare against the page address. First, plant bits 13:12
-        * into the tag, since those aren't part of the returned data.
-        */
-
-       R7 = DEPOSIT(R7, R3);   /* set 13:12*/
-       R1 = R7 & R4;           /* Mask off lower bits*/
-       CC = R1 == R0;          /* Compare against page start.*/
-       IF !CC JUMP ifskip;     /* Skip it if it doesn't match.*/
-
-       /* Tag address matches against page, so this is an entry
-        * we must flush.
-        */
-
-       R7 >>= 10;              /* Mask off the non-address bits*/
-       R7 <<= 10;
-       P3 = R7;
-       IFLUSH [P3];            /* And flush the entry*/
-ifskip:
-ife0:  R5 += 1;                /* Advance to next Set*/
-ife1:  NOP;
-
-ifinished:
-       SSYNC;                  /* Ensure the data gets out to mem.*/
-
-       /*Finished. Restore context.*/
-       LB1 = [SP++];
-       LT1 = [SP++];
-       LC1 = [SP++];
-       LB0 = [SP++];
-       LT0 = [SP++];
-       LC0 = [SP++];
-       ( R7:0, P5:0 ) = [SP++];
-       RTS;
-
-iflush_whole_page:
-       /* It's a 1K or 4K page, so quicker to just flush the
-        * entire page.
-        */
-
-       P1 = 32;                /* For 1K pages*/
-       P2 = P1 << 2;           /* For 4K pages*/
-       P0 = R0;                /* Start of page*/
-       CC = BITTST(R1, 16);    /* Whether 1K or 4K*/
-       IF CC P1 = P2;
-       P1 += -1;               /* Unroll one iteration*/
-       SSYNC;
-       IFLUSH [P0++];          /* because CSYNC can't end loops.*/
-       LSETUP (isall, ieall) LC0 = P1;
-isall:IFLUSH [P0++];
-ieall: NOP;
-       SSYNC;
-       JUMP ifinished;
-
-/* This is an external function being called by the user
- * application through __flush_cache_all. Currently this function
- * serves the purpose of flushing all the pending writes in
- * in the data cache.
- */
-
-ENTRY(_flush_data_cache)
-       [--SP] = ( R7:6, P5:4 );
-       LINK 12;
-       SP += -12;
-       P5.H = (DCPLB_ADDR0 >> 16);
-       P5.L = (DCPLB_ADDR0 & 0xFFFF);
-       P4.H = (DCPLB_DATA0 >> 16);
-       P4.L = (DCPLB_DATA0 & 0xFFFF);
-       R7 = CPLB_VALID | CPLB_L1_CHBL | CPLB_DIRTY (Z);
-       R6 = 16;
-next:  R0 = [P5++];
-       R1 = [P4++];
-       CC = BITTST(R1, 14);    /* Is it write-through?*/
-       IF CC JUMP skip;        /* If so, ignore it.*/
-       R2 = R1 & R7;           /* Is it a dirty, cached page?*/
-       CC = R2;
-       IF !CC JUMP skip;       /* If not, ignore it.*/
-       [--SP] = RETS;
-       CALL _dcplb_flush;      /* R0 = page, R1 = data*/
-       RETS = [SP++];
-skip:  R6 += -1;
-       CC = R6;
-       IF CC JUMP next;
-       SSYNC;
-       SP += 12;
-       UNLINK;
-       ( R7:6, P5:4 ) = [SP++];
-       RTS;
-
-/* This is an internal function to flush all pending
- * writes in the cache associated with a particular DCPLB.
- *
- * R0 -  page's start address
- * R1 -  CPLB's data field.
- */
-
-.align 2
-ENTRY(_dcplb_flush)
-       [--SP] = ( R7:0, P5:0 );
-       [--SP] = LC0;
-       [--SP] = LT0;
-       [--SP] = LB0;
-       [--SP] = LC1;
-       [--SP] = LT1;
-       [--SP] = LB1;
-
-       /* If it's a 1K or 4K page, then it's quickest to
-        * just systematically flush all the addresses in
-        * the page, regardless of whether they're in the
-        * cache, or dirty. If it's a 1M or 4M page, there
-        * are too many addresses, and we have to search the
-        * cache for lines corresponding to the page.
-        */
-
-       CC = BITTST(R1, 17);    /* 1MB or 4MB */
-       IF !CC JUMP dflush_whole_page;
-
-       /* We're only interested in the page's size, so extract
-        * this from the CPLB (bits 17:16), and scale to give an
-        * offset into the page_size and page_prefix tables.
-        */
-
-       R1 <<= 14;
-       R1 >>= 30;
-       R1 <<= 2;
-
-       /* The page could be mapped into Bank A or Bank B, depending
-        * on (a) whether both banks are configured as cache, and
-        * (b) on whether address bit A[x] is set. x is determined
-        * by DCBS in DMEM_CONTROL
-        */
-
-       R2 = 0;                 /* Default to Bank A (Bank B would be 1)*/
-
-       P0.L = (DMEM_CONTROL & 0xFFFF);
-       P0.H = (DMEM_CONTROL >> 16);
-
-       R3 = [P0];              /* If Bank B is not enabled as cache*/
-       CC = BITTST(R3, 2);     /* then Bank A is our only option.*/
-       IF CC JUMP bank_chosen;
-
-       R4 = 1<<14;             /* If DCBS==0, use A[14].*/
-       R5 = R4 << 7;           /* If DCBS==1, use A[23];*/
-       CC = BITTST(R3, 4);
-       IF CC R4 = R5;          /* R4 now has either bit 14 or bit 23 set.*/
-       R5 = R0 & R4;           /* Use it to test the Page address*/
-       CC = R5;                /* and if that bit is set, we use Bank B,*/
-       R2 = CC;                /* else we use Bank A.*/
-       R2 <<= 23;              /* The Bank selection's at posn 23.*/
-
-bank_chosen:
-
-       /* We can also determine the sub-bank used, because this is
-        * taken from bits 13:12 of the address.
-        */
-
-       R3 = ((12<<8)|2);               /* Extraction pattern */
-       nop;                            /*Anamoly 05000209*/
-       R4 = EXTRACT(R0, R3.L) (Z);     /* Extract bits*/
-       /* Save in extraction pattern for later deposit.*/
-       R3.H = R4.L << 0;
-
-       /* So:
-        * R0 = Page start
-        * R1 = Page length (actually, offset into size/prefix tables)
-        * R2 = Bank select mask
-        * R3 = sub-bank deposit values
-        *
-        * The cache has 2 Ways, and 64 sets, so we iterate through
-        * the sets, accessing the tag for each Way, for our Bank and
-        * sub-bank, looking for dirty, valid tags that match our
-        * address prefix.
-        */
-
-       P5.L = (DTEST_COMMAND & 0xFFFF);
-       P5.H = (DTEST_COMMAND >> 16);
-       P4.L = (DTEST_DATA0 & 0xFFFF);
-       P4.H = (DTEST_DATA0 >> 16);
-
-       P0.L = page_prefix_table;
-       P0.H = page_prefix_table;
-       P1 = R1;
-       R5 = 0;                 /* Set counter*/
-       P0 = P1 + P0;
-       R4 = [P0];              /* This is the address prefix*/
-
-
-       /* We're reading (bit 1==0) the tag (bit 2==0), and we
-        * don't care about which double-word, since we're only
-        * fetching tags, so we only have to set Set, Bank,
-        * Sub-bank and Way.
-        */
-
-       P2 = 2;
-       LSETUP (fs1, fe1) LC1 = P2;
-fs1:   P0 = 64;                /* iterate over all sets*/
-       LSETUP (fs0, fe0) LC0 = P0;
-fs0:   R6 = R5 << 5;           /* Combine set*/
-       R6.H = R3.H << 0 ;      /* and sub-bank*/
-       R6 = R6 | R2;           /* and Bank. Leave Way==0 at first.*/
-       BITSET(R6,14);
-       [P5] = R6;              /* Issue Command*/
-       SSYNC;
-       R7 = [P4];              /* and read Tag.*/
-       CC = BITTST(R7, 0);     /* Check if valid*/
-       IF !CC JUMP fskip;      /* and skip if not.*/
-       CC = BITTST(R7, 1);     /* Check if dirty*/
-       IF !CC JUMP fskip;      /* and skip if not.*/
-
-       /* Compare against the page address. First, plant bits 13:12
-        * into the tag, since those aren't part of the returned data.
-        */
-
-       R7 = DEPOSIT(R7, R3);   /* set 13:12*/
-       R1 = R7 & R4;           /* Mask off lower bits*/
-       CC = R1 == R0;          /* Compare against page start.*/
-       IF !CC JUMP fskip;      /* Skip it if it doesn't match.*/
-
-       /* Tag address matches against page, so this is an entry
-        * we must flush.
-        */
-
-       R7 >>= 10;              /* Mask off the non-address bits*/
-       R7 <<= 10;
-       P3 = R7;
-       SSYNC;
-       FLUSHINV [P3];          /* And flush the entry*/
-fskip:
-fe0:   R5 += 1;                /* Advance to next Set*/
-fe1:   BITSET(R2, 26);         /* Go to next Way.*/
-
-dfinished:
-       SSYNC;                  /* Ensure the data gets out to mem.*/
-
-       /*Finished. Restore context.*/
-       LB1 = [SP++];
-       LT1 = [SP++];
-       LC1 = [SP++];
-       LB0 = [SP++];
-       LT0 = [SP++];
-       LC0 = [SP++];
-       ( R7:0, P5:0 ) = [SP++];
-       RTS;
-
-dflush_whole_page:
-
-       /* It's a 1K or 4K page, so quicker to just flush the
-        * entire page.
-        */
-
-       P1 = 32;                /* For 1K pages*/
-       P2 = P1 << 2;           /* For 4K pages*/
-       P0 = R0;                /* Start of page*/
-       CC = BITTST(R1, 16);    /* Whether 1K or 4K*/
-       IF CC P1 = P2;
-       P1 += -1;               /* Unroll one iteration*/
-       SSYNC;
-       FLUSHINV [P0++];        /* because CSYNC can't end loops.*/
-       LSETUP (eall, eall) LC0 = P1;
-eall:  FLUSHINV [P0++];
-       SSYNC;
-       JUMP dfinished;
-
-.align 4;
-page_prefix_table:
-.byte4         0xFFFFFC00;     /* 1K */
-.byte4 0xFFFFF000;     /* 4K */
-.byte4 0xFFF00000;     /* 1M */
-.byte4 0xFFC00000;     /* 4M */
-.page_prefix_table.end:
 
+++ /dev/null
-/****************************************************************
- * $ID: i2c.c  24 Oct 2006 12:00:00 +0800 $                    *
- *                                                             *
- * Description:                                                        *
- *                                                             *
- * Maintainer:  sonicz  <sonic.zhang@analog.com>               *
- *                                                             *
- * CopyRight (c)  2006  Analog Device                          *
- * All rights reserved.                                                *
- *                                                             *
- * This file is free software;                                 *
- *     you are free to modify and/or redistribute it           *
- *     under the terms of the GNU General Public Licence (GPL).*
- *                                                             *
- ****************************************************************/
-
-#include <common.h>
-
-#ifdef CONFIG_HARD_I2C
-
-#include <asm/blackfin.h>
-#include <i2c.h>
-#include <asm/io.h>
-#include <asm/mach-common/bits/twi.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-#ifdef DEBUG_I2C
-#define PRINTD(fmt,args...)    do {    \
-       if (gd->have_console)           \
-               printf(fmt ,##args);    \
-       } while (0)
-#else
-#define PRINTD(fmt,args...)
-#endif
-
-#ifndef CONFIG_TWICLK_KHZ
-#define CONFIG_TWICLK_KHZ      50
-#endif
-
-/* All transfers are described by this data structure */
-struct i2c_msg {
-       u16 addr;               /* slave address */
-       u16 flags;
-#define I2C_M_STOP             0x2
-#define I2C_M_RD               0x1
-       u16 len;                /* msg length */
-       u8 *buf;                /* pointer to msg data */
-};
-
-/**
- * i2c_reset: - reset the host controller
- *
- */
-
-static void i2c_reset(void)
-{
-       /* Disable TWI */
-       bfin_write_TWI_CONTROL(0);
-       sync();
-
-       /* Set TWI internal clock as 10MHz */
-       bfin_write_TWI_CONTROL(((get_sclk() / 1024 / 1024 + 5) / 10) & 0x7F);
-
-       /* Set Twi interface clock as specified */
-       if (CONFIG_TWICLK_KHZ > 400)
-               bfin_write_TWI_CLKDIV(((5 * 1024 / 400) << 8) | ((5 * 1024 /
-                                               400) & 0xFF));
-       else
-               bfin_write_TWI_CLKDIV(((5 * 1024 /
-                                       CONFIG_TWICLK_KHZ) << 8) | ((5 * 1024 /
-                                               CONFIG_TWICLK_KHZ)
-                                               & 0xFF));
-
-       /* Enable TWI */
-       bfin_write_TWI_CONTROL(bfin_read_TWI_CONTROL() | TWI_ENA);
-       sync();
-}
-
-int wait_for_completion(struct i2c_msg *msg, int timeout_count)
-{
-       unsigned short twi_int_stat;
-       unsigned short mast_stat;
-       int i;
-
-       for (i = 0; i < timeout_count; i++) {
-               twi_int_stat = bfin_read_TWI_INT_STAT();
-               mast_stat = bfin_read_TWI_MASTER_STAT();
-
-               if (XMTSERV & twi_int_stat) {
-                       /* Transmit next data */
-                       if (msg->len > 0) {
-                               bfin_write_TWI_XMT_DATA8(*(msg->buf++));
-                               msg->len--;
-                       } else if (msg->flags & I2C_M_STOP)
-                               bfin_write_TWI_MASTER_CTL
-                                   (bfin_read_TWI_MASTER_CTL() | STOP);
-                       sync();
-                       /* Clear status */
-                       bfin_write_TWI_INT_STAT(XMTSERV);
-                       sync();
-                       i = 0;
-               }
-               if (RCVSERV & twi_int_stat) {
-                       if (msg->len > 0) {
-                               /* Receive next data */
-                               *(msg->buf++) = bfin_read_TWI_RCV_DATA8();
-                               msg->len--;
-                       } else if (msg->flags & I2C_M_STOP) {
-                               bfin_write_TWI_MASTER_CTL
-                                   (bfin_read_TWI_MASTER_CTL() | STOP);
-                               sync();
-                       }
-                       /* Clear interrupt source */
-                       bfin_write_TWI_INT_STAT(RCVSERV);
-                       sync();
-                       i = 0;
-               }
-               if (MERR & twi_int_stat) {
-                       bfin_write_TWI_INT_STAT(MERR);
-                       bfin_write_TWI_INT_MASK(0);
-                       bfin_write_TWI_MASTER_STAT(0x3e);
-                       bfin_write_TWI_MASTER_CTL(0);
-                       sync();
-                       /*
-                        * if both err and complete int stats are set,
-                        * return proper results.
-                        */
-                       if (MCOMP & twi_int_stat) {
-                               bfin_write_TWI_INT_STAT(MCOMP);
-                               bfin_write_TWI_INT_MASK(0);
-                               bfin_write_TWI_MASTER_CTL(0);
-                               sync();
-                               /*
-                                * If it is a quick transfer,
-                                * only address bug no data, not an err.
-                                */
-                               if (msg->len == 0 && mast_stat & BUFRDERR)
-                                       return 0;
-                               /*
-                                * If address not acknowledged return -3,
-                                * else return 0.
-                                */
-                               else if (!(mast_stat & ANAK))
-                                       return 0;
-                               else
-                                       return -3;
-                       }
-                       return -1;
-               }
-               if (MCOMP & twi_int_stat) {
-                       bfin_write_TWI_INT_STAT(MCOMP);
-                       sync();
-                       bfin_write_TWI_INT_MASK(0);
-                       bfin_write_TWI_MASTER_CTL(0);
-                       sync();
-                       return 0;
-               }
-       }
-       if (msg->flags & I2C_M_RD)
-               return -4;
-       else
-               return -2;
-}
-
-/**
- * i2c_transfer: - Transfer one byte over the i2c bus
- *
- * This function can tranfer a byte over the i2c bus in both directions.
- * It is used by the public API functions.
- *
- * @return:     0: transfer successful
- *             -1: transfer fail
- *             -2: transmit timeout
- *             -3: ACK missing
- *             -4: receive timeout
- *             -5: controller not ready
- */
-int i2c_transfer(struct i2c_msg *msg)
-{
-       int ret = 0;
-       int timeout_count = 10000;
-       int len = msg->len;
-
-       if (!(bfin_read_TWI_CONTROL() & TWI_ENA)) {
-               ret = -5;
-               goto transfer_error;
-       }
-
-       while (bfin_read_TWI_MASTER_STAT() & BUSBUSY) ;
-
-       /* Set Transmit device address */
-       bfin_write_TWI_MASTER_ADDR(msg->addr);
-
-       /*
-        * FIFO Initiation.
-        * Data in FIFO should be discarded before start a new operation.
-        */
-       bfin_write_TWI_FIFO_CTL(0x3);
-       sync();
-       bfin_write_TWI_FIFO_CTL(0);
-       sync();
-
-       if (!(msg->flags & I2C_M_RD)) {
-               /* Transmit first data */
-               if (msg->len > 0) {
-                       PRINTD("1 in i2c_transfer: buf=%d, len=%d\n", *msg->buf,
-                              len);
-                       bfin_write_TWI_XMT_DATA8(*(msg->buf++));
-                       msg->len--;
-                       sync();
-               }
-       }
-
-       /* clear int stat */
-       bfin_write_TWI_INT_STAT(MERR | MCOMP | XMTSERV | RCVSERV);
-
-       /* Interrupt mask . Enable XMT, RCV interrupt */
-       bfin_write_TWI_INT_MASK(MCOMP | MERR |
-                       ((msg->flags & I2C_M_RD) ? RCVSERV : XMTSERV));
-       sync();
-
-       if (len > 0 && len <= 255)
-               bfin_write_TWI_MASTER_CTL((len << 6));
-       else if (msg->len > 255) {
-               bfin_write_TWI_MASTER_CTL((0xff << 6));
-               msg->flags &= I2C_M_STOP;
-       } else
-               bfin_write_TWI_MASTER_CTL(0);
-
-       /* Master enable */
-       bfin_write_TWI_MASTER_CTL(bfin_read_TWI_MASTER_CTL() | MEN |
-                       ((msg->flags & I2C_M_RD)
-                        ? MDIR : 0) | ((CONFIG_TWICLK_KHZ >
-                                        100) ? FAST : 0));
-       sync();
-
-       ret = wait_for_completion(msg, timeout_count);
-       PRINTD("3 in i2c_transfer: ret=%d\n", ret);
-
-transfer_error:
-       switch (ret) {
-       case 1:
-               PRINTD(("i2c_transfer: error: transfer fail\n"));
-               break;
-       case 2:
-               PRINTD(("i2c_transfer: error: transmit timeout\n"));
-               break;
-       case 3:
-               PRINTD(("i2c_transfer: error: ACK missing\n"));
-               break;
-       case 4:
-               PRINTD(("i2c_transfer: error: receive timeout\n"));
-               break;
-       case 5:
-               PRINTD(("i2c_transfer: error: controller not ready\n"));
-               i2c_reset();
-               break;
-       default:
-               break;
-       }
-       return ret;
-
-}
-
-/* ---------------------------------------------------------------------*/
-/* API Functions                                                       */
-/* ---------------------------------------------------------------------*/
-
-void i2c_init(int speed, int slaveaddr)
-{
-       i2c_reset();
-}
-
-/**
- * i2c_probe: - Test if a chip answers for a given i2c address
- *
- * @chip:      address of the chip which is searched for
- * @return:    0 if a chip was found, -1 otherwhise
- */
-
-int i2c_probe(uchar chip)
-{
-       struct i2c_msg msg;
-       u8 probebuf;
-
-       i2c_reset();
-
-       probebuf = 0;
-       msg.addr = chip;
-       msg.flags = 0;
-       msg.len = 1;
-       msg.buf = &probebuf;
-       if (i2c_transfer(&msg))
-               return -1;
-
-       msg.addr = chip;
-       msg.flags = I2C_M_RD;
-       msg.len = 1;
-       msg.buf = &probebuf;
-       if (i2c_transfer(&msg))
-               return -1;
-
-       return 0;
-}
-
-/**
- *   i2c_read: - Read multiple bytes from an i2c device
- *
- *   chip:    I2C chip address, range 0..127
- *   addr:    Memory (register) address within the chip
- *   alen:    Number of bytes to use for addr (typically 1, 2 for larger
- *             memories, 0 for register type devices with only one
- *             register)
- *   buffer:  Where to read/write the data
- *   len:     How many bytes to read/write
- *
- *   Returns: 0 on success, not 0 on failure
- */
-
-int i2c_read(uchar chip, uint addr, int alen, uchar * buffer, int len)
-{
-       struct i2c_msg msg;
-       u8 addr_bytes[3];       /* lowest...highest byte of data address */
-
-       PRINTD("i2c_read: chip=0x%x, addr=0x%x, alen=0x%x, len=0x%x\n", chip,
-                       addr, alen, len);
-
-       if (alen > 0) {
-               addr_bytes[0] = (u8) ((addr >> 0) & 0x000000FF);
-               addr_bytes[1] = (u8) ((addr >> 8) & 0x000000FF);
-               addr_bytes[2] = (u8) ((addr >> 16) & 0x000000FF);
-               msg.addr = chip;
-               msg.flags = 0;
-               msg.len = alen;
-               msg.buf = addr_bytes;
-               if (i2c_transfer(&msg))
-                       return -1;
-       }
-
-       /* start read sequence */
-       PRINTD(("i2c_read: start read sequence\n"));
-       msg.addr = chip;
-       msg.flags = I2C_M_RD;
-       msg.len = len;
-       msg.buf = buffer;
-       if (i2c_transfer(&msg))
-               return -1;
-
-       return 0;
-}
-
-/**
- *   i2c_write: -  Write multiple bytes to an i2c device
- *
- *   chip:    I2C chip address, range 0..127
- *   addr:    Memory (register) address within the chip
- *   alen:    Number of bytes to use for addr (typically 1, 2 for larger
- *             memories, 0 for register type devices with only one
- *             register)
- *   buffer:  Where to read/write the data
- *   len:     How many bytes to read/write
- *
- *   Returns: 0 on success, not 0 on failure
- */
-
-int i2c_write(uchar chip, uint addr, int alen, uchar * buffer, int len)
-{
-       struct i2c_msg msg;
-       u8 addr_bytes[3];       /* lowest...highest byte of data address */
-
-       PRINTD
-               ("i2c_write: chip=0x%x, addr=0x%x, alen=0x%x, len=0x%x, buf0=0x%x\n",
-                chip, addr, alen, len, buffer[0]);
-
-       /* chip address write */
-       if (alen > 0) {
-               addr_bytes[0] = (u8) ((addr >> 0) & 0x000000FF);
-               addr_bytes[1] = (u8) ((addr >> 8) & 0x000000FF);
-               addr_bytes[2] = (u8) ((addr >> 16) & 0x000000FF);
-               msg.addr = chip;
-               msg.flags = 0;
-               msg.len = alen;
-               msg.buf = addr_bytes;
-               if (i2c_transfer(&msg))
-                       return -1;
-       }
-
-       /* start read sequence */
-       PRINTD(("i2c_write: start write sequence\n"));
-       msg.addr = chip;
-       msg.flags = 0;
-       msg.len = len;
-       msg.buf = buffer;
-       if (i2c_transfer(&msg))
-               return -1;
-
-       return 0;
-
-}
-
-uchar i2c_reg_read(uchar chip, uchar reg)
-{
-       uchar buf;
-
-       PRINTD("i2c_reg_read: chip=0x%02x, reg=0x%02x\n", chip, reg);
-       i2c_read(chip, reg, 0, &buf, 1);
-       return (buf);
-}
-
-void i2c_reg_write(uchar chip, uchar reg, uchar val)
-{
-       PRINTD("i2c_reg_write: chip=0x%02x, reg=0x%02x, val=0x%02x\n", chip,
-                       reg, val);
-       i2c_write(chip, reg, 0, &val, 1);
-}
-
-#endif                         /* CONFIG_HARD_I2C */
 
+++ /dev/null
-#define ASSEMBLY
-
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/mem_init.h>
-#include <asm/mach-common/bits/bootrom.h>
-#include <asm/mach-common/bits/ebiu.h>
-#include <asm/mach-common/bits/pll.h>
-#include <asm/mach-common/bits/uart.h>
-.global init_sdram;
-
-#if (BFIN_BOOT_MODE != BF537_UART_BOOT)
-#if (CONFIG_CCLK_DIV == 1)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV1
-#endif
-#if (CONFIG_CCLK_DIV == 2)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV2
-#endif
-#if (CONFIG_CCLK_DIV == 4)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV4
-#endif
-#if (CONFIG_CCLK_DIV == 8)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV8
-#endif
-#ifndef CONFIG_CCLK_ACT_DIV
-#define CONFIG_CCLK_ACT_DIV   CONFIG_CCLK_DIV_not_defined_properly
-#endif
-#endif
-
-init_sdram:
-       [--SP] = ASTAT;
-       [--SP] = RETS;
-       [--SP] = (R7:0);
-       [--SP] = (P5:0);
-
-#if (BFIN_BOOT_MODE == BF537_SPI_MASTER_BOOT)
-       p0.h = hi(SIC_IWR);
-       p0.l = lo(SIC_IWR);
-       r0.l = 0x1;
-       w[p0] = r0.l;
-       SSYNC;
-
-       p0.h = hi(SPI_BAUD);
-       p0.l = lo(SPI_BAUD);
-       r0.l = CONFIG_SPI_BAUD;
-       w[p0] = r0.l;
-       SSYNC;
-#endif
-
-#if (BFIN_BOOT_MODE != BF537_UART_BOOT)
-
-#ifdef CONFIG_BF537
-       /* Enable PHY CLK buffer output */
-       p0.h = hi(VR_CTL);
-       p0.l = lo(VR_CTL);
-       r0.l = w[p0];
-       bitset(r0, 14);
-       w[p0] = r0.l;
-       ssync;
-#endif
-       /*
-        * PLL_LOCKCNT - how many SCLK Cycles to delay while PLL becomes stable
-        */
-       p0.h = hi(PLL_LOCKCNT);
-       p0.l = lo(PLL_LOCKCNT);
-       r0 = 0x300(Z);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * Put SDRAM in self-refresh, incase anything is running
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITSET (R0, 24);
-       [P2] = R0;
-       SSYNC;
-
-       /*
-        *  Set PLL_CTL with the value that we calculate in R0
-        *   - [14:09] = MSEL[5:0] : CLKIN / VCO multiplication factors
-        *   - [8]     = BYPASS    : BYPASS the PLL, run CLKIN into CCLK/SCLK
-        *   - [7]     = output delay (add 200ps of delay to mem signals)
-        *   - [6]     = input delay (add 200ps of input delay to mem signals)
-        *   - [5]     = PDWN      : 1=All Clocks off
-        *   - [3]     = STOPCK    : 1=Core Clock off
-        *   - [1]     = PLL_OFF   : 1=Disable Power to PLL
-        *   - [0]     = DF     : 1=Pass CLKIN/2 to PLL / 0=Pass CLKIN to PLL
-        *   all other bits set to zero
-        */
-
-       r0 = CONFIG_VCO_MULT & 63;      /* Load the VCO multiplier */
-       r0 = r0 << 9;                   /* Shift it over */
-       r1 = CONFIG_CLKIN_HALF;         /* Do we need to divide CLKIN by 2?*/
-       r0 = r1 | r0;
-       r1 = CONFIG_PLL_BYPASS;         /* Bypass the PLL? */
-       r1 = r1 << 8;                   /* Shift it over */
-       r0 = r1 | r0;                   /* add them all together */
-
-       p0.h = hi(PLL_CTL);
-       p0.l = lo(PLL_CTL);             /* Load the address */
-       cli r2;                         /* Disable interrupts */
-       ssync;
-       w[p0] = r0.l;                   /* Set the value */
-       idle;                           /* Wait for the PLL to stablize */
-       sti r2;                         /* Enable interrupts */
-
-check_again:
-       p0.h = hi(PLL_STAT);
-       p0.l = lo(PLL_STAT);
-       R0 = W[P0](Z);
-       CC = BITTST(R0,5);
-       if ! CC jump check_again;
-
-       /* Configure SCLK & CCLK Dividers */
-       r0 = (CONFIG_CCLK_ACT_DIV | CONFIG_SCLK_DIV);
-       p0.h = hi(PLL_DIV);
-       p0.l = lo(PLL_DIV);
-       w[p0] = r0.l;
-       ssync;
-#endif
-
-       /*
-        * Now, Initialize the SDRAM,
-        * start with the SDRAM Refresh Rate Control Register
-        */
-       p0.l = lo(EBIU_SDRRC);
-       p0.h = hi(EBIU_SDRRC);
-       r0 = mem_SDRRC;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Memory Bank Control Register - bank specific parameters
-        */
-       p0.l = (EBIU_SDBCTL & 0xFFFF);
-       p0.h = (EBIU_SDBCTL >> 16);
-       r0 = mem_SDBCTL;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Global Control Register - global programmable parameters
-        * Disable self-refresh
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITCLR (R0, 24);
-
-       /*
-        * Check if SDRAM is already powered up, if it is, enable self-refresh
-        */
-       p0.h = hi(EBIU_SDSTAT);
-       p0.l = lo(EBIU_SDSTAT);
-       r2.l = w[p0];
-       cc = bittst(r2,3);
-       if !cc jump skip;
-       NOP;
-       BITSET (R0, 23);
-skip:
-       [P2] = R0;
-       SSYNC;
-
-       /* Write in the new value in the register */
-       R0.L = lo(mem_SDGCTL);
-       R0.H = hi(mem_SDGCTL);
-       [P2] = R0;
-       SSYNC;
-       nop;
-
-       (P5:0) = [SP++];
-       (R7:0) = [SP++];
-       RETS   = [SP++];
-       ASTAT  = [SP++];
-       RTS;
 
+++ /dev/null
-#define ASSEMBLY
-
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/mem_init.h>
-#include <asm/mach-common/bits/bootrom.h>
-#include <asm/mach-common/bits/ebiu.h>
-#include <asm/mach-common/bits/pll.h>
-#include <asm/mach-common/bits/uart.h>
-.global init_sdram;
-
-#if (BFIN_BOOT_MODE != BF537_UART_BOOT)
-#if (CONFIG_CCLK_DIV == 1)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV1
-#endif
-#if (CONFIG_CCLK_DIV == 2)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV2
-#endif
-#if (CONFIG_CCLK_DIV == 4)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV4
-#endif
-#if (CONFIG_CCLK_DIV == 8)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV8
-#endif
-#ifndef CONFIG_CCLK_ACT_DIV
-#define CONFIG_CCLK_ACT_DIV   CONFIG_CCLK_DIV_not_defined_properly
-#endif
-#endif
-
-init_sdram:
-       [--SP] = ASTAT;
-       [--SP] = RETS;
-       [--SP] = (R7:0);
-       [--SP] = (P5:0);
-
-#if (BFIN_BOOT_MODE == BF537_SPI_MASTER_BOOT)
-       p0.h = hi(SIC_IWR);
-       p0.l = lo(SIC_IWR);
-       r0.l = 0x1;
-       w[p0] = r0.l;
-       SSYNC;
-
-       p0.h = hi(SPI_BAUD);
-       p0.l = lo(SPI_BAUD);
-       r0.l = CONFIG_SPI_BAUD_INITBLOCK;
-       w[p0] = r0.l;
-       SSYNC;
-#endif
-
-#if (BFIN_BOOT_MODE != BF537_UART_BOOT)
-
-#ifdef CONFIG_BF537
-       /* Enable PHY CLK buffer output */
-       p0.h = hi(VR_CTL);
-       p0.l = lo(VR_CTL);
-       r0.l = w[p0];
-       bitset(r0, 14);
-       w[p0] = r0.l;
-       ssync;
-#endif
-       /*
-        * PLL_LOCKCNT - how many SCLK Cycles to delay while PLL becomes stable
-        */
-       p0.h = hi(PLL_LOCKCNT);
-       p0.l = lo(PLL_LOCKCNT);
-       r0 = 0x300(Z);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * Put SDRAM in self-refresh, incase anything is running
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITSET (R0, 24);
-       [P2] = R0;
-       SSYNC;
-
-       /*
-        *  Set PLL_CTL with the value that we calculate in R0
-        *   - [14:09] = MSEL[5:0] : CLKIN / VCO multiplication factors
-        *   - [8]     = BYPASS    : BYPASS the PLL, run CLKIN into CCLK/SCLK
-        *   - [7]     = output delay (add 200ps of delay to mem signals)
-        *   - [6]     = input delay (add 200ps of input delay to mem signals)
-        *   - [5]     = PDWN      : 1=All Clocks off
-        *   - [3]     = STOPCK    : 1=Core Clock off
-        *   - [1]     = PLL_OFF   : 1=Disable Power to PLL
-        *   - [0]     = DF     : 1=Pass CLKIN/2 to PLL / 0=Pass CLKIN to PLL
-        *   all other bits set to zero
-        */
-
-       r0 = CONFIG_VCO_MULT & 63;      /* Load the VCO multiplier */
-       r0 = r0 << 9;                   /* Shift it over */
-       r1 = CONFIG_CLKIN_HALF;         /* Do we need to divide CLKIN by 2?*/
-       r0 = r1 | r0;
-       r1 = CONFIG_PLL_BYPASS;         /* Bypass the PLL? */
-       r1 = r1 << 8;                   /* Shift it over */
-       r0 = r1 | r0;                   /* add them all together */
-
-       p0.h = hi(PLL_CTL);
-       p0.l = lo(PLL_CTL);             /* Load the address */
-       cli r2;                         /* Disable interrupts */
-       ssync;
-       w[p0] = r0.l;                   /* Set the value */
-       idle;                           /* Wait for the PLL to stablize */
-       sti r2;                         /* Enable interrupts */
-
-check_again:
-       p0.h = hi(PLL_STAT);
-       p0.l = lo(PLL_STAT);
-       R0 = W[P0](Z);
-       CC = BITTST(R0,5);
-       if ! CC jump check_again;
-
-       /* Configure SCLK & CCLK Dividers */
-       r0 = (CONFIG_CCLK_ACT_DIV | CONFIG_SCLK_DIV);
-       p0.h = hi(PLL_DIV);
-       p0.l = lo(PLL_DIV);
-       w[p0] = r0.l;
-       ssync;
-#endif
-
-       /*
-        * We now are running at speed, time to set the Async mem bank wait states
-        * This will speed up execution, since we are normally running from FLASH.
-        */
-
-       p2.h = (EBIU_AMBCTL1 >> 16);
-       p2.l = (EBIU_AMBCTL1 & 0xFFFF);
-       r0.h = (AMBCTL1VAL >> 16);
-       r0.l = (AMBCTL1VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMBCTL0 >> 16);
-       p2.l = (EBIU_AMBCTL0 & 0xFFFF);
-       r0.h = (AMBCTL0VAL >> 16);
-       r0.l = (AMBCTL0VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMGCTL >> 16);
-       p2.l = (EBIU_AMGCTL & 0xffff);
-       r0 = AMGCTLVAL;
-       w[p2] = r0;
-       ssync;
-
-       /*
-        * Now, Initialize the SDRAM,
-        * start with the SDRAM Refresh Rate Control Register
-        */
-       p0.l = lo(EBIU_SDRRC);
-       p0.h = hi(EBIU_SDRRC);
-       r0 = mem_SDRRC;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Memory Bank Control Register - bank specific parameters
-        */
-       p0.l = (EBIU_SDBCTL & 0xFFFF);
-       p0.h = (EBIU_SDBCTL >> 16);
-       r0 = mem_SDBCTL;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Global Control Register - global programmable parameters
-        * Disable self-refresh
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITCLR (R0, 24);
-
-       /*
-        * Check if SDRAM is already powered up, if it is, enable self-refresh
-        */
-       p0.h = hi(EBIU_SDSTAT);
-       p0.l = lo(EBIU_SDSTAT);
-       r2.l = w[p0];
-       cc = bittst(r2,3);
-       if !cc jump skip;
-       NOP;
-       BITSET (R0, 23);
-skip:
-       [P2] = R0;
-       SSYNC;
-
-       /* Write in the new value in the register */
-       R0.L = lo(mem_SDGCTL);
-       R0.H = hi(mem_SDGCTL);
-       [P2] = R0;
-       SSYNC;
-       nop;
-
-       (P5:0) = [SP++];
-       (R7:0) = [SP++];
-       RETS   = [SP++];
-       ASTAT  = [SP++];
-       RTS;
 
+++ /dev/null
-/*
- * U-boot - interrupt.S Processing of interrupts and exception handling
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * (C) Copyright 2000-2004
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * This file is based on interrupt.S
- *
- * Copyright (C) 2003  Metrowerks, Inc. <mwaddel@metrowerks.com>
- * Copyright (C) 2002  Arcturus Networks Ltd. Ted Ma <mated@sympatico.ca>
- * Copyright (C) 1998  D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>,
- *                     Kenneth Albanowski <kjahds@kjahds.com>,
- *                     The Silver Hammer Group, Ltd.
- *
- * (c) 1995, Dionne & Associates
- * (c) 1995, DKG Display Tech.
- *
- * This file is also based on exception.asm
- * (C) Copyright 2001-2005 - Analog Devices, Inc.  All rights reserved.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#define ASSEMBLY
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/entry.h>
-
-.global _blackfin_irq_panic;
-
-.text
-.align 2
-
-#ifndef CONFIG_KGDB
-.global _evt_emulation
-_evt_emulation:
-       SAVE_CONTEXT
-       r0 = 0;
-       r1 = seqstat;
-       sp += -12;
-       call _blackfin_irq_panic;
-       sp += 12;
-       rte;
-#endif
-
-.global _evt_nmi
-_evt_nmi:
-       SAVE_CONTEXT
-       r0 = 2;
-       r1 = RETN;
-       sp += -12;
-       call _blackfin_irq_panic;
-       sp += 12;
-
-_evt_nmi_exit:
-       rtn;
-
-.global _trap
-_trap:
-       SAVE_ALL_SYS
-       r0 = sp;        /* stack frame pt_regs pointer argument ==> r0 */
-       sp += -12;
-       call _trap_c
-       sp += 12;
-       RESTORE_ALL_SYS
-       rtx;
-
-.global _evt_rst
-_evt_rst:
-       SAVE_CONTEXT
-       r0 = 1;
-       r1 = RETN;
-       sp += -12;
-       call _do_reset;
-       sp += 12;
-
-_evt_rst_exit:
-       rtn;
-
-irq_panic:
-       r0 = 3;
-       r1 =  sp;
-       sp += -12;
-       call _blackfin_irq_panic;
-       sp += 12;
-
-.global _evt_ivhw
-_evt_ivhw:
-       SAVE_CONTEXT
-       RAISE 14;
-
-_evt_ivhw_exit:
-        rti;
-
-.global _evt_timer
-_evt_timer:
-       SAVE_CONTEXT
-       r0 = 6;
-       sp += -12;
-       /* Polling method used now. */
-       /* call timer_int; */
-       sp += 12;
-       RESTORE_CONTEXT
-       rti;
-       nop;
-
-.global _evt_evt7
-_evt_evt7:
-       SAVE_CONTEXT
-       r0 = 7;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt7_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt8
-_evt_evt8:
-       SAVE_CONTEXT
-       r0 = 8;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt8_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt9
-_evt_evt9:
-       SAVE_CONTEXT
-       r0 = 9;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt9_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt10
-_evt_evt10:
-       SAVE_CONTEXT
-       r0 = 10;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt10_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt11
-_evt_evt11:
-       SAVE_CONTEXT
-       r0 = 11;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt11_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt12
-_evt_evt12:
-       SAVE_CONTEXT
-       r0 = 12;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-evt_evt12_exit:
-        RESTORE_CONTEXT
-        rti;
-
-.global _evt_evt13
-_evt_evt13:
-       SAVE_CONTEXT
-       r0 = 13;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt13_exit:
-        RESTORE_CONTEXT
-        rti;
-
-.global _evt_system_call
-_evt_system_call:
-       [--sp] = r0;
-       [--SP] = RETI;
-       r0 = [sp++];
-       r0 += 2;
-       [--sp] = r0;
-       RETI = [SP++];
-       r0 = [SP++];
-       SAVE_CONTEXT
-       sp += -12;
-       call _exception_handle;
-       sp += 12;
-       RESTORE_CONTEXT
-       RTI;
-
-evt_system_call_exit:
-       rti;
-
-.global _evt_soft_int1
-_evt_soft_int1:
-       [--sp] = r0;
-       [--SP] = RETI;
-       r0 = [sp++];
-       r0 += 2;
-       [--sp] = r0;
-       RETI = [SP++];
-       r0 = [SP++];
-       SAVE_CONTEXT
-       sp += -12;
-       call _exception_handle;
-       sp += 12;
-       RESTORE_CONTEXT
-       RTI;
-
-evt_soft_int1_exit:
-       rti;
 
+++ /dev/null
-/*
- * U-boot - interrupts.c Interrupt related routines
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on interrupts.c
- * Copyright 1996 Roman Zippel
- * Copyright 1999 D. Jeff Dionne <jeff@uclinux.org>
- * Copyright 2000-2001 Lineo, Inc. D. Jefff Dionne <jeff@lineo.ca>
- * Copyright 2002 Arcturus Networks Inc. MaTed <mated@sympatico.ca>
- * Copyright 2003 Metrowerks/Motorola
- * Copyright 2003 Bas Vermeulen <bas@buyways.nl>,
- *                     BuyWays B.V. (www.buyways.nl)
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include "cpu.h"
-
-static ulong timestamp;
-static ulong last_time;
-static int int_flag;
-
-int irq_flags;                 /* needed by asm-blackfin/system.h */
-
-/* Functions just to satisfy the linker */
-
-/*
- * This function is derived from PowerPC code (read timebase as long long).
- * On BF533 it just returns the timer value.
- */
-unsigned long long get_ticks(void)
-{
-       return get_timer(0);
-}
-
-/*
- * This function is derived from PowerPC code (timebase clock frequency).
- * On BF533 it returns the number of timer ticks per second.
- */
-ulong get_tbclk (void)
-{
-       ulong tbclk;
-
-       tbclk = CFG_HZ;
-       return tbclk;
-}
-
-void enable_interrupts(void)
-{
-}
-
-int disable_interrupts(void)
-{
-       return 1;
-}
-
-int interrupt_init(void)
-{
-       return (0);
-}
-
-void udelay(unsigned long usec)
-{
-       unsigned long delay, start, stop;
-       unsigned long cclk;
-       cclk = (CONFIG_CCLK_HZ);
-
-       while (usec > 1) {
-               /*
-                * how many clock ticks to delay?
-                *  - request(in useconds) * clock_ticks(Hz) / useconds/second
-                */
-               if (usec < 1000) {
-                       delay = (usec * (cclk / 244)) >> 12;
-                       usec = 0;
-               } else {
-                       delay = (1000 * (cclk / 244)) >> 12;
-                       usec -= 1000;
-               }
-
-               asm volatile (" %0 = CYCLES;":"=r" (start));
-               do {
-                       asm volatile (" %0 = CYCLES; ":"=r" (stop));
-               } while (stop - start < delay);
-       }
-
-       return;
-}
-
-void timer_init(void)
-{
-       *pTCNTL = 0x1;
-       *pTSCALE = 0x0;
-       *pTCOUNT = MAX_TIM_LOAD;
-       *pTPERIOD = MAX_TIM_LOAD;
-       *pTCNTL = 0x7;
-       asm("CSYNC;");
-
-       timestamp = 0;
-       last_time = 0;
-}
-
-/* Any network command or flash
- * command is started get_timer shall
- * be called before TCOUNT gets reset,
- * to implement the accurate timeouts.
- *
- * How ever milliconds doesn't return
- * the number that has been elapsed from
- * the last reset.
- *
- *  As get_timer is used in the u-boot
- *  only for timeouts this should be
- *  sufficient
- */
-ulong get_timer(ulong base)
-{
-       ulong milisec;
-
-       /* Number of clocks elapsed */
-       ulong clocks = (MAX_TIM_LOAD - (*pTCOUNT));
-
-       /**
-        * Find if the TCOUNT is reset
-        * timestamp gives the number of times
-        * TCOUNT got reset
-        */
-       if (clocks < last_time)
-               timestamp++;
-       last_time = clocks;
-
-       /* Get the number of milliseconds */
-       milisec = clocks / (CONFIG_CCLK_HZ / 1000);
-
-       /**
-        * Find the number of millisonds
-        * that got elapsed before this TCOUNT cycle
-        */
-       milisec += timestamp * (MAX_TIM_LOAD / (CONFIG_CCLK_HZ / 1000));
-
-       return (milisec - base);
-}
-
-void reset_timer (void)
-{
-       timestamp = 0;
-}
 
+++ /dev/null
-/*
- * U-boot - ints.c Interrupt related routines
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on ints.c
- *
- * Apr18 2003, Changed by HuTao to support interrupt cascading for Blackfin
- *             drivers
- *
- * Copyright 1996 Roman Zippel
- * Copyright 1999 D. Jeff Dionne <jeff@uclinux.org>
- * Copyright 2000-2001 Lineo, Inc. D. Jefff Dionne <jeff@lineo.ca>
- * Copyright 2002 Arcturus Networks Inc. MaTed <mated@sympatico.ca>
- * Copyright 2003 Metrowerks/Motorola
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <linux/stddef.h>
-#include <asm/system.h>
-#include <asm/traps.h>
-#include <asm/io.h>
-#include <asm/errno.h>
-#include <asm/blackfin.h>
-#include "cpu.h"
-
-void blackfin_irq_panic(int reason, struct pt_regs *regs)
-{
-       printf("\n\nException: IRQ 0x%x entered\n", reason);
-       printf("code=[0x%x], ", (unsigned int)(regs->seqstat & 0x3f));
-       printf("stack frame=0x%x, ", (unsigned int)regs);
-       printf("bad PC=0x%04x\n", (unsigned int)regs->pc);
-       dump(regs);
-       printf("Unhandled IRQ or exceptions!\n");
-       printf("Please reset the board \n");
-}
-
-void blackfin_init_IRQ(void)
-{
-       *(unsigned volatile long *)(SIC_IMASK) = 0;
-#ifndef CONFIG_KGDB
-       *(unsigned volatile long *)(EVT1) = 0x0;
-#endif
-       *(unsigned volatile long *)(EVT2) =
-           (unsigned volatile long)evt_nmi;
-       *(unsigned volatile long *)(EVT3) =
-           (unsigned volatile long)trap;
-       *(unsigned volatile long *)(EVT5) =
-           (unsigned volatile long)evt_ivhw;
-       *(unsigned volatile long *)(EVT0) =
-           (unsigned volatile long)evt_rst;
-       *(unsigned volatile long *)(EVT6) =
-           (unsigned volatile long)evt_timer;
-       *(unsigned volatile long *)(EVT7) =
-           (unsigned volatile long)evt_evt7;
-       *(unsigned volatile long *)(EVT8) =
-           (unsigned volatile long)evt_evt8;
-       *(unsigned volatile long *)(EVT9) =
-           (unsigned volatile long)evt_evt9;
-       *(unsigned volatile long *)(EVT10) =
-           (unsigned volatile long)evt_evt10;
-       *(unsigned volatile long *)(EVT11) =
-           (unsigned volatile long)evt_evt11;
-       *(unsigned volatile long *)(EVT12) =
-           (unsigned volatile long)evt_evt12;
-       *(unsigned volatile long *)(EVT13) =
-           (unsigned volatile long)evt_evt13;
-       *(unsigned volatile long *)(EVT14) =
-           (unsigned volatile long)evt_system_call;
-       *(unsigned volatile long *)(EVT15) =
-           (unsigned volatile long)evt_soft_int1;
-       *(volatile unsigned long *)ILAT = 0;
-       asm("csync;");
-       *(volatile unsigned long *)IMASK = 0xffbf;
-       asm("csync;");
-}
-
-void exception_handle(void)
-{
-#if defined (CONFIG_PANIC_HANG)
-       display_excp();
-#else
-       udelay(100000);         /* allow messages to go out */
-       do_reset(NULL, 0, 0, NULL);
-#endif
-}
-
-void display_excp(void)
-{
-       printf("Exception!\n");
-}
 
+++ /dev/null
-/*
- * U-boot - serial.c Serial driver for BF537
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on
- * bf537_serial.c: Serial driver for BlackFin BF537 internal UART.
- * Copyright (c) 2003  Bas Vermeulen <bas@buyways.nl>,
- *                     BuyWays B.V. (www.buyways.nl)
- *
- * Based heavily on blkfinserial.c
- * blkfinserial.c: Serial driver for BlackFin DSP internal USRTs.
- * Copyright(c) 2003   Metrowerks      <mwaddel@metrowerks.com>
- * Copyright(c)        2001    Tony Z. Kou     <tonyko@arcturusnetworks.com>
- * Copyright(c)        2001-2002 Arcturus Networks Inc. <www.arcturusnetworks.com>
- *
- * Based on code from 68328 version serial driver imlpementation which was:
- * Copyright (C) 1995       David S. Miller    <davem@caip.rutgers.edu>
- * Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com>
- * Copyright (C) 1998, 1999 D. Jeff Dionne     <jeff@uclinux.org>
- * Copyright (C) 1999       Vladimir Gurevich  <vgurevic@cisco.com>
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <asm/delay.h>
-#include <asm/io.h>
-#include "serial.h"
-#include <asm/mach-common/bits/uart.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-unsigned long pll_div_fact;
-
-void calc_baud(void)
-{
-       unsigned char i;
-       int temp;
-       u_long sclk = get_sclk();
-
-       for (i = 0; i < sizeof(baud_table) / sizeof(int); i++) {
-               temp = sclk / (baud_table[i] * 8);
-               if ((temp & 0x1) == 1) {
-                       temp++;
-               }
-               temp = temp / 2;
-               hw_baud_table[i].dl_high = (temp >> 8) & 0xFF;
-               hw_baud_table[i].dl_low = (temp) & 0xFF;
-       }
-}
-
-void serial_setbrg(void)
-{
-       int i;
-
-       calc_baud();
-
-       for (i = 0; i < sizeof(baud_table) / sizeof(int); i++) {
-               if (gd->baudrate == baud_table[i])
-                       break;
-       }
-
-       /* Enable UART */
-       *pUART0_GCTL |= UCEN;
-       SSYNC();
-
-       /* Set DLAB in LCR to Access DLL and DLH */
-       ACCESS_LATCH;
-       SSYNC();
-
-       *pUART0_DLL = hw_baud_table[i].dl_low;
-       SSYNC();
-       *pUART0_DLH = hw_baud_table[i].dl_high;
-       SSYNC();
-
-       /* Clear DLAB in LCR to Access THR RBR IER */
-       ACCESS_PORT_IER;
-       SSYNC();
-
-       /* Enable  ERBFI and ELSI interrupts
-        * to poll SIC_ISR register*/
-       *pUART0_IER = ELSI | ERBFI | ETBEI;
-       SSYNC();
-
-       /* Set LCR to Word Lengh 8-bit word select */
-       *pUART0_LCR = WLS_8;
-       SSYNC();
-
-       return;
-}
-
-int serial_init(void)
-{
-       serial_setbrg();
-       return (0);
-}
-
-void serial_putc(const char c)
-{
-       if ((*pUART0_LSR) & TEMT) {
-               if (c == '\n')
-                       serial_putc('\r');
-
-               local_put_char(c);
-       }
-
-       while (!((*pUART0_LSR) & TEMT))
-               SYNC_ALL;
-
-       return;
-}
-
-int serial_tstc(void)
-{
-       if (*pUART0_LSR & DR)
-               return 1;
-       else
-               return 0;
-}
-
-int serial_getc(void)
-{
-       unsigned short uart_lsr_val, uart_rbr_val;
-       unsigned long isr_val;
-       int ret;
-
-       /* Poll for RX Interrupt */
-       while (!serial_tstc())
-               continue;
-       asm("csync;");
-
-       uart_lsr_val = *pUART0_LSR;     /* Clear status bit */
-       uart_rbr_val = *pUART0_RBR;     /* getc() */
-
-       if (uart_lsr_val & (OE|PE|FE|BI)) {
-               ret = -1;
-       } else {
-               ret = uart_rbr_val & 0xff;
-       }
-
-       return ret;
-}
-
-void serial_puts(const char *s)
-{
-       while (*s) {
-               serial_putc(*s++);
-       }
-}
-
-static void local_put_char(char ch)
-{
-       int flags = 0;
-       unsigned long isr_val;
-
-       /* Poll for TX Interruput */
-       while (!(*pUART0_LSR & THRE))
-               continue;
-       asm("csync;");
-
-       *pUART0_THR = ch;       /* putc() */
-
-       return;
-}
 
+++ /dev/null
-/*
- * U-boot - bf537_serial.h Serial Driver defines
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on
- * bf533_serial.h: Definitions for the BlackFin BF533 DSP serial driver.
- * Copyright (C) 2003  Bas Vermeulen <bas@buyways.nl>
- *                     BuyWays B.V. (www.buyways.nl)
- *
- * Based heavily on:
- * blkfinserial.h: Definitions for the BlackFin DSP serial driver.
- *
- * Copyright (C) 2001  Tony Z. Kou     tonyko@arcturusnetworks.com
- * Copyright (C) 2001   Arcturus Networks Inc. <www.arcturusnetworks.com>
- *
- * Based on code from 68328serial.c which was:
- * Copyright (C) 1995       David S. Miller    <davem@caip.rutgers.edu>
- * Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com>
- * Copyright (C) 1998, 1999 D. Jeff Dionne     <jeff@uclinux.org>
- * Copyright (C) 1999       Vladimir Gurevich  <vgurevic@cisco.com>
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#ifndef _Bf537_SERIAL_H
-#define _Bf537_SERIAL_H
-
-#include <linux/config.h>
-#include <asm/blackfin.h>
-
-#define SYNC_ALL       __asm__ __volatile__ ("ssync;\n")
-#define ACCESS_LATCH   *pUART0_LCR |= DLAB;
-#define ACCESS_PORT_IER        *pUART0_LCR &= (~DLAB);
-
-void serial_setbrg(void);
-static void local_put_char(char ch);
-void calc_baud(void);
-void serial_setbrg(void);
-int serial_init(void);
-void serial_putc(const char c);
-int serial_tstc(void);
-int serial_getc(void);
-void serial_puts(const char *s);
-static void local_put_char(char ch);
-
-int baud_table[5] = { 9600, 19200, 38400, 57600, 115200 };
-
-struct {
-       unsigned char dl_high;
-       unsigned char dl_low;
-} hw_baud_table[5];
-
-#ifdef CONFIG_STAMP
-extern unsigned long pll_div_fact;
-#endif
-
-#endif
 
+++ /dev/null
-/*
- * U-boot - start.S Startup file of u-boot for BF537
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on head.S
- * Copyright (c) 2003  Metrowerks/Motorola
- * Copyright (C) 1998  D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>,
- *                     Kenneth Albanowski <kjahds@kjahds.com>,
- *                     The Silver Hammer Group, Ltd.
- * (c) 1995, Dionne & Associates
- * (c) 1995, DKG Display Tech.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-/*
- * Note: A change in this file subsequently requires a change in
- *       board/$(board_name)/config.mk for a valid u-boot.bin
- */
-
-#define ASSEMBLY
-
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-
-#include <asm/mach-common/bits/core.h>
-#include <asm/mach-common/bits/dma.h>
-#include <asm/mach-common/bits/pll.h>
-
-.global _stext;
-.global __bss_start;
-.global start;
-.global _start;
-.global edata;
-.global _exit;
-.global init_sdram;
-.global _icache_enable;
-.global _dcache_enable;
-#if defined(CONFIG_BF537)&&defined(CONFIG_POST)
-.global _memory_post_test;
-.global _post_flag;
-#endif
-
-#if (BFIN_BOOT_MODE == BF537_UART_BOOT)
-#if (CONFIG_CCLK_DIV == 1)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV1
-#endif
-#if (CONFIG_CCLK_DIV == 2)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV2
-#endif
-#if (CONFIG_CCLK_DIV == 4)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV4
-#endif
-#if (CONFIG_CCLK_DIV == 8)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV8
-#endif
-#ifndef CONFIG_CCLK_ACT_DIV
-#define CONFIG_CCLK_ACT_DIV   CONFIG_CCLK_DIV_not_defined_properly
-#endif
-#endif
-
-.text
-_start:
-start:
-_stext:
-
-       R0 = 0x32;
-       SYSCFG = R0;
-       SSYNC;
-
-       /* As per HW reference manual DAG registers,
-        * DATA and Address resgister shall be zero'd
-        * in initialization, after a reset state
-        */
-       r1 = 0; /* Data registers zero'd */
-       r2 = 0;
-       r3 = 0;
-       r4 = 0;
-       r5 = 0;
-       r6 = 0;
-       r7 = 0;
-
-       p0 = 0; /* Address registers zero'd */
-       p1 = 0;
-       p2 = 0;
-       p3 = 0;
-       p4 = 0;
-       p5 = 0;
-
-       i0 = 0; /* DAG Registers zero'd */
-       i1 = 0;
-       i2 = 0;
-       i3 = 0;
-       m0 = 0;
-       m1 = 0;
-       m3 = 0;
-       m3 = 0;
-       l0 = 0;
-       l1 = 0;
-       l2 = 0;
-       l3 = 0;
-       b0 = 0;
-       b1 = 0;
-       b2 = 0;
-       b3 = 0;
-
-       /* Set loop counters to zero, to make sure that
-        * hw loops are disabled.
-        */
-       r0  = 0;
-       lc0 = r0;
-       lc1 = r0;
-
-       SSYNC;
-
-       /* Check soft reset status */
-       p0.h = SWRST >> 16;
-       p0.l = SWRST & 0xFFFF;
-       r0.l = w[p0];
-
-       cc = bittst(r0, 15);
-       if !cc jump no_soft_reset;
-
-       /* Clear Soft reset */
-       r0 = 0x0000;
-       w[p0] = r0;
-       ssync;
-
-no_soft_reset:
-       nop;
-
-       /* Clear EVT registers */
-       p0.h = (EVT0 >> 16);
-       p0.l = (EVT0 & 0xFFFF);
-       p0 += 8;
-       p1 = 14;
-       r1 = 0;
-       LSETUP(4,4) lc0 = p1;
-       [ p0 ++ ] = r1;
-
-#if (BFIN_BOOT_MODE != BF537_SPI_MASTER_BOOT)
-       p0.h = hi(SIC_IWR);
-       p0.l = lo(SIC_IWR);
-       r0.l = 0x1;
-       w[p0] = r0.l;
-       SSYNC;
-#endif
-
-#if (BFIN_BOOT_MODE == BF537_UART_BOOT)
-
-       p0.h = hi(SIC_IWR);
-       p0.l = lo(SIC_IWR);
-       r0.l = 0x1;
-       w[p0] = r0.l;
-       SSYNC;
-
-       /*
-       * PLL_LOCKCNT - how many SCLK Cycles to delay while PLL becomes stable
-       */
-       p0.h = hi(PLL_LOCKCNT);
-       p0.l = lo(PLL_LOCKCNT);
-       r0 = 0x300(Z);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-       * Put SDRAM in self-refresh, incase anything is running
-       */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITSET (R0, 24);
-       [P2] = R0;
-       SSYNC;
-
-       /*
-       *  Set PLL_CTL with the value that we calculate in R0
-       *   - [14:09] = MSEL[5:0] : CLKIN / VCO multiplication factors
-       *   - [8]     = BYPASS    : BYPASS the PLL, run CLKIN into CCLK/SCLK
-       *   - [7]     = output delay (add 200ps of delay to mem signals)
-       *   - [6]     = input delay (add 200ps of input delay to mem signals)
-       *   - [5]     = PDWN      : 1=All Clocks off
-       *   - [3]     = STOPCK    : 1=Core Clock off
-       *   - [1]     = PLL_OFF   : 1=Disable Power to PLL
-       *   - [0]     = DF        : 1=Pass CLKIN/2 to PLL / 0=Pass CLKIN to PLL
-       *   all other bits set to zero
-       */
-
-       r0 = CONFIG_VCO_MULT & 63;      /* Load the VCO multiplier         */
-       r0 = r0 << 9;                   /* Shift it over,                  */
-       r1 = CONFIG_CLKIN_HALF;        /* Do we need to divide CLKIN by 2?*/
-       r0 = r1 | r0;
-       r1 = CONFIG_PLL_BYPASS;         /* Bypass the PLL?                 */
-       r1 = r1 << 8;                   /* Shift it over                   */
-       r0 = r1 | r0;                   /* add them all together           */
-
-       p0.h = hi(PLL_CTL);
-       p0.l = lo(PLL_CTL);             /* Load the address                */
-       cli r2;                         /* Disable interrupts              */
-               ssync;
-       w[p0] = r0.l;                   /* Set the value                   */
-       idle;                           /* Wait for the PLL to stablize    */
-       sti r2;                         /* Enable interrupts               */
-
-check_again:
-       p0.h = hi(PLL_STAT);
-       p0.l = lo(PLL_STAT);
-       R0 = W[P0](Z);
-       CC = BITTST(R0,5);
-       if ! CC jump check_again;
-
-       /* Configure SCLK & CCLK Dividers */
-       r0 = (CONFIG_CCLK_ACT_DIV | CONFIG_SCLK_DIV);
-       p0.h = hi(PLL_DIV);
-       p0.l = lo(PLL_DIV);
-       w[p0] = r0.l;
-       ssync;
-#endif
-
-       /*
-        * We now are running at speed, time to set the Async mem bank wait states
-        * This will speed up execution, since we are normally running from FLASH.
-        * we need to read MAC address from FLASH
-        */
-       p2.h = (EBIU_AMBCTL1 >> 16);
-       p2.l = (EBIU_AMBCTL1 & 0xFFFF);
-       r0.h = (AMBCTL1VAL >> 16);
-       r0.l = (AMBCTL1VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMBCTL0 >> 16);
-       p2.l = (EBIU_AMBCTL0 & 0xFFFF);
-       r0.h = (AMBCTL0VAL >> 16);
-       r0.l = (AMBCTL0VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMGCTL >> 16);
-       p2.l = (EBIU_AMGCTL & 0xffff);
-       r0 = AMGCTLVAL;
-       w[p2] = r0;
-       ssync;
-
-#if ((BFIN_BOOT_MODE != BF537_SPI_MASTER_BOOT) && (BFIN_BOOT_MODE != BF537_UART_BOOT))
-       sp.l = (0xffb01000 & 0xFFFF);
-       sp.h = (0xffb01000 >> 16);
-
-       call init_sdram;
-#endif
-
-
-#if defined(CONFIG_BF537)&&defined(CONFIG_POST)
-       /* DMA POST code to Hi of L1 SRAM */
-postcopy:
-       /* P1 Points to the beginning of SYSTEM MMR Space */
-       P1.H = hi(SYSMMR_BASE);
-       P1.L = lo(SYSMMR_BASE);
-
-       R0.H = _text_l1;
-       R0.L = _text_l1;
-       R1.H = _etext_l1;
-       R1.L = _etext_l1;
-       R2 = R1 - R0;           /* Count */
-       R0.H = _etext;
-       R0.L = _etext;
-       R1.H = (CFG_MONITOR_BASE >> 16);
-       R1.L = (CFG_MONITOR_BASE & 0xFFFF);
-       R0 = R0 - R1;
-       R1.H = (CFG_FLASH_BASE >> 16);
-       R1.L = (CFG_FLASH_BASE & 0xFFFF);
-       R0 = R0 + R1;           /* Source Address */
-       R1.H = hi(L1_INST_SRAM);    /* Destination Address (high) */
-       R1.L = lo(L1_INST_SRAM);    /* Destination Address (low) */
-       R3.L = DMAEN;           /* Source DMAConfig Value (8-bit words) */
-       /* Destination DMAConfig Value (8-bit words) */
-       R4.L = (DI_EN | WNR | DMAEN);
-
-       R6 = 0x1 (Z);
-       W[P1+OFFSET_(MDMA_S0_X_MODIFY)] = R6;   /* Source Modify = 1 */
-       W[P1+OFFSET_(MDMA_D0_X_MODIFY)] = R6;   /* Destination Modify = 1 */
-
-       [P1+OFFSET_(MDMA_S0_START_ADDR)] = R0;  /* Set Source Base Address */
-       W[P1+OFFSET_(MDMA_S0_X_COUNT)] = R2;    /* Set Source Count */
-       /* Set Source  DMAConfig = DMA Enable,
-       Memory Read,  8-Bit Transfers, 1-D DMA, Flow - Stop */
-       W[P1+OFFSET_(MDMA_S0_CONFIG)] = R3;
-
-       [P1+OFFSET_(MDMA_D0_START_ADDR)] = R1;  /* Set Destination Base Address */
-       W[P1+OFFSET_(MDMA_D0_X_COUNT)] = R2;    /* Set Destination Count */
-       /* Set Destination DMAConfig = DMA Enable,
-       Memory Write, 8-Bit Transfers, 1-D DMA, Flow - Stop, IOC */
-       W[P1+OFFSET_(MDMA_D0_CONFIG)] = R4;
-
-POST_DMA_DONE:
-       p0.h = hi(MDMA_D0_IRQ_STATUS);
-       p0.l = lo(MDMA_D0_IRQ_STATUS);
-       R0 = W[P0](Z);
-       CC = BITTST(R0, 0);
-       if ! CC jump POST_DMA_DONE
-
-       R0 = 0x1;
-       W[P1+OFFSET_(MDMA_D0_IRQ_STATUS)] = R0; /* Write 1 to clear DMA interrupt */
-
-       /* DMA POST data to Hi of L1 SRAM */
-       R0.H = _rodata_l1;
-       R0.L = _rodata_l1;
-       R1.H = _erodata_l1;
-       R1.L = _erodata_l1;
-       R2 = R1 - R0;           /* Count */
-       R0.H = _erodata;
-       R0.L = _erodata;
-       R1.H = (CFG_MONITOR_BASE >> 16);
-       R1.L = (CFG_MONITOR_BASE & 0xFFFF);
-       R0 = R0 - R1;
-       R1.H = (CFG_FLASH_BASE >> 16);
-       R1.L = (CFG_FLASH_BASE & 0xFFFF);
-       R0 = R0 + R1;           /* Source Address */
-       R1.H = hi(DATA_BANKB_SRAM);    /* Destination Address (high) */
-       R1.L = lo(DATA_BANKB_SRAM);    /* Destination Address (low) */
-       R3.L = DMAEN;           /* Source DMAConfig Value (8-bit words) */
-       R4.L = (DI_EN | WNR | DMAEN);   /* Destination DMAConfig Value (8-bit words) */
-
-       R6 = 0x1 (Z);
-       W[P1+OFFSET_(MDMA_S0_X_MODIFY)] = R6;   /* Source Modify = 1 */
-       W[P1+OFFSET_(MDMA_D0_X_MODIFY)] = R6;   /* Destination Modify = 1 */
-
-       [P1+OFFSET_(MDMA_S0_START_ADDR)] = R0;  /* Set Source Base Address */
-       W[P1+OFFSET_(MDMA_S0_X_COUNT)] = R2;    /* Set Source Count */
-       /* Set Source  DMAConfig = DMA Enable,
-       Memory Read,  8-Bit Transfers, 1-D DMA, Flow - Stop */
-       W[P1+OFFSET_(MDMA_S0_CONFIG)] = R3;
-
-       [P1+OFFSET_(MDMA_D0_START_ADDR)] = R1;  /* Set Destination Base Address */
-       W[P1+OFFSET_(MDMA_D0_X_COUNT)] = R2;    /* Set Destination Count */
-       /* Set Destination DMAConfig = DMA Enable,
-       Memory Write, 8-Bit Transfers, 1-D DMA, Flow - Stop, IOC */
-       W[P1+OFFSET_(MDMA_D0_CONFIG)] = R4;
-
-POST_DATA_DMA_DONE:
-       p0.h = hi(MDMA_D0_IRQ_STATUS);
-       p0.l = lo(MDMA_D0_IRQ_STATUS);
-       R0 = W[P0](Z);
-       CC = BITTST(R0, 0);
-       if ! CC jump POST_DATA_DMA_DONE
-
-       R0 = 0x1;
-       W[P1+OFFSET_(MDMA_D0_IRQ_STATUS)] = R0; /* Write 1 to clear DMA interrupt */
-
-       p0.l = _memory_post_test;
-       p0.h = _memory_post_test;
-       r0 = 0x0;
-       call (p0);
-       r7 = r0;                                /* save return value */
-
-       call init_sdram;
-#endif
-
-       /* relocate into to RAM */
-       call get_pc;
-offset:
-       r2.l = offset;
-       r2.h = offset;
-       r3.l = start;
-       r3.h = start;
-       r1 = r2 - r3;
-
-       r0 = r0 - r1;
-       p1 = r0;
-
-       p2.l = (CFG_MONITOR_BASE & 0xffff);
-       p2.h = (CFG_MONITOR_BASE >> 16);
-
-       p3 = 0x04;
-       p4.l = ((CFG_MONITOR_BASE + CFG_MONITOR_LEN) & 0xffff);
-       p4.h = ((CFG_MONITOR_BASE + CFG_MONITOR_LEN) >> 16);
-loop1:
-       r1 = [p1 ++ p3];
-       [p2 ++ p3] = r1;
-       cc=p2==p4;
-       if !cc jump loop1;
-       /*
-        * configure STACK
-        */
-       r0.h = (CONFIG_STACKBASE >> 16);
-       r0.l = (CONFIG_STACKBASE & 0xFFFF);
-       sp = r0;
-       fp = sp;
-
-       /*
-        * This next section keeps the processor in supervisor mode
-        * during kernel boot.  Switches to user mode at end of boot.
-        * See page 3-9 of Hardware Reference manual for documentation.
-        */
-
-       /* To keep ourselves in the supervisor mode */
-       p0.l = (EVT15 & 0xFFFF);
-       p0.h = (EVT15 >> 16);
-
-       p1.l = _real_start;
-       p1.h = _real_start;
-       [p0] = p1;
-
-       p0.l = (IMASK & 0xFFFF);
-       p0.h = (IMASK >> 16);
-       r0.l = LO(EVT_IVG15);
-       r0.h = HI(EVT_IVG15);
-       [p0] = r0;
-       raise 15;
-       p0.l = WAIT_HERE;
-       p0.h = WAIT_HERE;
-       reti = p0;
-       rti;
-
-WAIT_HERE:
-       jump WAIT_HERE;
-
-.global _real_start;
-_real_start:
-       [ -- sp ] = reti;
-
-#ifdef CONFIG_BF537
-/* Initialise General-Purpose I/O Modules on BF537
- * Rev 0.0 Anomaly 05000212 - PORTx_FER,
- * PORT_MUX Registers Do Not accept "writes" correctly
- */
-       p0.h = hi(PORTF_FER);
-       p0.l = lo(PORTF_FER);
-       R0.L = W[P0]; /* Read */
-       nop;
-       nop;
-       nop;
-       ssync;
-       R0 = 0x000F(Z);
-       W[P0] = R0.L; /* Write */
-       nop;
-       nop;
-       nop;
-       ssync;
-       W[P0] = R0.L; /* Enable peripheral function of PORTF for UART0 and UART1 */
-       nop;
-       nop;
-       nop;
-       ssync;
-
-       p0.h = hi(PORTH_FER);
-       p0.l = lo(PORTH_FER);
-       R0.L = W[P0]; /* Read */
-       nop;
-       nop;
-       nop;
-       ssync;
-       R0 = 0xFFFF(Z);
-       W[P0] = R0.L; /* Write */
-       nop;
-       nop;
-       nop;
-       ssync;
-       W[P0] = R0.L; /* Enable peripheral function of PORTH for MAC */
-       nop;
-       nop;
-       nop;
-       ssync;
-
-#endif
-
-       /* DMA reset code to Hi of L1 SRAM */
-copy:
-       P1.H = hi(SYSMMR_BASE); /* P1 Points to the beginning of SYSTEM MMR Space */
-       P1.L = lo(SYSMMR_BASE);
-
-       R0.H = reset_start;     /* Source Address (high) */
-       R0.L = reset_start;     /* Source Address (low) */
-       R1.H = reset_end;
-       R1.L = reset_end;
-       R2 = R1 - R0;           /* Count */
-       R1.H = hi(L1_INST_SRAM);        /* Destination Address (high) */
-       R1.L = lo(L1_INST_SRAM);        /* Destination Address (low) */
-       R3.L = DMAEN;           /* Source DMAConfig Value (8-bit words) */
-       R4.L = (DI_EN | WNR | DMAEN);   /* Destination DMAConfig Value (8-bit words) */
-
-DMA:
-       R6 = 0x1 (Z);
-       W[P1+OFFSET_(MDMA_S0_X_MODIFY)] = R6;   /* Source Modify = 1 */
-       W[P1+OFFSET_(MDMA_D0_X_MODIFY)] = R6;   /* Destination Modify = 1 */
-
-       [P1+OFFSET_(MDMA_S0_START_ADDR)] = R0;  /* Set Source Base Address */
-       W[P1+OFFSET_(MDMA_S0_X_COUNT)] = R2;    /* Set Source Count */
-       /* Set Source  DMAConfig = DMA Enable,
-       Memory Read,  8-Bit Transfers, 1-D DMA, Flow - Stop */
-       W[P1+OFFSET_(MDMA_S0_CONFIG)] = R3;
-
-       [P1+OFFSET_(MDMA_D0_START_ADDR)] = R1;  /* Set Destination Base Address */
-       W[P1+OFFSET_(MDMA_D0_X_COUNT)] = R2;    /* Set Destination Count */
-       /* Set Destination DMAConfig = DMA Enable,
-       Memory Write, 8-Bit Transfers, 1-D DMA, Flow - Stop, IOC */
-       W[P1+OFFSET_(MDMA_D0_CONFIG)] = R4;
-
-WAIT_DMA_DONE:
-       p0.h = hi(MDMA_D0_IRQ_STATUS);
-       p0.l = lo(MDMA_D0_IRQ_STATUS);
-       R0 = W[P0](Z);
-       CC = BITTST(R0, 0);
-       if ! CC jump WAIT_DMA_DONE
-
-       R0 = 0x1;
-       W[P1+OFFSET_(MDMA_D0_IRQ_STATUS)] = R0; /* Write 1 to clear DMA interrupt */
-
-       /* Initialize BSS Section with 0 s */
-       p1.l = __bss_start;
-       p1.h = __bss_start;
-       p2.l = _end;
-       p2.h = _end;
-       r1 = p1;
-       r2 = p2;
-       r3 = r2 - r1;
-       r3 = r3 >> 2;
-       p3 = r3;
-       lsetup (_clear_bss, _clear_bss_end ) lc1 = p3;
-       CC = p2<=p1;
-       if CC jump _clear_bss_skip;
-       r0 = 0;
-_clear_bss:
-_clear_bss_end:
-       [p1++] = r0;
-_clear_bss_skip:
-
-#if defined(CONFIG_BF537)&&defined(CONFIG_POST)
-       p0.l = _post_flag;
-       p0.h = _post_flag;
-       r0   = r7;
-       [p0] = r0;
-#endif
-
-       p0.l = _start1;
-       p0.h = _start1;
-       jump (p0);
-
-reset_start:
-       p0.h = WDOG_CNT >> 16;
-       p0.l = WDOG_CNT & 0xffff;
-       r0 = 0x0010;
-       w[p0] = r0;
-       p0.h = WDOG_CTL >> 16;
-       p0.l = WDOG_CTL & 0xffff;
-       r0 = 0x0000;
-       w[p0] = r0;
-reset_wait:
-       jump reset_wait;
-
-reset_end:
-       nop;
-
-_exit:
-       jump.s  _exit;
-get_pc:
-       r0 = rets;
-       rts;
 
+++ /dev/null
-/*
- * U-boot - start1.S Code running out of RAM after relocation
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#define ASSEMBLY
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-
-.global        start1;
-.global        _start1;
-
-.text
-_start1:
-start1:
-       sp += -12;
-       call    _board_init_f;
-       sp += 12;
 
+++ /dev/null
-/*
- * U-boot - traps.c Routines related to interrupts and exceptions
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on
- * No original Copyright holder listed,
- * Probabily original (C) Roman Zippel (assigned DJD, 1999)
- *
- * Copyright 2003 Metrowerks - for Blackfin
- * Copyright 2000-2001 Lineo, Inc. D. Jeff Dionne <jeff@lineo.ca>
- * Copyright 1999-2000 D. Jeff Dionne, <jeff@uclinux.org>
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <linux/types.h>
-#include <asm/errno.h>
-#include <asm/system.h>
-#include <asm/traps.h>
-#include "cpu.h"
-#include <asm/cplb.h>
-#include <asm/io.h>
-#include <asm/mach-common/bits/core.h>
-#include <asm/mach-common/bits/mpu.h>
-
-void init_IRQ(void)
-{
-       blackfin_init_IRQ();
-       return;
-}
-
-void process_int(unsigned long vec, struct pt_regs *fp)
-{
-       printf("interrupt\n");
-       return;
-}
-
-extern unsigned int icplb_table[page_descriptor_table_size][2];
-extern unsigned int dcplb_table[page_descriptor_table_size][2];
-
-unsigned long last_cplb_fault_retx;
-
-static unsigned int cplb_sizes[4] =
-    { 1024, 4 * 1024, 1024 * 1024, 4 * 1024 * 1024 };
-
-void trap_c(struct pt_regs *regs)
-{
-       unsigned int addr;
-       unsigned long trapnr = (regs->seqstat) & EXCAUSE;
-       unsigned int i, j, size, *I0, *I1;
-       unsigned short data = 0;
-
-       switch (trapnr) {
-               /* 0x26 - Data CPLB Miss */
-       case VEC_CPLB_M:
-
-#if ANOMALY_05000261
-               /*
-                * Work around an anomaly: if we see a new DCPLB fault,
-                * return without doing anything. Then,
-                * if we get the same fault again, handle it.
-                */
-               addr = last_cplb_fault_retx;
-               last_cplb_fault_retx = regs->retx;
-               printf("this time, curr = 0x%08x last = 0x%08x\n",
-                      addr, last_cplb_fault_retx);
-               if (addr != last_cplb_fault_retx)
-                       goto trap_c_return;
-#endif
-               data = 1;
-
-       case VEC_CPLB_I_M:
-
-               if (data) {
-                       addr = *pDCPLB_FAULT_ADDR;
-               } else {
-                       addr = *pICPLB_FAULT_ADDR;
-               }
-               for (i = 0; i < page_descriptor_table_size; i++) {
-                       if (data) {
-                               size = cplb_sizes[dcplb_table[i][1] >> 16];
-                               j = dcplb_table[i][0];
-                       } else {
-                               size = cplb_sizes[icplb_table[i][1] >> 16];
-                               j = icplb_table[i][0];
-                       }
-                       if ((j <= addr) && ((j + size) > addr)) {
-                               debug("found %i 0x%08x\n", i, j);
-                               break;
-                       }
-               }
-               if (i == page_descriptor_table_size) {
-                       printf("something is really wrong\n");
-                       do_reset(NULL, 0, 0, NULL);
-               }
-
-               /* Turn the cache off */
-               if (data) {
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)DMEM_CONTROL &=
-                           ~(ACACHE_BCACHE | ENDCPLB | PORT_PREF0);
-                       SSYNC();
-               } else {
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)IMEM_CONTROL &= ~(IMC | ENICPLB);
-                       SSYNC();
-               }
-
-               if (data) {
-                       I0 = (unsigned int *)DCPLB_ADDR0;
-                       I1 = (unsigned int *)DCPLB_DATA0;
-               } else {
-                       I0 = (unsigned int *)ICPLB_ADDR0;
-                       I1 = (unsigned int *)ICPLB_DATA0;
-               }
-
-               j = 0;
-               while (*I1 & CPLB_LOCK) {
-                       debug("skipping %i %08p - %08x\n", j, I1, *I1);
-                       *I0++;
-                       *I1++;
-                       j++;
-               }
-
-               debug("remove %i 0x%08x  0x%08x\n", j, *I0, *I1);
-
-               for (; j < 15; j++) {
-                       debug("replace %i 0x%08x  0x%08x\n", j, I0, I0 + 1);
-                       *I0++ = *(I0 + 1);
-                       *I1++ = *(I1 + 1);
-               }
-
-               if (data) {
-                       *I0 = dcplb_table[i][0];
-                       *I1 = dcplb_table[i][1];
-                       I0 = (unsigned int *)DCPLB_ADDR0;
-                       I1 = (unsigned int *)DCPLB_DATA0;
-               } else {
-                       *I0 = icplb_table[i][0];
-                       *I1 = icplb_table[i][1];
-                       I0 = (unsigned int *)ICPLB_ADDR0;
-                       I1 = (unsigned int *)ICPLB_DATA0;
-               }
-
-               for (j = 0; j < 16; j++) {
-                       debug("%i 0x%08x  0x%08x\n", j, *I0++, *I1++);
-               }
-
-               /* Turn the cache back on */
-               if (data) {
-                       j = *(unsigned int *)DMEM_CONTROL;
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)DMEM_CONTROL =
-                           ACACHE_BCACHE | ENDCPLB | PORT_PREF0 | j;
-                       SSYNC();
-               } else {
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)IMEM_CONTROL = IMC | ENICPLB;
-                       SSYNC();
-               }
-
-               break;
-       default:
-               /* All traps come here */
-               printf("code=[0x%x], ", (unsigned int)(regs->seqstat & 0x3f));
-               printf("stack frame=0x%x, ", (unsigned int)regs);
-               printf("bad PC=0x%04x\n", (unsigned int)regs->pc);
-               dump(regs);
-               printf("\n\n");
-
-               printf("Unhandled IRQ or exceptions!\n");
-               printf("Please reset the board \n");
-               do_reset(NULL, 0, 0, NULL);
-       }
-
-trap_c_return:
-       return;
-
-}
-
-void dump(struct pt_regs *fp)
-{
-       debug("RETE:  %08lx  RETN: %08lx  RETX: %08lx  RETS: %08lx\n",
-                fp->rete, fp->retn, fp->retx, fp->rets);
-       debug("IPEND: %04lx  SYSCFG: %04lx\n", fp->ipend, fp->syscfg);
-       debug("SEQSTAT: %08lx    SP: %08lx\n", (long)fp->seqstat, (long)fp);
-       debug("R0: %08lx    R1: %08lx    R2: %08lx    R3: %08lx\n",
-                fp->r0, fp->r1, fp->r2, fp->r3);
-       debug("R4: %08lx    R5: %08lx    R6: %08lx    R7: %08lx\n",
-                fp->r4, fp->r5, fp->r6, fp->r7);
-       debug("P0: %08lx    P1: %08lx    P2: %08lx    P3: %08lx\n",
-                fp->p0, fp->p1, fp->p2, fp->p3);
-       debug("P4: %08lx    P5: %08lx    FP: %08lx\n",
-                fp->p4, fp->p5, fp->fp);
-       debug("A0.w: %08lx    A0.x: %08lx    A1.w: %08lx    A1.x: %08lx\n",
-                fp->a0w, fp->a0x, fp->a1w, fp->a1x);
-
-       debug("LB0: %08lx  LT0: %08lx  LC0: %08lx\n",
-                fp->lb0, fp->lt0, fp->lc0);
-       debug("LB1: %08lx  LT1: %08lx  LC1: %08lx\n",
-                fp->lb1, fp->lt1, fp->lc1);
-       debug("B0: %08lx  L0: %08lx  M0: %08lx  I0: %08lx\n",
-                fp->b0, fp->l0, fp->m0, fp->i0);
-       debug("B1: %08lx  L1: %08lx  M1: %08lx  I1: %08lx\n",
-                fp->b1, fp->l1, fp->m1, fp->i1);
-       debug("B2: %08lx  L2: %08lx  M2: %08lx  I2: %08lx\n",
-                fp->b2, fp->l2, fp->m2, fp->i2);
-       debug("B3: %08lx  L3: %08lx  M3: %08lx  I3: %08lx\n",
-                fp->b3, fp->l3, fp->m3, fp->i3);
-
-       debug("DCPLB_FAULT_ADDR=%p\n", *pDCPLB_FAULT_ADDR);
-       debug("ICPLB_FAULT_ADDR=%p\n", *pICPLB_FAULT_ADDR);
-
-}
 
+++ /dev/null
-/*
- * (C) Copyright 2000
- * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
- * (C) Copyright 2002
- * Wolfgang Denk, wd@denx.de
- * (C) Copyright 2006
- * Aubrey Li, aubrey.li@analog.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
- */
-
-#include <stdarg.h>
-#include <common.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <i2c.h>
-#include <linux/types.h>
-#include <devices.h>
-
-#ifdef CONFIG_VIDEO
-#define NTSC_FRAME_ADDR 0x06000000
-#include "video.h"
-
-/* NTSC OUTPUT SIZE  720 * 240 */
-#define VERTICAL       2
-#define HORIZONTAL     4
-
-int is_vblank_line(const int line)
-{
-       /*
-        *  This array contains a single bit for each line in
-        *  an NTSC frame.
-        */
-       if ((line <= 18) || (line >= 264 && line <= 281) || (line == 528))
-               return true;
-
-       return false;
-}
-
-int NTSC_framebuffer_init(char *base_address)
-{
-       const int NTSC_frames = 1;
-       const int NTSC_lines = 525;
-       char *dest = base_address;
-       int frame_num, line_num;
-
-       for (frame_num = 0; frame_num < NTSC_frames; ++frame_num) {
-               for (line_num = 1; line_num <= NTSC_lines; ++line_num) {
-                       unsigned int code;
-                       int offset = 0;
-                       int i;
-
-                       if (is_vblank_line(line_num))
-                               offset++;
-
-                       if (line_num > 266 || line_num < 3)
-                               offset += 2;
-
-                       /* Output EAV code */
-                       code = SystemCodeMap[offset].EAV;
-                       write_dest_byte((char)(code >> 24) & 0xff);
-                       write_dest_byte((char)(code >> 16) & 0xff);
-                       write_dest_byte((char)(code >> 8) & 0xff);
-                       write_dest_byte((char)(code) & 0xff);
-
-                       /* Output horizontal blanking */
-                       for (i = 0; i < 67 * 2; ++i) {
-                               write_dest_byte(0x80);
-                               write_dest_byte(0x10);
-                       }
-
-                       /* Output SAV */
-                       code = SystemCodeMap[offset].SAV;
-                       write_dest_byte((char)(code >> 24) & 0xff);
-                       write_dest_byte((char)(code >> 16) & 0xff);
-                       write_dest_byte((char)(code >> 8) & 0xff);
-                       write_dest_byte((char)(code) & 0xff);
-
-                       /* Output empty horizontal data */
-                       for (i = 0; i < 360 * 2; ++i) {
-                               write_dest_byte(0x80);
-                               write_dest_byte(0x10);
-                       }
-               }
-       }
-
-       return dest - base_address;
-}
-
-void fill_frame(char *Frame, int Value)
-{
-       int *OddPtr32;
-       int OddLine;
-       int *EvenPtr32;
-       int EvenLine;
-       int i;
-       int *data;
-       int m, n;
-
-       /* fill odd and even frames */
-       for (OddLine = 22, EvenLine = 285; OddLine < 263; OddLine++, EvenLine++) {
-               OddPtr32 = (int *)((Frame + (OddLine * 1716)) + 276);
-               EvenPtr32 = (int *)((Frame + (EvenLine * 1716)) + 276);
-               for (i = 0; i < 360; i++, OddPtr32++, EvenPtr32++) {
-                       *OddPtr32 = Value;
-                       *EvenPtr32 = Value;
-               }
-       }
-
-       for (m = 0; m < VERTICAL; m++) {
-               data = (int *)u_boot_logo.data;
-               for (OddLine = (22 + m), EvenLine = (285 + m);
-                    OddLine < (u_boot_logo.height * VERTICAL) + (22 + m);
-                    OddLine += VERTICAL, EvenLine += VERTICAL) {
-                       OddPtr32 = (int *)((Frame + ((OddLine) * 1716)) + 276);
-                       EvenPtr32 =
-                           (int *)((Frame + ((EvenLine) * 1716)) + 276);
-                       for (i = 0; i < u_boot_logo.width / 2; i++) {
-                               /* enlarge one pixel to m x n */
-                               for (n = 0; n < HORIZONTAL; n++) {
-                                       *OddPtr32++ = *data;
-                                       *EvenPtr32++ = *data;
-                               }
-                               data++;
-                       }
-               }
-       }
-}
-
-void video_putc(const char c)
-{
-}
-
-void video_puts(const char *s)
-{
-}
-
-static int video_init(void)
-{
-       char *NTSCFrame;
-       NTSCFrame = (char *)NTSC_FRAME_ADDR;
-       NTSC_framebuffer_init(NTSCFrame);
-       fill_frame(NTSCFrame, BLUE);
-
-       *pPPI_CONTROL = 0x0082;
-       *pPPI_FRAME = 0x020D;
-
-       *pDMA0_START_ADDR = NTSCFrame;
-       *pDMA0_X_COUNT = 0x035A;
-       *pDMA0_X_MODIFY = 0x0002;
-       *pDMA0_Y_COUNT = 0x020D;
-       *pDMA0_Y_MODIFY = 0x0002;
-       *pDMA0_CONFIG = 0x1015;
-       *pPPI_CONTROL = 0x0083;
-       return 0;
-}
-
-int drv_video_init(void)
-{
-       int error, devices = 1;
-
-       device_t videodev;
-
-       video_init();           /* Video initialization */
-
-       memset(&videodev, 0, sizeof(videodev));
-
-       strcpy(videodev.name, "video");
-       videodev.ext = DEV_EXT_VIDEO;   /* Video extensions */
-       videodev.flags = DEV_FLAGS_OUTPUT;      /* Output only */
-       videodev.putc = video_putc;     /* 'putc' function */
-       videodev.puts = video_puts;     /* 'puts' function */
-
-       error = device_register(&videodev);
-
-       return (error == 0) ? devices : error;
-}
-#endif
 
+++ /dev/null
-#include <video_logo.h>
-#define write_dest_byte(val) {*dest++=val;}
-#define BLACK   (0x01800180)   /* black pixel pattern  */
-#define BLUE    (0x296E29F0)   /* blue pixel pattern   */
-#define RED     (0x51F0515A)   /* red pixel pattern    */
-#define MAGENTA (0x6ADE6ACA)   /* magenta pixel pattern*/
-#define GREEN   (0x91229136)   /* green pixel pattern  */
-#define CYAN    (0xAA10AAA6)   /* cyan pixel pattern   */
-#define YELLOW  (0xD292D210)   /* yellow pixel pattern */
-#define WHITE   (0xFE80FE80)   /* white pixel pattern  */
-
-#define true   1
-#define false  0
-
-typedef struct {
-       unsigned int SAV;
-       unsigned int EAV;
-} SystemCodeType;
-
-const SystemCodeType SystemCodeMap[4] = {
-       {0xFF000080, 0xFF00009D},
-       {0xFF0000AB, 0xFF0000B6},
-       {0xFF0000C7, 0xFF0000DA},
-       {0xFF0000EC, 0xFF0000F1}
-};
 
+++ /dev/null
-# U-boot - Makefile
-#
-# Copyright (c) 2005-2007 Analog Devices Inc.
-#
-# (C) Copyright 2000-2004
-# 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., 51 Franklin St, Fifth Floor, Boston,
-# MA 02110-1301 USA
-#
-
-include $(TOPDIR)/config.mk
-
-LIB    = $(obj)lib$(CPU).a
-
-SOBJS  = start.o start1.o interrupt.o cache.o flush.o init_sdram.o
-COBJS  = cpu.o traps.o ints.o serial.o interrupts.o video.o
-
-EXTRA = init_sdram_bootrom_initblock.o
-
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
-START  := $(addprefix $(obj),$(START))
-
-all:   $(obj).depend $(START) $(LIB) $(obj).depend $(EXTRA)
-
-$(LIB):        $(OBJS)
-       $(AR) $(ARFLAGS) $@ $(OBJS)
-
-#########################################################################
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
 
+++ /dev/null
-#define ASSEMBLY
-#include <asm/linkage.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/mach-common/bits/mpu.h>
-
-.text
-.align 2
-ENTRY(_blackfin_icache_flush_range)
-       R2 = -32;
-       R2 = R0 & R2;
-       P0 = R2;
-       P1 = R1;
-       CSYNC;
-       1:
-       IFLUSH[P0++];
-       CC = P0 < P1(iu);
-       IF CC JUMP 1b(bp);
-       IFLUSH[P0];
-       SSYNC;
-       RTS;
-
-ENTRY(_blackfin_dcache_flush_range)
-       R2 = -32;
-       R2 = R0 & R2;
-       P0 = R2;
-       P1 = R1;
-       CSYNC;
-1:
-       FLUSH[P0++];
-       CC = P0 < P1(iu);
-       IF CC JUMP 1b(bp);
-       FLUSH[P0];
-       SSYNC;
-       RTS;
-
-ENTRY(_icache_invalidate)
-ENTRY(_invalidate_entire_icache)
-       [--SP] = (R7:5);
-
-       P0.L = (IMEM_CONTROL & 0xFFFF);
-       P0.H = (IMEM_CONTROL >> 16);
-       R7 =[P0];
-
-       /*
-        * Clear the IMC bit , All valid bits in the instruction
-        * cache are set to the invalid state
-        */
-       BITCLR(R7, IMC_P);
-       CLI R6;
-       /* SSYNC required before invalidating cache. */
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-
-       /* Configures the instruction cache agian */
-       R6 = (IMC | ENICPLB);
-       R7 = R7 | R6;
-
-       CLI R6;
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-
-       (R7:5) =[SP++];
-       RTS;
-
-/*
- * Invalidate the Entire Data cache by
- * clearing DMC[1:0] bits
- */
-ENTRY(_invalidate_entire_dcache)
-ENTRY(_dcache_invalidate)
-       [--SP] = (R7:6);
-
-       P0.L = (DMEM_CONTROL & 0xFFFF);
-       P0.H = (DMEM_CONTROL >> 16);
-       R7 =[P0];
-
-       /*
-        * Clear the DMC[1:0] bits, All valid bits in the data
-        * cache are set to the invalid state
-        */
-       BITCLR(R7, DMC0_P);
-       BITCLR(R7, DMC1_P);
-       CLI R6;
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-       /* Configures the data cache again */
-
-       R6 = (ACACHE_BCACHE | ENDCPLB | PORT_PREF0);
-       R7 = R7 | R6;
-
-       CLI R6;
-       SSYNC;
-       .align 8;
-       [P0] = R7;
-       SSYNC;
-       STI R6;
-
-       (R7:6) =[SP++];
-       RTS;
-
-ENTRY(_blackfin_dcache_invalidate_range)
-       R2 = -32;
-       R2 = R0 & R2;
-       P0 = R2;
-       P1 = R1;
-       CSYNC;
-1:
-       FLUSHINV[P0++];
-       CC = P0 < P1(iu);
-       IF CC JUMP 1b(bp);
-
-       /*
-        * If the data crosses a cache line, then we'll be pointing to
-        * the last cache line, but won't have flushed/invalidated it yet, so do
-        * one more.
-        */
-       FLUSHINV[P0];
-       SSYNC;
-       RTS;
 
+++ /dev/null
-# U-boot - config.mk
-#
-# Copyright (c) 2005-2007 Analog Devices Inc.
-#
-# (C) Copyright 2000-2004
-# 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., 51 Franklin St, Fifth Floor, Boston,
-# MA 02110-1301 USA
-#
-
-PLATFORM_RELFLAGS += -mcpu=bf561
 
+++ /dev/null
-/*
- * U-boot - cpu.c CPU specific functions
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <asm/blackfin.h>
-#include <command.h>
-#include <asm/entry.h>
-#include <asm/cplb.h>
-#include <asm/io.h>
-
-#define CACHE_ON 1
-#define CACHE_OFF 0
-
-extern unsigned int icplb_table[page_descriptor_table_size][2];
-extern unsigned int dcplb_table[page_descriptor_table_size][2];
-
-int do_reset(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
-{
-       __asm__ __volatile__("cli r3;" "P0 = %0;" "JUMP (P0);"::"r"(L1_INST_SRAM)
-           );
-
-       return 0;
-}
-
-/* These functions are just used to satisfy the linker */
-int cpu_init(void)
-{
-       return 0;
-}
-
-int cleanup_before_linux(void)
-{
-       return 0;
-}
-
-void icache_enable(void)
-{
-       unsigned int *I0, *I1;
-       int i, j = 0;
-
-       /* Before enable icache, disable it first */
-       icache_disable();
-       I0 = (unsigned int *)ICPLB_ADDR0;
-       I1 = (unsigned int *)ICPLB_DATA0;
-
-       /* make sure the locked ones go in first */
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (CPLB_LOCK & icplb_table[i][1]) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                             icplb_table[i][0], icplb_table[i][1]);
-                       *I0++ = icplb_table[i][0];
-                       *I1++ = icplb_table[i][1];
-                       j++;
-               }
-       }
-
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (!(CPLB_LOCK & icplb_table[i][1])) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                             icplb_table[i][0], icplb_table[i][1]);
-                       *I0++ = icplb_table[i][0];
-                       *I1++ = icplb_table[i][1];
-                       j++;
-                       if (j == 16) {
-                               break;
-                       }
-               }
-       }
-
-       /* Fill the rest with invalid entry */
-       if (j <= 15) {
-               for (; j < 16; j++) {
-                       debug("filling %i with 0", j);
-                       *I1++ = 0x0;
-               }
-
-       }
-
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)IMEM_CONTROL = IMC | ENICPLB;
-       SSYNC();
-}
-
-void icache_disable(void)
-{
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)IMEM_CONTROL &= ~(IMC | ENICPLB);
-       SSYNC();
-}
-
-int icache_status(void)
-{
-       unsigned int value;
-       value = *(unsigned int *)IMEM_CONTROL;
-
-       if (value & (IMC | ENICPLB))
-               return CACHE_ON;
-       else
-               return CACHE_OFF;
-}
-
-void dcache_enable(void)
-{
-       unsigned int *I0, *I1;
-       unsigned int temp;
-       int i, j = 0;
-
-       /* Before enable dcache, disable it first */
-       dcache_disable();
-       I0 = (unsigned int *)DCPLB_ADDR0;
-       I1 = (unsigned int *)DCPLB_DATA0;
-
-       /* make sure the locked ones go in first */
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (CPLB_LOCK & dcplb_table[i][1]) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                             dcplb_table[i][0], dcplb_table[i][1]);
-                       *I0++ = dcplb_table[i][0];
-                       *I1++ = dcplb_table[i][1];
-                       j++;
-               } else {
-                       debug("skip   %02i %02i 0x%08x 0x%08x\n", i, j,
-                             dcplb_table[i][0], dcplb_table[i][1]);
-               }
-       }
-
-       for (i = 0; i < page_descriptor_table_size; i++) {
-               if (!(CPLB_LOCK & dcplb_table[i][1])) {
-                       debug("adding %02i %02i 0x%08x 0x%08x\n", i, j,
-                             dcplb_table[i][0], dcplb_table[i][1]);
-                       *I0++ = dcplb_table[i][0];
-                       *I1++ = dcplb_table[i][1];
-                       j++;
-                       if (j == 16) {
-                               break;
-                       }
-               }
-       }
-
-       /* Fill the rest with invalid entry */
-       if (j <= 15) {
-               for (; j < 16; j++) {
-                       debug("filling %i with 0", j);
-                       *I1++ = 0x0;
-               }
-       }
-
-       temp = *(unsigned int *)DMEM_CONTROL;
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)DMEM_CONTROL =
-           ACACHE_BCACHE | ENDCPLB | PORT_PREF0 | temp;
-       SSYNC();
-}
-
-void dcache_disable(void)
-{
-
-       unsigned int *I0, *I1;
-       int i;
-
-       SSYNC();
-       asm(" .align 8; ");
-       *(unsigned int *)DMEM_CONTROL &=
-           ~(ACACHE_BCACHE | ENDCPLB | PORT_PREF0);
-       SSYNC();
-
-       /* after disable dcache, clear it so we don't confuse the next application */
-       I0 = (unsigned int *)DCPLB_ADDR0;
-       I1 = (unsigned int *)DCPLB_DATA0;
-
-       for (i = 0; i < 16; i++) {
-               *I0++ = 0x0;
-               *I1++ = 0x0;
-       }
-}
-
-int dcache_status(void)
-{
-       unsigned int value;
-       value = *(unsigned int *)DMEM_CONTROL;
-       if (value & (ENDCPLB))
-               return CACHE_ON;
-       else
-               return CACHE_OFF;
-}
 
+++ /dev/null
-/*
- *  U-boot - cpu.h
- *
- *  Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#ifndef _CPU_H_
-#define _CPU_H_
-
-#include <command.h>
-
-#define INTERNAL_IRQS (32)
-#define NUM_IRQ_NODES 16
-#define DEF_INTERRUPT_FLAGS 1
-#define MAX_TIM_LOAD   0xFFFFFFFF
-
-void blackfin_irq_panic(int reason, struct pt_regs *reg);
-extern void dump(struct pt_regs *regs);
-void display_excp(void);
-asmlinkage void evt_nmi(void);
-asmlinkage void evt_exception(void);
-asmlinkage void trap(void);
-asmlinkage void evt_ivhw(void);
-asmlinkage void evt_rst(void);
-asmlinkage void evt_timer(void);
-asmlinkage void evt_evt7(void);
-asmlinkage void evt_evt8(void);
-asmlinkage void evt_evt9(void);
-asmlinkage void evt_evt10(void);
-asmlinkage void evt_evt11(void);
-asmlinkage void evt_evt12(void);
-asmlinkage void evt_evt13(void);
-asmlinkage void evt_soft_int1(void);
-asmlinkage void evt_system_call(void);
-void blackfin_irq_panic(int reason, struct pt_regs *regs);
-void blackfin_free_irq(unsigned int irq, void *dev_id);
-void call_isr(int irq, struct pt_regs *fp);
-void blackfin_do_irq(int vec, struct pt_regs *fp);
-void blackfin_init_IRQ(void);
-void blackfin_enable_irq(unsigned int irq);
-void blackfin_disable_irq(unsigned int irq);
-extern int do_reset(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]);
-int blackfin_request_irq(unsigned int irq,
-                        void (*handler) (int, void *, struct pt_regs *),
-                        unsigned long flags, const char *devname,
-                        void *dev_id);
-void timer_init(void);
-#endif
 
+++ /dev/null
-/* Copyright (C) 2003-2007 Analog Devices Inc.
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.
- */
-
-#define ASSEMBLY
-
-#include <asm/linkage.h>
-#include <asm/cplb.h>
-#include <config.h>
-#include <asm/blackfin.h>
-
-.text
-
-/* This is an external function being called by the user
- * application through __flush_cache_all. Currently this function
- * serves the purpose of flushing all the pending writes in
- * in the instruction cache.
- */
-
-ENTRY(_flush_instruction_cache)
-       [--SP] = ( R7:6, P5:4 );
-       LINK 12;
-       SP += -12;
-       P5.H = (ICPLB_ADDR0 >> 16);
-       P5.L = (ICPLB_ADDR0 & 0xFFFF);
-       P4.H = (ICPLB_DATA0 >> 16);
-       P4.L = (ICPLB_DATA0 & 0xFFFF);
-       R7 = CPLB_VALID | CPLB_L1_CHBL;
-       R6 = 16;
-inext: R0 = [P5++];
-       R1 = [P4++];
-       [--SP] =  RETS;
-       CALL _icplb_flush;      /* R0 = page, R1 = data*/
-       RETS = [SP++];
-iskip: R6 += -1;
-       CC = R6;
-       IF CC JUMP inext;
-       SSYNC;
-       SP += 12;
-       UNLINK;
-       ( R7:6, P5:4 ) = [SP++];
-       RTS;
-
-/* This is an internal function to flush all pending
- * writes in the cache associated with a particular ICPLB.
- *
- * R0 -  page's start address
- * R1 -  CPLB's data field.
- */
-
-.align 2
-ENTRY(_icplb_flush)
-       [--SP] = ( R7:0, P5:0 );
-       [--SP] = LC0;
-       [--SP] = LT0;
-       [--SP] = LB0;
-       [--SP] = LC1;
-       [--SP] = LT1;
-       [--SP] = LB1;
-
-       /* If it's a 1K or 4K page, then it's quickest to
-        * just systematically flush all the addresses in
-        * the page, regardless of whether they're in the
-        * cache, or dirty. If it's a 1M or 4M page, there
-        * are too many addresses, and we have to search the
-        * cache for lines corresponding to the page.
-        */
-
-       CC = BITTST(R1, 17);    /* 1MB or 4MB */
-       IF !CC JUMP iflush_whole_page;
-
-       /* We're only interested in the page's size, so extract
-        * this from the CPLB (bits 17:16), and scale to give an
-        * offset into the page_size and page_prefix tables.
-        */
-
-       R1 <<= 14;
-       R1 >>= 30;
-       R1 <<= 2;
-
-       /* We can also determine the sub-bank used, because this is
-        * taken from bits 13:12 of the address.
-        */
-
-       R3 = ((12<<8)|2);               /* Extraction pattern */
-       nop;                            /*Anamoly 05000209*/
-       R4 = EXTRACT(R0, R3.L) (Z);     /* Extract bits*/
-       R3.H = R4.L << 0 ;              /* Save in extraction pattern for later deposit.*/
-
-
-       /* So:
-        * R0 = Page start
-        * R1 = Page length (actually, offset into size/prefix tables)
-        * R3 = sub-bank deposit values
-        *
-        * The cache has 2 Ways, and 64 sets, so we iterate through
-        * the sets, accessing the tag for each Way, for our Bank and
-        * sub-bank, looking for dirty, valid tags that match our
-        * address prefix.
-        */
-
-       P5.L = (ITEST_COMMAND & 0xFFFF);
-       P5.H = (ITEST_COMMAND >> 16);
-       P4.L = (ITEST_DATA0 & 0xFFFF);
-       P4.H = (ITEST_DATA0 >> 16);
-
-       P0.L = page_prefix_table;
-       P0.H = page_prefix_table;
-       P1 = R1;
-       R5 = 0;                 /* Set counter*/
-       P0 = P1 + P0;
-       R4 = [P0];              /* This is the address prefix*/
-
-       /* We're reading (bit 1==0) the tag (bit 2==0), and we
-        * don't care about which double-word, since we're only
-        * fetching tags, so we only have to set Set, Bank,
-        * Sub-bank and Way.
-        */
-
-       P2 = 4;
-       LSETUP (ifs1, ife1) LC1 = P2;
-ifs1:  P0 = 32;                /* iterate over all sets*/
-       LSETUP (ifs0, ife0) LC0 = P0;
-ifs0:  R6 = R5 << 5;           /* Combine set*/
-       R6.H = R3.H << 0 ;      /* and sub-bank*/
-       [P5] = R6;              /* Issue Command*/
-       SSYNC;                  /* CSYNC will not work here :(*/
-       R7 = [P4];              /* and read Tag.*/
-       CC = BITTST(R7, 0);     /* Check if valid*/
-       IF !CC JUMP ifskip;     /* and skip if not.*/
-
-       /* Compare against the page address. First, plant bits 13:12
-        * into the tag, since those aren't part of the returned data.
-        */
-
-       R7 = DEPOSIT(R7, R3);   /* set 13:12*/
-       R1 = R7 & R4;           /* Mask off lower bits*/
-       CC = R1 == R0;          /* Compare against page start.*/
-       IF !CC JUMP ifskip;     /* Skip it if it doesn't match.*/
-
-       /* Tag address matches against page, so this is an entry
-        * we must flush.
-        */
-
-       R7 >>= 10;              /* Mask off the non-address bits*/
-       R7 <<= 10;
-       P3 = R7;
-       IFLUSH [P3];            /* And flush the entry*/
-ifskip:
-ife0:  R5 += 1;                /* Advance to next Set*/
-ife1:  NOP;
-
-ifinished:
-       SSYNC;                  /* Ensure the data gets out to mem.*/
-
-       /*Finished. Restore context.*/
-       LB1 = [SP++];
-       LT1 = [SP++];
-       LC1 = [SP++];
-       LB0 = [SP++];
-       LT0 = [SP++];
-       LC0 = [SP++];
-       ( R7:0, P5:0 ) = [SP++];
-       RTS;
-
-iflush_whole_page:
-       /* It's a 1K or 4K page, so quicker to just flush the
-        * entire page.
-        */
-
-       P1 = 32;                /* For 1K pages*/
-       P2 = P1 << 2;           /* For 4K pages*/
-       P0 = R0;                /* Start of page*/
-       CC = BITTST(R1, 16);    /* Whether 1K or 4K*/
-       IF CC P1 = P2;
-       P1 += -1;               /* Unroll one iteration*/
-       SSYNC;
-       IFLUSH [P0++];          /* because CSYNC can't end loops.*/
-       LSETUP (isall, ieall) LC0 = P1;
-isall:IFLUSH [P0++];
-ieall: NOP;
-       SSYNC;
-       JUMP ifinished;
-
-/* This is an external function being called by the user
- * application through __flush_cache_all. Currently this function
- * serves the purpose of flushing all the pending writes in
- * in the data cache.
- */
-
-ENTRY(_flush_data_cache)
-       [--SP] = ( R7:6, P5:4 );
-       LINK 12;
-       SP += -12;
-       P5.H = (DCPLB_ADDR0 >> 16);
-       P5.L = (DCPLB_ADDR0 & 0xFFFF);
-       P4.H = (DCPLB_DATA0 >> 16);
-       P4.L = (DCPLB_DATA0 & 0xFFFF);
-       R7 = CPLB_VALID | CPLB_L1_CHBL | CPLB_DIRTY (Z);
-       R6 = 16;
-next:  R0 = [P5++];
-       R1 = [P4++];
-       CC = BITTST(R1, 14);    /* Is it write-through?*/
-       IF CC JUMP skip;        /* If so, ignore it.*/
-       R2 = R1 & R7;           /* Is it a dirty, cached page?*/
-       CC = R2;
-       IF !CC JUMP skip;       /* If not, ignore it.*/
-       [--SP] = RETS;
-       CALL _dcplb_flush;      /* R0 = page, R1 = data*/
-       RETS = [SP++];
-skip:  R6 += -1;
-       CC = R6;
-       IF CC JUMP next;
-       SSYNC;
-       SP += 12;
-       UNLINK;
-       ( R7:6, P5:4 ) = [SP++];
-       RTS;
-
-/* This is an internal function to flush all pending
- * writes in the cache associated with a particular DCPLB.
- *
- * R0 -  page's start address
- * R1 -  CPLB's data field.
- */
-
-.align 2
-ENTRY(_dcplb_flush)
-       [--SP] = ( R7:0, P5:0 );
-       [--SP] = LC0;
-       [--SP] = LT0;
-       [--SP] = LB0;
-       [--SP] = LC1;
-       [--SP] = LT1;
-       [--SP] = LB1;
-
-       /* If it's a 1K or 4K page, then it's quickest to
-        * just systematically flush all the addresses in
-        * the page, regardless of whether they're in the
-        * cache, or dirty. If it's a 1M or 4M page, there
-        * are too many addresses, and we have to search the
-        * cache for lines corresponding to the page.
-        */
-
-       CC = BITTST(R1, 17);    /* 1MB or 4MB */
-       IF !CC JUMP dflush_whole_page;
-
-       /* We're only interested in the page's size, so extract
-        * this from the CPLB (bits 17:16), and scale to give an
-        * offset into the page_size and page_prefix tables.
-        */
-
-       R1 <<= 14;
-       R1 >>= 30;
-       R1 <<= 2;
-
-       /* The page could be mapped into Bank A or Bank B, depending
-        * on (a) whether both banks are configured as cache, and
-        * (b) on whether address bit A[x] is set. x is determined
-        * by DCBS in DMEM_CONTROL
-        */
-
-       R2 = 0;                 /* Default to Bank A (Bank B would be 1)*/
-
-       P0.L = (DMEM_CONTROL & 0xFFFF);
-       P0.H = (DMEM_CONTROL >> 16);
-
-       R3 = [P0];              /* If Bank B is not enabled as cache*/
-       CC = BITTST(R3, 2);     /* then Bank A is our only option.*/
-       IF CC JUMP bank_chosen;
-
-       R4 = 1<<14;             /* If DCBS==0, use A[14].*/
-       R5 = R4 << 7;           /* If DCBS==1, use A[23];*/
-       CC = BITTST(R3, 4);
-       IF CC R4 = R5;          /* R4 now has either bit 14 or bit 23 set.*/
-       R5 = R0 & R4;           /* Use it to test the Page address*/
-       CC = R5;                /* and if that bit is set, we use Bank B,*/
-       R2 = CC;                /* else we use Bank A.*/
-       R2 <<= 23;              /* The Bank selection's at posn 23.*/
-
-bank_chosen:
-
-       /* We can also determine the sub-bank used, because this is
-        * taken from bits 13:12 of the address.
-        */
-
-       R3 = ((12<<8)|2);               /* Extraction pattern */
-       nop;                            /*Anamoly 05000209*/
-       R4 = EXTRACT(R0, R3.L) (Z);     /* Extract bits*/
-       /* Save in extraction pattern for later deposit.*/
-       R3.H = R4.L << 0;
-
-       /* So:
-        * R0 = Page start
-        * R1 = Page length (actually, offset into size/prefix tables)
-        * R2 = Bank select mask
-        * R3 = sub-bank deposit values
-        *
-        * The cache has 2 Ways, and 64 sets, so we iterate through
-        * the sets, accessing the tag for each Way, for our Bank and
-        * sub-bank, looking for dirty, valid tags that match our
-        * address prefix.
-        */
-
-       P5.L = (DTEST_COMMAND & 0xFFFF);
-       P5.H = (DTEST_COMMAND >> 16);
-       P4.L = (DTEST_DATA0 & 0xFFFF);
-       P4.H = (DTEST_DATA0 >> 16);
-
-       P0.L = page_prefix_table;
-       P0.H = page_prefix_table;
-       P1 = R1;
-       R5 = 0;                 /* Set counter*/
-       P0 = P1 + P0;
-       R4 = [P0];              /* This is the address prefix*/
-
-
-       /* We're reading (bit 1==0) the tag (bit 2==0), and we
-        * don't care about which double-word, since we're only
-        * fetching tags, so we only have to set Set, Bank,
-        * Sub-bank and Way.
-        */
-
-       P2 = 2;
-       LSETUP (fs1, fe1) LC1 = P2;
-fs1:   P0 = 64;                /* iterate over all sets*/
-       LSETUP (fs0, fe0) LC0 = P0;
-fs0:   R6 = R5 << 5;           /* Combine set*/
-       R6.H = R3.H << 0 ;      /* and sub-bank*/
-       R6 = R6 | R2;           /* and Bank. Leave Way==0 at first.*/
-       BITSET(R6,14);
-       [P5] = R6;              /* Issue Command*/
-       SSYNC;
-       R7 = [P4];              /* and read Tag.*/
-       CC = BITTST(R7, 0);     /* Check if valid*/
-       IF !CC JUMP fskip;      /* and skip if not.*/
-       CC = BITTST(R7, 1);     /* Check if dirty*/
-       IF !CC JUMP fskip;      /* and skip if not.*/
-
-       /* Compare against the page address. First, plant bits 13:12
-        * into the tag, since those aren't part of the returned data.
-        */
-
-       R7 = DEPOSIT(R7, R3);   /* set 13:12*/
-       R1 = R7 & R4;           /* Mask off lower bits*/
-       CC = R1 == R0;          /* Compare against page start.*/
-       IF !CC JUMP fskip;      /* Skip it if it doesn't match.*/
-
-       /* Tag address matches against page, so this is an entry
-        * we must flush.
-        */
-
-       R7 >>= 10;              /* Mask off the non-address bits*/
-       R7 <<= 10;
-       P3 = R7;
-       SSYNC;
-       FLUSHINV [P3];          /* And flush the entry*/
-fskip:
-fe0:   R5 += 1;                /* Advance to next Set*/
-fe1:   BITSET(R2, 26);         /* Go to next Way.*/
-
-dfinished:
-       SSYNC;                  /* Ensure the data gets out to mem.*/
-
-       /*Finished. Restore context.*/
-       LB1 = [SP++];
-       LT1 = [SP++];
-       LC1 = [SP++];
-       LB0 = [SP++];
-       LT0 = [SP++];
-       LC0 = [SP++];
-       ( R7:0, P5:0 ) = [SP++];
-       RTS;
-
-dflush_whole_page:
-
-       /* It's a 1K or 4K page, so quicker to just flush the
-        * entire page.
-        */
-
-       P1 = 32;                /* For 1K pages*/
-       P2 = P1 << 2;           /* For 4K pages*/
-       P0 = R0;                /* Start of page*/
-       CC = BITTST(R1, 16);    /* Whether 1K or 4K*/
-       IF CC P1 = P2;
-       P1 += -1;               /* Unroll one iteration*/
-       SSYNC;
-       FLUSHINV [P0++];        /* because CSYNC can't end loops.*/
-       LSETUP (eall, eall) LC0 = P1;
-eall:  FLUSHINV [P0++];
-       SSYNC;
-       JUMP dfinished;
-
-.align 4;
-page_prefix_table:
-.byte4         0xFFFFFC00;     /* 1K */
-.byte4 0xFFFFF000;     /* 4K */
-.byte4 0xFFF00000;     /* 1M */
-.byte4 0xFFC00000;     /* 4M */
-.page_prefix_table.end:
 
+++ /dev/null
-#define ASSEMBLY
-
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/mem_init.h>
-#include <asm/mach-common/bits/bootrom.h>
-#include <asm/mach-common/bits/ebiu.h>
-#include <asm/mach-common/bits/pll.h>
-#include <asm/mach-common/bits/uart.h>
-.global init_sdram;
-
-#if (CONFIG_CCLK_DIV == 1)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV1
-#endif
-#if (CONFIG_CCLK_DIV == 2)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV2
-#endif
-#if (CONFIG_CCLK_DIV == 4)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV4
-#endif
-#if (CONFIG_CCLK_DIV == 8)
-#define CONFIG_CCLK_ACT_DIV   CCLK_DIV8
-#endif
-#ifndef CONFIG_CCLK_ACT_DIV
-#define CONFIG_CCLK_ACT_DIV   CONFIG_CCLK_DIV_not_defined_properly
-#endif
-
-init_sdram:
-       [--SP] = ASTAT;
-       [--SP] = RETS;
-       [--SP] = (R7:0);
-       [--SP] = (P5:0);
-
-       /*
-        * PLL_LOCKCNT - how many SCLK Cycles to delay while PLL becomes stable
-        */
-       p0.h = hi(PLL_LOCKCNT);
-       p0.l = lo(PLL_LOCKCNT);
-       r0 = 0x300(Z);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * Put SDRAM in self-refresh, incase anything is running
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITSET (R0, 24);
-       [P2] = R0;
-       SSYNC;
-
-       /*
-        *  Set PLL_CTL with the value that we calculate in R0
-        *   - [14:09] = MSEL[5:0] : CLKIN / VCO multiplication factors
-        *   - [8]     = BYPASS    : BYPASS the PLL, run CLKIN into CCLK/SCLK
-        *   - [7]     = output delay (add 200ps of delay to mem signals)
-        *   - [6]     = input delay (add 200ps of input delay to mem signals)
-        *   - [5]     = PDWN      : 1=All Clocks off
-        *   - [3]     = STOPCK    : 1=Core Clock off
-        *   - [1]     = PLL_OFF   : 1=Disable Power to PLL
-        *   - [0]     = DF        : 1=Pass CLKIN/2 to PLL / 0=Pass CLKIN to PLL
-        *   all other bits set to zero
-        */
-
-       r0 = CONFIG_VCO_MULT & 63;      /* Load the VCO multiplier */
-       r0 = r0 << 9;                   /* Shift it over, */
-       r1 = CONFIG_CLKIN_HALF;         /* Do we need to divide CLKIN by 2? */
-       r0 = r1 | r0;
-       r1 = CONFIG_PLL_BYPASS;         /* Bypass the PLL? */
-       r1 = r1 << 8;                   /* Shift it over */
-       r0 = r1 | r0;                   /* add them all together */
-
-       p0.h = hi(PLL_CTL);
-       p0.l = lo(PLL_CTL);             /* Load the address */
-       cli r2;                         /* Disable interrupts */
-       ssync;
-       w[p0] = r0.l;                   /* Set the value */
-       idle;                           /* Wait for the PLL to stablize */
-       sti r2;                         /* Enable interrupts */
-
-check_again:
-       p0.h = hi(PLL_STAT);
-       p0.l = lo(PLL_STAT);
-       R0 = W[P0](Z);
-       CC = BITTST(R0,5);
-       if ! CC jump check_again;
-
-       /* Configure SCLK & CCLK Dividers */
-       r0 = (CONFIG_CCLK_ACT_DIV | CONFIG_SCLK_DIV);
-       p0.h = hi(PLL_DIV);
-       p0.l = lo(PLL_DIV);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * We now are running at speed, time to set the Async mem bank wait states
-        * This will speed up execution, since we are normally running from FLASH.
-        */
-
-       p2.h = (EBIU_AMBCTL1 >> 16);
-       p2.l = (EBIU_AMBCTL1 & 0xFFFF);
-       r0.h = (AMBCTL1VAL >> 16);
-       r0.l = (AMBCTL1VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMBCTL0 >> 16);
-       p2.l = (EBIU_AMBCTL0 & 0xFFFF);
-       r0.h = (AMBCTL0VAL >> 16);
-       r0.l = (AMBCTL0VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMGCTL >> 16);
-       p2.l = (EBIU_AMGCTL & 0xffff);
-       r0 = AMGCTLVAL;
-       w[p2] = r0;
-       ssync;
-
-       /*
-        * Now, Initialize the SDRAM,
-        * start with the SDRAM Refresh Rate Control Register
-        */
-       p0.l = lo(EBIU_SDRRC);
-       p0.h = hi(EBIU_SDRRC);
-       r0 = mem_SDRRC;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Memory Bank Control Register - bank specific parameters
-        */
-       p0.l = (EBIU_SDBCTL & 0xFFFF);
-       p0.h = (EBIU_SDBCTL >> 16);
-       r0 = mem_SDBCTL;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Global Control Register - global programmable parameters
-        * Disable self-refresh
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITCLR (R0, 24);
-
-       /*
-        * Check if SDRAM is already powered up, if it is, enable self-refresh
-        */
-       p0.h = hi(EBIU_SDSTAT);
-       p0.l = lo(EBIU_SDSTAT);
-       r2.l = w[p0];
-       cc = bittst(r2,3);
-       if !cc jump skip;
-       NOP;
-       BITSET (R0, 23);
-skip:
-       [P2] = R0;
-       SSYNC;
-
-       /* Write in the new value in the register */
-       R0.L = lo(mem_SDGCTL);
-       R0.H = hi(mem_SDGCTL);
-       [P2] = R0;
-       SSYNC;
-       nop;
-
-       (P5:0) = [SP++];
-       (R7:0) = [SP++];
-       RETS   = [SP++];
-       ASTAT  = [SP++];
-       RTS;
 
+++ /dev/null
-#define ASSEMBLY
-
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/mem_init.h>
-#include <asm/mach-common/bits/bootrom.h>
-#include <asm/mach-common/bits/ebiu.h>
-#include <asm/mach-common/bits/pll.h>
-#include <asm/mach-common/bits/uart.h>
-.global init_sdram;
-
-#if (CONFIG_CCLK_DIV == 1)
-#define CONFIG_CCLK_ACT_DIV    CCLK_DIV1
-#endif
-#if (CONFIG_CCLK_DIV == 2)
-#define CONFIG_CCLK_ACT_DIV    CCLK_DIV2
-#endif
-#if (CONFIG_CCLK_DIV == 4)
-#define CONFIG_CCLK_ACT_DIV    CCLK_DIV4
-#endif
-#if (CONFIG_CCLK_DIV == 8)
-#define CONFIG_CCLK_ACT_DIV    CCLK_DIV8
-#endif
-#ifndef CONFIG_CCLK_ACT_DIV
-#define CONFIG_CCLK_ACT_DIV    CONFIG_CCLK_DIV_not_defined_properly
-#endif
-
-init_sdram:
-       [--SP] = ASTAT;
-       [--SP] = RETS;
-       [--SP] = (R7:0);
-       [--SP] = (P5:0);
-
-
-       p0.h = hi(SICA_IWR0);
-       p0.l = lo(SICA_IWR0);
-       r0.l = 0x1;
-       w[p0] = r0.l;
-       SSYNC;
-
-       p0.h = hi(SPI_BAUD);
-       p0.l = lo(SPI_BAUD);
-       r0.l = CONFIG_SPI_BAUD_INITBLOCK;
-       w[p0] = r0.l;
-       SSYNC;
-
-       /*
-        * PLL_LOCKCNT - how many SCLK Cycles to delay while PLL becomes stable
-        */
-       p0.h = hi(PLL_LOCKCNT);
-       p0.l = lo(PLL_LOCKCNT);
-       r0 = 0x300(Z);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * Put SDRAM in self-refresh, incase anything is running
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITSET (R0, 24);
-       [P2] = R0;
-       SSYNC;
-
-       /*
-        *  Set PLL_CTL with the value that we calculate in R0
-        *   - [14:09] = MSEL[5:0] : CLKIN / VCO multiplication factors
-        *   - [8]     = BYPASS    : BYPASS the PLL, run CLKIN into CCLK/SCLK
-        *   - [7]     = output delay (add 200ps of delay to mem signals)
-        *   - [6]     = input delay (add 200ps of input delay to mem signals)
-        *   - [5]     = PDWN      : 1=All Clocks off
-        *   - [3]     = STOPCK    : 1=Core Clock off
-        *   - [1]     = PLL_OFF   : 1=Disable Power to PLL
-        *   - [0]     = DF        : 1=Pass CLKIN/2 to PLL / 0=Pass CLKIN to PLL
-        *   all other bits set to zero
-        */
-
-       r0 = CONFIG_VCO_MULT & 63;      /* Load the VCO multiplier */
-       r0 = r0 << 9;                   /* Shift it over, */
-       r1 = CONFIG_CLKIN_HALF;         /* Do we need to divide CLKIN by 2? */
-       r0 = r1 | r0;
-       r1 = CONFIG_PLL_BYPASS;         /* Bypass the PLL? */
-       r1 = r1 << 8;                   /* Shift it over */
-       r0 = r1 | r0;                   /* add them all together */
-
-       p0.h = hi(PLL_CTL);
-       p0.l = lo(PLL_CTL);             /* Load the address */
-       cli r2;                         /* Disable interrupts */
-       ssync;
-       w[p0] = r0.l;                   /* Set the value */
-       idle;                           /* Wait for the PLL to stablize */
-       sti r2;                         /* Enable interrupts */
-
-check_again:
-       p0.h = hi(PLL_STAT);
-       p0.l = lo(PLL_STAT);
-       R0 = W[P0](Z);
-       CC = BITTST(R0,5);
-       if ! CC jump check_again;
-
-       /* Configure SCLK & CCLK Dividers */
-       r0 = (CONFIG_CCLK_ACT_DIV | CONFIG_SCLK_DIV);
-       p0.h = hi(PLL_DIV);
-       p0.l = lo(PLL_DIV);
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * We now are running at speed, time to set the Async mem bank wait states
-        * This will speed up execution, since we are normally running from FLASH.
-        */
-
-       p2.h = (EBIU_AMBCTL1 >> 16);
-       p2.l = (EBIU_AMBCTL1 & 0xFFFF);
-       r0.h = (AMBCTL1VAL >> 16);
-       r0.l = (AMBCTL1VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMBCTL0 >> 16);
-       p2.l = (EBIU_AMBCTL0 & 0xFFFF);
-       r0.h = (AMBCTL0VAL >> 16);
-       r0.l = (AMBCTL0VAL & 0xFFFF);
-       [p2] = r0;
-       ssync;
-
-       p2.h = (EBIU_AMGCTL >> 16);
-       p2.l = (EBIU_AMGCTL & 0xffff);
-       r0 = AMGCTLVAL;
-       w[p2] = r0;
-       ssync;
-
-       /*
-        * Now, Initialize the SDRAM,
-        * start with the SDRAM Refresh Rate Control Register
-        */
-       p0.l = lo(EBIU_SDRRC);
-       p0.h = hi(EBIU_SDRRC);
-       r0 = mem_SDRRC;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Memory Bank Control Register - bank specific parameters
-        */
-       p0.l = (EBIU_SDBCTL & 0xFFFF);
-       p0.h = (EBIU_SDBCTL >> 16);
-       r0 = mem_SDBCTL;
-       w[p0] = r0.l;
-       ssync;
-
-       /*
-        * SDRAM Global Control Register - global programmable parameters
-        * Disable self-refresh
-        */
-       P2.H = hi(EBIU_SDGCTL);
-       P2.L = lo(EBIU_SDGCTL);
-       R0 = [P2];
-       BITCLR (R0, 24);
-
-       /*
-        * Check if SDRAM is already powered up, if it is, enable self-refresh
-        */
-       p0.h = hi(EBIU_SDSTAT);
-       p0.l = lo(EBIU_SDSTAT);
-       r2.l = w[p0];
-       cc = bittst(r2,3);
-       if !cc jump skip;
-       NOP;
-       BITSET (R0, 23);
-skip:
-       [P2] = R0;
-       SSYNC;
-
-       /* Write in the new value in the register */
-       R0.L = lo(mem_SDGCTL);
-       R0.H = hi(mem_SDGCTL);
-       [P2] = R0;
-       SSYNC;
-       nop;
-
-
-       (P5:0) = [SP++];
-       (R7:0) = [SP++];
-       RETS   = [SP++];
-       ASTAT  = [SP++];
-       RTS;
 
+++ /dev/null
-/*
- * U-boot - interrupt.S Processing of interrupts and exception handling
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * (C) Copyright 2000-2004
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * This file is based on interrupt.S
- *
- * Copyright (C) 2003  Metrowerks, Inc. <mwaddel@metrowerks.com>
- * Copyright (C) 2002  Arcturus Networks Ltd. Ted Ma <mated@sympatico.ca>
- * Copyright (C) 1998  D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>,
- *                     Kenneth Albanowski <kjahds@kjahds.com>,
- *                     The Silver Hammer Group, Ltd.
- *
- * (c) 1995, Dionne & Associates
- * (c) 1995, DKG Display Tech.
- *
- * This file is also based on exception.asm
- * (C) Copyright 2001-2005 - Analog Devices, Inc.  All rights reserved.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#define ASSEMBLY
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/entry.h>
-
-.global _blackfin_irq_panic;
-
-.text
-.align 2
-
-#ifndef CONFIG_KGDB
-.global _evt_emulation
-_evt_emulation:
-       SAVE_CONTEXT
-       r0 = 0;
-       r1 = seqstat;
-       sp += -12;
-       call _blackfin_irq_panic;
-       sp += 12;
-       rte;
-#endif
-
-.global _evt_nmi
-_evt_nmi:
-       SAVE_CONTEXT
-       r0 = 2;
-       r1 = RETN;
-       sp += -12;
-       call _blackfin_irq_panic;
-       sp += 12;
-
-_evt_nmi_exit:
-       rtn;
-
-.global _trap
-_trap:
-       SAVE_ALL_SYS
-       r0 = sp;        /* stack frame pt_regs pointer argument ==> r0 */
-       sp += -12;
-       call _trap_c
-       sp += 12;
-       RESTORE_ALL_SYS
-       rtx;
-
-.global _evt_rst
-_evt_rst:
-       SAVE_CONTEXT
-       r0 = 1;
-       r1 = RETN;
-       sp += -12;
-       call _do_reset;
-       sp += 12;
-
-_evt_rst_exit:
-       rtn;
-
-irq_panic:
-       r0 = 3;
-       r1 =  sp;
-       sp += -12;
-       call _blackfin_irq_panic;
-       sp += 12;
-
-.global _evt_ivhw
-_evt_ivhw:
-       SAVE_CONTEXT
-       RAISE 14;
-
-_evt_ivhw_exit:
-        rti;
-
-.global _evt_timer
-_evt_timer:
-       SAVE_CONTEXT
-       r0 = 6;
-       sp += -12;
-       /* Polling method used now. */
-       /* call timer_int; */
-       sp += 12;
-       RESTORE_CONTEXT
-       rti;
-       nop;
-
-.global _evt_evt7
-_evt_evt7:
-       SAVE_CONTEXT
-       r0 = 7;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt7_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt8
-_evt_evt8:
-       SAVE_CONTEXT
-       r0 = 8;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt8_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt9
-_evt_evt9:
-       SAVE_CONTEXT
-       r0 = 9;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt9_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt10
-_evt_evt10:
-       SAVE_CONTEXT
-       r0 = 10;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt10_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt11
-_evt_evt11:
-       SAVE_CONTEXT
-       r0 = 11;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt11_exit:
-       RESTORE_CONTEXT
-       rti;
-
-.global _evt_evt12
-_evt_evt12:
-       SAVE_CONTEXT
-       r0 = 12;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-evt_evt12_exit:
-        RESTORE_CONTEXT
-        rti;
-
-.global _evt_evt13
-_evt_evt13:
-       SAVE_CONTEXT
-       r0 = 13;
-       sp += -12;
-       call _process_int;
-       sp += 12;
-
-evt_evt13_exit:
-        RESTORE_CONTEXT
-        rti;
-
-.global _evt_system_call
-_evt_system_call:
-       [--sp] = r0;
-       [--SP] = RETI;
-       r0 = [sp++];
-       r0 += 2;
-       [--sp] = r0;
-       RETI = [SP++];
-       r0 = [SP++];
-       SAVE_CONTEXT
-       sp += -12;
-       call _exception_handle;
-       sp += 12;
-       RESTORE_CONTEXT
-       RTI;
-
-evt_system_call_exit:
-       rti;
-
-.global _evt_soft_int1
-_evt_soft_int1:
-       [--sp] = r0;
-       [--SP] = RETI;
-       r0 = [sp++];
-       r0 += 2;
-       [--sp] = r0;
-       RETI = [SP++];
-       r0 = [SP++];
-       SAVE_CONTEXT
-       sp += -12;
-       call _exception_handle;
-       sp += 12;
-       RESTORE_CONTEXT
-       RTI;
-
-evt_soft_int1_exit:
-       rti;
 
+++ /dev/null
-/*
- * U-boot - interrupts.c Interrupt related routines
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on interrupts.c
- * Copyright 1996 Roman Zippel
- * Copyright 1999 D. Jeff Dionne <jeff@uclinux.org>
- * Copyright 2000-2001 Lineo, Inc. D. Jefff Dionne <jeff@lineo.ca>
- * Copyright 2002 Arcturus Networks Inc. MaTed <mated@sympatico.ca>
- * Copyright 2003 Metrowerks/Motorola
- * Copyright 2003 Bas Vermeulen <bas@buyways.nl>,
- *                     BuyWays B.V. (www.buyways.nl)
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include "cpu.h"
-
-static ulong timestamp;
-static ulong last_time;
-static int int_flag;
-
-int irq_flags;                 /* needed by asm-blackfin/system.h */
-
-/* Functions just to satisfy the linker */
-
-/*
- * This function is derived from PowerPC code (read timebase as long long).
- * On BF561 it just returns the timer value.
- */
-unsigned long long get_ticks(void)
-{
-       return get_timer(0);
-}
-
-/*
- * This function is derived from PowerPC code (timebase clock frequency).
- * On BF561 it returns the number of timer ticks per second.
- */
-ulong get_tbclk(void)
-{
-       ulong tbclk;
-
-       tbclk = CFG_HZ;
-       return tbclk;
-}
-
-void enable_interrupts(void)
-{
-}
-
-int disable_interrupts(void)
-{
-       return 1;
-}
-
-int interrupt_init(void)
-{
-       return (0);
-}
-
-void udelay(unsigned long usec)
-{
-       unsigned long delay, start, stop;
-       unsigned long cclk;
-       cclk = (CONFIG_CCLK_HZ);
-
-       while (usec > 1) {
-               /*
-                * how many clock ticks to delay?
-                *  - request(in useconds) * clock_ticks(Hz) / useconds/second
-                */
-               if (usec < 1000) {
-                       delay = (usec * (cclk / 244)) >> 12;
-                       usec = 0;
-               } else {
-                       delay = (1000 * (cclk / 244)) >> 12;
-                       usec -= 1000;
-               }
-
-               asm volatile (" %0 = CYCLES;":"=r" (start));
-               do {
-                       asm volatile (" %0 = CYCLES; ":"=r" (stop));
-               } while (stop - start < delay);
-       }
-
-       return;
-}
-
-void timer_init(void)
-{
-       *pTCNTL = 0x1;
-       *pTSCALE = 0x0;
-       *pTCOUNT = MAX_TIM_LOAD;
-       *pTPERIOD = MAX_TIM_LOAD;
-       *pTCNTL = 0x7;
-       asm("CSYNC;");
-
-       timestamp = 0;
-       last_time = 0;
-}
-
-/*
- * Any network command or flash
- * command is started get_timer shall
- * be called before TCOUNT gets reset,
- * to implement the accurate timeouts.
- *
- * How ever milliconds doesn't return
- * the number that has been elapsed from
- * the last reset.
- *
- * As get_timer is used in the u-boot
- * only for timeouts this should be
- * sufficient
- */
-ulong get_timer(ulong base)
-{
-       ulong milisec;
-
-       /* Number of clocks elapsed */
-       ulong clocks = (MAX_TIM_LOAD - (*pTCOUNT));
-
-       /*
-        * Find if the TCOUNT is reset
-        * timestamp gives the number of times
-        * TCOUNT got reset
-        */
-       if (clocks < last_time)
-               timestamp++;
-       last_time = clocks;
-
-       /* Get the number of milliseconds */
-       milisec = clocks / (CONFIG_CCLK_HZ / 1000);
-
-       /*
-        * Find the number of millisonds
-        * that got elapsed before this TCOUNT
-        * cycle
-        */
-       milisec += timestamp * (MAX_TIM_LOAD / (CONFIG_CCLK_HZ / 1000));
-
-       return (milisec - base);
-}
 
+++ /dev/null
-/*
- * U-boot - ints.c Interrupt related routines
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on ints.c
- *
- * Apr18 2003, Changed by HuTao to support interrupt cascading for Blackfin
- *     drivers
- *
- * Copyright 1996 Roman Zippel
- * Copyright 1999 D. Jeff Dionne <jeff@uclinux.org>
- * Copyright 2000-2001 Lineo, Inc. D. Jefff Dionne <jeff@lineo.ca>
- * Copyright 2002 Arcturus Networks Inc. MaTed <mated@sympatico.ca>
- * Copyright 2003 Metrowerks/Motorola
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <linux/stddef.h>
-#include <asm/system.h>
-#include <asm/traps.h>
-#include <asm/io.h>
-#include <asm/errno.h>
-#include <asm/blackfin.h>
-#include "cpu.h"
-
-void blackfin_irq_panic(int reason, struct pt_regs *regs)
-{
-       printf("\n\nException: IRQ 0x%x entered\n", reason);
-       printf("code=[0x%x], ", (unsigned int)(regs->seqstat & 0x3f));
-       printf("stack frame=0x%x, ", (unsigned int)regs);
-       printf("bad PC=0x%04x\n", (unsigned int)regs->pc);
-       dump(regs);
-       printf("Unhandled IRQ or exceptions!\n");
-       printf("Please reset the board \n");
-}
-
-void blackfin_init_IRQ(void)
-{
-       *(unsigned volatile long *)(SICA_IMASK0) = 0;
-#ifndef CONFIG_KGDB
-       *(unsigned volatile long *)(EVT1) = 0x0;
-#endif
-       *(unsigned volatile long *)(EVT2) =
-           (unsigned volatile long)evt_nmi;
-       *(unsigned volatile long *)(EVT3) =
-           (unsigned volatile long)trap;
-       *(unsigned volatile long *)(EVT5) =
-           (unsigned volatile long)evt_ivhw;
-       *(unsigned volatile long *)(EVT0) =
-           (unsigned volatile long)evt_rst;
-       *(unsigned volatile long *)(EVT6) =
-           (unsigned volatile long)evt_timer;
-       *(unsigned volatile long *)(EVT7) =
-           (unsigned volatile long)evt_evt7;
-       *(unsigned volatile long *)(EVT8) =
-           (unsigned volatile long)evt_evt8;
-       *(unsigned volatile long *)(EVT9) =
-           (unsigned volatile long)evt_evt9;
-       *(unsigned volatile long *)(EVT10) =
-           (unsigned volatile long)evt_evt10;
-       *(unsigned volatile long *)(EVT11) =
-           (unsigned volatile long)evt_evt11;
-       *(unsigned volatile long *)(EVT12) =
-           (unsigned volatile long)evt_evt12;
-       *(unsigned volatile long *)(EVT13) =
-           (unsigned volatile long)evt_evt13;
-       *(unsigned volatile long *)(EVT14) =
-           (unsigned volatile long)evt_system_call;
-       *(unsigned volatile long *)(EVT15) =
-           (unsigned volatile long)evt_soft_int1;
-       *(volatile unsigned long *)ILAT = 0;
-       asm("csync;");
-       *(volatile unsigned long *)IMASK = 0xffbf;
-       asm("csync;");
-}
-
-void exception_handle(void)
-{
-#if defined (CONFIG_PANIC_HANG)
-       display_excp();
-#else
-       udelay(100000);         /* allow messages to go out */
-       do_reset(NULL, 0, 0, NULL);
-#endif
-}
-
-void display_excp(void)
-{
-       printf("Exception!\n");
-}
 
+++ /dev/null
-/*
- * U-boot - serial.c Serial driver for BF561
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on
- * bf533_serial.c: Serial driver for BlackFin BF533 DSP internal UART.
- * Copyright (c) 2003  Bas Vermeulen <bas@buyways.nl>,
- *                     BuyWays B.V. (www.buyways.nl)
- *
- * Based heavily on blkfinserial.c
- * blkfinserial.c: Serial driver for BlackFin DSP internal USRTs.
- * Copyright(c) 2003   Metrowerks      <mwaddel@metrowerks.com>
- * Copyright(c)        2001    Tony Z. Kou     <tonyko@arcturusnetworks.com>
- * Copyright(c)        2001-2002 Arcturus Networks Inc. <www.arcturusnetworks.com>
- *
- * Based on code from 68328 version serial driver imlpementation which was:
- * Copyright (C) 1995       David S. Miller    <davem@caip.rutgers.edu>
- * Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com>
- * Copyright (C) 1998, 1999 D. Jeff Dionne     <jeff@uclinux.org>
- * Copyright (C) 1999       Vladimir Gurevich  <vgurevic@cisco.com>
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <asm/delay.h>
-#include "serial.h"
-#include <asm/io.h>
-#include <asm/mach-common/bits/uart.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-unsigned long pll_div_fact;
-
-void calc_baud(void)
-{
-       unsigned char i;
-       int temp;
-       u_long sclk = get_sclk();
-
-       for (i = 0; i < sizeof(baud_table) / sizeof(int); i++) {
-               temp = sclk / (baud_table[i] * 8);
-               if ((temp & 0x1) == 1) {
-                       temp++;
-               }
-               temp = temp / 2;
-               hw_baud_table[i].dl_high = (temp >> 8) & 0xFF;
-               hw_baud_table[i].dl_low = (temp) & 0xFF;
-       }
-}
-
-void serial_setbrg(void)
-{
-       int i;
-
-       calc_baud();
-
-       for (i = 0; i < sizeof(baud_table) / sizeof(int); i++) {
-               if (gd->baudrate == baud_table[i])
-                       break;
-       }
-
-       /* Enable UART */
-       *pUART_GCTL |= UCEN;
-       SSYNC();
-
-       /* Set DLAB in LCR to Access DLL and DLH */
-       ACCESS_LATCH;
-       SSYNC();
-
-       *pUART_DLL = hw_baud_table[i].dl_low;
-       SSYNC();
-       *pUART_DLH = hw_baud_table[i].dl_high;
-       SSYNC();
-
-       /* Clear DLAB in LCR to Access THR RBR IER */
-       ACCESS_PORT_IER;
-       SSYNC();
-
-       /*
-        * Enable  ERBFI and ELSI interrupts
-        * to poll SIC_ISR register
-        */
-       *pUART_IER = ELSI | ERBFI | ETBEI;
-       SSYNC();
-
-       /* Set LCR to Word Lengh 8-bit word select */
-       *pUART_LCR = WLS_8;
-       SSYNC();
-
-       return;
-}
-
-int serial_init(void)
-{
-       serial_setbrg();
-       return (0);
-}
-
-void serial_putc(const char c)
-{
-       if ((*pUART_LSR) & TEMT) {
-               if (c == '\n')
-                       serial_putc('\r');
-
-               local_put_char(c);
-       }
-
-       while (!((*pUART_LSR) & TEMT))
-               SYNC_ALL;
-
-       return;
-}
-
-int serial_tstc(void)
-{
-       if (*pUART_LSR & DR)
-               return 1;
-       else
-               return 0;
-}
-
-int serial_getc(void)
-{
-       unsigned short uart_lsr_val, uart_rbr_val;
-       unsigned long isr_val;
-       int ret;
-
-       /* Poll for RX Interrupt */
-       while (!serial_tstc())
-               continue;
-       asm("csync;");
-
-       uart_lsr_val = *pUART_LSR;      /* Clear status bit */
-       uart_rbr_val = *pUART_RBR;      /* getc() */
-
-       if (uart_lsr_val & (OE|PE|FE|BI)) {
-               ret = -1;
-       } else {
-               ret = uart_rbr_val & 0xff;
-       }
-
-       return ret;
-}
-
-void serial_puts(const char *s)
-{
-       while (*s) {
-               serial_putc(*s++);
-       }
-}
-
-static void local_put_char(char ch)
-{
-       int flags = 0;
-       unsigned long isr_val;
-
-       /* Poll for TX Interruput */
-       while (!(*pUART_LSR & THRE))
-               continue;
-       asm("csync;");
-
-       *pUART_THR = ch;        /* putc() */
-
-       return;
-}
 
+++ /dev/null
-/*
- * U-boot - bf561_serial.h Serial Driver defines
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on
- * bf533_serial.h: Definitions for the BlackFin BF533 DSP serial driver.
- * Copyright (C) 2003  Bas Vermeulen <bas@buyways.nl>
- *                     BuyWays B.V. (www.buyways.nl)
- *
- * Based heavily on:
- * blkfinserial.h: Definitions for the BlackFin DSP serial driver.
- *
- * Copyright (C) 2001  Tony Z. Kou     tonyko@arcturusnetworks.com
- * Copyright (C) 2001   Arcturus Networks Inc. <www.arcturusnetworks.com>
- *
- * Based on code from 68328serial.c which was:
- * Copyright (C) 1995       David S. Miller    <davem@caip.rutgers.edu>
- * Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com>
- * Copyright (C) 1998, 1999 D. Jeff Dionne     <jeff@uclinux.org>
- * Copyright (C) 1999       Vladimir Gurevich  <vgurevic@cisco.com>
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#ifndef _Bf561_SERIAL_H
-#define _Bf561_SERIAL_H
-
-#include <linux/config.h>
-#include <asm/blackfin.h>
-
-#define SYNC_ALL       __asm__ __volatile__ ("ssync;\n")
-#define ACCESS_LATCH   *pUART_LCR |= DLAB;
-#define ACCESS_PORT_IER        *pUART_LCR &= (~DLAB);
-
-void serial_setbrg(void);
-static void local_put_char(char ch);
-void calc_baud(void);
-void serial_setbrg(void);
-int serial_init(void);
-void serial_putc(const char c);
-int serial_tstc(void);
-int serial_getc(void);
-void serial_puts(const char *s);
-static void local_put_char(char ch);
-
-int baud_table[5] = { 9600, 19200, 38400, 57600, 115200 };
-
-struct {
-       unsigned char dl_high;
-       unsigned char dl_low;
-} hw_baud_table[5];
-
-#ifdef CONFIG_STAMP
-extern unsigned long pll_div_fact;
-#endif
-
-#endif
 
+++ /dev/null
-/*
- * U-boot - start.S Startup file of u-boot for BF533/BF561
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on head.S
- * Copyright (c) 2003  Metrowerks/Motorola
- * Copyright (C) 1998  D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>,
- *                    Kenneth Albanowski <kjahds@kjahds.com>,
- *                    The Silver Hammer Group, Ltd.
- * (c) 1995, Dionne & Associates
- * (c) 1995, DKG Display Tech.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-/*
- * Note: A change in this file subsequently requires a change in
- *       board/$(board_name)/config.mk for a valid u-boot.bin
- */
-
-#define ASSEMBLY
-
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-
-#include <asm/mach-common/bits/core.h>
-#include <asm/mach-common/bits/dma.h>
-#include <asm/mach-common/bits/pll.h>
-
-.global _stext;
-.global __bss_start;
-.global start;
-.global _start;
-.global edata;
-.global _exit;
-.global init_sdram;
-
-.text
-_start:
-start:
-_stext:
-
-       R0 = 0x32;
-       SYSCFG = R0;
-       SSYNC;
-
-       /*
-        * As per HW reference manual DAG registers,
-        * DATA and Address resgister shall be zero'd
-        * in initialization, after a reset state
-        */
-       r1 = 0; /* Data registers zero'd */
-       r2 = 0;
-       r3 = 0;
-       r4 = 0;
-       r5 = 0;
-       r6 = 0;
-       r7 = 0;
-
-       p0 = 0; /* Address registers zero'd */
-       p1 = 0;
-       p2 = 0;
-       p3 = 0;
-       p4 = 0;
-       p5 = 0;
-
-       i0 = 0; /* DAG Registers zero'd */
-       i1 = 0;
-       i2 = 0;
-       i3 = 0;
-       m0 = 0;
-       m1 = 0;
-       m3 = 0;
-       m3 = 0;
-       l0 = 0;
-       l1 = 0;
-       l2 = 0;
-       l3 = 0;
-       b0 = 0;
-       b1 = 0;
-       b2 = 0;
-       b3 = 0;
-
-       /*
-        * Set loop counters to zero, to make sure that
-        * hw loops are disabled.
-        */
-       r0  = 0;
-       lc0 = r0;
-       lc1 = r0;
-
-       SSYNC;
-
-       /* Check soft reset status */
-       p0.h = SWRST >> 16;
-       p0.l = SWRST & 0xFFFF;
-       r0.l = w[p0];
-
-       cc = bittst(r0, 15);
-       if !cc jump no_soft_reset;
-
-       /* Clear Soft reset */
-       r0 = 0x0000;
-       w[p0] = r0;
-       ssync;
-
-no_soft_reset:
-       nop;
-
-       /* Clear EVT registers */
-       p0.h = (EVT0 >> 16);
-       p0.l = (EVT0 & 0xFFFF);
-       p0 += 8;
-       p1 = 14;
-       r1 = 0;
-       LSETUP(4,4) lc0 = p1;
-       [ p0 ++ ] = r1;
-
-       p0.h = hi(SICA_IWR0);
-       p0.l = lo(SICA_IWR0);
-       r0.l = 0x1;
-       w[p0] = r0.l;
-       SSYNC;
-
-       sp.l = (0xffb01000 & 0xFFFF);
-       sp.h = (0xffb01000 >> 16);
-
-       /*
-        * Check if the code is in SDRAM
-        * If the code is in SDRAM, skip SDRAM initializaiton
-        */
-       call get_pc;
-       r3.l = 0x0;
-       r3.h = 0x2000;
-       cc = r0 < r3 (iu);
-       if cc jump sdram_initialized;
-       call init_sdram;
-       /* relocate into to RAM */
-sdram_initialized:
-       call get_pc;
-offset:
-       r2.l = offset;
-       r2.h = offset;
-       r3.l = start;
-       r3.h = start;
-       r1 = r2 - r3;
-
-       r0 = r0 - r1;
-       p1 = r0;
-
-       p2.l = (CFG_MONITOR_BASE & 0xffff);
-       p2.h = (CFG_MONITOR_BASE >> 16);
-
-       p3 = 0x04;
-       p4.l = ((CFG_MONITOR_BASE + CFG_MONITOR_LEN) & 0xffff);
-       p4.h = ((CFG_MONITOR_BASE + CFG_MONITOR_LEN) >> 16);
-loop1:
-       r1 = [p1 ++ p3];
-       [p2 ++ p3] = r1;
-       cc=p2==p4;
-       if !cc jump loop1;
-       /*
-        * configure STACK
-        */
-       r0.h = (CONFIG_STACKBASE >> 16);
-       r0.l = (CONFIG_STACKBASE & 0xFFFF);
-       sp = r0;
-       fp = sp;
-
-       /*
-        * This next section keeps the processor in supervisor mode
-        * during kernel boot.  Switches to user mode at end of boot.
-        * See page 3-9 of Hardware Reference manual for documentation.
-        */
-
-       /* To keep ourselves in the supervisor mode */
-       p0.l = (EVT15 & 0xFFFF);
-       p0.h = (EVT15 >> 16);
-
-       p1.l = _real_start;
-       p1.h = _real_start;
-       [p0] = p1;
-
-       p0.l = (IMASK & 0xFFFF);
-       p0.h = (IMASK >> 16);
-       r0.l = LO(EVT_IVG15);
-       r0.h = HI(EVT_IVG15);
-       [p0] = r0;
-       raise 15;
-       p0.l = WAIT_HERE;
-       p0.h = WAIT_HERE;
-       reti = p0;
-       rti;
-
-WAIT_HERE:
-       jump WAIT_HERE;
-
-.global _real_start;
-_real_start:
-       [ -- sp ] = reti;
-
-       /* DMA reset code to Hi of L1 SRAM */
-copy:
-       P1.H = hi(SYSMMR_BASE); /* P1 Points to the beginning of SYSTEM MMR Space */
-       P1.L = lo(SYSMMR_BASE);
-
-       R0.H = reset_start;     /* Source Address (high) */
-       R0.L = reset_start;     /* Source Address (low) */
-       R1.H = reset_end;
-       R1.L = reset_end;
-       R2 = R1 - R0;           /* Count */
-       R1.H = hi(L1_INST_SRAM);        /* Destination Address (high) */
-       R1.L = lo(L1_INST_SRAM);        /* Destination Address (low) */
-       R3.L = DMAEN;           /* Source DMAConfig Value (8-bit words) */
-       R4.L = (DI_EN | WNR | DMAEN);   /* Destination DMAConfig Value (8-bit words) */
-
-DMA:
-       R6 = 0x1 (Z);
-       W[P1+OFFSET_(IMDMA_S0_X_MODIFY)] = R6;  /* Source Modify = 1 */
-       W[P1+OFFSET_(IMDMA_D0_X_MODIFY)] = R6;  /* Destination Modify = 1 */
-
-       [P1+OFFSET_(IMDMA_S0_START_ADDR)] = R0; /* Set Source Base Address */
-       W[P1+OFFSET_(IMDMA_S0_X_COUNT)] = R2;   /* Set Source Count */
-       /* Set Source  DMAConfig = DMA Enable,
-       Memory Read,  8-Bit Transfers, 1-D DMA, Flow - Stop */
-       W[P1+OFFSET_(IMDMA_S0_CONFIG)] = R3;
-
-       [P1+OFFSET_(IMDMA_D0_START_ADDR)] = R1; /* Set Destination Base Address */
-       W[P1+OFFSET_(IMDMA_D0_X_COUNT)] = R2;   /* Set Destination Count */
-       /* Set Destination DMAConfig = DMA Enable,
-       Memory Write, 8-Bit Transfers, 1-D DMA, Flow - Stop, IOC */
-       W[P1+OFFSET_(IMDMA_D0_CONFIG)] = R4;
-
-WAIT_DMA_DONE:
-       p0.h = hi(IMDMA_D0_IRQ_STATUS);
-       p0.l = lo(IMDMA_D0_IRQ_STATUS);
-       R0 = W[P0](Z);
-       CC = BITTST(R0, 0);
-       if ! CC jump WAIT_DMA_DONE
-
-       R0 = 0x1;
-       W[P1+OFFSET_(IMDMA_D0_IRQ_STATUS)] = R0;        /* Write 1 to clear DMA interrupt */
-
-       /* Initialize BSS Section with 0 s */
-       p1.l = __bss_start;
-       p1.h = __bss_start;
-       p2.l = _end;
-       p2.h = _end;
-       r1 = p1;
-       r2 = p2;
-       r3 = r2 - r1;
-       r3 = r3 >> 2;
-       p3 = r3;
-       lsetup (_clear_bss, _clear_bss_end ) lc1 = p3;
-       CC = p2<=p1;
-       if CC jump _clear_bss_skip;
-       r0 = 0;
-_clear_bss:
-_clear_bss_end:
-       [p1++] = r0;
-_clear_bss_skip:
-
-       p0.l = _start1;
-       p0.h = _start1;
-       jump (p0);
-
-reset_start:
-       p0.h = WDOG_CNT >> 16;
-       p0.l = WDOG_CNT & 0xffff;
-       r0 = 0x0010;
-       w[p0] = r0;
-       p0.h = WDOG_CTL >> 16;
-       p0.l = WDOG_CTL & 0xffff;
-       r0 = 0x0000;
-       w[p0] = r0;
-reset_wait:
-       jump reset_wait;
-
-reset_end: nop;
-
-_exit:
-       jump.s  _exit;
-get_pc:
-       r0 = rets;
-       rts;
 
+++ /dev/null
-/*
- * U-boot - start1.S Code running out of RAM after relocation
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#define ASSEMBLY
-#include <linux/config.h>
-#include <config.h>
-#include <asm/blackfin.h>
-
-.global        start1;
-.global        _start1;
-
-.text
-_start1:
-start1:
-       sp += -12;
-       call    _board_init_f;
-       sp += 12;
 
+++ /dev/null
-/*
- * U-boot - traps.c Routines related to interrupts and exceptions
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * This file is based on
- * No original Copyright holder listed,
- * Probabily original (C) Roman Zippel (assigned DJD, 1999)
- *
- * Copyright 2003 Metrowerks - for Blackfin
- * Copyright 2000-2001 Lineo, Inc. D. Jeff Dionne <jeff@lineo.ca>
- * Copyright 1999-2000 D. Jeff Dionne, <jeff@uclinux.org>
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <linux/types.h>
-#include <asm/errno.h>
-#include <asm/system.h>
-#include <asm/traps.h>
-#include "cpu.h"
-#include <asm/cplb.h>
-#include <asm/io.h>
-#include <asm/mach-common/bits/core.h>
-#include <asm/mach-common/bits/mpu.h>
-
-void init_IRQ(void)
-{
-       blackfin_init_IRQ();
-       return;
-}
-
-void process_int(unsigned long vec, struct pt_regs *fp)
-{
-       printf("interrupt\n");
-       return;
-}
-
-extern unsigned int icplb_table[page_descriptor_table_size][2];
-extern unsigned int dcplb_table[page_descriptor_table_size][2];
-
-unsigned long last_cplb_fault_retx;
-
-static unsigned int cplb_sizes[4] =
-    { 1024, 4 * 1024, 1024 * 1024, 4 * 1024 * 1024 };
-
-void trap_c(struct pt_regs *regs)
-{
-       unsigned int addr;
-       unsigned long trapnr = (regs->seqstat) & EXCAUSE;
-       unsigned int i, j, size, *I0, *I1;
-       unsigned short data = 0;
-
-       switch (trapnr) {
-               /* 0x26 - Data CPLB Miss */
-       case VEC_CPLB_M:
-
-#if ANOMALY_05000261
-               /*
-                * Work around an anomaly: if we see a new DCPLB fault, return
-                * without doing anything.  Then, if we get the same fault again,
-                * handle it.
-                */
-               addr = last_cplb_fault_retx;
-               last_cplb_fault_retx = regs->retx;
-               printf("this time, curr = 0x%08x last = 0x%08x\n", addr,
-                      last_cplb_fault_retx);
-               if (addr != last_cplb_fault_retx)
-                       goto trap_c_return;
-#endif
-               data = 1;
-
-       case VEC_CPLB_I_M:
-
-               if (data)
-                       addr = *pDCPLB_FAULT_ADDR;
-               else
-                       addr = *pICPLB_FAULT_ADDR;
-
-               for (i = 0; i < page_descriptor_table_size; i++) {
-                       if (data) {
-                               size = cplb_sizes[dcplb_table[i][1] >> 16];
-                               j = dcplb_table[i][0];
-                       } else {
-                               size = cplb_sizes[icplb_table[i][1] >> 16];
-                               j = icplb_table[i][0];
-                       }
-                       if ((j <= addr) && ((j + size) > addr)) {
-                               debug("found %i 0x%08x\n", i, j);
-                               break;
-                       }
-               }
-               if (i == page_descriptor_table_size) {
-                       printf("something is really wrong\n");
-                       do_reset(NULL, 0, 0, NULL);
-               }
-
-               /* Turn the cache off */
-               if (data) {
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)DMEM_CONTROL &=
-                           ~(ACACHE_BCACHE | ENDCPLB | PORT_PREF0);
-                       SSYNC();
-               } else {
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)IMEM_CONTROL &= ~(IMC | ENICPLB);
-                       SSYNC();
-               }
-
-               if (data) {
-                       I0 = (unsigned int *)DCPLB_ADDR0;
-                       I1 = (unsigned int *)DCPLB_DATA0;
-               } else {
-                       I0 = (unsigned int *)ICPLB_ADDR0;
-                       I1 = (unsigned int *)ICPLB_DATA0;
-               }
-
-               j = 0;
-               while (*I1 & CPLB_LOCK) {
-                       debug("skipping %i %08p - %08x\n", j, I1, *I1);
-                       *I0++;
-                       *I1++;
-                       j++;
-               }
-
-               debug("remove %i 0x%08x  0x%08x\n", j, *I0, *I1);
-
-               for (; j < 15; j++) {
-                       debug("replace %i 0x%08x  0x%08x\n", j, I0, I0 + 1);
-                       *I0++ = *(I0 + 1);
-                       *I1++ = *(I1 + 1);
-               }
-
-               if (data) {
-                       *I0 = dcplb_table[i][0];
-                       *I1 = dcplb_table[i][1];
-                       I0 = (unsigned int *)DCPLB_ADDR0;
-                       I1 = (unsigned int *)DCPLB_DATA0;
-               } else {
-                       *I0 = icplb_table[i][0];
-                       *I1 = icplb_table[i][1];
-                       I0 = (unsigned int *)ICPLB_ADDR0;
-                       I1 = (unsigned int *)ICPLB_DATA0;
-               }
-
-               for (j = 0; j < 16; j++) {
-                       debug("%i 0x%08x  0x%08x\n", j, *I0++, *I1++);
-               }
-
-               /* Turn the cache back on */
-               if (data) {
-                       j = *(unsigned int *)DMEM_CONTROL;
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)DMEM_CONTROL =
-                           ACACHE_BCACHE | ENDCPLB | PORT_PREF0 | j;
-                       SSYNC();
-               } else {
-                       SSYNC();
-                       asm(" .align 8; ");
-                       *(unsigned int *)IMEM_CONTROL = IMC | ENICPLB;
-                       SSYNC();
-               }
-
-               break;
-       default:
-               /* All traps come here */
-               printf("code=[0x%x], ", (unsigned int)(regs->seqstat & 0x3f));
-               printf("stack frame=0x%x, ", (unsigned int)regs);
-               printf("bad PC=0x%04x\n", (unsigned int)regs->pc);
-               dump(regs);
-               printf("\n\n");
-
-               printf("Unhandled IRQ or exceptions!\n");
-               printf("Please reset the board \n");
-               do_reset(NULL, 0, 0, NULL);
-       }
-
-trap_c_return:
-       return;
-
-}
-
-void dump(struct pt_regs *fp)
-{
-       debug("RETE:  %08lx  RETN: %08lx  RETX: %08lx  RETS: %08lx\n", fp->rete,
-             fp->retn, fp->retx, fp->rets);
-       debug("IPEND: %04lx  SYSCFG: %04lx\n", fp->ipend, fp->syscfg);
-       debug("SEQSTAT: %08lx    SP: %08lx\n", (long)fp->seqstat, (long)fp);
-       debug("R0: %08lx    R1: %08lx    R2: %08lx    R3: %08lx\n", fp->r0,
-             fp->r1, fp->r2, fp->r3);
-       debug("R4: %08lx    R5: %08lx    R6: %08lx    R7: %08lx\n", fp->r4,
-             fp->r5, fp->r6, fp->r7);
-       debug("P0: %08lx    P1: %08lx    P2: %08lx    P3: %08lx\n", fp->p0,
-             fp->p1, fp->p2, fp->p3);
-       debug("P4: %08lx    P5: %08lx    FP: %08lx\n", fp->p4, fp->p5, fp->fp);
-       debug("A0.w: %08lx    A0.x: %08lx    A1.w: %08lx    A1.x: %08lx\n",
-             fp->a0w, fp->a0x, fp->a1w, fp->a1x);
-
-       debug("LB0: %08lx  LT0: %08lx  LC0: %08lx\n", fp->lb0, fp->lt0,
-             fp->lc0);
-       debug("LB1: %08lx  LT1: %08lx  LC1: %08lx\n", fp->lb1, fp->lt1,
-             fp->lc1);
-       debug("B0: %08lx  L0: %08lx  M0: %08lx  I0: %08lx\n", fp->b0, fp->l0,
-             fp->m0, fp->i0);
-       debug("B1: %08lx  L1: %08lx  M1: %08lx  I1: %08lx\n", fp->b1, fp->l1,
-             fp->m1, fp->i1);
-       debug("B2: %08lx  L2: %08lx  M2: %08lx  I2: %08lx\n", fp->b2, fp->l2,
-             fp->m2, fp->i2);
-       debug("B3: %08lx  L3: %08lx  M3: %08lx  I3: %08lx\n", fp->b3, fp->l3,
-             fp->m3, fp->i3);
-
-       debug("DCPLB_FAULT_ADDR=%p\n", *pDCPLB_FAULT_ADDR);
-       debug("ICPLB_FAULT_ADDR=%p\n", *pICPLB_FAULT_ADDR);
-
-}
 
+++ /dev/null
-/*
- * (C) Copyright 2000
- * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
- * (C) Copyright 2002
- * Wolfgang Denk, wd@denx.de
- * (C) Copyright 2006
- * Aubrey Li, aubrey.li@analog.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
- */
-
-#include <stdarg.h>
-#include <common.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <i2c.h>
-#include <linux/types.h>
-#include <devices.h>
-
-#ifdef CONFIG_VIDEO
-#define NTSC_FRAME_ADDR 0x06000000
-#include "video.h"
-
-/* NTSC OUTPUT SIZE  720 * 240 */
-#define VERTICAL       2
-#define HORIZONTAL     4
-
-int is_vblank_line(const int line)
-{
-       /*
-        *  This array contains a single bit for each line in
-        *  an NTSC frame.
-        */
-       if ((line <= 18) || (line >= 264 && line <= 281) || (line == 528))
-               return true;
-
-       return false;
-}
-
-int NTSC_framebuffer_init(char *base_address)
-{
-       const int NTSC_frames = 1;
-       const int NTSC_lines = 525;
-       char *dest = base_address;
-       int frame_num, line_num;
-
-       for (frame_num = 0; frame_num < NTSC_frames; ++frame_num) {
-               for (line_num = 1; line_num <= NTSC_lines; ++line_num) {
-                       unsigned int code;
-                       int offset = 0;
-                       int i;
-
-                       if (is_vblank_line(line_num))
-                               offset++;
-
-                       if (line_num > 266 || line_num < 3)
-                               offset += 2;
-
-                       /* Output EAV code */
-                       code = SystemCodeMap[offset].EAV;
-                       write_dest_byte((char)(code >> 24) & 0xff);
-                       write_dest_byte((char)(code >> 16) & 0xff);
-                       write_dest_byte((char)(code >> 8) & 0xff);
-                       write_dest_byte((char)(code) & 0xff);
-
-                       /* Output horizontal blanking */
-                       for (i = 0; i < 67 * 2; ++i) {
-                               write_dest_byte(0x80);
-                               write_dest_byte(0x10);
-                       }
-
-                       /* Output SAV */
-                       code = SystemCodeMap[offset].SAV;
-                       write_dest_byte((char)(code >> 24) & 0xff);
-                       write_dest_byte((char)(code >> 16) & 0xff);
-                       write_dest_byte((char)(code >> 8) & 0xff);
-                       write_dest_byte((char)(code) & 0xff);
-
-                       /* Output empty horizontal data */
-                       for (i = 0; i < 360 * 2; ++i) {
-                               write_dest_byte(0x80);
-                               write_dest_byte(0x10);
-                       }
-               }
-       }
-
-       return dest - base_address;
-}
-
-void fill_frame(char *Frame, int Value)
-{
-       int *OddPtr32;
-       int OddLine;
-       int *EvenPtr32;
-       int EvenLine;
-       int i;
-       int *data;
-       int m, n;
-
-       /* fill odd and even frames */
-       for (OddLine = 22, EvenLine = 285; OddLine < 263; OddLine++, EvenLine++) {
-               OddPtr32 = (int *)((Frame + (OddLine * 1716)) + 276);
-               EvenPtr32 = (int *)((Frame + (EvenLine * 1716)) + 276);
-               for (i = 0; i < 360; i++, OddPtr32++, EvenPtr32++) {
-                       *OddPtr32 = Value;
-                       *EvenPtr32 = Value;
-               }
-       }
-
-       for (m = 0; m < VERTICAL; m++) {
-               data = (int *)u_boot_logo.data;
-               for (OddLine = (22 + m), EvenLine = (285 + m);
-                    OddLine < (u_boot_logo.height * VERTICAL) + (22 + m);
-                    OddLine += VERTICAL, EvenLine += VERTICAL) {
-                       OddPtr32 = (int *)((Frame + ((OddLine) * 1716)) + 276);
-                       EvenPtr32 =
-                           (int *)((Frame + ((EvenLine) * 1716)) + 276);
-                       for (i = 0; i < u_boot_logo.width / 2; i++) {
-                               /* enlarge one pixel to m x n */
-                               for (n = 0; n < HORIZONTAL; n++) {
-                                       *OddPtr32++ = *data;
-                                       *EvenPtr32++ = *data;
-                               }
-                               data++;
-                       }
-               }
-       }
-}
-
-void video_putc(const char c)
-{
-}
-
-void video_puts(const char *s)
-{
-}
-
-static int video_init(void)
-{
-       char *NTSCFrame;
-       NTSCFrame = (char *)NTSC_FRAME_ADDR;
-       NTSC_framebuffer_init(NTSCFrame);
-       fill_frame(NTSCFrame, BLUE);
-
-       *pPPI_CONTROL = 0x0082;
-       *pPPI_FRAME = 0x020D;
-
-       *pDMA0_START_ADDR = NTSCFrame;
-       *pDMA0_X_COUNT = 0x035A;
-       *pDMA0_X_MODIFY = 0x0002;
-       *pDMA0_Y_COUNT = 0x020D;
-       *pDMA0_Y_MODIFY = 0x0002;
-       *pDMA0_CONFIG = 0x1015;
-       *pPPI_CONTROL = 0x0083;
-       return 0;
-}
-
-int drv_video_init(void)
-{
-       int error, devices = 1;
-
-       device_t videodev;
-
-       video_init();           /* Video initialization */
-
-       memset(&videodev, 0, sizeof(videodev));
-
-       strcpy(videodev.name, "video");
-       videodev.ext = DEV_EXT_VIDEO;   /* Video extensions */
-       videodev.flags = DEV_FLAGS_OUTPUT;      /* Output only */
-       videodev.putc = video_putc;     /* 'putc' function */
-       videodev.puts = video_puts;     /* 'puts' function */
-
-       error = device_register(&videodev);
-
-       return (error == 0) ? devices : error;
-}
-#endif
 
+++ /dev/null
-#include <video_logo.h>
-#define write_dest_byte(val) {*dest++=val;}
-#define BLACK   (0x01800180)   /* black pixel pattern  */
-#define BLUE    (0x296E29F0)   /* blue pixel pattern   */
-#define RED     (0x51F0515A)   /* red pixel pattern    */
-#define MAGENTA (0x6ADE6ACA)   /* magenta pixel pattern */
-#define GREEN   (0x91229136)   /* green pixel pattern  */
-#define CYAN    (0xAA10AAA6)   /* cyan pixel pattern   */
-#define YELLOW  (0xD292D210)   /* yellow pixel pattern */
-#define WHITE   (0xFE80FE80)   /* white pixel pattern  */
-
-#define true   1
-#define false  0
-
-typedef struct {
-       unsigned int SAV;
-       unsigned int EAV;
-} SystemCodeType;
-
-const SystemCodeType SystemCodeMap[4] = {
-       {0xFF000080, 0xFF00009D},
-       {0xFF0000AB, 0xFF0000B6},
-       {0xFF0000C7, 0xFF0000DA},
-       {0xFF0000EC, 0xFF0000F1}
-};
 
--- /dev/null
+bootrom-asm-offsets.[chs]
 
--- /dev/null
+#
+# U-boot - Makefile
+#
+# Copyright (c) 2005-2008 Analog Device Inc.
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Licensed under the GPL-2 or later.
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(CPU).a
+
+EXTRA    :=
+CEXTRA   := initcode.o
+SEXTRA   := start.o
+SOBJS    := interrupt.o cache.o flush.o
+COBJS    := cpu.o traps.o interrupts.o reset.o serial.o i2c.o watchdog.o
+
+ifeq ($(CONFIG_BFIN_BOOT_MODE),BFIN_BOOT_BYPASS)
+COBJS    += initcode.o
+endif
+
+SRCS     := $(SEXTRA:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS     := $(addprefix $(obj),$(COBJS) $(SOBJS))
+EXTRA    := $(addprefix $(obj),$(EXTRA))
+CEXTRA   := $(addprefix $(obj),$(CEXTRA))
+SEXTRA   := $(addprefix $(obj),$(SEXTRA))
+
+all:   $(obj).depend $(LIB) $(obj).depend $(EXTRA) $(CEXTRA) $(SEXTRA) check_initcode
+
+$(LIB):        $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+$(OBJS): $(obj)bootrom-asm-offsets.h
+$(obj)bootrom-asm-offsets.c: bootrom-asm-offsets.c.in bootrom-asm-offsets.awk
+       echo '#include <asm/mach-common/bits/bootrom.h>' | $(CPP) $(CPPFLAGS) - | gawk -f ./bootrom-asm-offsets.awk > $@.tmp
+       mv $@.tmp $@
+$(obj)bootrom-asm-offsets.s: $(obj)bootrom-asm-offsets.c
+       $(CC) $(CFLAGS) -S $^ -o $@.tmp
+       mv $@.tmp $@
+$(obj)bootrom-asm-offsets.h: $(obj)bootrom-asm-offsets.s
+       sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}" $^ > $@
+
+# make sure our initcode (which goes into LDR) does not
+# have relocs or external references
+READINIT = env LC_ALL=C $(CROSS_COMPILE)readelf -s $<
+check_initcode: $(obj)initcode.o
+ifneq ($(CONFIG_BFIN_BOOT_MODE),BFIN_BOOT_BYPASS)
+       @if $(READINIT) | grep '\<GLOBAL\>.*\<UND\>' ; then \
+               echo "$< contains external references!" 1>&2 ; \
+               exit 1 ; \
+       fi
+endif
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
 
--- /dev/null
+#!/usr/bin/gawk -f
+BEGIN {
+       print "/* DO NOT EDIT: AUTOMATICALLY GENERATED"
+       print " * Input files: bootrom-asm-offsets.awk bootrom-asm-offsets.c.in"
+       print " * DO NOT EDIT: AUTOMATICALLY GENERATED"
+       print " */"
+       print ""
+       system("cat bootrom-asm-offsets.c.in")
+       print "{"
+}
+
+{
+       /* find a structure definition */
+       if ($0 ~ /typedef struct .* {/) {
+               delete members;
+               i = 0;
+
+               /* extract each member of the structure */
+               while (1) {
+                       getline
+                       if ($1 == "}")
+                               break;
+                       gsub(/[*;]/, "");
+                       members[i++] = $NF;
+               }
+
+               /* grab the structure's name */
+               struct = $NF;
+               sub(/;$/, "", struct);
+
+               /* output the DEFINE() macros */
+               while (i-- > 0)
+                       print "\tDEFINE(" struct ", " members[i] ");"
+               print ""
+       }
+}
+
+END {
+       print "\treturn 0;"
+       print "}"
+}
 
--- /dev/null
+/* A little trick taken from the kernel asm-offsets.h where we convert
+ * the C structures automatically into a bunch of defines for use in
+ * the assembly files.
+ */
+
+#include <linux/stddef.h>
+#include <asm/mach-common/bits/bootrom.h>
+
+#define _DEFINE(sym, val) asm volatile("\n->" #sym " %0 " #val : : "i" (val))
+#define DEFINE(s, m) _DEFINE(offset_##s##_##m, offsetof(s, m))
+
+int main(int argc, char *argv[])
 
--- /dev/null
+/* cache.S - low level cache handling routines
+ * Copyright (C) 2003-2007 Analog Devices Inc.
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <asm/linkage.h>
+#include <config.h>
+#include <asm/blackfin.h>
+
+.text
+.align 2
+ENTRY(_blackfin_icache_flush_range)
+       R2 = -32;
+       R2 = R0 & R2;
+       P0 = R2;
+       P1 = R1;
+       CSYNC;
+1:
+       IFLUSH[P0++];
+       CC = P0 < P1(iu);
+       IF CC JUMP 1b(bp);
+       IFLUSH[P0];
+       SSYNC;
+       RTS;
+ENDPROC(_blackfin_icache_flush_range)
+
+ENTRY(_blackfin_dcache_flush_range)
+       R2 = -32;
+       R2 = R0 & R2;
+       P0 = R2;
+       P1 = R1;
+       CSYNC;
+1:
+       FLUSH[P0++];
+       CC = P0 < P1(iu);
+       IF CC JUMP 1b(bp);
+       FLUSH[P0];
+       SSYNC;
+       RTS;
+ENDPROC(_blackfin_dcache_flush_range)
+
+ENTRY(_blackfin_dcache_invalidate_range)
+       R2 = -32;
+       R2 = R0 & R2;
+       P0 = R2;
+       P1 = R1;
+       CSYNC;
+1:
+       FLUSHINV[P0++];
+       CC = P0 < P1(iu);
+       IF CC JUMP 1b(bp);
+
+       /*
+        * If the data crosses a cache line, then we'll be pointing to
+        * the last cache line, but won't have flushed/invalidated it yet, so do
+        * one more.
+        */
+       FLUSHINV[P0];
+       SSYNC;
+       RTS;
+ENDPROC(_blackfin_dcache_invalidate_range)
 
--- /dev/null
+/*
+ * U-boot - cpu.c CPU specific functions
+ *
+ * Copyright (c) 2005-2008 Analog Devices Inc.
+ *
+ * (C) Copyright 2000-2004
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/blackfin.h>
+#include <asm/cplb.h>
+#include <asm/mach-common/bits/core.h>
+#include <asm/mach-common/bits/mpu.h>
+#include <asm/mach-common/bits/trace.h>
+
+#include "cpu.h"
+#include "serial.h"
+
+void icache_enable(void)
+{
+       bfin_write_IMEM_CONTROL(bfin_read_IMEM_CONTROL() | (IMC | ENICPLB));
+       SSYNC();
+}
+
+void icache_disable(void)
+{
+       bfin_write_IMEM_CONTROL(bfin_read_IMEM_CONTROL() & ~(IMC | ENICPLB));
+       SSYNC();
+}
+
+int icache_status(void)
+{
+       return bfin_read_IMEM_CONTROL() & ENICPLB;
+}
+
+void dcache_enable(void)
+{
+       bfin_write_DMEM_CONTROL(bfin_read_DMEM_CONTROL() | (ACACHE_BCACHE | ENDCPLB | PORT_PREF0));
+       SSYNC();
+}
+
+void dcache_disable(void)
+{
+       bfin_write_DMEM_CONTROL(bfin_read_DMEM_CONTROL() & ~(ACACHE_BCACHE | ENDCPLB | PORT_PREF0));
+       SSYNC();
+}
+
+int dcache_status(void)
+{
+       return bfin_read_DMEM_CONTROL() & ENDCPLB;
+}
+
+__attribute__ ((__noreturn__))
+void cpu_init_f(ulong bootflag, ulong loaded_from_ldr)
+{
+       /* Build a NOP slide over the LDR jump block.  Whee! */
+       serial_early_puts("NOP Slide\n");
+       char nops[0xC];
+       memset(nops, 0x00, sizeof(nops));
+       extern char _stext_l1;
+       memcpy(&_stext_l1 - sizeof(nops), nops, sizeof(nops));
+
+       if (!loaded_from_ldr) {
+               /* Relocate sections into L1 if the LDR didn't do it -- don't
+                * check length because the linker script does the size
+                * checking at build time.
+                */
+               serial_early_puts("L1 Relocate\n");
+               extern char _stext_l1, _etext_l1, _stext_l1_lma;
+               memcpy(&_stext_l1, &_stext_l1_lma, (&_etext_l1 - &_stext_l1));
+               extern char _sdata_l1, _edata_l1, _sdata_l1_lma;
+               memcpy(&_sdata_l1, &_sdata_l1_lma, (&_edata_l1 - &_sdata_l1));
+       }
+#if defined(__ADSPBF537__) || defined(__ADSPBF536__) || defined(__ADSPBF534__)
+       /* The BF537 bootrom will reset the EBIU_AMGCTL register on us
+        * after it has finished loading the LDR.  So configure it again.
+        */
+       else
+               bfin_write_EBIU_AMGCTL(CONFIG_EBIU_AMGCTL_VAL);
+#endif
+
+#ifdef CONFIG_DEBUG_DUMP
+       /* Turn on hardware trace buffer */
+       bfin_write_TBUFCTL(TBUFPWR | TBUFEN);
+#endif
+
+#ifndef CONFIG_PANIC_HANG
+       /* Reset upon a double exception rather than just hanging.
+        * Do not do bfin_read on SWRST as that will reset status bits.
+        */
+       bfin_write_SWRST(DOUBLE_FAULT);
+#endif
+
+       serial_early_puts("Board init flash\n");
+       board_init_f(bootflag);
+}
+
+int exception_init(void)
+{
+       bfin_write_EVT3(trap);
+       return 0;
+}
+
+int irq_init(void)
+{
+#ifdef SIC_IMASK0
+       bfin_write_SIC_IMASK0(0);
+       bfin_write_SIC_IMASK1(0);
+# ifdef SIC_IMASK2
+       bfin_write_SIC_IMASK2(0);
+# endif
+#elif defined(SICA_IMASK0)
+       bfin_write_SICA_IMASK0(0);
+       bfin_write_SICA_IMASK1(0);
+#else
+       bfin_write_SIC_IMASK(0);
+#endif
+       bfin_write_EVT2(evt_default);   /* NMI */
+       bfin_write_EVT5(evt_default);   /* hardware error */
+       bfin_write_EVT6(evt_default);   /* core timer */
+       bfin_write_EVT7(evt_default);
+       bfin_write_EVT8(evt_default);
+       bfin_write_EVT9(evt_default);
+       bfin_write_EVT10(evt_default);
+       bfin_write_EVT11(evt_default);
+       bfin_write_EVT12(evt_default);
+       bfin_write_EVT13(evt_default);
+       bfin_write_EVT14(evt_default);
+       bfin_write_EVT15(evt_default);
+       bfin_write_ILAT(0);
+       CSYNC();
+       /* enable all interrupts except for core timer */
+       irq_flags = 0xffffffbf;
+       local_irq_enable();
+       CSYNC();
+       return 0;
+}
 
--- /dev/null
+/*
+ *  U-boot - cpu.h
+ *
+ *  Copyright (c) 2005-2007 Analog Devices Inc.
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#ifndef _CPU_H_
+#define _CPU_H_
+
+#include <command.h>
+
+void board_reset(void) __attribute__((__weak__));
+void bfin_reset_or_hang(void) __attribute__((__noreturn__));
+void bfin_panic(struct pt_regs *reg);
+void dump(struct pt_regs *regs);
+
+asmlinkage void trap(void);
+asmlinkage void evt_default(void);
+
+#endif
 
--- /dev/null
+/* flush.S - low level cache flushing routines
+ * Copyright (C) 2003-2007 Analog Devices Inc.
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <config.h>
+#include <asm/blackfin.h>
+#include <asm/cplb.h>
+#include <asm/mach-common/bits/mpu.h>
+
+.text
+
+/* This is an external function being called by the user
+ * application through __flush_cache_all. Currently this function
+ * serves the purpose of flushing all the pending writes in
+ * in the data cache.
+ */
+
+ENTRY(_flush_data_cache)
+       [--SP] = ( R7:6, P5:4 );
+       LINK 12;
+       SP += -12;
+       P5.H = HI(DCPLB_ADDR0);
+       P5.L = LO(DCPLB_ADDR0);
+       P4.H = HI(DCPLB_DATA0);
+       P4.L = LO(DCPLB_DATA0);
+       R7 = CPLB_VALID | CPLB_L1_CHBL | CPLB_DIRTY (Z);
+       R6 = 16;
+.Lnext:        R0 = [P5++];
+       R1 = [P4++];
+       CC = BITTST(R1, 14);    /* Is it write-through?*/
+       IF CC JUMP .Lskip;      /* If so, ignore it.*/
+       R2 = R1 & R7;           /* Is it a dirty, cached page?*/
+       CC = R2;
+       IF !CC JUMP .Lskip;     /* If not, ignore it.*/
+       [--SP] = RETS;
+       CALL _dcplb_flush;      /* R0 = page, R1 = data*/
+       RETS = [SP++];
+.Lskip:        R6 += -1;
+       CC = R6;
+       IF CC JUMP .Lnext;
+       SSYNC;
+       SP += 12;
+       UNLINK;
+       ( R7:6, P5:4 ) = [SP++];
+       RTS;
+ENDPROC(_flush_data_cache)
+
+/* This is an internal function to flush all pending
+ * writes in the cache associated with a particular DCPLB.
+ *
+ * R0 -  page's start address
+ * R1 -  CPLB's data field.
+ */
+
+.align 2
+ENTRY(_dcplb_flush)
+       [--SP] = ( R7:0, P5:0 );
+       [--SP] = LC0;
+       [--SP] = LT0;
+       [--SP] = LB0;
+       [--SP] = LC1;
+       [--SP] = LT1;
+       [--SP] = LB1;
+
+       /* If it's a 1K or 4K page, then it's quickest to
+        * just systematically flush all the addresses in
+        * the page, regardless of whether they're in the
+        * cache, or dirty. If it's a 1M or 4M page, there
+        * are too many addresses, and we have to search the
+        * cache for lines corresponding to the page.
+        */
+
+       CC = BITTST(R1, 17);    /* 1MB or 4MB */
+       IF !CC JUMP .Ldflush_whole_page;
+
+       /* We're only interested in the page's size, so extract
+        * this from the CPLB (bits 17:16), and scale to give an
+        * offset into the page_size and page_prefix tables.
+        */
+
+       R1 <<= 14;
+       R1 >>= 30;
+       R1 <<= 2;
+
+       /* The page could be mapped into Bank A or Bank B, depending
+        * on (a) whether both banks are configured as cache, and
+        * (b) on whether address bit A[x] is set. x is determined
+        * by DCBS in DMEM_CONTROL
+        */
+
+       R2 = 0;                 /* Default to Bank A (Bank B would be 1)*/
+
+       P0.L = LO(DMEM_CONTROL);
+       P0.H = HI(DMEM_CONTROL);
+
+       R3 = [P0];              /* If Bank B is not enabled as cache*/
+       CC = BITTST(R3, 2);     /* then Bank A is our only option.*/
+       IF CC JUMP .Lbank_chosen;
+
+       R4 = 1<<14;             /* If DCBS==0, use A[14].*/
+       R5 = R4 << 7;           /* If DCBS==1, use A[23];*/
+       CC = BITTST(R3, 4);
+       IF CC R4 = R5;          /* R4 now has either bit 14 or bit 23 set.*/
+       R5 = R0 & R4;           /* Use it to test the Page address*/
+       CC = R5;                /* and if that bit is set, we use Bank B,*/
+       R2 = CC;                /* else we use Bank A.*/
+       R2 <<= 23;              /* The Bank selection's at posn 23.*/
+
+.Lbank_chosen:
+
+       /* We can also determine the sub-bank used, because this is
+        * taken from bits 13:12 of the address.
+        */
+
+       R3 = ((12<<8)|2);               /* Extraction pattern */
+       nop;                            /*Anamoly 05000209*/
+       R4 = EXTRACT(R0, R3.L) (Z);     /* Extract bits*/
+       /* Save in extraction pattern for later deposit.*/
+       R3.H = R4.L << 0;
+
+       /* So:
+        * R0 = Page start
+        * R1 = Page length (actually, offset into size/prefix tables)
+        * R2 = Bank select mask
+        * R3 = sub-bank deposit values
+        *
+        * The cache has 2 Ways, and 64 sets, so we iterate through
+        * the sets, accessing the tag for each Way, for our Bank and
+        * sub-bank, looking for dirty, valid tags that match our
+        * address prefix.
+        */
+
+       P5.L = LO(DTEST_COMMAND);
+       P5.H = HI(DTEST_COMMAND);
+       P4.L = LO(DTEST_DATA0);
+       P4.H = HI(DTEST_DATA0);
+
+       P0.L = page_prefix_table;
+       P0.H = page_prefix_table;
+       P1 = R1;
+       R5 = 0;                 /* Set counter*/
+       P0 = P1 + P0;
+       R4 = [P0];              /* This is the address prefix*/
+
+
+       /* We're reading (bit 1==0) the tag (bit 2==0), and we
+        * don't care about which double-word, since we're only
+        * fetching tags, so we only have to set Set, Bank,
+        * Sub-bank and Way.
+        */
+
+       P2 = 2;
+       LSETUP (.Lfs1, .Lfe1) LC1 = P2;
+.Lfs1: P0 = 64;                /* iterate over all sets*/
+       LSETUP (.Lfs0, .Lfe0) LC0 = P0;
+.Lfs0: R6 = R5 << 5;           /* Combine set*/
+       R6.H = R3.H << 0 ;      /* and sub-bank*/
+       R6 = R6 | R2;           /* and Bank. Leave Way==0 at first.*/
+       BITSET(R6,14);
+       [P5] = R6;              /* Issue Command*/
+       SSYNC;
+       R7 = [P4];              /* and read Tag.*/
+       CC = BITTST(R7, 0);     /* Check if valid*/
+       IF !CC JUMP .Lfskip;    /* and skip if not.*/
+       CC = BITTST(R7, 1);     /* Check if dirty*/
+       IF !CC JUMP .Lfskip;    /* and skip if not.*/
+
+       /* Compare against the page address. First, plant bits 13:12
+        * into the tag, since those aren't part of the returned data.
+        */
+
+       R7 = DEPOSIT(R7, R3);   /* set 13:12*/
+       R1 = R7 & R4;           /* Mask off lower bits*/
+       CC = R1 == R0;          /* Compare against page start.*/
+       IF !CC JUMP .Lfskip;    /* Skip it if it doesn't match.*/
+
+       /* Tag address matches against page, so this is an entry
+        * we must flush.
+        */
+
+       R7 >>= 10;              /* Mask off the non-address bits*/
+       R7 <<= 10;
+       P3 = R7;
+       SSYNC;
+       FLUSHINV [P3];          /* And flush the entry*/
+.Lfskip:
+.Lfe0: R5 += 1;                /* Advance to next Set*/
+.Lfe1: BITSET(R2, 26);         /* Go to next Way.*/
+
+.Ldfinished:
+       SSYNC;                  /* Ensure the data gets out to mem.*/
+
+       /*Finished. Restore context.*/
+       LB1 = [SP++];
+       LT1 = [SP++];
+       LC1 = [SP++];
+       LB0 = [SP++];
+       LT0 = [SP++];
+       LC0 = [SP++];
+       ( R7:0, P5:0 ) = [SP++];
+       RTS;
+
+.Ldflush_whole_page:
+
+       /* It's a 1K or 4K page, so quicker to just flush the
+        * entire page.
+        */
+
+       P1 = 32;                /* For 1K pages*/
+       P2 = P1 << 2;           /* For 4K pages*/
+       P0 = R0;                /* Start of page*/
+       CC = BITTST(R1, 16);    /* Whether 1K or 4K*/
+       IF CC P1 = P2;
+       P1 += -1;               /* Unroll one iteration*/
+       SSYNC;
+       FLUSHINV [P0++];        /* because CSYNC can't end loops.*/
+       LSETUP (.Leall, .Leall) LC0 = P1;
+.Leall:        FLUSHINV [P0++];
+       SSYNC;
+       JUMP .Ldfinished;
+ENDPROC(_dcplb_flush)
+
+.align 4;
+page_prefix_table:
+.byte4         0xFFFFFC00;     /* 1K */
+.byte4 0xFFFFF000;     /* 4K */
+.byte4 0xFFF00000;     /* 1M */
+.byte4 0xFFC00000;     /* 4M */
+.page_prefix_table.end:
 
--- /dev/null
+/*
+ * i2c.c - driver for Blackfin on-chip TWI/I2C
+ *
+ * Copyright (c) 2006-2008 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+
+#ifdef CONFIG_HARD_I2C
+
+#include <asm/blackfin.h>
+#include <i2c.h>
+#include <asm/io.h>
+#include <asm/mach-common/bits/twi.h>
+
+/* Two-Wire Interface          (0xFFC01400 - 0xFFC014FF) */
+#ifdef TWI0_CLKDIV
+#define bfin_read_TWI_CLKDIV()               bfin_read_TWI0_CLKDIV()
+#define bfin_write_TWI_CLKDIV(val)           bfin_write_TWI0_CLKDIV(val)
+#define bfin_read_TWI_CONTROL()              bfin_read_TWI0_CONTROL()
+#define bfin_write_TWI_CONTROL(val)          bfin_write_TWI0_CONTROL(val)
+#define bfin_read_TWI_SLAVE_CTL()            bfin_read_TWI0_SLAVE_CTL()
+#define bfin_write_TWI_SLAVE_CTL(val)        bfin_write_TWI0_SLAVE_CTL(val)
+#define bfin_read_TWI_SLAVE_STAT()           bfin_read_TWI0_SLAVE_STAT()
+#define bfin_write_TWI_SLAVE_STAT(val)       bfin_write_TWI0_SLAVE_STAT(val)
+#define bfin_read_TWI_SLAVE_ADDR()           bfin_read_TWI0_SLAVE_ADDR()
+#define bfin_write_TWI_SLAVE_ADDR(val)       bfin_write_TWI0_SLAVE_ADDR(val)
+#define bfin_read_TWI_MASTER_CTL()           bfin_read_TWI0_MASTER_CTL()
+#define bfin_write_TWI_MASTER_CTL(val)       bfin_write_TWI0_MASTER_CTL(val)
+#define bfin_read_TWI_MASTER_STAT()          bfin_read_TWI0_MASTER_STAT()
+#define bfin_write_TWI_MASTER_STAT(val)      bfin_write_TWI0_MASTER_STAT(val)
+#define bfin_read_TWI_MASTER_ADDR()          bfin_read_TWI0_MASTER_ADDR()
+#define bfin_write_TWI_MASTER_ADDR(val)      bfin_write_TWI0_MASTER_ADDR(val)
+#define bfin_read_TWI_INT_STAT()             bfin_read_TWI0_INT_STAT()
+#define bfin_write_TWI_INT_STAT(val)         bfin_write_TWI0_INT_STAT(val)
+#define bfin_read_TWI_INT_MASK()             bfin_read_TWI0_INT_MASK()
+#define bfin_write_TWI_INT_MASK(val)         bfin_write_TWI0_INT_MASK(val)
+#define bfin_read_TWI_FIFO_CTL()             bfin_read_TWI0_FIFO_CTL()
+#define bfin_write_TWI_FIFO_CTL(val)         bfin_write_TWI0_FIFO_CTL(val)
+#define bfin_read_TWI_FIFO_STAT()            bfin_read_TWI0_FIFO_STAT()
+#define bfin_write_TWI_FIFO_STAT(val)        bfin_write_TWI0_FIFO_STAT(val)
+#define bfin_read_TWI_XMT_DATA8()            bfin_read_TWI0_XMT_DATA8()
+#define bfin_write_TWI_XMT_DATA8(val)        bfin_write_TWI0_XMT_DATA8(val)
+#define bfin_read_TWI_XMT_DATA_16()          bfin_read_TWI0_XMT_DATA16()
+#define bfin_write_TWI_XMT_DATA16(val)       bfin_write_TWI0_XMT_DATA16(val)
+#define bfin_read_TWI_RCV_DATA8()            bfin_read_TWI0_RCV_DATA8()
+#define bfin_write_TWI_RCV_DATA8(val)        bfin_write_TWI0_RCV_DATA8(val)
+#define bfin_read_TWI_RCV_DATA16()           bfin_read_TWI0_RCV_DATA16()
+#define bfin_write_TWI_RCV_DATA16(val)       bfin_write_TWI0_RCV_DATA16(val)
+#endif
+
+#ifdef DEBUG_I2C
+#define PRINTD(fmt,args...)    do {    \
+       DECLARE_GLOBAL_DATA_PTR;        \
+       if (gd->have_console)           \
+               printf(fmt ,##args);    \
+       } while (0)
+#else
+#define PRINTD(fmt,args...)
+#endif
+
+#ifndef CONFIG_TWICLK_KHZ
+#define CONFIG_TWICLK_KHZ      50
+#endif
+
+/* All transfers are described by this data structure */
+struct i2c_msg {
+       u16 addr;               /* slave address */
+       u16 flags;
+#define I2C_M_STOP             0x2
+#define I2C_M_RD               0x1
+       u16 len;                /* msg length */
+       u8 *buf;                /* pointer to msg data */
+};
+
+/**
+ * i2c_reset: - reset the host controller
+ */
+static void i2c_reset(void)
+{
+       /* Disable TWI */
+       bfin_write_TWI_CONTROL(0);
+       SSYNC();
+
+       /* Set TWI internal clock as 10MHz */
+       bfin_write_TWI_CONTROL(((get_sclk() / 1024 / 1024 + 5) / 10) & 0x7F);
+
+       /* Set Twi interface clock as specified */
+       if (CONFIG_TWICLK_KHZ > 400)
+               bfin_write_TWI_CLKDIV(((5 * 1024 / 400) << 8) | ((5 * 1024 /
+                                               400) & 0xFF));
+       else
+               bfin_write_TWI_CLKDIV(((5 * 1024 /
+                                       CONFIG_TWICLK_KHZ) << 8) | ((5 * 1024 /
+                                               CONFIG_TWICLK_KHZ)
+                                               & 0xFF));
+
+       /* Enable TWI */
+       bfin_write_TWI_CONTROL(bfin_read_TWI_CONTROL() | TWI_ENA);
+       SSYNC();
+}
+
+int wait_for_completion(struct i2c_msg *msg, int timeout_count)
+{
+       unsigned short twi_int_stat;
+       unsigned short mast_stat;
+       int i;
+
+       for (i = 0; i < timeout_count; i++) {
+               twi_int_stat = bfin_read_TWI_INT_STAT();
+               mast_stat = bfin_read_TWI_MASTER_STAT();
+
+               if (XMTSERV & twi_int_stat) {
+                       /* Transmit next data */
+                       if (msg->len > 0) {
+                               bfin_write_TWI_XMT_DATA8(*(msg->buf++));
+                               msg->len--;
+                       } else if (msg->flags & I2C_M_STOP)
+                               bfin_write_TWI_MASTER_CTL
+                                   (bfin_read_TWI_MASTER_CTL() | STOP);
+                       SSYNC();
+                       /* Clear status */
+                       bfin_write_TWI_INT_STAT(XMTSERV);
+                       SSYNC();
+                       i = 0;
+               }
+               if (RCVSERV & twi_int_stat) {
+                       if (msg->len > 0) {
+                               /* Receive next data */
+                               *(msg->buf++) = bfin_read_TWI_RCV_DATA8();
+                               msg->len--;
+                       } else if (msg->flags & I2C_M_STOP) {
+                               bfin_write_TWI_MASTER_CTL
+                                   (bfin_read_TWI_MASTER_CTL() | STOP);
+                               SSYNC();
+                       }
+                       /* Clear interrupt source */
+                       bfin_write_TWI_INT_STAT(RCVSERV);
+                       SSYNC();
+                       i = 0;
+               }
+               if (MERR & twi_int_stat) {
+                       bfin_write_TWI_INT_STAT(MERR);
+                       bfin_write_TWI_INT_MASK(0);
+                       bfin_write_TWI_MASTER_STAT(0x3e);
+                       bfin_write_TWI_MASTER_CTL(0);
+                       SSYNC();
+                       /*
+                        * if both err and complete int stats are set,
+                        * return proper results.
+                        */
+                       if (MCOMP & twi_int_stat) {
+                               bfin_write_TWI_INT_STAT(MCOMP);
+                               bfin_write_TWI_INT_MASK(0);
+                               bfin_write_TWI_MASTER_CTL(0);
+                               SSYNC();
+                               /*
+                                * If it is a quick transfer,
+                                * only address bug no data, not an err.
+                                */
+                               if (msg->len == 0 && mast_stat & BUFRDERR)
+                                       return 0;
+                               /*
+                                * If address not acknowledged return -3,
+                                * else return 0.
+                                */
+                               else if (!(mast_stat & ANAK))
+                                       return 0;
+                               else
+                                       return -3;
+                       }
+                       return -1;
+               }
+               if (MCOMP & twi_int_stat) {
+                       bfin_write_TWI_INT_STAT(MCOMP);
+                       SSYNC();
+                       bfin_write_TWI_INT_MASK(0);
+                       bfin_write_TWI_MASTER_CTL(0);
+                       SSYNC();
+                       return 0;
+               }
+       }
+       if (msg->flags & I2C_M_RD)
+               return -4;
+       else
+               return -2;
+}
+
+/**
+ * i2c_transfer: - Transfer one byte over the i2c bus
+ *
+ * This function can tranfer a byte over the i2c bus in both directions.
+ * It is used by the public API functions.
+ *
+ * @return:     0: transfer successful
+ *             -1: transfer fail
+ *             -2: transmit timeout
+ *             -3: ACK missing
+ *             -4: receive timeout
+ *             -5: controller not ready
+ */
+int i2c_transfer(struct i2c_msg *msg)
+{
+       int ret = 0;
+       int timeout_count = 10000;
+       int len = msg->len;
+
+       if (!(bfin_read_TWI_CONTROL() & TWI_ENA)) {
+               ret = -5;
+               goto transfer_error;
+       }
+
+       while (bfin_read_TWI_MASTER_STAT() & BUSBUSY)
+               continue;
+
+       /* Set Transmit device address */
+       bfin_write_TWI_MASTER_ADDR(msg->addr);
+
+       /*
+        * FIFO Initiation.
+        * Data in FIFO should be discarded before start a new operation.
+        */
+       bfin_write_TWI_FIFO_CTL(0x3);
+       SSYNC();
+       bfin_write_TWI_FIFO_CTL(0);
+       SSYNC();
+
+       if (!(msg->flags & I2C_M_RD)) {
+               /* Transmit first data */
+               if (msg->len > 0) {
+                       PRINTD("1 in i2c_transfer: buf=%d, len=%d\n", *msg->buf,
+                              len);
+                       bfin_write_TWI_XMT_DATA8(*(msg->buf++));
+                       msg->len--;
+                       SSYNC();
+               }
+       }
+
+       /* clear int stat */
+       bfin_write_TWI_INT_STAT(MERR | MCOMP | XMTSERV | RCVSERV);
+
+       /* Interrupt mask . Enable XMT, RCV interrupt */
+       bfin_write_TWI_INT_MASK(MCOMP | MERR |
+                       ((msg->flags & I2C_M_RD) ? RCVSERV : XMTSERV));
+       SSYNC();
+
+       if (len > 0 && len <= 255)
+               bfin_write_TWI_MASTER_CTL((len << 6));
+       else if (msg->len > 255) {
+               bfin_write_TWI_MASTER_CTL((0xff << 6));
+               msg->flags &= I2C_M_STOP;
+       } else
+               bfin_write_TWI_MASTER_CTL(0);
+
+       /* Master enable */
+       bfin_write_TWI_MASTER_CTL(bfin_read_TWI_MASTER_CTL() | MEN |
+                       ((msg->flags & I2C_M_RD)
+                        ? MDIR : 0) | ((CONFIG_TWICLK_KHZ >
+                                        100) ? FAST : 0));
+       SSYNC();
+
+       ret = wait_for_completion(msg, timeout_count);
+       PRINTD("3 in i2c_transfer: ret=%d\n", ret);
+
+ transfer_error:
+       switch (ret) {
+       case 1:
+               PRINTD(("i2c_transfer: error: transfer fail\n"));
+               break;
+       case 2:
+               PRINTD(("i2c_transfer: error: transmit timeout\n"));
+               break;
+       case 3:
+               PRINTD(("i2c_transfer: error: ACK missing\n"));
+               break;
+       case 4:
+               PRINTD(("i2c_transfer: error: receive timeout\n"));
+               break;
+       case 5:
+               PRINTD(("i2c_transfer: error: controller not ready\n"));
+               i2c_reset();
+               break;
+       default:
+               break;
+       }
+       return ret;
+
+}
+
+/* ---------------------------------------------------------------------*/
+/* API Functions                                                       */
+/* ---------------------------------------------------------------------*/
+
+void i2c_init(int speed, int slaveaddr)
+{
+       i2c_reset();
+}
+
+/**
+ * i2c_probe: - Test if a chip answers for a given i2c address
+ *
+ * @chip:      address of the chip which is searched for
+ * @return:    0 if a chip was found, -1 otherwhise
+ */
+
+int i2c_probe(uchar chip)
+{
+       struct i2c_msg msg;
+       u8 probebuf;
+
+       i2c_reset();
+
+       probebuf = 0;
+       msg.addr = chip;
+       msg.flags = 0;
+       msg.len = 1;
+       msg.buf = &probebuf;
+       if (i2c_transfer(&msg))
+               return -1;
+
+       msg.addr = chip;
+       msg.flags = I2C_M_RD;
+       msg.len = 1;
+       msg.buf = &probebuf;
+       if (i2c_transfer(&msg))
+               return -1;
+
+       return 0;
+}
+
+/**
+ *   i2c_read: - Read multiple bytes from an i2c device
+ *
+ *   chip:    I2C chip address, range 0..127
+ *   addr:    Memory (register) address within the chip
+ *   alen:    Number of bytes to use for addr (typically 1, 2 for larger
+ *             memories, 0 for register type devices with only one
+ *             register)
+ *   buffer:  Where to read/write the data
+ *   len:     How many bytes to read/write
+ *
+ *   Returns: 0 on success, not 0 on failure
+ */
+
+int i2c_read(uchar chip, uint addr, int alen, uchar * buffer, int len)
+{
+       struct i2c_msg msg;
+       u8 addr_bytes[3];       /* lowest...highest byte of data address */
+
+       PRINTD("i2c_read: chip=0x%x, addr=0x%x, alen=0x%x, len=0x%x\n", chip,
+                       addr, alen, len);
+
+       if (alen > 0) {
+               addr_bytes[0] = (u8) ((addr >> 0) & 0x000000FF);
+               addr_bytes[1] = (u8) ((addr >> 8) & 0x000000FF);
+               addr_bytes[2] = (u8) ((addr >> 16) & 0x000000FF);
+               msg.addr = chip;
+               msg.flags = 0;
+               msg.len = alen;
+               msg.buf = addr_bytes;
+               if (i2c_transfer(&msg))
+                       return -1;
+       }
+
+       /* start read sequence */
+       PRINTD(("i2c_read: start read sequence\n"));
+       msg.addr = chip;
+       msg.flags = I2C_M_RD;
+       msg.len = len;
+       msg.buf = buffer;
+       if (i2c_transfer(&msg))
+               return -1;
+
+       return 0;
+}
+
+/**
+ *   i2c_write: -  Write multiple bytes to an i2c device
+ *
+ *   chip:    I2C chip address, range 0..127
+ *   addr:    Memory (register) address within the chip
+ *   alen:    Number of bytes to use for addr (typically 1, 2 for larger
+ *             memories, 0 for register type devices with only one
+ *             register)
+ *   buffer:  Where to read/write the data
+ *   len:     How many bytes to read/write
+ *
+ *   Returns: 0 on success, not 0 on failure
+ */
+
+int i2c_write(uchar chip, uint addr, int alen, uchar * buffer, int len)
+{
+       struct i2c_msg msg;
+       u8 addr_bytes[3];       /* lowest...highest byte of data address */
+
+       PRINTD
+               ("i2c_write: chip=0x%x, addr=0x%x, alen=0x%x, len=0x%x, buf0=0x%x\n",
+                chip, addr, alen, len, buffer[0]);
+
+       /* chip address write */
+       if (alen > 0) {
+               addr_bytes[0] = (u8) ((addr >> 0) & 0x000000FF);
+               addr_bytes[1] = (u8) ((addr >> 8) & 0x000000FF);
+               addr_bytes[2] = (u8) ((addr >> 16) & 0x000000FF);
+               msg.addr = chip;
+               msg.flags = 0;
+               msg.len = alen;
+               msg.buf = addr_bytes;
+               if (i2c_transfer(&msg))
+                       return -1;
+       }
+
+       /* start read sequence */
+       PRINTD(("i2c_write: start write sequence\n"));
+       msg.addr = chip;
+       msg.flags = 0;
+       msg.len = len;
+       msg.buf = buffer;
+       if (i2c_transfer(&msg))
+               return -1;
+
+       return 0;
+
+}
+
+uchar i2c_reg_read(uchar chip, uchar reg)
+{
+       uchar buf;
+
+       PRINTD("i2c_reg_read: chip=0x%02x, reg=0x%02x\n", chip, reg);
+       i2c_read(chip, reg, 0, &buf, 1);
+       return (buf);
+}
+
+void i2c_reg_write(uchar chip, uchar reg, uchar val)
+{
+       PRINTD("i2c_reg_write: chip=0x%02x, reg=0x%02x, val=0x%02x\n", chip,
+                       reg, val);
+       i2c_write(chip, reg, 0, &val, 1);
+}
+
+#endif /* CONFIG_HARD_I2C */
 
--- /dev/null
+/*
+ * initcode.c - Initialize the processor.  This is usually entails things
+ * like external memory, voltage regulators, etc...  Note that this file
+ * cannot make any function calls as it may be executed all by itself by
+ * the Blackfin's bootrom in LDR format.
+ *
+ * Copyright (c) 2004-2008 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <config.h>
+#include <asm/blackfin.h>
+#include <asm/mach-common/bits/bootrom.h>
+#include <asm/mach-common/bits/ebiu.h>
+#include <asm/mach-common/bits/pll.h>
+#include <asm/mach-common/bits/uart.h>
+
+#define BFIN_IN_INITCODE
+#include "serial.h"
+
+__attribute__((always_inline))
+static inline uint32_t serial_init(void)
+{
+#ifdef __ADSPBF54x__
+# ifdef BFIN_BOOT_UART_USE_RTS
+#  define BFIN_UART_USE_RTS 1
+# else
+#  define BFIN_UART_USE_RTS 0
+# endif
+       if (BFIN_UART_USE_RTS && CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_UART) {
+               size_t i;
+
+               /* force RTS rather than relying on auto RTS */
+               bfin_write_UART1_MCR(bfin_read_UART1_MCR() | FCPOL);
+
+               /* Wait for the line to clear up.  We cannot rely on UART
+                * registers as none of them reflect the status of the RSR.
+                * Instead, we'll sleep for ~10 bit times at 9600 baud.
+                * We can precalc things here by assuming boot values for
+                * PLL rather than loading registers and calculating.
+                *      baud    = SCLK / (16 ^ (1 - EDBO) * Divisor)
+                *      EDB0    = 0
+                *      Divisor = (SCLK / baud) / 16
+                *      SCLK    = baud * 16 * Divisor
+                *      SCLK    = (0x14 * CONFIG_CLKIN_HZ) / 5
+                *      CCLK    = (16 * Divisor * 5) * (9600 / 10)
+                * In reality, this will probably be just about 1 second delay,
+                * so assuming 9600 baud is OK (both as a very low and too high
+                * speed as this will buffer things enough).
+                */
+#define _NUMBITS (10)                                   /* how many bits to delay */
+#define _LOWBAUD (9600)                                 /* low baud rate */
+#define _SCLK    ((0x14 * CONFIG_CLKIN_HZ) / 5)         /* SCLK based on PLL */
+#define _DIVISOR ((_SCLK / _LOWBAUD) / 16)              /* UART DLL/DLH */
+#define _NUMINS  (3)                                    /* how many instructions in loop */
+#define _CCLK    (((16 * _DIVISOR * 5) * (_LOWBAUD / _NUMBITS)) / _NUMINS)
+               i = _CCLK;
+               while (i--)
+                       asm volatile("" : : : "memory");
+       }
+#endif
+
+       uint32_t old_baud = serial_early_get_baud();
+
+       if (BFIN_DEBUG_EARLY_SERIAL) {
+               serial_early_init();
+
+               /* If the UART is off, that means we need to program
+                * the baud rate ourselves initially.
+                */
+               if (!old_baud) {
+                       old_baud = CONFIG_BAUDRATE;
+                       serial_early_set_baud(CONFIG_BAUDRATE);
+               }
+       }
+
+       return old_baud;
+}
+
+__attribute__((always_inline))
+static inline void serial_deinit(void)
+{
+#ifdef __ADSPBF54x__
+       if (BFIN_UART_USE_RTS && CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_UART) {
+               /* clear forced RTS rather than relying on auto RTS */
+               bfin_write_UART1_MCR(bfin_read_UART1_MCR() & ~FCPOL);
+       }
+#endif
+}
+
+/* We need to reset the baud rate when we have early debug turned on
+ * or when we are booting over the UART.
+ * XXX: we should fix this to calc the old baud and restore it rather
+ *      than hardcoding it via CONFIG_LDR_LOAD_BAUD ... but we have
+ *      to figure out how to avoid the division in the baud calc ...
+ */
+__attribute__((always_inline))
+static inline void serial_reset_baud(uint32_t baud)
+{
+       if (!BFIN_DEBUG_EARLY_SERIAL && CONFIG_BFIN_BOOT_MODE != BFIN_BOOT_UART)
+               return;
+
+#ifndef CONFIG_LDR_LOAD_BAUD
+# define CONFIG_LDR_LOAD_BAUD 115200
+#endif
+
+       if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_BYPASS)
+               serial_early_set_baud(baud);
+       else if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_UART)
+               serial_early_set_baud(CONFIG_LDR_LOAD_BAUD);
+       else
+               serial_early_set_baud(CONFIG_BAUDRATE);
+}
+
+__attribute__((always_inline))
+static inline void serial_putc(char c)
+{
+       if (!BFIN_DEBUG_EARLY_SERIAL)
+               return;
+
+       if (c == '\n')
+               *pUART_THR = '\r';
+
+       *pUART_THR = c;
+
+       while (!(*pUART_LSR & TEMT))
+               continue;
+}
+
+
+/* Max SCLK can be 133MHz ... dividing that by 4 gives
+ * us a freq of 33MHz for SPI which should generally be
+ * slow enough for the slow reads the bootrom uses.
+ */
+#ifndef CONFIG_SPI_BAUD_INITBLOCK
+# define CONFIG_SPI_BAUD_INITBLOCK 4
+#endif
+
+/* PLL_DIV defines */
+#ifndef CONFIG_PLL_DIV_VAL
+# if (CONFIG_CCLK_DIV == 1)
+#  define CONFIG_CCLK_ACT_DIV CCLK_DIV1
+# elif (CONFIG_CCLK_DIV == 2)
+#  define CONFIG_CCLK_ACT_DIV CCLK_DIV2
+# elif (CONFIG_CCLK_DIV == 4)
+#  define CONFIG_CCLK_ACT_DIV CCLK_DIV4
+# elif (CONFIG_CCLK_DIV == 8)
+#  define CONFIG_CCLK_ACT_DIV CCLK_DIV8
+# else
+#  define CONFIG_CCLK_ACT_DIV CONFIG_CCLK_DIV_not_defined_properly
+# endif
+# define CONFIG_PLL_DIV_VAL (CONFIG_CCLK_ACT_DIV | CONFIG_SCLK_DIV)
+#endif
+
+#ifndef CONFIG_PLL_LOCKCNT_VAL
+# define CONFIG_PLL_LOCKCNT_VAL 0x0300
+#endif
+
+#ifndef CONFIG_PLL_CTL_VAL
+# define CONFIG_PLL_CTL_VAL (SPORT_HYST | (CONFIG_VCO_MULT << 9))
+#endif
+
+#ifndef CONFIG_EBIU_RSTCTL_VAL
+# define CONFIG_EBIU_RSTCTL_VAL 0 /* only MDDRENABLE is useful */
+#endif
+
+#ifndef CONFIG_EBIU_MBSCTL_VAL
+# define CONFIG_EBIU_MBSCTL_VAL 0
+#endif
+
+/* Make sure our voltage value is sane so we don't blow up! */
+#ifndef CONFIG_VR_CTL_VAL
+# define BFIN_CCLK ((CONFIG_CLKIN_HZ * CONFIG_VCO_MULT) / CONFIG_CCLK_DIV)
+# if defined(__ADSPBF533__) || defined(__ADSPBF532__) || defined(__ADSPBF531__)
+#  define CCLK_VLEV_120        400000000
+#  define CCLK_VLEV_125        533000000
+# elif defined(__ADSPBF537__) || defined(__ADSPBF536__) || defined(__ADSPBF534__)
+#  define CCLK_VLEV_120        401000000
+#  define CCLK_VLEV_125        401000000
+# elif defined(__ADSPBF561__)
+#  define CCLK_VLEV_120        300000000
+#  define CCLK_VLEV_125        501000000
+# endif
+# if BFIN_CCLK < CCLK_VLEV_120
+#  define CONFIG_VR_CTL_VLEV VLEV_120
+# elif BFIN_CCLK < CCLK_VLEV_125
+#  define CONFIG_VR_CTL_VLEV VLEV_125
+# else
+#  define CONFIG_VR_CTL_VLEV VLEV_130
+# endif
+# if defined(__ADSPBF52x__)    /* TBD; use default */
+#  undef CONFIG_VR_CTL_VLEV
+#  define CONFIG_VR_CTL_VLEV VLEV_110
+# elif defined(__ADSPBF54x__)  /* TBD; use default */
+#  undef CONFIG_VR_CTL_VLEV
+#  define CONFIG_VR_CTL_VLEV VLEV_120
+# endif
+
+# ifdef CONFIG_BFIN_MAC
+#  define CONFIG_VR_CTL_CLKBUF CLKBUFOE
+# else
+#  define CONFIG_VR_CTL_CLKBUF 0
+# endif
+
+# if defined(__ADSPBF52x__)
+#  define CONFIG_VR_CTL_FREQ FREQ_1000
+# else
+#  define CONFIG_VR_CTL_FREQ (GAIN_20 | FREQ_1000)
+# endif
+
+# define CONFIG_VR_CTL_VAL (CONFIG_VR_CTL_CLKBUF | CONFIG_VR_CTL_VLEV | CONFIG_VR_CTL_FREQ)
+#endif
+
+__attribute__((saveall))
+void initcode(ADI_BOOT_DATA *bootstruct)
+{
+       uint32_t old_baud = serial_init();
+
+#ifdef CONFIG_HW_WATCHDOG
+# ifndef CONFIG_HW_WATCHDOG_TIMEOUT_INITCODE
+#  define CONFIG_HW_WATCHDOG_TIMEOUT_INITCODE 20000
+# endif
+       /* Program the watchdog with an initial timeout of ~20 seconds.
+        * Hopefully that should be long enough to load the u-boot LDR
+        * (from wherever) and then the common u-boot code can take over.
+        * In bypass mode, the start.S would have already set a much lower
+        * timeout, so don't clobber that.
+        */
+       if (CONFIG_BFIN_BOOT_MODE != BFIN_BOOT_BYPASS) {
+               bfin_write_WDOG_CNT(MSEC_TO_SCLK(CONFIG_HW_WATCHDOG_TIMEOUT_INITCODE));
+               bfin_write_WDOG_CTL(0);
+       }
+#endif
+
+       serial_putc('S');
+
+       /* Blackfin bootroms use the SPI slow read opcode instead of the SPI
+        * fast read, so we need to slow down the SPI clock a lot more during
+        * boot.  Once we switch over to u-boot's SPI flash driver, we'll
+        * increase the speed appropriately.
+        */
+       if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_SPI_MASTER)
+#ifdef SPI0_BAUD
+               bfin_write_SPI0_BAUD(CONFIG_SPI_BAUD_INITBLOCK);
+#else
+               bfin_write_SPI_BAUD(CONFIG_SPI_BAUD_INITBLOCK);
+#endif
+
+       serial_putc('B');
+
+       /* Disable all peripheral wakeups except for the PLL event. */
+#ifdef SIC_IWR0
+       bfin_write_SIC_IWR0(1);
+       bfin_write_SIC_IWR1(0);
+# ifdef SIC_IWR2
+       bfin_write_SIC_IWR2(0);
+# endif
+#elif defined(SICA_IWR0)
+       bfin_write_SICA_IWR0(1);
+       bfin_write_SICA_IWR1(0);
+#else
+       bfin_write_SIC_IWR(1);
+#endif
+
+       serial_putc('L');
+
+       bfin_write_PLL_LOCKCNT(CONFIG_PLL_LOCKCNT_VAL);
+
+       serial_putc('A');
+
+       /* Only reprogram when needed to avoid triggering unnecessary
+        * PLL relock sequences.
+        */
+       if (bfin_read_VR_CTL() != CONFIG_VR_CTL_VAL) {
+               serial_putc('!');
+               bfin_write_VR_CTL(CONFIG_VR_CTL_VAL);
+               asm("idle;");
+       }
+
+       serial_putc('C');
+
+       bfin_write_PLL_DIV(CONFIG_PLL_DIV_VAL);
+
+       serial_putc('K');
+
+       /* Only reprogram when needed to avoid triggering unnecessary
+        * PLL relock sequences.
+        */
+       if (bfin_read_PLL_CTL() != CONFIG_PLL_CTL_VAL) {
+               serial_putc('!');
+               bfin_write_PLL_CTL(CONFIG_PLL_CTL_VAL);
+               asm("idle;");
+       }
+
+       /* Since we've changed the SCLK above, we may need to update
+        * the UART divisors (UART baud rates are based on SCLK).
+        */
+       serial_reset_baud(old_baud);
+
+       serial_putc('F');
+
+       /* Program the async banks controller. */
+       bfin_write_EBIU_AMBCTL0(CONFIG_EBIU_AMBCTL0_VAL);
+       bfin_write_EBIU_AMBCTL1(CONFIG_EBIU_AMBCTL1_VAL);
+       bfin_write_EBIU_AMGCTL(CONFIG_EBIU_AMGCTL_VAL);
+
+#ifdef EBIU_MODE
+       /* Not all parts have these additional MMRs. */
+       bfin_write_EBIU_MBSCTL(CONFIG_EBIU_MBSCTL_VAL);
+       bfin_write_EBIU_MODE(CONFIG_EBIU_MODE_VAL);
+       bfin_write_EBIU_FCTL(CONFIG_EBIU_FCTL_VAL);
+#endif
+
+       serial_putc('I');
+
+       /* Program the external memory controller. */
+#ifdef EBIU_RSTCTL
+       bfin_write_EBIU_RSTCTL(bfin_read_EBIU_RSTCTL() | 0x1 /*DDRSRESET*/ | CONFIG_EBIU_RSTCTL_VAL);
+       bfin_write_EBIU_DDRCTL0(CONFIG_EBIU_DDRCTL0_VAL);
+       bfin_write_EBIU_DDRCTL1(CONFIG_EBIU_DDRCTL1_VAL);
+       bfin_write_EBIU_DDRCTL2(CONFIG_EBIU_DDRCTL2_VAL);
+# ifdef CONFIG_EBIU_DDRCTL3_VAL
+       /* default is disable, so don't need to force this */
+       bfin_write_EBIU_DDRCTL3(CONFIG_EBIU_DDRCTL3_VAL);
+# endif
+#else
+       bfin_write_EBIU_SDRRC(CONFIG_EBIU_SDRRC_VAL);
+       bfin_write_EBIU_SDBCTL(CONFIG_EBIU_SDBCTL_VAL);
+       bfin_write_EBIU_SDGCTL(CONFIG_EBIU_SDGCTL_VAL);
+#endif
+
+       serial_putc('N');
+
+       /* Restore all peripheral wakeups. */
+#ifdef SIC_IWR0
+       bfin_write_SIC_IWR0(-1);
+       bfin_write_SIC_IWR1(-1);
+# ifdef SIC_IWR2
+       bfin_write_SIC_IWR2(-1);
+# endif
+#elif defined(SICA_IWR0)
+       bfin_write_SICA_IWR0(-1);
+       bfin_write_SICA_IWR1(-1);
+#else
+       bfin_write_SIC_IWR(-1);
+#endif
+
+       serial_putc('>');
+       serial_putc('\n');
+
+       serial_deinit();
+}
 
--- /dev/null
+/*
+ * interrupt.S - trampoline default exceptions/interrupts to C handlers
+ *
+ * Copyright (c) 2005-2007 Analog Devices Inc.
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <asm/blackfin.h>
+#include <asm/entry.h>
+
+.text
+
+/* default entry point for exceptions */
+ENTRY(_trap)
+       SAVE_ALL_SYS
+       r0 = sp;        /* stack frame pt_regs pointer argument ==> r0 */
+       sp += -12;
+       call _trap_c;
+       sp += 12;
+       RESTORE_ALL_SYS
+       rtx;
+ENDPROC(_trap)
+
+/* default entry point for interrupts */
+ENTRY(_evt_default)
+       SAVE_ALL_SYS
+       r0 = sp;        /* stack frame pt_regs pointer argument ==> r0 */
+       sp += -12;
+       call _bfin_panic;
+       sp += 12;
+       RESTORE_ALL_SYS
+       rti;
+ENDPROC(_evt_default)
 
--- /dev/null
+/*
+ * U-boot - interrupts.c Interrupt related routines
+ *
+ * Copyright (c) 2005-2008 Analog Devices Inc.
+ *
+ * This file is based on interrupts.c
+ * Copyright 1996 Roman Zippel
+ * Copyright 1999 D. Jeff Dionne <jeff@uclinux.org>
+ * Copyright 2000-2001 Lineo, Inc. D. Jefff Dionne <jeff@lineo.ca>
+ * Copyright 2002 Arcturus Networks Inc. MaTed <mated@sympatico.ca>
+ * Copyright 2003 Metrowerks/Motorola
+ * Copyright 2003 Bas Vermeulen <bas@buyways.nl>,
+ *                     BuyWays B.V. (www.buyways.nl)
+ *
+ * (C) Copyright 2000-2004
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/blackfin.h>
+#include "cpu.h"
+
+static ulong timestamp;
+static ulong last_time;
+static int int_flag;
+
+int irq_flags;                 /* needed by asm-blackfin/system.h */
+
+/* Functions just to satisfy the linker */
+
+/*
+ * This function is derived from PowerPC code (read timebase as long long).
+ * On Blackfin it just returns the timer value.
+ */
+unsigned long long get_ticks(void)
+{
+       return get_timer(0);
+}
+
+/*
+ * This function is derived from PowerPC code (timebase clock frequency).
+ * On Blackfin it returns the number of timer ticks per second.
+ */
+ulong get_tbclk(void)
+{
+       ulong tbclk;
+
+       tbclk = CFG_HZ;
+       return tbclk;
+}
+
+void enable_interrupts(void)
+{
+       local_irq_restore(int_flag);
+}
+
+int disable_interrupts(void)
+{
+       local_irq_save(int_flag);
+       return 1;
+}
+
+void udelay(unsigned long usec)
+{
+       unsigned long delay, start, stop;
+       unsigned long cclk;
+       cclk = (CONFIG_CCLK_HZ);
+
+       while (usec > 1) {
+               /*
+                * how many clock ticks to delay?
+                *  - request(in useconds) * clock_ticks(Hz) / useconds/second
+                */
+               if (usec < 1000) {
+                       delay = (usec * (cclk / 244)) >> 12;
+                       usec = 0;
+               } else {
+                       delay = (1000 * (cclk / 244)) >> 12;
+                       usec -= 1000;
+               }
+
+               asm volatile (" %0 = CYCLES;" : "=r" (start));
+               do {
+                       asm volatile (" %0 = CYCLES; " : "=r" (stop));
+               } while (stop - start < delay);
+       }
+
+       return;
+}
+
+#define MAX_TIM_LOAD   0xFFFFFFFF
+int timer_init(void)
+{
+       *pTCNTL = 0x1;
+       *pTSCALE = 0x0;
+       *pTCOUNT = MAX_TIM_LOAD;
+       *pTPERIOD = MAX_TIM_LOAD;
+       *pTCNTL = 0x7;
+       asm("CSYNC;");
+
+       timestamp = 0;
+       last_time = 0;
+
+       return 0;
+}
+
+/*
+ * Any network command or flash
+ * command is started get_timer shall
+ * be called before TCOUNT gets reset,
+ * to implement the accurate timeouts.
+ *
+ * How ever milliconds doesn't return
+ * the number that has been elapsed from
+ * the last reset.
+ *
+ * As get_timer is used in the u-boot
+ * only for timeouts this should be
+ * sufficient
+ */
+ulong get_timer(ulong base)
+{
+       ulong milisec;
+
+       /* Number of clocks elapsed */
+       ulong clocks = (MAX_TIM_LOAD - (*pTCOUNT));
+
+       /*
+        * Find if the TCOUNT is reset
+        * timestamp gives the number of times
+        * TCOUNT got reset
+        */
+       if (clocks < last_time)
+               timestamp++;
+       last_time = clocks;
+
+       /* Get the number of milliseconds */
+       milisec = clocks / (CONFIG_CCLK_HZ / 1000);
+
+       /*
+        * Find the number of millisonds that
+        * got elapsed before this TCOUNT cycle
+        */
+       milisec += timestamp * (MAX_TIM_LOAD / (CONFIG_CCLK_HZ / 1000));
+
+       return (milisec - base);
+}
+
+void reset_timer(void)
+{
+       timestamp = 0;
+}
 
--- /dev/null
+/*
+ * reset.c - logic for resetting the cpu
+ *
+ * Copyright (c) 2005-2008 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/blackfin.h>
+#include "cpu.h"
+
+/* A system soft reset makes external memory unusable so force
+ * this function into L1.  We use the compiler ssync here rather
+ * than SSYNC() because it's safe (no interrupts and such) and
+ * we save some L1.  We do not need to force sanity in the SYSCR
+ * register as the BMODE selection bit is cleared by the soft
+ * reset while the Core B bit (on dual core parts) is cleared by
+ * the core reset.
+ */
+__attribute__ ((__l1_text__, __noreturn__))
+void bfin_reset(void)
+{
+       /* Wait for completion of "system" events such as cache line
+        * line fills so that we avoid infinite stalls later on as
+        * much as possible.  This code is in L1, so it won't trigger
+        * any such event after this point in time.
+        */
+       __builtin_bfin_ssync();
+
+       while (1) {
+               /* Initiate System software reset. */
+               bfin_write_SWRST(0x7);
+
+               /* Due to the way reset is handled in the hardware, we need
+                * to delay for 7 SCLKS.  The only reliable way to do this is
+                * to calculate the CCLK/SCLK ratio and multiply 7.  For now,
+                * we'll assume worse case which is a 1:15 ratio.
+                */
+               asm(
+                       "LSETUP (1f, 1f) LC0 = %0\n"
+                       "1: nop;"
+                       :
+                       : "a" (15 * 7)
+                       : "LC0", "LB0", "LT0"
+               );
+
+               /* Clear System software reset */
+               bfin_write_SWRST(0);
+
+               /* Wait for the SWRST write to complete.  Cannot rely on SSYNC
+                * though as the System state is all reset now.
+                */
+               asm(
+                       "LSETUP (1f, 1f) LC1 = %0\n"
+                       "1: nop;"
+                       :
+                       : "a" (15 * 1)
+                       : "LC1", "LB1", "LT1"
+               );
+
+               /* Issue core reset */
+               asm("raise 1");
+       }
+}
+
+/* We need to trampoline ourselves up into L1 since our linker
+ * does not have relaxtion support and will only generate a
+ * PC relative call with a 25 bit immediate.  This is not enough
+ * to get us from the top of SDRAM into L1.
+ */
+__attribute__ ((__noreturn__))
+static inline void bfin_reset_trampoline(void)
+{
+       if (board_reset)
+               board_reset();
+       while (1)
+               asm("jump (%0);" : : "a" (bfin_reset));
+}
+
+__attribute__ ((__noreturn__))
+void bfin_reset_or_hang(void)
+{
+#ifdef CONFIG_PANIC_HANG
+       hang();
+#else
+       bfin_reset_trampoline();
+#endif
+}
+
+int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       bfin_reset_trampoline();
+       return 0;
+}
 
--- /dev/null
+/*
+ * U-boot - serial.c Blackfin Serial Driver
+ *
+ * Copyright (c) 2005-2008 Analog Devices Inc.
+ *
+ * Copyright (c) 2003  Bas Vermeulen <bas@buyways.nl>,
+ *                     BuyWays B.V. (www.buyways.nl)
+ *
+ * Based heavily on:
+ * blkfinserial.c: Serial driver for BlackFin DSP internal USRTs.
+ * Copyright(c) 2003   Metrowerks      <mwaddel@metrowerks.com>
+ * Copyright(c)        2001    Tony Z. Kou     <tonyko@arcturusnetworks.com>
+ * Copyright(c)        2001-2002 Arcturus Networks Inc. <www.arcturusnetworks.com>
+ *
+ * Based on code from 68328 version serial driver imlpementation which was:
+ * Copyright (C) 1995       David S. Miller    <davem@caip.rutgers.edu>
+ * Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com>
+ * Copyright (C) 1998, 1999 D. Jeff Dionne     <jeff@uclinux.org>
+ * Copyright (C) 1999       Vladimir Gurevich  <vgurevic@cisco.com>
+ *
+ * (C) Copyright 2000-2004
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+#include <watchdog.h>
+#include <asm/blackfin.h>
+#include <asm/mach-common/bits/uart.h>
+
+#if defined(UART_LSR) && (CONFIG_UART_CONSOLE != 0)
+# error CONFIG_UART_CONSOLE must be 0 on parts with only one UART
+#endif
+
+#include "serial.h"
+
+/* Symbol for our assembly to call. */
+void serial_set_baud(uint32_t baud)
+{
+       serial_early_set_baud(baud);
+}
+
+/* Symbol for common u-boot code to call.
+ * Setup the baudrate (brg: baudrate generator).
+ */
+void serial_setbrg(void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+       serial_set_baud(gd->baudrate);
+}
+
+/* Symbol for our assembly to call. */
+void serial_initialize(void)
+{
+       serial_early_init();
+}
+
+/* Symbol for common u-boot code to call. */
+int serial_init(void)
+{
+       serial_initialize();
+       serial_setbrg();
+       return 0;
+}
+
+void serial_putc(const char c)
+{
+       /* send a \r for compatibility */
+       if (c == '\n')
+               serial_putc('\r');
+
+       WATCHDOG_RESET();
+
+       /* wait for the hardware fifo to clear up */
+       while (!(*pUART_LSR & THRE))
+               continue;
+
+       /* queue the character for transmission */
+       *pUART_THR = c;
+       SSYNC();
+
+       WATCHDOG_RESET();
+
+       /* wait for the byte to be shifted over the line */
+       while (!(*pUART_LSR & TEMT))
+               continue;
+}
+
+int serial_tstc(void)
+{
+       WATCHDOG_RESET();
+       return (*pUART_LSR & DR) ? 1 : 0;
+}
+
+int serial_getc(void)
+{
+       uint16_t uart_lsr_val, uart_rbr_val;
+
+       /* wait for data ! */
+       while (!serial_tstc())
+               continue;
+
+       /* clear the status and grab the new byte */
+       uart_lsr_val = *pUART_LSR;
+       uart_rbr_val = *pUART_RBR;
+
+       if (uart_lsr_val & (OE|PE|FE|BI)) {
+               /* Some parts are read-to-clear while others are
+                * write-to-clear.  Just do the write for everyone
+                * since it cant hurt (other than code size).
+                */
+               *pUART_LSR = (OE|PE|FE|BI);
+               return -1;
+       }
+
+       return uart_rbr_val & 0xFF;
+}
+
+void serial_puts(const char *s)
+{
+       while (*s)
+               serial_putc(*s++);
+}
 
--- /dev/null
+/*
+ * serial.h - common serial defines for early debug and serial driver.
+ *            any functions defined here must be always_inline since
+ *            initcode cannot have function calls.
+ *
+ * Copyright (c) 2004-2007 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#ifndef __BFIN_CPU_SERIAL_H__
+#define __BFIN_CPU_SERIAL_H__
+
+#include <asm/blackfin.h>
+#include <asm/mach-common/bits/uart.h>
+
+#ifdef CONFIG_DEBUG_EARLY_SERIAL
+# define BFIN_DEBUG_EARLY_SERIAL 1
+#else
+# define BFIN_DEBUG_EARLY_SERIAL 0
+#endif
+
+#define LOB(x) ((x) & 0xFF)
+#define HIB(x) (((x) >> 8) & 0xFF)
+
+#ifndef UART_LSR
+# if (CONFIG_UART_CONSOLE == 3)
+#  define pUART_DLH  pUART3_DLH
+#  define pUART_DLL  pUART3_DLL
+#  define pUART_GCTL pUART3_GCTL
+#  define pUART_IER  pUART3_IER
+#  define pUART_IERC pUART3_IER_CLEAR
+#  define pUART_LCR  pUART3_LCR
+#  define pUART_LSR  pUART3_LSR
+#  define pUART_RBR  pUART3_RBR
+#  define pUART_THR  pUART3_THR
+#  define  UART_THR   UART3_THR
+#  define  UART_LSR   UART3_LSR
+# elif (CONFIG_UART_CONSOLE == 2)
+#  define pUART_DLH  pUART2_DLH
+#  define pUART_DLL  pUART2_DLL
+#  define pUART_GCTL pUART2_GCTL
+#  define pUART_IER  pUART2_IER
+#  define pUART_IERC pUART2_IER_CLEAR
+#  define pUART_LCR  pUART2_LCR
+#  define pUART_LSR  pUART2_LSR
+#  define pUART_RBR  pUART2_RBR
+#  define pUART_THR  pUART2_THR
+#  define  UART_THR   UART2_THR
+#  define  UART_LSR   UART2_LSR
+# elif (CONFIG_UART_CONSOLE == 1)
+#  define pUART_DLH  pUART1_DLH
+#  define pUART_DLL  pUART1_DLL
+#  define pUART_GCTL pUART1_GCTL
+#  define pUART_IER  pUART1_IER
+#  define pUART_IERC pUART1_IER_CLEAR
+#  define pUART_LCR  pUART1_LCR
+#  define pUART_LSR  pUART1_LSR
+#  define pUART_RBR  pUART1_RBR
+#  define pUART_THR  pUART1_THR
+#  define  UART_THR   UART1_THR
+#  define  UART_LSR   UART1_LSR
+# elif (CONFIG_UART_CONSOLE == 0)
+#  define pUART_DLH  pUART0_DLH
+#  define pUART_DLL  pUART0_DLL
+#  define pUART_GCTL pUART0_GCTL
+#  define pUART_IER  pUART0_IER
+#  define pUART_IERC pUART0_IER_CLEAR
+#  define pUART_LCR  pUART0_LCR
+#  define pUART_LSR  pUART0_LSR
+#  define pUART_RBR  pUART0_RBR
+#  define pUART_THR  pUART0_THR
+#  define  UART_THR   UART0_THR
+#  define  UART_LSR   UART0_LSR
+# endif
+#endif
+
+#ifndef __ASSEMBLY__
+
+/* We cannot use get_sclk() in initcode as it is defined elsewhere. */
+#ifdef BFIN_IN_INITCODE
+# define get_sclk() (CONFIG_CLKIN_HZ * CONFIG_VCO_MULT / CONFIG_SCLK_DIV)
+#endif
+
+#ifdef __ADSPBF54x__
+# define ACCESS_LATCH()
+# define ACCESS_PORT_IER()
+# define CLEAR_IER()       (*pUART_IERC = 0)
+#else
+# define ACCESS_LATCH()    (*pUART_LCR |= DLAB)
+# define ACCESS_PORT_IER() (*pUART_LCR &= ~DLAB)
+# define CLEAR_IER()       (*pUART_IER = 0)
+#endif
+
+__attribute__((always_inline))
+static inline void serial_do_portmux(void)
+{
+#ifdef __ADSPBF52x__
+# define DO_MUX(port, mux, tx, rx) \
+       bfin_write_PORT##port##_MUX((bfin_read_PORT##port##_MUX() & ~PORT_x_MUX_##mux##_MASK) | PORT_x_MUX_##mux##_FUNC_3); \
+       bfin_write_PORT##port##_FER(bfin_read_PORT##port##_FER() | P##port##tx | P##port##rx);
+       switch (CONFIG_UART_CONSOLE) {
+       case 0: DO_MUX(G, 2, 7, 8);   break;    /* Port G; mux 2; PG2 and PG8 */
+       case 1: DO_MUX(F, 5, 14, 15); break;    /* Port F; mux 5; PF14 and PF15 */
+       }
+       SSYNC();
+#elif defined(__ADSPBF537__) || defined(__ADSPBF536__) || defined(__ADSPBF534__)
+# define DO_MUX(func, tx, rx) \
+       bfin_write_PORT_MUX(bfin_read_PORT_MUX() & ~(func)); \
+       bfin_write_PORTF_FER(bfin_read_PORTF_FER() | PF##tx | PF##rx);
+       switch (CONFIG_UART_CONSOLE) {
+       case 0: DO_MUX(PFDE, 0, 1); break;
+       case 1: DO_MUX(PFTE, 2, 3); break;
+       }
+       SSYNC();
+#elif defined(__ADSPBF54x__)
+# define DO_MUX(port, tx, rx) \
+       bfin_write_PORT##port##_MUX((bfin_read_PORT##port##_MUX() & ~(PORT_x_MUX_##tx##_MASK | PORT_x_MUX_##rx##_MASK)) | PORT_x_MUX_##tx##_FUNC_1 | PORT_x_MUX_##rx##_FUNC_1); \
+       bfin_write_PORT##port##_FER(bfin_read_PORT##port##_FER() | P##port##tx | P##port##rx);
+       switch (CONFIG_UART_CONSOLE) {
+       case 0: DO_MUX(E, 7, 8); break; /* Port E; PE7 and PE8 */
+       case 1: DO_MUX(H, 0, 1); break; /* Port H; PH0 and PH1 */
+       case 2: DO_MUX(B, 4, 5); break; /* Port B; PB4 and PB5 */
+       case 3: DO_MUX(B, 6, 7); break; /* Port B; PB6 and PB7 */
+       }
+       SSYNC();
+#endif
+}
+
+__attribute__((always_inline))
+static inline void serial_early_init(void)
+{
+       /* handle portmux crap on different Blackfins */
+       serial_do_portmux();
+
+       /* Enable UART */
+       *pUART_GCTL = UCEN;
+
+       /* Set LCR to Word Lengh 8-bit word select */
+       *pUART_LCR = WLS_8;
+
+       SSYNC();
+}
+
+__attribute__((always_inline))
+static inline uint32_t serial_early_get_baud(void)
+{
+       /* If the UART isnt enabled, then we are booting an LDR
+        * from a non-UART source (so like flash) which means
+        * the baud rate here is meaningless.
+        */
+       if ((*pUART_GCTL & UCEN) != UCEN)
+               return 0;
+
+#if (0)        /* See comment for serial_reset_baud() in initcode.c */
+       /* Set DLAB in LCR to Access DLL and DLH */
+       ACCESS_LATCH();
+       SSYNC();
+
+       uint8_t dll = *pUART_DLL;
+       uint8_t dlh = *pUART_DLH;
+       uint16_t divisor = (dlh << 8) | dll;
+       uint32_t baud = get_sclk() / (divisor * 16);
+
+       /* Clear DLAB in LCR to Access THR RBR IER */
+       ACCESS_PORT_IER();
+       SSYNC();
+
+       return baud;
+#else
+       return CONFIG_BAUDRATE;
+#endif
+}
+
+__attribute__((always_inline))
+static inline void serial_early_set_baud(uint32_t baud)
+{
+       /* Translate from baud into divisor in terms of SCLK.
+        * The +1 is to make sure we over sample just a little
+        * rather than under sample the incoming signals.
+        */
+       uint16_t divisor = (get_sclk() / (baud * 16)) + 1;
+
+       /* Set DLAB in LCR to Access DLL and DLH */
+       ACCESS_LATCH();
+       SSYNC();
+
+       /* Program the divisor to get the baud rate we want */
+       *pUART_DLL = LOB(divisor);
+       *pUART_DLH = HIB(divisor);
+       SSYNC();
+
+       /* Clear DLAB in LCR to Access THR RBR IER */
+       ACCESS_PORT_IER();
+       SSYNC();
+}
+
+#ifndef BFIN_IN_INITCODE
+__attribute__((always_inline))
+static inline void serial_early_puts(const char *s)
+{
+       if (BFIN_DEBUG_EARLY_SERIAL) {
+               serial_puts("Early: ");
+               serial_puts(s);
+       }
+}
+#endif
+
+#else
+
+.macro serial_early_init
+#ifdef CONFIG_DEBUG_EARLY_SERIAL
+       call _serial_initialize;
+#endif
+.endm
+
+.macro serial_early_set_baud
+#ifdef CONFIG_DEBUG_EARLY_SERIAL
+       R0.L = LO(CONFIG_BAUDRATE);
+       R0.H = HI(CONFIG_BAUDRATE);
+       call _serial_set_baud;
+#endif
+.endm
+
+/* Recursively expand calls to _serial_putc for every byte
+ * passed to us.  Append a newline when we're all done.
+ */
+.macro _serial_early_putc byte:req morebytes:vararg
+#ifdef CONFIG_DEBUG_EARLY_SERIAL
+       R0 = \byte;
+       call _serial_putc;
+.ifnb \morebytes
+       _serial_early_putc \morebytes
+.else
+.if (\byte != '\n')
+       _serial_early_putc '\n'
+.endif
+.endif
+#endif
+.endm
+
+/* Wrapper around recurisve _serial_early_putc macro which
+ * simply prepends the string "Early: "
+ */
+.macro serial_early_putc byte:req morebytes:vararg
+#ifdef CONFIG_DEBUG_EARLY_SERIAL
+       _serial_early_putc 'E', 'a', 'r', 'l', 'y', ':', ' ', \byte, \morebytes
+#endif
+.endm
+
+/* Since we embed the string right into our .text section, we need
+ * to find its address.  We do this by getting our PC and adding 2
+ * bytes (which is the length of the jump instruction).  Then we
+ * pass this address to serial_puts().
+ */
+#ifdef CONFIG_DEBUG_EARLY_SERIAL
+# define serial_early_puts(str) \
+       call _get_pc; \
+       jump 1f; \
+       .ascii "Early:"; \
+       .ascii __FILE__; \
+       .ascii ": "; \
+       .ascii str; \
+       .asciz "\n"; \
+       .align 4; \
+1: \
+       R0 += 2; \
+       call _serial_puts;
+#else
+# define serial_early_puts(str)
+#endif
+
+#endif
+
+#endif
 
--- /dev/null
+/*
+ * U-boot - start.S Startup file for Blackfin u-boot
+ *
+ * Copyright (c) 2005-2007 Analog Devices Inc.
+ *
+ * This file is based on head.S
+ * Copyright (c) 2003  Metrowerks/Motorola
+ * Copyright (C) 1998  D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>,
+ *                     Kenneth Albanowski <kjahds@kjahds.com>,
+ *                     The Silver Hammer Group, Ltd.
+ * (c) 1995, Dionne & Associates
+ * (c) 1995, DKG Display Tech.
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#include <config.h>
+#include <asm/blackfin.h>
+#include <asm/mach-common/bits/core.h>
+#include <asm/mach-common/bits/dma.h>
+#include <asm/mach-common/bits/pll.h>
+
+#include "serial.h"
+
+/* It may seem odd that we make calls to functions even though we haven't
+ * relocated ourselves yet out of {flash,ram,wherever}.  This is OK because
+ * the "call" instruction in the Blackfin architecture is actually PC
+ * relative.  So we can call functions all we want and not worry about them
+ * not being relocated yet.
+ */
+
+.text
+ENTRY(_start)
+
+       /* Set our initial stack to L1 scratch space */
+       sp.l = LO(L1_SRAM_SCRATCH + L1_SRAM_SCRATCH_SIZE);
+       sp.h = HI(L1_SRAM_SCRATCH + L1_SRAM_SCRATCH_SIZE);
+
+#ifdef CONFIG_HW_WATCHDOG
+# ifndef CONFIG_HW_WATCHDOG_TIMEOUT_START
+#  define CONFIG_HW_WATCHDOG_TIMEOUT_START 5000
+# endif
+       /* Program the watchdog with an initial timeout of ~5 seconds.
+        * That should be long enough to bootstrap ourselves up and
+        * then the common u-boot code can take over.
+        */
+       P0.L = LO(WDOG_CNT);
+       P0.H = HI(WDOG_CNT);
+       R0.L = 0;
+       R0.H = HI(MSEC_TO_SCLK(CONFIG_HW_WATCHDOG_TIMEOUT_START));
+       [P0] = R0;
+       /* fire up the watchdog - R0.L above needs to be 0x0000 */
+       W[P0 + (WDOG_CTL - WDOG_CNT)] = R0;
+#endif
+
+       /* Turn on the serial for debugging the init process */
+       serial_early_init
+       serial_early_set_baud
+
+       serial_early_puts("Init Registers");
+
+       /* Disable nested interrupts and enable CYCLES for udelay() */
+       R0 = CCEN | 0x30;
+       SYSCFG = R0;
+
+       /* Zero out registers required by Blackfin ABI.
+        * http://docs.blackfin.uclinux.org/doku.php?id=application_binary_interface
+        */
+       r1 = 0 (x);
+       /* Disable circular buffers */
+       l0 = r1;
+       l1 = r1;
+       l2 = r1;
+       l3 = r1;
+       /* Disable hardware loops in case we were started by 'go' */
+       lc0 = r1;
+       lc1 = r1;
+
+       /* Save RETX so we can pass it while booting Linux */
+       r7 = RETX;
+
+#if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_BYPASS)
+       /* In bypass mode, we don't have an LDR with an init block
+        * so we need to explicitly call it ourselves.  This will
+        * reprogram our clocks and setup our async banks.
+        */
+       /* XXX: we should DMA this into L1, put external memory into
+        *      self refresh, and then jump there ...
+        */
+       call _get_pc;
+       r3 = 0x0;
+       r3.h = 0x2000;
+       cc = r0 < r3 (iu);
+       if cc jump .Lproc_initialized;
+
+       serial_early_puts("Program Clocks");
+
+       call _initcode;
+
+       /* Since we reprogrammed SCLK, we need to update the serial divisor */
+       serial_early_set_baud
+
+.Lproc_initialized:
+#endif
+
+       /* Inform upper layers if we had to do the relocation ourselves.
+        * This allows us to detect whether we were loaded by 'go 0x1000'
+        * or by the bootrom from an LDR.  "r6" is "loaded_from_ldr".
+        */
+       r6 = 1 (x);
+
+       /* Relocate from wherever are (FLASH/RAM/etc...) to the
+        * hardcoded monitor location in the end of RAM.
+        */
+       serial_early_puts("Relocate");
+       call _get_pc;
+.Loffset:
+       r2.l = .Loffset;
+       r2.h = .Loffset;
+       r3.l = _start;
+       r3.h = _start;
+       r1 = r2 - r3;
+
+       r0 = r0 - r1;
+
+       cc = r0 == r3;
+       if cc jump .Lnorelocate;
+
+       r6 = 0 (x);
+       p1 = r0;
+
+       p2.l = LO(CFG_MONITOR_BASE);
+       p2.h = HI(CFG_MONITOR_BASE);
+
+       p3 = 0x04;
+       p4.l = LO(CFG_MONITOR_BASE + CFG_MONITOR_LEN);
+       p4.h = HI(CFG_MONITOR_BASE + CFG_MONITOR_LEN);
+.Lloop1:
+       r1 = [p1 ++ p3];
+       [p2 ++ p3] = r1;
+       cc=p2==p4;
+       if !cc jump .Lloop1;
+
+       /* Initialize BSS section ... we know that memset() does not
+        * use the BSS, so it is safe to call here.  The bootrom LDR
+        * takes care of clearing things for us.
+        */
+       serial_early_puts("Zero BSS");
+       r0.l = __bss_start;
+       r0.h = __bss_start;
+       r1 = 0 (x);
+       r2.l = __bss_end;
+       r2.h = __bss_end;
+       r2 = r2 - r0;
+       call _memset;
+
+.Lnorelocate:
+
+       /* Setup the actual stack in external memory */
+       r0.h = HI(CONFIG_STACKBASE);
+       r0.l = LO(CONFIG_STACKBASE);
+       sp = r0;
+       fp = sp;
+
+       /* Now lower ourselves from the highest interrupt level to
+        * the lowest.  We do this by masking all interrupts but 15,
+        * setting the 15 handler to "board_init_f", raising the 15
+        * interrupt, and then returning from the highest interrupt
+        * level to the dummy "jump" until the interrupt controller
+        * services the pending 15 interrupt.
+        */
+       serial_early_puts("Lower to 15");
+       r0 = r7;
+       r1 = r6;
+       p0.l = LO(EVT15);
+       p0.h = HI(EVT15);
+       p1.l = _cpu_init_f;
+       p1.h = _cpu_init_f;
+       [p0] = p1;
+       p2.l = LO(IMASK);
+       p2.h = HI(IMASK);
+       p3.l = LO(EVT_IVG15);
+       p3.h = HI(EVT_IVG15);
+       [p2] = p3;
+       raise 15;
+       p4.l = .LWAIT_HERE;
+       p4.h = .LWAIT_HERE;
+       reti = p4;
+       rti;
+
+.LWAIT_HERE:
+       jump .LWAIT_HERE;
+ENDPROC(_start)
+
+LENTRY(_get_pc)
+       r0 = rets;
+#if ANOMALY_05000371
+       NOP;
+       NOP;
+       NOP;
+#endif
+       rts;
+ENDPROC(_get_pc)
 
--- /dev/null
+/*
+ * system_map.S - optional symbol lookup for debugging
+ *
+ * Copyright (c) 2007 Analog Devices Inc.
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <config.h>
+
+#ifdef CONFIG_DEBUG_DUMP_SYMS
+.data
+.global _system_map
+.type _system_map,@object
+_system_map:
+#include SYM_FILE
+.asciz ""
+.size _system_map,.-_system_map
+#endif
 
--- /dev/null
+/*
+ * U-boot - traps.c Routines related to interrupts and exceptions
+ *
+ * Copyright (c) 2005-2008 Analog Devices Inc.
+ *
+ * This file is based on
+ * No original Copyright holder listed,
+ * Probabily original (C) Roman Zippel (assigned DJD, 1999)
+ *
+ * Copyright 2003 Metrowerks - for Blackfin
+ * Copyright 2000-2001 Lineo, Inc. D. Jeff Dionne <jeff@lineo.ca>
+ * Copyright 1999-2000 D. Jeff Dionne, <jeff@uclinux.org>
+ *
+ * (C) Copyright 2000-2004
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+#include <linux/types.h>
+#include <asm/traps.h>
+#include <asm/cplb.h>
+#include <asm/io.h>
+#include <asm/mach-common/bits/core.h>
+#include <asm/mach-common/bits/mpu.h>
+#include <asm/mach-common/bits/trace.h>
+#include "cpu.h"
+
+#define trace_buffer_save(x) \
+       do { \
+               (x) = bfin_read_TBUFCTL(); \
+               bfin_write_TBUFCTL((x) & ~TBUFEN); \
+       } while (0)
+
+#define trace_buffer_restore(x) \
+       bfin_write_TBUFCTL((x))
+
+/* The purpose of this map is to provide a mapping of address<->cplb settings
+ * rather than an exact map of what is actually addressable on the part.  This
+ * map covers all current Blackfin parts.  If you try to access an address that
+ * is in this map but not actually on the part, you won't get an exception and
+ * reboot, you'll get an external hardware addressing error and reboot.  Since
+ * only the ends matter (you did something wrong and the board reset), the means
+ * are largely irrelevant.
+ */
+struct memory_map {
+       uint32_t start, end;
+       uint32_t data_flags, inst_flags;
+};
+const struct memory_map const bfin_memory_map[] = {
+       {       /* external memory */
+               .start = 0x00000000,
+               .end   = 0x20000000,
+               .data_flags = SDRAM_DGENERIC,
+               .inst_flags = SDRAM_IGENERIC,
+       },
+       {       /* async banks */
+               .start = 0x20000000,
+               .end   = 0x30000000,
+               .data_flags = SDRAM_EBIU,
+               .inst_flags = SDRAM_INON_CHBL,
+       },
+       {       /* everything on chip */
+               .start = 0xE0000000,
+               .end   = 0xFFFFFFFF,
+               .data_flags = L1_DMEMORY,
+               .inst_flags = L1_IMEMORY,
+       }
+};
+
+void trap_c(struct pt_regs *regs)
+{
+       uint32_t trapnr = (regs->seqstat & EXCAUSE);
+       bool data = false;
+
+       switch (trapnr) {
+       /* 0x26 - Data CPLB Miss */
+       case VEC_CPLB_M:
+
+               if (ANOMALY_05000261) {
+                       static uint32_t last_cplb_fault_retx;
+                       /*
+                        * Work around an anomaly: if we see a new DCPLB fault,
+                        * return without doing anything. Then,
+                        * if we get the same fault again, handle it.
+                        */
+                       if (last_cplb_fault_retx != regs->retx) {
+                               last_cplb_fault_retx = regs->retx;
+                               return;
+                       }
+               }
+
+               data = true;
+               /* fall through */
+
+       /* 0x27 - Instruction CPLB Miss */
+       case VEC_CPLB_I_M: {
+               volatile uint32_t *CPLB_ADDR_BASE, *CPLB_DATA_BASE, *CPLB_ADDR, *CPLB_DATA;
+               uint32_t new_cplb_addr = 0, new_cplb_data = 0;
+               static size_t last_evicted;
+               size_t i;
+
+               new_cplb_addr = (data ? bfin_read_DCPLB_FAULT_ADDR() : bfin_read_ICPLB_FAULT_ADDR()) & ~(4 * 1024 * 1024 - 1);
+
+               for (i = 0; i < ARRAY_SIZE(bfin_memory_map); ++i) {
+                       /* if the exception is inside this range, lets use it */
+                       if (new_cplb_addr >= bfin_memory_map[i].start &&
+                           new_cplb_addr < bfin_memory_map[i].end)
+                               break;
+               }
+               if (i == ARRAY_SIZE(bfin_memory_map)) {
+                       printf("%cCPLB exception outside of memory map at 0x%p\n",
+                               (data ? 'D' : 'I'), new_cplb_addr);
+                       bfin_panic(regs);
+               } else
+                       debug("CPLB addr %p matches map 0x%p - 0x%p\n", new_cplb_addr, bfin_memory_map[i].start, bfin_memory_map[i].end);
+               new_cplb_data = (data ? bfin_memory_map[i].data_flags : bfin_memory_map[i].inst_flags);
+
+               /* Turn the cache off */
+               SSYNC();
+               if (data) {
+                       asm(" .align 8; ");
+                       *pDMEM_CONTROL &= ~ENDCPLB;
+               } else {
+                       asm(" .align 8; ");
+                       *pIMEM_CONTROL &= ~ENICPLB;
+               }
+               SSYNC();
+
+               if (data) {
+                       CPLB_ADDR_BASE = (uint32_t *)DCPLB_ADDR0;
+                       CPLB_DATA_BASE = (uint32_t *)DCPLB_DATA0;
+               } else {
+                       CPLB_ADDR_BASE = (uint32_t *)ICPLB_ADDR0;
+                       CPLB_DATA_BASE = (uint32_t *)ICPLB_DATA0;
+               }
+
+               /* find the next unlocked entry and evict it */
+               i = last_evicted & 0xF;
+               debug("last evicted = %i\n", i);
+               CPLB_DATA = CPLB_DATA_BASE + i;
+               while (*CPLB_DATA & CPLB_LOCK) {
+                       debug("skipping %i %p - %08X\n", i, CPLB_DATA, *CPLB_DATA);
+                       i = (i + 1) & 0xF;      /* wrap around */
+                       CPLB_DATA = CPLB_DATA_BASE + i;
+               }
+               CPLB_ADDR = CPLB_ADDR_BASE + i;
+
+               debug("evicting entry %i: 0x%p 0x%08X\n", i, *CPLB_ADDR, *CPLB_DATA);
+               last_evicted = i + 1;
+               *CPLB_ADDR = new_cplb_addr;
+               *CPLB_DATA = new_cplb_data;
+
+               /* dump current table for debugging purposes */
+               CPLB_ADDR = CPLB_ADDR_BASE;
+               CPLB_DATA = CPLB_DATA_BASE;
+               for (i = 0; i < 16; ++i)
+                       debug("%2i 0x%p 0x%08X\n", i, *CPLB_ADDR++, *CPLB_DATA++);
+
+               /* Turn the cache back on */
+               SSYNC();
+               if (data) {
+                       asm(" .align 8; ");
+                       *pDMEM_CONTROL |= ENDCPLB;
+               } else {
+                       asm(" .align 8; ");
+                       *pIMEM_CONTROL |= ENICPLB;
+               }
+               SSYNC();
+
+               break;
+       }
+
+       default:
+               /* All traps come here */
+               bfin_panic(regs);
+       }
+}
+
+#ifdef CONFIG_DEBUG_DUMP
+# define ENABLE_DUMP 1
+#else
+# define ENABLE_DUMP 0
+#endif
+
+#ifdef CONFIG_DEBUG_DUMP_SYMS
+# define ENABLE_DUMP_SYMS 1
+#else
+# define ENABLE_DUMP_SYMS 0
+#endif
+
+static const char *symbol_lookup(unsigned long addr, unsigned long *caddr)
+{
+       if (!ENABLE_DUMP_SYMS)
+               return NULL;
+
+       extern const char system_map[] __attribute__((__weak__));
+       const char *sym, *csym;
+       char *esym;
+       unsigned long sym_addr;
+
+       sym = system_map;
+       csym = NULL;
+       *caddr = 0;
+
+       while (*sym) {
+               sym_addr = simple_strtoul(sym, &esym, 16);
+               sym = esym + 1;
+               if (sym_addr > addr)
+                       break;
+               *caddr = sym_addr;
+               csym = sym;
+               sym += strlen(sym) + 1;
+       }
+
+       return csym;
+}
+
+static void decode_address(char *buf, unsigned long address)
+{
+       unsigned long sym_addr;
+       const char *sym = symbol_lookup(address, &sym_addr);
+
+       if (sym) {
+               sprintf(buf, "<0x%p> { %s + 0x%x }", address, sym, address - sym_addr);
+               return;
+       }
+
+       if (!address)
+               sprintf(buf, "<0x%p> /* Maybe null pointer? */", address);
+       else if (address >= CFG_MONITOR_BASE &&
+                address < CFG_MONITOR_BASE + CFG_MONITOR_LEN)
+               sprintf(buf, "<0x%p> /* somewhere in u-boot */", address);
+       else
+               sprintf(buf, "<0x%p> /* unknown address */", address);
+}
+
+void dump(struct pt_regs *fp)
+{
+       char buf[150];
+       size_t i;
+
+       if (!ENABLE_DUMP)
+               return;
+
+       printf("SEQUENCER STATUS:\n");
+       printf(" SEQSTAT: %08lx  IPEND: %04lx  SYSCFG: %04lx\n",
+               fp->seqstat, fp->ipend, fp->syscfg);
+       printf("  HWERRCAUSE: 0x%lx\n", (fp->seqstat & HWERRCAUSE) >> HWERRCAUSE_P);
+       printf("  EXCAUSE   : 0x%lx\n", (fp->seqstat & EXCAUSE) >> EXCAUSE_P);
+       for (i = 6; i <= 15; ++i) {
+               if (fp->ipend & (1 << i)) {
+                       decode_address(buf, bfin_read32(EVT0 + 4*i));
+                       printf("  physical IVG%i asserted : %s\n", i, buf);
+               }
+       }
+       decode_address(buf, fp->rete);
+       printf(" RETE: %s\n", buf);
+       decode_address(buf, fp->retn);
+       printf(" RETN: %s\n", buf);
+       decode_address(buf, fp->retx);
+       printf(" RETX: %s\n", buf);
+       decode_address(buf, fp->rets);
+       printf(" RETS: %s\n", buf);
+       decode_address(buf, fp->pc);
+       printf(" PC  : %s\n", buf);
+
+       if (fp->seqstat & EXCAUSE) {
+               decode_address(buf, bfin_read_DCPLB_FAULT_ADDR());
+               printf("DCPLB_FAULT_ADDR: %s\n", buf);
+               decode_address(buf, bfin_read_ICPLB_FAULT_ADDR());
+               printf("ICPLB_FAULT_ADDR: %s\n", buf);
+       }
+
+       printf("\nPROCESSOR STATE:\n");
+       printf(" R0 : %08lx    R1 : %08lx    R2 : %08lx    R3 : %08lx\n",
+               fp->r0, fp->r1, fp->r2, fp->r3);
+       printf(" R4 : %08lx    R5 : %08lx    R6 : %08lx    R7 : %08lx\n",
+               fp->r4, fp->r5, fp->r6, fp->r7);
+       printf(" P0 : %08lx    P1 : %08lx    P2 : %08lx    P3 : %08lx\n",
+               fp->p0, fp->p1, fp->p2, fp->p3);
+       printf(" P4 : %08lx    P5 : %08lx    FP : %08lx    SP : %08lx\n",
+               fp->p4, fp->p5, fp->fp, fp);
+       printf(" LB0: %08lx    LT0: %08lx    LC0: %08lx\n",
+               fp->lb0, fp->lt0, fp->lc0);
+       printf(" LB1: %08lx    LT1: %08lx    LC1: %08lx\n",
+               fp->lb1, fp->lt1, fp->lc1);
+       printf(" B0 : %08lx    L0 : %08lx    M0 : %08lx    I0 : %08lx\n",
+               fp->b0, fp->l0, fp->m0, fp->i0);
+       printf(" B1 : %08lx    L1 : %08lx    M1 : %08lx    I1 : %08lx\n",
+               fp->b1, fp->l1, fp->m1, fp->i1);
+       printf(" B2 : %08lx    L2 : %08lx    M2 : %08lx    I2 : %08lx\n",
+               fp->b2, fp->l2, fp->m2, fp->i2);
+       printf(" B3 : %08lx    L3 : %08lx    M3 : %08lx    I3 : %08lx\n",
+               fp->b3, fp->l3, fp->m3, fp->i3);
+       printf("A0.w: %08lx   A0.x: %08lx   A1.w: %08lx   A1.x: %08lx\n",
+               fp->a0w, fp->a0x, fp->a1w, fp->a1x);
+
+       printf("USP : %08lx  ASTAT: %08lx\n",
+               fp->usp, fp->astat);
+
+       printf("\n");
+}
+
+void dump_bfin_trace_buffer(void)
+{
+       char buf[150];
+       unsigned long tflags;
+       size_t i = 0;
+
+       if (!ENABLE_DUMP)
+               return;
+
+       trace_buffer_save(tflags);
+
+       printf("Hardware Trace:\n");
+
+       if (bfin_read_TBUFSTAT() & TBUFCNT) {
+               for (; bfin_read_TBUFSTAT() & TBUFCNT; i++) {
+                       decode_address(buf, bfin_read_TBUF());
+                       printf("%4i Target : %s\n", i, buf);
+                       decode_address(buf, bfin_read_TBUF());
+                       printf("     Source : %s\n", buf);
+               }
+       }
+
+       trace_buffer_restore(tflags);
+}
+
+void bfin_panic(struct pt_regs *regs)
+{
+       if (ENABLE_DUMP) {
+               unsigned long tflags;
+               trace_buffer_save(tflags);
+       }
+
+       puts(
+               "\n"
+               "\n"
+               "\n"
+               "Ack! Something bad happened to the Blackfin!\n"
+               "\n"
+       );
+       dump(regs);
+       dump_bfin_trace_buffer();
+       printf(
+               "\n"
+               "Please reset the board\n"
+               "\n"
+       );
+       bfin_reset_or_hang();
+}
 
--- /dev/null
+/*
+ * watchdog.c - driver for Blackfin on-chip watchdog
+ *
+ * Copyright (c) 2007-2008 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+#include <watchdog.h>
+#include <asm/blackfin.h>
+
+#ifdef CONFIG_HW_WATCHDOG
+void hw_watchdog_reset(void)
+{
+       bfin_write_WDOG_STAT(0);
+}
+
+void hw_watchdog_init(void)
+{
+       bfin_write_WDOG_CNT(5 * get_sclk());    /* 5 second timeout */
+       hw_watchdog_reset();
+       bfin_write_WDOG_CTL(0x0);
+}
+#endif
 
 # error Memory Map does not fit into configuration
 #endif
 
-/* Sanity check BFIN_CPU */
-#ifndef BFIN_CPU
-# error BFIN_CPU: your board config needs to define this
+/* Sanity check CONFIG_BFIN_CPU */
+#ifndef CONFIG_BFIN_CPU
+# error CONFIG_BFIN_CPU: your board config needs to define this
 #endif
 
 /* Make sure the structure is properly aligned */
 
 #include <asm/blackfin-config-pre.h>
 
 #define CONFIG_BAUDRATE                57600
-#define CONFIG_STAMP           1
 
 #define CONFIG_BOOTDELAY       5
 #define CFG_AUTOLOAD           "no"    /*rarpb, bootp or dhcp commands will perform only a */
 #define CONFIG_RTC_BFIN                1
 #define CONFIG_BOOT_RETRY_TIME -1      /* Enable this if bootretry required, currently its disabled */
 
-/*
- * Boot Mode Set
- * Blackfin can support several boot modes
- */
-#define BF533_BYPASS_BOOT      0x0001  /* Bootmode 0: Execute from 16-bit externeal memory ( bypass BOOT ROM) */
-#define BF533_PARA_BOOT                0x0002  /* Bootmode 1: Boot from 8-bit or 16-bit flash */
-#define BF533_SPI_BOOT         0x0004  /* Bootmode 3: Boot from SPI flash */
-/* Define the boot mode */
-#define BFIN_BOOT_MODE         BF533_BYPASS_BOOT
-/* #define BFIN_BOOT_MODE      BF533_SPI_BOOT */
-
 #define CONFIG_PANIC_HANG 1
 
 #define CONFIG_BFIN_CPU        bf533-0.3
+#define CONFIG_BFIN_BOOT_MODE BFIN_BOOT_BYPASS
 
 /* This sets the default state of the cache on U-Boot's boot */
 #define CONFIG_ICACHE_ON
 #define CONFIG_DCACHE_ON
 
-/* Define where the uboot will be loaded by on-chip boot rom */
-#define APP_ENTRY 0x00001000
-
 /* CONFIG_CLKIN_HZ is any value in Hz                          */
 #define CONFIG_CLKIN_HZ                27000000
 /* CONFIG_CLKIN_HALF controls what is passed to PLL 0=CLKIN    */
 
 #define CFG_BOOTM_LEN          0x4000000       /* Large Image Length, set to 64 Meg */
 
-/* 0xFF, 0x7BB07BB0, 0x22547BB0 */
-/* #define AMGCTLVAL           (AMBEN_P0 | AMBEN_P1 | AMBEN_P2 | AMCKEN)
-#define AMBCTL0VAL             (B1WAT_7 | B1RAT_11 | B1HT_2 | B1ST_3 | B1TT_4 | ~B1RDYPOL | \
-                               ~B1RDYEN | B0WAT_7 | B0RAT_11 | B0HT_2 | B0ST_3 | B0TT_4 | ~B0RDYPOL | ~B0RDYEN)
-#define AMBCTL1VAL             (B3WAT_2 | B3RAT_2 | B3HT_1 | B3ST_1 | B3TT_4 | B3RDYPOL | ~B3RDYEN | \
-                               B2WAT_7 | B2RAT_11 | B2HT_2 | B2ST_3 | B2TT_4 | ~B2RDYPOL | ~B2RDYEN)
-*/
-#define AMGCTLVAL              0xFF
-#define AMBCTL0VAL             0x7BB07BB0
-#define AMBCTL1VAL             0xFFC27BB0
-
-#define CONFIG_VDSP            1
-
-#ifdef CONFIG_VDSP
-#define ET_EXEC_VDSP           0x8
-#define SHT_STRTAB_VDSP                0x1
-#define ELFSHDRSIZE_VDSP       0x2C
-#define VDSP_ENTRY_ADDR                0xFFA00000
-#endif
+#define CONFIG_EBIU_SDRRC_VAL  0x398
+#define CONFIG_EBIU_SDGCTL_VAL 0x91118d
+#define CONFIG_EBIU_SDBCTL_VAL 0x13
+
+#define CONFIG_EBIU_AMGCTL_VAL         0xFF
+#define CONFIG_EBIU_AMBCTL0_VAL                0x7BB07BB0
+#define CONFIG_EBIU_AMBCTL1_VAL                0xFFC27BB0
+
+#include <asm/blackfin-config-post.h>
 
 #endif
 
 
 #include <asm/blackfin-config-pre.h>
 
-#define CONFIG_STAMP                   1
 #define CONFIG_RTC_BFIN                        1
-#define CONFIG_BF533                   1
-/*
- * Boot Mode Set
- * Blackfin can support several boot modes
- */
-#define BF533_BYPASS_BOOT      0x0001  /* Bootmode 0: Execute from 16-bit externeal memory ( bypass BOOT ROM) */
-#define BF533_PARA_BOOT                0x0002  /* Bootmode 1: Boot from 8-bit or 16-bit flash */
-#define BF533_SPI_BOOT         0x0004  /* Bootmode 3: Boot from SPI flash */
-/* Define the boot mode */
-#define BFIN_BOOT_MODE         BF533_BYPASS_BOOT
-/* #define BFIN_BOOT_MODE      BF533_SPI_BOOT */
 
 #define CONFIG_PANIC_HANG 1
 
 #define CONFIG_BFIN_CPU        bf533-0.3
+#define CONFIG_BFIN_BOOT_MODE BFIN_BOOT_BYPASS
 
 /* This sets the default state of the cache on U-Boot's boot */
 #define CONFIG_ICACHE_ON
 #define CONFIG_DCACHE_ON
 
-/* Define where the uboot will be loaded by on-chip boot rom */
-#define APP_ENTRY 0x00001000
-
-/*
- * Stringize definitions - needed for environmental settings
- */
-#define STRINGIZE2(x) #x
-#define STRINGIZE(x) STRINGIZE2(x)
-
 /*
  * Board settings
  */
  */
 #define  CONFIG_VIDEO          0
 
-#define CONFIG_VDSP            1
-
 /*
  * Clock settings
  */
 /* Values can range from 2-65535                               */
 /* SCK Frequency = SCLK / (2 * CONFIG_SPI_BAUD)                        */
 #define CONFIG_SPI_BAUD                2
-
-#if (BFIN_BOOT_MODE == BF533_SPI_BOOT)
 #define CONFIG_SPI_BAUD_INITBLOCK      4
-#endif
 
 /*
  * Network settings
 #define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks */
 #define CFG_MAX_FLASH_SECT     67      /* max number of sectors on one chip */
 
-#if (BFIN_BOOT_MODE == BF533_BYPASS_BOOT)
-#define CFG_ENV_IS_IN_FLASH    1
-#define CFG_ENV_ADDR           0x20004000
-#define        CFG_ENV_OFFSET          (CFG_ENV_ADDR - CFG_FLASH_BASE)
-#elif (BFIN_BOOT_MODE == BF533_SPI_BOOT)
+#if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_SPI_MASTER)
 #define CFG_ENV_IS_IN_EEPROM   1
 #define CFG_ENV_OFFSET         0x4000
 #define CFG_ENV_HEADER         (CFG_ENV_OFFSET + 0x12A)        /* 0x12A is the length of LDR file header */
+#else
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_ADDR           0x20004000
+#define        CFG_ENV_OFFSET          (CFG_ENV_ADDR - CFG_FLASH_BASE)
 #endif
 
 #define        CFG_ENV_SIZE            0x2000
 #define CONFIG_MEM_ADD_WDTH     11     /* 8, 9, 10, 11    */
 #define CONFIG_MEM_MT48LC64M4A2FB_7E   1
 
-#if (BFIN_BOOT_MODE == BF533_BYPASS_BOOT)
 #define CFG_MEMTEST_START      0x00000000      /* memtest works on */
-#elif (BFIN_BOOT_MODE == BF533_SPI_BOOT)
-#define CFG_MEMTEST_START      0x00100000      /* memtest works on */
-#endif
 
 #define        CFG_SDRAM_BASE          0x00000000
 
 #define CONFIG_SCLK_HZ         CONFIG_CLKIN_HZ
 #endif
 
-#if (BFIN_BOOT_MODE == BF533_SPI_BOOT)
-#if (CONFIG_SCLK_HZ / (2*CONFIG_SPI_BAUD) > 20000000)
-#define CONFIG_SPI_FLASH_FAST_READ 1 /* Needed if SPI_CLK > 20 MHz */
-#else
-#undef CONFIG_SPI_FLASH_FAST_READ
-#endif
-#endif
-
 /*
  * Command settings
  */
 #define CFG_LONGHELP           1
 #define CONFIG_CMDLINE_EDITING 1
 
-#if (BFIN_BOOT_MODE == BF533_BYPASS_BOOT)
 #define CFG_AUTOLOAD           "no"    /*rarpb, bootp or dhcp commands will perform only a */
-#endif
 
 /* configuration lookup from the BOOTP/DHCP server, */
 /* but not try to load any image using TFTP        */
 
 #define CONFIG_BOOTDELAY       5
 #define CONFIG_BOOT_RETRY_TIME -1      /* Enable this if bootretry required, currently its disabled */
-#if (BFIN_BOOT_MODE == BF533_BYPASS_BOOT)
 #define CONFIG_BOOTCOMMAND     "run ramboot"
-#elif (BFIN_BOOT_MODE == BF533_SPI_BOOT)
-#define CONFIG_BOOTCOMMAND     "eeprom read 0x1000000 0x100000 0x180000;icache on;dcache on;bootm 0x1000000"
-#endif
 
 #define CONFIG_BOOTARGS                "root=/dev/mtdblock0 rw console=ttyBF0,57600"
 
 
-#if (BFIN_BOOT_MODE == BF533_BYPASS_BOOT)
-#if (CONFIG_DRIVER_SMC91111)
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "ramargs=setenv bootargs root=/dev/mtdblock0 rw console=ttyBF0,57600\0" \
        "nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):" \
                "protect off 0x20000000 0x2003FFFF; erase 0x20000000 0x2003FFFF;" \
                "cp.b $(loadaddr) 0x20000000 $(filesize)\0" \
        ""
-#else
-#define CONFIG_EXTRA_ENV_SETTINGS \
-       "ramargs=setenv bootargs root=/dev/mtdblock0 rw console=ttyBF0,57600\0" \
-       "flashboot=bootm 0x20100000\0" \
-       "
-#endif
-
-#elif (BFIN_BOOT_MODE == BF533_SPI_BOOT)
-#define CONFIG_EXTRA_ENV_SETTINGS \
-       "ramargs=setenv bootargs root=/dev/mtdblock0 rw console=ttyBF0,57600\0" \
-       "nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):" \
-               "$(rootpath) console=ttyBF0,57600\0"    \
-       "addip=setenv bootargs $(bootargs) ip=$(ipaddr):$(serverip):" \
-               "$(gatewayip):$(netmask):$(hostname):eth0:off\0" \
-       "ramboot=tftpboot $(loadaddr) linux; " \
-               "run ramargs;run addip;bootelf\0" \
-       "nfsboot=tftpboot $(loadaddr) linux; "  \
-               "run nfsargs;run addip;bootelf\0" \
-       "flashboot=bootm 0x20100000\0" \
-       "update=tftpboot $(loadaddr) u-boot.ldr;"       \
-               "eeprom write $(loadaddr) 0x0 $(filesize);\0"\
-       ""
-#endif
 
 #ifdef CONFIG_SOFT_I2C
 #if (!CONFIG_SOFT_I2C)
 #define CONFIG_CMD_I2C
 #endif
 
-#if (BFIN_BOOT_MODE == BF533_BYPASS_BOOT)
 #define CONFIG_CMD_DHCP
-#endif
 
 
 /*
 /*
  * FLASH organization and environment definitions
  */
-#define        CFG_BOOTMAPSZ           (8 << 20)/* Initial Memory map for Linux */
-
-/* 0xFF, 0xBBC3BBc3, 0x99B39983 */
-/*#define AMGCTLVAL            (AMBEN_P0 | AMBEN_P1 | AMBEN_P2 | AMCKEN)
-#define AMBCTL0VAL             (B1WAT_11 | B1RAT_11 | B1HT_3 | B1ST_4 | B1TT_4 | B1RDYPOL | \
-                               B1RDYEN | B0WAT_11 | B0RAT_11 | B0HT_3 | B0ST_4 | B0TT_4 | B0RDYPOL | B0RDYEN)
-#define AMBCTL1VAL             (B3WAT_9 | B3RAT_9 | B3HT_2 | B3ST_3 | B3TT_4 | B3RDYPOL | \
-                               B3RDYEN | B2WAT_9 | B2RAT_9 | B2HT_2 | B2ST_4 | B2TT_4 | B2RDYPOL | B2RDYEN)
-*/
-#define AMGCTLVAL              0xFF
-#define AMBCTL0VAL             0xBBC3BBC3
-#define AMBCTL1VAL             0x99B39983
-#define CF_AMBCTL1VAL          0x99B3ffc2
-
-#ifdef CONFIG_VDSP
-#define ET_EXEC_VDSP           0x8
-#define SHT_STRTAB_VDSP                0x1
-#define ELFSHDRSIZE_VDSP       0x2C
-#define VDSP_ENTRY_ADDR                0xFFA00000
-#endif
+
+#define CONFIG_EBIU_SDRRC_VAL  0x268
+#define CONFIG_EBIU_SDGCTL_VAL 0x911109
+#define CONFIG_EBIU_SDBCTL_VAL 0x37
+
+#define CONFIG_EBIU_AMGCTL_VAL         0xFF
+#define CONFIG_EBIU_AMBCTL0_VAL                0xBBC3BBC3
+#define CONFIG_EBIU_AMBCTL1_VAL                0x99B39983
+#define CF_CONFIG_EBIU_AMBCTL1_VAL             0x99B3ffc2
+
+#include <asm/blackfin-config-post.h>
 
 #endif
 
 #define CONFIG_BAUDRATE                57600
 /* Set default serial console for bf537 */
 #define CONFIG_UART_CONSOLE    0
-#define CONFIG_BF537           1
 #define CONFIG_BOOTDELAY       5
 /* define CONFIG_BF537_STAMP_LEDCMD to enable LED command*/
 /*#define CONFIG_BF537_STAMP_LEDCMD    1*/
 
-/*
- * Boot Mode Set
- * Blackfin can support several boot modes
- */
-#define BF537_BYPASS_BOOT      0x0011  /* Bootmode 0: Execute from 16-bit externeal memory ( bypass BOOT ROM)  */
-#define BF537_PARA_BOOT                0x0012  /* Bootmode 1: Boot from 8-bit or 16-bit flash                          */
-#define BF537_SPI_MASTER_BOOT  0x0014  /* Bootmode 3: SPI master mode boot from SPI flash                      */
-#define BF537_SPI_SLAVE_BOOT   0x0015  /* Bootmode 4: SPI slave mode boot from SPI flash                       */
-#define BF537_TWI_MASTER_BOOT  0x0016  /* Bootmode 5: TWI master mode boot from EEPROM                         */
-#define BF537_TWI_SLAVE_BOOT   0x0017  /* Bootmode 6: TWI slave mode boot from EEPROM                          */
-#define BF537_UART_BOOT                0x0018  /* Bootmode 7: UART slave mdoe boot via UART host                       */
-/* Define the boot mode */
-#define BFIN_BOOT_MODE         BF537_BYPASS_BOOT
-
 #define CONFIG_PANIC_HANG 1
 
 #define CONFIG_BFIN_CPU        bf537-0.2
+#define CONFIG_BFIN_BOOT_MODE BFIN_BOOT_BYPASS
+
 #define CONFIG_BFIN_MAC
 
 /* This sets the default state of the cache on U-Boot's boot */
 /* Define if want to do post memory test */
 #undef CONFIG_POST_TEST
 
-/* Define where the uboot will be loaded by on-chip boot rom */
-#define APP_ENTRY 0x00001000
-
 #define CONFIG_RTC_BFIN                1
 #define CONFIG_BOOT_RETRY_TIME -1      /* Enable this if bootretry required, currently its disabled */
 
 /* Values can range from 2-65535                               */
 /* SCK Frequency = SCLK / (2 * CONFIG_SPI_BAUD)                        */
 #define CONFIG_SPI_BAUD                        2
-#if (BFIN_BOOT_MODE == BF537_SPI_MASTER_BOOT)
 #define CONFIG_SPI_BAUD_INITBLOCK      4
-#endif
 
 #if ( CONFIG_CLKIN_HALF == 0 )
 #define CONFIG_VCO_HZ ( CONFIG_CLKIN_HZ * CONFIG_VCO_MULT )
 #define CONFIG_SCLK_HZ CONFIG_CLKIN_HZ
 #endif
 
-#if (BFIN_BOOT_MODE == BF537_SPI_MASTER_BOOT)
-#if (CONFIG_SCLK_HZ / (2*CONFIG_SPI_BAUD) > 20000000)
-#define CONFIG_SPI_FLASH_FAST_READ 1   /* Needed if SPI_CLK > 20 MHz */
-#else
-#undef CONFIG_SPI_FLASH_FAST_READ
-#endif
-#endif
-
 #define CONFIG_MEM_SIZE                        64      /* 128, 64, 32, 16 */
 #define CONFIG_MEM_ADD_WDTH            10      /* 8, 9, 10, 11 */
 #define CONFIG_MEM_MT48LC32M8A2_75     1
 #define CONFIG_BOOT_RETRY_TIME -1      /* Enable this if bootretry required, currently its disabled */
 #define CONFIG_BOOTCOMMAND     "run ramboot"
 
-#if (BFIN_BOOT_MODE == BF537_BYPASS_BOOT) && defined(CONFIG_POST_TEST)
+#if defined(CONFIG_POST_TEST)
 /* POST support */
 #define CONFIG_POST            ( CFG_POST_MEMORY | \
                                  CFG_POST_UART   | \
  */
 #include <config_cmd_default.h>
 
-#if (BFIN_BOOT_MODE == BF537_BYPASS_BOOT) || (BFIN_BOOT_MODE == BF537_SPI_MASTER_BOOT)
-
 #define CONFIG_CMD_ELF
 #define CONFIG_CMD_I2C
 #define CONFIG_CMD_CACHE
 #define CONFIG_CMD_IDE
 #endif
 
-#endif
-
-#if (BFIN_BOOT_MODE == BF537_BYPASS_BOOT)
-
 #define CONFIG_CMD_DHCP
 
 #if defined(CONFIG_POST)
 #define CONFIG_CMD_NAND
 #endif
 
-#endif
-
 
 #define CONFIG_BOOTARGS "root=/dev/mtdblock0 rw console=ttyBF0,57600"
 #define CONFIG_LOADADDR        0x1000000
 
-#if (BFIN_BOOT_MODE == BF537_BYPASS_BOOT)
-#ifdef CONFIG_BFIN_MAC
 #define CONFIG_EXTRA_ENV_SETTINGS                              \
        "ramargs=setenv bootargs root=/dev/mtdblock0 rw console=ttyBF0,57600\0" \
        "nfsargs=setenv bootargs root=/dev/nfs rw "             \
        "protect off 0x20000000 0x2007FFFF;"                    \
        "erase 0x20000000 0x2007FFFF;cp.b 0x1000000 0x20000000 $(filesize)\0"   \
        ""
-#else
-#define CONFIG_EXTRA_ENV_SETTINGS                              \
-       "ramargs=setenv bootargs root=/dev/mtdblock0 rw console=ttyBF0,57600\0" \
-       "flashboot=bootm 0x20100000\0"                          \
-       ""
-#endif
-#elif (BFIN_BOOT_MODE == BF537_SPI_MASTER_BOOT)
-#ifdef CONFIG_BFIN_MAC
-#define CONFIG_EXTRA_ENV_SETTINGS                              \
-       "ramargs=setenv bootargs root=/dev/mtdblock0 rw console=ttyBF0,57600\0" \
-       "nfsargs=setenv bootargs root=/dev/nfs rw "             \
-       "nfsroot=$(serverip):$(rootpath) console=ttyBF0,57600\0"\
-       "addip=setenv bootargs $(bootargs) "                    \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"      \
-       ":$(hostname):eth0:off\0"                               \
-       "ramboot=tftpboot $(loadaddr) linux;"                   \
-       "run ramargs;run addip;bootelf\0"                       \
-       "nfsboot=tftpboot $(loadaddr) linux;"                   \
-       "run nfsargs;run addip;bootelf\0"                       \
-       "flashboot=bootm 0x20100000\0"                          \
-       "update=tftpboot $(loadaddr) u-boot.ldr;"               \
-       "eeprom write $(loadaddr) 0x0 $(filesize);\0"           \
-       ""
-#else
-#define CONFIG_EXTRA_ENV_SETTINGS                              \
-       "ramargs=setenv bootargs root=/dev/mtdblock0 rw console=ttyBF0,57600\0" \
-       "flashboot=bootm 0x20100000\0"                          \
-       ""
-#endif
-#endif
 
 #define        CFG_PROMPT              "bfin> "        /* Monitor Command Prompt */
 
 #define CFG_GBL_DATA_ADDR      (CFG_MALLOC_BASE - CFG_GBL_DATA_SIZE)
 #define CONFIG_STACKBASE       (CFG_GBL_DATA_ADDR  - 4)
 
-#if (BFIN_BOOT_MODE == BF537_BYPASS_BOOT) || (BFIN_BOOT_MODE == BF537_UART_BOOT)
-/* for bf537-stamp, usrt boot mode still store env in flash */
-#define        CFG_ENV_IS_IN_FLASH     1
-#define CFG_ENV_ADDR           0x20004000
-#define CFG_ENV_OFFSET         (CFG_ENV_ADDR - CFG_FLASH_BASE)
-#elif (BFIN_BOOT_MODE == BF537_SPI_MASTER_BOOT)
+#if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_SPI_MASTER)
 #define CFG_ENV_IS_IN_EEPROM   1
 #define CFG_ENV_OFFSET         0x4000
 #define CFG_ENV_HEADER         (CFG_ENV_OFFSET + 0x16e) /* 0x12A is the length of LDR file header */
+#else
+#define        CFG_ENV_IS_IN_FLASH     1
+#define CFG_ENV_ADDR           0x20004000
+#define CFG_ENV_OFFSET         (CFG_ENV_ADDR - CFG_FLASH_BASE)
 #endif
 #define CFG_ENV_SIZE           0x2000
 #define        CFG_ENV_SECT_SIZE       0x2000  /* Total Size of Environment Sector */
-/* #if (BFIN_BOOT_MODE == BF537_BYPASS_BOOT) */
 #define ENV_IS_EMBEDDED
-/* #endif */
 
 /* JFFS Partition offset set  */
 #define CFG_JFFS2_FIRST_BANK   0
 #define CONFIG_TWICLK_KHZ      50
 #endif
 
+#define CONFIG_EBIU_SDRRC_VAL  0x306
+#define CONFIG_EBIU_SDGCTL_VAL 0x91114d
+#define CONFIG_EBIU_SDBCTL_VAL 0x25
+
+#define CONFIG_EBIU_AMGCTL_VAL         0xFF
+#define CONFIG_EBIU_AMBCTL0_VAL                0x7BB07BB0
+#define CONFIG_EBIU_AMBCTL1_VAL                0xFFC27BB0
+
 #if defined CONFIG_SOFT_I2C
 /*
  * Software (bit-bang) I2C driver configuration
 #define AMBCTL0VAL             0x7BB07BB0
 #define AMBCTL1VAL             0xFFC27BB0
 
-#define CONFIG_VDSP            1
-
-#ifdef CONFIG_VDSP
-#define ET_EXEC_VDSP           0x8
-#define SHT_STRTAB_VDSP                0x1
-#define ELFSHDRSIZE_VDSP       0x2C
-#define VDSP_ENTRY_ADDR                0xFFA00000
-#endif
-
 #if defined(CONFIG_BFIN_IDE)
 
 #define CONFIG_DOS_PARTITION   1
 
 #endif                         /*CONFIG_BFIN_IDE */
 
+#include <asm/blackfin-config-post.h>
+
 #endif
 
 
 #include <asm/blackfin-config-pre.h>
 
-#define CONFIG_VDSP            1
-#define CONFIG_BF561           1
-
 #define CFG_LONGHELP           1
 #define CONFIG_CMDLINE_EDITING 1
 #define CONFIG_BAUDRATE                57600
 #define CONFIG_PANIC_HANG 1
 
 #define CONFIG_BFIN_CPU        bf561-0.3
-
-/*
-* Boot Mode Set
-* Blackfin can support several boot modes
-*/
-#define BF561_BYPASS_BOOT      0x21
-#define BF561_PARA_BOOT                0x22
-#define BF561_SPI_BOOT         0x24
-/* Define the boot mode */
-#define BFIN_BOOT_MODE BF561_BYPASS_BOOT
+#define CONFIG_BFIN_BOOT_MODE BFIN_BOOT_BYPASS
 
 /* This sets the default state of the cache on U-Boot's boot */
 #define CONFIG_ICACHE_ON
 #define CONFIG_DCACHE_ON
 
-/* Define where the uboot will be loaded by on-chip boot rom */
-#define APP_ENTRY 0x00001000
-
-/*
- * Stringize definitions - needed for environmental settings
- */
-#define STRINGIZE2(x) #x
-#define STRINGIZE(x) STRINGIZE2(x)
-
 /*
  * Board settings
  */
 /*
  * FLASH organization and environment definitions
  */
-#define        CFG_BOOTMAPSZ           (8 << 20)       /* Initial Memory map for Linux */
+#define CONFIG_EBIU_SDRRC_VAL  0x306
+#define CONFIG_EBIU_SDGCTL_VAL 0x91114d
+#define CONFIG_EBIU_SDBCTL_VAL 0x15
 
-#define AMGCTLVAL              0x3F
-#define AMBCTL0VAL             0x7BB07BB0
-#define AMBCTL1VAL             0xFFC27BB0
+#define CONFIG_EBIU_AMGCTL_VAL         0x3F
+#define CONFIG_EBIU_AMBCTL0_VAL                0x7BB07BB0
+#define CONFIG_EBIU_AMBCTL1_VAL                0xFFC27BB0
 
-#ifdef CONFIG_VDSP
-#define ET_EXEC_VDSP           0x8
-#define SHT_STRTAB_VDSP                0x1
-#define ELFSHDRSIZE_VDSP       0x2C
-#define VDSP_ENTRY_ADDR                0xFFA00000
-#endif
+#include <asm/blackfin-config-post.h>
 
 #endif                         /* __CONFIG_EZKIT561_H__ */
 
 SOBJS-y        += memmove.o
 SOBJS-y        += memset.o
 
-COBJS-y        += bf533_string.o
 COBJS-y        += board.o
 COBJS-y        += bootm.o
 COBJS-y        += cache.o
 COBJS-y        += muldi3.o
 COBJS-y        += post.o
+COBJS-y        += string.o
 COBJS-y        += tests.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 
+++ /dev/null
-/*
- * U-boot - bf533_string.c Contains library routines.
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * (C) Copyright 2000-2004
- * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <config.h>
-#include <asm/blackfin.h>
-#include <asm/io.h>
-#include "cache.h"
-#include <asm/mach-common/bits/dma.h>
-
-char *strcpy(char *dest, const char *src)
-{
-       char *xdest = dest;
-       char temp = 0;
-
-       __asm__ __volatile__
-           ("1:\t%2 = B [%1++] (Z);\n\t"
-            "B [%0++] = %2;\n\t"
-            "CC = %2;\n\t"
-            "if cc jump 1b (bp);\n":"=a"(dest), "=a"(src), "=d"(temp)
-            :"0"(dest), "1"(src), "2"(temp):"memory");
-
-       return xdest;
-}
-
-char *strncpy(char *dest, const char *src, size_t n)
-{
-       char *xdest = dest;
-       char temp = 0;
-
-       if (n == 0)
-               return xdest;
-
-       __asm__ __volatile__
-           ("1:\t%3 = B [%1++] (Z);\n\t"
-            "B [%0++] = %3;\n\t"
-            "CC = %3;\n\t"
-            "if ! cc jump 2f;\n\t"
-            "%2 += -1;\n\t"
-            "CC = %2 == 0;\n\t"
-            "if ! cc jump 1b (bp);\n"
-            "2:\n":"=a"(dest), "=a"(src), "=da"(n), "=d"(temp)
-            :"0"(dest), "1"(src), "2"(n), "3"(temp)
-            :"memory");
-
-       return xdest;
-}
-
-int strcmp(const char *cs, const char *ct)
-{
-       char __res1, __res2;
-
-       __asm__("1:\t%2 = B[%0++] (Z);\n\t"     /* get *cs */
-               "%3 = B[%1++] (Z);\n\t" /* get *ct */
-               "CC = %2 == %3;\n\t"    /* compare a byte */
-               "if ! cc jump 2f;\n\t"  /* not equal, break out */
-               "CC = %2;\n\t"  /* at end of cs? */
-               "if cc jump 1b (bp);\n\t"       /* no, keep going */
-               "jump.s 3f;\n"  /* strings are equal */
-               "2:\t%2 = %2 - %3;\n"   /* *cs - *ct */
-      "3:\n":  "=a"(cs), "=a"(ct), "=d"(__res1), "=d"(__res2)
-      :        "0"(cs), "1"(ct));
-
-       return __res1;
-}
-
-int strncmp(const char *cs, const char *ct, size_t count)
-{
-       char __res1, __res2;
-
-       if (!count)
-               return 0;
-
-       __asm__("1:\t%3 = B[%0++] (Z);\n\t"     /* get *cs */
-               "%4 = B[%1++] (Z);\n\t" /* get *ct */
-               "CC = %3 == %4;\n\t"    /* compare a byte */
-               "if ! cc jump 3f;\n\t"  /* not equal, break out */
-               "CC = %3;\n\t"  /* at end of cs? */
-               "if ! cc jump 4f;\n\t"  /* yes, all done */
-               "%2 += -1;\n\t" /* no, adjust count */
-               "CC = %2 == 0;\n\t" "if ! cc jump 1b;\n"        /* more to do, keep going */
-               "2:\t%3 = 0;\n\t"       /* strings are equal */
-               "jump.s    4f;\n" "3:\t%3 = %3 - %4;\n" /* *cs - *ct */
-      "4:":    "=a"(cs), "=a"(ct), "=da"(count), "=d"(__res1),
-               "=d"(__res2)
-      :        "0"(cs), "1"(ct), "2"(count));
-
-       return __res1;
-}
-
-#ifndef pMDMA_D0_IRQ_STATUS
-# define pMDMA_D0_IRQ_STATUS pMDMA1_D0_IRQ_STATUS
-# define pMDMA_D0_START_ADDR pMDMA1_D0_START_ADDR
-# define pMDMA_D0_X_COUNT    pMDMA1_D0_X_COUNT
-# define pMDMA_D0_X_MODIFY   pMDMA1_D0_X_MODIFY
-# define pMDMA_D0_CONFIG     pMDMA1_D0_CONFIG
-# define pMDMA_S0_IRQ_STATUS pMDMA1_S0_IRQ_STATUS
-# define pMDMA_S0_START_ADDR pMDMA1_S0_START_ADDR
-# define pMDMA_S0_X_COUNT    pMDMA1_S0_X_COUNT
-# define pMDMA_S0_X_MODIFY   pMDMA1_S0_X_MODIFY
-# define pMDMA_S0_CONFIG     pMDMA1_S0_CONFIG
-#endif
-
-static void *dma_memcpy(void *dest, const void *src, size_t count)
-{
-       *pMDMA_D0_IRQ_STATUS = DMA_DONE | DMA_ERR;
-
-       /* Copy sram functions from sdram to sram */
-       /* Setup destination start address */
-       *pMDMA_D0_START_ADDR = (volatile void **)dest;
-       /* Setup destination xcount */
-       *pMDMA_D0_X_COUNT = count;
-       /* Setup destination xmodify */
-       *pMDMA_D0_X_MODIFY = 1;
-
-       /* Setup Source start address */
-       *pMDMA_S0_START_ADDR = (volatile void **)src;
-       /* Setup Source xcount */
-       *pMDMA_S0_X_COUNT = count;
-       /* Setup Source xmodify */
-       *pMDMA_S0_X_MODIFY = 1;
-
-       /* Enable source DMA */
-       *pMDMA_S0_CONFIG = (DMAEN);
-       SSYNC();
-
-       *pMDMA_D0_CONFIG = (WNR | DMAEN);
-
-       while (*pMDMA_D0_IRQ_STATUS & DMA_RUN) {
-               *pMDMA_D0_IRQ_STATUS |= (DMA_DONE | DMA_ERR);
-       }
-       *pMDMA_D0_IRQ_STATUS |= (DMA_DONE | DMA_ERR);
-
-       dest += count;
-       src += count;
-       return dest;
-}
-
-/*
- * memcpy - Copy one area of memory to another
- * @dest: Where to copy to
- * @src: Where to copy from
- * @count: The size of the area.
- *
- * You should not use this function to access IO space, use memcpy_toio()
- * or memcpy_fromio() instead.
- */
-extern void *memcpy_ASM(void *dest, const void *src, size_t count);
-void *memcpy(void *dest, const void *src, size_t count)
-{
-       char *tmp = (char *) dest, *s = (char *) src;
-
-       if (dcache_status()) {
-               blackfin_dcache_flush_range(src, src+count);
-       }
-       /* L1_INST_SRAM can only be accessed via dma */
-       if ((tmp >= (char *)L1_INST_SRAM) && (tmp < (char *)L1_INST_SRAM_END)) {
-               /* L1 is the destination */
-               dma_memcpy(dest,src,count);
-       } else if ((s >= (char *)L1_INST_SRAM) && (s < (char *)L1_INST_SRAM_END)) {
-               /* L1 is the source */
-               dma_memcpy(dest,src,count);
-
-               if (icache_status()) {
-                       blackfin_icache_flush_range(dest, dest+count);
-               }
-               if (dcache_status()) {
-                       blackfin_dcache_invalidate_range(dest, dest+count);
-               }
-       } else {
-               memcpy_ASM(dest,src,count);
-       }
-       return dest;
-}
 
 #include <asm/cplb.h>
 #include "../drivers/net/smc91111.h"
 
-#if defined(CONFIG_BF537)&&defined(CONFIG_POST)
+#if defined(CONFIG_POST)
 #include <post.h>
 int post_flag;
 #endif
                }
                j++;
        }
-#if defined(CONFIG_BF561)
-       /* MAC space */
-       icplb_table[j][0] = 0x2C000000;
-       icplb_table[j][1] = SDRAM_INON_CHBL;
-       j++;
-       /* Async Memory space */
-       for (i = 0; i < 3; i++) {
-               icplb_table[j][0] = 0x20000000 + i * 4 * 1024 * 1024;
-               icplb_table[j][1] = SDRAM_INON_CHBL;
-               j++;
-       }
-#else
        icplb_table[j][0] = 0x20000000;
        icplb_table[j][1] = SDRAM_INON_CHBL;
-#endif
        j = 0;
        dcplb_table[j][0] = 0xFF800000;
        dcplb_table[j][1] = L1_DMEMORY;
                j++;
        }
 
-#if defined(CONFIG_BF561)
-       /* MAC space */
-       dcplb_table[j][0] = 0x2C000000;
-       dcplb_table[j][1] = SDRAM_EBIU;
-       j++;
-
-       /* Flash space */
-       for (i = 0; i < 3; i++) {
-               dcplb_table[j][0] = 0x20000000 + i * 4 * 1024 * 1024;
-               dcplb_table[j][1] = SDRAM_EBIU;
-               j++;
-       }
-#else
        dcplb_table[j][0] = 0x20000000;
        dcplb_table[j][1] = SDRAM_EBIU;
-#endif
 }
 
 /*
        memset((void *)bd, 0, sizeof(bd_t));
 
        /* Initialize */
-       init_IRQ();
+       irq_init();
        env_init();             /* initialize environment */
        init_baudrate();        /* initialze baudrate settings */
        serial_init();          /* serial communications setup */
               get_vco() / 1000000, get_cclk() / 1000000, get_sclk() / 1000000);
        printf("SDRAM: ");
        print_size(initdram(0), "\n");
-#if defined(CONFIG_BF537)&&defined(CONFIG_POST)
+#if defined(CONFIG_POST)
        post_init_f();
        post_bootmode_init();
        post_run(NULL, POST_ROM | post_bootmode_get(0));
        gd->flags |= GD_FLG_RELOC;      /* tell others: relocation done */
        bd = gd->bd;
 
-#if    defined(CONFIG_BF537) && defined(CONFIG_POST)
+#if defined(CONFIG_POST)
        post_output_backlog();
        post_reloc();
 #endif
 
-#if    (CONFIG_STAMP || CONFIG_BF537 || CONFIG_EZKIT561) && !defined(CFG_NO_FLASH)
+#if    !defined(CFG_NO_FLASH)
        /* There are some other pointer constants we must deal with */
        /* configure available FLASH banks */
        size = flash_init();
        display_global_data();
 #endif
 
-#if defined(CONFIG_BF537) && defined(CONFIG_POST)
+#if defined(CONFIG_POST)
        if (post_flag)
                post_run(NULL, POST_RAM | post_bootmode_get(0));
 #endif
 
 /*
- * U-boot - bf533_linux.c
+ * U-boot - bootm.c - misc boot helper functions
  *
- * Copyright (c) 2005-2007 Analog Devices Inc.
+ * Copyright (c) 2005-2008 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * 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., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
+ * Licensed under the GPL-2 or later.
  */
 
-/* Dummy functions, currently not in Use */
-
 #include <common.h>
 #include <command.h>
 #include <image.h>
-#include <zlib.h>
-#include <asm/byteorder.h>
+#include <asm/blackfin.h>
 
-#define        LINUX_MAX_ENVS          256
-#define        LINUX_MAX_ARGS          256
-
-#define CMD_LINE_ADDR 0xFF900000       /* L1 scratchpad */
+extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
 
 #ifdef SHARED_RESOURCES
 extern void swap_to(int device_id);
 #endif
 
-extern void flush_instruction_cache(void);
-extern void flush_data_cache(void);
-static char *make_command_line(void);
+static char *make_command_line(void)
+{
+       char *dest = (char *)CMD_LINE_ADDR;
+       char *bootargs = getenv("bootargs");
+
+       if (bootargs == NULL)
+               return NULL;
+
+       strncpy(dest, bootargs, 0x1000);
+       dest[0xfff] = 0;
+       return dest;
+}
 
-void do_bootm_linux(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
+void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
                    bootm_headers_t *images)
 {
        int     (*appl) (char *cmdline);
        ulong   ep = 0;
 
        if (!images->autostart)
-               return ;
+               return;
 
 #ifdef SHARED_RESOURCES
        swap_to(FLASH);
 
        printf("Starting Kernel at = %x\n", appl);
        cmdline = make_command_line();
-       if (icache_status()) {
-               flush_instruction_cache();
-               icache_disable();
-       }
-       if (dcache_status()) {
-               flush_data_cache();
-               dcache_disable();
-       }
+       icache_disable();
+       dcache_disable();
        (*appl) (cmdline);
        /* does not return */
        return;
 
-error:
+ error:
        if (images->autostart)
                do_reset (cmdtp, flag, argc, argv);
-       return;
-}
-
-char *make_command_line(void)
-{
-       char *dest = (char *)CMD_LINE_ADDR;
-       char *bootargs;
-
-       if ((bootargs = getenv("bootargs")) == NULL)
-               return NULL;
-
-       strncpy(dest, bootargs, 0x1000);
-       dest[0xfff] = 0;
-       return dest;
 }
 
--- /dev/null
+/*
+ * U-boot - string.c Contains library routines.
+ *
+ * Copyright (c) 2005-2007 Analog Devices Inc.
+ *
+ * (C) Copyright 2000-2004
+ * 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., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/blackfin.h>
+#include <asm/io.h>
+#include <asm/mach-common/bits/dma.h>
+
+char *strcpy(char *dest, const char *src)
+{
+       char *xdest = dest;
+       char temp = 0;
+
+       __asm__ __volatile__ (
+               "1:\t%2 = B [%1++] (Z);\n\t"
+               "B [%0++] = %2;\n\t"
+               "CC = %2;\n\t"
+               "if cc jump 1b (bp);\n"
+               : "=a"(dest), "=a"(src), "=d"(temp)
+               : "0"(dest), "1"(src), "2"(temp)
+               : "memory");
+
+       return xdest;
+}
+
+char *strncpy(char *dest, const char *src, size_t n)
+{
+       char *xdest = dest;
+       char temp = 0;
+
+       if (n == 0)
+               return xdest;
+
+       __asm__ __volatile__ (
+               "1:\t%3 = B [%1++] (Z);\n\t"
+               "B [%0++] = %3;\n\t"
+               "CC = %3;\n\t"
+               "if ! cc jump 2f;\n\t"
+               "%2 += -1;\n\t"
+               "CC = %2 == 0;\n\t"
+               "if ! cc jump 1b (bp);\n"
+               "2:\n"
+               : "=a"(dest), "=a"(src), "=da"(n), "=d"(temp)
+               : "0"(dest), "1"(src), "2"(n), "3"(temp)
+               : "memory");
+
+       return xdest;
+}
+
+int strcmp(const char *cs, const char *ct)
+{
+       char __res1, __res2;
+
+       __asm__ (
+               "1:\t%2 = B[%0++] (Z);\n\t"     /* get *cs */
+               "%3 = B[%1++] (Z);\n\t" /* get *ct */
+               "CC = %2 == %3;\n\t"    /* compare a byte */
+               "if ! cc jump 2f;\n\t"  /* not equal, break out */
+               "CC = %2;\n\t"  /* at end of cs? */
+               "if cc jump 1b (bp);\n\t"       /* no, keep going */
+               "jump.s 3f;\n"  /* strings are equal */
+               "2:\t%2 = %2 - %3;\n"   /* *cs - *ct */
+               "3:\n"
+               : "=a"(cs), "=a"(ct), "=d"(__res1), "=d"(__res2)
+               : "0"(cs), "1"(ct));
+
+       return __res1;
+}
+
+int strncmp(const char *cs, const char *ct, size_t count)
+{
+       char __res1, __res2;
+
+       if (!count)
+               return 0;
+
+       __asm__(
+               "1:\t%3 = B[%0++] (Z);\n\t"     /* get *cs */
+               "%4 = B[%1++] (Z);\n\t" /* get *ct */
+               "CC = %3 == %4;\n\t"    /* compare a byte */
+               "if ! cc jump 3f;\n\t"  /* not equal, break out */
+               "CC = %3;\n\t"  /* at end of cs? */
+               "if ! cc jump 4f;\n\t"  /* yes, all done */
+               "%2 += -1;\n\t" /* no, adjust count */
+               "CC = %2 == 0;\n\t" "if ! cc jump 1b;\n"        /* more to do, keep going */
+               "2:\t%3 = 0;\n\t"       /* strings are equal */
+               "jump.s    4f;\n" "3:\t%3 = %3 - %4;\n" /* *cs - *ct */
+               "4:"
+               : "=a"(cs), "=a"(ct), "=da"(count), "=d"(__res1), "=d"(__res2)
+               : "0"(cs), "1"(ct), "2"(count));
+
+       return __res1;
+}
+
+#ifdef bfin_write_MDMA1_D0_IRQ_STATUS
+# define bfin_write_MDMA_D0_IRQ_STATUS bfin_write_MDMA1_D0_IRQ_STATUS
+# define bfin_write_MDMA_D0_START_ADDR bfin_write_MDMA1_D0_START_ADDR
+# define bfin_write_MDMA_D0_X_COUNT    bfin_write_MDMA1_D0_X_COUNT
+# define bfin_write_MDMA_D0_X_MODIFY   bfin_write_MDMA1_D0_X_MODIFY
+# define bfin_write_MDMA_D0_CONFIG     bfin_write_MDMA1_D0_CONFIG
+# define bfin_write_MDMA_S0_START_ADDR bfin_write_MDMA1_S0_START_ADDR
+# define bfin_write_MDMA_S0_X_COUNT    bfin_write_MDMA1_S0_X_COUNT
+# define bfin_write_MDMA_S0_X_MODIFY   bfin_write_MDMA1_S0_X_MODIFY
+# define bfin_write_MDMA_S0_CONFIG     bfin_write_MDMA1_S0_CONFIG
+# define bfin_write_MDMA_D0_IRQ_STATUS bfin_write_MDMA1_D0_IRQ_STATUS
+# define bfin_read_MDMA_D0_IRQ_STATUS  bfin_read_MDMA1_D0_IRQ_STATUS
+#endif
+static void *dma_memcpy(void *dst, const void *src, size_t count)
+{
+       if (dcache_status())
+               blackfin_dcache_flush_range(src, src + count);
+
+       bfin_write_MDMA_D0_IRQ_STATUS(DMA_DONE | DMA_ERR);
+
+       /* Copy sram functions from sdram to sram */
+       /* Setup destination start address */
+       bfin_write_MDMA_D0_START_ADDR(dst);
+       /* Setup destination xcount */
+       bfin_write_MDMA_D0_X_COUNT(count);
+       /* Setup destination xmodify */
+       bfin_write_MDMA_D0_X_MODIFY(1);
+
+       /* Setup Source start address */
+       bfin_write_MDMA_S0_START_ADDR(src);
+       /* Setup Source xcount */
+       bfin_write_MDMA_S0_X_COUNT(count);
+       /* Setup Source xmodify */
+       bfin_write_MDMA_S0_X_MODIFY(1);
+
+       /* Enable source DMA */
+       bfin_write_MDMA_S0_CONFIG(DMAEN);
+       SSYNC();
+
+       bfin_write_MDMA_D0_CONFIG(WNR | DMAEN);
+
+       while (bfin_read_MDMA_D0_IRQ_STATUS() & DMA_RUN)
+               bfin_write_MDMA_D0_IRQ_STATUS(bfin_read_MDMA_D0_IRQ_STATUS() | DMA_DONE | DMA_ERR);
+       bfin_write_MDMA_D0_IRQ_STATUS(bfin_read_MDMA_D0_IRQ_STATUS() | DMA_DONE | DMA_ERR);
+
+       if (icache_status())
+               blackfin_icache_flush_range(dst, dst + count);
+
+       if (dcache_status())
+               blackfin_dcache_invalidate_range(dst, dst + count);
+
+       return dst;
+}
+
+/*
+ * memcpy - Copy one area of memory to another
+ * @dest: Where to copy to
+ * @src: Where to copy from
+ * @count: The size of the area.
+ *
+ * We need to have this wrapper in memcpy() as common code may call memcpy()
+ * to load up L1 regions.  Consider loading an ELF which has sections with
+ * LMA's pointing to L1.  The common code ELF loader will simply use memcpy()
+ * to move the ELF's sections into the right place.  We need to catch that
+ * here and redirect to dma_memcpy().
+ */
+extern void *memcpy_ASM(void *dst, const void *src, size_t count);
+void *memcpy(void *dst, const void *src, size_t count)
+{
+       if (!count)
+               return dst;
+
+       if (addr_bfin_on_chip_mem(dst)) {
+               /* L1 is the destination */
+               return dma_memcpy(dst, src, count);
+
+       } else if (addr_bfin_on_chip_mem(src)) {
+               /* L1 is the source */
+               return dma_memcpy(dst, src, count);
+
+       } else
+               /* No L1 is involved, so just call regular memcpy */
+               return memcpy_ASM(dst, src, count);
+}