]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'u-boot-imx/master' into 'u-boot-arm/master'
authorAlbert ARIBAUD <albert.u.boot@aribaud.net>
Thu, 5 Sep 2013 09:15:26 +0000 (11:15 +0200)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Thu, 5 Sep 2013 09:15:26 +0000 (11:15 +0200)
Conflicts:
drivers/serial/serial.c

The conflict above was a trivial case of adding one init
function in each branch, and manually resolved in merge.

1  2 
boards.cfg
config.mk
drivers/serial/serial.c
tools/Makefile
tools/imximage.c

diff --combined boards.cfg
index 91e307200d89bc2d150afa3310947f6d7420451d,79d6cd88cd73d4d5accbc9a1449559113d842ff2..48aa0bf1021258dd22e1fecc27a277dcae96306a
@@@ -140,7 -140,6 +140,7 @@@ pm9g45                       ar
  portuxg20                    arm         arm926ejs   stamp9g20           taskit         at91        stamp9g20:AT91SAM9G20,PORTUXG20
  stamp9g20                    arm         arm926ejs   stamp9g20           taskit         at91        stamp9g20:AT91SAM9G20
  cam_enc_4xx                  arm         arm926ejs   cam_enc_4xx         ait            davinci     cam_enc_4xx
 +ipam390                      arm         arm926ejs   ipam390             Barix          davinci
  da830evm                     arm         arm926ejs   da8xxevm            davinci        davinci
  da850_am18xxevm              arm         arm926ejs   da8xxevm            davinci        davinci     da850evm:DA850_AM18X_EVM,MAC_ADDR_IN_EEPROM,SYS_I2C_EEPROM_ADDR_LEN=2,SYS_I2C_EEPROM_ADDR=0x50
  da850evm                     arm         arm926ejs   da8xxevm            davinci        davinci     da850evm:MAC_ADDR_IN_SPIFLASH
@@@ -204,6 -203,7 +204,7 @@@ mx23evk                      ar
  m28evk                       arm         arm926ejs   m28evk              denx           mxs           m28evk
  mx28evk                      arm         arm926ejs   mx28evk             freescale      mxs           mx28evk:ENV_IS_IN_MMC
  mx28evk_nand                 arm         arm926ejs   mx28evk             freescale      mxs           mx28evk:ENV_IS_IN_NAND
+ mx28evk_auart_console        arm         arm926ejs   mx28evk             freescale      mxs           mx28evk:MXS_AUART,MXS_AUART_BASE=MXS_UARTAPP3_BASE,ENV_IS_IN_MMC
  sc_sps_1                     arm         arm926ejs   sc_sps_1            schulercontrol mxs
  nhk8815                      arm         arm926ejs   nhk8815             st             nomadik
  nhk8815_onenand              arm         arm926ejs   nhk8815             st             nomadik       nhk8815:BOOT_ONENAND
@@@ -253,12 -253,7 +254,12 @@@ am335x_evm_uart4             ar
  am335x_evm_uart5             arm         armv7       am335x              ti             am33xx      am335x_evm:SERIAL6,CONS_INDEX=1,NAND
  am335x_evm_usbspl            arm         armv7       am335x              ti             am33xx      am335x_evm:SERIAL1,CONS_INDEX=1,NAND,SPL_USBETH_SUPPORT
  am335x_boneblack             arm         armv7       am335x              ti             am33xx      am335x_evm:SERIAL1,CONS_INDEX=1,EMMC_BOOT
 +am43xx_evm                   arm         armv7       am43xx              ti             am33xx      am43xx_evm:SERIAL1,CONS_INDEX=1
 +dxr2                         arm         armv7       dxr2                siemens        am33xx
 +pxm2                         arm         armv7       pxm2                siemens        am33xx
 +rut                          arm         armv7       rut                 siemens        am33xx
  ti814x_evm                   arm         armv7       ti814x              ti             am33xx
 +ti816x_evm                   arm         armv7       ti816x              ti             am33xx
  pcm051                       arm         armv7       pcm051              phytec         am33xx      pcm051
  sama5d3xek_mmc               arm         armv7       sama5d3xek          atmel          at91        sama5d3xek:SAMA5D3,SYS_USE_MMC
  sama5d3xek_nandflash         arm         armv7       sama5d3xek          atmel          at91        sama5d3xek:SAMA5D3,SYS_USE_NANDFLASH
@@@ -784,8 -779,6 +785,8 @@@ MPC8569MDS_NAND              powerp
  MPC8572DS                    powerpc     mpc85xx     mpc8572ds           freescale      -           MPC8572DS
  MPC8572DS_36BIT              powerpc     mpc85xx     mpc8572ds           freescale      -           MPC8572DS:36BIT
  MPC8572DS_NAND               powerpc     mpc85xx     mpc8572ds           freescale      -           MPC8572DS:NAND
 +C29XPCIE                     powerpc     mpc85xx     c29xpcie            freescale      -           C29XPCIE:C29XPCIE,36BIT
 +C29XPCIE_SPIFLASH            powerpc     mpc85xx     c29xpcie            freescale      -           C29XPCIE:C29XPCIE,36BIT,SPIFLASH
  P1010RDB_36BIT_NAND          powerpc     mpc85xx     p1010rdb            freescale      -           P1010RDB:P1010RDB,36BIT,NAND
  P1010RDB_36BIT_NAND_SECBOOT  powerpc     mpc85xx     p1010rdb            freescale      -           P1010RDB:P1010RDB,36BIT,NAND_SECBOOT,SECURE_BOOT
  P1010RDB_36BIT_NOR           powerpc     mpc85xx     p1010rdb            freescale      -           P1010RDB:P1010RDB,36BIT
@@@ -816,20 -809,16 +817,20 @@@ P1020RDB_36BIT               powerp
  P1020RDB_36BIT_SDCARD        powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P1020RDB,36BIT,SDCARD
  P1020RDB_36BIT_SPIFLASH      powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P1020RDB,36BIT,SPIFLASH
  P1020RDB_NAND                powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P1020RDB,NAND
 -P1020RDB-PC                  powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB
 -P1020RDB-PC_36BIT            powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,36BIT
 -P1020RDB-PC_36BIT_NAND       powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,36BIT,NAND
 -P1020RDB-PC_36BIT_SDCARD     powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,36BIT,SDCARD
 -P1020RDB-PC_36BIT_SPIFLASH   powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,36BIT,SPIFLASH
 -P1020RDB-PC_NAND             powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,NAND
 -P1020RDB-PC_SDCARD           powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,SDCARD
 -P1020RDB-PC_SPIFLASH         powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,SPIFLASH
 +P1020RDB-PC                  powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC
 +P1020RDB-PC_36BIT            powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,36BIT
 +P1020RDB-PC_36BIT_NAND       powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,36BIT,NAND
 +P1020RDB-PC_36BIT_SDCARD     powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,36BIT,SDCARD
 +P1020RDB-PC_36BIT_SPIFLASH   powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,36BIT,SPIFLASH
 +P1020RDB-PC_NAND             powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,NAND
 +P1020RDB-PC_SDCARD           powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,SDCARD
 +P1020RDB-PC_SPIFLASH         powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,SPIFLASH
  P1020RDB_SDCARD              powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P1020RDB,SDCARD
  P1020RDB_SPIFLASH            powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P1020RDB,SPIFLASH
 +P1020RDB-PD                  powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PD
 +P1020RDB-PD_NAND             powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PD,NAND
 +P1020RDB-PD_SDCARD           powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PD,SDCARD
 +P1020RDB-PD_SPIFLASH         powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PD,SPIFLASH
  P1020UTM-PC                  powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020UTM
  P1020UTM-PC_36BIT            powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020UTM,36BIT
  P1020UTM-PC_36BIT_SDCARD     powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020UTM,36BIT,SDCARD
@@@ -863,7 -852,6 +864,7 @@@ P1025RDB_36BIT               powerp
  P1025RDB_NAND                powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1025RDB,NAND
  P1025RDB_SDCARD              powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1025RDB,SDCARD
  P1025RDB_SPIFLASH            powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1025RDB,SPIFLASH
 +TWR-P1025                    powerpc     mpc85xx     p1_twr              freescale      -           p1_twr:TWR_P1025
  P2010RDB                     powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P2010RDB
  P2010RDB_36BIT               powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P2010RDB,36BIT
  P2010RDB_36BIT_SDCARD        powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P2010RDB,36BIT,SDCARD
@@@ -940,7 -928,6 +941,7 @@@ stxgp3                       powerp
  stxssa                       powerpc     mpc85xx     stxssa              stx            -           stxssa
  stxssa_4M                    powerpc     mpc85xx     stxssa              stx            -           stxssa:STXSSA_4M
  T4240QDS                     powerpc     mpc85xx     t4qds               freescale      -           T4240QDS:PPC_T4240
 +T4240EMU                     powerpc     mpc85xx     t4qds               freescale      -           T4240EMU:PPC_T4240
  T4240QDS_SDCARD              powerpc     mpc85xx     t4qds               freescale    -           T4240QDS:PPC_T4240,RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
  T4240QDS_SPIFLASH            powerpc     mpc85xx     t4qds               freescale    -           T4240QDS:PPC_T4240,RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
  T4240QDS_SRIO_PCIE_BOOT            powerpc     mpc85xx     t4qds               freescale      -           T4240QDS:PPC_T4240,SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF80000
@@@ -1125,6 -1112,7 +1126,6 @@@ PPChameleonEVB_ME_33         powerp
  APC405                       powerpc     ppc4xx      apc405              esd
  AR405                        powerpc     ppc4xx      ar405               esd
  ASH405                       powerpc     ppc4xx      ash405              esd
 -CANBT                        powerpc     ppc4xx      canbt               esd
  CMS700                       powerpc     ppc4xx      cms700              esd
  CPCI2DP                      powerpc     ppc4xx      cpci2dp             esd
  CPCI405                      powerpc     ppc4xx      cpci405             esd
diff --combined config.mk
index b3ecaa7f80abcc62beb81da2b44be1dc585c3a88,3b92f568eeb00ba5cf41e084351e584dfa3c1f44..39b20baf0857755ce86a4f96c44ff2165f1a1978
+++ b/config.mk
@@@ -13,12 -13,6 +13,12 @@@ SHELL := $(shell if [ -x "$$BASH" ]; th
  
  export        SHELL
  
 +ifeq ($(CONFIG_TPL_BUILD),y)
 +SPL_BIN := u-boot-tpl
 +else
 +SPL_BIN := u-boot-spl
 +endif
 +
  ifeq ($(CURDIR),$(SRCTREE))
  dir :=
  else
@@@ -28,11 -22,7 +28,11 @@@ endi
  ifneq ($(OBJTREE),$(SRCTREE))
  # Create object files for SPL in a separate directory
  ifeq ($(CONFIG_SPL_BUILD),y)
 +ifeq ($(CONFIG_TPL_BUILD),y)
 +obj := $(if $(dir),$(TPLTREE)/$(dir)/,$(TPLTREE)/)
 +else
  obj := $(if $(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/)
 +endif
  else
  obj := $(if $(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/)
  endif
@@@ -42,12 -32,8 +42,12 @@@ $(shell mkdir -p $(obj)
  else
  # Create object files for SPL in a separate directory
  ifeq ($(CONFIG_SPL_BUILD),y)
 +ifeq ($(CONFIG_TPL_BUILD),y)
 +obj := $(if $(dir),$(TPLTREE)/$(dir)/,$(TPLTREE)/)
 +else
  obj := $(if $(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/)
  
 +endif
  $(shell mkdir -p $(obj))
  else
  obj :=
@@@ -133,7 -119,6 +133,7 @@@ endi
  # Usage gcc-ver := $(call cc-version)
  cc-version = $(shell $(SHELL) $(SRCTREE)/tools/gcc-version.sh $(CC))
  binutils-version = $(shell $(SHELL) $(SRCTREE)/tools/binutils-version.sh $(AS))
 +dtc-version = $(shell $(SHELL) $(SRCTREE)/tools/dtc-version.sh $(DTC))
  
  #
  # Include the make variables (CC, etc...)
@@@ -159,18 -144,7 +159,18 @@@ CHECK    = spars
  #########################################################################
  
  # Load generated board configuration
 +ifeq ($(CONFIG_TPL_BUILD),y)
 +# Include TPL autoconf
 +sinclude $(OBJTREE)/include/tpl-autoconf.mk
 +else
 +ifeq ($(CONFIG_SPL_BUILD),y)
 +# Include SPL autoconf
 +sinclude $(OBJTREE)/include/spl-autoconf.mk
 +else
 +# Include normal autoconf
  sinclude $(OBJTREE)/include/autoconf.mk
 +endif
 +endif
  sinclude $(OBJTREE)/include/config.mk
  
  # Some architecture config.mk files need to know what CPUDIR is set to,
@@@ -220,6 -194,15 +220,15 @@@ LDFLAGS_FINAL += --gc-section
  endif
  
  # TODO(sjg@chromium.org): Is this correct on Mac OS?
+ # MXSImage needs LibSSL
+ ifneq ($(CONFIG_MX23)$(CONFIG_MX28),)
+ HOSTLIBS      += -lssl -lcrypto
+ # Add CONFIG_MXS into host CFLAGS, so we can check whether or not register
+ # the mxsimage support within tools/mxsimage.c .
+ HOSTCFLAGS    += -DCONFIG_MXS
+ endif
  ifdef CONFIG_FIT_SIGNATURE
  HOSTLIBS      += -lssl -lcrypto
  
@@@ -240,19 -223,12 +249,19 @@@ ifneq ($(CONFIG_SPL_PAD_TO),
  CPPFLAGS += -DCONFIG_SPL_PAD_TO=$(CONFIG_SPL_PAD_TO)
  endif
  
 +ifneq ($(CONFIG_TPL_PAD_TO),)
 +CPPFLAGS += -DCONFIG_TPL_PAD_TO=$(CONFIG_TPL_PAD_TO)
 +endif
 +
  ifneq ($(CONFIG_UBOOT_PAD_TO),)
  CPPFLAGS += -DCONFIG_UBOOT_PAD_TO=$(CONFIG_UBOOT_PAD_TO)
  endif
  
  ifeq ($(CONFIG_SPL_BUILD),y)
  CPPFLAGS += -DCONFIG_SPL_BUILD
 +ifeq ($(CONFIG_TPL_BUILD),y)
 +CPPFLAGS += -DCONFIG_TPL_BUILD
 +endif
  endif
  
  # Does this architecture support generic board init?
@@@ -324,9 -300,9 +333,9 @@@ ifneq ($(CONFIG_SYS_TEXT_BASE),
  LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
  endif
  
 -LDFLAGS_u-boot-spl += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL)
 +LDFLAGS_$(SPL_BIN) += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL)
  ifneq ($(CONFIG_SPL_TEXT_BASE),)
 -LDFLAGS_u-boot-spl += -Ttext $(CONFIG_SPL_TEXT_BASE)
 +LDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_SPL_TEXT_BASE)
  endif
  
  # Linus' kernel sanity checking tool
diff --combined drivers/serial/serial.c
index 118fbc305ca721ae980f8a6cf22d078d35c9df1c,336ff357211908161f341107d1817ef40ed9400b..35dc61e020c04b5e0efc37df211e28fff8f2a67d
@@@ -159,7 -159,7 +159,8 @@@ serial_initfunc(pl01x_serial_initialize
  serial_initfunc(s3c44b0_serial_initialize);
  serial_initfunc(sa1100_serial_initialize);
  serial_initfunc(sh_serial_initialize);
 +serial_initfunc(arm_dcc_initialize);
+ serial_initfunc(mxs_auart_initialize);
  
  /**
   * serial_register() - Register serial driver with serial driver core
@@@ -252,7 -252,7 +253,8 @@@ void serial_initialize(void
        s3c44b0_serial_initialize();
        sa1100_serial_initialize();
        sh_serial_initialize();
 +      arm_dcc_initialize();
+       mxs_auart_initialize();
  
        serial_assign(default_serial_console()->name);
  }
diff --combined tools/Makefile
index 6d456564a11d73673662ea148a9c110d246414d3,f4ca1cf3bcb989dcb5a8b2702f1aa522f1f90852..0a29147847451be688fbaa041ecabc000c0eb37a
@@@ -70,31 -70,32 +70,32 @@@ EXT_OBJ_FILES-y += lib/md5.
  EXT_OBJ_FILES-y += lib/sha1.o
  
  # Source files located in the tools directory
- OBJ_FILES-$(CONFIG_LCD_LOGO) += bmp_logo.o
- OBJ_FILES-$(CONFIG_VIDEO_LOGO) += bmp_logo.o
+ NOPED_OBJ_FILES-y += aisimage.o
  NOPED_OBJ_FILES-y += default_image.o
- NOPED_OBJ_FILES-y += proftool.o
- OBJ_FILES-$(CONFIG_BUILD_ENVCRC) += envcrc.o
  NOPED_OBJ_FILES-y += fit_image.o
- OBJ_FILES-$(CONFIG_CMD_NET) += gen_eth_addr.o
- OBJ_FILES-$(CONFIG_CMD_LOADS) += img2srec.o
- OBJ_FILES-$(CONFIG_XWAY_SWAP_BYTES) += xway-swap-bytes.o
- NOPED_OBJ_FILES-y += aisimage.o
- NOPED_OBJ_FILES-y += kwbimage.o
- NOPED_OBJ_FILES-y += pblimage.o
- NOPED_OBJ_FILES-y += imximage.o
  NOPED_OBJ_FILES-y += image-host.o
- NOPED_OBJ_FILES-y += omapimage.o
+ NOPED_OBJ_FILES-y += imximage.o
+ NOPED_OBJ_FILES-y += kwbimage.o
  NOPED_OBJ_FILES-y += mkenvimage.o
  NOPED_OBJ_FILES-y += mkimage.o
- OBJ_FILES-$(CONFIG_SMDK5250) += mkexynosspl.o
+ NOPED_OBJ_FILES-y += mxsimage.o
+ NOPED_OBJ_FILES-y += omapimage.o
+ NOPED_OBJ_FILES-y += os_support.o
+ NOPED_OBJ_FILES-y += pblimage.o
+ NOPED_OBJ_FILES-y += proftool.o
+ NOPED_OBJ_FILES-y += ublimage.o
+ OBJ_FILES-$(CONFIG_BUILD_ENVCRC) += envcrc.o
+ OBJ_FILES-$(CONFIG_CMD_LOADS) += img2srec.o
+ OBJ_FILES-$(CONFIG_CMD_NET) += gen_eth_addr.o
+ OBJ_FILES-$(CONFIG_KIRKWOOD) += kwboot.o
+ OBJ_FILES-$(CONFIG_LCD_LOGO) += bmp_logo.o
  OBJ_FILES-$(CONFIG_MX23) += mxsboot.o
  OBJ_FILES-$(CONFIG_MX28) += mxsboot.o
  OBJ_FILES-$(CONFIG_NETCONSOLE) += ncb.o
- NOPED_OBJ_FILES-y += os_support.o
  OBJ_FILES-$(CONFIG_SHA1_CHECK_UB_IMG) += ubsha1.o
- NOPED_OBJ_FILES-y += ublimage.o
- OBJ_FILES-$(CONFIG_KIRKWOOD) += kwboot.o
+ OBJ_FILES-$(CONFIG_SMDK5250) += mkexynosspl.o
+ OBJ_FILES-$(CONFIG_VIDEO_LOGO) += bmp_logo.o
+ OBJ_FILES-$(CONFIG_XWAY_SWAP_BYTES) += xway-swap-bytes.o
  
  # Don't build by default
  #ifeq ($(ARCH),ppc)
@@@ -154,7 -155,6 +155,7 @@@ NOPEDOBJS := $(addprefix $(obj),$(NOPED
  #
  # Use native tools and options
  # Define __KERNEL_STRICT_NAMES to prevent typedef overlaps
 +# Define _GNU_SOURCE to obtain the getline prototype from stdio.h
  #
  HOSTCPPFLAGS =        -include $(SRCTREE)/include/libfdt_env.h \
                -idirafter $(SRCTREE)/include \
                -I $(SRCTREE)/tools \
                -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE) \
                -DUSE_HOSTCC \
 -              -D__KERNEL_STRICT_NAMES
 +              -D__KERNEL_STRICT_NAMES \
 +              -D_GNU_SOURCE
  
  
  all:  $(obj).depend $(BINS) $(LOGO-y) subdirs
@@@ -203,20 -202,21 +204,21 @@@ $(obj)mkenvimage$(SFX): $(obj)crc32.o $
        $(HOSTSTRIP) $@
  
  $(obj)mkimage$(SFX):  $(obj)aisimage.o \
+                       $(FIT_SIG_OBJS) \
                        $(obj)crc32.o \
                        $(obj)default_image.o \
                        $(obj)fit_image.o \
                        $(obj)image-fit.o \
-                       $(obj)image.o \
                        $(obj)image-host.o \
-                       $(FIT_SIG_OBJS) \
+                       $(obj)image.o \
                        $(obj)imximage.o \
                        $(obj)kwbimage.o \
-                       $(obj)pblimage.o \
                        $(obj)md5.o \
                        $(obj)mkimage.o \
-                       $(obj)os_support.o \
+                       $(obj)mxsimage.o \
                        $(obj)omapimage.o \
+                       $(obj)os_support.o \
+                       $(obj)pblimage.o \
                        $(obj)sha1.o \
                        $(obj)ublimage.o \
                        $(LIBFDT_OBJS) \
diff --combined tools/imximage.c
index cab208b5ac889f5e5235e1ca79dc5c9c2c82f205,3f2dc68eb3b3ee3a4bf90343130e61b21d1c64d3..c87669b985d4c4b95d531b5899b013fa44bf4997
@@@ -9,10 -9,15 +9,12 @@@
   * SPDX-License-Identifier:   GPL-2.0+ 
   */
  
 -/* Required to obtain the getline prototype from stdio.h */
 -#define _GNU_SOURCE
 -
  #include "mkimage.h"
  #include <image.h>
  #include "imximage.h"
  
+ #define UNDEFINED 0xFFFFFFFF
  /*
   * Supported commands for configuration file
   */
@@@ -20,6 -25,7 +22,7 @@@ static table_entry_t imximage_cmds[] = 
        {CMD_BOOT_FROM,         "BOOT_FROM",            "boot command",   },
        {CMD_BOOT_OFFSET,       "BOOT_OFFSET",          "Boot offset",    },
        {CMD_DATA,              "DATA",                 "Reg Write Data", },
+       {CMD_CSF,               "CSF",           "Command Sequence File", },
        {CMD_IMAGE_VERSION,     "IMAGE_VERSION",        "image version",  },
        {-1,                    "",                     "",               },
  };
@@@ -28,7 -34,7 +31,7 @@@
   * Supported Boot options for configuration file
   * this is needed to set the correct flash offset
   */
- static table_entry_t imximage_bootops[] = {
+ static table_entry_t imximage_boot_offset[] = {
        {FLASH_OFFSET_ONENAND,  "onenand",      "OneNAND Flash",},
        {FLASH_OFFSET_NAND,     "nand",         "NAND Flash",   },
        {FLASH_OFFSET_NOR,      "nor",          "NOR Flash",    },
        {-1,                    "",             "Invalid",      },
  };
  
+ /*
+  * Supported Boot options for configuration file
+  * this is needed to determine the initial load size
+  */
+ static table_entry_t imximage_boot_loadsize[] = {
+       {FLASH_LOADSIZE_ONENAND,        "onenand",      "OneNAND Flash",},
+       {FLASH_LOADSIZE_NAND,           "nand",         "NAND Flash",   },
+       {FLASH_LOADSIZE_NOR,            "nor",          "NOR Flash",    },
+       {FLASH_LOADSIZE_SATA,           "sata",         "SATA Disk",    },
+       {FLASH_LOADSIZE_SD,             "sd",           "SD Card",      },
+       {FLASH_LOADSIZE_SPI,            "spi",          "SPI Flash",    },
+       {-1,                            "",             "Invalid",      },
+ };
  /*
   * IMXIMAGE version definition for i.MX chips
   */
@@@ -49,12 -69,22 +66,22 @@@ static table_entry_t imximage_versions[
  
  static struct imx_header imximage_header;
  static uint32_t imximage_version;
+ /*
+  * Image Vector Table Offset
+  * Initialized to a wrong not 4-bytes aligned address to
+  * check if it is was set by the cfg file.
+  */
+ static uint32_t imximage_ivt_offset = UNDEFINED;
+ static uint32_t imximage_csf_size = UNDEFINED;
+ /* Initial Load Region Size */
+ static uint32_t imximage_init_loadsize;
  
  static set_dcd_val_t set_dcd_val;
  static set_dcd_rst_t set_dcd_rst;
  static set_imx_hdr_t set_imx_hdr;
  static uint32_t max_dcd_entries;
  static uint32_t *header_size_ptr;
+ static uint32_t *csf_ptr;
  
  static uint32_t get_cfg_value(char *token, char *name,  int linenr)
  {
@@@ -190,7 -220,8 +217,8 @@@ static void set_imx_hdr_v1(struct imx_h
        /* Set magic number */
        fhdr_v1->app_code_barker = APP_CODE_BARKER;
  
-       hdr_base = entry_point - sizeof(struct imx_header);
+       /* TODO: check i.MX image V1 handling, for now use 'old' style */
+       hdr_base = entry_point - 4096;
        fhdr_v1->app_dest_ptr = hdr_base - flash_offset;
        fhdr_v1->app_code_jump_vector = entry_point;
  
@@@ -217,16 -248,18 +245,18 @@@ static void set_imx_hdr_v2(struct imx_h
  
        fhdr_v2->entry = entry_point;
        fhdr_v2->reserved1 = fhdr_v2->reserved2 = 0;
-       fhdr_v2->self = hdr_base = entry_point - sizeof(struct imx_header);
+       hdr_base = entry_point - imximage_init_loadsize +
+               flash_offset;
+       fhdr_v2->self = hdr_base;
        fhdr_v2->dcd_ptr = hdr_base + offsetof(imx_header_v2_t, dcd_table);
        fhdr_v2->boot_data_ptr = hdr_base
                        + offsetof(imx_header_v2_t, boot_data);
-       hdr_v2->boot_data.start = hdr_base - flash_offset;
+       hdr_v2->boot_data.start = entry_point - imximage_init_loadsize;
  
-       /* Security feature are not supported */
        fhdr_v2->csf = 0;
        header_size_ptr = &hdr_v2->boot_data.size;
+       csf_ptr = &fhdr_v2->csf;
  }
  
  static void set_hdr_func(struct imx_header *imxhdr)
@@@ -303,6 -336,13 +333,13 @@@ static void print_hdr_v2(struct imx_hea
        genimg_print_size(hdr_v2->boot_data.size);
        printf("Load Address: %08x\n", (uint32_t)fhdr_v2->boot_data_ptr);
        printf("Entry Point:  %08x\n", (uint32_t)fhdr_v2->entry);
+       if (fhdr_v2->csf && (imximage_ivt_offset != UNDEFINED) &&
+           (imximage_csf_size != UNDEFINED)) {
+               printf("HAB Blocks:   %08x %08x %08x\n",
+                      (uint32_t)fhdr_v2->self, 0,
+                      hdr_v2->boot_data.size - imximage_ivt_offset -
+                      imximage_csf_size);
+       }
  }
  
  static void parse_cfg_cmd(struct imx_header *imxhdr, int32_t cmd, char *token,
                set_hdr_func(imxhdr);
                break;
        case CMD_BOOT_FROM:
-               imxhdr->flash_offset = get_table_entry_id(imximage_bootops,
+               imximage_ivt_offset = get_table_entry_id(imximage_boot_offset,
                                        "imximage boot option", token);
-               if (imxhdr->flash_offset == -1) {
+               if (imximage_ivt_offset == -1) {
                        fprintf(stderr, "Error: %s[%d] -Invalid boot device"
                                "(%s)\n", name, lineno, token);
                        exit(EXIT_FAILURE);
                }
+               imximage_init_loadsize =
+                       get_table_entry_id(imximage_boot_loadsize,
+                                          "imximage boot option", token);
+               if (imximage_init_loadsize == -1) {
+                       fprintf(stderr,
+                               "Error: %s[%d] -Invalid boot device(%s)\n",
+                               name, lineno, token);
+                       exit(EXIT_FAILURE);
+               }
+               /*
+                * The SOC loads from the storage starting at address 0
+                * then ensures that the load size contains the offset
+                */
+               if (imximage_init_loadsize < imximage_ivt_offset)
+                       imximage_init_loadsize = imximage_ivt_offset;
                if (unlikely(cmd_ver_first != 1))
                        cmd_ver_first = 0;
                break;
        case CMD_BOOT_OFFSET:
-               imxhdr->flash_offset = get_cfg_value(token, name, lineno);
+               imximage_ivt_offset = get_cfg_value(token, name, lineno);
                if (unlikely(cmd_ver_first != 1))
                        cmd_ver_first = 0;
                break;
                if (unlikely(cmd_ver_first != 1))
                        cmd_ver_first = 0;
                break;
+       case CMD_CSF:
+               if (imximage_version != 2) {
+                       fprintf(stderr,
+                               "Error: %s[%d] - CSF only supported for VERSION 2(%s)\n",
+                               name, lineno, token);
+                       exit(EXIT_FAILURE);
+               }
+               imximage_csf_size = get_cfg_value(token, name, lineno);
+               if (unlikely(cmd_ver_first != 1))
+                       cmd_ver_first = 0;
+               break;
        }
  }
  
@@@ -405,7 -474,8 +471,8 @@@ static uint32_t parse_cfg_file(struct i
                exit(EXIT_FAILURE);
        }
  
-       /* Very simple parsing, line starting with # are comments
+       /*
+        * Very simple parsing, line starting with # are comments
         * and are dropped
         */
        while ((getline(&line, &len, fd)) > 0) {
        fclose(fd);
  
        /* Exit if there is no BOOT_FROM field specifying the flash_offset */
-       if (imxhdr->flash_offset == FLASH_OFFSET_UNDEFINED) {
+       if (imximage_ivt_offset == FLASH_OFFSET_UNDEFINED) {
                fprintf(stderr, "Error: No BOOT_FROM tag in %s\n", name);
                exit(EXIT_FAILURE);
        }
@@@ -494,14 -564,15 +561,15 @@@ static void imximage_set_header(void *p
         */
        imximage_version = IMXIMAGE_V1;
        /* Be able to detect if the cfg file has no BOOT_FROM tag */
-       imxhdr->flash_offset = FLASH_OFFSET_UNDEFINED;
+       imximage_ivt_offset = FLASH_OFFSET_UNDEFINED;
+       imximage_csf_size = 0;
        set_hdr_func(imxhdr);
  
        /* Parse dcd configuration file */
        dcd_len = parse_cfg_file(imxhdr, params->imagename);
  
        /* Set the imx header */
-       (*set_imx_hdr)(imxhdr, dcd_len, params->ep, imxhdr->flash_offset);
+       (*set_imx_hdr)(imxhdr, dcd_len, params->ep, imximage_ivt_offset);
  
        /*
         * ROM bug alert
         *
         * The remaining fraction of a block bytes would not be loaded!
         */
-       *header_size_ptr = ROUND(sbuf->st_size + imxhdr->flash_offset, 4096);
+       *header_size_ptr = ROUND(sbuf->st_size, 4096);
+       if (csf_ptr && imximage_csf_size) {
+               *csf_ptr = params->ep - imximage_init_loadsize +
+                       *header_size_ptr;
+               *header_size_ptr += imximage_csf_size;
+       }
  }
  
  int imximage_check_params(struct mkimage_params *params)
                (params->xflag) || !(strlen(params->imagename));
  }
  
+ static int imximage_generate(struct mkimage_params *params,
+       struct image_type_params *tparams)
+ {
+       struct imx_header *imxhdr;
+       size_t alloc_len;
+       struct stat sbuf;
+       char *datafile = params->datafile;
+       uint32_t pad_len;
+       memset(&imximage_header, 0, sizeof(imximage_header));
+       /*
+        * In order to not change the old imx cfg file
+        * by adding VERSION command into it, here need
+        * set up function ptr group to V1 by default.
+        */
+       imximage_version = IMXIMAGE_V1;
+       /* Be able to detect if the cfg file has no BOOT_FROM tag */
+       imximage_ivt_offset = FLASH_OFFSET_UNDEFINED;
+       imximage_csf_size = 0;
+       set_hdr_func(imxhdr);
+       /* Parse dcd configuration file */
+       parse_cfg_file(&imximage_header, params->imagename);
+       /* TODO: check i.MX image V1 handling, for now use 'old' style */
+       if (imximage_version == IMXIMAGE_V1) {
+               alloc_len = 4096;
+       } else {
+               if (imximage_init_loadsize < imximage_ivt_offset +
+                       sizeof(imx_header_v2_t))
+                               imximage_init_loadsize = imximage_ivt_offset +
+                                       sizeof(imx_header_v2_t);
+               alloc_len = imximage_init_loadsize - imximage_ivt_offset;
+       }
+       if (alloc_len < sizeof(struct imx_header)) {
+               fprintf(stderr, "%s: header error\n",
+                       params->cmdname);
+               exit(EXIT_FAILURE);
+       }
+       imxhdr = malloc(alloc_len);
+       if (!imxhdr) {
+               fprintf(stderr, "%s: malloc return failure: %s\n",
+                       params->cmdname, strerror(errno));
+               exit(EXIT_FAILURE);
+       }
+       memset(imxhdr, 0, alloc_len);
+       tparams->header_size = alloc_len;
+       tparams->hdr         = imxhdr;
+       /* determine data image file length */
+       if (stat(datafile, &sbuf) < 0) {
+               fprintf(stderr, "%s: Can't stat %s: %s\n",
+                       params->cmdname, datafile, strerror(errno));
+               exit(EXIT_FAILURE);
+       }
+       pad_len = ROUND(sbuf.st_size, 4096) - sbuf.st_size;
+       /* TODO: check i.MX image V1 handling, for now use 'old' style */
+       if (imximage_version == IMXIMAGE_V1)
+               return 0;
+       else
+               return pad_len;
+ }
  /*
   * imximage parameters
   */
  static struct image_type_params imximage_params = {
        .name           = "Freescale i.MX Boot Image support",
-       .header_size    = sizeof(struct imx_header),
-       .hdr            = (void *)&imximage_header,
+       .header_size    = 0,
+       .hdr            = NULL,
        .check_image_type = imximage_check_image_types,
        .verify_header  = imximage_verify_header,
        .print_header   = imximage_print_header,
        .set_header     = imximage_set_header,
        .check_params   = imximage_check_params,
+       .vrec_header    = imximage_generate,
  };
  
  void init_imx_image_type(void)