1################################################################################ 2# Create By Hisilicon 3################################################################################ 4 5PWD = $(shell pwd) 6HW_CROSS_COMPILE = aarch64-himix200-linux- 7TOPDIR = 8BINIMAGE = $(TOPDIR)/full-boot.bin 9 10################################################################################ 11CC := $(HW_CROSS_COMPILE)gcc 12AR := $(HW_CROSS_COMPILE)ar 13LD := $(HW_CROSS_COMPILE)ld 14OBJCOPY := $(HW_CROSS_COMPILE)objcopy 15OBJDUMP := $(HW_CROSS_COMPILE)objdump 16 17 18################################################################################ 19BOOT := u-boot-$(SOC) 20TEXTBASE := 0x48700000 21CFLAGS :=-Os -fno-builtin -ffreestanding \ 22 -D__KERNEL__ -DTEXT_BASE=$(TEXTBASE) \ 23 -I$(TOPDIR)/include \ 24 -I$(TOPDIR)/drivers/ddr/hisilicon/default \ 25 -I$(TOPDIR)/drivers/ddr/hisilicon/$(SOC) \ 26 -I$(TOPDIR)/arch/arm/include \ 27 -fno-pic -mstrict-align -ffunction-sections \ 28 -fdata-sections -fno-common -ffixed-r9 \ 29 -fno-common -ffixed-x18 -pipe -march=armv8-a \ 30 -Wall -Wstrict-prototypes -fno-stack-protector \ 31 -D__LINUX_ARM_ARCH__=8 -D__ARM__ \ 32 -DCONFIG_HI3569V100 -DCONFIG_MMC -DCONFIG_UFS \ 33 $(MKFLAGS) -fno-strict-aliasing 34 35################################################################################ 36 37START := start.o 38COBJS := lowlevel_init_v300.o \ 39 init_registers.o \ 40 sdhci_boot.o \ 41 ufs.o \ 42 uart.o \ 43 ddr_training_impl.o \ 44 ddr_training_ctl.o \ 45 ddr_training_boot.o \ 46 ddr_training_custom.o \ 47 ddr_training_console.o \ 48 startup.o \ 49 image_data.o \ 50 div0.o \ 51 reset.o 52 53SSRC := arch/arm/cpu/armv8/$(SOC)/start.S \ 54 arch/arm/cpu/armv8/$(SOC)/reset.S \ 55 arch/arm/cpu/armv8/$(SOC)/sdhci_boot.c \ 56 arch/arm/cpu/armv8/$(SOC)/scsi.c \ 57 arch/arm/cpu/armv8/$(SOC)/scsi.h \ 58 arch/arm/cpu/armv8/$(SOC)/uart.S \ 59 arch/arm/cpu/armv8/$(SOC)/ufs.c \ 60 arch/arm/cpu/armv8/$(SOC)/ufs.h \ 61 arch/arm/cpu/armv8/$(SOC)/init_registers.c \ 62 arch/arm/cpu/armv8/$(SOC)/lowlevel_init_v300.c \ 63 drivers/ddr/hisilicon/default/ddr_training_impl.c \ 64 drivers/ddr/hisilicon/default/ddr_training_ctl.c \ 65 drivers/ddr/hisilicon/default/ddr_training_boot.c \ 66 drivers/ddr/hisilicon/default/ddr_training_console.c \ 67 drivers/ddr/hisilicon/$(SOC)/ddr_training_custom.c \ 68 arch/arm/lib/div0.c \ 69 lib/hw_dec/hw_decompress.c \ 70 lib/hw_dec/hw_decompress_$(SOC).c \ 71 lib/hw_dec/hw_decompress_v2.c \ 72 lib/hw_dec/hw_decompress_v2.h 73 74REG := $(wildcard $(TOPDIR)/*.reg $(TOPDIR)/.reg) 75SRC := $(notdir $(SSRC)) 76 77################################################################################ 78.PHONY: $(BOOT).bin 79$(BOOT).bin: $(BOOT).tmp regfile 80 @dd if=./$(BOOT).tmp of=./tmp1 bs=1 count=64 2>/dev/null 81 @dd if=$(REG) of=./tmp2 bs=10240 conv=sync 2>/dev/null 82 @dd if=./$(BOOT).tmp of=./tmp3 bs=1 skip=10304 2>/dev/null 83 @cat tmp1 tmp2 tmp3 > $(BOOT).bin 84 @rm -f tmp1 tmp2 tmp3 85 @chmod 754 $(BOOT).bin 86 @cp -fv $@ $(TOPDIR) 87 @echo $(BOOT).bin is Ready. 88 89$(BOOT).tmp: $(BOOT).elf 90 $(OBJCOPY) -O srec $< $(BOOT).srec 91 $(OBJCOPY) -j .text -O binary $< $(BOOT).text 92 $(OBJCOPY) --gap-fill=0xff -O binary $< $@ 93 94$(BOOT).elf: image_data.gzip $(SRC) $(START) $(COBJS) 95 $(LD) -Bstatic -T u-boot.lds -Ttext $(TEXTBASE) $(START) \ 96 $(COBJS) -Map $(BOOT).map -o $@ 97 $(OBJDUMP) -d $@ > $@.asm 98 99.PHONY: regfile 100regfile: 101 @if [ "$(words $(REG))" = "0" ]; then ( \ 102 echo '***' Need '.reg' or '*.reg' file in directory $(TOPDIR); \ 103 exit 1; \ 104 ) fi 105 @if [ "$(words $(REG))" != "1" ]; then ( \ 106 echo '***' Found multi '.reg' or '*.reg' file in directory $(TOPDIR); \ 107 echo '***' Files: $(notdir $(REG)); \ 108 exit 1; \ 109 ) fi 110 111################################################################################ 112start.o: start.S 113 $(CC) -D__ASSEMBLY__ $(CFLAGS) -o $@ $< -c 114 115# -1 : --fast -9 : --best 116image_data.gzip: $(BINIMAGE) 117 gzip -fNqc -7 $< > $@ 118 119%.o: %.c 120 $(CC) $(CFLAGS) -Wall -Wstrict-prototypes \ 121 -fno-stack-protector -o $@ $< -c 122 123%.o: %.S 124 $(CC) -D__ASSEMBLY__ $(CFLAGS) -o $@ $< -c 125 126image_data.o: image_data.S image_data.gzip 127 $(CC) -D__ASSEMBLY__ $(CFLAGS) -o $@ $< -c 128 129############################################################################# 130 131$(SRC): 132 ln -sf ../../../../../../$(filter %/$@,$(SSRC)) $@ 133################################################################################ 134TMPS := $(COBJS) start.o $(SRC) \ 135 $(BOOT).map $(BOOT).elf $(BOOT).srec $(BOOT).bin $(BOOT).text $(BOOT).tmp \ 136 image_data.gzip 137 138distclean: clean 139 140clean: 141 -rm -f $(TMPS) 142 143################################################################################ 144.PHONY: clean 145################################################################################ 146