POST cleanup.

- Revives POST for blackfin arch;
- Removes redundant code:
     arch/blackfin/lib/post.c
     arch/powerpc/cpu/ppc4xx/commproc.c
     arch/powerpc/cpu/mpc512x/common.c
- fixes up the post_word_{load|store} usage.

Signed-off-by: Michael Zaidman <michael.zaidman@gmail.com>
Acked-by: Detlev Zundel <dzu@denx.de>
Tested-by: Anatolij Gustschin <agust@denx.de>

List of the maintainers of the affected by patch boards:
Cc: Stephan Linz <linz@li-pro.net>
Cc: Denis Peter <d.peter@mpl.ch>
Cc: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
Cc: Peter Tyser <ptyser@xes-inc.com>
Cc: Stefan Roese <sr@denx.de>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: Niklaus Giger <niklaus.giger@netstal.com>
Cc: Larry Johnson <lrj@acm.org>
Cc: Feng Kan <fkan@amcc.com>
diff --git a/arch/blackfin/lib/Makefile b/arch/blackfin/lib/Makefile
index 3bdba75..a18bbd6 100644
--- a/arch/blackfin/lib/Makefile
+++ b/arch/blackfin/lib/Makefile
@@ -46,7 +46,7 @@
 COBJS-$(CONFIG_CMD_CACHE_DUMP) += cmd_cache_dump.o
 COBJS-$(CONFIG_CMD_KGDB) += kgdb.o
 COBJS-y	+= muldi3.o
-COBJS-$(CONFIG_POST) += post.o tests.o
+COBJS-$(CONFIG_POST_ALT_LIST) += tests.o
 COBJS-y	+= string.o
 
 SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c
index 46e36c8..7643250 100644
--- a/arch/blackfin/lib/board.c
+++ b/arch/blackfin/lib/board.c
@@ -322,7 +322,6 @@
 
 #if defined(CONFIG_POST)
 	post_output_backlog();
-	post_reloc();
 #endif
 
 	/* initialize malloc() area */
diff --git a/arch/blackfin/lib/post.c b/arch/blackfin/lib/post.c
deleted file mode 100644
index bd6aaf5..0000000
--- a/arch/blackfin/lib/post.c
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * (C) Copyright 2002
- * Wolfgang Denk, DENX Software Engineering, wd@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.
- *
- * 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 <stdio_dev.h>
-#include <watchdog.h>
-#include <post.h>
-
-#ifdef CONFIG_LOGBUFFER
-#include <logbuff.h>
-#endif
-
-DECLARE_GLOBAL_DATA_PTR;
-
-#define POST_MAX_NUMBER		32
-
-#define BOOTMODE_MAGIC	0xDEAD0000
-
-int post_init_f(void)
-{
-	int res = 0;
-	unsigned int i;
-
-	for (i = 0; i < post_list_size; i++) {
-		struct post_test *test = post_list + i;
-
-		if (test->init_f && test->init_f()) {
-			res = -1;
-		}
-	}
-
-	gd->post_init_f_time = post_time_ms(0);
-	if (!gd->post_init_f_time) {
-		printf
-		    ("post/post.c: post_time_ms seems not to be implemented\n");
-	}
-
-	return res;
-}
-
-void post_bootmode_init(void)
-{
-	int bootmode = post_bootmode_get(0);
-	int newword;
-
-	if (post_hotkeys_pressed() && !(bootmode & POST_POWERTEST)) {
-		newword = BOOTMODE_MAGIC | POST_SLOWTEST;
-	} else if (bootmode == 0) {
-		newword = BOOTMODE_MAGIC | POST_POWERON;
-	} else if (bootmode == POST_POWERON || bootmode == POST_SLOWTEST) {
-		newword = BOOTMODE_MAGIC | POST_NORMAL;
-	} else {
-		/* Use old value */
-		newword = post_word_load() & ~POST_COLDBOOT;
-	}
-
-	if (bootmode == 0) {
-		/* We are booting after power-on */
-		newword |= POST_COLDBOOT;
-	}
-
-	post_word_store(newword);
-
-	/* Reset activity record */
-	gd->post_log_word = 0;
-}
-
-int post_bootmode_get(unsigned int *last_test)
-{
-	unsigned long word = post_word_load();
-	int bootmode;
-
-	if ((word & 0xFFFF0000) != BOOTMODE_MAGIC) {
-		return 0;
-	}
-
-	bootmode = word & 0x7F;
-
-	if (last_test && (bootmode & POST_POWERTEST)) {
-		*last_test = (word >> 8) & 0xFF;
-	}
-
-	return bootmode;
-}
-
-/* POST tests run before relocation only mark status bits .... */
-static void post_log_mark_start(unsigned long testid)
-{
-	gd->post_log_word |= (testid) << 16;
-}
-
-static void post_log_mark_succ(unsigned long testid)
-{
-	gd->post_log_word |= testid;
-}
-
-/* ... and the messages are output once we are relocated */
-void post_output_backlog(void)
-{
-	int j;
-
-	for (j = 0; j < post_list_size; j++) {
-		if (gd->post_log_word & (post_list[j].testid << 16)) {
-			post_log("POST %s ", post_list[j].cmd);
-			if (gd->post_log_word & post_list[j].testid)
-				post_log("PASSED\n");
-			else {
-				post_log("FAILED\n");
-				show_boot_progress (-31);
-			}
-		}
-	}
-}
-
-static void post_bootmode_test_on(unsigned int last_test)
-{
-	unsigned long word = post_word_load();
-
-	word |= POST_POWERTEST;
-
-	word |= (last_test & 0xFF) << 8;
-
-	post_word_store(word);
-}
-
-static void post_bootmode_test_off(void)
-{
-	unsigned long word = post_word_load();
-
-	word &= ~POST_POWERTEST;
-
-	post_word_store(word);
-}
-
-static void post_get_flags(int *test_flags)
-{
-	int flag[] = { POST_POWERON, POST_NORMAL, POST_SLOWTEST };
-	char *var[] = { "post_poweron", "post_normal", "post_slowtest" };
-	int varnum = sizeof(var) / sizeof(var[0]);
-	char list[128];		/* long enough for POST list */
-	char *name;
-	char *s;
-	int last;
-	int i, j;
-
-	for (j = 0; j < post_list_size; j++) {
-		test_flags[j] = post_list[j].flags;
-	}
-
-	for (i = 0; i < varnum; i++) {
-		if (getenv_f(var[i], list, sizeof(list)) <= 0)
-			continue;
-
-		for (j = 0; j < post_list_size; j++) {
-			test_flags[j] &= ~flag[i];
-		}
-
-		last = 0;
-		name = list;
-		while (!last) {
-			while (*name && *name == ' ')
-				name++;
-			if (*name == 0)
-				break;
-			s = name + 1;
-			while (*s && *s != ' ')
-				s++;
-			if (*s == 0)
-				last = 1;
-			else
-				*s = 0;
-
-			for (j = 0; j < post_list_size; j++) {
-				if (strcmp(post_list[j].cmd, name) == 0) {
-					test_flags[j] |= flag[i];
-					break;
-				}
-			}
-
-			if (j == post_list_size) {
-				printf("No such test: %s\n", name);
-			}
-
-			name = s + 1;
-		}
-	}
-
-	for (j = 0; j < post_list_size; j++) {
-		if (test_flags[j] & POST_POWERON) {
-			test_flags[j] |= POST_SLOWTEST;
-		}
-	}
-}
-
-static int post_run_single(struct post_test *test,
-			   int test_flags, int flags, unsigned int i)
-{
-	if ((flags & test_flags & POST_ALWAYS) &&
-	    (flags & test_flags & POST_MEM)) {
-		WATCHDOG_RESET();
-
-		if (!(flags & POST_REBOOT)) {
-			if ((test_flags & POST_REBOOT)
-			    && !(flags & POST_MANUAL)) {
-				post_bootmode_test_on(i);
-			}
-
-			if (test_flags & POST_PREREL)
-				post_log_mark_start(test->testid);
-			else
-				post_log("POST %s ", test->cmd);
-		}
-
-		if (test_flags & POST_PREREL) {
-			if ((*test->test) (flags) == 0)
-				post_log_mark_succ(test->testid);
-		} else {
-			if ((*test->test) (flags) != 0) {
-				post_log("FAILED\n");
-				show_boot_progress (-32);
-			} else
-				post_log("PASSED\n");
-		}
-
-		if ((test_flags & POST_REBOOT) && !(flags & POST_MANUAL)) {
-			post_bootmode_test_off();
-		}
-
-		return 0;
-	} else {
-		return -1;
-	}
-}
-
-int post_run(char *name, int flags)
-{
-	unsigned int i;
-	int test_flags[POST_MAX_NUMBER];
-
-	post_get_flags(test_flags);
-
-	if (name == NULL) {
-		unsigned int last;
-
-		if (post_bootmode_get(&last) & POST_POWERTEST) {
-			if (last < post_list_size &&
-			    (flags & test_flags[last] & POST_ALWAYS) &&
-			    (flags & test_flags[last] & POST_MEM)) {
-
-				post_run_single(post_list + last,
-						test_flags[last],
-						flags | POST_REBOOT, last);
-
-				for (i = last + 1; i < post_list_size; i++) {
-					post_run_single(post_list + i,
-							test_flags[i],
-							flags, i);
-				}
-			}
-		} else {
-			for (i = 0; i < post_list_size; i++) {
-				post_run_single(post_list + i,
-						test_flags[i], flags, i);
-			}
-		}
-
-		return 0;
-	} else {
-		for (i = 0; i < post_list_size; i++) {
-			if (strcmp(post_list[i].cmd, name) == 0)
-				break;
-		}
-
-		if (i < post_list_size) {
-			return post_run_single(post_list + i,
-					       test_flags[i], flags, i);
-		} else {
-			return -1;
-		}
-	}
-}
-
-static int post_info_single(struct post_test *test, int full)
-{
-	if (test->flags & POST_MANUAL) {
-		if (full)
-			printf("%s - %s\n"
-			       "  %s\n", test->cmd, test->name, test->desc);
-		else
-			printf("  %-15s - %s\n", test->cmd, test->name);
-
-		return 0;
-	} else {
-		return -1;
-	}
-}
-
-int post_info(char *name)
-{
-	unsigned int i;
-
-	if (name == NULL) {
-		for (i = 0; i < post_list_size; i++) {
-			post_info_single(post_list + i, 0);
-		}
-
-		return 0;
-	} else {
-		for (i = 0; i < post_list_size; i++) {
-			if (strcmp(post_list[i].cmd, name) == 0)
-				break;
-		}
-
-		if (i < post_list_size) {
-			return post_info_single(post_list + i, 1);
-		} else {
-			return -1;
-		}
-	}
-}
-
-int post_log(char *format, ...)
-{
-	va_list args;
-	uint i;
-	char printbuffer[CONFIG_SYS_PBSIZE];
-
-	va_start(args, format);
-
-	/* For this to work, printbuffer must be larger than
-	 * anything we ever want to print.
-	 */
-	i = vsprintf(printbuffer, format, args);
-	va_end(args);
-
-#ifdef CONFIG_LOGBUFFER
-	/* Send to the logbuffer */
-	logbuff_log(printbuffer);
-#else
-	/* Send to the stdout file */
-	puts(printbuffer);
-#endif
-
-	return 0;
-}
-
-void post_reloc(void)
-{
-	unsigned int i;
-
-	/*
-	 * We have to relocate the test table manually
-	 */
-	for (i = 0; i < post_list_size; i++) {
-		ulong addr;
-		struct post_test *test = post_list + i;
-
-		if (test->name) {
-			addr = (ulong) (test->name) + gd->reloc_off;
-			test->name = (char *)addr;
-		}
-
-		if (test->cmd) {
-			addr = (ulong) (test->cmd) + gd->reloc_off;
-			test->cmd = (char *)addr;
-		}
-
-		if (test->desc) {
-			addr = (ulong) (test->desc) + gd->reloc_off;
-			test->desc = (char *)addr;
-		}
-
-		if (test->test) {
-			addr = (ulong) (test->test) + gd->reloc_off;
-			test->test = (int (*)(int flags))addr;
-		}
-
-		if (test->init_f) {
-			addr = (ulong) (test->init_f) + gd->reloc_off;
-			test->init_f = (int (*)(void))addr;
-		}
-
-		if (test->reloc) {
-			addr = (ulong) (test->reloc) + gd->reloc_off;
-			test->reloc = (void (*)(void))addr;
-
-			test->reloc();
-		}
-	}
-}
-
-/*
- * Some tests (e.g. SYSMON) need the time when post_init_f started,
- * but we cannot use get_timer() at this point.
- *
- * On PowerPC we implement it using the timebase register.
- */
-unsigned long post_time_ms(unsigned long base)
-{
-	return (unsigned long)get_ticks() / (get_tbclk() / CONFIG_SYS_HZ) - base;
-}
diff --git a/arch/powerpc/cpu/mpc512x/common.c b/arch/powerpc/cpu/mpc512x/common.c
deleted file mode 100644
index 180d323..0000000
--- a/arch/powerpc/cpu/mpc512x/common.c
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <common.h>
-#include <asm/io.h>
-
-#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
-
-#if defined(CONFIG_SYS_POST_WORD_ADDR)
-# define _POST_ADDR	(CONFIG_SYS_POST_WORD_ADDR)
-#else
-#error echo "No POST word address defined"
-#endif
-
-void post_word_store(ulong a)
-{
-	volatile void *save_addr = (volatile void *)(_POST_ADDR);
-
-	out_be32(save_addr, a);
-}
-
-ulong post_word_load(void)
-{
-	volatile void *save_addr = (volatile void *)(_POST_ADDR);
-
-	return in_be32(save_addr);
-}
-#endif  /* CONFIG_POST || CONFIG_LOGBUFFER */
diff --git a/arch/powerpc/cpu/mpc8260/commproc.c b/arch/powerpc/cpu/mpc8260/commproc.c
index c522bc5..082957e 100644
--- a/arch/powerpc/cpu/mpc8260/commproc.c
+++ b/arch/powerpc/cpu/mpc8260/commproc.c
@@ -175,23 +175,3 @@
 	else
 		*bp |= CPM_BRG_EXTC_CLK5_15;
 }
-
-#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
-
-void post_word_store (ulong a)
-{
-	volatile ulong *save_addr =
-		(volatile ulong *)(CONFIG_SYS_IMMR + CPM_POST_WORD_ADDR);
-
-	*save_addr = a;
-}
-
-ulong post_word_load (void)
-{
-	volatile ulong *save_addr =
-		(volatile ulong *)(CONFIG_SYS_IMMR + CPM_POST_WORD_ADDR);
-
-	return *save_addr;
-}
-
-#endif	/* CONFIG_POST || CONFIG_LOGBUFFER*/
diff --git a/arch/powerpc/cpu/mpc85xx/commproc.c b/arch/powerpc/cpu/mpc85xx/commproc.c
index f0fd1cb..292b723 100644
--- a/arch/powerpc/cpu/mpc85xx/commproc.c
+++ b/arch/powerpc/cpu/mpc85xx/commproc.c
@@ -183,23 +183,3 @@
 	else
 		*bp |= CPM_BRG_EXTC_CLK5_15;
 }
-
-#ifdef CONFIG_POST
-
-void post_word_store (ulong a)
-{
-	volatile ulong *save_addr =
-		(volatile ulong *)(CONFIG_SYS_IMMR + CPM_POST_WORD_ADDR);
-
-	*save_addr = a;
-}
-
-ulong post_word_load (void)
-{
-	volatile ulong *save_addr =
-		(volatile ulong *)(CONFIG_SYS_IMMR + CPM_POST_WORD_ADDR);
-
-	return *save_addr;
-}
-
-#endif	/* CONFIG_POST */
diff --git a/arch/powerpc/cpu/mpc8xx/commproc.c b/arch/powerpc/cpu/mpc8xx/commproc.c
index 2c85377..5fe01ff 100644
--- a/arch/powerpc/cpu/mpc8xx/commproc.c
+++ b/arch/powerpc/cpu/mpc8xx/commproc.c
@@ -83,23 +83,3 @@
 	return (gd->dp_alloc_base + mask) & ~mask;
 }
 #endif	/* CONFIG_SYS_ALLOC_DPRAM */
-
-#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
-
-void post_word_store (ulong a)
-{
-	volatile void *save_addr =
-		((immap_t *) CONFIG_SYS_IMMR)->im_cpm.cp_dpmem + CPM_POST_WORD_ADDR;
-
-	*(volatile ulong *) save_addr = a;
-}
-
-ulong post_word_load (void)
-{
-	volatile void *save_addr =
-		((immap_t *) CONFIG_SYS_IMMR)->im_cpm.cp_dpmem + CPM_POST_WORD_ADDR;
-
-	return *(volatile ulong *) save_addr;
-}
-
-#endif	/* CONFIG_POST || CONFIG_LOGBUFFER*/
diff --git a/arch/powerpc/cpu/ppc4xx/Makefile b/arch/powerpc/cpu/ppc4xx/Makefile
index c9c1a33..fa8d10c 100644
--- a/arch/powerpc/cpu/ppc4xx/Makefile
+++ b/arch/powerpc/cpu/ppc4xx/Makefile
@@ -45,7 +45,6 @@
 ifdef CONFIG_CMD_CHIP_CONFIG
 COBJS	+= cmd_chip_config.o
 endif
-COBJS	+= commproc.o
 COBJS	+= cpu.o
 COBJS	+= cpu_init.o
 COBJS	+= denali_data_eye.o
diff --git a/arch/powerpc/cpu/ppc4xx/commproc.c b/arch/powerpc/cpu/ppc4xx/commproc.c
deleted file mode 100644
index 6bf95e6..0000000
--- a/arch/powerpc/cpu/ppc4xx/commproc.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * (C) Copyright 2000-2004
- * Wolfgang Denk, DENX Software Engineering, wd@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.
- *
- * 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
- *
- *
- * Atapted for ppc4XX by Denis Peter
- */
-
-#include <common.h>
-#include <commproc.h>
-#include <asm/io.h>
-
-#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
-
-#if defined(CONFIG_SYS_POST_WORD_ADDR)
-# define _POST_ADDR	((CONFIG_SYS_OCM_DATA_ADDR) + (CONFIG_SYS_POST_WORD_ADDR))
-#elif defined(CONFIG_SYS_POST_ALT_WORD_ADDR)
-# define _POST_ADDR	(CONFIG_SYS_POST_ALT_WORD_ADDR)
-#endif
-
-void post_word_store (ulong a)
-{
-	volatile void *save_addr = (volatile void *)(_POST_ADDR);
-
-	out_be32(save_addr, a);
-}
-
-ulong post_word_load (void)
-{
-	volatile void *save_addr = (volatile void *)(_POST_ADDR);
-
-	return in_be32(save_addr);
-}
-
-#endif	/* CONFIG_POST || CONFIG_LOGBUFFER*/