Blackfin: post: generalize led/button tests with GPIOs
authorMike Frysinger <vapier@gentoo.org>
Tue, 10 May 2011 20:22:25 +0000 (16:22 -0400)
committerMike Frysinger <vapier@gentoo.org>
Thu, 29 Sep 2011 20:38:05 +0000 (16:38 -0400)
Make it easy for any Blackfin board to enable led/push button tests.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/include/asm/config.h
arch/blackfin/lib/Makefile
arch/blackfin/lib/post.c [new file with mode: 0644]
board/bf537-stamp/Makefile
board/bf537-stamp/post.c [deleted file]
include/configs/bf537-stamp.h
include/configs/bf548-ezkit.h
post/tests.c

index bc3c25215f22b1d4f92e0095dee296ad67642cba..53af310ecfbd00b0a3baa736d8965452a9ccffbd 100644 (file)
 # define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
 #endif
 
+/* Blackfin POST tests */
+#ifdef CONFIG_POST_BSPEC1_GPIO_LEDS
+# define CONFIG_POST_BSPEC1 \
+       { \
+               "LED test", "led", "This test verifies LEDs on the board.", \
+               POST_MEM | POST_ALWAYS, &led_post_test, NULL, NULL, \
+               CONFIG_SYS_POST_BSPEC1, \
+       }
+#endif
+#ifdef CONFIG_POST_BSPEC2_GPIO_BUTTONS
+# define CONFIG_POST_BSPEC2 \
+       { \
+               "Button test", "button", "This test verifies buttons on the board.", \
+               POST_MEM | POST_ALWAYS, &button_post_test, NULL, NULL, \
+               CONFIG_SYS_POST_BSPEC2, \
+       }
+#endif
+
 #endif
index 18c9f740978f724c305aa895810169401e022795..37e0663a3258d44f56764629bde2e55a318aec58 100644 (file)
@@ -46,6 +46,7 @@ COBJS-y       += clocks.o
 COBJS-$(CONFIG_CMD_CACHE_DUMP) += cmd_cache_dump.o
 COBJS-$(CONFIG_CMD_KGDB) += kgdb.o
 COBJS-y        += muldi3.o
+COBJS-$(CONFIG_HAS_POST) += post.o
 COBJS-y        += string.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
diff --git a/arch/blackfin/lib/post.c b/arch/blackfin/lib/post.c
new file mode 100644 (file)
index 0000000..b3c5fab
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Blackfin POST code
+ *
+ * Copyright (c) 2005-2011 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+#include <config.h>
+#include <post.h>
+
+#include <asm/gpio.h>
+
+#if CONFIG_POST & CONFIG_SYS_POST_BSPEC1
+int led_post_test(int flags)
+{
+       unsigned leds[] = { CONFIG_POST_BSPEC1_GPIO_LEDS };
+       int i;
+
+       /* First turn them all off */
+       for (i = 0; i < ARRAY_SIZE(leds); ++i) {
+               if (gpio_request(leds[i], "post")) {
+                       printf("could not request gpio %u\n", leds[i]);
+                       continue;
+               }
+               gpio_direction_output(leds[i], 0);
+       }
+
+       /* Now turn them on one by one */
+       for (i = 0; i < ARRAY_SIZE(leds); ++i) {
+               printf("LED%i on", i + 1);
+               gpio_set_value(leds[i], 1);
+               udelay(1000000);
+               printf("\b\b\b\b\b\b\b");
+               gpio_free(leds[i]);
+       }
+
+       return 0;
+}
+#endif
+
+#if CONFIG_POST & CONFIG_SYS_POST_BSPEC2
+int button_post_test(int flags)
+{
+       unsigned buttons[] = { CONFIG_POST_BSPEC2_GPIO_BUTTONS };
+       unsigned int sws[] = { CONFIG_POST_BSPEC2_GPIO_NAMES };
+       int i, delay = 5;
+       unsigned short value = 0;
+       int result = 0;
+
+       for (i = 0; i < ARRAY_SIZE(buttons); ++i) {
+               if (gpio_request(buttons[i], "post")) {
+                       printf("could not request gpio %u\n", buttons[i]);
+                       continue;
+               }
+               gpio_direction_input(buttons[i]);
+
+               delay = 5;
+               printf("\n--------Press SW%i: %2d ", sws[i], delay);
+               while (delay--) {
+                       int j;
+                       for (j = 0; j < 100; j++) {
+                               value = gpio_get_value(buttons[i]);
+                               if (value != 0)
+                                       break;
+                               udelay(10000);
+                       }
+                       printf("\b\b\b%2d ", delay);
+               }
+               if (value != 0)
+                       puts("\b\bOK");
+               else {
+                       result = -1;
+                       puts("\b\bfailed");
+               }
+
+               gpio_free(buttons[i]);
+       }
+
+       puts("\n");
+
+       return result;
+}
+#endif
index 2b9328be32ae51fd63cf3485741389a3d174c06e..49e441472b4855e38db9f3d3484980f741922095 100644 (file)
@@ -31,7 +31,7 @@ LIB   = $(obj)lib$(BOARD).o
 
 COBJS-y        := $(BOARD).o
 COBJS-$(CONFIG_BFIN_IDE)   += ide-cf.o
-COBJS-$(CONFIG_HAS_POST)   += post.o post-memory.o
+COBJS-$(CONFIG_HAS_POST)   += post-memory.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS-y))
diff --git a/board/bf537-stamp/post.c b/board/bf537-stamp/post.c
deleted file mode 100644 (file)
index f35cc8e..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * BF537-STAMP POST code
- *
- * Enter bugs at http://blackfin.uclinux.org/
- *
- * Copyright (c) 2005-2009 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
-
-#include <common.h>
-#include <config.h>
-#include <command.h>
-#include <asm/blackfin.h>
-#include <asm/gpio.h>
-
-/****************************************************
- * LED1 ---- PF6       LED2 ---- PF7               *
- * LED3 ---- PF8       LED4 ---- PF9               *
- * LED5 ---- PF10      LED6 ---- PF11              *
- ****************************************************/
-int led_post_test(int flags)
-{
-       unsigned int leds[] = {
-               GPIO_PF6, GPIO_PF7, GPIO_PF8,
-               GPIO_PF9, GPIO_PF10, GPIO_PF11,
-       };
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(leds); ++i) {
-               gpio_request(leds[i], "post");
-               gpio_direction_output(leds[i], 0);
-
-               printf("LED%i on", i + 1);
-               gpio_set_value(leds[i], 1);
-               udelay(1000000);
-               printf("\b\b\b\b\b\b\b");
-
-               gpio_free(leds[i]);
-       }
-
-       return 0;
-}
-
-/************************************************
- *  SW10 ---- PF5      SW11 ---- PF4           *
- *  SW12 ---- PF3      SW13 ---- PF2           *
- ************************************************/
-int button_post_test(int flags)
-{
-       unsigned int buttons[] = {
-               GPIO_PF2, GPIO_PF3, GPIO_PF4, GPIO_PF5,
-       };
-       unsigned int sws[] = { 13, 12, 11, 10, };
-       int i, delay = 5;
-       unsigned short value = 0;
-       int result = 0;
-
-       for (i = 0; i < ARRAY_SIZE(buttons); ++i) {
-               gpio_request(buttons[i], "post");
-               gpio_direction_input(buttons[i]);
-
-               delay = 5;
-               printf("\n--------Press SW%i: %2d ", sws[i], delay);
-               while (delay--) {
-                       for (i = 0; i < 100; i++) {
-                               value = gpio_get_value(buttons[i]);
-                               if (value != 0)
-                                       break;
-                               udelay(10000);
-                       }
-                       printf("\b\b\b%2d ", delay);
-               }
-               if (value != 0)
-                       puts("\b\bOK");
-               else {
-                       result = -1;
-                       puts("\b\bfailed");
-               }
-
-               gpio_free(buttons[i]);
-       }
-
-       puts("\n");
-
-       return result;
-}
index 3dee8eefd463b05ed498772c49b3417c8fef06ed..172268bcbbd8071bc2eab73397f5262b07349b3a 100644 (file)
 #undef CONFIG_POST
 #ifdef CONFIG_POST
 #define CONFIG_SYS_POST_HOTKEYS_GPIO   GPIO_PF5
+#define CONFIG_POST_BSPEC1_GPIO_LEDS \
+       GPIO_PF6, GPIO_PF7, GPIO_PF8, GPIO_PF9, GPIO_PF10, GPIO_PF11,
+#define CONFIG_POST_BSPEC2_GPIO_BUTTONS \
+       GPIO_PF5, GPIO_PF4, GPIO_PF3, GPIO_PF2,
+#define CONFIG_POST_BSPEC2_GPIO_NAMES \
+       10, 11, 12, 13,
 #define FLASH_START_POST_BLOCK 11      /* Should > = 11 */
 #define FLASH_END_POST_BLOCK   71      /* Should < = 71 */
 #endif
index 3550fd33084c6c4bda096387e5500fc3d8c1eb4a..ae27a977b009a3ee562943d22f5e8fad8f1b9213 100644 (file)
 /* Define if want to do post memory test */
 #undef CONFIG_POST
 #ifdef CONFIG_POST
+#define CONFIG_POST_BSPEC1_GPIO_LEDS \
+       GPIO_PG6, GPIO_PG7, GPIO_PG8, GPIO_PG9, GPIO_PG10, GPIO_PG11,
+#define CONFIG_POST_BSPEC2_GPIO_BUTTONS \
+       GPIO_PB8, GPIO_PB9, GPIO_PB10, GPIO_PB11
+#define CONFIG_POST_BSPEC2_GPIO_NAMES \
+       13, 12, 11, 10,
 #define FLASH_START_POST_BLOCK 11       /* Should > = 11 */
 #define FLASH_END_POST_BLOCK   71       /* Should < = 71 */
 #endif
index bfb9cb5db619c902dc3b8bc86c2b75baac72799b..725f80b96bb412b9601a5b9d4852f875e54d15ae 100644 (file)
@@ -55,6 +55,8 @@ extern int fpga_post_test (int flags);
 extern int lwmon5_watchdog_post_test(int flags);
 extern int sysmon1_post_test(int flags);
 extern int coprocessor_post_test(int flags);
+extern int led_post_test(int flags);
+extern int button_post_test(int flags);
 
 extern int sysmon_init_f (void);