Merge samsung, imx, tegra into u-boot-arm/master
This commit merges branches from samsung, imx and tegra meant to fix merge issues between u-boot/master and u-boot-arm/master, as well as a few manual merge fixes.
This commit is contained in:
		
						commit
						96764df1b4
					
				| 
						 | 
					@ -38,12 +38,12 @@
 | 
				
			||||||
/u-boot.sha1
 | 
					/u-boot.sha1
 | 
				
			||||||
/u-boot.dis
 | 
					/u-boot.dis
 | 
				
			||||||
/u-boot.lds
 | 
					/u-boot.lds
 | 
				
			||||||
/u-boot.lst
 | 
					 | 
				
			||||||
/u-boot.ubl
 | 
					/u-boot.ubl
 | 
				
			||||||
/u-boot.ais
 | 
					/u-boot.ais
 | 
				
			||||||
/u-boot.dtb
 | 
					/u-boot.dtb
 | 
				
			||||||
/u-boot.sb
 | 
					/u-boot.sb
 | 
				
			||||||
/u-boot.geany
 | 
					/u-boot.geany
 | 
				
			||||||
 | 
					/include/u-boot.lst
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Generated files
 | 
					# Generated files
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,10 @@
 | 
				
			||||||
# and Cc: the <u-boot@lists.denx.de> mailing list.			#
 | 
					# and Cc: the <u-boot@lists.denx.de> mailing list.			#
 | 
				
			||||||
#									#
 | 
					#									#
 | 
				
			||||||
# Note: lists sorted by Maintainer Name					#
 | 
					# Note: lists sorted by Maintainer Name					#
 | 
				
			||||||
 | 
					# Note: These are the maintainers for specific *boards*.  The		#
 | 
				
			||||||
 | 
					#	custodians for general architectures and subsystems can		#
 | 
				
			||||||
 | 
					#	be found here -- http://www.denx.de/wiki/U-Boot/Custodians	#
 | 
				
			||||||
 | 
					#									#
 | 
				
			||||||
#########################################################################
 | 
					#########################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -388,6 +392,8 @@ Ricardo Ribalda <ricardo.ribalda@uam.es>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Stefan Roese <sr@denx.de>
 | 
					Stefan Roese <sr@denx.de>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						a3m071		MPC5200
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	P3M7448		MPC7448
 | 
						P3M7448		MPC7448
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uc100		MPC857
 | 
						uc100		MPC857
 | 
				
			||||||
| 
						 | 
					@ -800,7 +806,7 @@ Veli-Pekka Peltola <veli-pekka.peltola@bluegiga.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apx4devkit	i.MX28
 | 
						apx4devkit	i.MX28
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Luka Perkov <uboot@lukaperkov.net>
 | 
					Luka Perkov <luka@openwrt.org>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ib62x0		ARM926EJS
 | 
						ib62x0		ARM926EJS
 | 
				
			||||||
	iconnect	ARM926EJS
 | 
						iconnect	ARM926EJS
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										61
									
								
								MAKEALL
								
								
								
								
							
							
						
						
									
										61
									
								
								MAKEALL
								
								
								
								
							| 
						 | 
					@ -20,6 +20,8 @@ usage()
 | 
				
			||||||
	  -m,        --maintainers     List all targets and maintainer email
 | 
						  -m,        --maintainers     List all targets and maintainer email
 | 
				
			||||||
	  -M,        --mails           List all targets and all affilated emails
 | 
						  -M,        --mails           List all targets and all affilated emails
 | 
				
			||||||
	  -C,        --check           Enable build checking
 | 
						  -C,        --check           Enable build checking
 | 
				
			||||||
 | 
						  -n,        --continue        Continue (skip boards already built)
 | 
				
			||||||
 | 
						  -r,        --rebuild-errors  Rebuild any boards that errored
 | 
				
			||||||
	  -h,        --help            This help output
 | 
						  -h,        --help            This help output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Selections by these options are logically ANDed; if the same option
 | 
						Selections by these options are logically ANDed; if the same option
 | 
				
			||||||
| 
						 | 
					@ -52,8 +54,8 @@ usage()
 | 
				
			||||||
	exit ${ret}
 | 
						exit ${ret}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SHORT_OPTS="ha:c:v:s:lmMC"
 | 
					SHORT_OPTS="ha:c:v:s:lmMCnr"
 | 
				
			||||||
LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers,mails,check"
 | 
					LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers,mails,check,continue,rebuild-errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Option processing based on util-linux-2.13/getopt-parse.bash
 | 
					# Option processing based on util-linux-2.13/getopt-parse.bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,6 +75,8 @@ SELECTED=''
 | 
				
			||||||
ONLY_LIST=''
 | 
					ONLY_LIST=''
 | 
				
			||||||
PRINT_MAINTS=''
 | 
					PRINT_MAINTS=''
 | 
				
			||||||
MAINTAINERS_ONLY=''
 | 
					MAINTAINERS_ONLY=''
 | 
				
			||||||
 | 
					CONTINUE=''
 | 
				
			||||||
 | 
					REBUILD_ERRORS=''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
while true ; do
 | 
					while true ; do
 | 
				
			||||||
	case "$1" in
 | 
						case "$1" in
 | 
				
			||||||
| 
						 | 
					@ -115,6 +119,12 @@ while true ; do
 | 
				
			||||||
	-C|--check)
 | 
						-C|--check)
 | 
				
			||||||
		CHECK='C=1'
 | 
							CHECK='C=1'
 | 
				
			||||||
		shift ;;
 | 
							shift ;;
 | 
				
			||||||
 | 
						-n|--continue)
 | 
				
			||||||
 | 
							CONTINUE='y'
 | 
				
			||||||
 | 
							shift ;;
 | 
				
			||||||
 | 
						-r|--rebuild-errors)
 | 
				
			||||||
 | 
							REBUILD_ERRORS='y'
 | 
				
			||||||
 | 
							shift ;;
 | 
				
			||||||
	-l|--list)
 | 
						-l|--list)
 | 
				
			||||||
		ONLY_LIST='y'
 | 
							ONLY_LIST='y'
 | 
				
			||||||
		shift ;;
 | 
							shift ;;
 | 
				
			||||||
| 
						 | 
					@ -198,7 +208,9 @@ fi
 | 
				
			||||||
OUTPUT_PREFIX="${BUILD_DIR}"
 | 
					OUTPUT_PREFIX="${BUILD_DIR}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ -d ${LOG_DIR} ] || mkdir "${LOG_DIR}" || exit 1
 | 
					[ -d ${LOG_DIR} ] || mkdir "${LOG_DIR}" || exit 1
 | 
				
			||||||
 | 
					if [ "$CONTINUE" != 'y' -a "$REBUILD_ERRORS" != 'y' ] ; then
 | 
				
			||||||
	find "${LOG_DIR}/" -type f -exec rm -f {} +
 | 
						find "${LOG_DIR}/" -type f -exec rm -f {} +
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIST=""
 | 
					LIST=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -208,6 +220,7 @@ ERR_LIST=""
 | 
				
			||||||
WRN_CNT=0
 | 
					WRN_CNT=0
 | 
				
			||||||
WRN_LIST=""
 | 
					WRN_LIST=""
 | 
				
			||||||
TOTAL_CNT=0
 | 
					TOTAL_CNT=0
 | 
				
			||||||
 | 
					SKIP_CNT=0
 | 
				
			||||||
CURRENT_CNT=0
 | 
					CURRENT_CNT=0
 | 
				
			||||||
OLDEST_IDX=1
 | 
					OLDEST_IDX=1
 | 
				
			||||||
RC=0
 | 
					RC=0
 | 
				
			||||||
| 
						 | 
					@ -380,6 +393,12 @@ LIST_pxa="$(boards_by_cpu pxa)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIST_ixp="$(boards_by_cpu ixp)"
 | 
					LIST_ixp="$(boards_by_cpu ixp)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#########################################################################
 | 
				
			||||||
 | 
					## SPEAr Systems
 | 
				
			||||||
 | 
					#########################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LIST_spear="$(boards_by_soc spear)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#########################################################################
 | 
					#########################################################################
 | 
				
			||||||
## ARM groups
 | 
					## ARM groups
 | 
				
			||||||
#########################################################################
 | 
					#########################################################################
 | 
				
			||||||
| 
						 | 
					@ -610,6 +629,13 @@ list_target() {
 | 
				
			||||||
donep="${LOG_DIR}/._done_"
 | 
					donep="${LOG_DIR}/._done_"
 | 
				
			||||||
skipp="${LOG_DIR}/._skip_"
 | 
					skipp="${LOG_DIR}/._skip_"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					build_target_killed() {
 | 
				
			||||||
 | 
						echo "Aborted $target build."
 | 
				
			||||||
 | 
						# Remove the logs for this board since it was aborted
 | 
				
			||||||
 | 
						rm -f ${LOG_DIR}/$target.MAKELOG ${LOG_DIR}/$target.ERR
 | 
				
			||||||
 | 
						exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
build_target() {
 | 
					build_target() {
 | 
				
			||||||
	target=$1
 | 
						target=$1
 | 
				
			||||||
	build_idx=$2
 | 
						build_idx=$2
 | 
				
			||||||
| 
						 | 
					@ -622,6 +648,7 @@ build_target() {
 | 
				
			||||||
	if [ $BUILD_MANY == 1 ] ; then
 | 
						if [ $BUILD_MANY == 1 ] ; then
 | 
				
			||||||
		output_dir="${OUTPUT_PREFIX}/${target}"
 | 
							output_dir="${OUTPUT_PREFIX}/${target}"
 | 
				
			||||||
		mkdir -p "${output_dir}"
 | 
							mkdir -p "${output_dir}"
 | 
				
			||||||
 | 
							trap build_target_killed TERM
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		output_dir="${OUTPUT_PREFIX}"
 | 
							output_dir="${OUTPUT_PREFIX}"
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
| 
						 | 
					@ -640,6 +667,8 @@ build_target() {
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if [ $BUILD_MANY == 1 ] ; then
 | 
						if [ $BUILD_MANY == 1 ] ; then
 | 
				
			||||||
 | 
							trap - TERM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		${MAKE} -s tidy
 | 
							${MAKE} -s tidy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if [ -s ${LOG_DIR}/${target}.ERR ] ; then
 | 
							if [ -s ${LOG_DIR}/${target}.ERR ] ; then
 | 
				
			||||||
| 
						 | 
					@ -718,10 +747,20 @@ build_targets() {
 | 
				
			||||||
			: $((CURRENT_CNT += 1))
 | 
								: $((CURRENT_CNT += 1))
 | 
				
			||||||
			rm -f "${donep}${TOTAL_CNT}"
 | 
								rm -f "${donep}${TOTAL_CNT}"
 | 
				
			||||||
			rm -f "${skipp}${TOTAL_CNT}"
 | 
								rm -f "${skipp}${TOTAL_CNT}"
 | 
				
			||||||
 | 
								if [ "$CONTINUE" = 'y' -a -e ${LOG_DIR}/$t.MAKELOG ] ; then
 | 
				
			||||||
 | 
									: $((SKIP_CNT += 1))
 | 
				
			||||||
 | 
									touch "${donep}${TOTAL_CNT}"
 | 
				
			||||||
 | 
								elif [ "$REBUILD_ERRORS" = 'y' -a ! -e ${LOG_DIR}/$t.ERR ] ; then
 | 
				
			||||||
 | 
									: $((SKIP_CNT += 1))
 | 
				
			||||||
 | 
									touch "${donep}${TOTAL_CNT}"
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
				if [ $BUILD_MANY == 1 ] ; then
 | 
									if [ $BUILD_MANY == 1 ] ; then
 | 
				
			||||||
					build_target ${t} ${TOTAL_CNT} &
 | 
										build_target ${t} ${TOTAL_CNT} &
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
 | 
										CUR_TGT="${t}"
 | 
				
			||||||
					build_target ${t} ${TOTAL_CNT}
 | 
										build_target ${t} ${TOTAL_CNT}
 | 
				
			||||||
 | 
										CUR_TGT=''
 | 
				
			||||||
 | 
									fi
 | 
				
			||||||
			fi
 | 
								fi
 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -745,7 +784,11 @@ build_targets() {
 | 
				
			||||||
#-----------------------------------------------------------------------
 | 
					#-----------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
kill_children() {
 | 
					kill_children() {
 | 
				
			||||||
	kill -- "-$1"
 | 
						local pgid=`ps -p $$ --no-headers -o "%r" | tr -d ' '`
 | 
				
			||||||
 | 
						local children=`pgrep -g $pgid | grep -v $$ | grep -v $pgid`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						kill $children 2> /dev/null
 | 
				
			||||||
 | 
						wait $children 2> /dev/null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	exit
 | 
						exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -753,6 +796,9 @@ kill_children() {
 | 
				
			||||||
print_stats() {
 | 
					print_stats() {
 | 
				
			||||||
	if [ "$ONLY_LIST" == 'y' ] ; then return ; fi
 | 
						if [ "$ONLY_LIST" == 'y' ] ; then return ; fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Only count boards that completed
 | 
				
			||||||
 | 
						: $((TOTAL_CNT = `find ${skipp}* 2> /dev/null | wc -l`))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rm -f ${donep}* ${skipp}*
 | 
						rm -f ${donep}* ${skipp}*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then
 | 
						if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then
 | 
				
			||||||
| 
						 | 
					@ -762,10 +808,17 @@ print_stats() {
 | 
				
			||||||
		WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/`
 | 
							WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/`
 | 
				
			||||||
		WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done`
 | 
							WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done`
 | 
				
			||||||
		WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'`
 | 
							WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'`
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							# Remove the logs for any board that was interrupted
 | 
				
			||||||
 | 
							rm -f ${LOG_DIR}/${CUR_TGT}.MAKELOG ${LOG_DIR}/${CUR_TGT}.ERR
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						: $((TOTAL_CNT -= ${SKIP_CNT}))
 | 
				
			||||||
	echo ""
 | 
						echo ""
 | 
				
			||||||
	echo "--------------------- SUMMARY ----------------------------"
 | 
						echo "--------------------- SUMMARY ----------------------------"
 | 
				
			||||||
 | 
						if [ "$CONTINUE" = 'y' -o "$REBUILD_ERRORS" = 'y' ] ; then
 | 
				
			||||||
 | 
							echo "Boards skipped: ${SKIP_CNT}"
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
	echo "Boards compiled: ${TOTAL_CNT}"
 | 
						echo "Boards compiled: ${TOTAL_CNT}"
 | 
				
			||||||
	if [ ${ERR_CNT} -gt 0 ] ; then
 | 
						if [ ${ERR_CNT} -gt 0 ] ; then
 | 
				
			||||||
		echo "Boards with errors: ${ERR_CNT} (${ERR_LIST} )"
 | 
							echo "Boards with errors: ${ERR_CNT} (${ERR_LIST} )"
 | 
				
			||||||
| 
						 | 
					@ -776,7 +829,7 @@ print_stats() {
 | 
				
			||||||
	echo "----------------------------------------------------------"
 | 
						echo "----------------------------------------------------------"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if [ $BUILD_MANY == 1 ] ; then
 | 
						if [ $BUILD_MANY == 1 ] ; then
 | 
				
			||||||
		kill_children $$ &
 | 
							kill_children
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	exit $RC
 | 
						exit $RC
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										64
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										64
									
								
								Makefile
								
								
								
								
							| 
						 | 
					@ -24,7 +24,7 @@
 | 
				
			||||||
VERSION = 2013
 | 
					VERSION = 2013
 | 
				
			||||||
PATCHLEVEL = 01
 | 
					PATCHLEVEL = 01
 | 
				
			||||||
SUBLEVEL =
 | 
					SUBLEVEL =
 | 
				
			||||||
EXTRAVERSION = -rc1
 | 
					EXTRAVERSION = -rc2
 | 
				
			||||||
ifneq "$(SUBLEVEL)" ""
 | 
					ifneq "$(SUBLEVEL)" ""
 | 
				
			||||||
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 | 
					U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
| 
						 | 
					@ -231,8 +231,8 @@ endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OBJS  = $(CPUDIR)/start.o
 | 
					OBJS  = $(CPUDIR)/start.o
 | 
				
			||||||
ifeq ($(CPU),x86)
 | 
					ifeq ($(CPU),x86)
 | 
				
			||||||
OBJS += $(CPUDIR)/start16.o
 | 
					RESET_OBJS-$(CONFIG_X86_NO_RESET_VECTOR) += $(CPUDIR)/start16.o
 | 
				
			||||||
OBJS += $(CPUDIR)/resetvec.o
 | 
					RESET_OBJS-$(CONFIG_X86_NO_RESET_VECTOR) += $(CPUDIR)/resetvec.o
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
ifeq ($(CPU),ppc4xx)
 | 
					ifeq ($(CPU),ppc4xx)
 | 
				
			||||||
OBJS += $(CPUDIR)/resetvec.o
 | 
					OBJS += $(CPUDIR)/resetvec.o
 | 
				
			||||||
| 
						 | 
					@ -241,7 +241,7 @@ ifeq ($(CPU),mpc85xx)
 | 
				
			||||||
OBJS += $(CPUDIR)/resetvec.o
 | 
					OBJS += $(CPUDIR)/resetvec.o
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OBJS := $(addprefix $(obj),$(OBJS))
 | 
					OBJS := $(addprefix $(obj),$(OBJS) $(RESET_OBJS-))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HAVE_VENDOR_COMMON_LIB = $(if $(wildcard board/$(VENDOR)/common/Makefile),y,n)
 | 
					HAVE_VENDOR_COMMON_LIB = $(if $(wildcard board/$(VENDOR)/common/Makefile),y,n)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -293,7 +293,10 @@ LIBS-y += drivers/net/libnet.o
 | 
				
			||||||
LIBS-y += drivers/net/phy/libphy.o
 | 
					LIBS-y += drivers/net/phy/libphy.o
 | 
				
			||||||
LIBS-y += drivers/pci/libpci.o
 | 
					LIBS-y += drivers/pci/libpci.o
 | 
				
			||||||
LIBS-y += drivers/pcmcia/libpcmcia.o
 | 
					LIBS-y += drivers/pcmcia/libpcmcia.o
 | 
				
			||||||
LIBS-y += drivers/power/libpower.o
 | 
					LIBS-y += drivers/power/libpower.o \
 | 
				
			||||||
 | 
						drivers/power/fuel_gauge/libfuel_gauge.o \
 | 
				
			||||||
 | 
						drivers/power/pmic/libpmic.o \
 | 
				
			||||||
 | 
						drivers/power/battery/libbattery.o
 | 
				
			||||||
LIBS-y += drivers/spi/libspi.o
 | 
					LIBS-y += drivers/spi/libspi.o
 | 
				
			||||||
LIBS-y += drivers/dfu/libdfu.o
 | 
					LIBS-y += drivers/dfu/libdfu.o
 | 
				
			||||||
ifeq ($(CPU),mpc83xx)
 | 
					ifeq ($(CPU),mpc83xx)
 | 
				
			||||||
| 
						 | 
					@ -320,6 +323,7 @@ LIBS-y += drivers/usb/eth/libusb_eth.o
 | 
				
			||||||
LIBS-y += drivers/usb/gadget/libusb_gadget.o
 | 
					LIBS-y += drivers/usb/gadget/libusb_gadget.o
 | 
				
			||||||
LIBS-y += drivers/usb/host/libusb_host.o
 | 
					LIBS-y += drivers/usb/host/libusb_host.o
 | 
				
			||||||
LIBS-y += drivers/usb/musb/libusb_musb.o
 | 
					LIBS-y += drivers/usb/musb/libusb_musb.o
 | 
				
			||||||
 | 
					LIBS-y += drivers/usb/musb-new/libusb_musb-new.o
 | 
				
			||||||
LIBS-y += drivers/usb/phy/libusb_phy.o
 | 
					LIBS-y += drivers/usb/phy/libusb_phy.o
 | 
				
			||||||
LIBS-y += drivers/usb/ulpi/libusb_ulpi.o
 | 
					LIBS-y += drivers/usb/ulpi/libusb_ulpi.o
 | 
				
			||||||
LIBS-y += drivers/video/libvideo.o
 | 
					LIBS-y += drivers/video/libvideo.o
 | 
				
			||||||
| 
						 | 
					@ -387,12 +391,12 @@ __LIBS := $(subst $(obj),,$(LIBS)) $(subst $(obj),,$(LIBBOARD))
 | 
				
			||||||
ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
 | 
					ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
 | 
				
			||||||
BOARD_SIZE_CHECK = \
 | 
					BOARD_SIZE_CHECK = \
 | 
				
			||||||
	@actual=`wc -c $@ | awk '{print $$1}'`; \
 | 
						@actual=`wc -c $@ | awk '{print $$1}'`; \
 | 
				
			||||||
	limit=$(CONFIG_BOARD_SIZE_LIMIT); \
 | 
						limit=`printf "%d" $(CONFIG_BOARD_SIZE_LIMIT)`; \
 | 
				
			||||||
	if test $$actual -gt $$limit; then \
 | 
						if test $$actual -gt $$limit; then \
 | 
				
			||||||
		echo "$@ exceeds file size limit:"; \
 | 
							echo "$@ exceeds file size limit:" >&2 ; \
 | 
				
			||||||
		echo "  limit:  $$limit bytes"; \
 | 
							echo "  limit:  $$limit bytes" >&2 ; \
 | 
				
			||||||
		echo "  actual: $$actual bytes"; \
 | 
							echo "  actual: $$actual bytes" >&2 ; \
 | 
				
			||||||
		echo "  excess: $$((actual - limit)) bytes"; \
 | 
							echo "  excess: $$((actual - limit)) bytes" >&2; \
 | 
				
			||||||
		exit 1; \
 | 
							exit 1; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
| 
						 | 
					@ -405,6 +409,7 @@ ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map
 | 
				
			||||||
ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin
 | 
					ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin
 | 
				
			||||||
ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin
 | 
					ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin
 | 
				
			||||||
ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin
 | 
					ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin
 | 
				
			||||||
 | 
					ALL-$(CONFIG_SPL) += $(obj)$(subst ",,$(CONFIG_SPL_TARGET))
 | 
				
			||||||
ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin
 | 
					ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# enable combined SPL/u-boot/dtb rules for tegra
 | 
					# enable combined SPL/u-boot/dtb rules for tegra
 | 
				
			||||||
| 
						 | 
					@ -446,9 +451,18 @@ $(obj)u-boot.ldr.hex:	$(obj)u-boot.ldr
 | 
				
			||||||
$(obj)u-boot.ldr.srec:	$(obj)u-boot.ldr
 | 
					$(obj)u-boot.ldr.srec:	$(obj)u-boot.ldr
 | 
				
			||||||
		$(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary
 | 
							$(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# U-Boot entry point, needed for booting of full-blown U-Boot
 | 
				
			||||||
 | 
					# from the SPL U-Boot version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					ifndef CONFIG_SYS_UBOOT_START
 | 
				
			||||||
 | 
					CONFIG_SYS_UBOOT_START := 0
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)u-boot.img:	$(obj)u-boot.bin
 | 
					$(obj)u-boot.img:	$(obj)u-boot.bin
 | 
				
			||||||
		$(obj)tools/mkimage -A $(ARCH) -T firmware -C none \
 | 
							$(obj)tools/mkimage -A $(ARCH) -T firmware -C none \
 | 
				
			||||||
		-O u-boot -a $(CONFIG_SYS_TEXT_BASE) -e 0 \
 | 
							-O u-boot -a $(CONFIG_SYS_TEXT_BASE) \
 | 
				
			||||||
 | 
							-e $(CONFIG_SYS_UBOOT_START) \
 | 
				
			||||||
		-n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
 | 
							-n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
 | 
				
			||||||
			sed -e 's/"[	 ]*$$/ for $(BOARD) board"/') \
 | 
								sed -e 's/"[	 ]*$$/ for $(BOARD) board"/') \
 | 
				
			||||||
		-d $< $@
 | 
							-d $< $@
 | 
				
			||||||
| 
						 | 
					@ -472,14 +486,15 @@ $(obj)u-boot.sha1:	$(obj)u-boot.bin
 | 
				
			||||||
$(obj)u-boot.dis:	$(obj)u-boot
 | 
					$(obj)u-boot.dis:	$(obj)u-boot
 | 
				
			||||||
		$(OBJDUMP) -d $< > $@
 | 
							$(OBJDUMP) -d $< > $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)u-boot.ubl:       $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
 | 
					$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
 | 
				
			||||||
		$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $(obj)spl/u-boot-spl $(obj)spl/u-boot-spl-pad.bin
 | 
							$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $(obj)spl/u-boot-spl $(obj)spl/u-boot-spl-pad.bin
 | 
				
			||||||
		cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $(obj)u-boot-ubl.bin
 | 
							cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $@
 | 
				
			||||||
		$(obj)tools/mkimage -n $(UBL_CONFIG) -T ublimage \
 | 
					 | 
				
			||||||
		-e $(CONFIG_SYS_TEXT_BASE) -d $(obj)u-boot-ubl.bin $(obj)u-boot.ubl
 | 
					 | 
				
			||||||
		rm $(obj)u-boot-ubl.bin
 | 
					 | 
				
			||||||
		rm $(obj)spl/u-boot-spl-pad.bin
 | 
							rm $(obj)spl/u-boot-spl-pad.bin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(obj)u-boot.ubl:       $(obj)u-boot-with-spl.bin
 | 
				
			||||||
 | 
							$(obj)tools/mkimage -n $(UBL_CONFIG) -T ublimage \
 | 
				
			||||||
 | 
							-e $(CONFIG_SYS_TEXT_BASE) -d $< $(obj)u-boot.ubl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)u-boot.ais:       $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
 | 
					$(obj)u-boot.ais:       $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
 | 
				
			||||||
		$(obj)tools/mkimage -s -n $(if $(CONFIG_AIS_CONFIG_FILE),$(CONFIG_AIS_CONFIG_FILE),"/dev/null") \
 | 
							$(obj)tools/mkimage -s -n $(if $(CONFIG_AIS_CONFIG_FILE),$(CONFIG_AIS_CONFIG_FILE),"/dev/null") \
 | 
				
			||||||
			-T aisimage \
 | 
								-T aisimage \
 | 
				
			||||||
| 
						 | 
					@ -496,7 +511,7 @@ $(obj)u-boot.ais:       $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
 | 
				
			||||||
ELFTOSB_TARGET-$(CONFIG_MX28) = imx28
 | 
					ELFTOSB_TARGET-$(CONFIG_MX28) = imx28
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)u-boot.sb:       $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin
 | 
					$(obj)u-boot.sb:       $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin
 | 
				
			||||||
		elftosb -zdf $(ELFTOSB_TARGET-y) -c $(TOPDIR)/$(CPUDIR)/$(SOC)/u-boot-$(ELFTOSB_TARGET-y).bd \
 | 
							elftosb -zf $(ELFTOSB_TARGET-y) -c $(TOPDIR)/$(CPUDIR)/$(SOC)/u-boot-$(ELFTOSB_TARGET-y).bd \
 | 
				
			||||||
			-o $(obj)u-boot.sb
 | 
								-o $(obj)u-boot.sb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
 | 
					# On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
 | 
				
			||||||
| 
						 | 
					@ -530,6 +545,9 @@ $(obj)u-boot-$(nodtb)-tegra.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin $(dtb
 | 
				
			||||||
		rm $(obj)spl/u-boot-spl-pad.bin
 | 
							rm $(obj)spl/u-boot-spl-pad.bin
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(obj)u-boot-img.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
 | 
				
			||||||
 | 
							cat $(obj)spl/u-boot-spl.bin $(obj)u-boot.img > $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(CONFIG_SANDBOX),y)
 | 
					ifeq ($(CONFIG_SANDBOX),y)
 | 
				
			||||||
GEN_UBOOT = \
 | 
					GEN_UBOOT = \
 | 
				
			||||||
		cd $(LNDIR) && $(CC) $(SYMS) -T $(obj)u-boot.lds \
 | 
							cd $(LNDIR) && $(CC) $(SYMS) -T $(obj)u-boot.lds \
 | 
				
			||||||
| 
						 | 
					@ -639,6 +657,16 @@ checkthumb:
 | 
				
			||||||
		echo '*** Your board is configured for THUMB mode.'; \
 | 
							echo '*** Your board is configured for THUMB mode.'; \
 | 
				
			||||||
		false; \
 | 
							false; \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# GCC 3.x is reported to have problems generating the type of relocation
 | 
				
			||||||
 | 
					# that U-Boot wants.
 | 
				
			||||||
 | 
					# See http://lists.denx.de/pipermail/u-boot/2012-September/135156.html
 | 
				
			||||||
 | 
					checkgcc4:
 | 
				
			||||||
 | 
						@if test $(call cc-version) -lt 0400; then \
 | 
				
			||||||
 | 
							echo -n '*** Your GCC is too old, please upgrade to GCC 4.x or newer'; \
 | 
				
			||||||
 | 
							false; \
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Auto-generate the autoconf.mk file (which is included by all makefiles)
 | 
					# Auto-generate the autoconf.mk file (which is included by all makefiles)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					@ -812,7 +840,7 @@ clean:
 | 
				
			||||||
	@rm -f $(obj)include/generated/asm-offsets.h
 | 
						@rm -f $(obj)include/generated/asm-offsets.h
 | 
				
			||||||
	@rm -f $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s
 | 
						@rm -f $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s
 | 
				
			||||||
	@rm -f $(TIMESTAMP_FILE) $(VERSION_FILE)
 | 
						@rm -f $(TIMESTAMP_FILE) $(VERSION_FILE)
 | 
				
			||||||
	@$(MAKE) -C doc/DocBook/ cleandocs
 | 
						@$(MAKE) -s -C doc/DocBook/ cleandocs
 | 
				
			||||||
	@find $(OBJTREE) -type f \
 | 
						@find $(OBJTREE) -type f \
 | 
				
			||||||
		\( -name 'core' -o -name '*.bak' -o -name '*~' -o -name '*.su' \
 | 
							\( -name 'core' -o -name '*.bak' -o -name '*~' -o -name '*.su' \
 | 
				
			||||||
		-o -name '*.o'	-o -name '*.a' -o -name '*.exe'	\) -print \
 | 
							-o -name '*.o'	-o -name '*.a' -o -name '*.exe'	\) -print \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										199
									
								
								README
								
								
								
								
							
							
						
						
									
										199
									
								
								README
								
								
								
								
							| 
						 | 
					@ -54,6 +54,11 @@ In case of problems see the CHANGELOG and CREDITS files to find out
 | 
				
			||||||
who contributed the specific port. The MAINTAINERS file lists board
 | 
					who contributed the specific port. The MAINTAINERS file lists board
 | 
				
			||||||
maintainers.
 | 
					maintainers.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note: There is no CHANGELOG file in the actual U-Boot source tree;
 | 
				
			||||||
 | 
					it can be created dynamically from the Git log using:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						make CHANGELOG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Where to get help:
 | 
					Where to get help:
 | 
				
			||||||
==================
 | 
					==================
 | 
				
			||||||
| 
						 | 
					@ -810,6 +815,8 @@ The following options need to be configured:
 | 
				
			||||||
		CONFIG_CMD_EDITENV	  edit env variable
 | 
							CONFIG_CMD_EDITENV	  edit env variable
 | 
				
			||||||
		CONFIG_CMD_EEPROM	* EEPROM read/write support
 | 
							CONFIG_CMD_EEPROM	* EEPROM read/write support
 | 
				
			||||||
		CONFIG_CMD_ELF		* bootelf, bootvx
 | 
							CONFIG_CMD_ELF		* bootelf, bootvx
 | 
				
			||||||
 | 
							CONFIG_CMD_ENV_CALLBACK	* display details about env callbacks
 | 
				
			||||||
 | 
							CONFIG_CMD_ENV_FLAGS	* display details about env flags
 | 
				
			||||||
		CONFIG_CMD_EXPORTENV	* export the environment
 | 
							CONFIG_CMD_EXPORTENV	* export the environment
 | 
				
			||||||
		CONFIG_CMD_EXT2		* ext2 command support
 | 
							CONFIG_CMD_EXT2		* ext2 command support
 | 
				
			||||||
		CONFIG_CMD_EXT4		* ext4 command support
 | 
							CONFIG_CMD_EXT4		* ext4 command support
 | 
				
			||||||
| 
						 | 
					@ -819,8 +826,10 @@ The following options need to be configured:
 | 
				
			||||||
		CONFIG_CMD_FDOS		* Dos diskette Support
 | 
							CONFIG_CMD_FDOS		* Dos diskette Support
 | 
				
			||||||
		CONFIG_CMD_FLASH	  flinfo, erase, protect
 | 
							CONFIG_CMD_FLASH	  flinfo, erase, protect
 | 
				
			||||||
		CONFIG_CMD_FPGA		  FPGA device initialization support
 | 
							CONFIG_CMD_FPGA		  FPGA device initialization support
 | 
				
			||||||
 | 
							CONFIG_CMD_GETTIME	* Get time since boot
 | 
				
			||||||
		CONFIG_CMD_GO		* the 'go' command (exec code)
 | 
							CONFIG_CMD_GO		* the 'go' command (exec code)
 | 
				
			||||||
		CONFIG_CMD_GREPENV	* search environment
 | 
							CONFIG_CMD_GREPENV	* search environment
 | 
				
			||||||
 | 
							CONFIG_CMD_HASH		* calculate hash / digest
 | 
				
			||||||
		CONFIG_CMD_HWFLOW	* RTS/CTS hw flow control
 | 
							CONFIG_CMD_HWFLOW	* RTS/CTS hw flow control
 | 
				
			||||||
		CONFIG_CMD_I2C		* I2C serial bus support
 | 
							CONFIG_CMD_I2C		* I2C serial bus support
 | 
				
			||||||
		CONFIG_CMD_IDE		* IDE harddisk support
 | 
							CONFIG_CMD_IDE		* IDE harddisk support
 | 
				
			||||||
| 
						 | 
					@ -855,6 +864,7 @@ The following options need to be configured:
 | 
				
			||||||
		CONFIG_CMD_PING		* send ICMP ECHO_REQUEST to network
 | 
							CONFIG_CMD_PING		* send ICMP ECHO_REQUEST to network
 | 
				
			||||||
					  host
 | 
										  host
 | 
				
			||||||
		CONFIG_CMD_PORTIO	* Port I/O
 | 
							CONFIG_CMD_PORTIO	* Port I/O
 | 
				
			||||||
 | 
							CONFIG_CMD_READ		* Read raw data from partition
 | 
				
			||||||
		CONFIG_CMD_REGINFO	* Register dump
 | 
							CONFIG_CMD_REGINFO	* Register dump
 | 
				
			||||||
		CONFIG_CMD_RUN		  run command in env variable
 | 
							CONFIG_CMD_RUN		  run command in env variable
 | 
				
			||||||
		CONFIG_CMD_SAVES	* save S record dump
 | 
							CONFIG_CMD_SAVES	* save S record dump
 | 
				
			||||||
| 
						 | 
					@ -1409,6 +1419,13 @@ CBFS (Coreboot Filesystem) support
 | 
				
			||||||
		boot.  See the documentation file README.video for a
 | 
							boot.  See the documentation file README.video for a
 | 
				
			||||||
		description of this variable.
 | 
							description of this variable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_VIDEO_VGA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Enable the VGA video / BIOS for x86. The alternative if you
 | 
				
			||||||
 | 
							are using coreboot is to use the coreboot frame buffer
 | 
				
			||||||
 | 
							driver.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Keyboard Support:
 | 
					- Keyboard Support:
 | 
				
			||||||
		CONFIG_KEYBOARD
 | 
							CONFIG_KEYBOARD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1469,7 +1486,6 @@ CBFS (Coreboot Filesystem) support
 | 
				
			||||||
		Normally display is black on white background; define
 | 
							Normally display is black on white background; define
 | 
				
			||||||
		CONFIG_SYS_WHITE_ON_BLACK to get it inverted.
 | 
							CONFIG_SYS_WHITE_ON_BLACK to get it inverted.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
		CONFIG_LCD_ALIGNMENT
 | 
							CONFIG_LCD_ALIGNMENT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Normally the LCD is page-aligned (tyically 4KB). If this is
 | 
							Normally the LCD is page-aligned (tyically 4KB). If this is
 | 
				
			||||||
| 
						 | 
					@ -1485,6 +1501,15 @@ CBFS (Coreboot Filesystem) support
 | 
				
			||||||
		the console jump but can help speed up operation when scrolling
 | 
							the console jump but can help speed up operation when scrolling
 | 
				
			||||||
		is slow.
 | 
							is slow.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_LCD_BMP_RLE8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Support drawing of RLE8-compressed bitmaps on the LCD.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_I2C_EDID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Enables an 'i2c edid' command which can read EDID
 | 
				
			||||||
 | 
							information over I2C from an attached LCD display.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Splash Screen Support: CONFIG_SPLASH_SCREEN
 | 
					- Splash Screen Support: CONFIG_SPLASH_SCREEN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		If this option is set, the environment is checked for
 | 
							If this option is set, the environment is checked for
 | 
				
			||||||
| 
						 | 
					@ -2178,6 +2203,11 @@ CBFS (Coreboot Filesystem) support
 | 
				
			||||||
		serial# is unaffected by this, i. e. it remains
 | 
							serial# is unaffected by this, i. e. it remains
 | 
				
			||||||
		read-only.]
 | 
							read-only.]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							The same can be accomplished in a more flexible way
 | 
				
			||||||
 | 
							for any variable by configuring the type of access
 | 
				
			||||||
 | 
							to allow for those variables in the ".flags" variable
 | 
				
			||||||
 | 
							or define CONFIG_ENV_FLAGS_LIST_STATIC.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Protected RAM:
 | 
					- Protected RAM:
 | 
				
			||||||
		CONFIG_PRAM
 | 
							CONFIG_PRAM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2211,6 +2241,14 @@ CBFS (Coreboot Filesystem) support
 | 
				
			||||||
			HERMES, IP860, RPXlite, LWMON,
 | 
								HERMES, IP860, RPXlite, LWMON,
 | 
				
			||||||
			FLAGADM, TQM8260
 | 
								FLAGADM, TQM8260
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Access to physical memory region (> 4GB)
 | 
				
			||||||
 | 
							Some basic support is provided for operations on memory not
 | 
				
			||||||
 | 
							normally accessible to U-Boot - e.g. some architectures
 | 
				
			||||||
 | 
							support access to more than 4GB of memory on 32-bit
 | 
				
			||||||
 | 
							machines using physical address extension or similar.
 | 
				
			||||||
 | 
							Define CONFIG_PHYSMEM to access this basic support, which
 | 
				
			||||||
 | 
							currently only supports clearing the memory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Error Recovery:
 | 
					- Error Recovery:
 | 
				
			||||||
		CONFIG_PANIC_HANG
 | 
							CONFIG_PANIC_HANG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2400,6 +2438,23 @@ CBFS (Coreboot Filesystem) support
 | 
				
			||||||
		A better solution is to properly configure the firewall,
 | 
							A better solution is to properly configure the firewall,
 | 
				
			||||||
		but sometimes that is not allowed.
 | 
							but sometimes that is not allowed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Hashing support:
 | 
				
			||||||
 | 
							CONFIG_CMD_HASH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							This enables a generic 'hash' command which can produce
 | 
				
			||||||
 | 
							hashes / digests from a few algorithms (e.g. SHA1, SHA256).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_HASH_VERIFY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Enable the hash verify command (hash -v). This adds to code
 | 
				
			||||||
 | 
							size a little.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_SHA1 - support SHA1 hashing
 | 
				
			||||||
 | 
							CONFIG_SHA256 - support SHA256 hashing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Note: There is also a sha1sum command, which should perhaps
 | 
				
			||||||
 | 
							be deprecated in favour of 'hash sha1'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Show boot progress:
 | 
					- Show boot progress:
 | 
				
			||||||
		CONFIG_SHOW_BOOT_PROGRESS
 | 
							CONFIG_SHOW_BOOT_PROGRESS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2613,6 +2668,17 @@ FIT uImage format:
 | 
				
			||||||
 -150	common/cmd_nand.c	Incorrect FIT image format
 | 
					 -150	common/cmd_nand.c	Incorrect FIT image format
 | 
				
			||||||
  151	common/cmd_nand.c	FIT image format OK
 | 
					  151	common/cmd_nand.c	FIT image format OK
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- FIT image support:
 | 
				
			||||||
 | 
							CONFIG_FIT
 | 
				
			||||||
 | 
							Enable support for the FIT uImage format.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_FIT_BEST_MATCH
 | 
				
			||||||
 | 
							When no configuration is explicitly selected, default to the
 | 
				
			||||||
 | 
							one whose fdt's compatibility field best matches that of
 | 
				
			||||||
 | 
							U-Boot itself. A match is considered "best" if it matches the
 | 
				
			||||||
 | 
							most specific compatibility entry of U-Boot's fdt's root node.
 | 
				
			||||||
 | 
							The order of entries in the configuration's fdt is ignored.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Standalone program support:
 | 
					- Standalone program support:
 | 
				
			||||||
		CONFIG_STANDALONE_LOAD_ADDR
 | 
							CONFIG_STANDALONE_LOAD_ADDR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2664,6 +2730,10 @@ FIT uImage format:
 | 
				
			||||||
		CONFIG_SPL_TEXT_BASE
 | 
							CONFIG_SPL_TEXT_BASE
 | 
				
			||||||
		TEXT_BASE for linking the SPL binary.
 | 
							TEXT_BASE for linking the SPL binary.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_SPL_RELOC_TEXT_BASE
 | 
				
			||||||
 | 
							Address to relocate to.  If unspecified, this is equal to
 | 
				
			||||||
 | 
							CONFIG_SPL_TEXT_BASE (i.e. no relocation is done).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CONFIG_SPL_BSS_START_ADDR
 | 
							CONFIG_SPL_BSS_START_ADDR
 | 
				
			||||||
		Link address for the BSS within the SPL binary.
 | 
							Link address for the BSS within the SPL binary.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2673,6 +2743,11 @@ FIT uImage format:
 | 
				
			||||||
		CONFIG_SPL_STACK
 | 
							CONFIG_SPL_STACK
 | 
				
			||||||
		Adress of the start of the stack SPL will use
 | 
							Adress of the start of the stack SPL will use
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_SPL_RELOC_STACK
 | 
				
			||||||
 | 
							Adress of the start of the stack SPL will use after
 | 
				
			||||||
 | 
							relocation.  If unspecified, this is equal to
 | 
				
			||||||
 | 
							CONFIG_SPL_STACK.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CONFIG_SYS_SPL_MALLOC_START
 | 
							CONFIG_SYS_SPL_MALLOC_START
 | 
				
			||||||
		Starting address of the malloc pool used in SPL.
 | 
							Starting address of the malloc pool used in SPL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2688,6 +2763,9 @@ FIT uImage format:
 | 
				
			||||||
		For ARM, enable an optional function to print more information
 | 
							For ARM, enable an optional function to print more information
 | 
				
			||||||
		about the running system.
 | 
							about the running system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_SPL_INIT_MINIMAL
 | 
				
			||||||
 | 
							Arch init code should be built for a very small image
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CONFIG_SPL_LIBCOMMON_SUPPORT
 | 
							CONFIG_SPL_LIBCOMMON_SUPPORT
 | 
				
			||||||
		Support for common/libcommon.o in SPL binary
 | 
							Support for common/libcommon.o in SPL binary
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2715,8 +2793,19 @@ FIT uImage format:
 | 
				
			||||||
		CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME
 | 
							CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME
 | 
				
			||||||
		Filename to read to load U-Boot when reading from FAT
 | 
							Filename to read to load U-Boot when reading from FAT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_SPL_NAND_BASE
 | 
				
			||||||
 | 
							Include nand_base.c in the SPL.  Requires
 | 
				
			||||||
 | 
							CONFIG_SPL_NAND_DRIVERS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_SPL_NAND_DRIVERS
 | 
				
			||||||
 | 
							SPL uses normal NAND drivers, not minimal drivers.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_SPL_NAND_ECC
 | 
				
			||||||
 | 
							Include standard software ECC in the SPL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CONFIG_SPL_NAND_SIMPLE
 | 
							CONFIG_SPL_NAND_SIMPLE
 | 
				
			||||||
		Support for drivers/mtd/nand/libnand.o in SPL binary
 | 
							Support for NAND boot using simple NAND drivers that
 | 
				
			||||||
 | 
							expose the cmd_ctrl() interface.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_COUNT,
 | 
							CONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_COUNT,
 | 
				
			||||||
		CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE,
 | 
							CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE,
 | 
				
			||||||
| 
						 | 
					@ -2724,15 +2813,19 @@ FIT uImage format:
 | 
				
			||||||
		CONFIG_SYS_NAND_ECCPOS, CONFIG_SYS_NAND_ECCSIZE,
 | 
							CONFIG_SYS_NAND_ECCPOS, CONFIG_SYS_NAND_ECCSIZE,
 | 
				
			||||||
		CONFIG_SYS_NAND_ECCBYTES
 | 
							CONFIG_SYS_NAND_ECCBYTES
 | 
				
			||||||
		Defines the size and behavior of the NAND that SPL uses
 | 
							Defines the size and behavior of the NAND that SPL uses
 | 
				
			||||||
		to read U-Boot with CONFIG_SPL_NAND_SIMPLE
 | 
							to read U-Boot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CONFIG_SYS_NAND_U_BOOT_OFFS
 | 
							CONFIG_SYS_NAND_U_BOOT_OFFS
 | 
				
			||||||
		Location in NAND for CONFIG_SPL_NAND_SIMPLE to read U-Boot
 | 
							Location in NAND to read U-Boot from
 | 
				
			||||||
		from.
 | 
					
 | 
				
			||||||
 | 
							CONFIG_SYS_NAND_U_BOOT_DST
 | 
				
			||||||
 | 
							Location in memory to load U-Boot to
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_SYS_NAND_U_BOOT_SIZE
 | 
				
			||||||
 | 
							Size of image to load
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CONFIG_SYS_NAND_U_BOOT_START
 | 
							CONFIG_SYS_NAND_U_BOOT_START
 | 
				
			||||||
		Location in memory for CONFIG_SPL_NAND_SIMPLE to load U-Boot
 | 
							Entry point in loaded image to jump to
 | 
				
			||||||
		to.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CONFIG_SYS_NAND_HW_ECC_OOBFIRST
 | 
							CONFIG_SYS_NAND_HW_ECC_OOBFIRST
 | 
				
			||||||
		Define this if you need to first read the OOB and then the
 | 
							Define this if you need to first read the OOB and then the
 | 
				
			||||||
| 
						 | 
					@ -2757,6 +2850,11 @@ FIT uImage format:
 | 
				
			||||||
		CONFIG_SPL_LIBGENERIC_SUPPORT
 | 
							CONFIG_SPL_LIBGENERIC_SUPPORT
 | 
				
			||||||
		Support for lib/libgeneric.o in SPL binary
 | 
							Support for lib/libgeneric.o in SPL binary
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CONFIG_SPL_TARGET
 | 
				
			||||||
 | 
							Final target image containing SPL and payload.  Some SPLs
 | 
				
			||||||
 | 
							use an arch-specific makefile fragment instead, for
 | 
				
			||||||
 | 
							example if more than one image needs to be produced.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Modem Support:
 | 
					Modem Support:
 | 
				
			||||||
--------------
 | 
					--------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2891,9 +2989,6 @@ Configuration Settings:
 | 
				
			||||||
		non page size aligned address and this could cause major
 | 
							non page size aligned address and this could cause major
 | 
				
			||||||
		problems.
 | 
							problems.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- CONFIG_SYS_TFTP_LOADADDR:
 | 
					 | 
				
			||||||
		Default load address for network file downloads
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- CONFIG_SYS_LOADS_BAUD_CHANGE:
 | 
					- CONFIG_SYS_LOADS_BAUD_CHANGE:
 | 
				
			||||||
		Enable temporary baudrate change while serial download
 | 
							Enable temporary baudrate change while serial download
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3035,6 +3130,49 @@ Configuration Settings:
 | 
				
			||||||
	cases. This setting can be used to tune behaviour; see
 | 
						cases. This setting can be used to tune behaviour; see
 | 
				
			||||||
	lib/hashtable.c for details.
 | 
						lib/hashtable.c for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- CONFIG_ENV_FLAGS_LIST_DEFAULT
 | 
				
			||||||
 | 
					- CONFIG_ENV_FLAGS_LIST_STATIC
 | 
				
			||||||
 | 
						Enable validation of the values given to enviroment variables when
 | 
				
			||||||
 | 
						calling env set.  Variables can be restricted to only decimal,
 | 
				
			||||||
 | 
						hexadecimal, or boolean.  If CONFIG_CMD_NET is also defined,
 | 
				
			||||||
 | 
						the variables can also be restricted to IP address or MAC address.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						The format of the list is:
 | 
				
			||||||
 | 
							type_attribute = [s|d|x|b|i|m]
 | 
				
			||||||
 | 
							access_atribute = [a|r|o|c]
 | 
				
			||||||
 | 
							attributes = type_attribute[access_atribute]
 | 
				
			||||||
 | 
							entry = variable_name[:attributes]
 | 
				
			||||||
 | 
							list = entry[,list]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						The type attributes are:
 | 
				
			||||||
 | 
							s - String (default)
 | 
				
			||||||
 | 
							d - Decimal
 | 
				
			||||||
 | 
							x - Hexadecimal
 | 
				
			||||||
 | 
							b - Boolean ([1yYtT|0nNfF])
 | 
				
			||||||
 | 
							i - IP address
 | 
				
			||||||
 | 
							m - MAC address
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						The access attributes are:
 | 
				
			||||||
 | 
							a - Any (default)
 | 
				
			||||||
 | 
							r - Read-only
 | 
				
			||||||
 | 
							o - Write-once
 | 
				
			||||||
 | 
							c - Change-default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						- CONFIG_ENV_FLAGS_LIST_DEFAULT
 | 
				
			||||||
 | 
							Define this to a list (string) to define the ".flags"
 | 
				
			||||||
 | 
							envirnoment variable in the default or embedded environment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						- CONFIG_ENV_FLAGS_LIST_STATIC
 | 
				
			||||||
 | 
							Define this to a list (string) to define validation that
 | 
				
			||||||
 | 
							should be done if an entry is not found in the ".flags"
 | 
				
			||||||
 | 
							environment variable.  To override a setting in the static
 | 
				
			||||||
 | 
							list, simply add an entry for the same variable name to the
 | 
				
			||||||
 | 
							".flags" variable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- CONFIG_ENV_ACCESS_IGNORE_FORCE
 | 
				
			||||||
 | 
						If defined, don't allow the -f switch to env set override variable
 | 
				
			||||||
 | 
						access flags.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The following definitions that deal with the placement and management
 | 
					The following definitions that deal with the placement and management
 | 
				
			||||||
of environment data (variable area); in general, we support the
 | 
					of environment data (variable area); in general, we support the
 | 
				
			||||||
following configurations:
 | 
					following configurations:
 | 
				
			||||||
| 
						 | 
					@ -3632,6 +3770,16 @@ Low Level (hardware related) configuration options:
 | 
				
			||||||
		be used if available. These functions may be faster under some
 | 
							be used if available. These functions may be faster under some
 | 
				
			||||||
		conditions but may increase the binary size.
 | 
							conditions but may increase the binary size.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- CONFIG_X86_NO_RESET_VECTOR
 | 
				
			||||||
 | 
							If defined, the x86 reset vector code is excluded. You will need
 | 
				
			||||||
 | 
							to do this when U-Boot is running from Coreboot.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- CONFIG_X86_NO_REAL_MODE
 | 
				
			||||||
 | 
							If defined, x86 real mode code is omitted. This assumes a
 | 
				
			||||||
 | 
							32-bit environment where such code is not needed. You will
 | 
				
			||||||
 | 
							need to do this when U-Boot is running from Coreboot.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Freescale QE/FMAN Firmware Support:
 | 
					Freescale QE/FMAN Firmware Support:
 | 
				
			||||||
-----------------------------------
 | 
					-----------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3859,6 +4007,7 @@ saveenv - save environment variables to persistent storage
 | 
				
			||||||
protect - enable or disable FLASH write protection
 | 
					protect - enable or disable FLASH write protection
 | 
				
			||||||
erase	- erase FLASH memory
 | 
					erase	- erase FLASH memory
 | 
				
			||||||
flinfo	- print FLASH memory information
 | 
					flinfo	- print FLASH memory information
 | 
				
			||||||
 | 
					nand	- NAND memory operations (see doc/README.nand)
 | 
				
			||||||
bdinfo	- print Board Info structure
 | 
					bdinfo	- print Board Info structure
 | 
				
			||||||
iminfo	- print header information for application image
 | 
					iminfo	- print header information for application image
 | 
				
			||||||
coninfo - print console devices and informations
 | 
					coninfo - print console devices and informations
 | 
				
			||||||
| 
						 | 
					@ -4125,6 +4274,36 @@ Please note that changes to some configuration parameters may take
 | 
				
			||||||
only effect after the next boot (yes, that's just like Windoze :-).
 | 
					only effect after the next boot (yes, that's just like Windoze :-).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Callback functions for environment variables:
 | 
				
			||||||
 | 
					---------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For some environment variables, the behavior of u-boot needs to change
 | 
				
			||||||
 | 
					when their values are changed.  This functionailty allows functions to
 | 
				
			||||||
 | 
					be associated with arbitrary variables.  On creation, overwrite, or
 | 
				
			||||||
 | 
					deletion, the callback will provide the opportunity for some side
 | 
				
			||||||
 | 
					effect to happen or for the change to be rejected.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The callbacks are named and associated with a function using the
 | 
				
			||||||
 | 
					U_BOOT_ENV_CALLBACK macro in your board or driver code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These callbacks are associated with variables in one of two ways.  The
 | 
				
			||||||
 | 
					static list can be added to by defining CONFIG_ENV_CALLBACK_LIST_STATIC
 | 
				
			||||||
 | 
					in the board configuration to a string that defines a list of
 | 
				
			||||||
 | 
					associations.  The list must be in the following format:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						entry = variable_name[:callback_name]
 | 
				
			||||||
 | 
						list = entry[,list]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If the callback name is not specified, then the callback is deleted.
 | 
				
			||||||
 | 
					Spaces are also allowed anywhere in the list.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Callbacks can also be associated by defining the ".callbacks" variable
 | 
				
			||||||
 | 
					with the same list format above.  Any association in ".callbacks" will
 | 
				
			||||||
 | 
					override any association in the static list. You can define
 | 
				
			||||||
 | 
					CONFIG_ENV_CALLBACK_LIST_DEFAULT to a list (string) to define the
 | 
				
			||||||
 | 
					".callbacks" envirnoment variable in the default or embedded environment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Command Line Parsing:
 | 
					Command Line Parsing:
 | 
				
			||||||
=====================
 | 
					=====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -333,6 +333,8 @@ uint32_t mxc_get_clock(enum mxc_clock clk)
 | 
				
			||||||
		return mx28_get_sspclk(MXC_SSPCLK2);
 | 
							return mx28_get_sspclk(MXC_SSPCLK2);
 | 
				
			||||||
	case MXC_SSP3_CLK:
 | 
						case MXC_SSP3_CLK:
 | 
				
			||||||
		return mx28_get_sspclk(MXC_SSPCLK3);
 | 
							return mx28_get_sspclk(MXC_SSPCLK3);
 | 
				
			||||||
 | 
						case MXC_XTAL_CLK:
 | 
				
			||||||
 | 
							return XTAL_FREQ_KHZ * 1000;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,7 +50,7 @@ void early_delay(int delay)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define	MUX_CONFIG_BOOTMODE_PAD	(MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
 | 
					#define	MUX_CONFIG_BOOTMODE_PAD	(MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
 | 
				
			||||||
const iomux_cfg_t iomux_boot[] = {
 | 
					static const iomux_cfg_t iomux_boot[] = {
 | 
				
			||||||
	MX28_PAD_LCD_D00__GPIO_1_0 | MUX_CONFIG_BOOTMODE_PAD,
 | 
						MX28_PAD_LCD_D00__GPIO_1_0 | MUX_CONFIG_BOOTMODE_PAD,
 | 
				
			||||||
	MX28_PAD_LCD_D01__GPIO_1_1 | MUX_CONFIG_BOOTMODE_PAD,
 | 
						MX28_PAD_LCD_D01__GPIO_1_1 | MUX_CONFIG_BOOTMODE_PAD,
 | 
				
			||||||
	MX28_PAD_LCD_D02__GPIO_1_2 | MUX_CONFIG_BOOTMODE_PAD,
 | 
						MX28_PAD_LCD_D02__GPIO_1_2 | MUX_CONFIG_BOOTMODE_PAD,
 | 
				
			||||||
| 
						 | 
					@ -59,7 +59,7 @@ const iomux_cfg_t iomux_boot[] = {
 | 
				
			||||||
	MX28_PAD_LCD_D05__GPIO_1_5 | MUX_CONFIG_BOOTMODE_PAD,
 | 
						MX28_PAD_LCD_D05__GPIO_1_5 | MUX_CONFIG_BOOTMODE_PAD,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t mxs_get_bootmode_index(void)
 | 
					static uint8_t mxs_get_bootmode_index(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uint8_t bootmode = 0;
 | 
						uint8_t bootmode = 0;
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,11 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "mxs_init.h"
 | 
					#include "mxs_init.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static uint32_t mx28_dram_vals[] = {
 | 
					static uint32_t dram_vals[] = {
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * i.MX28 DDR2 at 200MHz
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#if defined(CONFIG_MX28)
 | 
				
			||||||
	0x00000000, 0x00000000, 0x00000000, 0x00000000,
 | 
						0x00000000, 0x00000000, 0x00000000, 0x00000000,
 | 
				
			||||||
	0x00000000, 0x00000000, 0x00000000, 0x00000000,
 | 
						0x00000000, 0x00000000, 0x00000000, 0x00000000,
 | 
				
			||||||
	0x00000000, 0x00000000, 0x00000000, 0x00000000,
 | 
						0x00000000, 0x00000000, 0x00000000, 0x00000000,
 | 
				
			||||||
| 
						 | 
					@ -79,6 +83,9 @@ static uint32_t mx28_dram_vals[] = {
 | 
				
			||||||
	0x06120612, 0x04320432, 0x04320432, 0x00040004,
 | 
						0x06120612, 0x04320432, 0x04320432, 0x00040004,
 | 
				
			||||||
	0x00040004, 0x00000000, 0x00000000, 0x00000000,
 | 
						0x00040004, 0x00000000, 0x00000000, 0x00000000,
 | 
				
			||||||
	0x00000000, 0x00010001
 | 
						0x00000000, 0x00010001
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#error Unsupported memory initialization
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void __mxs_adjust_memory_params(uint32_t *dram_vals)
 | 
					void __mxs_adjust_memory_params(uint32_t *dram_vals)
 | 
				
			||||||
| 
						 | 
					@ -87,17 +94,17 @@ void __mxs_adjust_memory_params(uint32_t *dram_vals)
 | 
				
			||||||
void mxs_adjust_memory_params(uint32_t *dram_vals)
 | 
					void mxs_adjust_memory_params(uint32_t *dram_vals)
 | 
				
			||||||
	__attribute__((weak, alias("__mxs_adjust_memory_params")));
 | 
						__attribute__((weak, alias("__mxs_adjust_memory_params")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void init_mx28_200mhz_ddr2(void)
 | 
					static void initialize_dram_values(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mxs_adjust_memory_params(mx28_dram_vals);
 | 
						mxs_adjust_memory_params(dram_vals);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < ARRAY_SIZE(mx28_dram_vals); i++)
 | 
						for (i = 0; i < ARRAY_SIZE(dram_vals); i++)
 | 
				
			||||||
		writel(mx28_dram_vals[i], MXS_DRAM_BASE + (4 * i));
 | 
							writel(dram_vals[i], MXS_DRAM_BASE + (4 * i));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_mem_init_clock(void)
 | 
					static void mxs_mem_init_clock(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_clkctrl_regs *clkctrl_regs =
 | 
						struct mxs_clkctrl_regs *clkctrl_regs =
 | 
				
			||||||
		(struct mxs_clkctrl_regs *)MXS_CLKCTRL_BASE;
 | 
							(struct mxs_clkctrl_regs *)MXS_CLKCTRL_BASE;
 | 
				
			||||||
| 
						 | 
					@ -128,7 +135,7 @@ void mxs_mem_init_clock(void)
 | 
				
			||||||
	early_delay(10000);
 | 
						early_delay(10000);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_mem_setup_cpu_and_hbus(void)
 | 
					static void mxs_mem_setup_cpu_and_hbus(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_clkctrl_regs *clkctrl_regs =
 | 
						struct mxs_clkctrl_regs *clkctrl_regs =
 | 
				
			||||||
		(struct mxs_clkctrl_regs *)MXS_CLKCTRL_BASE;
 | 
							(struct mxs_clkctrl_regs *)MXS_CLKCTRL_BASE;
 | 
				
			||||||
| 
						 | 
					@ -160,7 +167,7 @@ void mxs_mem_setup_cpu_and_hbus(void)
 | 
				
			||||||
	early_delay(15000);
 | 
						early_delay(15000);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_mem_setup_vdda(void)
 | 
					static void mxs_mem_setup_vdda(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -171,17 +178,6 @@ void mxs_mem_setup_vdda(void)
 | 
				
			||||||
		&power_regs->hw_power_vddactrl);
 | 
							&power_regs->hw_power_vddactrl);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_mem_setup_vddd(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
					 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	writel((0x1c << POWER_VDDDCTRL_TRG_OFFSET) |
 | 
					 | 
				
			||||||
		(0x7 << POWER_VDDDCTRL_BO_OFFSET_OFFSET) |
 | 
					 | 
				
			||||||
		POWER_VDDDCTRL_LINREG_OFFSET_1STEPS_BELOW,
 | 
					 | 
				
			||||||
		&power_regs->hw_power_vdddctrl);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
uint32_t mxs_mem_get_size(void)
 | 
					uint32_t mxs_mem_get_size(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uint32_t sz, da;
 | 
						uint32_t sz, da;
 | 
				
			||||||
| 
						 | 
					@ -229,7 +225,7 @@ void mxs_mem_init(void)
 | 
				
			||||||
	/* Clear START bit from DRAM_CTL16 */
 | 
						/* Clear START bit from DRAM_CTL16 */
 | 
				
			||||||
	clrbits_le32(MXS_DRAM_BASE + 0x40, 1);
 | 
						clrbits_le32(MXS_DRAM_BASE + 0x40, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	init_mx28_200mhz_ddr2();
 | 
						initialize_dram_values();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Clear SREFRESH bit from DRAM_CTL17 */
 | 
						/* Clear SREFRESH bit from DRAM_CTL17 */
 | 
				
			||||||
	clrbits_le32(MXS_DRAM_BASE + 0x44, 1);
 | 
						clrbits_le32(MXS_DRAM_BASE + 0x44, 1);
 | 
				
			||||||
| 
						 | 
					@ -241,8 +237,6 @@ void mxs_mem_init(void)
 | 
				
			||||||
	while (!(readl(MXS_DRAM_BASE + 0xe8) & (1 << 20)))
 | 
						while (!(readl(MXS_DRAM_BASE + 0xe8) & (1 << 20)))
 | 
				
			||||||
		;
 | 
							;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mxs_mem_setup_vddd();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	early_delay(10000);
 | 
						early_delay(10000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mxs_mem_setup_cpu_and_hbus();
 | 
						mxs_mem_setup_cpu_and_hbus();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "mxs_init.h"
 | 
					#include "mxs_init.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_clock2xtal(void)
 | 
					static void mxs_power_clock2xtal(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_clkctrl_regs *clkctrl_regs =
 | 
						struct mxs_clkctrl_regs *clkctrl_regs =
 | 
				
			||||||
		(struct mxs_clkctrl_regs *)MXS_CLKCTRL_BASE;
 | 
							(struct mxs_clkctrl_regs *)MXS_CLKCTRL_BASE;
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,7 @@ void mxs_power_clock2xtal(void)
 | 
				
			||||||
		&clkctrl_regs->hw_clkctrl_clkseq_set);
 | 
							&clkctrl_regs->hw_clkctrl_clkseq_set);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_clock2pll(void)
 | 
					static void mxs_power_clock2pll(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_clkctrl_regs *clkctrl_regs =
 | 
						struct mxs_clkctrl_regs *clkctrl_regs =
 | 
				
			||||||
		(struct mxs_clkctrl_regs *)MXS_CLKCTRL_BASE;
 | 
							(struct mxs_clkctrl_regs *)MXS_CLKCTRL_BASE;
 | 
				
			||||||
| 
						 | 
					@ -52,7 +52,7 @@ void mxs_power_clock2pll(void)
 | 
				
			||||||
			CLKCTRL_CLKSEQ_BYPASS_CPU);
 | 
								CLKCTRL_CLKSEQ_BYPASS_CPU);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_clear_auto_restart(void)
 | 
					static void mxs_power_clear_auto_restart(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_rtc_regs *rtc_regs =
 | 
						struct mxs_rtc_regs *rtc_regs =
 | 
				
			||||||
		(struct mxs_rtc_regs *)MXS_RTC_BASE;
 | 
							(struct mxs_rtc_regs *)MXS_RTC_BASE;
 | 
				
			||||||
| 
						 | 
					@ -85,7 +85,7 @@ void mxs_power_clear_auto_restart(void)
 | 
				
			||||||
		;
 | 
							;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_set_linreg(void)
 | 
					static void mxs_power_set_linreg(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -104,7 +104,7 @@ void mxs_power_set_linreg(void)
 | 
				
			||||||
			POWER_VDDIOCTRL_LINREG_OFFSET_1STEPS_BELOW);
 | 
								POWER_VDDIOCTRL_LINREG_OFFSET_1STEPS_BELOW);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int mxs_get_batt_volt(void)
 | 
					static int mxs_get_batt_volt(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -115,12 +115,12 @@ int mxs_get_batt_volt(void)
 | 
				
			||||||
	return volt;
 | 
						return volt;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int mxs_is_batt_ready(void)
 | 
					static int mxs_is_batt_ready(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (mxs_get_batt_volt() >= 3600);
 | 
						return (mxs_get_batt_volt() >= 3600);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int mxs_is_batt_good(void)
 | 
					static int mxs_is_batt_good(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -160,7 +160,7 @@ int mxs_is_batt_good(void)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_setup_5v_detect(void)
 | 
					static void mxs_power_setup_5v_detect(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -172,7 +172,7 @@ void mxs_power_setup_5v_detect(void)
 | 
				
			||||||
			POWER_5VCTRL_PWRUP_VBUS_CMPS);
 | 
								POWER_5VCTRL_PWRUP_VBUS_CMPS);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_src_power_init(void)
 | 
					static void mxs_src_power_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -203,7 +203,7 @@ void mxs_src_power_init(void)
 | 
				
			||||||
	clrbits_le32(&power_regs->hw_power_5vctrl, POWER_5VCTRL_DCDC_XFER);
 | 
						clrbits_le32(&power_regs->hw_power_5vctrl, POWER_5VCTRL_DCDC_XFER);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_init_4p2_params(void)
 | 
					static void mxs_power_init_4p2_params(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -227,7 +227,7 @@ void mxs_power_init_4p2_params(void)
 | 
				
			||||||
		0x3f << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
 | 
							0x3f << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_enable_4p2_dcdc_input(int xfer)
 | 
					static void mxs_enable_4p2_dcdc_input(int xfer)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -323,7 +323,7 @@ void mxs_enable_4p2_dcdc_input(int xfer)
 | 
				
			||||||
				POWER_CTRL_ENIRQ_VDD5V_DROOP);
 | 
									POWER_CTRL_ENIRQ_VDD5V_DROOP);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_init_4p2_regulator(void)
 | 
					static void mxs_power_init_4p2_regulator(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -407,7 +407,7 @@ void mxs_power_init_4p2_regulator(void)
 | 
				
			||||||
	writel(POWER_CTRL_DCDC4P2_BO_IRQ, &power_regs->hw_power_ctrl_clr);
 | 
						writel(POWER_CTRL_DCDC4P2_BO_IRQ, &power_regs->hw_power_ctrl_clr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_init_dcdc_4p2_source(void)
 | 
					static void mxs_power_init_dcdc_4p2_source(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -429,7 +429,7 @@ void mxs_power_init_dcdc_4p2_source(void)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_enable_4p2(void)
 | 
					static void mxs_power_enable_4p2(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -488,7 +488,7 @@ void mxs_power_enable_4p2(void)
 | 
				
			||||||
			&power_regs->hw_power_charge_clr);
 | 
								&power_regs->hw_power_charge_clr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_boot_valid_5v(void)
 | 
					static void mxs_boot_valid_5v(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -511,7 +511,7 @@ void mxs_boot_valid_5v(void)
 | 
				
			||||||
	mxs_power_enable_4p2();
 | 
						mxs_power_enable_4p2();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_powerdown(void)
 | 
					static void mxs_powerdown(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -520,7 +520,7 @@ void mxs_powerdown(void)
 | 
				
			||||||
		&power_regs->hw_power_reset);
 | 
							&power_regs->hw_power_reset);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_batt_boot(void)
 | 
					static void mxs_batt_boot(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -564,7 +564,7 @@ void mxs_batt_boot(void)
 | 
				
			||||||
		0x8 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
 | 
							0x8 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_handle_5v_conflict(void)
 | 
					static void mxs_handle_5v_conflict(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -600,7 +600,7 @@ void mxs_handle_5v_conflict(void)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_5v_boot(void)
 | 
					static void mxs_5v_boot(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -623,7 +623,7 @@ void mxs_5v_boot(void)
 | 
				
			||||||
	mxs_handle_5v_conflict();
 | 
						mxs_handle_5v_conflict();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_init_batt_bo(void)
 | 
					static void mxs_init_batt_bo(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -637,7 +637,7 @@ void mxs_init_batt_bo(void)
 | 
				
			||||||
	writel(POWER_CTRL_ENIRQ_BATT_BO, &power_regs->hw_power_ctrl_clr);
 | 
						writel(POWER_CTRL_ENIRQ_BATT_BO, &power_regs->hw_power_ctrl_clr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_switch_vddd_to_dcdc_source(void)
 | 
					static void mxs_switch_vddd_to_dcdc_source(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -651,7 +651,7 @@ void mxs_switch_vddd_to_dcdc_source(void)
 | 
				
			||||||
		POWER_VDDDCTRL_DISABLE_STEPPING);
 | 
							POWER_VDDDCTRL_DISABLE_STEPPING);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_configure_power_source(void)
 | 
					static void mxs_power_configure_power_source(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int batt_ready, batt_good;
 | 
						int batt_ready, batt_good;
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
| 
						 | 
					@ -689,7 +689,7 @@ void mxs_power_configure_power_source(void)
 | 
				
			||||||
	mxs_switch_vddd_to_dcdc_source();
 | 
						mxs_switch_vddd_to_dcdc_source();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_enable_output_rail_protection(void)
 | 
					static void mxs_enable_output_rail_protection(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -707,7 +707,7 @@ void mxs_enable_output_rail_protection(void)
 | 
				
			||||||
			POWER_VDDIOCTRL_PWDN_BRNOUT);
 | 
								POWER_VDDIOCTRL_PWDN_BRNOUT);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int mxs_get_vddio_power_source_off(void)
 | 
					static int mxs_get_vddio_power_source_off(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -735,7 +735,7 @@ int mxs_get_vddio_power_source_off(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int mxs_get_vddd_power_source_off(void)
 | 
					static int mxs_get_vddd_power_source_off(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
| 
						 | 
					@ -766,201 +766,115 @@ int mxs_get_vddd_power_source_off(void)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mxs_power_set_vddio(uint32_t new_target, uint32_t new_brownout)
 | 
					struct mxs_vddx_cfg {
 | 
				
			||||||
 | 
						uint32_t		*reg;
 | 
				
			||||||
 | 
						uint8_t			step_mV;
 | 
				
			||||||
 | 
						uint16_t		lowest_mV;
 | 
				
			||||||
 | 
						int			(*powered_by_linreg)(void);
 | 
				
			||||||
 | 
						uint32_t		trg_mask;
 | 
				
			||||||
 | 
						uint32_t		bo_irq;
 | 
				
			||||||
 | 
						uint32_t		bo_enirq;
 | 
				
			||||||
 | 
						uint32_t		bo_offset_mask;
 | 
				
			||||||
 | 
						uint32_t		bo_offset_offset;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct mxs_vddx_cfg mxs_vddio_cfg = {
 | 
				
			||||||
 | 
						.reg			= &(((struct mxs_power_regs *)MXS_POWER_BASE)->
 | 
				
			||||||
 | 
										hw_power_vddioctrl),
 | 
				
			||||||
 | 
						.step_mV		= 50,
 | 
				
			||||||
 | 
						.lowest_mV		= 2800,
 | 
				
			||||||
 | 
						.powered_by_linreg	= mxs_get_vddio_power_source_off,
 | 
				
			||||||
 | 
						.trg_mask		= POWER_VDDIOCTRL_TRG_MASK,
 | 
				
			||||||
 | 
						.bo_irq			= POWER_CTRL_VDDIO_BO_IRQ,
 | 
				
			||||||
 | 
						.bo_enirq		= POWER_CTRL_ENIRQ_VDDIO_BO,
 | 
				
			||||||
 | 
						.bo_offset_mask		= POWER_VDDIOCTRL_BO_OFFSET_MASK,
 | 
				
			||||||
 | 
						.bo_offset_offset	= POWER_VDDIOCTRL_BO_OFFSET_OFFSET,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct mxs_vddx_cfg mxs_vddd_cfg = {
 | 
				
			||||||
 | 
						.reg			= &(((struct mxs_power_regs *)MXS_POWER_BASE)->
 | 
				
			||||||
 | 
										hw_power_vdddctrl),
 | 
				
			||||||
 | 
						.step_mV		= 25,
 | 
				
			||||||
 | 
						.lowest_mV		= 800,
 | 
				
			||||||
 | 
						.powered_by_linreg	= mxs_get_vddd_power_source_off,
 | 
				
			||||||
 | 
						.trg_mask		= POWER_VDDDCTRL_TRG_MASK,
 | 
				
			||||||
 | 
						.bo_irq			= POWER_CTRL_VDDD_BO_IRQ,
 | 
				
			||||||
 | 
						.bo_enirq		= POWER_CTRL_ENIRQ_VDDD_BO,
 | 
				
			||||||
 | 
						.bo_offset_mask		= POWER_VDDDCTRL_BO_OFFSET_MASK,
 | 
				
			||||||
 | 
						.bo_offset_offset	= POWER_VDDDCTRL_BO_OFFSET_OFFSET,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void mxs_power_set_vddx(const struct mxs_vddx_cfg *cfg,
 | 
				
			||||||
 | 
									uint32_t new_target, uint32_t new_brownout)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
						struct mxs_power_regs *power_regs =
 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
							(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
				
			||||||
	uint32_t cur_target, diff, bo_int = 0;
 | 
						uint32_t cur_target, diff, bo_int = 0;
 | 
				
			||||||
	uint32_t powered_by_linreg = 0;
 | 
						uint32_t powered_by_linreg = 0;
 | 
				
			||||||
 | 
						int adjust_up, tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	new_brownout = (new_target - new_brownout + 25) / 50;
 | 
						new_brownout = DIV_ROUND(new_target - new_brownout, cfg->step_mV);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cur_target = readl(&power_regs->hw_power_vddioctrl);
 | 
						cur_target = readl(cfg->reg);
 | 
				
			||||||
	cur_target &= POWER_VDDIOCTRL_TRG_MASK;
 | 
						cur_target &= cfg->trg_mask;
 | 
				
			||||||
	cur_target *= 50;	/* 50 mV step*/
 | 
						cur_target *= cfg->step_mV;
 | 
				
			||||||
	cur_target += 2800;	/* 2800 mV lowest */
 | 
						cur_target += cfg->lowest_mV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	powered_by_linreg = mxs_get_vddio_power_source_off();
 | 
						adjust_up = new_target > cur_target;
 | 
				
			||||||
	if (new_target > cur_target) {
 | 
						powered_by_linreg = cfg->powered_by_linreg();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (adjust_up) {
 | 
				
			||||||
		if (powered_by_linreg) {
 | 
							if (powered_by_linreg) {
 | 
				
			||||||
			bo_int = readl(&power_regs->hw_power_vddioctrl);
 | 
								bo_int = readl(cfg->reg);
 | 
				
			||||||
			clrbits_le32(&power_regs->hw_power_vddioctrl,
 | 
								clrbits_le32(cfg->reg, cfg->bo_enirq);
 | 
				
			||||||
					POWER_CTRL_ENIRQ_VDDIO_BO);
 | 
							}
 | 
				
			||||||
 | 
							setbits_le32(cfg->reg, cfg->bo_offset_mask);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		setbits_le32(&power_regs->hw_power_vddioctrl,
 | 
					 | 
				
			||||||
				POWER_VDDIOCTRL_BO_OFFSET_MASK);
 | 
					 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
			if (new_target - cur_target > 100)
 | 
							if (abs(new_target - cur_target) > 100) {
 | 
				
			||||||
 | 
								if (adjust_up)
 | 
				
			||||||
				diff = cur_target + 100;
 | 
									diff = cur_target + 100;
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
 | 
									diff = cur_target - 100;
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
			diff = new_target;
 | 
								diff = new_target;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			diff -= 2800;
 | 
							diff -= cfg->lowest_mV;
 | 
				
			||||||
			diff /= 50;
 | 
							diff /= cfg->step_mV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			clrsetbits_le32(&power_regs->hw_power_vddioctrl,
 | 
							clrsetbits_le32(cfg->reg, cfg->trg_mask, diff);
 | 
				
			||||||
				POWER_VDDIOCTRL_TRG_MASK, diff);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (powered_by_linreg ||
 | 
							if (powered_by_linreg ||
 | 
				
			||||||
			(readl(&power_regs->hw_power_sts) &
 | 
								(readl(&power_regs->hw_power_sts) &
 | 
				
			||||||
				POWER_STS_VDD5V_GT_VDDIO))
 | 
									POWER_STS_VDD5V_GT_VDDIO))
 | 
				
			||||||
			early_delay(500);
 | 
								early_delay(500);
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
				while (!(readl(&power_regs->hw_power_sts) &
 | 
								for (;;) {
 | 
				
			||||||
					POWER_STS_DC_OK))
 | 
									tmp = readl(&power_regs->hw_power_sts);
 | 
				
			||||||
					;
 | 
									if (tmp & POWER_STS_DC_OK)
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			cur_target = readl(&power_regs->hw_power_vddioctrl);
 | 
							cur_target = readl(cfg->reg);
 | 
				
			||||||
			cur_target &= POWER_VDDIOCTRL_TRG_MASK;
 | 
							cur_target &= cfg->trg_mask;
 | 
				
			||||||
			cur_target *= 50;	/* 50 mV step*/
 | 
							cur_target *= cfg->step_mV;
 | 
				
			||||||
			cur_target += 2800;	/* 2800 mV lowest */
 | 
							cur_target += cfg->lowest_mV;
 | 
				
			||||||
	} while (new_target > cur_target);
 | 
						} while (new_target > cur_target);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (powered_by_linreg) {
 | 
						if (adjust_up && powered_by_linreg) {
 | 
				
			||||||
			writel(POWER_CTRL_VDDIO_BO_IRQ,
 | 
							writel(cfg->bo_irq, &power_regs->hw_power_ctrl_clr);
 | 
				
			||||||
				&power_regs->hw_power_ctrl_clr);
 | 
							if (bo_int & cfg->bo_enirq)
 | 
				
			||||||
			if (bo_int & POWER_CTRL_ENIRQ_VDDIO_BO)
 | 
								setbits_le32(cfg->reg, cfg->bo_enirq);
 | 
				
			||||||
				setbits_le32(&power_regs->hw_power_vddioctrl,
 | 
					 | 
				
			||||||
						POWER_CTRL_ENIRQ_VDDIO_BO);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		do {
 | 
					 | 
				
			||||||
			if (cur_target - new_target > 100)
 | 
					 | 
				
			||||||
				diff = cur_target - 100;
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
				diff = new_target;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			diff -= 2800;
 | 
					 | 
				
			||||||
			diff /= 50;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			clrsetbits_le32(&power_regs->hw_power_vddioctrl,
 | 
					 | 
				
			||||||
				POWER_VDDIOCTRL_TRG_MASK, diff);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (powered_by_linreg ||
 | 
					 | 
				
			||||||
				(readl(&power_regs->hw_power_sts) &
 | 
					 | 
				
			||||||
					POWER_STS_VDD5V_GT_VDDIO))
 | 
					 | 
				
			||||||
				early_delay(500);
 | 
					 | 
				
			||||||
			else {
 | 
					 | 
				
			||||||
				while (!(readl(&power_regs->hw_power_sts) &
 | 
					 | 
				
			||||||
					POWER_STS_DC_OK))
 | 
					 | 
				
			||||||
					;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			cur_target = readl(&power_regs->hw_power_vddioctrl);
 | 
						clrsetbits_le32(cfg->reg, cfg->bo_offset_mask,
 | 
				
			||||||
			cur_target &= POWER_VDDIOCTRL_TRG_MASK;
 | 
								new_brownout << cfg->bo_offset_offset);
 | 
				
			||||||
			cur_target *= 50;	/* 50 mV step*/
 | 
					 | 
				
			||||||
			cur_target += 2800;	/* 2800 mV lowest */
 | 
					 | 
				
			||||||
		} while (new_target < cur_target);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clrsetbits_le32(&power_regs->hw_power_vddioctrl,
 | 
					static void mxs_setup_batt_detect(void)
 | 
				
			||||||
			POWER_VDDIOCTRL_BO_OFFSET_MASK,
 | 
					 | 
				
			||||||
			new_brownout << POWER_VDDIOCTRL_BO_OFFSET_OFFSET);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void mxs_power_set_vddd(uint32_t new_target, uint32_t new_brownout)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct mxs_power_regs *power_regs =
 | 
					 | 
				
			||||||
		(struct mxs_power_regs *)MXS_POWER_BASE;
 | 
					 | 
				
			||||||
	uint32_t cur_target, diff, bo_int = 0;
 | 
					 | 
				
			||||||
	uint32_t powered_by_linreg = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	new_brownout = (new_target - new_brownout + 12) / 25;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cur_target = readl(&power_regs->hw_power_vdddctrl);
 | 
					 | 
				
			||||||
	cur_target &= POWER_VDDDCTRL_TRG_MASK;
 | 
					 | 
				
			||||||
	cur_target *= 25;	/* 25 mV step*/
 | 
					 | 
				
			||||||
	cur_target += 800;	/* 800 mV lowest */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	powered_by_linreg = mxs_get_vddd_power_source_off();
 | 
					 | 
				
			||||||
	if (new_target > cur_target) {
 | 
					 | 
				
			||||||
		if (powered_by_linreg) {
 | 
					 | 
				
			||||||
			bo_int = readl(&power_regs->hw_power_vdddctrl);
 | 
					 | 
				
			||||||
			clrbits_le32(&power_regs->hw_power_vdddctrl,
 | 
					 | 
				
			||||||
					POWER_CTRL_ENIRQ_VDDD_BO);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		setbits_le32(&power_regs->hw_power_vdddctrl,
 | 
					 | 
				
			||||||
				POWER_VDDDCTRL_BO_OFFSET_MASK);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		do {
 | 
					 | 
				
			||||||
			if (new_target - cur_target > 100)
 | 
					 | 
				
			||||||
				diff = cur_target + 100;
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
				diff = new_target;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			diff -= 800;
 | 
					 | 
				
			||||||
			diff /= 25;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			clrsetbits_le32(&power_regs->hw_power_vdddctrl,
 | 
					 | 
				
			||||||
				POWER_VDDDCTRL_TRG_MASK, diff);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (powered_by_linreg ||
 | 
					 | 
				
			||||||
				(readl(&power_regs->hw_power_sts) &
 | 
					 | 
				
			||||||
					POWER_STS_VDD5V_GT_VDDIO))
 | 
					 | 
				
			||||||
				early_delay(500);
 | 
					 | 
				
			||||||
			else {
 | 
					 | 
				
			||||||
				while (!(readl(&power_regs->hw_power_sts) &
 | 
					 | 
				
			||||||
					POWER_STS_DC_OK))
 | 
					 | 
				
			||||||
					;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			cur_target = readl(&power_regs->hw_power_vdddctrl);
 | 
					 | 
				
			||||||
			cur_target &= POWER_VDDDCTRL_TRG_MASK;
 | 
					 | 
				
			||||||
			cur_target *= 25;	/* 25 mV step*/
 | 
					 | 
				
			||||||
			cur_target += 800;	/* 800 mV lowest */
 | 
					 | 
				
			||||||
		} while (new_target > cur_target);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (powered_by_linreg) {
 | 
					 | 
				
			||||||
			writel(POWER_CTRL_VDDD_BO_IRQ,
 | 
					 | 
				
			||||||
				&power_regs->hw_power_ctrl_clr);
 | 
					 | 
				
			||||||
			if (bo_int & POWER_CTRL_ENIRQ_VDDD_BO)
 | 
					 | 
				
			||||||
				setbits_le32(&power_regs->hw_power_vdddctrl,
 | 
					 | 
				
			||||||
						POWER_CTRL_ENIRQ_VDDD_BO);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		do {
 | 
					 | 
				
			||||||
			if (cur_target - new_target > 100)
 | 
					 | 
				
			||||||
				diff = cur_target - 100;
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
				diff = new_target;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			diff -= 800;
 | 
					 | 
				
			||||||
			diff /= 25;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			clrsetbits_le32(&power_regs->hw_power_vdddctrl,
 | 
					 | 
				
			||||||
					POWER_VDDDCTRL_TRG_MASK, diff);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (powered_by_linreg ||
 | 
					 | 
				
			||||||
				(readl(&power_regs->hw_power_sts) &
 | 
					 | 
				
			||||||
					POWER_STS_VDD5V_GT_VDDIO))
 | 
					 | 
				
			||||||
				early_delay(500);
 | 
					 | 
				
			||||||
			else {
 | 
					 | 
				
			||||||
				while (!(readl(&power_regs->hw_power_sts) &
 | 
					 | 
				
			||||||
					POWER_STS_DC_OK))
 | 
					 | 
				
			||||||
					;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			cur_target = readl(&power_regs->hw_power_vdddctrl);
 | 
					 | 
				
			||||||
			cur_target &= POWER_VDDDCTRL_TRG_MASK;
 | 
					 | 
				
			||||||
			cur_target *= 25;	/* 25 mV step*/
 | 
					 | 
				
			||||||
			cur_target += 800;	/* 800 mV lowest */
 | 
					 | 
				
			||||||
		} while (new_target < cur_target);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	clrsetbits_le32(&power_regs->hw_power_vdddctrl,
 | 
					 | 
				
			||||||
			POWER_VDDDCTRL_BO_OFFSET_MASK,
 | 
					 | 
				
			||||||
			new_brownout << POWER_VDDDCTRL_BO_OFFSET_OFFSET);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void mxs_setup_batt_detect(void)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	mxs_lradc_init();
 | 
						mxs_lradc_init();
 | 
				
			||||||
	mxs_lradc_enable_batt_measurement();
 | 
						mxs_lradc_enable_batt_measurement();
 | 
				
			||||||
| 
						 | 
					@ -982,9 +896,8 @@ void mxs_power_init(void)
 | 
				
			||||||
	mxs_power_configure_power_source();
 | 
						mxs_power_configure_power_source();
 | 
				
			||||||
	mxs_enable_output_rail_protection();
 | 
						mxs_enable_output_rail_protection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mxs_power_set_vddio(3300, 3150);
 | 
						mxs_power_set_vddx(&mxs_vddio_cfg, 3300, 3150);
 | 
				
			||||||
 | 
						mxs_power_set_vddx(&mxs_vddd_cfg, 1500, 1000);
 | 
				
			||||||
	mxs_power_set_vddd(1350, 1200);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	writel(POWER_CTRL_VDDD_BO_IRQ | POWER_CTRL_VDDA_BO_IRQ |
 | 
						writel(POWER_CTRL_VDDD_BO_IRQ | POWER_CTRL_VDDA_BO_IRQ |
 | 
				
			||||||
		POWER_CTRL_VDDIO_BO_IRQ | POWER_CTRL_VDD5V_DROOP_IRQ |
 | 
							POWER_CTRL_VDDIO_BO_IRQ | POWER_CTRL_VDD5V_DROOP_IRQ |
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,6 +33,11 @@
 | 
				
			||||||
#include <i2c.h>
 | 
					#include <i2c.h>
 | 
				
			||||||
#include <miiphy.h>
 | 
					#include <miiphy.h>
 | 
				
			||||||
#include <cpsw.h>
 | 
					#include <cpsw.h>
 | 
				
			||||||
 | 
					#include <asm/errno.h>
 | 
				
			||||||
 | 
					#include <linux/usb/ch9.h>
 | 
				
			||||||
 | 
					#include <linux/usb/gadget.h>
 | 
				
			||||||
 | 
					#include <linux/usb/musb.h>
 | 
				
			||||||
 | 
					#include <asm/omap_musb.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE_GLOBAL_DATA_PTR;
 | 
					DECLARE_GLOBAL_DATA_PTR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -63,3 +68,83 @@ void setup_clocks_for_console(void)
 | 
				
			||||||
	/* Not yet implemented */
 | 
						/* Not yet implemented */
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* AM33XX has two MUSB controllers which can be host or gadget */
 | 
				
			||||||
 | 
					#if (defined(CONFIG_MUSB_GADGET) || defined(CONFIG_MUSB_HOST)) && \
 | 
				
			||||||
 | 
						(defined(CONFIG_AM335X_USB0) || defined(CONFIG_AM335X_USB1))
 | 
				
			||||||
 | 
					static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* USB 2.0 PHY Control */
 | 
				
			||||||
 | 
					#define CM_PHY_PWRDN			(1 << 0)
 | 
				
			||||||
 | 
					#define CM_PHY_OTG_PWRDN		(1 << 1)
 | 
				
			||||||
 | 
					#define OTGVDET_EN			(1 << 19)
 | 
				
			||||||
 | 
					#define OTGSESSENDEN			(1 << 20)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void am33xx_usb_set_phy_power(u8 on, u32 *reg_addr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (on) {
 | 
				
			||||||
 | 
							clrsetbits_le32(reg_addr, CM_PHY_PWRDN | CM_PHY_OTG_PWRDN,
 | 
				
			||||||
 | 
									OTGVDET_EN | OTGSESSENDEN);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							clrsetbits_le32(reg_addr, 0, CM_PHY_PWRDN | CM_PHY_OTG_PWRDN);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct musb_hdrc_config musb_config = {
 | 
				
			||||||
 | 
						.multipoint     = 1,
 | 
				
			||||||
 | 
						.dyn_fifo       = 1,
 | 
				
			||||||
 | 
						.num_eps        = 16,
 | 
				
			||||||
 | 
						.ram_bits       = 12,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_AM335X_USB0
 | 
				
			||||||
 | 
					static void am33xx_otg0_set_phy_power(u8 on)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						am33xx_usb_set_phy_power(on, &cdev->usb_ctrl0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct omap_musb_board_data otg0_board_data = {
 | 
				
			||||||
 | 
						.set_phy_power = am33xx_otg0_set_phy_power,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct musb_hdrc_platform_data otg0_plat = {
 | 
				
			||||||
 | 
						.mode           = CONFIG_AM335X_USB0_MODE,
 | 
				
			||||||
 | 
						.config         = &musb_config,
 | 
				
			||||||
 | 
						.power          = 50,
 | 
				
			||||||
 | 
						.platform_ops	= &musb_dsps_ops,
 | 
				
			||||||
 | 
						.board_data	= &otg0_board_data,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_AM335X_USB1
 | 
				
			||||||
 | 
					static void am33xx_otg1_set_phy_power(u8 on)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						am33xx_usb_set_phy_power(on, &cdev->usb_ctrl1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct omap_musb_board_data otg1_board_data = {
 | 
				
			||||||
 | 
						.set_phy_power = am33xx_otg1_set_phy_power,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct musb_hdrc_platform_data otg1_plat = {
 | 
				
			||||||
 | 
						.mode           = CONFIG_AM335X_USB1_MODE,
 | 
				
			||||||
 | 
						.config         = &musb_config,
 | 
				
			||||||
 | 
						.power          = 50,
 | 
				
			||||||
 | 
						.platform_ops	= &musb_dsps_ops,
 | 
				
			||||||
 | 
						.board_data	= &otg1_board_data,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int arch_misc_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef CONFIG_AM335X_USB0
 | 
				
			||||||
 | 
						musb_register(&otg0_plat, &otg0_board_data,
 | 
				
			||||||
 | 
							(void *)AM335X_USB0_OTG_BASE);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef CONFIG_AM335X_USB1
 | 
				
			||||||
 | 
						musb_register(&otg1_plat, &otg1_board_data,
 | 
				
			||||||
 | 
							(void *)AM335X_USB1_OTG_BASE);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,6 +40,7 @@
 | 
				
			||||||
#define CLK_MODE_MASK		0xfffffff8
 | 
					#define CLK_MODE_MASK		0xfffffff8
 | 
				
			||||||
#define CLK_DIV_SEL		0xFFFFFFE0
 | 
					#define CLK_DIV_SEL		0xFFFFFFE0
 | 
				
			||||||
#define CPGMAC0_IDLE		0x30000
 | 
					#define CPGMAC0_IDLE		0x30000
 | 
				
			||||||
 | 
					#define DPLL_CLKDCOLDO_GATE_CTRL        0x300
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const struct cm_perpll *cmper = (struct cm_perpll *)CM_PER;
 | 
					const struct cm_perpll *cmper = (struct cm_perpll *)CM_PER;
 | 
				
			||||||
const struct cm_wkuppll *cmwkup = (struct cm_wkuppll *)CM_WKUP;
 | 
					const struct cm_wkuppll *cmwkup = (struct cm_wkuppll *)CM_WKUP;
 | 
				
			||||||
| 
						 | 
					@ -194,6 +195,11 @@ static void enable_per_clocks(void)
 | 
				
			||||||
	writel(PRCM_MOD_EN, &cmrtc->rtcclkctrl);
 | 
						writel(PRCM_MOD_EN, &cmrtc->rtcclkctrl);
 | 
				
			||||||
	while (readl(&cmrtc->rtcclkctrl) != PRCM_MOD_EN)
 | 
						while (readl(&cmrtc->rtcclkctrl) != PRCM_MOD_EN)
 | 
				
			||||||
		;
 | 
							;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* MUSB */
 | 
				
			||||||
 | 
						writel(PRCM_MOD_EN, &cmper->usb0clkctrl);
 | 
				
			||||||
 | 
						while (readl(&cmper->usb0clkctrl) != PRCM_MOD_EN)
 | 
				
			||||||
 | 
							;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void mpu_pll_config(void)
 | 
					static void mpu_pll_config(void)
 | 
				
			||||||
| 
						 | 
					@ -290,6 +296,8 @@ static void per_pll_config(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while (readl(&cmwkup->idlestdpllper) != ST_DPLL_CLK)
 | 
						while (readl(&cmwkup->idlestdpllper) != ST_DPLL_CLK)
 | 
				
			||||||
		;
 | 
							;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						writel(DPLL_CLKDCOLDO_GATE_CTRL, &cmwkup->clkdcoldodpllper);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ddr_pll_config(unsigned int ddrpll_m)
 | 
					void ddr_pll_config(unsigned int ddrpll_m)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -921,6 +921,21 @@ static int exynos5_set_spi_clk(enum periph_id periph_id,
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static unsigned long exynos4_get_i2c_clk(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct exynos4_clock *clk =
 | 
				
			||||||
 | 
							(struct exynos4_clock *)samsung_get_base_clock();
 | 
				
			||||||
 | 
						unsigned long sclk, aclk_100;
 | 
				
			||||||
 | 
						unsigned int ratio;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sclk = get_pll_clk(APLL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ratio = (readl(&clk->div_top)) >> 4;
 | 
				
			||||||
 | 
						ratio &= 0xf;
 | 
				
			||||||
 | 
						aclk_100 = sclk / (ratio + 1);
 | 
				
			||||||
 | 
						return aclk_100;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned long get_pll_clk(int pllreg)
 | 
					unsigned long get_pll_clk(int pllreg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (cpu_is_exynos5())
 | 
						if (cpu_is_exynos5())
 | 
				
			||||||
| 
						 | 
					@ -941,6 +956,8 @@ unsigned long get_i2c_clk(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (cpu_is_exynos5()) {
 | 
						if (cpu_is_exynos5()) {
 | 
				
			||||||
		return exynos5_get_i2c_clk();
 | 
							return exynos5_get_i2c_clk();
 | 
				
			||||||
 | 
						} else if (cpu_is_exynos4()) {
 | 
				
			||||||
 | 
							return exynos4_get_i2c_clk();
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		debug("I2C clock is not set for this CPU\n");
 | 
							debug("I2C clock is not set for this CPU\n");
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -329,54 +329,60 @@ static int exynos5_pinmux_config(int peripheral, int flags)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int exynos4_mmc_config(int peripheral, int flags)
 | 
					static void exynos4_i2c_config(int peripheral, int flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct exynos4_gpio_part2 *gpio2 =
 | 
						struct exynos4_gpio_part1 *gpio1 =
 | 
				
			||||||
		(struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
 | 
							(struct exynos4_gpio_part1 *) samsung_get_base_gpio_part1();
 | 
				
			||||||
	struct s5p_gpio_bank *bank, *bank_ext;
 | 
					 | 
				
			||||||
	int i;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (peripheral) {
 | 
						switch (peripheral) {
 | 
				
			||||||
	case PERIPH_ID_SDMMC0:
 | 
						case PERIPH_ID_I2C0:
 | 
				
			||||||
		bank = &gpio2->k0;
 | 
							s5p_gpio_cfg_pin(&gpio1->d1, 0, GPIO_FUNC(0x2));
 | 
				
			||||||
		bank_ext = &gpio2->k1;
 | 
							s5p_gpio_cfg_pin(&gpio1->d1, 1, GPIO_FUNC(0x2));
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case PERIPH_ID_SDMMC2:
 | 
						case PERIPH_ID_I2C1:
 | 
				
			||||||
		bank = &gpio2->k2;
 | 
							s5p_gpio_cfg_pin(&gpio1->d1, 2, GPIO_FUNC(0x2));
 | 
				
			||||||
		bank_ext = &gpio2->k3;
 | 
							s5p_gpio_cfg_pin(&gpio1->d1, 3, GPIO_FUNC(0x2));
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case PERIPH_ID_I2C2:
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->a0, 6, GPIO_FUNC(0x3));
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->a0, 7, GPIO_FUNC(0x3));
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case PERIPH_ID_I2C3:
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->a1, 2, GPIO_FUNC(0x3));
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->a1, 3, GPIO_FUNC(0x3));
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case PERIPH_ID_I2C4:
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->b, 2, GPIO_FUNC(0x3));
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->b, 3, GPIO_FUNC(0x3));
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case PERIPH_ID_I2C5:
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->b, 6, GPIO_FUNC(0x3));
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->b, 7, GPIO_FUNC(0x3));
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case PERIPH_ID_I2C6:
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->c1, 3, GPIO_FUNC(0x4));
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->c1, 4, GPIO_FUNC(0x4));
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case PERIPH_ID_I2C7:
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->d0, 2, GPIO_FUNC(0x3));
 | 
				
			||||||
 | 
							s5p_gpio_cfg_pin(&gpio1->d0, 3, GPIO_FUNC(0x3));
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for (i = 0; i < 7; i++) {
 | 
					 | 
				
			||||||
		if (i == 2)
 | 
					 | 
				
			||||||
			continue;
 | 
					 | 
				
			||||||
		s5p_gpio_cfg_pin(bank, i,  GPIO_FUNC(0x2));
 | 
					 | 
				
			||||||
		s5p_gpio_set_pull(bank, i, GPIO_PULL_NONE);
 | 
					 | 
				
			||||||
		s5p_gpio_set_drv(bank, i, GPIO_DRV_4X);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (flags & PINMUX_FLAG_8BIT_MODE) {
 | 
					 | 
				
			||||||
		for (i = 3; i < 7; i++) {
 | 
					 | 
				
			||||||
			s5p_gpio_cfg_pin(bank_ext, i,  GPIO_FUNC(0x3));
 | 
					 | 
				
			||||||
			s5p_gpio_set_pull(bank_ext, i, GPIO_PULL_NONE);
 | 
					 | 
				
			||||||
			s5p_gpio_set_drv(bank_ext, i, GPIO_DRV_4X);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int exynos4_pinmux_config(int peripheral, int flags)
 | 
					static int exynos4_pinmux_config(int peripheral, int flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	switch (peripheral) {
 | 
						switch (peripheral) {
 | 
				
			||||||
	case PERIPH_ID_SDMMC0:
 | 
						case PERIPH_ID_I2C0:
 | 
				
			||||||
	case PERIPH_ID_SDMMC2:
 | 
						case PERIPH_ID_I2C1:
 | 
				
			||||||
		return exynos4_mmc_config(peripheral, flags);
 | 
						case PERIPH_ID_I2C2:
 | 
				
			||||||
	case PERIPH_ID_SDMMC1:
 | 
						case PERIPH_ID_I2C3:
 | 
				
			||||||
	case PERIPH_ID_SDMMC3:
 | 
						case PERIPH_ID_I2C4:
 | 
				
			||||||
	case PERIPH_ID_SDMMC4:
 | 
						case PERIPH_ID_I2C5:
 | 
				
			||||||
		printf("SDMMC device %d not implemented\n", peripheral);
 | 
						case PERIPH_ID_I2C6:
 | 
				
			||||||
		return -1;
 | 
						case PERIPH_ID_I2C7:
 | 
				
			||||||
 | 
							exynos4_i2c_config(peripheral, flags);
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		debug("%s: invalid peripheral %d", __func__, peripheral);
 | 
							debug("%s: invalid peripheral %d", __func__, peripheral);
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,6 +38,7 @@ endif
 | 
				
			||||||
COBJS-$(CONFIG_DRIVER_TI_EMAC)	+= emac.o
 | 
					COBJS-$(CONFIG_DRIVER_TI_EMAC)	+= emac.o
 | 
				
			||||||
COBJS-$(CONFIG_EMIF4)	+= emif4.o
 | 
					COBJS-$(CONFIG_EMIF4)	+= emif4.o
 | 
				
			||||||
COBJS-$(CONFIG_SDRC)	+= sdrc.o
 | 
					COBJS-$(CONFIG_SDRC)	+= sdrc.o
 | 
				
			||||||
 | 
					COBJS-$(CONFIG_USB_MUSB_AM35X)	+= am35x_musb.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 | 
					SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 | 
				
			||||||
OBJS	:= $(addprefix $(obj),$(COBJS) $(COBJS-y) $(SOBJS))
 | 
					OBJS	:= $(addprefix $(obj),$(COBJS) $(COBJS-y) $(SOBJS))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,75 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This file configures the internal USB PHY in AM35X.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2012 Ilya Yanok <ilya.yanok@gmail.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Based on omap_phy_internal.c code from Linux by
 | 
				
			||||||
 | 
					 * Hema HK <hemahk@ti.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <common.h>
 | 
				
			||||||
 | 
					#include <asm/io.h>
 | 
				
			||||||
 | 
					#include <asm/arch/am35x_def.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void am35x_musb_reset(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/* Reset the musb interface */
 | 
				
			||||||
 | 
						clrsetbits_le32(&am35x_scm_general_regs->ip_sw_reset,
 | 
				
			||||||
 | 
								0, USBOTGSS_SW_RST);
 | 
				
			||||||
 | 
						clrsetbits_le32(&am35x_scm_general_regs->ip_sw_reset,
 | 
				
			||||||
 | 
								USBOTGSS_SW_RST, 0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void am35x_musb_phy_power(u8 on)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						unsigned long start = get_timer(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (on) {
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * Start the on-chip PHY and its PLL.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							clrsetbits_le32(&am35x_scm_general_regs->devconf2,
 | 
				
			||||||
 | 
									CONF2_RESET | CONF2_PHYPWRDN | CONF2_OTGPWRDN,
 | 
				
			||||||
 | 
									CONF2_PHY_PLLON);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							debug("Waiting for PHY clock good...\n");
 | 
				
			||||||
 | 
							while (!(readl(&am35x_scm_general_regs->devconf2)
 | 
				
			||||||
 | 
									& CONF2_PHYCLKGD)) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (get_timer(start) > CONFIG_SYS_HZ / 10) {
 | 
				
			||||||
 | 
									printf("musb PHY clock good timed out\n");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * Power down the on-chip PHY.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							clrsetbits_le32(&am35x_scm_general_regs->devconf2,
 | 
				
			||||||
 | 
									CONF2_PHY_PLLON,
 | 
				
			||||||
 | 
									CONF2_PHYPWRDN | CONF2_OTGPWRDN);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void am35x_musb_clear_irq(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						clrsetbits_le32(&am35x_scm_general_regs->lvl_intr_clr,
 | 
				
			||||||
 | 
								0, USBOTGSS_INT_CLR);
 | 
				
			||||||
 | 
						readl(&am35x_scm_general_regs->lvl_intr_clr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,7 +82,8 @@ struct cm_wkuppll {
 | 
				
			||||||
	unsigned int clkseldpllcore;	/* offset 0x68 */
 | 
						unsigned int clkseldpllcore;	/* offset 0x68 */
 | 
				
			||||||
	unsigned int resv9[1];
 | 
						unsigned int resv9[1];
 | 
				
			||||||
	unsigned int idlestdpllper;	/* offset 0x70 */
 | 
						unsigned int idlestdpllper;	/* offset 0x70 */
 | 
				
			||||||
	unsigned int resv10[3];
 | 
						unsigned int resv10[2];
 | 
				
			||||||
 | 
						unsigned int clkdcoldodpllper;	/* offset 0x7c */
 | 
				
			||||||
	unsigned int divm4dpllcore;	/* offset 0x80 */
 | 
						unsigned int divm4dpllcore;	/* offset 0x80 */
 | 
				
			||||||
	unsigned int divm5dpllcore;	/* offset 0x84 */
 | 
						unsigned int divm5dpllcore;	/* offset 0x84 */
 | 
				
			||||||
	unsigned int clkmoddpllmpu;	/* offset 0x88 */
 | 
						unsigned int clkmoddpllmpu;	/* offset 0x88 */
 | 
				
			||||||
| 
						 | 
					@ -275,12 +276,16 @@ struct ctrl_stat {
 | 
				
			||||||
/* Control Device Register */
 | 
					/* Control Device Register */
 | 
				
			||||||
struct ctrl_dev {
 | 
					struct ctrl_dev {
 | 
				
			||||||
	unsigned int deviceid;		/* offset 0x00 */
 | 
						unsigned int deviceid;		/* offset 0x00 */
 | 
				
			||||||
	unsigned int resv1[11];
 | 
						unsigned int resv1[7];
 | 
				
			||||||
 | 
						unsigned int usb_ctrl0;		/* offset 0x20 */
 | 
				
			||||||
 | 
						unsigned int resv2;
 | 
				
			||||||
 | 
						unsigned int usb_ctrl1;		/* offset 0x28 */
 | 
				
			||||||
 | 
						unsigned int resv3;
 | 
				
			||||||
	unsigned int macid0l;		/* offset 0x30 */
 | 
						unsigned int macid0l;		/* offset 0x30 */
 | 
				
			||||||
	unsigned int macid0h;		/* offset 0x34 */
 | 
						unsigned int macid0h;		/* offset 0x34 */
 | 
				
			||||||
	unsigned int macid1l;		/* offset 0x38 */
 | 
						unsigned int macid1l;		/* offset 0x38 */
 | 
				
			||||||
	unsigned int macid1h;		/* offset 0x3c */
 | 
						unsigned int macid1h;		/* offset 0x3c */
 | 
				
			||||||
	unsigned int resv2[4];
 | 
						unsigned int resv4[4];
 | 
				
			||||||
	unsigned int miisel;		/* offset 0x50 */
 | 
						unsigned int miisel;		/* offset 0x50 */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#endif /* __ASSEMBLY__ */
 | 
					#endif /* __ASSEMBLY__ */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -87,4 +87,8 @@
 | 
				
			||||||
/* RTC base address */
 | 
					/* RTC base address */
 | 
				
			||||||
#define AM335X_RTC_BASE			0x44E3E000
 | 
					#define AM335X_RTC_BASE			0x44E3E000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* OTG */
 | 
				
			||||||
 | 
					#define AM335X_USB0_OTG_BASE		0x47401000
 | 
				
			||||||
 | 
					#define AM335X_USB1_OTG_BASE		0x47401800
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __AM33XX_HARDWARE_H */
 | 
					#endif /* __AM33XX_HARDWARE_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,8 @@
 | 
				
			||||||
#define EXYNOS4_ADDR_BASE		0x10000000
 | 
					#define EXYNOS4_ADDR_BASE		0x10000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* EXYNOS4 */
 | 
					/* EXYNOS4 */
 | 
				
			||||||
 | 
					#define EXYNOS4_I2C_SPACING		0x10000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EXYNOS4_GPIO_PART3_BASE		0x03860000
 | 
					#define EXYNOS4_GPIO_PART3_BASE		0x03860000
 | 
				
			||||||
#define EXYNOS4_PRO_ID			0x10000000
 | 
					#define EXYNOS4_PRO_ID			0x10000000
 | 
				
			||||||
#define EXYNOS4_SYSREG_BASE		0x10010000
 | 
					#define EXYNOS4_SYSREG_BASE		0x10010000
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * (C) Copyright 2012 SAMSUNG Electronics
 | 
				
			||||||
 | 
					 * Jaehoon Chung <jh80.chung@samsung.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DWMCI_CLKSEL		0x09C
 | 
				
			||||||
 | 
					#define DWMCI_SHIFT_0		0x0
 | 
				
			||||||
 | 
					#define DWMCI_SHIFT_1		0x1
 | 
				
			||||||
 | 
					#define DWMCI_SHIFT_2		0x2
 | 
				
			||||||
 | 
					#define DWMCI_SHIFT_3		0x3
 | 
				
			||||||
 | 
					#define DWMCI_SET_SAMPLE_CLK(x)	(x)
 | 
				
			||||||
 | 
					#define DWMCI_SET_DRV_CLK(x)	((x) << 16)
 | 
				
			||||||
 | 
					#define DWMCI_SET_DIV_RATIO(x)	((x) << 24)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int exynos_dwmci_init(u32 regbase, int bus_width, int index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline unsigned int exynos_dwmmc_init(int index, int bus_width)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
 | 
				
			||||||
 | 
						return exynos_dwmci_init(base, bus_width, index);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -35,6 +35,7 @@ enum mxc_clock {
 | 
				
			||||||
	MXC_SSP1_CLK,
 | 
						MXC_SSP1_CLK,
 | 
				
			||||||
	MXC_SSP2_CLK,
 | 
						MXC_SSP2_CLK,
 | 
				
			||||||
	MXC_SSP3_CLK,
 | 
						MXC_SSP3_CLK,
 | 
				
			||||||
 | 
						MXC_XTAL_CLK,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum mxs_ioclock {
 | 
					enum mxs_ioclock {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,6 @@
 | 
				
			||||||
#include <asm/arch/regs-apbh.h>
 | 
					#include <asm/arch/regs-apbh.h>
 | 
				
			||||||
#include <asm/arch/regs-base.h>
 | 
					#include <asm/arch/regs-base.h>
 | 
				
			||||||
#include <asm/arch/regs-bch.h>
 | 
					#include <asm/arch/regs-bch.h>
 | 
				
			||||||
#include <asm/arch/regs-clkctrl-mx28.h>
 | 
					 | 
				
			||||||
#include <asm/arch/regs-digctl.h>
 | 
					#include <asm/arch/regs-digctl.h>
 | 
				
			||||||
#include <asm/arch/regs-gpmi.h>
 | 
					#include <asm/arch/regs-gpmi.h>
 | 
				
			||||||
#include <asm/arch/regs-i2c.h>
 | 
					#include <asm/arch/regs-i2c.h>
 | 
				
			||||||
| 
						 | 
					@ -34,9 +33,13 @@
 | 
				
			||||||
#include <asm/arch/regs-lradc.h>
 | 
					#include <asm/arch/regs-lradc.h>
 | 
				
			||||||
#include <asm/arch/regs-ocotp.h>
 | 
					#include <asm/arch/regs-ocotp.h>
 | 
				
			||||||
#include <asm/arch/regs-pinctrl.h>
 | 
					#include <asm/arch/regs-pinctrl.h>
 | 
				
			||||||
#include <asm/arch/regs-power.h>
 | 
					 | 
				
			||||||
#include <asm/arch/regs-rtc.h>
 | 
					#include <asm/arch/regs-rtc.h>
 | 
				
			||||||
#include <asm/arch/regs-ssp.h>
 | 
					#include <asm/arch/regs-ssp.h>
 | 
				
			||||||
#include <asm/arch/regs-timrot.h>
 | 
					#include <asm/arch/regs-timrot.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_MX28
 | 
				
			||||||
 | 
					#include <asm/arch/regs-clkctrl-mx28.h>
 | 
				
			||||||
 | 
					#include <asm/arch/regs-power-mx28.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif	/* __IMX_REGS_H__ */
 | 
					#endif	/* __IMX_REGS_H__ */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,9 +31,11 @@
 | 
				
			||||||
#ifndef	__ASSEMBLY__
 | 
					#ifndef	__ASSEMBLY__
 | 
				
			||||||
struct mxs_clkctrl_regs {
 | 
					struct mxs_clkctrl_regs {
 | 
				
			||||||
	mxs_reg_32(hw_clkctrl_pll0ctrl0)	/* 0x00 */
 | 
						mxs_reg_32(hw_clkctrl_pll0ctrl0)	/* 0x00 */
 | 
				
			||||||
	mxs_reg_32(hw_clkctrl_pll0ctrl1)	/* 0x10 */
 | 
						uint32_t	hw_clkctrl_pll0ctrl1;	/* 0x10 */
 | 
				
			||||||
 | 
						uint32_t	reserved_pll0ctrl1[3];	/* 0x14-0x1c */
 | 
				
			||||||
	mxs_reg_32(hw_clkctrl_pll1ctrl0)	/* 0x20 */
 | 
						mxs_reg_32(hw_clkctrl_pll1ctrl0)	/* 0x20 */
 | 
				
			||||||
	mxs_reg_32(hw_clkctrl_pll1ctrl1)	/* 0x30 */
 | 
						uint32_t	hw_clkctrl_pll1ctrl1;	/* 0x30 */
 | 
				
			||||||
 | 
						uint32_t	reserved_pll1ctrl1[3];	/* 0x34-0x3c */
 | 
				
			||||||
	mxs_reg_32(hw_clkctrl_pll2ctrl0)	/* 0x40 */
 | 
						mxs_reg_32(hw_clkctrl_pll2ctrl0)	/* 0x40 */
 | 
				
			||||||
	mxs_reg_32(hw_clkctrl_cpu)		/* 0x50 */
 | 
						mxs_reg_32(hw_clkctrl_cpu)		/* 0x50 */
 | 
				
			||||||
	mxs_reg_32(hw_clkctrl_hbus)		/* 0x60 */
 | 
						mxs_reg_32(hw_clkctrl_hbus)		/* 0x60 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,9 +32,34 @@
 | 
				
			||||||
#ifndef __KERNEL_STRICT_NAMES
 | 
					#ifndef __KERNEL_STRICT_NAMES
 | 
				
			||||||
#ifndef __ASSEMBLY__
 | 
					#ifndef __ASSEMBLY__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* LVL_INTR_CLEAR bits */
 | 
				
			||||||
 | 
					#define USBOTGSS_INT_CLR	(1 << 4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* IP_SW_RESET bits */
 | 
					/* IP_SW_RESET bits */
 | 
				
			||||||
 | 
					#define USBOTGSS_SW_RST		(1 << 0)	/* reset USBOTG */
 | 
				
			||||||
#define CPGMACSS_SW_RST		(1 << 1)	/* reset CPGMAC */
 | 
					#define CPGMACSS_SW_RST		(1 << 1)	/* reset CPGMAC */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* DEVCONF2 bits */
 | 
				
			||||||
 | 
					#define CONF2_PHY_GPIOMODE	(1 << 23)
 | 
				
			||||||
 | 
					#define CONF2_OTGMODE		(3 << 14)
 | 
				
			||||||
 | 
					#define CONF2_NO_OVERRIDE	(0 << 14)
 | 
				
			||||||
 | 
					#define CONF2_FORCE_HOST	(1 << 14)
 | 
				
			||||||
 | 
					#define CONF2_FORCE_DEVICE	(2 << 14)
 | 
				
			||||||
 | 
					#define CONF2_FORCE_HOST_VBUS_LOW (3 << 14)
 | 
				
			||||||
 | 
					#define CONF2_SESENDEN		(1 << 13)
 | 
				
			||||||
 | 
					#define CONF2_VBDTCTEN		(1 << 12)
 | 
				
			||||||
 | 
					#define CONF2_REFFREQ_24MHZ	(2 << 8)
 | 
				
			||||||
 | 
					#define CONF2_REFFREQ_26MHZ	(7 << 8)
 | 
				
			||||||
 | 
					#define CONF2_REFFREQ_13MHZ	(6 << 8)
 | 
				
			||||||
 | 
					#define CONF2_REFFREQ		(0xf << 8)
 | 
				
			||||||
 | 
					#define CONF2_PHYCLKGD		(1 << 7)
 | 
				
			||||||
 | 
					#define CONF2_VBUSSENSE		(1 << 6)
 | 
				
			||||||
 | 
					#define CONF2_PHY_PLLON		(1 << 5)
 | 
				
			||||||
 | 
					#define CONF2_RESET		(1 << 4)
 | 
				
			||||||
 | 
					#define CONF2_PHYPWRDN		(1 << 3)
 | 
				
			||||||
 | 
					#define CONF2_OTGPWRDN		(1 << 2)
 | 
				
			||||||
 | 
					#define CONF2_DATPOL		(1 << 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* General register mappings of system control module */
 | 
					/* General register mappings of system control module */
 | 
				
			||||||
#define AM35X_SCM_GEN_BASE	0x48002270
 | 
					#define AM35X_SCM_GEN_BASE	0x48002270
 | 
				
			||||||
struct am35x_scm_general {
 | 
					struct am35x_scm_general {
 | 
				
			||||||
| 
						 | 
					@ -49,6 +74,8 @@ struct am35x_scm_general {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#define am35x_scm_general_regs ((struct am35x_scm_general *)AM35X_SCM_GEN_BASE)
 | 
					#define am35x_scm_general_regs ((struct am35x_scm_general *)AM35X_SCM_GEN_BASE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define AM35XX_IPSS_USBOTGSS_BASE	0x5C040000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /*__ASSEMBLY__ */
 | 
					#endif /*__ASSEMBLY__ */
 | 
				
			||||||
#endif /* __KERNEL_STRICT_NAMES */
 | 
					#endif /* __KERNEL_STRICT_NAMES */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,6 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2011 The Chromium OS Authors.
 | 
					 * (C) Copyright 2012
 | 
				
			||||||
 * (C) Copyright 2008
 | 
					 * Ilya Yanok, <ilya.yanok@gmail.com>
 | 
				
			||||||
 * Graeme Russ, graeme.russ@gmail.com.
 | 
					 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * See file CREDITS for list of people who contributed to this
 | 
					 * See file CREDITS for list of people who contributed to this
 | 
				
			||||||
 * project.
 | 
					 * project.
 | 
				
			||||||
| 
						 | 
					@ -18,29 +17,12 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * You should have received a copy of the GNU General Public License
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 * along with this program; if not, write to the Free Software
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | 
					 * Foundation, Inc.
 | 
				
			||||||
 * MA 02111-1307 USA
 | 
					 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					#ifndef __ASM_ARCH_OMAP3_MUSB_H
 | 
				
			||||||
 * 16bit initialization code.
 | 
					#define __ASM_ARCH_OMAP3_MUSB_H
 | 
				
			||||||
 * This code have to map the area of the boot flash
 | 
					extern void am35x_musb_reset(void);
 | 
				
			||||||
 * that is used by U-boot to its final destination.
 | 
					extern void am35x_musb_phy_power(u8 on);
 | 
				
			||||||
 */
 | 
					extern void am35x_musb_clear_irq(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
.text
 | 
					 | 
				
			||||||
.section .start16, "ax"
 | 
					 | 
				
			||||||
.code16
 | 
					 | 
				
			||||||
.globl board_init16
 | 
					 | 
				
			||||||
board_init16:
 | 
					 | 
				
			||||||
	jmp	board_init16_ret
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.section .bios, "ax"
 | 
					 | 
				
			||||||
.code16
 | 
					 | 
				
			||||||
.globl realmode_reset
 | 
					 | 
				
			||||||
.hidden realmode_reset
 | 
					 | 
				
			||||||
.type realmode_reset, @function
 | 
					 | 
				
			||||||
realmode_reset:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1:	hlt
 | 
					 | 
				
			||||||
	jmp	1
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (C) 2012
 | 
				
			||||||
 | 
					 * Anatolij Gustschin, DENX Software Engineering, <agust@denx.de>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU General Public License as
 | 
				
			||||||
 | 
					 * published by the Free Software Foundation; either version 2 of
 | 
				
			||||||
 | 
					 * the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifndef __MX5_VIDEO_H
 | 
				
			||||||
 | 
					#define __MX5_VIDEO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_VIDEO
 | 
				
			||||||
 | 
					void lcd_enable(void);
 | 
				
			||||||
 | 
					void setup_iomux_lcd(void);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					static inline void lcd_enable(void) { }
 | 
				
			||||||
 | 
					static inline void setup_iomux_lcd(void) { }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Board data structure for musb gadget on OMAPs
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2012, Ilya Yanok <ilya.yanok@gmail.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU General Public License as
 | 
				
			||||||
 | 
					 * published by the Free Software Foundation; either version 2 of
 | 
				
			||||||
 | 
					 * the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR /PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ASM_ARM_OMAP_MUSB_H
 | 
				
			||||||
 | 
					#define __ASM_ARM_OMAP_MUSB_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern struct musb_platform_ops musb_dsps_ops;
 | 
				
			||||||
 | 
					extern const struct musb_platform_ops am35x_ops;
 | 
				
			||||||
 | 
					extern const struct musb_platform_ops omap2430_ops;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct omap_musb_board_data {
 | 
				
			||||||
 | 
						u8 interface_type;
 | 
				
			||||||
 | 
						void (*set_phy_power)(u8 on);
 | 
				
			||||||
 | 
						void (*clear_irq)(void);
 | 
				
			||||||
 | 
						void (*reset)(void);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum musb_interface    {MUSB_INTERFACE_ULPI, MUSB_INTERFACE_UTMI};
 | 
				
			||||||
 | 
					#endif /* __ASM_ARM_OMAP_MUSB_H */
 | 
				
			||||||
| 
						 | 
					@ -224,6 +224,13 @@ int __arch_cpu_init(void)
 | 
				
			||||||
int arch_cpu_init(void)
 | 
					int arch_cpu_init(void)
 | 
				
			||||||
	__attribute__((weak, alias("__arch_cpu_init")));
 | 
						__attribute__((weak, alias("__arch_cpu_init")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int __power_init_board(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					int power_init_board(void)
 | 
				
			||||||
 | 
						__attribute__((weak, alias("__power_init_board")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
init_fnc_t *init_sequence[] = {
 | 
					init_fnc_t *init_sequence[] = {
 | 
				
			||||||
	arch_cpu_init,		/* basic arch cpu dependent setup */
 | 
						arch_cpu_init,		/* basic arch cpu dependent setup */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -525,6 +532,7 @@ void board_init_r(gd_t *id, ulong dest_addr)
 | 
				
			||||||
#ifdef CONFIG_ARCH_EARLY_INIT_R
 | 
					#ifdef CONFIG_ARCH_EARLY_INIT_R
 | 
				
			||||||
	arch_early_init_r();
 | 
						arch_early_init_r();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
						power_init_board();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(CONFIG_SYS_NO_FLASH)
 | 
					#if !defined(CONFIG_SYS_NO_FLASH)
 | 
				
			||||||
	puts("Flash: ");
 | 
						puts("Flash: ");
 | 
				
			||||||
| 
						 | 
					@ -532,15 +540,13 @@ void board_init_r(gd_t *id, ulong dest_addr)
 | 
				
			||||||
	flash_size = flash_init();
 | 
						flash_size = flash_init();
 | 
				
			||||||
	if (flash_size > 0) {
 | 
						if (flash_size > 0) {
 | 
				
			||||||
# ifdef CONFIG_SYS_FLASH_CHECKSUM
 | 
					# ifdef CONFIG_SYS_FLASH_CHECKSUM
 | 
				
			||||||
		char *s = getenv("flashchecksum");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		print_size(flash_size, "");
 | 
							print_size(flash_size, "");
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * Compute and print flash CRC if flashchecksum is set to 'y'
 | 
							 * Compute and print flash CRC if flashchecksum is set to 'y'
 | 
				
			||||||
		 *
 | 
							 *
 | 
				
			||||||
		 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
 | 
							 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		if (s && (*s == 'y')) {
 | 
							if (getenv_yesno("flashchecksum") == 1) {
 | 
				
			||||||
			printf("  CRC: %08X", crc32(0,
 | 
								printf("  CRC: %08X", crc32(0,
 | 
				
			||||||
				(const unsigned char *) CONFIG_SYS_FLASH_BASE,
 | 
									(const unsigned char *) CONFIG_SYS_FLASH_BASE,
 | 
				
			||||||
				flash_size));
 | 
									flash_size));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int strcasecmp(const char *, const char *);
 | 
					extern int strcasecmp(const char *, const char *);
 | 
				
			||||||
extern int strncasecmp(const char *, const char *, int);
 | 
					extern int strncasecmp(const char *, const char *, __kernel_size_t);
 | 
				
			||||||
extern char * strcpy(char *,const char *);
 | 
					extern char * strcpy(char *,const char *);
 | 
				
			||||||
extern char * strncpy(char *,const char *, __kernel_size_t);
 | 
					extern char * strncpy(char *,const char *, __kernel_size_t);
 | 
				
			||||||
extern __kernel_size_t strlen(const char *);
 | 
					extern __kernel_size_t strlen(const char *);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -462,8 +462,7 @@ void board_init_r (gd_t *id, ulong dest_addr)
 | 
				
			||||||
		 *
 | 
							 *
 | 
				
			||||||
		 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
 | 
							 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		s = getenv ("flashchecksum");
 | 
							if (getenv_yesno("flashchecksum") == 1) {
 | 
				
			||||||
		if (s && (*s == 'y')) {
 | 
					 | 
				
			||||||
			printf ("  CRC: %08X",
 | 
								printf ("  CRC: %08X",
 | 
				
			||||||
					crc32 (0,
 | 
										crc32 (0,
 | 
				
			||||||
						   (const unsigned char *) CONFIG_SYS_FLASH_BASE,
 | 
											   (const unsigned char *) CONFIG_SYS_FLASH_BASE,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,7 +74,6 @@ void board_init_f(ulong not_used)
 | 
				
			||||||
	gd = (gd_t *) (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET);
 | 
						gd = (gd_t *) (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET);
 | 
				
			||||||
	bd = (bd_t *) (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET \
 | 
						bd = (bd_t *) (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET \
 | 
				
			||||||
						- GENERATED_BD_INFO_SIZE);
 | 
											- GENERATED_BD_INFO_SIZE);
 | 
				
			||||||
	__maybe_unused char *s;
 | 
					 | 
				
			||||||
#if defined(CONFIG_CMD_FLASH)
 | 
					#if defined(CONFIG_CMD_FLASH)
 | 
				
			||||||
	ulong flash_size = 0;
 | 
						ulong flash_size = 0;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -143,8 +142,7 @@ void board_init_f(ulong not_used)
 | 
				
			||||||
		 *
 | 
							 *
 | 
				
			||||||
		 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
 | 
							 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		s = getenv ("flashchecksum");
 | 
							if (getenv_yesno("flashchecksum") == 1) {
 | 
				
			||||||
		if (s && (*s == 'y')) {
 | 
					 | 
				
			||||||
			printf ("  CRC: %08X",
 | 
								printf ("  CRC: %08X",
 | 
				
			||||||
				crc32(0, (const u8 *)bd->bi_flashstart,
 | 
									crc32(0, (const u8 *)bd->bi_flashstart,
 | 
				
			||||||
							flash_size)
 | 
												flash_size)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -615,7 +615,7 @@ static ed_t * ep_add_ed (struct usb_device *usb_dev, unsigned long pipe)
 | 
				
			||||||
			| usb_pipeendpoint (pipe) << 7
 | 
								| usb_pipeendpoint (pipe) << 7
 | 
				
			||||||
			| (usb_pipeisoc (pipe)? 0x8000: 0)
 | 
								| (usb_pipeisoc (pipe)? 0x8000: 0)
 | 
				
			||||||
			| (usb_pipecontrol (pipe)? 0: (usb_pipeout (pipe)? 0x800: 0x1000))
 | 
								| (usb_pipecontrol (pipe)? 0: (usb_pipeout (pipe)? 0x800: 0x1000))
 | 
				
			||||||
			| usb_pipeslow (pipe) << 13
 | 
								| (usb_dev->speed == USB_SPEED_LOW) << 13
 | 
				
			||||||
			| usb_maxpacket (usb_dev, pipe) << 16);
 | 
								| usb_maxpacket (usb_dev, pipe) << 16);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ed_ret;
 | 
						return ed_ret;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,7 +36,6 @@ static unsigned long timestamp;
 | 
				
			||||||
int timer_init(void)
 | 
					int timer_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* Set up the timer for the first expiration. */
 | 
						/* Set up the timer for the first expiration. */
 | 
				
			||||||
	timestamp = 0;
 | 
					 | 
				
			||||||
	write_c0_compare(read_c0_count() + CYCLES_PER_JIFFY);
 | 
						write_c0_compare(read_c0_count() + CYCLES_PER_JIFFY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -108,7 +108,12 @@ reset:
 | 
				
			||||||
	mtc0	t0, CP0_CONFIG
 | 
						mtc0	t0, CP0_CONFIG
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Initialize $gp */
 | 
						/*
 | 
				
			||||||
 | 
						 * Initialize $gp, force 8 byte alignment of bal instruction to forbid
 | 
				
			||||||
 | 
						 * the compiler to put nop's between bal and _gp. This is required to
 | 
				
			||||||
 | 
						 * keep _gp and ra aligned to 8 byte.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						.align	3
 | 
				
			||||||
	bal	1f
 | 
						bal	1f
 | 
				
			||||||
	 nop
 | 
						 nop
 | 
				
			||||||
	.dword	_gp
 | 
						.dword	_gp
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,6 @@ static unsigned long timestamp;
 | 
				
			||||||
int timer_init(void)
 | 
					int timer_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* Set up the timer for the first expiration. */
 | 
						/* Set up the timer for the first expiration. */
 | 
				
			||||||
	timestamp = 0;
 | 
					 | 
				
			||||||
	write_c0_compare(read_c0_count() + CYCLES_PER_JIFFY);
 | 
						write_c0_compare(read_c0_count() + CYCLES_PER_JIFFY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -566,7 +566,7 @@ static __inline__ int __test_and_change_bit(int nr, volatile void * addr)
 | 
				
			||||||
 * @nr: bit number to test
 | 
					 * @nr: bit number to test
 | 
				
			||||||
 * @addr: Address to start counting from
 | 
					 * @addr: Address to start counting from
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static __inline__ int test_bit(int nr, volatile void *addr)
 | 
					static __inline__ int test_bit(int nr, const volatile void *addr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
 | 
						return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,6 +24,7 @@
 | 
				
			||||||
#include <common.h>
 | 
					#include <common.h>
 | 
				
			||||||
#include <command.h>
 | 
					#include <command.h>
 | 
				
			||||||
#include <malloc.h>
 | 
					#include <malloc.h>
 | 
				
			||||||
 | 
					#include <serial.h>
 | 
				
			||||||
#include <stdio_dev.h>
 | 
					#include <stdio_dev.h>
 | 
				
			||||||
#include <version.h>
 | 
					#include <version.h>
 | 
				
			||||||
#include <net.h>
 | 
					#include <net.h>
 | 
				
			||||||
| 
						 | 
					@ -46,7 +47,7 @@ static char *failed = "*** failed ***\n";
 | 
				
			||||||
 * mips_io_port_base is the begin of the address space to which x86 style
 | 
					 * mips_io_port_base is the begin of the address space to which x86 style
 | 
				
			||||||
 * I/O ports are mapped.
 | 
					 * I/O ports are mapped.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
unsigned long mips_io_port_base = -1;
 | 
					const unsigned long mips_io_port_base = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int __board_early_init_f(void)
 | 
					int __board_early_init_f(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -262,6 +263,8 @@ void board_init_r(gd_t *id, ulong dest_addr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	monitor_flash_len = (ulong)&uboot_end_data - dest_addr;
 | 
						monitor_flash_len = (ulong)&uboot_end_data - dest_addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						serial_initialize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_NEEDS_MANUAL_RELOC)
 | 
					#if defined(CONFIG_NEEDS_MANUAL_RELOC)
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * We have to relocate the command table manually
 | 
						 * We have to relocate the command table manually
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,3 +42,8 @@ endif
 | 
				
			||||||
ifeq ($(CROSS_COMPILE),powerpc-openbsd-)
 | 
					ifeq ($(CROSS_COMPILE),powerpc-openbsd-)
 | 
				
			||||||
PLATFORM_CPPFLAGS+= -D__PPC__
 | 
					PLATFORM_CPPFLAGS+= -D__PPC__
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Only test once
 | 
				
			||||||
 | 
					ifneq ($(CONFIG_SPL_BUILD),y)
 | 
				
			||||||
 | 
					ALL-y += checkgcc4
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,6 +41,10 @@ COBJS-y += speed.o
 | 
				
			||||||
COBJS-$(CONFIG_CMD_USB) += usb_ohci.o
 | 
					COBJS-$(CONFIG_CMD_USB) += usb_ohci.o
 | 
				
			||||||
COBJS-$(CONFIG_CMD_USB) += usb.o
 | 
					COBJS-$(CONFIG_CMD_USB) += usb.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef CONFIG_SPL_BUILD
 | 
				
			||||||
 | 
					COBJS-y += spl_boot.o
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
 | 
					SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
 | 
				
			||||||
OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS-y))
 | 
					OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS-y))
 | 
				
			||||||
START	:= $(addprefix $(obj),$(SSTART) $(CSTART))
 | 
					START	:= $(addprefix $(obj),$(SSTART) $(CSTART))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,79 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (C) 2012 Stefan Roese <sr@denx.de>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * See file CREDITS for list of people who contributed to this
 | 
				
			||||||
 | 
					 * project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU General Public License as
 | 
				
			||||||
 | 
					 * published by the Free Software Foundation; either version 2 of
 | 
				
			||||||
 | 
					 * the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <common.h>
 | 
				
			||||||
 | 
					#include <spl.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DECLARE_GLOBAL_DATA_PTR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Needed to align size SPL image to a 4-byte length
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					u32 end_align __attribute__ ((section(".end_align")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Return selected boot device. On MPC5200 its only NOR flash right now.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					u32 spl_boot_device(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return BOOT_DEVICE_NOR;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * SPL version of board_init_f()
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void board_init_f(ulong bootflag)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						end_align = (u32)__spl_flash_end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * First we need to initialize the SDRAM, so that the real
 | 
				
			||||||
 | 
						 * U-Boot or the OS (Linux) can be loaded
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						initdram(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Clear bss */
 | 
				
			||||||
 | 
						memset(__bss_start, '\0', __bss_end__ - __bss_start);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Init global_data pointer. Has to be done before calling
 | 
				
			||||||
 | 
						 * get_clocks(), as it stores some clock values into gd needed
 | 
				
			||||||
 | 
						 * later on in the serial driver.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						/* Pointer is writable since we allocated a register for it */
 | 
				
			||||||
 | 
						gd = (gd_t *)(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET);
 | 
				
			||||||
 | 
						/* Clear initial global data */
 | 
				
			||||||
 | 
						memset((void *)gd, 0, sizeof(gd_t));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * get_clocks() needs to be called so that the serial driver
 | 
				
			||||||
 | 
						 * works correctly
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						get_clocks();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Do rudimental console / serial setup
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						preloader_console_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Call board_init_r() (SPL framework version) to load and boot
 | 
				
			||||||
 | 
						 * real U-Boot or OS
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						board_init_r(NULL, 0);
 | 
				
			||||||
 | 
						/* Does not return!!! */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -50,6 +50,7 @@
 | 
				
			||||||
#define MSR_KERNEL (MSR_FP|MSR_ME|MSR_RI)
 | 
					#define MSR_KERNEL (MSR_FP|MSR_ME|MSR_RI)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CONFIG_SPL_BUILD
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Set up GOT: Global Offset Table
 | 
					 * Set up GOT: Global Offset Table
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -68,6 +69,7 @@
 | 
				
			||||||
	GOT_ENTRY(__bss_end__)
 | 
						GOT_ENTRY(__bss_end__)
 | 
				
			||||||
	GOT_ENTRY(__bss_start)
 | 
						GOT_ENTRY(__bss_start)
 | 
				
			||||||
	END_GOT
 | 
						END_GOT
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Version string
 | 
					 * Version string
 | 
				
			||||||
| 
						 | 
					@ -84,6 +86,18 @@ version_string:
 | 
				
			||||||
	. = EXC_OFF_SYS_RESET
 | 
						. = EXC_OFF_SYS_RESET
 | 
				
			||||||
	.globl	_start
 | 
						.globl	_start
 | 
				
			||||||
_start:
 | 
					_start:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD)
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * This is the entry of the real U-Boot from a board port
 | 
				
			||||||
 | 
						 * that supports SPL booting on the MPC5200. We only need
 | 
				
			||||||
 | 
						 * to call board_init_f() here. Everything else has already
 | 
				
			||||||
 | 
						 * been done in the SPL u-boot version.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						GET_GOT			/* initialize GOT access		*/
 | 
				
			||||||
 | 
						bl	board_init_f	/* run 1st part of board init code (in Flash)*/
 | 
				
			||||||
 | 
						/* NOTREACHED - board_init_f() does not return */
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
	mfmsr	r5			/* save msr contents		*/
 | 
						mfmsr	r5			/* save msr contents		*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Move CSBoot and adjust instruction pointer                   */
 | 
						/* Move CSBoot and adjust instruction pointer                   */
 | 
				
			||||||
| 
						 | 
					@ -152,7 +166,9 @@ lowboot_reentry:
 | 
				
			||||||
	/* Be careful to keep code relocatable !			*/
 | 
						/* Be careful to keep code relocatable !			*/
 | 
				
			||||||
	/*--------------------------------------------------------------*/
 | 
						/*--------------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CONFIG_SPL_BUILD
 | 
				
			||||||
	GET_GOT			/* initialize GOT access		*/
 | 
						GET_GOT			/* initialize GOT access		*/
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* r3: IMMR */
 | 
						/* r3: IMMR */
 | 
				
			||||||
	bl	cpu_init_f	/* run low-level CPU init code (in Flash)*/
 | 
						bl	cpu_init_f	/* run low-level CPU init code (in Flash)*/
 | 
				
			||||||
| 
						 | 
					@ -160,7 +176,9 @@ lowboot_reentry:
 | 
				
			||||||
	bl	board_init_f	/* run 1st part of board init code (in Flash)*/
 | 
						bl	board_init_f	/* run 1st part of board init code (in Flash)*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* NOTREACHED - board_init_f() does not return */
 | 
						/* NOTREACHED - board_init_f() does not return */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CONFIG_SPL_BUILD
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Vector Table
 | 
					 * Vector Table
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -333,6 +351,7 @@ int_return:
 | 
				
			||||||
	lwz	r1,GPR1(r1)
 | 
						lwz	r1,GPR1(r1)
 | 
				
			||||||
	SYNC
 | 
						SYNC
 | 
				
			||||||
	rfi
 | 
						rfi
 | 
				
			||||||
 | 
					#endif /* CONFIG_SPL_BUILD */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * This code initialises the MPC5xxx processor core
 | 
					 * This code initialises the MPC5xxx processor core
 | 
				
			||||||
| 
						 | 
					@ -522,6 +541,7 @@ get_pvr:
 | 
				
			||||||
	mfspr	r3, PVR
 | 
						mfspr	r3, PVR
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CONFIG_SPL_BUILD
 | 
				
			||||||
/*------------------------------------------------------------------------------*/
 | 
					/*------------------------------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -759,3 +779,5 @@ trap_init:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mtlr	r4			/* restore link register    */
 | 
						mtlr	r4			/* restore link register    */
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* CONFIG_SPL_BUILD */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,57 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2012 Stefan Roese <sr@denx.de>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU General Public License as
 | 
				
			||||||
 | 
					 * published by the Free Software Foundation; either version 2 of
 | 
				
			||||||
 | 
					 * the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | 
				
			||||||
 | 
					 * MA 02111-1307 USA
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MEMORY
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR,
 | 
				
			||||||
 | 
							LENGTH = CONFIG_SPL_BSS_MAX_SIZE
 | 
				
			||||||
 | 
						flash : ORIGIN = CONFIG_SPL_TEXT_BASE,
 | 
				
			||||||
 | 
							LENGTH = CONFIG_SYS_SPL_MAX_LEN
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OUTPUT_ARCH(powerpc)
 | 
				
			||||||
 | 
					ENTRY(_start)
 | 
				
			||||||
 | 
					SECTIONS
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						.text :
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							__start = .;
 | 
				
			||||||
 | 
							arch/powerpc/cpu/mpc5xxx/start.o	(.text)
 | 
				
			||||||
 | 
							*(.text*)
 | 
				
			||||||
 | 
						} > flash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						. = ALIGN(4);
 | 
				
			||||||
 | 
						.data : { *(SORT_BY_ALIGNMENT(.data*)) } > flash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						. = ALIGN(4);
 | 
				
			||||||
 | 
						.rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } > flash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						. = ALIGN(4);
 | 
				
			||||||
 | 
						.end_align : { *(.end_align*) } > flash
 | 
				
			||||||
 | 
						__spl_flash_end = .;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.bss :
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							. = ALIGN(4);
 | 
				
			||||||
 | 
							__bss_start = .;
 | 
				
			||||||
 | 
							*(.bss*)
 | 
				
			||||||
 | 
							. = ALIGN(4);
 | 
				
			||||||
 | 
							__bss_end__ = .;
 | 
				
			||||||
 | 
						} > sdram
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -618,7 +618,7 @@ static ed_t * ep_add_ed (struct usb_device *usb_dev, unsigned long pipe)
 | 
				
			||||||
			| usb_pipeendpoint (pipe) << 7
 | 
								| usb_pipeendpoint (pipe) << 7
 | 
				
			||||||
			| (usb_pipeisoc (pipe)? 0x8000: 0)
 | 
								| (usb_pipeisoc (pipe)? 0x8000: 0)
 | 
				
			||||||
			| (usb_pipecontrol (pipe)? 0: (usb_pipeout (pipe)? 0x800: 0x1000))
 | 
								| (usb_pipecontrol (pipe)? 0: (usb_pipeout (pipe)? 0x800: 0x1000))
 | 
				
			||||||
			| usb_pipeslow (pipe) << 13
 | 
								| (usb_dev->speed == USB_SPEED_LOW) << 13
 | 
				
			||||||
			| usb_maxpacket (usb_dev, pipe) << 16);
 | 
								| usb_maxpacket (usb_dev, pipe) << 16);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ed_ret;
 | 
						return ed_ret;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,22 @@ include $(TOPDIR)/config.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIB	= $(obj)lib$(CPU).o
 | 
					LIB	= $(obj)lib$(CPU).o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MINIMAL=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef CONFIG_SPL_BUILD
 | 
				
			||||||
 | 
					ifdef CONFIG_SPL_INIT_MINIMAL
 | 
				
			||||||
 | 
					MINIMAL=y
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
START = start.o resetvec.o
 | 
					START = start.o resetvec.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef MINIMAL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COBJS-y	+= cpu_init_early.o tlb.o spl_minimal.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SOBJS-$(CONFIG_MP)	+= release.o
 | 
					SOBJS-$(CONFIG_MP)	+= release.o
 | 
				
			||||||
SOBJS	= $(SOBJS-y)
 | 
					SOBJS	= $(SOBJS-y)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -121,17 +136,20 @@ COBJS-$(CONFIG_PPC_P5040) += p5040_serdes.o
 | 
				
			||||||
COBJS-$(CONFIG_PPC_T4240) += t4240_serdes.o
 | 
					COBJS-$(CONFIG_PPC_T4240) += t4240_serdes.o
 | 
				
			||||||
COBJS-$(CONFIG_PPC_B4860) += b4860_serdes.o
 | 
					COBJS-$(CONFIG_PPC_B4860) += b4860_serdes.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COBJS	= $(COBJS-y)
 | 
					COBJS-y	+= cpu.o
 | 
				
			||||||
COBJS	+= cpu.o
 | 
					COBJS-y	+= cpu_init.o
 | 
				
			||||||
COBJS	+= cpu_init.o
 | 
					COBJS-y	+= cpu_init_early.o
 | 
				
			||||||
COBJS	+= cpu_init_early.o
 | 
					COBJS-y	+= interrupts.o
 | 
				
			||||||
COBJS	+= interrupts.o
 | 
					COBJS-y	+= speed.o
 | 
				
			||||||
COBJS	+= speed.o
 | 
					COBJS-y	+= tlb.o
 | 
				
			||||||
COBJS	+= tlb.o
 | 
					COBJS-y	+= traps.o
 | 
				
			||||||
COBJS	+= traps.o
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Stub implementations of cache management functions for USB
 | 
					# Stub implementations of cache management functions for USB
 | 
				
			||||||
COBJS += cache.o
 | 
					COBJS-y += cache.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endif # not minimal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COBJS	= $(COBJS-y)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 | 
					SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 | 
				
			||||||
OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
 | 
					OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,6 +24,109 @@
 | 
				
			||||||
#include <command.h>
 | 
					#include <command.h>
 | 
				
			||||||
#include <linux/compiler.h>
 | 
					#include <linux/compiler.h>
 | 
				
			||||||
#include <asm/processor.h>
 | 
					#include <asm/processor.h>
 | 
				
			||||||
 | 
					#include "fsl_corenet_serdes.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_SYS_FSL_ERRATUM_A004849
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This work-around is implemented in PBI, so just check to see if the
 | 
				
			||||||
 | 
					 * work-around was actually applied.  To do this, we check for specific data
 | 
				
			||||||
 | 
					 * at specific addresses in DCSR.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Array offsets[] contains a list of offsets within DCSR.  According to the
 | 
				
			||||||
 | 
					 * erratum document, the value at each offset should be 2.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static void check_erratum_a4849(uint32_t svr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						void __iomem *dcsr = (void *)CONFIG_SYS_DCSRBAR + 0xb0000;
 | 
				
			||||||
 | 
						unsigned int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(CONFIG_PPC_P2041) || defined(CONFIG_PPC_P3041)
 | 
				
			||||||
 | 
						static const uint8_t offsets[] = {
 | 
				
			||||||
 | 
							0x50, 0x54, 0x58, 0x90, 0x94, 0x98
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef CONFIG_PPC_P4080
 | 
				
			||||||
 | 
						static const uint8_t offsets[] = {
 | 
				
			||||||
 | 
							0x60, 0x64, 0x68, 0x6c, 0xa0, 0xa4, 0xa8, 0xac
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						uint32_t x108; /* The value that should be at offset 0x108 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i = 0; i < ARRAY_SIZE(offsets); i++) {
 | 
				
			||||||
 | 
							if (in_be32(dcsr + offsets[i]) != 2) {
 | 
				
			||||||
 | 
								printf("Work-around for Erratum A004849 is not enabled\n");
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(CONFIG_PPC_P2041) || defined(CONFIG_PPC_P3041)
 | 
				
			||||||
 | 
						x108 = 0x12;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_PPC_P4080
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * For P4080, the erratum document says that the value at offset 0x108
 | 
				
			||||||
 | 
						 * should be 0x12 on rev2, or 0x1c on rev3.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						if (SVR_MAJ(svr) == 2)
 | 
				
			||||||
 | 
							x108 = 0x12;
 | 
				
			||||||
 | 
						if (SVR_MAJ(svr) == 3)
 | 
				
			||||||
 | 
							x108 = 0x1c;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (in_be32(dcsr + 0x108) != x108) {
 | 
				
			||||||
 | 
							printf("Work-around for Erratum A004849 is not enabled\n");
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Everything matches, so the erratum work-around was applied */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("Work-around for Erratum A004849 enabled\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_SYS_FSL_ERRATUM_A004580
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This work-around is implemented in PBI, so just check to see if the
 | 
				
			||||||
 | 
					 * work-around was actually applied.  To do this, we check for specific data
 | 
				
			||||||
 | 
					 * at specific addresses in the SerDes register block.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The work-around says that for each SerDes lane, write BnTTLCRy0 =
 | 
				
			||||||
 | 
					 * 0x1B00_0001, Register 2 = 0x0088_0000, and Register 3 = 0x4000_0000.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static void check_erratum_a4580(uint32_t svr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const serdes_corenet_t __iomem *srds_regs =
 | 
				
			||||||
 | 
							(void *)CONFIG_SYS_FSL_CORENET_SERDES_ADDR;
 | 
				
			||||||
 | 
						unsigned int lane;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (lane = 0; lane < SRDS_MAX_LANES; lane++) {
 | 
				
			||||||
 | 
							if (serdes_lane_enabled(lane)) {
 | 
				
			||||||
 | 
								const struct serdes_lane __iomem *srds_lane =
 | 
				
			||||||
 | 
									&srds_regs->lane[serdes_get_lane_idx(lane)];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								/*
 | 
				
			||||||
 | 
								 * Verify that the values we were supposed to write in
 | 
				
			||||||
 | 
								 * the PBI are actually there.  Also, the lower 15
 | 
				
			||||||
 | 
								 * bits of res4[3] should be the same as the upper 15
 | 
				
			||||||
 | 
								 * bits of res4[1].
 | 
				
			||||||
 | 
								 */
 | 
				
			||||||
 | 
								if ((in_be32(&srds_lane->ttlcr0) != 0x1b000001) ||
 | 
				
			||||||
 | 
								    (in_be32(&srds_lane->res4[1]) != 0x880000) ||
 | 
				
			||||||
 | 
								    (in_be32(&srds_lane->res4[3]) != 0x40000044)) {
 | 
				
			||||||
 | 
									printf("Work-around for Erratum A004580 is "
 | 
				
			||||||
 | 
									       "not enabled\n");
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Everything matches, so the erratum work-around was applied */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("Work-around for Erratum A004580 enabled\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 | 
					static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -136,6 +239,17 @@ static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef CONFIG_SYS_FSL_ERRATUM_A_004934
 | 
					#ifdef CONFIG_SYS_FSL_ERRATUM_A_004934
 | 
				
			||||||
	puts("Work-around for Erratum A004934 enabled\n");
 | 
						puts("Work-around for Erratum A004934 enabled\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef CONFIG_SYS_FSL_ERRATUM_A004849
 | 
				
			||||||
 | 
						/* This work-around is implemented in PBI, so just check for it */
 | 
				
			||||||
 | 
						check_erratum_a4849(svr);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef CONFIG_SYS_FSL_ERRATUM_A004580
 | 
				
			||||||
 | 
						/* This work-around is implemented in PBI, so just check for it */
 | 
				
			||||||
 | 
						check_erratum_a4580(svr);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef CONFIG_SYS_P4080_ERRATUM_PCIE_A003
 | 
				
			||||||
 | 
						puts("Work-around for Erratum PCIe-A003 enabled\n");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -332,7 +332,8 @@ void mpc85xx_reginfo(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Common ddr init for non-corenet fsl 85xx platforms */
 | 
					/* Common ddr init for non-corenet fsl 85xx platforms */
 | 
				
			||||||
#ifndef CONFIG_FSL_CORENET
 | 
					#ifndef CONFIG_FSL_CORENET
 | 
				
			||||||
#if defined(CONFIG_SYS_RAMBOOT) && !defined(CONFIG_SYS_INIT_L2_ADDR)
 | 
					#if (defined(CONFIG_SYS_RAMBOOT) || defined(CONFIG_SPL)) && \
 | 
				
			||||||
 | 
						!defined(CONFIG_SYS_INIT_L2_ADDR)
 | 
				
			||||||
phys_size_t initdram(int board_type)
 | 
					phys_size_t initdram(int board_type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if defined(CONFIG_SPD_EEPROM) || defined(CONFIG_DDR_SPD)
 | 
					#if defined(CONFIG_SPD_EEPROM) || defined(CONFIG_DDR_SPD)
 | 
				
			||||||
| 
						 | 
					@ -450,21 +451,21 @@ static void dump_spd_ddr_reg(void)
 | 
				
			||||||
	for (i = 0; i < CONFIG_NUM_DDR_CONTROLLERS; i++) {
 | 
						for (i = 0; i < CONFIG_NUM_DDR_CONTROLLERS; i++) {
 | 
				
			||||||
		switch (i) {
 | 
							switch (i) {
 | 
				
			||||||
		case 0:
 | 
							case 0:
 | 
				
			||||||
			ddr[i] = (void *)CONFIG_SYS_MPC85xx_DDR_ADDR;
 | 
								ddr[i] = (void *)CONFIG_SYS_MPC8xxx_DDR_ADDR;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
#if defined(CONFIG_SYS_MPC85xx_DDR2_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 1)
 | 
					#if defined(CONFIG_SYS_MPC8xxx_DDR2_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 1)
 | 
				
			||||||
		case 1:
 | 
							case 1:
 | 
				
			||||||
			ddr[i] = (void *)CONFIG_SYS_MPC85xx_DDR2_ADDR;
 | 
								ddr[i] = (void *)CONFIG_SYS_MPC8xxx_DDR2_ADDR;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(CONFIG_SYS_MPC85xx_DDR3_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 2)
 | 
					#if defined(CONFIG_SYS_MPC8xxx_DDR3_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 2)
 | 
				
			||||||
		case 2:
 | 
							case 2:
 | 
				
			||||||
			ddr[i] = (void *)CONFIG_SYS_MPC85xx_DDR3_ADDR;
 | 
								ddr[i] = (void *)CONFIG_SYS_MPC8xxx_DDR3_ADDR;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(CONFIG_SYS_MPC85xx_DDR4_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 3)
 | 
					#if defined(CONFIG_SYS_MPC8xxx_DDR4_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 3)
 | 
				
			||||||
		case 3:
 | 
							case 3:
 | 
				
			||||||
			ddr[i] = (void *)CONFIG_SYS_MPC85xx_DDR4_ADDR;
 | 
								ddr[i] = (void *)CONFIG_SYS_MPC8xxx_DDR4_ADDR;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -350,6 +350,10 @@ int cpu_init_r(void)
 | 
				
			||||||
#elif defined(CONFIG_SYS_FSL_QORIQ_CHASSIS2)
 | 
					#elif defined(CONFIG_SYS_FSL_QORIQ_CHASSIS2)
 | 
				
			||||||
	struct ccsr_cluster_l2 * l2cache = (void __iomem *)CONFIG_SYS_FSL_CLUSTER_1_L2;
 | 
						struct ccsr_cluster_l2 * l2cache = (void __iomem *)CONFIG_SYS_FSL_CLUSTER_1_L2;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#if defined(CONFIG_PPC_SPINTABLE_COMPATIBLE) && defined(CONFIG_MP)
 | 
				
			||||||
 | 
						extern int spin_table_compat;
 | 
				
			||||||
 | 
						const char *spin;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_SYS_P4080_ERRATUM_CPU22) || \
 | 
					#if defined(CONFIG_SYS_P4080_ERRATUM_CPU22) || \
 | 
				
			||||||
	defined(CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011)
 | 
						defined(CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011)
 | 
				
			||||||
| 
						 | 
					@ -395,6 +399,14 @@ int cpu_init_r(void)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(CONFIG_PPC_SPINTABLE_COMPATIBLE) && defined(CONFIG_MP)
 | 
				
			||||||
 | 
						spin = getenv("spin_table_compat");
 | 
				
			||||||
 | 
						if (spin && (*spin == 'n'))
 | 
				
			||||||
 | 
							spin_table_compat = 0;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							spin_table_compat = 1;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	puts ("L2:    ");
 | 
						puts ("L2:    ");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_L2_CACHE)
 | 
					#if defined(CONFIG_L2_CACHE)
 | 
				
			||||||
| 
						 | 
					@ -470,7 +482,7 @@ int cpu_init_r(void)
 | 
				
			||||||
				&& l2srbar >= CONFIG_SYS_FLASH_BASE) {
 | 
									&& l2srbar >= CONFIG_SYS_FLASH_BASE) {
 | 
				
			||||||
			l2srbar = CONFIG_SYS_INIT_L2_ADDR;
 | 
								l2srbar = CONFIG_SYS_INIT_L2_ADDR;
 | 
				
			||||||
			l2cache->l2srbar0 = l2srbar;
 | 
								l2cache->l2srbar0 = l2srbar;
 | 
				
			||||||
			printf("moving to 0x%08x", CONFIG_SYS_INIT_L2_ADDR);
 | 
								printf(", moving to 0x%08x", CONFIG_SYS_INIT_L2_ADDR);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
#endif /* CONFIG_SYS_INIT_L2_ADDR */
 | 
					#endif /* CONFIG_SYS_INIT_L2_ADDR */
 | 
				
			||||||
		puts("\n");
 | 
							puts("\n");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,7 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
 | 
				
			||||||
			     unsigned int ctrl_num)
 | 
								     unsigned int ctrl_num)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned int i;
 | 
						unsigned int i;
 | 
				
			||||||
	volatile ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC85xx_DDR_ADDR;
 | 
						volatile ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC8xxx_DDR_ADDR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ctrl_num != 0) {
 | 
						if (ctrl_num != 0) {
 | 
				
			||||||
		printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
 | 
							printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
 | 
				
			||||||
| 
						 | 
					@ -73,7 +73,7 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
ddr_enable_ecc(unsigned int dram_size)
 | 
					ddr_enable_ecc(unsigned int dram_size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	volatile ccsr_ddr_t *ddr= (void *)(CONFIG_SYS_MPC85xx_DDR_ADDR);
 | 
						volatile ccsr_ddr_t *ddr= (void *)(CONFIG_SYS_MPC8xxx_DDR_ADDR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dma_meminit(CONFIG_MEM_INIT_VALUE, dram_size);
 | 
						dma_meminit(CONFIG_MEM_INIT_VALUE, dram_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,14 +19,11 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
 | 
				
			||||||
			     unsigned int ctrl_num)
 | 
								     unsigned int ctrl_num)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned int i;
 | 
						unsigned int i;
 | 
				
			||||||
#ifdef CONFIG_MPC83xx
 | 
						ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC8xxx_DDR_ADDR;
 | 
				
			||||||
	ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC83xx_DDR_ADDR;
 | 
					
 | 
				
			||||||
#else
 | 
					#if defined(CONFIG_SYS_FSL_ERRATUM_NMG_DDR120) && defined(CONFIG_MPC85xx)
 | 
				
			||||||
	ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC85xx_DDR_ADDR;
 | 
					 | 
				
			||||||
#ifdef CONFIG_SYS_FSL_ERRATUM_NMG_DDR120
 | 
					 | 
				
			||||||
	ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
 | 
						ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
 | 
				
			||||||
	uint svr;
 | 
						uint svr;
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ctrl_num) {
 | 
						if (ctrl_num) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,21 +32,21 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (ctrl_num) {
 | 
						switch (ctrl_num) {
 | 
				
			||||||
	case 0:
 | 
						case 0:
 | 
				
			||||||
		ddr = (void *)CONFIG_SYS_MPC85xx_DDR_ADDR;
 | 
							ddr = (void *)CONFIG_SYS_MPC8xxx_DDR_ADDR;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
#if defined(CONFIG_SYS_MPC85xx_DDR2_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 1)
 | 
					#if defined(CONFIG_SYS_MPC8xxx_DDR2_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 1)
 | 
				
			||||||
	case 1:
 | 
						case 1:
 | 
				
			||||||
		ddr = (void *)CONFIG_SYS_MPC85xx_DDR2_ADDR;
 | 
							ddr = (void *)CONFIG_SYS_MPC8xxx_DDR2_ADDR;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(CONFIG_SYS_MPC85xx_DDR3_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 2)
 | 
					#if defined(CONFIG_SYS_MPC8xxx_DDR3_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 2)
 | 
				
			||||||
	case 2:
 | 
						case 2:
 | 
				
			||||||
		ddr = (void *)CONFIG_SYS_MPC85xx_DDR3_ADDR;
 | 
							ddr = (void *)CONFIG_SYS_MPC8xxx_DDR3_ADDR;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(CONFIG_SYS_MPC85xx_DDR4_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 3)
 | 
					#if defined(CONFIG_SYS_MPC8xxx_DDR4_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 3)
 | 
				
			||||||
	case 3:
 | 
						case 3:
 | 
				
			||||||
		ddr = (void *)CONFIG_SYS_MPC85xx_DDR4_ADDR;
 | 
							ddr = (void *)CONFIG_SYS_MPC8xxx_DDR4_ADDR;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -714,9 +714,13 @@ void fsl_serdes_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_SYS_P4080_ERRATUM_SERDES9
 | 
					#ifdef CONFIG_SYS_P4080_ERRATUM_SERDES9
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * Set BnTTLCRy0[FLT_SEL] = 000011 and set BnTTLCRy0[17] = 1 for
 | 
							 * Set BnTTLCRy0[FLT_SEL] = 011011 and set BnTTLCRy0[31] = 1
 | 
				
			||||||
		 * each of the SerDes lanes selected as SGMII, XAUI, SRIO, or
 | 
							 * for each of the SerDes lanes selected as SGMII, XAUI, SRIO,
 | 
				
			||||||
		 * AURORA before the device is initialized.
 | 
							 * or AURORA before the device is initialized.
 | 
				
			||||||
 | 
							 *
 | 
				
			||||||
 | 
							 * Note that this part of the SERDES-9 work-around is
 | 
				
			||||||
 | 
							 * redundant if the work-around for A-4580 has already been
 | 
				
			||||||
 | 
							 * applied via PBI.
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		switch (lane_prtcl) {
 | 
							switch (lane_prtcl) {
 | 
				
			||||||
		case SGMII_FM1_DTSEC1:
 | 
							case SGMII_FM1_DTSEC1:
 | 
				
			||||||
| 
						 | 
					@ -733,10 +737,12 @@ void fsl_serdes_init(void)
 | 
				
			||||||
		case SRIO1:
 | 
							case SRIO1:
 | 
				
			||||||
		case SRIO2:
 | 
							case SRIO2:
 | 
				
			||||||
		case AURORA:
 | 
							case AURORA:
 | 
				
			||||||
			clrsetbits_be32(&srds_regs->lane[idx].ttlcr0,
 | 
								out_be32(&srds_regs->lane[idx].ttlcr0,
 | 
				
			||||||
					SRDS_TTLCR0_FLT_SEL_MASK,
 | 
									 SRDS_TTLCR0_FLT_SEL_KFR_26 |
 | 
				
			||||||
 | 
									 SRDS_TTLCR0_FLT_SEL_KPH_28 |
 | 
				
			||||||
				 SRDS_TTLCR0_FLT_SEL_750PPM |
 | 
									 SRDS_TTLCR0_FLT_SEL_750PPM |
 | 
				
			||||||
					SRDS_TTLCR0_PM_DIS);
 | 
									 SRDS_TTLCR0_FREQOVD_EN);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,10 +46,8 @@ u32 get_my_id()
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int hold_cores_in_reset(int verbose)
 | 
					int hold_cores_in_reset(int verbose)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const char *s = getenv("mp_holdoff");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Default to no, overriden by 'y', 'yes', 'Y', 'Yes', or '1' */
 | 
						/* Default to no, overriden by 'y', 'yes', 'Y', 'Yes', or '1' */
 | 
				
			||||||
	if (s && (*s == 'y' || *s == 'Y' || *s == '1')) {
 | 
						if (getenv_yesno("mp_holdoff") == 1) {
 | 
				
			||||||
		if (verbose) {
 | 
							if (verbose) {
 | 
				
			||||||
			puts("Secondary cores are being held in reset.\n");
 | 
								puts("Secondary cores are being held in reset.\n");
 | 
				
			||||||
			puts("See 'mp_holdoff' environment variable\n");
 | 
								puts("See 'mp_holdoff' environment variable\n");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -351,7 +351,13 @@ __secondary_reset_vector:
 | 
				
			||||||
	.align L1_CACHE_SHIFT
 | 
						.align L1_CACHE_SHIFT
 | 
				
			||||||
	.global __second_half_boot_page
 | 
						.global __second_half_boot_page
 | 
				
			||||||
__second_half_boot_page:
 | 
					__second_half_boot_page:
 | 
				
			||||||
#define EPAPR_MAGIC		0x45504150
 | 
					#ifdef CONFIG_PPC_SPINTABLE_COMPATIBLE
 | 
				
			||||||
 | 
						lis	r3,(spin_table_compat - __second_half_boot_page)@h
 | 
				
			||||||
 | 
						ori	r3,r3,(spin_table_compat - __second_half_boot_page)@l
 | 
				
			||||||
 | 
						add	r3,r3,r11 /* r11 has the address of __second_half_boot_page */
 | 
				
			||||||
 | 
						lwz	r14,0(r3)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ENTRY_ADDR_UPPER	0
 | 
					#define ENTRY_ADDR_UPPER	0
 | 
				
			||||||
#define ENTRY_ADDR_LOWER	4
 | 
					#define ENTRY_ADDR_LOWER	4
 | 
				
			||||||
#define ENTRY_R3_UPPER		8
 | 
					#define ENTRY_R3_UPPER		8
 | 
				
			||||||
| 
						 | 
					@ -383,7 +389,24 @@ __second_half_boot_page:
 | 
				
			||||||
	stw	r8,ENTRY_ADDR_LOWER(r10)
 | 
						stw	r8,ENTRY_ADDR_LOWER(r10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* spin waiting for addr */
 | 
						/* spin waiting for addr */
 | 
				
			||||||
3:	lwz	r4,ENTRY_ADDR_LOWER(r10)
 | 
					3:
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * To comply with ePAPR 1.1, the spin table has been moved to cache-enabled
 | 
				
			||||||
 | 
					 * memory. Old OS may not work with this change. A patch is waiting to be
 | 
				
			||||||
 | 
					 * accepted for Linux kernel. Other OS needs similar fix to spin table.
 | 
				
			||||||
 | 
					 * For OSes with old spin table code, we can enable this temporary fix by
 | 
				
			||||||
 | 
					 * setting environmental variable "spin_table_compat". For new OSes, set
 | 
				
			||||||
 | 
					 * "spin_table_compat=no". After Linux is fixed, we can remove this macro
 | 
				
			||||||
 | 
					 * and related code. For now, it is enabled by default.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifdef CONFIG_PPC_SPINTABLE_COMPATIBLE
 | 
				
			||||||
 | 
						cmpwi   r14,0
 | 
				
			||||||
 | 
						beq     4f
 | 
				
			||||||
 | 
						dcbf    0, r10
 | 
				
			||||||
 | 
						sync
 | 
				
			||||||
 | 
					4:
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						lwz	r4,ENTRY_ADDR_LOWER(r10)
 | 
				
			||||||
	andi.	r11,r4,1
 | 
						andi.	r11,r4,1
 | 
				
			||||||
	bne	3b
 | 
						bne	3b
 | 
				
			||||||
	isync
 | 
						isync
 | 
				
			||||||
| 
						 | 
					@ -460,5 +483,14 @@ __second_half_boot_page:
 | 
				
			||||||
	.globl __spin_table
 | 
						.globl __spin_table
 | 
				
			||||||
__spin_table:
 | 
					__spin_table:
 | 
				
			||||||
	.space CONFIG_MAX_CPUS*ENTRY_SIZE
 | 
						.space CONFIG_MAX_CPUS*ENTRY_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_PPC_SPINTABLE_COMPATIBLE
 | 
				
			||||||
 | 
						.align L1_CACHE_SHIFT
 | 
				
			||||||
 | 
						.global spin_table_compat
 | 
				
			||||||
 | 
					spin_table_compat:
 | 
				
			||||||
 | 
						.long	1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__spin_table_end:
 | 
					__spin_table_end:
 | 
				
			||||||
	.space 4096 - (__spin_table_end - __spin_table)
 | 
						.space 4096 - (__spin_table_end - __spin_table)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,12 +21,16 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <common.h>
 | 
					#include <common.h>
 | 
				
			||||||
 | 
					#include <asm/processor.h>
 | 
				
			||||||
 | 
					#include <asm/global_data.h>
 | 
				
			||||||
#include <asm/fsl_ifc.h>
 | 
					#include <asm/fsl_ifc.h>
 | 
				
			||||||
#include <asm/io.h>
 | 
					#include <asm/io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DECLARE_GLOBAL_DATA_PTR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void cpu_init_f(void)
 | 
					void cpu_init_f(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SYS_INIT_L2_ADDR)
 | 
					#ifdef CONFIG_SYS_INIT_L2_ADDR
 | 
				
			||||||
	ccsr_l2cache_t *l2cache = (void *)CONFIG_SYS_MPC85xx_L2_ADDR;
 | 
						ccsr_l2cache_t *l2cache = (void *)CONFIG_SYS_MPC85xx_L2_ADDR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	out_be32(&l2cache->l2srbar0, CONFIG_SYS_INIT_L2_ADDR);
 | 
						out_be32(&l2cache->l2srbar0, CONFIG_SYS_INIT_L2_ADDR);
 | 
				
			||||||
| 
						 | 
					@ -40,3 +44,16 @@ void cpu_init_f(void)
 | 
				
			||||||
		(MPC85xx_L2CTL_L2E | MPC85xx_L2CTL_L2SRAM_ENTIRE));
 | 
							(MPC85xx_L2CTL_L2E | MPC85xx_L2CTL_L2SRAM_ENTIRE));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CONFIG_SYS_FSL_TBCLK_DIV
 | 
				
			||||||
 | 
					#define CONFIG_SYS_FSL_TBCLK_DIV 8
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void udelay(unsigned long usec)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						u32 ticks_per_usec = gd->bus_clk / (CONFIG_SYS_FSL_TBCLK_DIV * 1000000);
 | 
				
			||||||
 | 
						u32 ticks = ticks_per_usec * usec;
 | 
				
			||||||
 | 
						u32 s = mfspr(SPRN_TBRL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while ((mfspr(SPRN_TBRL) - s) < ticks);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -44,6 +44,15 @@
 | 
				
			||||||
#undef	MSR_KERNEL
 | 
					#undef	MSR_KERNEL
 | 
				
			||||||
#define MSR_KERNEL ( MSR_ME )	/* Machine Check */
 | 
					#define MSR_KERNEL ( MSR_ME )	/* Machine Check */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(CONFIG_NAND_SPL) || \
 | 
				
			||||||
 | 
						(defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_INIT_MINIMAL))
 | 
				
			||||||
 | 
					#define MINIMAL_SPL
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if !defined(CONFIG_SPL) && !defined(CONFIG_SYS_RAMBOOT) && !defined(CONFIG_SECURE_BOOT)
 | 
				
			||||||
 | 
					#define NOR_BOOT
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Set up GOT: Global Offset Table
 | 
					 * Set up GOT: Global Offset Table
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -53,7 +62,7 @@
 | 
				
			||||||
	GOT_ENTRY(_GOT2_TABLE_)
 | 
						GOT_ENTRY(_GOT2_TABLE_)
 | 
				
			||||||
	GOT_ENTRY(_FIXUP_TABLE_)
 | 
						GOT_ENTRY(_FIXUP_TABLE_)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef CONFIG_NAND_SPL
 | 
					#ifndef MINIMAL_SPL
 | 
				
			||||||
	GOT_ENTRY(_start)
 | 
						GOT_ENTRY(_start)
 | 
				
			||||||
	GOT_ENTRY(_start_of_vectors)
 | 
						GOT_ENTRY(_start_of_vectors)
 | 
				
			||||||
	GOT_ENTRY(_end_of_vectors)
 | 
						GOT_ENTRY(_end_of_vectors)
 | 
				
			||||||
| 
						 | 
					@ -282,51 +291,8 @@ l2_disabled:
 | 
				
			||||||
	isync
 | 
						isync
 | 
				
			||||||
	.endm
 | 
						.endm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_SYS_PPC_E500_DEBUG_TLB) && !defined(CONFIG_NAND_SPL)
 | 
					/* Interrupt vectors do not fit in minimal SPL. */
 | 
				
			||||||
/*
 | 
					#if !defined(MINIMAL_SPL)
 | 
				
			||||||
 * TLB entry for debuggging in AS1
 | 
					 | 
				
			||||||
 * Create temporary TLB entry in AS0 to handle debug exception
 | 
					 | 
				
			||||||
 * As on debug exception MSR is cleared i.e. Address space is changed
 | 
					 | 
				
			||||||
 * to 0. A TLB entry (in AS0) is required to handle debug exception generated
 | 
					 | 
				
			||||||
 * in AS1.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if !defined(CONFIG_SYS_RAMBOOT) && !defined(CONFIG_SECURE_BOOT)
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * TLB entry is created for IVPR + IVOR15 to map on valid OP code address
 | 
					 | 
				
			||||||
 * bacause flash's virtual address maps to 0xff800000 - 0xffffffff.
 | 
					 | 
				
			||||||
 * and this window is outside of 4K boot window.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
	create_tlb1_entry CONFIG_SYS_PPC_E500_DEBUG_TLB, \
 | 
					 | 
				
			||||||
		0, BOOKE_PAGESZ_4M, \
 | 
					 | 
				
			||||||
		CONFIG_SYS_MONITOR_BASE & 0xffc00000,  MAS2_I|MAS2_G, \
 | 
					 | 
				
			||||||
		0xffc00000, MAS3_SX|MAS3_SW|MAS3_SR, \
 | 
					 | 
				
			||||||
		0, r6
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#elif !defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SECURE_BOOT)
 | 
					 | 
				
			||||||
	create_tlb1_entry CONFIG_SYS_PPC_E500_DEBUG_TLB, \
 | 
					 | 
				
			||||||
		0, BOOKE_PAGESZ_1M, \
 | 
					 | 
				
			||||||
		CONFIG_SYS_MONITOR_BASE, MAS2_I|MAS2_G, \
 | 
					 | 
				
			||||||
		CONFIG_SYS_PBI_FLASH_WINDOW, MAS3_SX|MAS3_SW|MAS3_SR, \
 | 
					 | 
				
			||||||
		0, r6
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * TLB entry is created for IVPR + IVOR15 to map on valid OP code address
 | 
					 | 
				
			||||||
 * because "nexti" will resize TLB to 4K
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
	create_tlb1_entry CONFIG_SYS_PPC_E500_DEBUG_TLB, \
 | 
					 | 
				
			||||||
		0, BOOKE_PAGESZ_256K, \
 | 
					 | 
				
			||||||
		CONFIG_SYS_MONITOR_BASE, MAS2_I, \
 | 
					 | 
				
			||||||
		CONFIG_SYS_MONITOR_BASE, MAS3_SX|MAS3_SW|MAS3_SR, \
 | 
					 | 
				
			||||||
		0, r6
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Ne need to setup interrupt vector for NAND SPL
 | 
					 | 
				
			||||||
 * because NAND SPL never compiles it.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#if !defined(CONFIG_NAND_SPL)
 | 
					 | 
				
			||||||
	/* Setup interrupt vectors */
 | 
						/* Setup interrupt vectors */
 | 
				
			||||||
	lis	r1,CONFIG_SYS_MONITOR_BASE@h
 | 
						lis	r1,CONFIG_SYS_MONITOR_BASE@h
 | 
				
			||||||
	mtspr	IVPR,r1
 | 
						mtspr	IVPR,r1
 | 
				
			||||||
| 
						 | 
					@ -534,10 +500,6 @@ nexti:	mflr	r1		/* R1 = our PC */
 | 
				
			||||||
	li	r3, 0
 | 
						li	r3, 0
 | 
				
			||||||
	mtspr	MAS1, r3
 | 
						mtspr	MAS1, r3
 | 
				
			||||||
1:	cmpw	r3, r14
 | 
					1:	cmpw	r3, r14
 | 
				
			||||||
#if defined(CONFIG_SYS_PPC_E500_DEBUG_TLB) && !defined(CONFIG_NAND_SPL)
 | 
					 | 
				
			||||||
	cmpwi	cr1, r3, CONFIG_SYS_PPC_E500_DEBUG_TLB
 | 
					 | 
				
			||||||
	cror	cr0*4+eq, cr0*4+eq, cr1*4+eq
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	rlwinm	r5, r3, 16, MAS0_ESEL_MSK
 | 
						rlwinm	r5, r3, 16, MAS0_ESEL_MSK
 | 
				
			||||||
	addi	r3, r3, 1
 | 
						addi	r3, r3, 1
 | 
				
			||||||
	beq	2f		/* skip the entry we're executing from */
 | 
						beq	2f		/* skip the entry we're executing from */
 | 
				
			||||||
| 
						 | 
					@ -553,6 +515,46 @@ nexti:	mflr	r1		/* R1 = our PC */
 | 
				
			||||||
2:	cmpw	r3, r4
 | 
					2:	cmpw	r3, r4
 | 
				
			||||||
	blt	1b
 | 
						blt	1b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(CONFIG_SYS_PPC_E500_DEBUG_TLB) && !defined(MINIMAL_SPL)
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * TLB entry for debuggging in AS1
 | 
				
			||||||
 | 
					 * Create temporary TLB entry in AS0 to handle debug exception
 | 
				
			||||||
 | 
					 * As on debug exception MSR is cleared i.e. Address space is changed
 | 
				
			||||||
 | 
					 * to 0. A TLB entry (in AS0) is required to handle debug exception generated
 | 
				
			||||||
 | 
					 * in AS1.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef NOR_BOOT
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * TLB entry is created for IVPR + IVOR15 to map on valid OP code address
 | 
				
			||||||
 | 
					 * bacause flash's virtual address maps to 0xff800000 - 0xffffffff.
 | 
				
			||||||
 | 
					 * and this window is outside of 4K boot window.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
						create_tlb1_entry CONFIG_SYS_PPC_E500_DEBUG_TLB, \
 | 
				
			||||||
 | 
							0, BOOKE_PAGESZ_4M, \
 | 
				
			||||||
 | 
							CONFIG_SYS_MONITOR_BASE & 0xffc00000,  MAS2_I|MAS2_G, \
 | 
				
			||||||
 | 
							0xffc00000, MAS3_SX|MAS3_SW|MAS3_SR, \
 | 
				
			||||||
 | 
							0, r6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#elif !defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SECURE_BOOT)
 | 
				
			||||||
 | 
						create_tlb1_entry CONFIG_SYS_PPC_E500_DEBUG_TLB, \
 | 
				
			||||||
 | 
							0, BOOKE_PAGESZ_1M, \
 | 
				
			||||||
 | 
							CONFIG_SYS_MONITOR_BASE, MAS2_I|MAS2_G, \
 | 
				
			||||||
 | 
							CONFIG_SYS_PBI_FLASH_WINDOW, MAS3_SX|MAS3_SW|MAS3_SR, \
 | 
				
			||||||
 | 
							0, r6
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * TLB entry is created for IVPR + IVOR15 to map on valid OP code address
 | 
				
			||||||
 | 
					 * because "nexti" will resize TLB to 4K
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
						create_tlb1_entry CONFIG_SYS_PPC_E500_DEBUG_TLB, \
 | 
				
			||||||
 | 
							0, BOOKE_PAGESZ_256K, \
 | 
				
			||||||
 | 
							CONFIG_SYS_MONITOR_BASE & 0xfffc0000, MAS2_I, \
 | 
				
			||||||
 | 
							CONFIG_SYS_MONITOR_BASE & 0xfffc0000, MAS3_SX|MAS3_SW|MAS3_SR, \
 | 
				
			||||||
 | 
							0, r6
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Relocate CCSR, if necessary.  We relocate CCSR if (obviously) the default
 | 
					 * Relocate CCSR, if necessary.  We relocate CCSR if (obviously) the default
 | 
				
			||||||
 * location is not where we want it.  This typically happens on a 36-bit
 | 
					 * location is not where we want it.  This typically happens on a 36-bit
 | 
				
			||||||
| 
						 | 
					@ -1036,7 +1038,7 @@ create_init_ram_area:
 | 
				
			||||||
	lis     r6,FSL_BOOKE_MAS0(1, 15, 0)@h
 | 
						lis     r6,FSL_BOOKE_MAS0(1, 15, 0)@h
 | 
				
			||||||
	ori     r6,r6,FSL_BOOKE_MAS0(1, 15, 0)@l
 | 
						ori     r6,r6,FSL_BOOKE_MAS0(1, 15, 0)@l
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(CONFIG_SYS_RAMBOOT) && !defined(CONFIG_SECURE_BOOT)
 | 
					#ifdef NOR_BOOT
 | 
				
			||||||
	/* create a temp mapping in AS=1 to the 4M boot window */
 | 
						/* create a temp mapping in AS=1 to the 4M boot window */
 | 
				
			||||||
	create_tlb1_entry 15, \
 | 
						create_tlb1_entry 15, \
 | 
				
			||||||
		1, BOOKE_PAGESZ_4M, \
 | 
							1, BOOKE_PAGESZ_4M, \
 | 
				
			||||||
| 
						 | 
					@ -1050,8 +1052,8 @@ create_init_ram_area:
 | 
				
			||||||
	*/
 | 
						*/
 | 
				
			||||||
	create_tlb1_entry 15, \
 | 
						create_tlb1_entry 15, \
 | 
				
			||||||
		1, BOOKE_PAGESZ_1M, \
 | 
							1, BOOKE_PAGESZ_1M, \
 | 
				
			||||||
		CONFIG_SYS_MONITOR_BASE, MAS2_I|MAS2_G, \
 | 
							CONFIG_SYS_MONITOR_BASE & 0xfff00000, MAS2_I|MAS2_G, \
 | 
				
			||||||
		CONFIG_SYS_PBI_FLASH_WINDOW, MAS3_SX|MAS3_SW|MAS3_SR, \
 | 
							CONFIG_SYS_PBI_FLASH_WINDOW & 0xfff00000, MAS3_SX|MAS3_SW|MAS3_SR, \
 | 
				
			||||||
		0, r6
 | 
							0, r6
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					@ -1060,8 +1062,8 @@ create_init_ram_area:
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	create_tlb1_entry 15, \
 | 
						create_tlb1_entry 15, \
 | 
				
			||||||
		1, BOOKE_PAGESZ_1M, \
 | 
							1, BOOKE_PAGESZ_1M, \
 | 
				
			||||||
		CONFIG_SYS_MONITOR_BASE, MAS2_I|MAS2_G, \
 | 
							CONFIG_SYS_MONITOR_BASE & 0xfff00000, MAS2_I|MAS2_G, \
 | 
				
			||||||
		CONFIG_SYS_MONITOR_BASE, MAS3_SX|MAS3_SW|MAS3_SR, \
 | 
							CONFIG_SYS_MONITOR_BASE & 0xfff00000, MAS3_SX|MAS3_SW|MAS3_SR, \
 | 
				
			||||||
		0, r6
 | 
							0, r6
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1111,7 +1113,8 @@ switch_as:
 | 
				
			||||||
	bdnz	1b
 | 
						bdnz	1b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Jump out the last 4K page and continue to 'normal' start */
 | 
						/* Jump out the last 4K page and continue to 'normal' start */
 | 
				
			||||||
#ifdef CONFIG_SYS_RAMBOOT
 | 
					#if defined(CONFIG_SYS_RAMBOOT) || defined(CONFIG_SPL)
 | 
				
			||||||
 | 
						/* We assume that we're already running at the address we're linked at */
 | 
				
			||||||
	b	_start_cont
 | 
						b	_start_cont
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	/* Calculate absolute address in FLASH and jump there		*/
 | 
						/* Calculate absolute address in FLASH and jump there		*/
 | 
				
			||||||
| 
						 | 
					@ -1157,7 +1160,7 @@ _start_cont:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* NOTREACHED - board_init_f() does not return */
 | 
						/* NOTREACHED - board_init_f() does not return */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef CONFIG_NAND_SPL
 | 
					#ifndef MINIMAL_SPL
 | 
				
			||||||
	. = EXC_OFF_SYS_RESET
 | 
						. = EXC_OFF_SYS_RESET
 | 
				
			||||||
	.globl	_start_of_vectors
 | 
						.globl	_start_of_vectors
 | 
				
			||||||
_start_of_vectors:
 | 
					_start_of_vectors:
 | 
				
			||||||
| 
						 | 
					@ -1601,7 +1604,7 @@ in32:
 | 
				
			||||||
in32r:
 | 
					in32r:
 | 
				
			||||||
	lwbrx	r3,r0,r3
 | 
						lwbrx	r3,r0,r3
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
#endif  /* !CONFIG_NAND_SPL */
 | 
					#endif  /* !MINIMAL_SPL */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------*/
 | 
					/*------------------------------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1798,7 +1801,7 @@ clear_bss:
 | 
				
			||||||
	mr	r4,r10		/* Destination Address		*/
 | 
						mr	r4,r10		/* Destination Address		*/
 | 
				
			||||||
	bl	board_init_r
 | 
						bl	board_init_r
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef CONFIG_NAND_SPL
 | 
					#ifndef MINIMAL_SPL
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Copy exception vector code to low memory
 | 
						 * Copy exception vector code to low memory
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
| 
						 | 
					@ -1971,4 +1974,4 @@ setup_ivors:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "fixed_ivor.S"
 | 
					#include "fixed_ivor.S"
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
#endif /* !CONFIG_NAND_SPL */
 | 
					#endif /* !MINIMAL_SPL */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,7 @@ void init_tlbs(void)
 | 
				
			||||||
	return ;
 | 
						return ;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef CONFIG_NAND_SPL
 | 
					#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD)
 | 
				
			||||||
void read_tlbcam_entry(int idx, u32 *valid, u32 *tsize, unsigned long *epn,
 | 
					void read_tlbcam_entry(int idx, u32 *valid, u32 *tsize, unsigned long *epn,
 | 
				
			||||||
		       phys_addr_t *rpn)
 | 
							       phys_addr_t *rpn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -332,4 +332,4 @@ void clear_ddr_tlbs(unsigned int memsize_in_meg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* !CONFIG_NAND_SPL */
 | 
					#endif /* not SPL */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,87 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * (C) Copyright 2006
 | 
				
			||||||
 | 
					 * Wolfgang Denk, DENX Software Engineering, wd@denx.de
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright 2009 Freescale Semiconductor, Inc.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * See file CREDITS for list of people who contributed to this
 | 
				
			||||||
 | 
					 * project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU General Public License as
 | 
				
			||||||
 | 
					 * published by the Free Software Foundation; either version 2 of
 | 
				
			||||||
 | 
					 * the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | 
				
			||||||
 | 
					 * MA 02111-1307 USA
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "config.h"	/* CONFIG_BOARDDIR */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OUTPUT_ARCH(powerpc)
 | 
				
			||||||
 | 
					SECTIONS
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						. = CONFIG_SPL_TEXT_BASE;
 | 
				
			||||||
 | 
						.text : {
 | 
				
			||||||
 | 
							*(.text*)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						_etext = .;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.reloc : {
 | 
				
			||||||
 | 
							_GOT2_TABLE_ = .;
 | 
				
			||||||
 | 
							KEEP(*(.got2))
 | 
				
			||||||
 | 
							KEEP(*(.got))
 | 
				
			||||||
 | 
							PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4);
 | 
				
			||||||
 | 
							_FIXUP_TABLE_ = .;
 | 
				
			||||||
 | 
							KEEP(*(.fixup))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						__got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1;
 | 
				
			||||||
 | 
						__fixup_entries = (. - _FIXUP_TABLE_) >> 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						. = ALIGN(8);
 | 
				
			||||||
 | 
						.data : {
 | 
				
			||||||
 | 
							*(.rodata*)
 | 
				
			||||||
 | 
							*(.data*)
 | 
				
			||||||
 | 
							*(.sdata*)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						_edata  =  .;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						. = ALIGN(8);
 | 
				
			||||||
 | 
						__init_begin = .;
 | 
				
			||||||
 | 
						__init_end = .;
 | 
				
			||||||
 | 
					/* FIXME for non-NAND SPL */
 | 
				
			||||||
 | 
					#if defined(CONFIG_FSL_IFC) /* Restrict bootpg at 4K boundry for IFC */
 | 
				
			||||||
 | 
						.bootpg ADDR(.text) + 0x1000 :
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							start.o	(.bootpg)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#define RESET_VECTOR_OFFSET 0x1ffc /* IFC has 8K sram */
 | 
				
			||||||
 | 
					#elif defined(CONFIG_FSL_ELBC)
 | 
				
			||||||
 | 
					#define RESET_VECTOR_OFFSET 0xffc /* LBC has 4k sram */
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#error unknown NAND controller
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						.resetvec ADDR(.text) + RESET_VECTOR_OFFSET : {
 | 
				
			||||||
 | 
							KEEP(*(.resetvec))
 | 
				
			||||||
 | 
						} = 0xffff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Make sure that the bss segment isn't linked at 0x0, otherwise its
 | 
				
			||||||
 | 
						 * address won't be updated during relocation fixups.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						. |= 0x10;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						__bss_start = .;
 | 
				
			||||||
 | 
						.bss : {
 | 
				
			||||||
 | 
							*(.sbss*)
 | 
				
			||||||
 | 
							*(.bss*)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						__bss_end__ = .;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,10 +22,10 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (ctrl_num) {
 | 
						switch (ctrl_num) {
 | 
				
			||||||
	case 0:
 | 
						case 0:
 | 
				
			||||||
		ddr = (void *)CONFIG_SYS_MPC86xx_DDR_ADDR;
 | 
							ddr = (void *)CONFIG_SYS_MPC8xxx_DDR_ADDR;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 1:
 | 
						case 1:
 | 
				
			||||||
		ddr = (void *)CONFIG_SYS_MPC86xx_DDR2_ADDR;
 | 
							ddr = (void *)CONFIG_SYS_MPC8xxx_DDR2_ADDR;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
 | 
							printf("%s unexpected ctrl_num = %u\n", __FUNCTION__, ctrl_num);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,20 @@ include $(TOPDIR)/config.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIB	= $(obj)lib8xxx.o
 | 
					LIB	= $(obj)lib8xxx.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MINIMAL=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef CONFIG_SPL_BUILD
 | 
				
			||||||
 | 
					ifdef CONFIG_SPL_INIT_MINIMAL
 | 
				
			||||||
 | 
					MINIMAL=y
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef MINIMAL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COBJS-$(CONFIG_FSL_LAW) += law.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifneq ($(CPU),mpc83xx)
 | 
					ifneq ($(CPU),mpc83xx)
 | 
				
			||||||
COBJS-y	+= cpu.o
 | 
					COBJS-y	+= cpu.o
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
| 
						 | 
					@ -18,6 +32,9 @@ COBJS-$(CONFIG_OF_LIBFDT) += fdt.o
 | 
				
			||||||
COBJS-$(CONFIG_FSL_IFC) += fsl_ifc.o
 | 
					COBJS-$(CONFIG_FSL_IFC) += fsl_ifc.o
 | 
				
			||||||
COBJS-$(CONFIG_FSL_LBC) += fsl_lbc.o
 | 
					COBJS-$(CONFIG_FSL_LBC) += fsl_lbc.o
 | 
				
			||||||
COBJS-$(CONFIG_SYS_SRIO) += srio.o
 | 
					COBJS-$(CONFIG_SYS_SRIO) += srio.o
 | 
				
			||||||
 | 
					COBJS-$(CONFIG_FSL_LAW) += law.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRCS	:= $(START:.o=.S) $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 | 
					SRCS	:= $(START:.o=.S) $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 | 
				
			||||||
OBJS	:= $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
 | 
					OBJS	:= $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,15 +18,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "ddr.h"
 | 
					#include "ddr.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_MPC83xx
 | 
					#define _DDR_ADDR CONFIG_SYS_MPC8xxx_DDR_ADDR
 | 
				
			||||||
	#define _DDR_ADDR CONFIG_SYS_MPC83xx_DDR_ADDR
 | 
					 | 
				
			||||||
#elif defined(CONFIG_MPC85xx)
 | 
					 | 
				
			||||||
	#define _DDR_ADDR CONFIG_SYS_MPC85xx_DDR_ADDR
 | 
					 | 
				
			||||||
#elif defined(CONFIG_MPC86xx)
 | 
					 | 
				
			||||||
	#define _DDR_ADDR CONFIG_SYS_MPC86xx_DDR_ADDR
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
	#error "Undefined _DDR_ADDR"
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static u32 fsl_ddr_get_version(void)
 | 
					static u32 fsl_ddr_get_version(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -133,14 +133,8 @@ u32 fsl_ddr_get_intl3r(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void board_add_ram_info(int use_default)
 | 
					void board_add_ram_info(int use_default)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if defined(CONFIG_MPC83xx)
 | 
						ccsr_ddr_t *ddr = (void *)(CONFIG_SYS_MPC8xxx_DDR_ADDR);
 | 
				
			||||||
	immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
 | 
					
 | 
				
			||||||
	ccsr_ddr_t *ddr = (void *)&immap->ddr;
 | 
					 | 
				
			||||||
#elif defined(CONFIG_MPC85xx)
 | 
					 | 
				
			||||||
	ccsr_ddr_t *ddr = (void *)(CONFIG_SYS_MPC85xx_DDR_ADDR);
 | 
					 | 
				
			||||||
#elif defined(CONFIG_MPC86xx)
 | 
					 | 
				
			||||||
	ccsr_ddr_t *ddr = (void *)(CONFIG_SYS_MPC86xx_DDR_ADDR);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#if	defined(CONFIG_E6500) && (CONFIG_NUM_DDR_CONTROLLERS == 3)
 | 
					#if	defined(CONFIG_E6500) && (CONFIG_NUM_DDR_CONTROLLERS == 3)
 | 
				
			||||||
	u32 *mcintl3r = (void *) (CONFIG_SYS_IMMR + 0x18004);
 | 
						u32 *mcintl3r = (void *) (CONFIG_SYS_IMMR + 0x18004);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -152,13 +146,13 @@ void board_add_ram_info(int use_default)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if CONFIG_NUM_DDR_CONTROLLERS >= 2
 | 
					#if CONFIG_NUM_DDR_CONTROLLERS >= 2
 | 
				
			||||||
	if (!(sdram_cfg & SDRAM_CFG_MEM_EN)) {
 | 
						if (!(sdram_cfg & SDRAM_CFG_MEM_EN)) {
 | 
				
			||||||
		ddr = (void __iomem *)CONFIG_SYS_MPC85xx_DDR2_ADDR;
 | 
							ddr = (void __iomem *)CONFIG_SYS_MPC8xxx_DDR2_ADDR;
 | 
				
			||||||
		sdram_cfg = in_be32(&ddr->sdram_cfg);
 | 
							sdram_cfg = in_be32(&ddr->sdram_cfg);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if CONFIG_NUM_DDR_CONTROLLERS >= 3
 | 
					#if CONFIG_NUM_DDR_CONTROLLERS >= 3
 | 
				
			||||||
	if (!(sdram_cfg & SDRAM_CFG_MEM_EN)) {
 | 
						if (!(sdram_cfg & SDRAM_CFG_MEM_EN)) {
 | 
				
			||||||
		ddr = (void __iomem *)CONFIG_SYS_MPC85xx_DDR3_ADDR;
 | 
							ddr = (void __iomem *)CONFIG_SYS_MPC8xxx_DDR3_ADDR;
 | 
				
			||||||
		sdram_cfg = in_be32(&ddr->sdram_cfg);
 | 
							sdram_cfg = in_be32(&ddr->sdram_cfg);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -217,7 +217,7 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
 | 
				
			||||||
#if CONFIG_SYS_FSL_SEC_COMPAT == 2 /* SEC 2.x/3.x */
 | 
					#if CONFIG_SYS_FSL_SEC_COMPAT == 2 /* SEC 2.x/3.x */
 | 
				
			||||||
void fdt_fixup_crypto_node(void *blob, int sec_rev)
 | 
					void fdt_fixup_crypto_node(void *blob, int sec_rev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const struct sec_rev_prop {
 | 
						static const struct sec_rev_prop {
 | 
				
			||||||
		u32 sec_rev;
 | 
							u32 sec_rev;
 | 
				
			||||||
		u32 num_channels;
 | 
							u32 num_channels;
 | 
				
			||||||
		u32 channel_fifo_len;
 | 
							u32 channel_fifo_len;
 | 
				
			||||||
| 
						 | 
					@ -232,7 +232,7 @@ void fdt_fixup_crypto_node(void *blob, int sec_rev)
 | 
				
			||||||
		{ 0x0301, 4, 24, 0xbfe, 0x03ab0ebf }, /* SEC 3.1 */
 | 
							{ 0x0301, 4, 24, 0xbfe, 0x03ab0ebf }, /* SEC 3.1 */
 | 
				
			||||||
		{ 0x0303, 4, 24, 0x97c, 0x03a30abf }, /* SEC 3.3 */
 | 
							{ 0x0303, 4, 24, 0x97c, 0x03a30abf }, /* SEC 3.3 */
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	char compat_strlist[ARRAY_SIZE(sec_rev_prop_list) *
 | 
						static char compat_strlist[ARRAY_SIZE(sec_rev_prop_list) *
 | 
				
			||||||
				   sizeof("fsl,secX.Y")];
 | 
									   sizeof("fsl,secX.Y")];
 | 
				
			||||||
	int crypto_node, sec_idx, err;
 | 
						int crypto_node, sec_idx, err;
 | 
				
			||||||
	char *p;
 | 
						char *p;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@ void disable_law(u8 idx)
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef CONFIG_NAND_SPL
 | 
					#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD)
 | 
				
			||||||
static int get_law_entry(u8 i, struct law_entry *e)
 | 
					static int get_law_entry(u8 i, struct law_entry *e)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 lawar;
 | 
						u32 lawar;
 | 
				
			||||||
| 
						 | 
					@ -122,7 +122,7 @@ int set_next_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id)
 | 
				
			||||||
	return idx;
 | 
						return idx;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef CONFIG_NAND_SPL
 | 
					#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD)
 | 
				
			||||||
int set_last_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id)
 | 
					int set_last_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 idx;
 | 
						u32 idx;
 | 
				
			||||||
| 
						 | 
					@ -233,7 +233,7 @@ int set_ddr_laws(u64 start, u64 sz, enum law_trgt_if id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif /* not SPL */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void init_laws(void)
 | 
					void init_laws(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -258,9 +258,10 @@ void init_laws(void)
 | 
				
			||||||
			gd->used_laws |= (1 << i);
 | 
								gd->used_laws |= (1 << i);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
 | 
					#if (defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)) || \
 | 
				
			||||||
 | 
						(defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD))
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * in NAND boot we've already parsed the law_table and setup those LAWs
 | 
						 * in SPL boot we've already parsed the law_table and setup those LAWs
 | 
				
			||||||
	 * so don't do it again.
 | 
						 * so don't do it again.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
| 
						 | 
					@ -621,7 +621,7 @@ static ed_t * ep_add_ed (struct usb_device *usb_dev, unsigned long pipe)
 | 
				
			||||||
			| usb_pipeendpoint (pipe) << 7
 | 
								| usb_pipeendpoint (pipe) << 7
 | 
				
			||||||
			| (usb_pipeisoc (pipe)? 0x8000: 0)
 | 
								| (usb_pipeisoc (pipe)? 0x8000: 0)
 | 
				
			||||||
			| (usb_pipecontrol (pipe)? 0: (usb_pipeout (pipe)? 0x800: 0x1000))
 | 
								| (usb_pipecontrol (pipe)? 0: (usb_pipeout (pipe)? 0x800: 0x1000))
 | 
				
			||||||
			| usb_pipeslow (pipe) << 13
 | 
								| (usb_dev->speed == USB_SPEED_LOW) << 13
 | 
				
			||||||
			| usb_maxpacket (usb_dev, pipe) << 16);
 | 
								| usb_maxpacket (usb_dev, pipe) << 16);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ed_ret;
 | 
						return ed_ret;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,12 @@
 | 
				
			||||||
#error "Do not define CONFIG_SYS_CCSRBAR_DEFAULT in the board header file."
 | 
					#error "Do not define CONFIG_SYS_CCSRBAR_DEFAULT in the board header file."
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This macro should be removed when we no longer care about backwards
 | 
				
			||||||
 | 
					 * compatibility with older operating systems.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define CONFIG_PPC_SPINTABLE_COMPATIBLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define FSL_DDR_VER_4_7	47
 | 
					#define FSL_DDR_VER_4_7	47
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Number of TLB CAM entries we have on FSL Book-E chips */
 | 
					/* Number of TLB CAM entries we have on FSL Book-E chips */
 | 
				
			||||||
| 
						 | 
					@ -131,7 +137,6 @@
 | 
				
			||||||
#define CONFIG_SYS_PPC_E500_DEBUG_TLB	3
 | 
					#define CONFIG_SYS_PPC_E500_DEBUG_TLB	3
 | 
				
			||||||
#define CONFIG_TSECV2
 | 
					#define CONFIG_TSECV2
 | 
				
			||||||
#define CONFIG_SYS_FSL_SEC_COMPAT	4
 | 
					#define CONFIG_SYS_FSL_SEC_COMPAT	4
 | 
				
			||||||
#define CONFIG_FSL_SATA_V2
 | 
					 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 | 
					#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 | 
				
			||||||
#define CONFIG_NUM_DDR_CONTROLLERS	1
 | 
					#define CONFIG_NUM_DDR_CONTROLLERS	1
 | 
				
			||||||
#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000
 | 
					#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000
 | 
				
			||||||
| 
						 | 
					@ -175,7 +180,6 @@
 | 
				
			||||||
#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2
 | 
					#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2
 | 
				
			||||||
#define CONFIG_TSECV2
 | 
					#define CONFIG_TSECV2
 | 
				
			||||||
#define CONFIG_SYS_FSL_SEC_COMPAT	2
 | 
					#define CONFIG_SYS_FSL_SEC_COMPAT	2
 | 
				
			||||||
#define CONFIG_FSL_SATA_V2
 | 
					 | 
				
			||||||
#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000
 | 
					#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001
 | 
					#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 | 
					#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 | 
				
			||||||
| 
						 | 
					@ -188,7 +192,6 @@
 | 
				
			||||||
#define CONFIG_SYS_PPC_E500_DEBUG_TLB	3
 | 
					#define CONFIG_SYS_PPC_E500_DEBUG_TLB	3
 | 
				
			||||||
#define CONFIG_TSECV2
 | 
					#define CONFIG_TSECV2
 | 
				
			||||||
#define CONFIG_SYS_FSL_SEC_COMPAT	4
 | 
					#define CONFIG_SYS_FSL_SEC_COMPAT	4
 | 
				
			||||||
#define CONFIG_FSL_SATA_V2
 | 
					 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 | 
					#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 | 
				
			||||||
#define CONFIG_NUM_DDR_CONTROLLERS	1
 | 
					#define CONFIG_NUM_DDR_CONTROLLERS	1
 | 
				
			||||||
#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000
 | 
					#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000
 | 
				
			||||||
| 
						 | 
					@ -242,7 +245,6 @@
 | 
				
			||||||
#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2
 | 
					#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2
 | 
				
			||||||
#define CONFIG_TSECV2
 | 
					#define CONFIG_TSECV2
 | 
				
			||||||
#define CONFIG_SYS_FSL_SEC_COMPAT	2
 | 
					#define CONFIG_SYS_FSL_SEC_COMPAT	2
 | 
				
			||||||
#define CONFIG_FSL_SATA_V2
 | 
					 | 
				
			||||||
#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000
 | 
					#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001
 | 
					#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 | 
					#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 | 
				
			||||||
| 
						 | 
					@ -318,7 +320,6 @@
 | 
				
			||||||
#define CONFIG_SYS_FSL_NUM_CC_PLLS	2
 | 
					#define CONFIG_SYS_FSL_NUM_CC_PLLS	2
 | 
				
			||||||
#define CONFIG_SYS_FSL_NUM_LAWS		32
 | 
					#define CONFIG_SYS_FSL_NUM_LAWS		32
 | 
				
			||||||
#define CONFIG_SYS_FSL_SEC_COMPAT	4
 | 
					#define CONFIG_SYS_FSL_SEC_COMPAT	4
 | 
				
			||||||
#define CONFIG_FSL_SATA_V2
 | 
					 | 
				
			||||||
#define CONFIG_SYS_NUM_FMAN		1
 | 
					#define CONFIG_SYS_NUM_FMAN		1
 | 
				
			||||||
#define CONFIG_SYS_NUM_FM1_DTSEC	5
 | 
					#define CONFIG_SYS_NUM_FM1_DTSEC	5
 | 
				
			||||||
#define CONFIG_SYS_NUM_FM1_10GEC	1
 | 
					#define CONFIG_SYS_NUM_FM1_10GEC	1
 | 
				
			||||||
| 
						 | 
					@ -343,6 +344,7 @@
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2	0x11
 | 
					#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2	0x11
 | 
				
			||||||
#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000
 | 
					#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
 | 
					#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
 | 
				
			||||||
 | 
					#define CONFIG_SYS_FSL_ERRATUM_A004849
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(CONFIG_PPC_P3041)
 | 
					#elif defined(CONFIG_PPC_P3041)
 | 
				
			||||||
#define CONFIG_SYS_FSL_QORIQ_CHASSIS1
 | 
					#define CONFIG_SYS_FSL_QORIQ_CHASSIS1
 | 
				
			||||||
| 
						 | 
					@ -350,7 +352,6 @@
 | 
				
			||||||
#define CONFIG_SYS_FSL_NUM_CC_PLLS	2
 | 
					#define CONFIG_SYS_FSL_NUM_CC_PLLS	2
 | 
				
			||||||
#define CONFIG_SYS_FSL_NUM_LAWS		32
 | 
					#define CONFIG_SYS_FSL_NUM_LAWS		32
 | 
				
			||||||
#define CONFIG_SYS_FSL_SEC_COMPAT	4
 | 
					#define CONFIG_SYS_FSL_SEC_COMPAT	4
 | 
				
			||||||
#define CONFIG_FSL_SATA_V2
 | 
					 | 
				
			||||||
#define CONFIG_SYS_NUM_FMAN		1
 | 
					#define CONFIG_SYS_NUM_FMAN		1
 | 
				
			||||||
#define CONFIG_SYS_NUM_FM1_DTSEC	5
 | 
					#define CONFIG_SYS_NUM_FM1_DTSEC	5
 | 
				
			||||||
#define CONFIG_SYS_NUM_FM1_10GEC	1
 | 
					#define CONFIG_SYS_NUM_FM1_10GEC	1
 | 
				
			||||||
| 
						 | 
					@ -375,6 +376,7 @@
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2	0x11
 | 
					#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2	0x11
 | 
				
			||||||
#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000
 | 
					#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
 | 
					#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
 | 
				
			||||||
 | 
					#define CONFIG_SYS_FSL_ERRATUM_A004849
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(CONFIG_PPC_P4080) /* also supports P4040 */
 | 
					#elif defined(CONFIG_PPC_P4080) /* also supports P4040 */
 | 
				
			||||||
#define CONFIG_SYS_FSL_QORIQ_CHASSIS1
 | 
					#define CONFIG_SYS_FSL_QORIQ_CHASSIS1
 | 
				
			||||||
| 
						 | 
					@ -417,6 +419,9 @@
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x20
 | 
					#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x20
 | 
				
			||||||
#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xff000000
 | 
					#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xff000000
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
 | 
					#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
 | 
				
			||||||
 | 
					#define CONFIG_SYS_FSL_ERRATUM_A004849
 | 
				
			||||||
 | 
					#define CONFIG_SYS_FSL_ERRATUM_A004580
 | 
				
			||||||
 | 
					#define CONFIG_SYS_P4080_ERRATUM_PCIE_A003
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(CONFIG_PPC_P5020) /* also supports P5010 */
 | 
					#elif defined(CONFIG_PPC_P5020) /* also supports P5010 */
 | 
				
			||||||
#define CONFIG_SYS_PPC64		/* 64-bit core */
 | 
					#define CONFIG_SYS_PPC64		/* 64-bit core */
 | 
				
			||||||
| 
						 | 
					@ -425,7 +430,6 @@
 | 
				
			||||||
#define CONFIG_SYS_FSL_NUM_CC_PLLS	2
 | 
					#define CONFIG_SYS_FSL_NUM_CC_PLLS	2
 | 
				
			||||||
#define CONFIG_SYS_FSL_NUM_LAWS		32
 | 
					#define CONFIG_SYS_FSL_NUM_LAWS		32
 | 
				
			||||||
#define CONFIG_SYS_FSL_SEC_COMPAT	4
 | 
					#define CONFIG_SYS_FSL_SEC_COMPAT	4
 | 
				
			||||||
#define CONFIG_FSL_SATA_V2
 | 
					 | 
				
			||||||
#define CONFIG_SYS_NUM_FMAN		1
 | 
					#define CONFIG_SYS_NUM_FMAN		1
 | 
				
			||||||
#define CONFIG_SYS_NUM_FM1_DTSEC	5
 | 
					#define CONFIG_SYS_NUM_FM1_DTSEC	5
 | 
				
			||||||
#define CONFIG_SYS_NUM_FM1_10GEC	1
 | 
					#define CONFIG_SYS_NUM_FM1_10GEC	1
 | 
				
			||||||
| 
						 | 
					@ -449,6 +453,7 @@
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
 | 
					#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(CONFIG_PPC_P5040)
 | 
					#elif defined(CONFIG_PPC_P5040)
 | 
				
			||||||
 | 
					#define CONFIG_SYS_PPC64
 | 
				
			||||||
#define CONFIG_SYS_FSL_QORIQ_CHASSIS1
 | 
					#define CONFIG_SYS_FSL_QORIQ_CHASSIS1
 | 
				
			||||||
#define CONFIG_MAX_CPUS			4
 | 
					#define CONFIG_MAX_CPUS			4
 | 
				
			||||||
#define CONFIG_SYS_FSL_NUM_CC_PLLS	3
 | 
					#define CONFIG_SYS_FSL_NUM_CC_PLLS	3
 | 
				
			||||||
| 
						 | 
					@ -472,7 +477,6 @@
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_DDR_A003
 | 
					#define CONFIG_SYS_FSL_ERRATUM_DDR_A003
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
 | 
					#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_A004699
 | 
					#define CONFIG_SYS_FSL_ERRATUM_A004699
 | 
				
			||||||
#define CONFIG_SYS_FSL_ELBC_MULTIBIT_ECC
 | 
					 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_A004510
 | 
					#define CONFIG_SYS_FSL_ERRATUM_A004510
 | 
				
			||||||
#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x10
 | 
					#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x10
 | 
				
			||||||
#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000
 | 
					#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1035,9 +1035,9 @@ typedef struct immap {
 | 
				
			||||||
} immap_t;
 | 
					} immap_t;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CONFIG_SYS_MPC83xx_DDR_OFFSET	(0x2000)
 | 
					#define CONFIG_SYS_MPC8xxx_DDR_OFFSET	(0x2000)
 | 
				
			||||||
#define CONFIG_SYS_MPC83xx_DDR_ADDR \
 | 
					#define CONFIG_SYS_MPC8xxx_DDR_ADDR \
 | 
				
			||||||
			(CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_DDR_OFFSET)
 | 
								(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR_OFFSET)
 | 
				
			||||||
#define CONFIG_SYS_MPC83xx_DMA_OFFSET	(0x8000)
 | 
					#define CONFIG_SYS_MPC83xx_DMA_OFFSET	(0x8000)
 | 
				
			||||||
#define CONFIG_SYS_MPC83xx_DMA_ADDR \
 | 
					#define CONFIG_SYS_MPC83xx_DMA_ADDR \
 | 
				
			||||||
			(CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_DMA_OFFSET)
 | 
								(CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_DMA_OFFSET)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2619,7 +2619,7 @@ typedef struct serdes_corenet {
 | 
				
			||||||
#define SRDS_PCCR2_RST_XGMII1		0x00800000
 | 
					#define SRDS_PCCR2_RST_XGMII1		0x00800000
 | 
				
			||||||
#define SRDS_PCCR2_RST_XGMII2		0x00400000
 | 
					#define SRDS_PCCR2_RST_XGMII2		0x00400000
 | 
				
			||||||
	u32	res5[197];
 | 
						u32	res5[197];
 | 
				
			||||||
	struct {
 | 
						struct serdes_lane {
 | 
				
			||||||
		u32	gcr0;	/* General Control Register 0 */
 | 
							u32	gcr0;	/* General Control Register 0 */
 | 
				
			||||||
#define SRDS_GCR0_RRST			0x00400000
 | 
					#define SRDS_GCR0_RRST			0x00400000
 | 
				
			||||||
#define SRDS_GCR0_1STLANE		0x00010000
 | 
					#define SRDS_GCR0_1STLANE		0x00010000
 | 
				
			||||||
| 
						 | 
					@ -2637,8 +2637,11 @@ typedef struct serdes_corenet {
 | 
				
			||||||
		u32	res3;
 | 
							u32	res3;
 | 
				
			||||||
		u32	ttlcr0;	/* Transition Tracking Loop Ctrl 0 */
 | 
							u32	ttlcr0;	/* Transition Tracking Loop Ctrl 0 */
 | 
				
			||||||
#define SRDS_TTLCR0_FLT_SEL_MASK	0x3f000000
 | 
					#define SRDS_TTLCR0_FLT_SEL_MASK	0x3f000000
 | 
				
			||||||
 | 
					#define SRDS_TTLCR0_FLT_SEL_KFR_26	0x10000000
 | 
				
			||||||
 | 
					#define SRDS_TTLCR0_FLT_SEL_KPH_28	0x08000000
 | 
				
			||||||
#define SRDS_TTLCR0_FLT_SEL_750PPM	0x03000000
 | 
					#define SRDS_TTLCR0_FLT_SEL_750PPM	0x03000000
 | 
				
			||||||
#define SRDS_TTLCR0_PM_DIS		0x00004000
 | 
					#define SRDS_TTLCR0_PM_DIS		0x00004000
 | 
				
			||||||
 | 
					#define SRDS_TTLCR0_FREQOVD_EN		0x00000001
 | 
				
			||||||
		u32	res4[7];
 | 
							u32	res4[7];
 | 
				
			||||||
	} lane[24];
 | 
						} lane[24];
 | 
				
			||||||
	u32 res6[384];
 | 
						u32 res6[384];
 | 
				
			||||||
| 
						 | 
					@ -2867,9 +2870,9 @@ struct ccsr_pman {
 | 
				
			||||||
#define CONFIG_SYS_FSL_CORENET_PMAN2_OFFSET	0x5000
 | 
					#define CONFIG_SYS_FSL_CORENET_PMAN2_OFFSET	0x5000
 | 
				
			||||||
#define CONFIG_SYS_FSL_CORENET_PMAN3_OFFSET	0x6000
 | 
					#define CONFIG_SYS_FSL_CORENET_PMAN3_OFFSET	0x6000
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_DDR_OFFSET		0x8000
 | 
					#define CONFIG_SYS_MPC8xxx_DDR_OFFSET		0x8000
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_DDR2_OFFSET		0x9000
 | 
					#define CONFIG_SYS_MPC8xxx_DDR2_OFFSET		0x9000
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_DDR3_OFFSET		0xA000
 | 
					#define CONFIG_SYS_MPC8xxx_DDR3_OFFSET		0xA000
 | 
				
			||||||
#define CONFIG_SYS_FSL_CORENET_CLK_OFFSET	0xE1000
 | 
					#define CONFIG_SYS_FSL_CORENET_CLK_OFFSET	0xE1000
 | 
				
			||||||
#define CONFIG_SYS_FSL_CORENET_RCPM_OFFSET	0xE2000
 | 
					#define CONFIG_SYS_FSL_CORENET_RCPM_OFFSET	0xE2000
 | 
				
			||||||
#define CONFIG_SYS_FSL_CORENET_SERDES_OFFSET	0xEA000
 | 
					#define CONFIG_SYS_FSL_CORENET_SERDES_OFFSET	0xEA000
 | 
				
			||||||
| 
						 | 
					@ -2929,9 +2932,9 @@ struct ccsr_pman {
 | 
				
			||||||
#define CONFIG_SYS_FSL_CLUSTER_1_L2_OFFSET	0xC20000
 | 
					#define CONFIG_SYS_FSL_CLUSTER_1_L2_OFFSET	0xC20000
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_ECM_OFFSET		0x0000
 | 
					#define CONFIG_SYS_MPC85xx_ECM_OFFSET		0x0000
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_DDR_OFFSET		0x2000
 | 
					#define CONFIG_SYS_MPC8xxx_DDR_OFFSET		0x2000
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_LBC_OFFSET		0x5000
 | 
					#define CONFIG_SYS_MPC85xx_LBC_OFFSET		0x5000
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_DDR2_OFFSET		0x6000
 | 
					#define CONFIG_SYS_MPC8xxx_DDR2_OFFSET		0x6000
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_ESPI_OFFSET		0x7000
 | 
					#define CONFIG_SYS_MPC85xx_ESPI_OFFSET		0x7000
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_PCI1_OFFSET		0x8000
 | 
					#define CONFIG_SYS_MPC85xx_PCI1_OFFSET		0x8000
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_PCIX_OFFSET		0x8000
 | 
					#define CONFIG_SYS_MPC85xx_PCIX_OFFSET		0x8000
 | 
				
			||||||
| 
						 | 
					@ -2998,12 +3001,12 @@ struct ccsr_pman {
 | 
				
			||||||
	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_RCPM_OFFSET)
 | 
						(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_RCPM_OFFSET)
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_ECM_ADDR \
 | 
					#define CONFIG_SYS_MPC85xx_ECM_ADDR \
 | 
				
			||||||
	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_ECM_OFFSET)
 | 
						(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_ECM_OFFSET)
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_DDR_ADDR \
 | 
					#define CONFIG_SYS_MPC8xxx_DDR_ADDR \
 | 
				
			||||||
	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_DDR_OFFSET)
 | 
						(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR_OFFSET)
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_DDR2_ADDR \
 | 
					#define CONFIG_SYS_MPC8xxx_DDR2_ADDR \
 | 
				
			||||||
	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_DDR2_OFFSET)
 | 
						(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR2_OFFSET)
 | 
				
			||||||
#define CONFIG_SYS_MPC85xx_DDR3_ADDR \
 | 
					#define CONFIG_SYS_MPC8xxx_DDR3_ADDR \
 | 
				
			||||||
	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_DDR3_OFFSET)
 | 
						(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR3_OFFSET)
 | 
				
			||||||
#define CONFIG_SYS_LBC_ADDR \
 | 
					#define CONFIG_SYS_LBC_ADDR \
 | 
				
			||||||
	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_LBC_OFFSET)
 | 
						(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_LBC_OFFSET)
 | 
				
			||||||
#define CONFIG_SYS_IFC_ADDR \
 | 
					#define CONFIG_SYS_IFC_ADDR \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1252,10 +1252,10 @@ typedef struct immap {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern immap_t  *immr;
 | 
					extern immap_t  *immr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CONFIG_SYS_MPC86xx_DDR_OFFSET	0x2000
 | 
					#define CONFIG_SYS_MPC8xxx_DDR_OFFSET	0x2000
 | 
				
			||||||
#define CONFIG_SYS_MPC86xx_DDR_ADDR	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_DDR_OFFSET)
 | 
					#define CONFIG_SYS_MPC8xxx_DDR_ADDR	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR_OFFSET)
 | 
				
			||||||
#define CONFIG_SYS_MPC86xx_DDR2_OFFSET	0x6000
 | 
					#define CONFIG_SYS_MPC8xxx_DDR2_OFFSET	0x6000
 | 
				
			||||||
#define CONFIG_SYS_MPC86xx_DDR2_ADDR	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_DDR2_OFFSET)
 | 
					#define CONFIG_SYS_MPC8xxx_DDR2_ADDR	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR2_OFFSET)
 | 
				
			||||||
#define CONFIG_SYS_MPC86xx_DMA_OFFSET	0x21000
 | 
					#define CONFIG_SYS_MPC86xx_DMA_OFFSET	0x21000
 | 
				
			||||||
#define CONFIG_SYS_MPC86xx_DMA_ADDR	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_DMA_OFFSET)
 | 
					#define CONFIG_SYS_MPC86xx_DMA_ADDR	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_DMA_OFFSET)
 | 
				
			||||||
#define CONFIG_SYS_MPC86xx_PIC_OFFSET	0x40000
 | 
					#define CONFIG_SYS_MPC86xx_PIC_OFFSET	0x40000
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1342,4 +1342,10 @@ void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#endif /* CONFIG_MACH_SPECIFIC */
 | 
					#endif /* CONFIG_MACH_SPECIFIC */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(CONFIG_MPC85xx) || defined(CONFIG_440)
 | 
				
			||||||
 | 
					 #define EPAPR_MAGIC	(0x45504150)
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					 #define EPAPR_MAGIC	(0x65504150)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __ASM_PPC_PROCESSOR_H */
 | 
					#endif /* __ASM_PPC_PROCESSOR_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,6 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2011 The Chromium OS Authors.
 | 
					 * (C) Copyright 2012
 | 
				
			||||||
 * (C) Copyright 2008,2009
 | 
					 * Texas Instruments, <www.ti.com>
 | 
				
			||||||
 * Graeme Russ, <graeme.russ@gmail.com>
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * (C) Copyright 2002
 | 
					 | 
				
			||||||
 * Daniel Engström, Omicron Ceti AB, <daniel@omicron.se>
 | 
					 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * See file CREDITS for list of people who contributed to this
 | 
					 * See file CREDITS for list of people who contributed to this
 | 
				
			||||||
 * project.
 | 
					 * project.
 | 
				
			||||||
| 
						 | 
					@ -24,7 +20,12 @@
 | 
				
			||||||
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | 
					 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | 
				
			||||||
 * MA 02111-1307 USA
 | 
					 * MA 02111-1307 USA
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#ifndef	_ASM_SPL_H_
 | 
				
			||||||
 | 
					#define	_ASM_SPL_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void pci_init_board(void)
 | 
					#define BOOT_DEVICE_NOR		1
 | 
				
			||||||
{
 | 
					
 | 
				
			||||||
}
 | 
					/* Linker symbols */
 | 
				
			||||||
 | 
					extern char __bss_start[], __bss_end__[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@
 | 
				
			||||||
#define __HAVE_ARCH_MEMCHR
 | 
					#define __HAVE_ARCH_MEMCHR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int strcasecmp(const char *, const char *);
 | 
					extern int strcasecmp(const char *, const char *);
 | 
				
			||||||
extern int strncasecmp(const char *, const char *, int);
 | 
					extern int strncasecmp(const char *, const char *, __kernel_size_t);
 | 
				
			||||||
extern char * strcpy(char *,const char *);
 | 
					extern char * strcpy(char *,const char *);
 | 
				
			||||||
extern char * strncpy(char *,const char *, __kernel_size_t);
 | 
					extern char * strncpy(char *,const char *, __kernel_size_t);
 | 
				
			||||||
extern __kernel_size_t strlen(const char *);
 | 
					extern __kernel_size_t strlen(const char *);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,13 +38,28 @@ endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIB	= $(obj)lib$(ARCH).o
 | 
					LIB	= $(obj)lib$(ARCH).o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SOBJS-y	+= ppccache.o
 | 
					MINIMAL=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef CONFIG_SPL_BUILD
 | 
				
			||||||
 | 
					ifdef CONFIG_SPL_INIT_MINIMAL
 | 
				
			||||||
 | 
					MINIMAL=y
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef MINIMAL
 | 
				
			||||||
 | 
					COBJS-y += cache.o
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SOBJS-y	+= ppcstring.o
 | 
					SOBJS-y	+= ppcstring.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOBJS-y	+= ppccache.o
 | 
				
			||||||
SOBJS-y	+= ticks.o
 | 
					SOBJS-y	+= ticks.o
 | 
				
			||||||
SOBJS-y	+= reloc.o
 | 
					SOBJS-y	+= reloc.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COBJS-$(CONFIG_BAT_RW) += bat_rw.o
 | 
					COBJS-$(CONFIG_BAT_RW) += bat_rw.o
 | 
				
			||||||
 | 
					ifndef CONFIG_SPL_BUILD
 | 
				
			||||||
COBJS-y	+= board.o
 | 
					COBJS-y	+= board.o
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
COBJS-y	+= bootm.o
 | 
					COBJS-y	+= bootm.o
 | 
				
			||||||
COBJS-y	+= cache.o
 | 
					COBJS-y	+= cache.o
 | 
				
			||||||
COBJS-y	+= extable.o
 | 
					COBJS-y	+= extable.o
 | 
				
			||||||
| 
						 | 
					@ -53,6 +68,11 @@ COBJS-$(CONFIG_CMD_KGDB) += kgdb.o
 | 
				
			||||||
COBJS-${CONFIG_CMD_IDE} += ide.o
 | 
					COBJS-${CONFIG_CMD_IDE} += ide.o
 | 
				
			||||||
COBJS-y	+= time.o
 | 
					COBJS-y	+= time.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Don't include the MPC5xxx special memcpy into the
 | 
				
			||||||
 | 
					# SPL U-Boot image. memcpy is used in the SPL NOR
 | 
				
			||||||
 | 
					# flash driver. And we need the real, fast memcpy
 | 
				
			||||||
 | 
					# here. We have no problems with unaligned access.
 | 
				
			||||||
 | 
					ifndef CONFIG_SPL_BUILD
 | 
				
			||||||
# Workaround for local bus unaligned access problems
 | 
					# Workaround for local bus unaligned access problems
 | 
				
			||||||
# on MPC512x and MPC5200
 | 
					# on MPC512x and MPC5200
 | 
				
			||||||
ifdef CONFIG_MPC512X
 | 
					ifdef CONFIG_MPC512X
 | 
				
			||||||
| 
						 | 
					@ -63,6 +83,13 @@ ifdef CONFIG_MPC5200
 | 
				
			||||||
$(obj)ppcstring.o: AFLAGS += -Dmemcpy=__memcpy
 | 
					$(obj)ppcstring.o: AFLAGS += -Dmemcpy=__memcpy
 | 
				
			||||||
COBJS-y += memcpy_mpc5200.o
 | 
					COBJS-y += memcpy_mpc5200.o
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endif # not minimal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef CONFIG_SPL_BUILD
 | 
				
			||||||
 | 
					COBJS-$(CONFIG_SPL_FRAMEWORK) += spl.o
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COBJS	+= $(sort $(COBJS-y))
 | 
					COBJS	+= $(sort $(COBJS-y))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,12 +102,6 @@ TARGETS += $(LIB)
 | 
				
			||||||
all: $(TARGETS)
 | 
					all: $(TARGETS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(LIB):	$(obj).depend $(OBJS)
 | 
					$(LIB):	$(obj).depend $(OBJS)
 | 
				
			||||||
	@if ! $(CROSS_COMPILE)readelf -S $(OBJS) | grep -q '\.fixup.*PROGBITS';\
 | 
					 | 
				
			||||||
	then \
 | 
					 | 
				
			||||||
		echo "ERROR: Your compiler doesn't generate .fixup sections!";\
 | 
					 | 
				
			||||||
		echo "       Upgrade to a recent toolchain."; \
 | 
					 | 
				
			||||||
		exit 1; \
 | 
					 | 
				
			||||||
	fi;
 | 
					 | 
				
			||||||
	$(call cmd_link_o_target, $(OBJS))
 | 
						$(call cmd_link_o_target, $(OBJS))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(LIBGCC): $(obj).depend $(LGOBJS)
 | 
					$(LIBGCC): $(obj).depend $(LGOBJS)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -739,16 +739,13 @@ void board_init_r(gd_t *id, ulong dest_addr)
 | 
				
			||||||
		flash_size = 0;
 | 
							flash_size = 0;
 | 
				
			||||||
	} else if ((flash_size = flash_init()) > 0) {
 | 
						} else if ((flash_size = flash_init()) > 0) {
 | 
				
			||||||
#ifdef CONFIG_SYS_FLASH_CHECKSUM
 | 
					#ifdef CONFIG_SYS_FLASH_CHECKSUM
 | 
				
			||||||
		char *s;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		print_size(flash_size, "");
 | 
							print_size(flash_size, "");
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * Compute and print flash CRC if flashchecksum is set to 'y'
 | 
							 * Compute and print flash CRC if flashchecksum is set to 'y'
 | 
				
			||||||
		 *
 | 
							 *
 | 
				
			||||||
		 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
 | 
							 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		s = getenv("flashchecksum");
 | 
							if (getenv_yesno("flashchecksum") == 1) {
 | 
				
			||||||
		if (s && (*s == 'y')) {
 | 
					 | 
				
			||||||
			printf("  CRC: %08X",
 | 
								printf("  CRC: %08X",
 | 
				
			||||||
			       crc32(0,
 | 
								       crc32(0,
 | 
				
			||||||
				     (const unsigned char *)
 | 
									     (const unsigned char *)
 | 
				
			||||||
| 
						 | 
					@ -841,9 +838,7 @@ void board_init_r(gd_t *id, ulong dest_addr)
 | 
				
			||||||
	 * "i2cfast" into account
 | 
						 * "i2cfast" into account
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		char *s = getenv("i2cfast");
 | 
							if (getenv_yesno("i2cfast") == 1) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (s && ((*s == 'y') || (*s == 'Y'))) {
 | 
					 | 
				
			||||||
			bd->bi_iic_fast[0] = 1;
 | 
								bd->bi_iic_fast[0] = 1;
 | 
				
			||||||
			bd->bi_iic_fast[1] = 1;
 | 
								bd->bi_iic_fast[1] = 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -87,12 +87,6 @@ static void boot_jump_linux(bootm_headers_t *images)
 | 
				
			||||||
		 *   r8: 0
 | 
							 *   r8: 0
 | 
				
			||||||
		 *   r9: 0
 | 
							 *   r9: 0
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
#if defined(CONFIG_MPC85xx) || defined(CONFIG_440)
 | 
					 | 
				
			||||||
 #define EPAPR_MAGIC	(0x45504150)
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
 #define EPAPR_MAGIC	(0x65504150)
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		debug ("   Booting using OF flat tree...\n");
 | 
							debug ("   Booting using OF flat tree...\n");
 | 
				
			||||||
		WATCHDOG_RESET ();
 | 
							WATCHDOG_RESET ();
 | 
				
			||||||
		(*kernel) ((bd_t *)of_flat_tree, 0, 0, EPAPR_MAGIC,
 | 
							(*kernel) ((bd_t *)of_flat_tree, 0, 0, EPAPR_MAGIC,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,42 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2012 Stefan Roese <sr@denx.de>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * See file CREDITS for list of people who contributed to this
 | 
				
			||||||
 | 
					 * project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU General Public License as
 | 
				
			||||||
 | 
					 * published by the Free Software Foundation; either version 2 of
 | 
				
			||||||
 | 
					 * the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#include <common.h>
 | 
				
			||||||
 | 
					#include <config.h>
 | 
				
			||||||
 | 
					#include <spl.h>
 | 
				
			||||||
 | 
					#include <image.h>
 | 
				
			||||||
 | 
					#include <linux/compiler.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DECLARE_GLOBAL_DATA_PTR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This function jumps to an image with argument. Normally an FDT or ATAGS
 | 
				
			||||||
 | 
					 * image.
 | 
				
			||||||
 | 
					 * arg: Pointer to paramter image in RAM
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifdef CONFIG_SPL_OS_BOOT
 | 
				
			||||||
 | 
					void __noreturn jump_to_image_linux(void *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						debug("Entering kernel arg pointer: 0x%p\n", arg);
 | 
				
			||||||
 | 
						typedef void (*image_entry_arg_t)(void *, ulong r4, ulong r5, ulong r6,
 | 
				
			||||||
 | 
										  ulong r7, ulong r8, ulong r9)
 | 
				
			||||||
 | 
							__attribute__ ((noreturn));
 | 
				
			||||||
 | 
						image_entry_arg_t image_entry =
 | 
				
			||||||
 | 
							(image_entry_arg_t)spl_image.entry_point;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						image_entry(arg, 0, 0, EPAPR_MAGIC, CONFIG_SYS_BOOTMAPSZ, 0, 0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif /* CONFIG_SPL_OS_BOOT */
 | 
				
			||||||
| 
						 | 
					@ -274,8 +274,8 @@ void enable_hlt(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void trigger_address_error(void)
 | 
					static inline void trigger_address_error(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						set_bl_bit();
 | 
				
			||||||
	__asm__ __volatile__ (
 | 
						__asm__ __volatile__ (
 | 
				
			||||||
		"ldc %0, sr\n\t"
 | 
					 | 
				
			||||||
		"mov.l @%1, %0"
 | 
							"mov.l @%1, %0"
 | 
				
			||||||
		:
 | 
							:
 | 
				
			||||||
		: "r" (0x10000000), "r" (0x80000001)
 | 
							: "r" (0x10000000), "r" (0x80000001)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,7 @@
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int strcasecmp(const char *, const char *);
 | 
					extern int strcasecmp(const char *, const char *);
 | 
				
			||||||
extern int strncasecmp(const char *, const char *, int);
 | 
					extern int strncasecmp(const char *, const char *, __kernel_size_t);
 | 
				
			||||||
extern char *strcpy(char *, const char *);
 | 
					extern char *strcpy(char *, const char *);
 | 
				
			||||||
extern char *strncpy(char *, const char *, __kernel_size_t);
 | 
					extern char *strncpy(char *, const char *, __kernel_size_t);
 | 
				
			||||||
extern __kernel_size_t strlen(const char *);
 | 
					extern __kernel_size_t strlen(const char *);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -284,8 +284,7 @@ void board_init_f(ulong bootflag)
 | 
				
			||||||
		 *
 | 
							 *
 | 
				
			||||||
		 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
 | 
							 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		s = getenv("flashchecksum");
 | 
							if (getenv_yesno("flashchecksum") == 1) {
 | 
				
			||||||
		if (s && (*s == 'y')) {
 | 
					 | 
				
			||||||
			printf("  CRC: %08lX",
 | 
								printf("  CRC: %08lX",
 | 
				
			||||||
			       crc32(0, (const unsigned char *)CONFIG_SYS_FLASH_BASE,
 | 
								       crc32(0, (const unsigned char *)CONFIG_SYS_FLASH_BASE,
 | 
				
			||||||
				     flash_size)
 | 
									     flash_size)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,12 +28,13 @@ include $(TOPDIR)/config.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIB	= $(obj)lib$(CPU).o
 | 
					LIB	= $(obj)lib$(CPU).o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
START	= start.o start16.o resetvec.o
 | 
					START-y	= start.o
 | 
				
			||||||
COBJS	= interrupts.o cpu.o
 | 
					RESET_OBJS-$(CONFIG_X86_NO_RESET_VECTOR) += resetvec.o start16.o
 | 
				
			||||||
 | 
					COBJS	= interrupts.o cpu.o timer.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 | 
					SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 | 
				
			||||||
OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
 | 
					OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
 | 
				
			||||||
START	:= $(addprefix $(obj),$(START))
 | 
					START	:= $(addprefix $(obj),$(START-y) $(RESET_OBJS-))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all:	$(obj).depend $(START) $(LIB)
 | 
					all:	$(obj).depend $(START) $(LIB)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,12 +33,13 @@ include $(TOPDIR)/config.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIB	:= $(obj)lib$(SOC).o
 | 
					LIB	:= $(obj)lib$(SOC).o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOBJS-$(CONFIG_SYS_COREBOOT) += car.o
 | 
				
			||||||
 | 
					COBJS-$(CONFIG_SYS_COREBOOT) += coreboot.o
 | 
				
			||||||
COBJS-$(CONFIG_SYS_COREBOOT) += tables.o
 | 
					COBJS-$(CONFIG_SYS_COREBOOT) += tables.o
 | 
				
			||||||
COBJS-$(CONFIG_SYS_COREBOOT) += ipchecksum.o
 | 
					COBJS-$(CONFIG_SYS_COREBOOT) += ipchecksum.o
 | 
				
			||||||
COBJS-$(CONFIG_SYS_COREBOOT) += sdram.o
 | 
					COBJS-$(CONFIG_SYS_COREBOOT) += sdram.o
 | 
				
			||||||
COBJS-$(CONFIG_SYS_COREBOOT) += sysinfo.o
 | 
					COBJS-$(CONFIG_SYS_COREBOOT) += timestamp.o
 | 
				
			||||||
 | 
					COBJS-$(CONFIG_PCI) += pci.o
 | 
				
			||||||
SOBJS-$(CONFIG_SYS_COREBOOT) += coreboot_car.o
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 | 
					SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 | 
				
			||||||
OBJS	:= $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
 | 
					OBJS	:= $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,5 @@
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# (C) Copyright 2000-2003
 | 
					# Copyright (c) 2012 The Chromium OS Authors.
 | 
				
			||||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 | 
					 | 
				
			||||||
# Coldfire contribution by Bernhard Kuhn <bkuhn@metrowerks.com>
 | 
					 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# See file CREDITS for list of people who contributed to this
 | 
					# See file CREDITS for list of people who contributed to this
 | 
				
			||||||
# project.
 | 
					# project.
 | 
				
			||||||
| 
						 | 
					@ -22,6 +20,4 @@
 | 
				
			||||||
# MA 02111-1307 USA
 | 
					# MA 02111-1307 USA
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifndef CONFIG_SYS_TEXT_BASE
 | 
					CONFIG_ARCH_DEVICE_TREE := coreboot
 | 
				
			||||||
CONFIG_SYS_TEXT_BASE = 0xFE000000
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
| 
						 | 
					@ -26,13 +26,15 @@
 | 
				
			||||||
#include <asm/u-boot-x86.h>
 | 
					#include <asm/u-boot-x86.h>
 | 
				
			||||||
#include <flash.h>
 | 
					#include <flash.h>
 | 
				
			||||||
#include <netdev.h>
 | 
					#include <netdev.h>
 | 
				
			||||||
 | 
					#include <asm/msr.h>
 | 
				
			||||||
 | 
					#include <asm/cache.h>
 | 
				
			||||||
 | 
					#include <asm/io.h>
 | 
				
			||||||
#include <asm/arch-coreboot/tables.h>
 | 
					#include <asm/arch-coreboot/tables.h>
 | 
				
			||||||
#include <asm/arch-coreboot/sysinfo.h>
 | 
					#include <asm/arch-coreboot/sysinfo.h>
 | 
				
			||||||
 | 
					#include <asm/arch/timestamp.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE_GLOBAL_DATA_PTR;
 | 
					DECLARE_GLOBAL_DATA_PTR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned long monitor_flash_len = CONFIG_SYS_MONITOR_LEN;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Miscellaneous platform dependent initializations
 | 
					 * Miscellaneous platform dependent initializations
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -41,6 +43,9 @@ int cpu_init_f(void)
 | 
				
			||||||
	int ret = get_coreboot_info(&lib_sysinfo);
 | 
						int ret = get_coreboot_info(&lib_sysinfo);
 | 
				
			||||||
	if (ret != 0)
 | 
						if (ret != 0)
 | 
				
			||||||
		printf("Failed to parse coreboot tables.\n");
 | 
							printf("Failed to parse coreboot tables.\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						timestamp_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,8 +67,29 @@ int board_early_init_r(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void show_boot_progress(int val)
 | 
					void show_boot_progress(int val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					#if MIN_PORT80_KCLOCKS_DELAY
 | 
				
			||||||
 | 
						static uint32_t prev_stamp;
 | 
				
			||||||
 | 
						static uint32_t base;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Scale the time counter reading to avoid using 64 bit arithmetics.
 | 
				
			||||||
 | 
						 * Can't use get_timer() here becuase it could be not yet
 | 
				
			||||||
 | 
						 * initialized or even implemented.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						if (!prev_stamp) {
 | 
				
			||||||
 | 
							base = rdtsc() / 1000;
 | 
				
			||||||
 | 
							prev_stamp = 0;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							uint32_t now;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							do {
 | 
				
			||||||
 | 
								now = rdtsc() / 1000 - base;
 | 
				
			||||||
 | 
							} while (now < (prev_stamp + MIN_PORT80_KCLOCKS_DELAY));
 | 
				
			||||||
 | 
							prev_stamp = now;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						outb(val, 0x80);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int last_stage_init(void)
 | 
					int last_stage_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -82,6 +108,33 @@ int board_eth_init(bd_t *bis)
 | 
				
			||||||
	return pci_eth_init(bis);
 | 
						return pci_eth_init(bis);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void setup_pcat_compatibility()
 | 
					#define MTRR_TYPE_WP          5
 | 
				
			||||||
 | 
					#define MTRRcap_MSR           0xfe
 | 
				
			||||||
 | 
					#define MTRRphysBase_MSR(reg) (0x200 + 2 * (reg))
 | 
				
			||||||
 | 
					#define MTRRphysMask_MSR(reg) (0x200 + 2 * (reg) + 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int board_final_cleanup(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						/* Un-cache the ROM so the kernel has one
 | 
				
			||||||
 | 
						 * more MTRR available.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * Coreboot should have assigned this to the
 | 
				
			||||||
 | 
						 * top available variable MTRR.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						u8 top_mtrr = (native_read_msr(MTRRcap_MSR) & 0xff) - 1;
 | 
				
			||||||
 | 
						u8 top_type = native_read_msr(MTRRphysBase_MSR(top_mtrr)) & 0xff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Make sure this MTRR is the correct Write-Protected type */
 | 
				
			||||||
 | 
						if (top_type == MTRR_TYPE_WP) {
 | 
				
			||||||
 | 
							disable_caches();
 | 
				
			||||||
 | 
							wrmsrl(MTRRphysBase_MSR(top_mtrr), 0);
 | 
				
			||||||
 | 
							wrmsrl(MTRRphysMask_MSR(top_mtrr), 0);
 | 
				
			||||||
 | 
							enable_caches();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Issue SMI to Coreboot to lock down ME and registers */
 | 
				
			||||||
 | 
						printf("Finalizing Coreboot\n");
 | 
				
			||||||
 | 
						outb(0xcb, 0xb2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,65 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2011 The Chromium OS Authors.
 | 
				
			||||||
 | 
					 * (C) Copyright 2008,2009
 | 
				
			||||||
 | 
					 * Graeme Russ, <graeme.russ@gmail.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * (C) Copyright 2002
 | 
				
			||||||
 | 
					 * Daniel Engström, Omicron Ceti AB, <daniel@omicron.se>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * See file CREDITS for list of people who contributed to this
 | 
				
			||||||
 | 
					 * project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU General Public License as
 | 
				
			||||||
 | 
					 * published by the Free Software Foundation; either version 2 of
 | 
				
			||||||
 | 
					 * the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | 
				
			||||||
 | 
					 * MA 02111-1307 USA
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <common.h>
 | 
				
			||||||
 | 
					#include <pci.h>
 | 
				
			||||||
 | 
					#include <asm/pci.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct pci_controller coreboot_hose;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void config_pci_bridge(struct pci_controller *hose, pci_dev_t dev,
 | 
				
			||||||
 | 
								      struct pci_config_table *table)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						u8 secondary;
 | 
				
			||||||
 | 
						hose->read_byte(hose, dev, PCI_SECONDARY_BUS, &secondary);
 | 
				
			||||||
 | 
						hose->last_busno = max(hose->last_busno, secondary);
 | 
				
			||||||
 | 
						pci_hose_scan_bus(hose, secondary);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct pci_config_table pci_coreboot_config_table[] = {
 | 
				
			||||||
 | 
						/* vendor, device, class, bus, dev, func */
 | 
				
			||||||
 | 
						{ PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_BRIDGE_PCI,
 | 
				
			||||||
 | 
							PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, &config_pci_bridge },
 | 
				
			||||||
 | 
						{}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pci_init_board(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						coreboot_hose.config_table = pci_coreboot_config_table;
 | 
				
			||||||
 | 
						coreboot_hose.first_busno = 0;
 | 
				
			||||||
 | 
						coreboot_hose.last_busno = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pci_set_region(coreboot_hose.regions + 0, 0x0, 0x0, 0xffffffff,
 | 
				
			||||||
 | 
							PCI_REGION_MEM);
 | 
				
			||||||
 | 
						coreboot_hose.region_count = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pci_setup_type1(&coreboot_hose);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pci_register_hose(&coreboot_hose);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pci_hose_scan(&coreboot_hose);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -27,8 +27,9 @@
 | 
				
			||||||
#include <asm/e820.h>
 | 
					#include <asm/e820.h>
 | 
				
			||||||
#include <asm/u-boot-x86.h>
 | 
					#include <asm/u-boot-x86.h>
 | 
				
			||||||
#include <asm/global_data.h>
 | 
					#include <asm/global_data.h>
 | 
				
			||||||
#include <asm/arch-coreboot/sysinfo.h>
 | 
					#include <asm/processor.h>
 | 
				
			||||||
#include <asm/arch-coreboot/tables.h>
 | 
					#include <asm/arch/sysinfo.h>
 | 
				
			||||||
 | 
					#include <asm/arch/tables.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE_GLOBAL_DATA_PTR;
 | 
					DECLARE_GLOBAL_DATA_PTR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,6 +52,58 @@ unsigned install_e820_map(unsigned max_entries, struct e820entry *entries)
 | 
				
			||||||
	return num_entries;
 | 
						return num_entries;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This function looks for the highest region of memory lower than 4GB which
 | 
				
			||||||
 | 
					 * has enough space for U-Boot where U-Boot is aligned on a page boundary. It
 | 
				
			||||||
 | 
					 * overrides the default implementation found elsewhere which simply picks the
 | 
				
			||||||
 | 
					 * end of ram, wherever that may be. The location of the stack, the relocation
 | 
				
			||||||
 | 
					 * address, and how far U-Boot is moved by relocation are set in the global
 | 
				
			||||||
 | 
					 * data structure.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int calculate_relocation_address(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const uint64_t uboot_size = (uintptr_t)&__bss_end -
 | 
				
			||||||
 | 
								(uintptr_t)&__text_start;
 | 
				
			||||||
 | 
						const uint64_t total_size = uboot_size + CONFIG_SYS_MALLOC_LEN +
 | 
				
			||||||
 | 
							CONFIG_SYS_STACK_SIZE;
 | 
				
			||||||
 | 
						uintptr_t dest_addr = 0;
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i = 0; i < lib_sysinfo.n_memranges; i++) {
 | 
				
			||||||
 | 
							struct memrange *memrange = &lib_sysinfo.memrange[i];
 | 
				
			||||||
 | 
							/* Force U-Boot to relocate to a page aligned address. */
 | 
				
			||||||
 | 
							uint64_t start = roundup(memrange->base, 1 << 12);
 | 
				
			||||||
 | 
							uint64_t end = memrange->base + memrange->size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* Ignore non-memory regions. */
 | 
				
			||||||
 | 
							if (memrange->type != CB_MEM_RAM)
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* Filter memory over 4GB. */
 | 
				
			||||||
 | 
							if (end > 0xffffffffULL)
 | 
				
			||||||
 | 
								end = 0x100000000ULL;
 | 
				
			||||||
 | 
							/* Skip this region if it's too small. */
 | 
				
			||||||
 | 
							if (end - start < total_size)
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* Use this address if it's the largest so far. */
 | 
				
			||||||
 | 
							if (end - uboot_size > dest_addr)
 | 
				
			||||||
 | 
								dest_addr = end;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* If no suitable area was found, return an error. */
 | 
				
			||||||
 | 
						if (!dest_addr)
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dest_addr -= uboot_size;
 | 
				
			||||||
 | 
						dest_addr &= ~((1 << 12) - 1);
 | 
				
			||||||
 | 
						gd->relocaddr = dest_addr;
 | 
				
			||||||
 | 
						gd->reloc_off = dest_addr - (uintptr_t)&__text_start;
 | 
				
			||||||
 | 
						gd->start_addr_sp = dest_addr - CONFIG_SYS_MALLOC_LEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int dram_init_f(void)
 | 
					int dram_init_f(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
| 
						 | 
					@ -71,5 +124,20 @@ int dram_init_f(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int dram_init(void)
 | 
					int dram_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						int i, j;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (CONFIG_NR_DRAM_BANKS) {
 | 
				
			||||||
 | 
							for (i = 0, j = 0; i < lib_sysinfo.n_memranges; i++) {
 | 
				
			||||||
 | 
								struct memrange *memrange = &lib_sysinfo.memrange[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (memrange->type == CB_MEM_RAM) {
 | 
				
			||||||
 | 
									gd->bd->bi_dram[j].start = memrange->base;
 | 
				
			||||||
 | 
									gd->bd->bi_dram[j].size = memrange->size;
 | 
				
			||||||
 | 
									j++;
 | 
				
			||||||
 | 
									if (j >= CONFIG_NR_DRAM_BANKS)
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,39 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * This file is part of the libpayload project.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Copyright (C) 2008 Advanced Micro Devices, Inc.
 | 
					 | 
				
			||||||
 * Copyright (C) 2009 coresystems GmbH
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Redistribution and use in source and binary forms, with or without
 | 
					 | 
				
			||||||
 * modification, are permitted provided that the following conditions
 | 
					 | 
				
			||||||
 * are met:
 | 
					 | 
				
			||||||
 * 1. Redistributions of source code must retain the above copyright
 | 
					 | 
				
			||||||
 *    notice, this list of conditions and the following disclaimer.
 | 
					 | 
				
			||||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
					 | 
				
			||||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
					 | 
				
			||||||
 *    documentation and/or other materials provided with the distribution.
 | 
					 | 
				
			||||||
 * 3. The name of the author may not be used to endorse or promote products
 | 
					 | 
				
			||||||
 *    derived from this software without specific prior written permission.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 | 
					 | 
				
			||||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
					 | 
				
			||||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
					 | 
				
			||||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
					 | 
				
			||||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
					 | 
				
			||||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
					 | 
				
			||||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
					 | 
				
			||||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
					 | 
				
			||||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
					 | 
				
			||||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
					 | 
				
			||||||
 * SUCH DAMAGE.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <asm/arch-coreboot/sysinfo.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * This needs to be in the .data section so that it's copied over during
 | 
					 | 
				
			||||||
 * relocation. By default it's put in the .bss section which is simply filled
 | 
					 | 
				
			||||||
 * with zeroes when transitioning from "ROM", which is really RAM, to other
 | 
					 | 
				
			||||||
 * RAM.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
struct sysinfo_t lib_sysinfo __attribute__((section(".data")));
 | 
					 | 
				
			||||||
| 
						 | 
					@ -28,10 +28,19 @@
 | 
				
			||||||
 * SUCH DAMAGE.
 | 
					 * SUCH DAMAGE.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <common.h>
 | 
				
			||||||
#include <asm/arch-coreboot/ipchecksum.h>
 | 
					#include <asm/arch-coreboot/ipchecksum.h>
 | 
				
			||||||
#include <asm/arch-coreboot/sysinfo.h>
 | 
					#include <asm/arch-coreboot/sysinfo.h>
 | 
				
			||||||
#include <asm/arch-coreboot/tables.h>
 | 
					#include <asm/arch-coreboot/tables.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This needs to be in the .data section so that it's copied over during
 | 
				
			||||||
 | 
					 * relocation. By default it's put in the .bss section which is simply filled
 | 
				
			||||||
 | 
					 * with zeroes when transitioning from "ROM", which is really RAM, to other
 | 
				
			||||||
 | 
					 * RAM.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct sysinfo_t lib_sysinfo __attribute__((section(".data")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Some of this is x86 specific, and the rest of it is generic. Right now,
 | 
					 * Some of this is x86 specific, and the rest of it is generic. Right now,
 | 
				
			||||||
 * since we only support x86, we'll avoid trying to make lots of infrastructure
 | 
					 * since we only support x86, we'll avoid trying to make lots of infrastructure
 | 
				
			||||||
| 
						 | 
					@ -72,22 +81,45 @@ static void cb_parse_memory(unsigned char *ptr, struct sysinfo_t *info)
 | 
				
			||||||
static void cb_parse_serial(unsigned char *ptr, struct sysinfo_t *info)
 | 
					static void cb_parse_serial(unsigned char *ptr, struct sysinfo_t *info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct cb_serial *ser = (struct cb_serial *)ptr;
 | 
						struct cb_serial *ser = (struct cb_serial *)ptr;
 | 
				
			||||||
	if (ser->type != CB_SERIAL_TYPE_IO_MAPPED)
 | 
						info->serial = ser;
 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	info->ser_ioport = ser->baseaddr;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void cb_parse_optiontable(unsigned char *ptr, struct sysinfo_t *info)
 | 
					static void cb_parse_vbnv(unsigned char *ptr, struct sysinfo_t *info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	info->option_table = (struct cb_cmos_option_table *)ptr;
 | 
						struct cb_vbnv *vbnv = (struct cb_vbnv *)ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						info->vbnv_start = vbnv->vbnv_start;
 | 
				
			||||||
 | 
						info->vbnv_size = vbnv->vbnv_size;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void cb_parse_checksum(unsigned char *ptr, struct sysinfo_t *info)
 | 
					static void cb_parse_gpios(unsigned char *ptr, struct sysinfo_t *info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct cb_cmos_checksum *cmos_cksum = (struct cb_cmos_checksum *)ptr;
 | 
						int i;
 | 
				
			||||||
	info->cmos_range_start = cmos_cksum->range_start;
 | 
						struct cb_gpios *gpios = (struct cb_gpios *)ptr;
 | 
				
			||||||
	info->cmos_range_end = cmos_cksum->range_end;
 | 
					
 | 
				
			||||||
	info->cmos_checksum_location = cmos_cksum->location;
 | 
						info->num_gpios = (gpios->count < SYSINFO_MAX_GPIOS) ?
 | 
				
			||||||
 | 
									(gpios->count) : SYSINFO_MAX_GPIOS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i = 0; i < info->num_gpios; i++)
 | 
				
			||||||
 | 
							info->gpios[i] = gpios->gpios[i];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void cb_parse_vdat(unsigned char *ptr, struct sysinfo_t *info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct cb_vdat *vdat = (struct cb_vdat *) ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						info->vdat_addr = vdat->vdat_addr;
 | 
				
			||||||
 | 
						info->vdat_size = vdat->vdat_size;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void cb_parse_tstamp(unsigned char *ptr, struct sysinfo_t *info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						info->tstamp_table = ((struct cb_cbmem_tab *)ptr)->cbmem_tab;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void cb_parse_cbmem_cons(unsigned char *ptr, struct sysinfo_t *info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						info->cbmem_cons = ((struct cb_cbmem_tab *)ptr)->cbmem_tab;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void cb_parse_framebuffer(unsigned char *ptr, struct sysinfo_t *info)
 | 
					static void cb_parse_framebuffer(unsigned char *ptr, struct sysinfo_t *info)
 | 
				
			||||||
| 
						 | 
					@ -95,6 +127,11 @@ static void cb_parse_framebuffer(unsigned char *ptr, struct sysinfo_t *info)
 | 
				
			||||||
	info->framebuffer = (struct cb_framebuffer *)ptr;
 | 
						info->framebuffer = (struct cb_framebuffer *)ptr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void cb_parse_string(unsigned char *ptr, char **info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						*info = (char *)((struct cb_string *)ptr)->string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
 | 
					static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct cb_header *header;
 | 
						struct cb_header *header;
 | 
				
			||||||
| 
						 | 
					@ -125,6 +162,9 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
 | 
				
			||||||
	/* Now, walk the tables. */
 | 
						/* Now, walk the tables. */
 | 
				
			||||||
	ptr += header->header_bytes;
 | 
						ptr += header->header_bytes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Inintialize some fields to sentinel values. */
 | 
				
			||||||
 | 
						info->vbnv_start = info->vbnv_size = (uint32_t)(-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < header->table_entries; i++) {
 | 
						for (i = 0; i < header->table_entries; i++) {
 | 
				
			||||||
		struct cb_record *rec = (struct cb_record *)ptr;
 | 
							struct cb_record *rec = (struct cb_record *)ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -142,11 +182,35 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
 | 
				
			||||||
		case CB_TAG_SERIAL:
 | 
							case CB_TAG_SERIAL:
 | 
				
			||||||
			cb_parse_serial(ptr, info);
 | 
								cb_parse_serial(ptr, info);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case CB_TAG_CMOS_OPTION_TABLE:
 | 
							case CB_TAG_VERSION:
 | 
				
			||||||
			cb_parse_optiontable(ptr, info);
 | 
								cb_parse_string(ptr, &info->version);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case CB_TAG_OPTION_CHECKSUM:
 | 
							case CB_TAG_EXTRA_VERSION:
 | 
				
			||||||
			cb_parse_checksum(ptr, info);
 | 
								cb_parse_string(ptr, &info->extra_version);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_BUILD:
 | 
				
			||||||
 | 
								cb_parse_string(ptr, &info->build);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_COMPILE_TIME:
 | 
				
			||||||
 | 
								cb_parse_string(ptr, &info->compile_time);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_COMPILE_BY:
 | 
				
			||||||
 | 
								cb_parse_string(ptr, &info->compile_by);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_COMPILE_HOST:
 | 
				
			||||||
 | 
								cb_parse_string(ptr, &info->compile_host);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_COMPILE_DOMAIN:
 | 
				
			||||||
 | 
								cb_parse_string(ptr, &info->compile_domain);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_COMPILER:
 | 
				
			||||||
 | 
								cb_parse_string(ptr, &info->compiler);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_LINKER:
 | 
				
			||||||
 | 
								cb_parse_string(ptr, &info->linker);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_ASSEMBLER:
 | 
				
			||||||
 | 
								cb_parse_string(ptr, &info->assembler);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * FIXME we should warn on serial if coreboot set up a
 | 
							 * FIXME we should warn on serial if coreboot set up a
 | 
				
			||||||
| 
						 | 
					@ -155,6 +219,21 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
 | 
				
			||||||
		case CB_TAG_FRAMEBUFFER:
 | 
							case CB_TAG_FRAMEBUFFER:
 | 
				
			||||||
			cb_parse_framebuffer(ptr, info);
 | 
								cb_parse_framebuffer(ptr, info);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_GPIO:
 | 
				
			||||||
 | 
								cb_parse_gpios(ptr, info);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_VDAT:
 | 
				
			||||||
 | 
								cb_parse_vdat(ptr, info);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_TIMESTAMPS:
 | 
				
			||||||
 | 
								cb_parse_tstamp(ptr, info);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_CBMEM_CONSOLE:
 | 
				
			||||||
 | 
								cb_parse_cbmem_cons(ptr, info);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case CB_TAG_VBNV:
 | 
				
			||||||
 | 
								cb_parse_vbnv(ptr, info);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ptr += rec->size;
 | 
							ptr += rec->size;
 | 
				
			||||||
| 
						 | 
					@ -166,18 +245,12 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
 | 
				
			||||||
/* == Architecture specific == */
 | 
					/* == Architecture specific == */
 | 
				
			||||||
/* This is the x86 specific stuff. */
 | 
					/* This is the x86 specific stuff. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Assume no translation or that memory is identity mapped. */
 | 
					 | 
				
			||||||
static void *phys_to_virt(unsigned long virt)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return (void *)(uintptr_t)virt;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int get_coreboot_info(struct sysinfo_t *info)
 | 
					int get_coreboot_info(struct sysinfo_t *info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int ret = cb_parse_header(phys_to_virt(0x00000000), 0x1000, info);
 | 
						int ret = cb_parse_header((void *)0x00000000, 0x1000, info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ret != 1)
 | 
						if (ret != 1)
 | 
				
			||||||
		ret = cb_parse_header(phys_to_virt(0x000f0000), 0x1000, info);
 | 
							ret = cb_parse_header((void *)0x000f0000, 0x1000, info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return (ret == 1) ? 0 : -1;
 | 
						return (ret == 1) ? 0 : -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,61 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This file is part of the coreboot project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2011 The ChromiumOS Authors.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation; version 2 of the License.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <common.h>
 | 
				
			||||||
 | 
					#include <asm/arch/timestamp.h>
 | 
				
			||||||
 | 
					#include <asm/arch/sysinfo.h>
 | 
				
			||||||
 | 
					#include <linux/compiler.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct timestamp_entry {
 | 
				
			||||||
 | 
						uint32_t	entry_id;
 | 
				
			||||||
 | 
						uint64_t	entry_stamp;
 | 
				
			||||||
 | 
					} __packed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct timestamp_table {
 | 
				
			||||||
 | 
						uint64_t	base_time;
 | 
				
			||||||
 | 
						uint32_t	max_entries;
 | 
				
			||||||
 | 
						uint32_t	num_entries;
 | 
				
			||||||
 | 
						struct timestamp_entry entries[0]; /* Variable number of entries */
 | 
				
			||||||
 | 
					} __packed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct timestamp_table *ts_table  __attribute__((section(".data")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void timestamp_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						ts_table = lib_sysinfo.tstamp_table;
 | 
				
			||||||
 | 
						timer_set_tsc_base(ts_table->base_time);
 | 
				
			||||||
 | 
						timestamp_add_now(TS_U_BOOT_INITTED);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void timestamp_add(enum timestamp_id id, uint64_t ts_time)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct timestamp_entry *tse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!ts_table || (ts_table->num_entries == ts_table->max_entries))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tse = &ts_table->entries[ts_table->num_entries++];
 | 
				
			||||||
 | 
						tse->entry_id = id;
 | 
				
			||||||
 | 
						tse->entry_stamp = ts_time - ts_table->base_time;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void timestamp_add_now(enum timestamp_id id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						timestamp_add(id, rdtsc());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -34,6 +34,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <common.h>
 | 
					#include <common.h>
 | 
				
			||||||
#include <command.h>
 | 
					#include <command.h>
 | 
				
			||||||
 | 
					#include <asm/control_regs.h>
 | 
				
			||||||
#include <asm/processor.h>
 | 
					#include <asm/processor.h>
 | 
				
			||||||
#include <asm/processor-flags.h>
 | 
					#include <asm/processor-flags.h>
 | 
				
			||||||
#include <asm/interrupt.h>
 | 
					#include <asm/interrupt.h>
 | 
				
			||||||
| 
						 | 
					@ -90,12 +91,6 @@ static void load_gdt(const u64 *boot_gdt, u16 num_entries)
 | 
				
			||||||
	asm volatile("lgdtl %0\n" : : "m" (gdt));
 | 
						asm volatile("lgdtl %0\n" : : "m" (gdt));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void init_gd(gd_t *id, u64 *gdt_addr)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	id->gd_addr = (ulong)id;
 | 
					 | 
				
			||||||
	setup_gdt(id, gdt_addr);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void setup_gdt(gd_t *id, u64 *gdt_addr)
 | 
					void setup_gdt(gd_t *id, u64 *gdt_addr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* CS: code, read/execute, 4 GB, base 0 */
 | 
						/* CS: code, read/execute, 4 GB, base 0 */
 | 
				
			||||||
| 
						 | 
					@ -121,6 +116,11 @@ void setup_gdt(gd_t *id, u64 *gdt_addr)
 | 
				
			||||||
	load_fs(X86_GDT_ENTRY_32BIT_FS);
 | 
						load_fs(X86_GDT_ENTRY_32BIT_FS);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int __weak x86_cleanup_before_linux(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int x86_cpu_init_f(void)
 | 
					int x86_cpu_init_f(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const u32 em_rst = ~X86_CR0_EM;
 | 
						const u32 em_rst = ~X86_CR0_EM;
 | 
				
			||||||
| 
						 | 
					@ -148,16 +148,27 @@ int cpu_init_r(void) __attribute__((weak, alias("x86_cpu_init_r")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void x86_enable_caches(void)
 | 
					void x86_enable_caches(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const u32 nw_cd_rst = ~(X86_CR0_NW | X86_CR0_CD);
 | 
						unsigned long cr0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* turn on the cache and disable write through */
 | 
						cr0 = read_cr0();
 | 
				
			||||||
	asm("movl	%%cr0, %%eax\n"
 | 
						cr0 &= ~(X86_CR0_NW | X86_CR0_CD);
 | 
				
			||||||
	    "andl	%0, %%eax\n"
 | 
						write_cr0(cr0);
 | 
				
			||||||
	    "movl	%%eax, %%cr0\n"
 | 
						wbinvd();
 | 
				
			||||||
	    "wbinvd\n" : : "i" (nw_cd_rst) : "eax");
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void enable_caches(void) __attribute__((weak, alias("x86_enable_caches")));
 | 
					void enable_caches(void) __attribute__((weak, alias("x86_enable_caches")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void x86_disable_caches(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						unsigned long cr0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cr0 = read_cr0();
 | 
				
			||||||
 | 
						cr0 |= X86_CR0_NW | X86_CR0_CD;
 | 
				
			||||||
 | 
						wbinvd();
 | 
				
			||||||
 | 
						write_cr0(cr0);
 | 
				
			||||||
 | 
						wbinvd();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					void disable_caches(void) __attribute__((weak, alias("x86_disable_caches")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int x86_init_cache(void)
 | 
					int x86_init_cache(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	enable_caches();
 | 
						enable_caches();
 | 
				
			||||||
| 
						 | 
					@ -201,3 +212,17 @@ void __reset_cpu(ulong addr)
 | 
				
			||||||
	generate_gpf();			/* start the show */
 | 
						generate_gpf();			/* start the show */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void reset_cpu(ulong addr) __attribute__((weak, alias("__reset_cpu")));
 | 
					void reset_cpu(ulong addr) __attribute__((weak, alias("__reset_cpu")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int dcache_status(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return !(read_cr0() & 0x40000000);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Define these functions to allow ehch-hcd to function */
 | 
				
			||||||
 | 
					void flush_dcache_range(unsigned long start, unsigned long stop)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void invalidate_dcache_range(unsigned long start, unsigned long stop)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,10 +28,14 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <common.h>
 | 
					#include <common.h>
 | 
				
			||||||
 | 
					#include <asm/cache.h>
 | 
				
			||||||
 | 
					#include <asm/control_regs.h>
 | 
				
			||||||
#include <asm/interrupt.h>
 | 
					#include <asm/interrupt.h>
 | 
				
			||||||
#include <asm/io.h>
 | 
					#include <asm/io.h>
 | 
				
			||||||
#include <asm/processor-flags.h>
 | 
					#include <asm/processor-flags.h>
 | 
				
			||||||
#include <linux/compiler.h>
 | 
					#include <linux/compiler.h>
 | 
				
			||||||
 | 
					#include <asm/msr.h>
 | 
				
			||||||
 | 
					#include <asm/u-boot-x86.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DECLARE_INTERRUPT(x) \
 | 
					#define DECLARE_INTERRUPT(x) \
 | 
				
			||||||
	".globl irq_"#x"\n" \
 | 
						".globl irq_"#x"\n" \
 | 
				
			||||||
| 
						 | 
					@ -41,72 +45,6 @@
 | 
				
			||||||
	"pushl $"#x"\n" \
 | 
						"pushl $"#x"\n" \
 | 
				
			||||||
	"jmp irq_common_entry\n"
 | 
						"jmp irq_common_entry\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Volatile isn't enough to prevent the compiler from reordering the
 | 
					 | 
				
			||||||
 * read/write functions for the control registers and messing everything up.
 | 
					 | 
				
			||||||
 * A memory clobber would solve the problem, but would prevent reordering of
 | 
					 | 
				
			||||||
 * all loads stores around it, which can hurt performance. Solution is to
 | 
					 | 
				
			||||||
 * use a variable and mimic reads and writes to it to enforce serialisation
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static unsigned long __force_order;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline unsigned long read_cr0(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	unsigned long val;
 | 
					 | 
				
			||||||
	asm volatile("mov %%cr0,%0\n\t" : "=r" (val), "=m" (__force_order));
 | 
					 | 
				
			||||||
	return val;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline unsigned long read_cr2(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	unsigned long val;
 | 
					 | 
				
			||||||
	asm volatile("mov %%cr2,%0\n\t" : "=r" (val), "=m" (__force_order));
 | 
					 | 
				
			||||||
	return val;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline unsigned long read_cr3(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	unsigned long val;
 | 
					 | 
				
			||||||
	asm volatile("mov %%cr3,%0\n\t" : "=r" (val), "=m" (__force_order));
 | 
					 | 
				
			||||||
	return val;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline unsigned long read_cr4(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	unsigned long val;
 | 
					 | 
				
			||||||
	asm volatile("mov %%cr4,%0\n\t" : "=r" (val), "=m" (__force_order));
 | 
					 | 
				
			||||||
	return val;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline unsigned long get_debugreg(int regno)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	unsigned long val = 0;	/* Damn you, gcc! */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	switch (regno) {
 | 
					 | 
				
			||||||
	case 0:
 | 
					 | 
				
			||||||
		asm("mov %%db0, %0" : "=r" (val));
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	case 1:
 | 
					 | 
				
			||||||
		asm("mov %%db1, %0" : "=r" (val));
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	case 2:
 | 
					 | 
				
			||||||
		asm("mov %%db2, %0" : "=r" (val));
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	case 3:
 | 
					 | 
				
			||||||
		asm("mov %%db3, %0" : "=r" (val));
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	case 6:
 | 
					 | 
				
			||||||
		asm("mov %%db6, %0" : "=r" (val));
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	case 7:
 | 
					 | 
				
			||||||
		asm("mov %%db7, %0" : "=r" (val));
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		val = 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return val;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void dump_regs(struct irq_regs *regs)
 | 
					void dump_regs(struct irq_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L;
 | 
						unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L;
 | 
				
			||||||
| 
						 | 
					@ -679,3 +617,32 @@ asm(".globl irq_common_entry\n" \
 | 
				
			||||||
	DECLARE_INTERRUPT(253) \
 | 
						DECLARE_INTERRUPT(253) \
 | 
				
			||||||
	DECLARE_INTERRUPT(254) \
 | 
						DECLARE_INTERRUPT(254) \
 | 
				
			||||||
	DECLARE_INTERRUPT(255));
 | 
						DECLARE_INTERRUPT(255));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(CONFIG_INTEL_CORE_ARCH)
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Get the number of CPU time counter ticks since it was read first time after
 | 
				
			||||||
 | 
					 * restart. This yields a free running counter guaranteed to take almost 6
 | 
				
			||||||
 | 
					 * years to wrap around even at 100GHz clock rate.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					u64 get_ticks(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						static u64 tick_base;
 | 
				
			||||||
 | 
						u64 now_tick = rdtsc();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!tick_base)
 | 
				
			||||||
 | 
							tick_base = now_tick;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return now_tick - tick_base;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PLATFORM_INFO_MSR 0xce
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned long get_tbclk(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						u32 ratio;
 | 
				
			||||||
 | 
						u64 platform_info = native_read_msr(PLATFORM_INFO_MSR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ratio = (platform_info >> 8) & 0xff;
 | 
				
			||||||
 | 
						return 100 * 1000 * 1000 * ratio; /* 100MHz times Max Non Turbo ratio */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,8 +55,16 @@ _x86boot_start:
 | 
				
			||||||
	movl	%eax, %cr0
 | 
						movl	%eax, %cr0
 | 
				
			||||||
	wbinvd
 | 
						wbinvd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Tell 32-bit code it is being entered from an in-RAM copy */
 | 
				
			||||||
 | 
						movw	$GD_FLG_WARM_BOOT, %bx
 | 
				
			||||||
 | 
						jmp	1f
 | 
				
			||||||
_start:
 | 
					_start:
 | 
				
			||||||
	/* This is the 32-bit cold-reset entry point */
 | 
						/*
 | 
				
			||||||
 | 
						 * This is the 32-bit cold-reset entry point. Initialize %bx to 0
 | 
				
			||||||
 | 
						 * in case we're preceeded by some sort of boot stub.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						movw	$GD_FLG_COLD_BOOT, %bx
 | 
				
			||||||
 | 
					1:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Load the segement registes to match the gdt loaded in start16.S */
 | 
						/* Load the segement registes to match the gdt loaded in start16.S */
 | 
				
			||||||
	movl	$(X86_GDT_ENTRY_32BIT_DS * X86_GDT_ENTRY_SIZE), %eax
 | 
						movl	$(X86_GDT_ENTRY_32BIT_DS * X86_GDT_ENTRY_SIZE), %eax
 | 
				
			||||||
| 
						 | 
					@ -83,13 +91,33 @@ car_init_ret:
 | 
				
			||||||
	 * or fully initialised SDRAM - we really don't care which)
 | 
						 * or fully initialised SDRAM - we really don't care which)
 | 
				
			||||||
	 * starting at CONFIG_SYS_CAR_ADDR to be used as a temporary stack
 | 
						 * starting at CONFIG_SYS_CAR_ADDR to be used as a temporary stack
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	movl	$CONFIG_SYS_INIT_SP_ADDR, %esp
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Initialise the Global Data Pointer */
 | 
						/* Stack grows down from top of CAR */
 | 
				
			||||||
	movl	$CONFIG_SYS_INIT_GD_ADDR, %eax
 | 
						movl	$(CONFIG_SYS_CAR_ADDR + CONFIG_SYS_CAR_SIZE), %esp
 | 
				
			||||||
	movl	%eax, %edx
 | 
					
 | 
				
			||||||
	addl	$GENERATED_GBL_DATA_SIZE, %edx
 | 
						/* Reserve space on stack for global data */
 | 
				
			||||||
	call	init_gd;
 | 
						subl	$GENERATED_GBL_DATA_SIZE, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Align global data to 16-byte boundary */
 | 
				
			||||||
 | 
						andl	$0xfffffff0, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Setup first parameter to setup_gdt */
 | 
				
			||||||
 | 
						movl	%esp, %eax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Reserve space for global descriptor table */
 | 
				
			||||||
 | 
						subl	$X86_GDT_SIZE, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Align temporary global descriptor table to 16-byte boundary */
 | 
				
			||||||
 | 
						andl	$0xfffffff0, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Set second parameter to setup_gdt */
 | 
				
			||||||
 | 
						movl	%esp, %edx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* gd->gd_addr = gd (Required to allow gd->xyz to work) */
 | 
				
			||||||
 | 
						movl	%eax, (%eax)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Setup global descriptor table so gd->xyz works */
 | 
				
			||||||
 | 
						call	setup_gdt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Set parameter to board_init_f() to boot flags */
 | 
						/* Set parameter to board_init_f() to boot flags */
 | 
				
			||||||
	xorl	%eax, %eax
 | 
						xorl	%eax, %eax
 | 
				
			||||||
| 
						 | 
					@ -113,9 +141,42 @@ board_init_f_r_trampoline:
 | 
				
			||||||
	 * %eax = Address of top of new stack
 | 
						 * %eax = Address of top of new stack
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Setup stack in RAM */
 | 
						/* Stack grows down from top of SDRAM */
 | 
				
			||||||
	movl	%eax, %esp
 | 
						movl	%eax, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Reserve space on stack for global data */
 | 
				
			||||||
 | 
						subl	$GENERATED_GBL_DATA_SIZE, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Align global data to 16-byte boundary */
 | 
				
			||||||
 | 
						andl	$0xfffffff0, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Setup first parameter to memcpy (and setup_gdt) */
 | 
				
			||||||
 | 
						movl	%esp, %eax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Setup second parameter to memcpy */
 | 
				
			||||||
 | 
						fs movl 0, %edx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Set third parameter to memcpy */
 | 
				
			||||||
 | 
						movl	$GENERATED_GBL_DATA_SIZE, %ecx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Copy global data from CAR to SDRAM stack */
 | 
				
			||||||
 | 
						call	memcpy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Reserve space for global descriptor table */
 | 
				
			||||||
 | 
						subl	$X86_GDT_SIZE, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Align global descriptor table to 16-byte boundary */
 | 
				
			||||||
 | 
						andl	$0xfffffff0, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Set second parameter to setup_gdt */
 | 
				
			||||||
 | 
						movl	%esp, %edx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* gd->gd_addr = gd (Required to allow gd->xyz to work) */
 | 
				
			||||||
 | 
						movl	%eax, (%eax)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Setup global descriptor table so gd->xyz works */
 | 
				
			||||||
 | 
						call	setup_gdt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Re-enter U-Boot by calling board_init_f_r */
 | 
						/* Re-enter U-Boot by calling board_init_f_r */
 | 
				
			||||||
	call	board_init_f_r
 | 
						call	board_init_f_r
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,6 +37,9 @@
 | 
				
			||||||
.code16
 | 
					.code16
 | 
				
			||||||
.globl start16
 | 
					.globl start16
 | 
				
			||||||
start16:
 | 
					start16:
 | 
				
			||||||
 | 
						/* Set the Cold Boot / Hard Reset flag */
 | 
				
			||||||
 | 
						movl	$GD_FLG_COLD_BOOT, %ebx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * First we let the BSP do some early initialization
 | 
						 * First we let the BSP do some early initialization
 | 
				
			||||||
	 * this code have to map the flash to its final position
 | 
						 * this code have to map the flash to its final position
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
 | 
				
			||||||
 | 
					 * Use of this source code is governed by a BSD-style license that can be
 | 
				
			||||||
 | 
					 * found in the LICENSE file.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Alternatively, this software may be distributed under the terms of the
 | 
				
			||||||
 | 
					 * GNU General Public License ("GPL") version 2 as published by the Free
 | 
				
			||||||
 | 
					 * Software Foundation.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <common.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned long timer_get_us(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						printf("timer_get_us used but not implemented.\n");
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -86,6 +86,8 @@ SECTIONS
 | 
				
			||||||
	__bios_start = LOADADDR(.bios);
 | 
						__bios_start = LOADADDR(.bios);
 | 
				
			||||||
	__bios_size = SIZEOF(.bios);
 | 
						__bios_size = SIZEOF(.bios);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CONFIG_X86_NO_RESET_VECTOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * The following expressions place the 16-bit Real-Mode code and
 | 
						 * The following expressions place the 16-bit Real-Mode code and
 | 
				
			||||||
	 * Reset Vector at the end of the Flash ROM
 | 
						 * Reset Vector at the end of the Flash ROM
 | 
				
			||||||
| 
						 | 
					@ -95,4 +97,5 @@ SECTIONS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	. = RESET_VEC_LOC;
 | 
						. = RESET_VEC_LOC;
 | 
				
			||||||
	.resetvec : AT (CONFIG_SYS_TEXT_BASE + (CONFIG_SYS_MONITOR_LEN - RESET_SEG_SIZE + RESET_VEC_LOC)) { KEEP(*(.resetvec)); }
 | 
						.resetvec : AT (CONFIG_SYS_TEXT_BASE + (CONFIG_SYS_MONITOR_LEN - RESET_SEG_SIZE + RESET_VEC_LOC)) { KEEP(*(.resetvec)); }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					/include/ "skeleton.dtsi"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/ {
 | 
				
			||||||
 | 
						aliases {
 | 
				
			||||||
 | 
							console = "/serial";
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						serial {
 | 
				
			||||||
 | 
							compatible = "ns16550";
 | 
				
			||||||
 | 
							reg-shift = <1>;
 | 
				
			||||||
 | 
							io-mapped = <1>;
 | 
				
			||||||
 | 
							multiplier = <1>;
 | 
				
			||||||
 | 
							baudrate = <115200>;
 | 
				
			||||||
 | 
							status = "disabled";
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Skeleton device tree; the bare minimum needed to boot; just include and
 | 
				
			||||||
 | 
					 * add a compatible value.  The bootloader will typically populate the memory
 | 
				
			||||||
 | 
					 * node.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/ {
 | 
				
			||||||
 | 
						#address-cells = <1>;
 | 
				
			||||||
 | 
						#size-cells = <1>;
 | 
				
			||||||
 | 
						chosen { };
 | 
				
			||||||
 | 
						aliases { };
 | 
				
			||||||
 | 
						memory { device_type = "memory"; reg = <0 0>; };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -30,32 +30,52 @@
 | 
				
			||||||
#ifndef _COREBOOT_SYSINFO_H
 | 
					#ifndef _COREBOOT_SYSINFO_H
 | 
				
			||||||
#define _COREBOOT_SYSINFO_H
 | 
					#define _COREBOOT_SYSINFO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <common.h>
 | 
				
			||||||
#include <compiler.h>
 | 
					#include <compiler.h>
 | 
				
			||||||
 | 
					#include <fdt.h>
 | 
				
			||||||
 | 
					#include <asm/arch/tables.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Allow a maximum of 16 memory range definitions. */
 | 
					/* Allow a maximum of 16 memory range definitions. */
 | 
				
			||||||
#define SYSINFO_MAX_MEM_RANGES 16
 | 
					#define SYSINFO_MAX_MEM_RANGES 16
 | 
				
			||||||
 | 
					/* Allow a maximum of 8 GPIOs */
 | 
				
			||||||
 | 
					#define SYSINFO_MAX_GPIOS 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct sysinfo_t {
 | 
					struct sysinfo_t {
 | 
				
			||||||
	unsigned int cpu_khz;
 | 
					 | 
				
			||||||
	unsigned short ser_ioport;
 | 
					 | 
				
			||||||
	unsigned long ser_base; /* for mmapped serial */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	int n_memranges;
 | 
						int n_memranges;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	struct memrange {
 | 
						struct memrange {
 | 
				
			||||||
		unsigned long long base;
 | 
							unsigned long long base;
 | 
				
			||||||
		unsigned long long size;
 | 
							unsigned long long size;
 | 
				
			||||||
		unsigned int type;
 | 
							unsigned int type;
 | 
				
			||||||
	} memrange[SYSINFO_MAX_MEM_RANGES];
 | 
						} memrange[SYSINFO_MAX_MEM_RANGES];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct cb_cmos_option_table *option_table;
 | 
					 | 
				
			||||||
	u32 cmos_range_start;
 | 
						u32 cmos_range_start;
 | 
				
			||||||
	u32 cmos_range_end;
 | 
						u32 cmos_range_end;
 | 
				
			||||||
	u32 cmos_checksum_location;
 | 
						u32 cmos_checksum_location;
 | 
				
			||||||
 | 
						u32 vbnv_start;
 | 
				
			||||||
 | 
						u32 vbnv_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						char *version;
 | 
				
			||||||
 | 
						char *extra_version;
 | 
				
			||||||
 | 
						char *build;
 | 
				
			||||||
 | 
						char *compile_time;
 | 
				
			||||||
 | 
						char *compile_by;
 | 
				
			||||||
 | 
						char *compile_host;
 | 
				
			||||||
 | 
						char *compile_domain;
 | 
				
			||||||
 | 
						char *compiler;
 | 
				
			||||||
 | 
						char *linker;
 | 
				
			||||||
 | 
						char *assembler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct cb_framebuffer *framebuffer;
 | 
						struct cb_framebuffer *framebuffer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unsigned long *mbtable; /** Pointer to the multiboot table */
 | 
						int num_gpios;
 | 
				
			||||||
 | 
						struct cb_gpio gpios[SYSINFO_MAX_GPIOS];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void	*vdat_addr;
 | 
				
			||||||
 | 
						u32	vdat_size;
 | 
				
			||||||
 | 
						void	*tstamp_table;
 | 
				
			||||||
 | 
						void	*cbmem_cons;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct cb_serial *serial;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern struct sysinfo_t lib_sysinfo;
 | 
					extern struct sysinfo_t lib_sysinfo;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -164,6 +164,55 @@ struct cb_framebuffer {
 | 
				
			||||||
	u8 reserved_mask_size;
 | 
						u8 reserved_mask_size;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CB_TAG_GPIO 0x0013
 | 
				
			||||||
 | 
					#define GPIO_MAX_NAME_LENGTH 16
 | 
				
			||||||
 | 
					struct cb_gpio {
 | 
				
			||||||
 | 
						u32 port;
 | 
				
			||||||
 | 
						u32 polarity;
 | 
				
			||||||
 | 
						u32 value;
 | 
				
			||||||
 | 
						u8 name[GPIO_MAX_NAME_LENGTH];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct cb_gpios {
 | 
				
			||||||
 | 
						u32 tag;
 | 
				
			||||||
 | 
						u32 size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u32 count;
 | 
				
			||||||
 | 
						struct cb_gpio gpios[0];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CB_TAG_FDT	0x0014
 | 
				
			||||||
 | 
					struct cb_fdt {
 | 
				
			||||||
 | 
						uint32_t tag;
 | 
				
			||||||
 | 
						uint32_t size;	/* size of the entire entry */
 | 
				
			||||||
 | 
						/* the actual FDT gets placed here */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CB_TAG_VDAT	0x0015
 | 
				
			||||||
 | 
					struct cb_vdat {
 | 
				
			||||||
 | 
						uint32_t tag;
 | 
				
			||||||
 | 
						uint32_t size;	/* size of the entire entry */
 | 
				
			||||||
 | 
						void	 *vdat_addr;
 | 
				
			||||||
 | 
						uint32_t vdat_size;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CB_TAG_TIMESTAMPS	0x0016
 | 
				
			||||||
 | 
					#define CB_TAG_CBMEM_CONSOLE	0x0017
 | 
				
			||||||
 | 
					#define CB_TAG_MRC_CACHE	0x0018
 | 
				
			||||||
 | 
					struct cb_cbmem_tab {
 | 
				
			||||||
 | 
						uint32_t tag;
 | 
				
			||||||
 | 
						uint32_t size;
 | 
				
			||||||
 | 
						void   *cbmem_tab;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CB_TAG_VBNV		0x0019
 | 
				
			||||||
 | 
					struct cb_vbnv {
 | 
				
			||||||
 | 
						uint32_t tag;
 | 
				
			||||||
 | 
						uint32_t size;
 | 
				
			||||||
 | 
						uint32_t vbnv_start;
 | 
				
			||||||
 | 
						uint32_t vbnv_size;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CB_TAG_CMOS_OPTION_TABLE 0x00c8
 | 
					#define CB_TAG_CMOS_OPTION_TABLE 0x00c8
 | 
				
			||||||
struct cb_cmos_option_table {
 | 
					struct cb_cmos_option_table {
 | 
				
			||||||
	u32 tag;
 | 
						u32 tag;
 | 
				
			||||||
| 
						 | 
					@ -238,4 +287,29 @@ struct sysinfo_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int get_coreboot_info(struct sysinfo_t *info);
 | 
					int get_coreboot_info(struct sysinfo_t *info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CBMEM_TOC_RESERVED      512
 | 
				
			||||||
 | 
					#define MAX_CBMEM_ENTRIES       16
 | 
				
			||||||
 | 
					#define CBMEM_MAGIC             0x434f5245
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct cbmem_entry {
 | 
				
			||||||
 | 
						u32 magic;
 | 
				
			||||||
 | 
						u32 id;
 | 
				
			||||||
 | 
						u64 base;
 | 
				
			||||||
 | 
						u64 size;
 | 
				
			||||||
 | 
					} __packed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CBMEM_ID_FREESPACE      0x46524545
 | 
				
			||||||
 | 
					#define CBMEM_ID_GDT            0x4c474454
 | 
				
			||||||
 | 
					#define CBMEM_ID_ACPI           0x41435049
 | 
				
			||||||
 | 
					#define CBMEM_ID_CBTABLE        0x43425442
 | 
				
			||||||
 | 
					#define CBMEM_ID_PIRQ           0x49525154
 | 
				
			||||||
 | 
					#define CBMEM_ID_MPTABLE        0x534d5054
 | 
				
			||||||
 | 
					#define CBMEM_ID_RESUME         0x5245534d
 | 
				
			||||||
 | 
					#define CBMEM_ID_RESUME_SCRATCH 0x52455343
 | 
				
			||||||
 | 
					#define CBMEM_ID_SMBIOS         0x534d4254
 | 
				
			||||||
 | 
					#define CBMEM_ID_TIMESTAMP      0x54494d45
 | 
				
			||||||
 | 
					#define CBMEM_ID_MRCDATA        0x4d524344
 | 
				
			||||||
 | 
					#define CBMEM_ID_CONSOLE        0x434f4e53
 | 
				
			||||||
 | 
					#define CBMEM_ID_NONE           0x00000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,52 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This file is part of the coreboot project.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2011 The ChromiumOS Authors.  All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation; version 2 of the License.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __COREBOOT_TIMESTAMP_H__
 | 
				
			||||||
 | 
					#define __COREBOOT_TIMESTAMP_H__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum timestamp_id {
 | 
				
			||||||
 | 
						/* coreboot specific timestamp IDs */
 | 
				
			||||||
 | 
						TS_START_ROMSTAGE = 1,
 | 
				
			||||||
 | 
						TS_BEFORE_INITRAM = 2,
 | 
				
			||||||
 | 
						TS_AFTER_INITRAM = 3,
 | 
				
			||||||
 | 
						TS_END_ROMSTAGE = 4,
 | 
				
			||||||
 | 
						TS_START_COPYRAM = 8,
 | 
				
			||||||
 | 
						TS_END_COPYRAM = 9,
 | 
				
			||||||
 | 
						TS_START_RAMSTAGE = 10,
 | 
				
			||||||
 | 
						TS_DEVICE_ENUMERATE = 30,
 | 
				
			||||||
 | 
						TS_DEVICE_CONFIGURE = 40,
 | 
				
			||||||
 | 
						TS_DEVICE_ENABLE = 50,
 | 
				
			||||||
 | 
						TS_DEVICE_INITIALIZE = 60,
 | 
				
			||||||
 | 
						TS_DEVICE_DONE = 70,
 | 
				
			||||||
 | 
						TS_CBMEM_POST = 75,
 | 
				
			||||||
 | 
						TS_WRITE_TABLES = 80,
 | 
				
			||||||
 | 
						TS_LOAD_PAYLOAD = 90,
 | 
				
			||||||
 | 
						TS_ACPI_WAKE_JUMP = 98,
 | 
				
			||||||
 | 
						TS_SELFBOOT_JUMP = 99,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* U-Boot entry IDs start at 1000 */
 | 
				
			||||||
 | 
						TS_U_BOOT_INITTED = 1000, /* This is where u-boot starts */
 | 
				
			||||||
 | 
						TS_U_BOOT_START_KERNEL = 1100, /* Right before jumping to kernel. */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void timestamp_init(void);
 | 
				
			||||||
 | 
					void timestamp_add(enum timestamp_id id, uint64_t ts_time);
 | 
				
			||||||
 | 
					void timestamp_add_now(enum timestamp_id id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -351,6 +351,11 @@ static __inline__ int ffs(int x)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#define PLATFORM_FFS
 | 
					#define PLATFORM_FFS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline int __ilog2(unsigned int x)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return generic_fls(x) - 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * hweightN - returns the hamming weight of a N-bit word
 | 
					 * hweightN - returns the hamming weight of a N-bit word
 | 
				
			||||||
 * @x: the word to weigh
 | 
					 * @x: the word to weigh
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue