Merge branch 'master' of git://www.denx.de/git/u-boot-blackfin
authorWolfgang Denk <wd@denx.de>
Thu, 14 Feb 2008 23:06:18 +0000 (00:06 +0100)
committerWolfgang Denk <wd@denx.de>
Thu, 14 Feb 2008 23:06:18 +0000 (00:06 +0100)
Conflicts:

Makefile
doc/README.standalone

Signed-off-by: Wolfgang Denk <wd@denx.de>
1  2 
.gitignore
Makefile
README
common/cmd_bdinfo.c
common/cmd_mem.c
config.mk
doc/README.standalone
include/common.h

diff --combined .gitignore
index 37f2c1dcd99d8f9102ad396ebe467d19b878a95b,e29dce92977aa9e8246325c4e59af3ef78501064..7c56594381a62abb57f0dcd63c0ccccfc4f5e55e
@@@ -10,7 -10,6 +10,7 @@@
  *.orig
  *.a
  *.o
 +*~
  
  #
  # Top-level generic files
  
  /System.map
  /u-boot
+ /u-boot.hex
  /u-boot.map
  /u-boot.bin
  /u-boot.srec
+ /u-boot.ldr
+ /u-boot.ldr.hex
+ /u-boot.ldr.srec
  
  #
  # Generated files
diff --combined Makefile
index 969ce42ec06266767ef179ac00e051e937220a4c,b4a39945bf05eb65cfce6d4e3cd06ab4fbed0ee2..f80e5113ca00f8bcab0c8225515629e4dc211d85
+++ b/Makefile
@@@ -185,18 -185,6 +185,6 @@@ endi
  ifeq ($(CPU),mpc85xx)
  OBJS += cpu/$(CPU)/resetvec.o
  endif
- ifeq ($(CPU),bf533)
- OBJS += cpu/$(CPU)/start1.o   cpu/$(CPU)/interrupt.o  cpu/$(CPU)/cache.o
- OBJS += cpu/$(CPU)/flush.o    cpu/$(CPU)/init_sdram.o
- endif
- ifeq ($(CPU),bf537)
- OBJS += cpu/$(CPU)/start1.o   cpu/$(CPU)/interrupt.o  cpu/$(CPU)/cache.o
- OBJS += cpu/$(CPU)/flush.o    cpu/$(CPU)/init_sdram.o
- endif
- ifeq ($(CPU),bf561)
- OBJS += cpu/$(CPU)/start1.o   cpu/$(CPU)/interrupt.o  cpu/$(CPU)/cache.o
- OBJS += cpu/$(CPU)/flush.o    cpu/$(CPU)/init_sdram.o
- endif
  
  OBJS := $(addprefix $(obj),$(OBJS))
  
@@@ -253,7 -241,9 +241,7 @@@ LIBS += $(shell if [ -d post/board/$(BO
        "post/board/$(BOARDDIR)/libpost$(BOARD).a"; fi)
  LIBS += common/libcommon.a
  LIBS += libfdt/libfdt.a
 -ifeq ($(CONFIG_API),y)
  LIBS += api/libapi.a
 -endif
  
  LIBS := $(addprefix $(obj),$(LIBS))
  .PHONY : $(LIBS)
@@@ -264,8 -254,11 +252,8 @@@ PLATFORM_LIBS += -L $(shell dirname `$(
  # The "tools" are needed early, so put this first
  # Don't include stuff already done in $(LIBS)
  SUBDIRS       = tools \
 -        examples
 -
 -ifeq ($(CONFIG_API),y)
 -SUBDIRS += api_examples
 -endif
 +        examples \
 +        api_examples
  
  .PHONY : $(SUBDIRS)
  
@@@ -274,18 -267,16 +262,21 @@@ NAND_SPL = nand_sp
  U_BOOT_NAND = $(obj)u-boot-nand.bin
  endif
  
 +ifeq ($(CONFIG_ONENAND_U_BOOT),y)
 +ONENAND_IPL = onenand_ipl
 +U_BOOT_ONENAND = $(obj)u-boot-onenand.bin
 +endif
 +
  __OBJS := $(subst $(obj),,$(OBJS))
  __LIBS := $(subst $(obj),,$(LIBS))
  
  #########################################################################
  #########################################################################
  
 -ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)
 +ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) $(U_BOOT_ONENAND)
+ ifeq ($(ARCH),blackfin)
+ ALL += $(obj)u-boot.ldr
+ endif
  
  all:          $(ALL)
  
@@@ -298,6 -289,15 +289,15 @@@ $(obj)u-boot.srec:       $(obj)u-boo
  $(obj)u-boot.bin:     $(obj)u-boot
                $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
  
+ $(obj)u-boot.ldr:     $(obj)u-boot
+               $(LDR) -T $(CONFIG_BFIN_CPU) -f -c $@ $< $(LDR_FLAGS)
+ $(obj)u-boot.ldr.hex: $(obj)u-boot.ldr
+               $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary
+ $(obj)u-boot.ldr.srec:        $(obj)u-boot.ldr
+               $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary
  $(obj)u-boot.img:     $(obj)u-boot.bin
                ./tools/mkimage -A $(ARCH) -T firmware -C none \
                -a $(TEXT_BASE) -e 0 \
@@@ -312,18 -312,18 +312,18 @@@ $(obj)u-boot.dis:       $(obj)u-boo
                $(OBJDUMP) -d $< > $@
  
  $(obj)u-boot:         depend $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
-               UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
+               UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
                cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
                        --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
                        -Map u-boot.map -o u-boot
  
 -$(OBJS):      $(obj)include/autoconf.mk
 +$(OBJS):      depend $(obj)include/autoconf.mk
                $(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@))
  
 -$(LIBS):      $(obj)include/autoconf.mk
 +$(LIBS):      depend $(obj)include/autoconf.mk
                $(MAKE) -C $(dir $(subst $(obj),,$@))
  
 -$(SUBDIRS):   $(obj)include/autoconf.mk
 +$(SUBDIRS):   depend $(obj)include/autoconf.mk
                $(MAKE) -C $@ all
  
  $(NAND_SPL):  $(VERSION_FILE) $(obj)include/autoconf.mk
  $(U_BOOT_NAND):       $(NAND_SPL) $(obj)u-boot.bin $(obj)include/autoconf.mk
                cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin
  
 +$(ONENAND_IPL):       $(VERSION_FILE) $(obj)include/autoconf.mk
 +              $(MAKE) -C onenand_ipl/board/$(BOARDDIR) all
 +
 +$(U_BOOT_ONENAND):    $(ONENAND_IPL) $(obj)u-boot.bin $(obj)include/autoconf.mk
 +              cat $(obj)onenand_ipl/onenand-ipl-2k.bin $(obj)u-boot.bin > $(obj)u-boot-onenand.bin
 +
  $(VERSION_FILE):
                @( echo -n "#define U_BOOT_VERSION \"U-Boot " ; \
                echo -n "$(U_BOOT_VERSION)" ; \
                echo -n $(shell $(CONFIG_SHELL) $(TOPDIR)/tools/setlocalversion \
                         $(TOPDIR)) ; \
 -              echo "\"" ) > $(VERSION_FILE)
 +              echo "\"" ) > $@.tmp
 +              @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
  
  gdbtools:
                $(MAKE) -C tools/gdb all || exit 1
@@@ -2474,8 -2467,20 +2474,8 @@@ versatileab_config     
  versatilepb_config :  unconfig
        @board/versatile/split_by_variant.sh $@
  
 -voiceblue_smallflash_config   \
  voiceblue_config:     unconfig
 -      @mkdir -p $(obj)include
 -      @mkdir -p $(obj)board/voiceblue
 -      @if [ "$(findstring _smallflash_,$@)" ] ; then \
 -              $(XECHO) "... boot from lower flash bank" ; \
 -              echo "#define VOICEBLUE_SMALL_FLASH" >>$(obj)include/config.h ; \
 -              echo "VOICEBLUE_SMALL_FLASH=y" >$(obj)board/voiceblue/config.tmp ; \
 -      else \
 -              $(XECHO) "... boot from upper flash bank" ; \
 -              >$(obj)include/config.h ; \
 -              echo "VOICEBLUE_SMALL_FLASH=n" >$(obj)board/voiceblue/config.tmp ; \
 -      fi
 -      @$(MKCONFIG) -a voiceblue arm arm925t voiceblue
 +      @$(MKCONFIG) $(@:_config=) arm arm925t voiceblue
  
  cm4008_config :       unconfig
        @$(MKCONFIG) $(@:_config=) arm arm920t cm4008 NULL ks8695
@@@ -2609,9 -2614,7 +2609,9 @@@ omap2420h4_config       : unconfi
        @$(MKCONFIG) $(@:_config=) arm arm1136 omap2420h4
  
  apollon_config                : unconfig
 +      @echo "#define CONFIG_ONENAND_U_BOOT" > $(obj)include/config.h
        @$(MKCONFIG) $(@:_config=) arm arm1136 apollon
 +      @echo "CONFIG_ONENAND_U_BOOT = y" >> $(obj)include/config.mk
  
  #========================================================================
  # i386
@@@ -2824,20 -2827,19 +2824,19 @@@ xupv2p_config:       unconfi
        @echo "#define CONFIG_XUPV2P 1" >> $(obj)include/config.h
        @$(MKCONFIG) -a $(@:_config=) microblaze microblaze xupv2p xilinx
  
- #########################################################################
- ## Blackfin
- #########################################################################
- bf533-ezkit_config:   unconfig
-       @$(MKCONFIG) $(@:_config=) blackfin bf533 bf533-ezkit
+ #========================================================================
+ # Blackfin
+ #========================================================================
  
- bf533-stamp_config:   unconfig
-       @$(MKCONFIG) $(@:_config=) blackfin bf533 bf533-stamp
+ # Analog Devices boards
+ BFIN_BOARDS = bf533-ezkit bf533-stamp bf537-stamp bf561-ezkit
  
bf537-stamp_config:   unconfig
-       @$(MKCONFIG) $(@:_config=) blackfin bf537 bf537-stamp
$(BFIN_BOARDS:%=%_config)     : unconfig
+       @$(MKCONFIG) $(@:_config=) blackfin $(firstword $(subst -, ,$@)) $(@:_config=)
  
- bf561-ezkit_config:   unconfig
-       @$(MKCONFIG) $(@:_config=) blackfin bf561 bf561-ezkit
+ $(BFIN_BOARDS):
+       $(MAKE) $@_config
+       $(MAKE)
  
  #========================================================================
  # AVR32
@@@ -2912,8 -2914,6 +2911,8 @@@ clean
        @rm -f $(obj)board/bf537-stamp/u-boot.lds $(obj)board/bf561-ezkit/u-boot.lds
        @rm -f $(obj)include/bmp_logo.h
        @rm -f $(obj)nand_spl/u-boot-spl $(obj)nand_spl/u-boot-spl.map
 +      @rm -f $(obj)onenand_ipl/onenand-ipl $(obj)onenand_ipl/onenand-ipl.bin \
 +              $(obj)onenand_ipl/onenand-ipl-2k.bin $(obj)onenand_ipl/onenand-ipl.map
        @rm -f $(obj)api_examples/demo $(VERSION_FILE)
  
  clobber:      clean
        @rm -f $(obj)tools/inca-swap-bytes $(obj)cpu/mpc824x/bedbug_603e.c
        @rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
        @[ ! -d $(obj)nand_spl ] || find $(obj)nand_spl -lname "*" -print | xargs rm -f
 +      @[ ! -d $(obj)onenand_ipl ] || find $(obj)onenand_ipl -lname "*" -print | xargs rm -f
        @[ ! -d $(obj)api_examples ] || find $(obj)api_examples -lname "*" -print | xargs rm -f
  
  ifeq ($(OBJTREE),$(SRCTREE))
diff --combined README
index b4966a0df669949a2cd15f1139598bedfd0b2e9c,d4afcfafea74c8d6bcf2f7253d77f169d1e4eb84..491397affc14cc37ff5460c9a9cd3adb08e0f862
--- 1/README
--- 2/README
+++ b/README
@@@ -3499,7 -3499,7 +3499,7 @@@ GCC's implementation
  
  For PowerPC, the following registers have specific use:
        R1:     stack pointer
 -      R2:     TOC pointer
 +      R2:     reserved for system use
        R3-R4:  parameter passing and return values
        R5-R10: parameter passing
        R13:    small data area pointer
  
        (U-Boot also uses R14 as internal GOT pointer.)
  
 -    ==> U-Boot will use R29 to hold a pointer to the global data
 +    ==> U-Boot will use R2 to hold a pointer to the global data
  
      Note: on PPC, we could use a static initializer (since the
      address of the global data structure is known at compile time),
      average for all boards 752 bytes for the whole U-Boot image,
      624 text + 127 data).
  
+ On Blackfin, the normal C ABI (except for P5) is followed as documented here:
+       http://docs.blackfin.uclinux.org/doku.php?id=application_binary_interface
+     ==> U-Boot will use P5 to hold a pointer to the global data
  On ARM, the following registers are used:
  
        R0:     function argument word/integer result
diff --combined common/cmd_bdinfo.c
index 4e7746120b95817cbbe75fde8d3453921608571f,3a4dbcf6bd2bd39d4812fa7761479b7177034272..bbb01921df1df7bdc4e9710866b5afb0872220de
@@@ -273,6 -273,37 +273,37 @@@ int do_bdinfo ( cmd_tbl_t *cmdtp, int f
        return 0;
  }
  
+ #elif defined(CONFIG_BLACKFIN)
+ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+ {
+       int i;
+       bd_t *bd = gd->bd;
+       printf("U-Boot      = %s\n", bd->bi_r_version);
+       printf("CPU         = %s\n", bd->bi_cpu);
+       printf("Board       = %s\n", bd->bi_board_name);
+       printf("VCO         = %lu MHz\n", bd->bi_vco / 1000000);
+       printf("CCLK        = %lu MHz\n", bd->bi_cclk / 1000000);
+       printf("SCLK        = %lu MHz\n", bd->bi_sclk / 1000000);
+       print_num("boot_params", (ulong)bd->bi_boot_params);
+       print_num("memstart",    (ulong)bd->bi_memstart);
+       print_num("memsize",     (ulong)bd->bi_memsize);
+       print_num("flashstart",  (ulong)bd->bi_flashstart);
+       print_num("flashsize",   (ulong)bd->bi_flashsize);
+       print_num("flashoffset", (ulong)bd->bi_flashoffset);
+       puts("ethaddr     =");
+       for (i = 0; i < 6; ++i)
+               printf("%c%02X", i ? ':' : ' ', bd->bi_enetaddr[i]);
+       puts("\nip_addr     = ");
+       print_IPaddr(bd->bi_ip_addr);
+       printf("\nbaudrate    = %d bps\n", bd->bi_baudrate);
+       return 0;
+ }
  #else /* ! PPC, which leaves MIPS */
  
  int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@@ -316,7 -347,6 +347,7 @@@ int do_bdinfo ( cmd_tbl_t *cmdtp, int f
                print_num("-> size",    bd->bi_dram[i].size);
        }
  
 +#if defined(CONFIG_CMD_NET)
        puts ("ethaddr     =");
        for (i=0; i<6; ++i) {
                printf ("%c%02X", i ? ':' : ' ', bd->bi_enetaddr[i]);
        puts  ( "\n"
                "ip_addr     = ");
        print_IPaddr (bd->bi_ip_addr);
 +#endif
        printf ("\n"
                "baudrate    = %d bps\n", bd->bi_baudrate);
  
diff --combined common/cmd_mem.c
index 5fce773a9b64735b7f4087bf52f47b61b77ffce5,d080810ecaaa9b2aacbf66d374e3239c8aebf418..000107f726e9b31bec51ad6186232a4fb19e4ea2
@@@ -154,9 -154,32 +154,32 @@@ int do_mem_md ( cmd_tbl_t *cmdtp, int f
                }
        } while (nbytes > 0);
  #else
-       /* Print the lines. */
-       print_buffer(addr, (void*)addr, size, length, DISP_LINE_LEN/size);
-       addr += size*length;
+ # if defined(CONFIG_BLACKFIN)
+       /* See if we're trying to display L1 inst */
+       if (addr_bfin_on_chip_mem(addr)) {
+               char linebuf[DISP_LINE_LEN];
+               ulong linebytes, nbytes = length * size;
+               do {
+                       linebytes = (nbytes > DISP_LINE_LEN) ? DISP_LINE_LEN : nbytes;
+                       memcpy(linebuf, (void *)addr, linebytes);
+                       print_buffer(addr, linebuf, size, linebytes/size, DISP_LINE_LEN/size);
+                       nbytes -= linebytes;
+                       addr += linebytes;
+                       if (ctrlc()) {
+                               rc = 1;
+                               break;
+                       }
+               } while (nbytes > 0);
+       } else
+ # endif
+       {
+               /* Print the lines. */
+               print_buffer(addr, (void*)addr, size, length, DISP_LINE_LEN/size);
+               addr += size*length;
+       }
  #endif
  
        dp_last_addr = addr;
@@@ -308,6 -331,13 +331,13 @@@ int do_mem_cmp (cmd_tbl_t *cmdtp, int f
        }
  #endif
  
+ #ifdef CONFIG_BLACKFIN
+       if (addr_bfin_on_chip_mem(addr1) || addr_bfin_on_chip_mem(addr2)) {
+               puts ("Comparison with L1 instruction memory not supported.\n\r");
+               return 0;
+       }
+ #endif
        ngood = 0;
  
        while (count-- > 0) {
@@@ -478,6 -508,14 +508,14 @@@ int do_mem_cp ( cmd_tbl_t *cmdtp, int f
        }
  #endif
  
+ #ifdef CONFIG_BLACKFIN
+       /* See if we're copying to/from L1 inst */
+       if (addr_bfin_on_chip_mem(dest) || addr_bfin_on_chip_mem(addr)) {
+               memcpy((void *)dest, (void *)addr, count * size);
+               return 0;
+       }
+ #endif
        while (count-- > 0) {
                if (size == 4)
                        *((ulong  *)dest) = *((ulong  *)addr);
@@@ -659,7 -697,6 +697,7 @@@ int do_mem_mtest (cmd_tbl_t *cmdtp, in
        vu_long *addr, *start, *end;
        ulong   val;
        ulong   readback;
 +      int     rcode = 0;
  
  #if defined(CFG_ALT_MEMTEST)
        vu_long addr_mask;
  #else
        ulong   incr;
        ulong   pattern;
 -      int     rcode = 0;
  #endif
  
        if (argc > 1) {
                }
                incr = -incr;
        }
 -      return rcode;
  #endif
 +      return rcode;
  }
  
  
@@@ -1006,6 -1044,13 +1044,13 @@@ mod_mem(cmd_tbl_t *cmdtp, int incrflag
        }
  #endif
  
+ #ifdef CONFIG_BLACKFIN
+       if (addr_bfin_on_chip_mem(addr)) {
+               puts ("Can't modify L1 instruction in place. Use cp instead.\n\r");
+               return 0;
+       }
+ #endif
        /* Print the address, followed by value.  Then accept input for
         * the next value.  A non-converted value exits.
         */
diff --combined config.mk
index bff95bde0f8a7731d74ebfc25c0af90dc037887e,f4312ede6a657ace98bc50307a63daf9c69921f8..ee057b5c735ff11049d00820dcc98c892b9a0fde
+++ b/config.mk
@@@ -121,6 -121,7 +121,7 @@@ CC = $(CROSS_COMPILE)gc
  CPP   = $(CC) -E
  AR    = $(CROSS_COMPILE)ar
  NM    = $(CROSS_COMPILE)nm
+ LDR   = $(CROSS_COMPILE)ldr
  STRIP = $(CROSS_COMPILE)strip
  OBJCOPY = $(CROSS_COMPILE)objcopy
  OBJDUMP = $(CROSS_COMPILE)objdump
@@@ -147,10 -148,7 +148,10 @@@ OBJCFLAGS += --gap-fill=0xf
  gccincdir := $(shell $(CC) -print-file-name=include)
  
  CPPFLAGS := $(DBGFLAGS) $(OPTFLAGS) $(RELFLAGS)               \
 -      -D__KERNEL__ -DTEXT_BASE=$(TEXT_BASE)           \
 +      -D__KERNEL__
 +ifneq ($(TEXT_BASE),)
 +CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)
 +endif
  
  ifneq ($(OBJTREE),$(SRCTREE))
  CPPFLAGS += -I$(OBJTREE)/include2 -I$(OBJTREE)/include
@@@ -188,10 -186,7 +189,10 @@@ endi
  
  AFLAGS := $(AFLAGS_DEBUG) -D__ASSEMBLY__ $(CPPFLAGS)
  
 -LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)
 +LDFLAGS += -Bstatic -T $(LDSCRIPT) $(PLATFORM_LDFLAGS)
 +ifneq ($(TEXT_BASE),)
 +LDFLAGS += -Ttext $(TEXT_BASE)
 +endif
  
  # Location of a usable BFD library, where we define "usable" as
  # "built for ${HOST}, supports ${TARGET}".  Sensible values are
diff --combined doc/README.standalone
index f9237a65f573a529c62b23769978f5c2dbdcb467,3495f54f588474b1194a6f4da33f671caea6028b..81b949a0aaad4ccdf9d1115add30dc27b9fb6abe
@@@ -19,11 -19,11 +19,12 @@@ Design Notes on Exporting U-Boot Functi
     thus the compiler cannot perform type checks on these assignments.
  
  2. The pointer to the jump table is passed to the application in a
-    machine-dependent way. PowerPC, ARM and MIPS architectures use a
-    dedicated register to hold the pointer to the 'global_data'
-    structure: r2 on PowerPC, r8 on ARM and k0 on MIPS. The x86
-    architecture does not use such a register; instead, the pointer to
-    the 'global_data' structure is passed as 'argv[-1]' pointer.
+    machine-dependent way. PowerPC, ARM, MIPS and Blackfin architectures
+    use a dedicated register to hold the pointer to the 'global_data'
 -   structure: r29 on PowerPC, r8 on ARM, k0 on MIPS, and P5 on Blackfin.
 -   The x86 architecture does not use such a register; instead, the pointer
 -   to the 'global_data' structure is passed as 'argv[-1]' pointer.
++   structure: r2 on PowerPC, r8 on ARM, k0 on MIPS, and P5 on Blackfin.
++   The x86 architecture does not use such a register; instead, the
++   pointer to the 'global_data' structure is passed as 'argv[-1]'
++   pointer.
  
     The application can access the 'global_data' structure in the same
     way as U-Boot does:
  4. The default load and start addresses of the applications are as
     follows:
  
-               Load address    Start address
-       x86     0x00040000      0x00040000
-       PowerPC 0x00040000      0x00040004
-       ARM     0x0c100000      0x0c100000
-       MIPS    0x80200000      0x80200000
+                       Load address    Start address
+       x86             0x00040000      0x00040000
+       PowerPC         0x00040000      0x00040004
+       ARM             0x0c100000      0x0c100000
+       MIPS            0x80200000      0x80200000
+       Blackfin        0x00001000      0x00001000
  
     For example, the "hello world" application may be loaded and
     executed on a PowerPC board with the following commands:
diff --combined include/common.h
index 13428b301d0f9e720ad41497625460dd8298c72b,e513ab345a81c1f7a0f4832ddb5542aaca35ac9a..93e3f7a0656379f6b2ce8c5c9086274e3b97a783
@@@ -103,6 -103,9 +103,9 @@@ typedef volatile unsigned char     vu_char
  #ifdef CONFIG_ARM
  #define asmlinkage    /* nothing */
  #endif
+ #ifdef CONFIG_BLACKFIN
+ #include <asm/blackfin.h>
+ #endif
  
  #include <part.h>
  #include <flash.h>
@@@ -203,8 -206,8 +206,8 @@@ void       init_cmd_timeout(void)
  void  reset_cmd_timeout(void);
  
  /* lib_$(ARCH)/board.c */
 -void  board_init_f  (ulong);
 -void  board_init_r  (gd_t *, ulong);
 +void  board_init_f  (ulong) __attribute__ ((noreturn));
 +void  board_init_r  (gd_t *, ulong) __attribute__ ((noreturn));
  int   checkboard    (void);
  int   checkflash    (void);
  int   checkdram     (void);
@@@ -479,8 -482,6 +482,8 @@@ ulong      get_OPB_freq (void)
  ulong get_PCI_freq (void);
  #endif
  #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_LH7A40X)
 +void  s3c2410_irq(void);
 +#define ARM920_IRQ_CALLBACK s3c2410_irq
  ulong get_FCLK (void);
  ulong get_HCLK (void);
  ulong get_PCLK (void);
@@@ -665,6 -666,4 +668,6 @@@ void inline show_boot_progress (int val
  #error Read section CONFIG_SKIP_LOWLEVEL_INIT in README.
  #endif
  
 +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
 +
  #endif        /* __COMMON_H_ */