Add ARM946E cpu and core module targets; remap memory to 0x00000000
Patch by Peter Pearse, 2 Feb 2005
diff --git a/Makefile b/Makefile
index c43cb2e..26fc73d 100644
--- a/Makefile
+++ b/Makefile
@@ -1387,11 +1387,178 @@
 cmc_pu2_config	:	unconfig
 	@./mkconfig $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
 
-integratorap_config :	unconfig
-	@./mkconfig $(@:_config=) arm arm926ejs integratorap
+########################################################################
+## ARM Integrator boards
+## There are two variants /AP && /CP
+## - many different core modules (CMs) can be used
+## - some share characteristics
+## Those without specific cpu support can still use U-Boot
+## provided the ARM boot monitor (or similar) runs before U-Boot
+## to set up the platform e.g. map writeable memory to 0x00000000
+## setup MMU, setup caches etc.
+## Ported cores are:-
+## 	ARM926EJ-S
+## 	ARM946E-S
+##
+########################################################################
+xtract_int_board = $(subst _$(subst integrator$1_,,$(subst _config,,$2)),,$(subst _config,,$2))
+xtract_int_cm    = $(subst integrator$1_,,$(subst _config,,$2))
+#########################################################################
+## Integrator/AP
+#########################################################################
+integratorap_config	:	unconfig
+	@echo -n "/* Integrator configuration implied " >  tmp.fil;	\
+	 echo    " by Makefile target	*/"		>> tmp.fil;	\
+	 echo    					>> tmp.fil 
+	@echo -n "#define CONFIG_INTEGRATOR	1"	>> tmp.fil;	\
+	echo	 "	/* Integrator board	*/"	>> tmp.fil;	\
+	echo  -n "#define CONFIG_ARCH_INTEGRATOR"	>> tmp.fil;	\
+	echo	 "	1	/* Integrator/AP */"	>> tmp.fil;	\
+	echo "/* Core module not defined	*/"	>> tmp.fil;	\
+	echo -n "#define CONFIG_ARM_INTCM	1"	>> tmp.fil;	\
+	echo -n "	/* Integrator core module "	>> tmp.fil;	\
+	echo    "with unknown core	*/"		>> tmp.fil;	\
+	cpu=arm_intcm;							\
+	mv tmp.fil ./include/config.h;					\
+	ubootlds=board/integratorap/u-boot.lds; 			\
+	sed -e 's/cpu\/.*\/st/cpu\/'$$cpu'\/st/' 			\
+	                                   $$ubootlds > $$ubootlds.tmp; \
+	mv -f $$ubootlds.tmp $$ubootlds;				\
+	./mkconfig -a integratorap arm arm_intcm integratorap;
+
+integratorap_CM720T_config		integratorap_CM7TDMI_config	\
+integratorap_CM920T_config		integratorap_CM920T_ETM_config	\
+integratorap_CM922T_XA10_config		integratorap_CM926EJ_S_config	\
+integratorap_CM940T_config		integratorap_CM946E_S_config	\
+integratorap_CM966E_S_config		integratorap_CM10200E_config	\
+integratorap_CM10220E_config		integratorap_CM1026EJ_S_config	\
+integratorap_CM1136JF_S_config	:	unconfig
+	@echo -n "/* Integrator configuration implied " >  tmp.fil;	\
+	 echo    " by Makefile target	*/"		>> tmp.fil;	\
+	 echo    					>> tmp.fil 
+	@echo -n "#define CONFIG_INTEGRATOR	1"	>>  tmp.fil;	\
+	echo	 "	/* Integrator board	*/"	>> tmp.fil;	\
+	echo  -n "#define CONFIG_ARCH_INTEGRATOR"	>> tmp.fil;	\
+	echo	 "	1	/* Integrator/AP */"	>> tmp.fil;	\
+	cm=$(call xtract_int_cm,ap,$@); 				\
+	echo  -n "#define CONFIG_$$cm		"	>> tmp.fil;	\
+	echo     "	/* core module */"		>> tmp.fil;	\
+	case $$cm in							\
+	CM920T)								\
+			echo -n	"#define CONFIG_ARM920" >> tmp.fil;	\
+			echo -n "T	1	/* CPU"	>> tmp.fil;	\
+			echo -n " core is ARM920T"	>> tmp.fil;	\
+			echo    "	*/"		>> tmp.fil;	\
+			cpu=arm920t;;					\
+	CM926EJ_S)	echo -n	"#define CONFIG_ARM926" >> tmp.fil;	\
+			echo -n "EJ_S	1	/* CPU"	>> tmp.fil;	\
+			echo -n " core is ARM926EJ-S"	>> tmp.fil;	\
+			echo    "	*/"		>> tmp.fil;	\
+			cpu=arm926ejs;;					\
+	CM946E_S)	echo -n	"#define CONFIG_ARM946" >> tmp.fil;	\
+			echo -n "E_S	1	/* CPU"	>> tmp.fil;	\
+			echo -n " core is ARM946E-S"	>> tmp.fil;	\
+			echo    "	*/"		>> tmp.fil;	\
+			cpu=arm946es;;					\
+	*)		echo -n "#define CONFIG_ARM_IN"	>> tmp.fil;	\
+			echo -n "TCM	1	/* Int"	>> tmp.fil;	\
+			echo -n "egrator core module w" >> tmp.fil;	\
+			echo -n "ith unported core"	>> tmp.fil;	\
+			echo    "	*/"		>> tmp.fil;	\
+			cpu=arm_intcm;;					\
+	esac; 								\
+	mv tmp.fil ./include/config.h;					\
+	ubootlds=board/$(call xtract_int_board,ap,$@)/u-boot.lds; 	\
+	sed -e 's/cpu\/.*\/st/cpu\/'$$cpu'\/st/' 			\
+	                                   $$ubootlds > $$ubootlds.tmp; \
+	mv -f $$ubootlds.tmp $$ubootlds;				\
+	./mkconfig -a $(call xtract_int_board,ap,$@) arm $$cpu 		\
+	              $(call xtract_int_board,ap,$@);
+
+#########################################################################
+## Integrator/CP
+#########################################################################
+integratorcp_config	:	unconfig
+	@echo -n "/* Integrator configuration implied " >  tmp.fil;	\
+	 echo    " by Makefile target	*/"		>> tmp.fil;	\
+	 echo    					>> tmp.fil 
+	@echo -n "#define CONFIG_INTEGRATOR	1"	>> tmp.fil;	\
+	echo	 "	/* Integrator board	*/"	>> tmp.fil;	\
+	echo  -n "#define CONFIG_ARCH_CINTEGRATOR"	>> tmp.fil;	\
+	echo	 "	1	/* Integrator/CP */"	>> tmp.fil;	\
+	echo     "/* Core module not defined	*/"	>> tmp.fil;	\
+	echo -n "#define CONFIG_ARM_INTCM	1"	>> tmp.fil;	\
+	echo -n "	/* Integrator core module "	>> tmp.fil;	\
+	echo    "with unknown core	*/"		>> tmp.fil;	\
+	cpu=arm_intcm;							\
+	echo -n "#undef CONFIG_CM_MULTIPLE_SSRAM"	>> tmp.fil;	\
+	echo -n "		/* CM may not have "	>> tmp.fil;	\
+	echo    "multiple SSRAM mapping	*/"		>> tmp.fil;	\
+	echo -n "#undef CONFIG_CM_SPD_DETECT	"	>> tmp.fil;	\
+	echo -n "	/* CM may not support SPD "	>> tmp.fil;	\
+	echo    "query */"				>> tmp.fil; 	\
+	echo -n "#undef CONFIG_CM_REMAP		"	>> tmp.fil;	\
+	echo -n "	/* CM may not support "		>> tmp.fil;	\
+	echo    "remapping	*/"			>> tmp.fil; 	\
+	echo -n "#undef CONFIG_CM_INIT		"	>> tmp.fil;	\
+	echo -n "	/* CM may not have  "		>> tmp.fil;	\
+	echo    "initialization reg	*/"		>> tmp.fil; 	\
+	echo -n "#undef CONFIG_CM_TCRAM		"	>> tmp.fil;	\
+	echo -n "	/* CM may not have TCRAM */"	>> tmp.fil; 	\
+	mv tmp.fil ./include/config.h;					\
+	ubootlds=board/integratorcp/u-boot.lds; 			\
+	sed -e 's/cpu\/.*\/st/cpu\/'$$cpu'\/st/' 			\
+	                                   $$ubootlds > $$ubootlds.tmp; \
+	mv -f $$ubootlds.tmp $$ubootlds;				\
+	./mkconfig -a integratorcp arm arm_intcm integratorcp;
 
-integratorcp_config :	unconfig
-	@./mkconfig $(@:_config=) arm arm926ejs integratorcp
+integratorcp_CM920T_config		integratorcp_CM920T_ETM_config	\
+integratorcp_CM922T_XA10_config		integratorcp_CM926EJ_S_config	\
+integratorcp_CM940T_config		integratorcp_CM946E_S_config	\
+integratorcp_CM966E_S_config		integratorcp_CM10200E_config	\
+integratorcp_CM10220E_config		integratorcp_CM1026EJ_S_config	\
+integratorcp_CM1136JF_S_config	:	unconfig
+	@echo -n "/* Integrator configuration implied " >  tmp.fil;	\
+	 echo    " by Makefile target	*/"		>> tmp.fil;	\
+	 echo    					>> tmp.fil 
+	@echo -n "#define CONFIG_INTEGRATOR	1"	>> tmp.fil;	\
+	echo	 "	/* Integrator board	*/"	>> tmp.fil;	\
+	echo  -n "#define CONFIG_ARCH_CINTEGRATOR"	>> tmp.fil;	\
+	echo	 "	1	/* Integrator/CP */"	>> tmp.fil;	\
+	cm=$(call xtract_int_cm,cp,$@); 				\
+	echo  -n "#define CONFIG_$$cm		"	>> tmp.fil;	\
+	echo     "	/* core module */"		>> tmp.fil;	\
+	echo "/* $$cm core module	*/" 		>> tmp.fil;	\
+	case $$cm in							\
+	CM920T)		echo -n	"#define CONFIG_ARM920" >> tmp.fil;	\
+			echo -n "T	1	/* CPU"	>> tmp.fil;	\
+			echo -n " core is ARM920T"	>> tmp.fil;	\
+			echo    "	*/"		>> tmp.fil;	\
+			cpu=arm920t;;					\
+	CM946E_S)	echo -n	"#define CONFIG_ARM946" >> tmp.fil;	\
+			echo -n "E_S	1	/* CPU"	>> tmp.fil;	\
+			echo -n " core is ARM946E-S"	>> tmp.fil;	\
+			echo    "	*/"		>> tmp.fil;	\
+			cpu=arm946es;;					\
+	CM926EJ_S)	echo -n	"#define CONFIG_ARM926" >> tmp.fil;	\
+			echo -n "EJ_S	1	/* CPU"	>> tmp.fil;	\
+			echo -n " core is ARM926EJ-S"	>> tmp.fil;	\
+			echo    "	*/"		>> tmp.fil;	\
+			cpu=arm926ejs;;					\
+	*)		echo -n "#define CONFIG_ARM_IN"	>> tmp.fil;	\
+			echo -n "TCM	1	/* Int"	>> tmp.fil;	\
+			echo -n "egrator core module w" >> tmp.fil;	\
+			echo -n "ith unported core"	>> tmp.fil;	\
+			echo    "	*/"		>> tmp.fil;	\
+			cpu=arm_intcm;;					\
+	esac; 								\
+	mv tmp.fil ./include/config.h;					\
+	ubootlds=board/$(call xtract_int_board,cp,$@)/u-boot.lds; 	\
+	sed -e 's/cpu\/.*\/st/cpu\/'$$cpu'\/st/' 			\
+	                                   $$ubootlds > $$ubootlds.tmp; \
+	mv -f $$ubootlds.tmp $$ubootlds;				\
+	./mkconfig -a $(call xtract_int_board,cp,$@) arm $$cpu 		\
+	              $(call xtract_int_board,cp,$@);
 
 lpd7a400_config \
 lpd7a404_config:	unconfig