summaryrefslogtreecommitdiffstats
path: root/cfe/build/broadcom/bcm63xx_rom/Makefile
blob: 1277f1de9987ca30143fc42ab37975a6441e4f80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
	
CFG_MLONG64  ?= 0
CFG_LITTLE   ?= 0        # Mindbender
CFG_RELOC    ?= 0
CFG_UNCACHED ?= 0      # Mindbender
CFG_NEWRELOC ?= 0
CFG_VAPI     ?= 0
CFG_BOOTRAM  ?= 0
CFG_RAMAPP   ?= 0       # EPI
CFG_BOARDNAME = "BCM9$(BRCM_CHIP)"
CFG_PCI      ?= 0
CFG_ZLIB     ?= 0           # enable zlib
CFG_SBP		 ?= 0		# use Single Board Parameter if defined to 1

TOP   = ../../../cfe
ARCH  = mips
CPU   = bcmcore
BOARD = bcm63xx_rom

LINUX_KERNEL_DIR=../../../../kernel/linux
HOSTTOOLS = ../../../../hostTools
TARGETS_DIR = ../../../../targets
SHARED_DIR = ../../../../shared
INC_SHARED_PUB_PATH = $(SHARED_DIR)/opensource/include/bcm963xx
INC_SHARED_PRIV_PATH = $(SHARED_DIR)/broadcom/include/bcm963xx
FLASH_DIR = $(SHARED_DIR)/opensource/flash
BCMSPI_DIR = $(SHARED_DIR)/opensource/spi

BOOT_DIR = ${ARCH_TOP}/board/$(BOARD)/src
ASM_FILE = flashimg.S
RAM_BUILD = ../bcm63xx_ram

#TOOLS=../../../../uclibc-crosstools-gcc-4.4.2-1/usr/bin/mips-linux-

include $(TOP)/arch/mips/board/$(BOARD)/src/rom_cfe.mk

VPATH += ${FLASH_DIR} $(BCMSPI_DIR)
INCDIRS += -I${ARCH_TOP}/board/bcm63xx_ram/include -I${INC_SHARED_PUB_PATH} -I${INC_SHARED_PRIV_PATH}

BSPOBJS_ROM := $(BSPOBJS)
ifneq ($(strip $(BRCM_IKOS)),y)
BSPOBJS += flashimg.o $(LZMAOBJS)
endif

export INC_CFI_FLASH_DRIVER INC_SPI_FLASH_DRIVER INC_NAND_FLASH_DRIVER INC_SPI_PROG_NAND

ALL : sanity_check cfe$(BRCM_CHIP)
ifneq ($(strip $(INC_NAND_FLASH_DRIVER)),1)
	gcc -o ${HOSTTOOLS}/addvtoken -I ${INC_SHARED_PUB_PATH} ${HOSTTOOLS}/addvtoken.c
	@if [ $(shell find . -name cfe$(BRCM_CHIP).bin -printf '%s\n') -le 65536 ] ; then \
		${HOSTTOOLS}/addvtoken cfe$(BRCM_CHIP).bin bcm9$(BRCM_CHIP)_cfe.w; \
	else \
		find . -name cfe$(BRCM_CHIP).bin -printf '\nERROR: cfe.bin size, %s, is greater than 65536 maximum size.\n'; \
		rm cfe$(BRCM_CHIP) cfe$(BRCM_CHIP).bin; \
	fi
endif
	@echo done

untar_check:
	@if [ ! -e $(TOP)/api ]; then \
		echo Untarring original CFE source...; \
		(cd ../../.. && tar xfzk cfe*.tar.gz 2> /dev/null || true); \
	fi

sanity_check:
	@if [ "$(BRCM_CHIP)" = "" ]; then \
		echo You must specify chip ID using 'make BRCM_CHIP=[6328|6362|6368|6816]'; exit 1; \
	fi
	@if [ ! -e $(TOP)/api ]; then \
		echo Untarring original CFE source...; \
		(cd ../../.. && tar xfzk cfe*.tar.gz 2> /dev/null || true); \
		$(MAKE) BRCM_CHIP=$(BRCM_CHIP) BLD_NAND=$(BLD_NAND); \
	fi

mksbp: ALL
	@echo done

sbp:
	${MAKE} clean
	${MAKE} CFG_SBP?=1 mksbp
	
ifeq ($(strip $(INC_NAND_FLASH_DRIVER)),1)
# Build NAND flash boot loader
cfe$(BRCM_CHIP) cfe$(BRCM_CHIP).bin : $(CRT0OBJS) $(BSPOBJS_ROM) $(LIBCFE) noflashimg
	$(MAKE) -C $(RAM_BUILD)
	$(GLD) -o cfe$(BRCM_CHIP)rom -Map cfe$(BRCM_CHIP)rom.map $(LDFLAGS) $(CRT0OBJS) $(BSPOBJS_ROM) noflashimg.o -L. -lcfe $(LDLIBS)
	$(OBJCOPY) --output-target=binary cfe$(BRCM_CHIP)rom cfe$(BRCM_CHIP)rom.bin
	rm noflashimg.*

noflashimg:
	echo "char *_binArrayStart = (char *) 0, *_binArrayEnd = (char *) 0;" > $@.c; \
	echo "int decompressLZMA(unsigned char *s, unsigned int sl, unsigned char *d, unsigned int dl);" >> $@.c; \
	echo "int decompressLZMA(unsigned char *s, unsigned int sl, unsigned char *d, unsigned int dl){return 0;}" >> $@.c
	$(GCC) $(CFLAGS) -o $@.o $@.c

else
# Build NOR flash boot loader
cfe$(BRCM_CHIP) cfe$(BRCM_CHIP).bin : $(CRT0OBJS) $(BSPOBJS) $(LIBCFE) $(ASM_FILE)
	$(GLD) -o cfe$(BRCM_CHIP) -Map cfe$(BRCM_CHIP).map $(LDFLAGS) $(CRT0OBJS) $(BSPOBJS) -L. -lcfe $(LDLIBS)
	$(OBJDUMP) -d cfe$(BRCM_CHIP) > cfe$(BRCM_CHIP).dis
	$(OBJCOPY) --output-target=binary cfe$(BRCM_CHIP) cfe$(BRCM_CHIP).bin

$(ASM_FILE) : $(TOP)/arch/mips/board/bcm63xx_ram/src 
	rm -f $(ASM_FILE)
	$(MAKE) -C $(RAM_BUILD)
endif


clean : untar_check
	rm -f *.o *~ cfe* *.w *.srec
	rm -f build_date.c
	rm -f noflashimg.c >& /dev/null
	rm -f libcfe.a
	$(MAKE) -C $(RAM_BUILD) clean
	
distclean : clean

release : untar_check
	$(MAKE) clean
	$(MAKE) BRCM_CHIP=6328
	cp -f cfe*.bin $(TARGETS_DIR)/cfe
	$(MAKE) clean
	$(MAKE) BRCM_CHIP=6328 BLD_NAND=1
	cp -f cfe*.bin $(TARGETS_DIR)/cfe
	cp -f $(RAM_BUILD)/cfe*ram.bin $(TARGETS_DIR)/cfe
	$(MAKE) clean
	$(MAKE) BRCM_CHIP=6362
	cp -f cfe*.bin $(TARGETS_DIR)/cfe
	$(MAKE) clean
	$(MAKE) BRCM_CHIP=6362 BLD_NAND=1
	cp -f cfe*.bin $(TARGETS_DIR)/cfe
	cp -f $(RAM_BUILD)/cfe*ram.bin $(TARGETS_DIR)/cfe
	$(MAKE) clean
	$(MAKE) BRCM_CHIP=6368
	cp -f cfe*.bin $(TARGETS_DIR)/cfe
	$(MAKE) clean
	$(MAKE) BRCM_CHIP=6368 BLD_NAND=1
	cp -f cfe*.bin $(TARGETS_DIR)/cfe
	cp -f $(RAM_BUILD)/cfe*ram.bin $(TARGETS_DIR)/cfe
	$(MAKE) clean
	$(MAKE) BRCM_CHIP=6816
	cp -f cfe*.bin $(TARGETS_DIR)/cfe
	$(MAKE) clean
	$(MAKE) BRCM_CHIP=6816 BLD_NAND=1
	cp -f cfe*.bin $(TARGETS_DIR)/cfe
	cp -f $(RAM_BUILD)/cfe*ram.bin $(TARGETS_DIR)/cfe
	$(MAKE) clean

CFE_RAM_START_ADDR := $(OBJDUMP) -f $(RAM_BUILD)/cfe$(BRCM_CHIP) | grep start | cut -d'x' -f2
VMLINUX_START_ADDR := $(OBJDUMP) -f $(LINUX_KERNEL_DIR)/vmlinux | grep start | cut -d'x' -f2

# Must be called from base Linux build directory.
ikos_finish:
	@xxd -g4 cfe$(BRCM_CHIP) | sed -e "s/694b6f31/$(shell $(CFE_RAM_START_ADDR))/" | xxd -r > cfe$(BRCM_CHIP).tmp
	@mv cfe$(BRCM_CHIP).tmp cfe$(BRCM_CHIP)
	@xxd -g4 $(RAM_BUILD)/cfe$(BRCM_CHIP) | sed -e "s/694b6f32/$(shell $(VMLINUX_START_ADDR))/" | xxd -r > $(RAM_BUILD)/cfe$(BRCM_CHIP).tmp
	@mv $(RAM_BUILD)/cfe$(BRCM_CHIP).tmp $(RAM_BUILD)/cfe$(BRCM_CHIP)
	$(OBJCOPY) --output-target=binary cfe$(BRCM_CHIP) cfe$(BRCM_CHIP).bin
	$(OBJCOPY) --output-target=srec $(RAM_BUILD)/cfe$(BRCM_CHIP) cferam$(BRCM_CHIP).srec