ppc4xx: Add bootcount limit handling for APC405 boards

Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
diff --git a/board/esd/apc405/apc405.c b/board/esd/apc405/apc405.c
index b663184..2cb743e 100644
--- a/board/esd/apc405/apc405.c
+++ b/board/esd/apc405/apc405.c
@@ -385,11 +385,16 @@
 	}
 	out_be16((u16 *)(FUJI_BASE + LCDBL_PWM), 0xff);
 
-	if (getenv("usb_self") == NULL) {
+	/*
+	 * fix environment for field updated units
+	 */
+	if (getenv("altbootcmd") == NULL) {
 		setenv("usb_load", CFG_USB_LOAD_COMMAND);
 		setenv("usbargs", CFG_USB_ARGS);
 		setenv("bootcmd", CONFIG_BOOTCOMMAND);
 		setenv("usb_self", CFG_USB_SELF_COMMAND);
+		setenv("bootlimit", CFG_BOOTLIMIT);
+		setenv("altbootcmd", CFG_ALT_BOOTCOMMAND);
 		saveenv();
 	}
 
diff --git a/include/configs/APC405.h b/include/configs/APC405.h
index e2ab39d..8ad33f1 100644
--- a/include/configs/APC405.h
+++ b/include/configs/APC405.h
@@ -48,6 +48,7 @@
 
 #define CONFIG_BAUDRATE		115200
 #define CONFIG_BOOTDELAY	1	/* autoboot after 3 seconds	*/
+#define CONFIG_BOOTCOUNT_LIMIT	1
 
 #undef	CONFIG_BOOTARGS
 
@@ -57,6 +58,8 @@
 				"run ramargs addip addcon usbargs;"	\
 				"bootm 200000 300000"
 #define CFG_USB_ARGS		"setenv bootargs $(bootargs) usbboot=1"
+#define CFG_BOOTLIMIT		"3"
+#define CFG_ALT_BOOTCOMMAND	"run usb_self;reset"
 
 #define CONFIG_EXTRA_ENV_SETTINGS                                       \
 	"hostname=abg405\0"                                             \
@@ -88,8 +91,10 @@
 	"usb_load="CFG_USB_LOAD_COMMAND"\0"				\
 	"usb_self="CFG_USB_SELF_COMMAND"\0"				\
 	"usbargs="CFG_USB_ARGS"\0"					\
+	"bootlimit="CFG_BOOTLIMIT"\0"					\
+	"altbootcmd="CFG_ALT_BOOTCOMMAND"\0"				\
 	""
-#define CONFIG_BOOTCOMMAND	"run flash_self;run usb_self"
+#define CONFIG_BOOTCOMMAND	"run flash_self;reset"
 
 #define CONFIG_ETHADDR		00:02:27:8e:00:00
 
@@ -414,7 +419,12 @@
 #define CFG_INIT_RAM_END	CFG_OCM_DATA_SIZE /* End of used area in RAM */
 #define CFG_GBL_DATA_SIZE	128 /* reserved bytes for initial data */
 #define CFG_GBL_DATA_OFFSET	(CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
-#define CFG_INIT_SP_OFFSET	CFG_GBL_DATA_OFFSET
+/* reserve some memory for BOOT limit info */
+#define CFG_INIT_SP_OFFSET	(CFG_GBL_DATA_OFFSET - 16)
+
+#ifdef CONFIG_BOOTCOUNT_LIMIT /* reserve 2 word for bootcount limit */
+#define CFG_BOOTCOUNT_ADDR (CFG_GBL_DATA_OFFSET - 8)
+#endif
 
 /*
  * Internal Definitions