1
0
Files
2022-09-29 17:59:04 +03:00

412 lines
11 KiB
Makefile

############################################################################
#
# Makefile for IP27 PROM
#
############################################################################
DEPTH= ..
LLIBDEPTH= ../
TARGDEPTH= ..
include ${DEPTH}/commondefs
include $(PRODUCTDEFS)
include $(CPUARCHDEFS)
DEF_CSTYLE=
GNUMVAL=8
LLWOFF=,1174 # Arg not used remark
DEBUG=-DDEBUG=1
MIPSVERS=-mips4 $(USE_RAGNAROK)
# The flag -OPT:Olimit=4000 is required for parse_yyparse to be optimized.
# However, the optimized version is LARGER than unoptimized, so we'll let
# it go unoptimized.
$(RAGNAROK)RAGFLAGS=
PROM_CFLAGS=-U__INLINE_INTRINSICS -DIOC3_UART $(YESRAGFLAGS)
PERL=/usr/bin/perl
# Revision code for version string
NEWVERS=./ip27vers.sh
SN0_X=\#
SN0XXL_X=\#
SN0PROM_X=\#
SN0XXLPROM_X=\#
$(PRODUCT)_X=
# RELEASE_VER and RELEASE_REV are used to ensure all PROM revisions
# in a system are compatible. RELEASE_VER should only be incremented
# if a change is introduced that breaks compatibility with the old
# version, other PROMs, or the kernel.
include ../include/release.mk
$(SN0_X)RELEASE_VER=$(RELEASE_VER_SN0)
$(SN0_X)RELEASE_REV=$(RELEASE_REV_SN0)
$(SN0_X)RELEASE_INFO=$(RELEASE_INFO_SN0)
$(SN0PROM_X)RELEASE_VER=$(RELEASE_VER_SN0)
$(SN0PROM_X)RELEASE_REV=$(RELEASE_REV_SN0)
$(SN0PROM_X)RELEASE_INFO=$(RELEASE_INFO_SN0)
$(SN0XXL_X)RELEASE_VER=$(RELEASE_VER_SN0XXL)
$(SN0XXL_X)RELEASE_REV=$(RELEASE_REV_SN0XXL)
$(SN0XXL_X)RELEASE_INFO=$(RELEASE_INFO_SN0XXL)
$(SN0XXLPROM_X)RELEASE_VER=$(RELEASE_VER_SN0XXL)
$(SN0XXLPROM_X)RELEASE_REV=$(RELEASE_REV_SN0XXL)
$(SN0XXLPROM_X)RELEASE_INFO=$(RELEASE_INFO_SN0XXL)
VCOPTS=
#
# Make sure all addresses and sizes are up to date with ip27prom.h.
#
#PROMADDR = -T ffffffffbfc00000
PROMADDR = -T c00000001fc00000
RTLPROMADDR = -T a800000000002000
GATEPROMADDR = -T a800000000002000
#
# Command flag definitions
#
CSTYLE=
LLDOPTS= -rom -non_shared -elf -G $(GNUMVAL) -64 -mips4 $(USE_RAGNAROK) \
$(IPA_LDOPTS)
LLCDEFS = -D$(CPUBOARD) -DPROM ${SIMFLAGS} ${WORKAROUNDS} \
-DIP27_CONFIG_${IP27_CONFIG} ${PROM_CFLAGS} $(IPA_COPTS)
ASFLAGS= $(OPTIMIZER) $(CPUARCH_MI_ASOPTS) -DLOCORE ${CDEFS} ${CINCS} \
${SIMFLAGS} ${WORKAROUNDS} ${DEBUG} -DIP27_CONFIG_${IP27_CONFIG} \
-MDupdate Makedepend.${PRODUCT}
ASFLAGS_MIPS4= $(OPTIMIZER) $(CPUARCH_MI_ASOPTS4) -DLOCORE ${CDEFS} \
${CINCS} ${SIMFLAGS} ${WORKAROUNDS} -DDEBUG=1 \
-DIP27_CONFIG_${IP27_CONFIG} -MDupdate Makedepend.${PRODUCT}
LDV= ${LD} ${VLDFLAGS} ${LLDOPTS} ${ENDIAN}
VCFLAGS=${DEBUG}
TARGETDIR= ${PRODUCT}.O
VPATH= ${TARGETDIR}
#
# The IP27 does not contain an EAROM for the R10000 mode bits.
# Instead, a config-specific start.o file is linked in at offset 0x60
# (in the exception vector area).
#
IP27_CONFIG_LIST = SN0_4MB_97_5MHZ SN0_1MB_90MHZ SN00_1MB_90MHZ SN00_2MB_225MHZ SN00_4MB_270MHZ
ASFILES = entry.s cache.s libasm.s launch.s \
podasm.s mdir_asm.s mtest_asm.s tlb.s
CFILES = main.c pod.c diagval.c \
testing.c symbol.c disMips.c bist.c \
mdir.c mtest.c memory.c \
net.c router.c discover.c partition.c \
nasid.c route.c deadlock.c router_war.c \
hubuart.c ioc3uart.c libc.c \
segldr.c unzip.c \
parse_y.tab.c lex.c cmd.c exec.c prom_error.c kdebug.c \
rtr_diags.c hub_diags.c ${PRODUCT}io6prom.img.c
LDIRT= ${OBJECTS} start.o pvers.o disMips.c
STDTARGETS= prom
COMMONPREF= ip27prom
# Allow developers to have a different default target or whatnot
sinclude localdefault
TOOLS = ${DEPTH}/tools
MYACC = ${TOOLS}/myacc/myacc
YACCPAR = ${TOOLS}/myacc/yaccpar
SETSYM = ${TOOLROOT}/usr/sbin/setsym
############################################################################
# Default Rule:
#
default: directory ${STDTARGETS}
include ${DEPTH}/commonrules
include Makerules
prom: ${PRODUCT}io6prom
$(MAKE) ${PRODUCT}ip27prom.post IP27_CONFIG=SN0_1MB_90MHZ
-@rm -f ${TARGETDIR}/${PRODUCT}ip27prom_*
prom.nolink: ${_FORCE}
$(MAKE) ip27prom.nolink IP27_CONFIG=SN0_4MB_97_5MHZ
dis: ${_FORCE}
for C in ${IP27_CONFIG_LIST}; do \
$(MAKE) ip27prom_$$C.dis IP27_CONFIG=$$C; \
done
hex: ${_FORCE}
for C in ${IP27_CONFIG_LIST}; do \
$(MAKE) ${PRODUCT}ip27prom_$$C.post IP27_CONFIG=$$C; \
done
-@rm -f ${TARGETDIR}/${PRODUCT}ip27prom ${TARGETDIR}/${PRODUCT}ip27prom.*
bist_compile: bist_compile.c
$(HOST_CC) -n32 -O -s -o bist_compile bist_compile.c
bist.o: bist_data.c
bist_data.c: bist_compile bist_data.src
./bist_compile < bist_data.src > bist_data.c
disMips.c:
ln -sf ../symmon/disMips.c .
# Yacc leaves output files even if error, but also leaves a tell-tale tmp file
parse_y.tab.c parse_y.tab.h: parse.y
-${MYACC} -v -p${YACCPAR} parse.y
@${PERL} check_yacc
lex.o: parse_y.tab.h
start.o: start.s ${OBJECTS}
@if test ! -d ${TARGETDIR}; then mkdir ${TARGETDIR}; fi
$(ASF) start.s -c \
-DPVERS_VERS=${RELEASE_VER} -DPVERS_REV=${RELEASE_REV} \
-o $(TARGETDIR)/$@
start_${IP27_CONFIG}.o: start.s ${OBJECTS}
@if test ! -d ${TARGETDIR}; then mkdir ${TARGETDIR}; fi
$(ASF) start.s -c \
-DPVERS_VERS=${RELEASE_VER} -DPVERS_REV=${RELEASE_REV} \
-o $(TARGETDIR)/$@
${PRODUCT}ip27prom: start.o ${OBJECTS} ${LIBKL} pvers.o
cd ${TARGETDIR}; \
${LDV} ${PROMADDR} start.o \
${OBJECTS} pvers.o $(LIBKL) -e start -o $@
ip27prom.nolink: start.o ${OBJECTS}
${PRODUCT}ip27prom.post: ${PRODUCT}ip27prom
cd ${TARGETDIR}; \
#${SETSYM} ${PRODUCT}ip27prom # Before zero_csum
${PERL} zero_csum ${TARGETDIR}/${PRODUCT}ip27prom
${SIZE} -xA ${TARGETDIR}/${PRODUCT}ip27prom
cd ${TARGETDIR}; \
${PROMGEN} -o ${PRODUCT}ip27prom.img -v "${RELEASE_VER}.${RELEASE_REV}" -V -N ip27prom -U -E ${PRODUCT}ip27prom
@${PERL} check_size ${TARGETDIR}/${PRODUCT}ip27prom
touch ${TARGETDIR}/${PRODUCT}ip27prom.post
${PRODUCT}ip27prom.dis: ${PRODUCT}ip27prom
cd ${TARGETDIR}; \
${TOOLROOT}/usr/bin/dis ${PRODUCT}ip27prom > ${PRODUCT}ip27prom.dis
${PRODUCT}ip27prom_${IP27_CONFIG}: start_${IP27_CONFIG}.o ${OBJECTS} ${LIBKL} pvers.o
cd ${TARGETDIR}; \
${LDV} ${PROMADDR} start_${IP27_CONFIG}.o \
${OBJECTS} pvers.o $(LIBKL) -e start -o $@
${PRODUCT}ip27prom_${IP27_CONFIG}.post: ${PRODUCT}ip27prom_${IP27_CONFIG}
cd ${TARGETDIR}; \
#${SETSYM} ${PRODUCT}ip27prom_${IP27_CONFIG} # Before zero_csum
${PERL} zero_csum ${TARGETDIR}/${PRODUCT}ip27prom_${IP27_CONFIG}
${SIZE} -xA ${TARGETDIR}/${PRODUCT}ip27prom_${IP27_CONFIG}
cd ${TARGETDIR}; \
${CONVERT} -f intelhex ${PRODUCT}ip27prom_${IP27_CONFIG} \
> ${PRODUCT}ip27prom_${IP27_CONFIG}.hex
cd ${TARGETDIR}; \
${PROMGEN} -o ${PRODUCT}ip27prom_${IP27_CONFIG}.img \
-V -N ip27prom -U -E ${PRODUCT}ip27prom_${IP27_CONFIG}
@${PERL} check_size ${TARGETDIR}/${PRODUCT}ip27prom_${IP27_CONFIG}
touch ${TARGETDIR}/${PRODUCT}ip27prom_${IP27_CONFIG}.post
ip27prom_${IP27_CONFIG}.dis: ip27prom_${IP27_CONFIG}
cd ${TARGETDIR}; \
${TOOLROOT}/usr/bin/dis ${PRODUCT}ip27prom_${IP27_CONFIG} > $@
#
# PROM debug version
#
debug:
$(MAKE) debugprom TARGETDIR=${PRODUCT}-G.O OPTIMIZER=-g
debugprom: start_${IP27_CONFIG}.o ${OBJECTS} pvers.o
cd ${TARGETDIR}; ${LDV} ${PROMADDR} start_${IP27_CONFIG}.o \
${OBJECTS} pvers.o $(LIBKL) -e start -o ../$@
${PERL} zero_csum $@
@echo Created sablegprom
${SIZE} -xA $@ ; ${NM} -Bnx $@ | sort > $@.nm
#
# RTL
#
rtl:
$(MAKE) rtlprom TARGETDIR=${PRODUCT}-RTL.O \
SIMFLAGS=-DRTL IP27_CONFIG=1MB_100MHZ
rtlprom: start_${IP27_CONFIG}.o ${OBJECTS} pvers.o
cd ${TARGETDIR}; ${LDV} ${RTLPROMADDR} start_${IP27_CONFIG}.o \
${OBJECTS} pvers.o $(LIBKL) -e start -o ../$@
${PERL} zero_csum $@
@echo Created rtlprom
${SIZE} -xA $@ ; ${NM} -Bnx $@ | sort > $@.nm
#
# Gate-level
#
gate:
$(MAKE) gateprom TARGETDIR=${PRODUCT}-GATE.O \
SIMFLAGS=-DGATE IP27_CONFIG=1MB_100MHZ
gateprom: start_${IP27_CONFIG}.o ${OBJECTS} pvers.o
cd ${TARGETDIR}; ${LDV} ${GATEPROMADDR} start_${IP27_CONFIG}.o \
${OBJECTS} pvers.o $(LIBKL) -e start -o ../$@
${PERL} zero_csum $@
@echo Created gateprom
${SIZE} -xA $@ ; ${NM} -Bnx $@ | sort > $@.nm
#
# bin2c utility program
#
bin2c: bin2c.c
$(HOST_CC) -n32 -O -s -o bin2c bin2c.c
#
# IO6 false test prom
#
# Use "make ${PRODUCT}io6prom.img" to generate the IO6 PROM image
# Use "make ioprom.hub0" to generate the PROM file for Sable
# (add "setenv iopromfile ioprom" to the sable.key file).
#
io6:
$(MAKE) fake_io6prom TARGETDIR=${PRODUCT}-IO6.O
IO6PROM_ADDR = -T a800000001c00000
IO6PROM_OBJECTS = \
io6entry.o io6prom.o tlb.o
fake_io6prom: ${IO6PROM_OBJECTS}
cd ${TARGETDIR}; \
${LDV} ${IO6PROM_ADDR} ${IO6PROM_OBJECTS} -e entry \
-o ../fake_io6prom
${PRODUCT}io6prom:
@if [ -f fake_io6prom ]; then \
echo "*** Warning: Found fake_io6prom in IP27prom dir; using it"; \
ln -sf fake_io6prom ${PRODUCT}io6prom; \
else \
ln -sf ../IO6prom/${PRODUCT}io6prom ${PRODUCT}io6prom; \
fi
${PRODUCT}io6prom.img: ${PRODUCT}io6prom ${PRODUCT}mdk
${PROMGEN} -o $@ -v "${RELEASE_VER}.${RELEASE_REV}" -V -N io6prom -E ${PRODUCT}io6prom \
-N mdk -E ${PRODUCT}mdk
${PROMGEN} -h $@
${PRODUCT}io6prom.img.c: ${PRODUCT}io6prom.img bin2c
./bin2c -s io6prom < ${PRODUCT}io6prom.img > ${PRODUCT}io6prom.img.c
ioprom.hub0: ${PRODUCT}io6prom.img
cp ${PRODUCT}io6prom.img ${PRODUCT}ioprom.hub0
#
# MDK false test prom
#
# Use "make mdk.img" to generate the MDK PROM image
#
${PRODUCT}mdk:
@if [ ! -f ${PRODUCT}mdk ]; then \
echo "*** No MDK found in current directory" ; \
echo "*** Making a place-holder MDK" ; \
make fake_io6prom ; \
mv fake_io6prom ${PRODUCT}mdk ; \
fi
#
# Mini LED flasher PROM
#
LEDPROM_ADDR = -T ffffffffbfc00000
LEDPROM_OBJECTS = ledprom.o
ledprom: ${LEDPROM_OBJECTS}
cd ${TARGETDIR}; \
${LDV} ${LEDPROM_ADDR} ${LEDPROM_OBJECTS} -e start -o $@
cd ${TARGETDIR}; \
${CONVERT} -f intelhex $@ > $@.hex
cd ${TARGETDIR}; \
dis $@ > $@.dis
#
# Default rule for use with SAMPLE.s.
# Gives us (and hardware folks) an easy way to test
# code snippets loaded into IP27prom.
#
.s: cache.o csu.o libasm.o
$(ASF) $< -c -o $(TARGETDIR)/$@.o
cd ${TARGETDIR}; \
${LDV} -T ffffffffbfc00000 csu.o $@.o cache.o libasm.o \
-e start -o $@;
cd ${TARGETDIR}; \
${CONVERT} -f intelhex $@ > $@.hex
@echo Created $(TARGETDIR)/$@ and $(TARGETDIR)/$@.hex
#
# Misc
#
directory: ${_FORCE}
@if test ! -d ${TARGETDIR}; then mkdir ${TARGETDIR}; fi
pvers.c: ${OBJECTS} ${_FORCE}
${NEWVERS} prom ${RELEASE_VER} ${RELEASE_REV} \
"${RELEASE_INFO}" "${CFLAGS}" > $@
clobber: clean ${COMMONPREF}clobber
rm -rf ${PRODUCT}.O
rm -rf ${PRODUCT}_RTL.O rtlprom rtlprom.nm
rm -rf ${PRODUCT}_GATE.O gateprom gateprom.nm
uunc: prom
rm -f ${PRODUCT}ip27prom.uunc ${PRODUCT}ip27prom.img.uunc
uuencode ${TARGETDIR}/${PRODUCT}ip27prom ${PRODUCT}ip27prom \
> ${PRODUCT}ip27prom.uunc
uuencode ${TARGETDIR}/${PRODUCT}ip27prom.img ${PRODUCT}ip27prom.img \
> ${PRODUCT}ip27prom.img.uunc
install: ${_FORCE}
case ${PRODUCT} { \
SN0|SN0XXL) rm -rf ${PRODUCT}ip27prom ${PRODUCT}ip27prom.img; \
uudecode ${PRODUCT}ip27prom.uunc; \
uudecode ${PRODUCT}ip27prom.img.uunc; \
$(INSTALL) -idb 'mach(CPUBOARD=${CPUBOARD}${SUBPRODUCT})' \
-m 644 -F /usr/cpu/firmware -src ${PRODUCT}ip27prom.img ip27prom.img;; \
}
clean:
if test -d ${TARGETDIR}; then \
cd ${TARGETDIR}; \
rm -f ${LDIRT}; \
for C in ${IP27_CONFIG_LIST}; do \
rm -f $$C.o; \
rm -f ${PRODUCT}ip27prom_$$C; \
rm -f ${PRODUCT}ip27prom_$$C.img; \
rm -f ${PRODUCT}ip27prom_$$C.hex; \
done; \
fi;
rm -f bin2c bist_compile