]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/ibl.git/blobdiff - src/make/makestg2
Adding back support for updating i2c config params
[keystone-rtos/ibl.git] / src / make / makestg2
index 35d3bdce0d4c5475b1f77f5d2c65a86df1e26516..7f21da7764a84974d673a70bd534b2c9d155ca05 100644 (file)
@@ -11,10 +11,30 @@ ifndef IBL_ROOT
        IBL_ROOT=..
 endif
 
-MODULES= main device ethboot nandboot driver hw interp ecc
-CLEAN_MODULES=$(addprefix clean_,$(MODULES))
+CFG_MODULES= main device
+MODULES= ethboot nandboot driver hw interp ecc norboot
 
-TARGETS= c6472 c6474 c6474l c6455 c6457
+# Note that the Hw module is a two stage clean and handled seperately
+CLEAN_MODULES=$(addprefix clean_,$(subst hw,,$(MODULES)))
+CLEAN_MODULES+=$(addprefix clean_,$(CFG_MODULES))
+
+
+TARGETS= c6472 c6474 c6474l c6455 c6457 c66x
+
+# The main module needs to know the device address of the i2c where the image map resides
+MAINDEFS=-DIBL_CFG_I2C_MAP_TABLE_DATA_BUS_ADDR=$(I2C_BUS_ADDR)
+
+# Add build time exclusion definitions
+MAINDEFS+=$(addprefix -DEXCLUDE_,$(EXCLUDES))
+
+# Add SPI definitions
+SPI_CFG= $(addprefix -D,$(SPI_DEFS))
+
+
+# Common symbols are functions which are loaded with the stage load of the IBL, and
+# also referenced from the second stage
+#COMMON_SYMBOLS= hwI2Cinit hwI2cMasterRead iblBootBtbl iblMalloc iblFree iblMemset iblMemcpy
+COMMON_SYMBOLS= iblBootBtbl iblMalloc iblFree iblMemset iblMemcpy
 
 ifeq ($(ENDIAN),little)
        HEX_OPT= -order L
@@ -24,58 +44,227 @@ else
        IEXT=     be
 endif
 
-ifeq ($(TARGET),c6474)
+ifeq ($(COMPACT_I2C),yes)
   COMPACT= -compact
-else
-  COMPACT=
 endif
 
 include $(IBL_ROOT)/make/$(ARCH)/makedefs.mk
 
 export ARCH
 export TARGET
+export EVM
+export I2C_MAP_ADDR
 
+.PHONY:  $(TARGETS) i2crom spiRom compare iblInit iblMain $(MODULES) $(CFG_MODULES)
+.PHONY:  utils clean clean_modules hwClean cleant
 
-$(TARGETS): $(MODULES) utils $(RIBL)
-       $(LD) -o ibl_$@/ibl_$@.out -m ibl_$@/ibl_$@.map  ibl_$@/ibl.cmd $(RTLIBS)
-       hex6x $(HEX_OPT) ibl_$@/ibl.rmd ibl_$@/ibl_$@.out
-       ../util/bconvert/bconvert64x -$(IEXT) ibl_le.b ibl.b
-       $(CP) ibl.b ibl_$@
-       ../util/btoccs/b2i2c ibl_$@/ibl.b ibl_$@/ibl.i2c.b
-       ../util/btoccs/b2ccs ibl_$@/ibl.i2c.b ibl_$@/ibl.i2c.$(IEXT).ccs
-       ../util/romparse/romparse $(COMPACT) ibl_$@/i2crom_$(IEXT).map
-       $(CP) i2crom.ccs ibl_$@/i2crom_$(IEXT).ccs
-       $(CP) i2crom.ccs ibl_$@/i2crom_$(IEXT).dat
+$(TARGETS): iblMain
+
+ifeq ($(TARGET),c66x)
+    HAS_SPI=1
+else
+    HAS_SPI=0
+endif
+
+ifeq (EXCLUDE_SPI, $(strip $(findstring EXCLUDE_SPI, $(MAINDEFS))))
+    HAS_SPI=0
+endif
+
+ifeq (EXCLUDE_I2C, $(strip $(findstring EXCLUDE_I2C, $(MAINDEFS))))
+    HAS_I2C=0
+else 
+   HAS_I2C=1
+endif
+
+# The I2C creation options. The I2C map file is run through the C pre-processor to generate
+# the desired I2C mapping. There are three possible configurations - an i2c which has
+# both endians present, or an I2C with only one of the endians
+
+I2C_BE_FILE=      '"ibl_$(TARGET)/ibl.i2c.be.ccs"'
+I2C_LE_FILE=      '"ibl_$(TARGET)/ibl.i2c.le.ccs"'
+I2C_INIT_BE_FILE= '"ibl_$(TARGET)/ibl_init.i2c.be.ccs"'
+I2C_INIT_LE_FILE= '"ibl_$(TARGET)/ibl_init.i2c.le.ccs"'
+
+I2C_DEFS= -DI2C_BUS_ADDR=$(I2C_BUS_ADDR)
+I2C_DEFS+= -DI2C_MAP_ADDR=$(I2C_MAP_ADDR)
+I2C_DEFS+= -DEVM=$(EVM)
+
+ifeq ($(I2CROM),both) 
+ I2C_DEFS+= -DINIT_EXE_FILE=$(I2C_INIT_LE_FILE)
+ I2C_DEFS+= -DEXE_FILE_1=$(I2C_LE_FILE) 
+ I2C_DEFS+= -DPAD_FILE_ID_1=1 
+ I2C_DEFS+= -DEXE_FILE_2=$(I2C_BE_FILE) 
+ I2C_DEFS+= -DPAD_FILE_ID_2=2 
+
+ SPI_CFG+= -DINIT_EXE_FILE=$(I2C_INIT_LE_FILE)
+ SPI_CFG+= -DEXE_FILE_1=$(I2C_LE_FILE) 
+ SPI_CFG+= -DPAD_FILE_ID_1=1 
+ SPI_CFG+= -DEXE_FILE_2=$(I2C_BE_FILE) 
+ SPI_CFG+= -DPAD_FILE_ID_2=2 
+
+else 
+ I2C_DEFS+= -DPAD_FILE_ID_1=1
+ I2C_DEFS+= -DPAD_FILE_ID_2=1
+
+ SPI_CFG+= -DPAD_FILE_ID_1=1
+ SPI_CFG+= -DPAD_FILE_ID_2=1
+
+ ifeq ($(I2CROM),little_endian)
+  I2C_DEFS+= -DINIT_EXE_FILE=$(I2C_INIT_LE_FILE)
+  I2C_DEFS+= -DEXE_FILE_1=$(I2C_LE_FILE)
+  I2C_DEFS+= -DEXE_FILE_2='""'
+
+  SPI_CFG+= -DINIT_EXE_FILE=$(I2C_INIT_LE_FILE)
+  SPI_CFG+= -DEXE_FILE_1=$(I2C_LE_FILE)
+  SPI_CFG+= -DEXE_FILE_2='""'
+
+ else
+  I2C_DEFS+= -DINIT_EXE_FILE=$(I2C_INIT_BE_FILE)
+  I2C_DEFS+= -DEXE_FILE_1='""'
+  I2C_DEFS+= -DEXE_FILE_2=$(I2C_BE_FILE)
+
+  SPI_CFG+= -DINIT_EXE_FILE=$(I2C_INIT_BE_FILE)
+  SPI_CFG+= -DEXE_FILE_1='""'
+  SPI_CFG+= -DEXE_FILE_2=$(I2C_BE_FILE)
+
+ endif
+endif
+
+
+i2crom:
+       $(CC) -ppo -I../cfg/$(TARGET) $(I2C_DEFS) ibl_$(TARGET)/$@.map.pre
+       ../util/romparse/romparse $(COMPACT) -rom_base $(I2C_BUS_ADDR) ibl_$(TARGET)/$@.map.pp
+       $(CP) i2crom.ccs ibl_$(TARGET)/$@.ccs
+       $(CP) i2crom.ccs ibl_$(TARGET)/$@.dat
+       ../util/btoccs/ccs2bin -swap ibl_$(TARGET)/$@.ccs ibl_$(TARGET)/$@.bin
+       cp ibl_$(TARGET)/$@.bin ../util/iblConfig/build/ibl.bin
+       (cd ../util/iblConfig/build;./iblConfig.out)
+       cp ../util/iblConfig/build/ibl.bin ibl_$(TARGET)/$@.bin
        $(RM) i2crom.ccs ibl_le.b ibl.b
 
+spiRom:
+       @echo Making SPI ROM
+       $(CC) -ppo -I../cfg/$(TARGET) $(SPI_CFG) ibl_$(TARGET)/$@.map.pre
+       ../util/romparse/romparse $(COMPACT) -fill 0xff -rom_base 0 ibl_$(TARGET)/$@.map.pp
+       $(CP) i2crom.ccs ibl_$(TARGET)/$@.ccs
+       $(CP) i2crom.ccs ibl_$(TARGET)/$@.dat
+
+
+
+
+
+# Target compare checks if the iblInit is compiled the same for both endians
+compare:
+       @echo -
+       @sh -c 'if diff -q ibl_$(TARGET)/ibl_init.le.ccs ibl_$(TARGET)/ibl_init.be.ccs ; then echo IBL init endian neutral ; else echo !!! WARNING !!!! IBL ini NOT endian neutral !!! ; fi '
+       @echo -
+
+# For the init code a raw image is created as well as the i2c code to verify
+# endian independent code is generated. The symbols required for linking
+# the full application are then extracted
+iblInit: $(CFG_MODULES) $(MODULES)
+       cat ibl_$(TARGET)/ibl_init_objs_template.inc | sed -e s/ENDIAN_TAG/$(IEXT)/g > ibl_$(TARGET)/ibl_init_objs.tmp
+       $(CC) -ppo $(MAINDEFS) -DENDIAN_TAG=$(IEXT) ibl_$(TARGET)/ibl_init_objs.tmp
+       $(CP) ibl_$(TARGET)/ibl_init_objs.pp ibl_$(TARGET)/ibl_init_objs.inc
+       $(LD) -o ibl_$(TARGET)/ibl_$(TARGET)_init.out -m ibl_$(TARGET)/ibl_$(TARGET)_init.map ibl_$(TARGET)/ibl_init.cmd $(RTLIBS)
+       $(CP) ibl_$(TARGET)/ibl_$(TARGET)_init.out ibl_$(TARGET)/ibl_$(TARGET)_init.$(IEXT).out
+       $(RM) -f ibl_$(TARGET)/ibl_init_obj.inc
+
+       hex6x $(HEX_OPT) ibl_$(TARGET)/ibl_init_image.rmd ibl_$(TARGET)/ibl_$(TARGET)_init.out
+       $(CP) ibl_le.b ibl_$(TARGET)/ibl.b
+       ../util/btoccs/b2ccs ibl_$(TARGET)/ibl.b ibl_$(TARGET)/ibl_init.$(IEXT).ccs
+
+       hex6x $(HEX_OPT) ibl_$(TARGET)/ibl_init.rmd ibl_$(TARGET)/ibl_$(TARGET)_init.out
+       ../util/bconvert/bconvert64x -$(IEXT) ibl_le.b ibl.b
+       $(CP) ibl.b ibl_$(TARGET)
+       ../util/btoccs/b2i2c ibl_$(TARGET)/ibl.b ibl_$(TARGET)/ibl.i2c.b
+       ../util/btoccs/b2ccs ibl_$(TARGET)/ibl.i2c.b ibl_$(TARGET)/ibl_init.i2c.$(IEXT).ccs
+
+       sed -e 's/\\r//' ../util/symExtract/symExtract > ../util/symExtract/symExtract_unix
+       bash ../util/symExtract/symExtract_unix ibl_$(TARGET)/ibl_$(TARGET)_init.map ibl_$(TARGET)/ibl_init_symbols.inc $(COMMON_SYMBOLS)
+       rm -f ../util/symExtract/symExtract_unix
+
+       
+iblMain: iblInit $(CFG_MODULES) $(MODULES)
+       cat ibl_$(TARGET)/ibl_objs_template.inc | sed -e s/ENDIAN_TAG/$(IEXT)/g > ibl_$(TARGET)/ibl_objs.tmp
+       $(CC) -ppo $(MAINDEFS) -DENDIAN_TAG=$(IEXT) ibl_$(TARGET)/ibl_objs.tmp
+       $(CP) ibl_$(TARGET)/ibl_objs.pp ibl_$(TARGET)/ibl_objs.inc
+       $(LD) -o ibl_$(TARGET)/ibl_$(TARGET).out -m ibl_$(TARGET)/ibl_$(TARGET).$(IEXT).map  ibl_$(TARGET)/ibl.cmd $(RTLIBS)
+       $(CP) ibl_$(TARGET)/ibl_$(TARGET).out ibl_$(TARGET)/ibl_$(TARGET).$(IEXT).out
+       $(RM) -f ibl_$(TARGET)/ibl_obj.inc
+
+       hex6x $(HEX_OPT) ibl_$(TARGET)/ibl.rmd ibl_$(TARGET)/ibl_$(TARGET).out
+       ../util/bconvert/bconvert64x -$(IEXT) ibl_le.b ibl.b
+       $(CP) ibl.b ibl_$(TARGET)
+       ../util/btoccs/b2i2c ibl_$(TARGET)/ibl.b ibl_$(TARGET)/ibl.i2c.b
+       ../util/btoccs/b2ccs ibl_$(TARGET)/ibl.i2c.b ibl_$(TARGET)/ibl.i2c.$(IEXT).ccs
+
 
 $(MODULES):
        @echo making $@
        make -C $(IBL_ROOT)/$@/$(ARCH)/make $@
 
+$(CFG_MODULES):
+       @echo making $@ SPI_CFG=$(SPI_CFG) CDEFS=$(CDEFS) EXCLUDES=$(EXCLUDES)
+       make -C $(IBL_ROOT)/$@/$(ARCH)/make CDEFS='$(MAINDEFS) $(SPI_CFG)' $@
 
 utils:
+ifeq ($(HAS_SPI),1)
+#make -C $(IBL_ROOT)/util/spiConfig TARGET=$(TARGET) SPI_DEFS='$(SPI_DEFS)' MAINDEFS='$(MAINDEFS) $(SPI_CFG)' $(TARGET)
+endif
        make -C $(IBL_ROOT)/util/btoccs
        make -C $(IBL_ROOT)/util/romparse TARGET=$(TARGET)
-       make -C $(IBL_ROOT)/util/i2cRead  TARGET=$(TARGET) $(TARGET)
-       make -C $(IBL_ROOT)/util/i2cWrite TARGET=$(TARGET) $(TARGET)
+ifeq ($(HAS_I2C),1)
+       make -C $(IBL_ROOT)/util/i2cConfig $(TARGET) MAINDEFS='$(MAINDEFS) $(SPI_CFG)' 
+endif
        make -C $(IBL_ROOT)/util/bconvert
+       make -C $(IBL_ROOT)/util/iblConfig/build EVM=$(EVM) I2C_MAP_ADDR=$(I2C_MAP_ADDR)
 
-clean: $(CLEAN_MODULES)
+clean: $(CLEAN_MODULES) hwClean
        
 
 $(CLEAN_MODULES):
        @echo cleaning $(subst clean_, ,$@)
-       make -C $(IBL_ROOT)/$(subst clean_,,$@)/$(ARCH)/make clean
+       make -C $(IBL_ROOT)/$(subst clean_,,$@)/$(ARCH)/make clean ARCH=c64x TARGET=$(TARGET)
+
+hwClean:
+       @echo cleaning hw
+       make -C $(IBL_ROOT)/hw/$(ARCH)/make cleant ARCH=$(ARCH) TARGET=$(TARGET)
        
 cleant:
+       rm -rf ibl_$(TARGET)/ibl_$(TARGET).be.out
+       rm -rf ibl_$(TARGET)/ibl_$(TARGET).le.out
+       rm -rf ibl_$(TARGET)/ibl_$(TARGET).be.map
+       rm -rf ibl_$(TARGET)/ibl_$(TARGET).le.map
+       rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.map
+       rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.out
+       rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.be.map
+       rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.be.out
+       rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.le.map
+       rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.le.out
        rm -rf ibl_$(TARGET)/ibl_$(TARGET).out
        rm -rf ibl_$(TARGET)/ibl_$(TARGET).map
        rm -rf ibl_$(TARGET)/ibl_le.b
        rm -rf ibl_$(TARGET)/ibl.b
        rm -rf ibl_$(TARGET)/ibl.i2c.b
-       rm -rf ibl_$(TARGET)/ibl.i2c.ccs
-       rm -rf ibl_$(TARGET)/i2crom.ccs
+       rm -rf ibl_$(TARGET)/ibl.i2c.be.ccs
+       rm -rf ibl_$(TARGET)/ibl.i2c.le.ccs
+       rm -rf ibl_$(TARGET)/ibl_init.i2c.be.ccs
+       rm -rf ibl_$(TARGET)/ibl_init.i2c.le.ccs
+       rm -rf ibl_$(TARGET)/ibl_init.le.ccs
+       rm -rf ibl_$(TARGET)/ibl_init.be.ccs
+       rm -rf ibl_$(TARGET)/i2crom*.ccs
+       rm -rf ibl_$(TARGET)/i2crom*.dat
+       rm -rf ibl_$(TARGET)/i2crom*.bin
+       rm -rf ibl_$(TARGET)/i2crom*.map.pp
+       rm -rf ibl_$(TARGET)/ibl_init_objs.inc
+       rm -rf ibl_$(TARGET)/ibl_init_objs.pp
+       rm -rf ibl_$(TARGET)/ibl_init_symbols.inc
+       rm -rf ibl_$(TARGET)/ibl_objs.inc
+       rm -rf ibl_$(TARGET)/ibl_objs.pp
+       rm -rf ibl_$(TARGET)/ibl_objs.tmp
+       rm -rf ibl_$(TARGET)/spiRom*.dat
+       rm -rf ibl_$(TARGET)/spiRom*.map.pp