summaryrefslogtreecommitdiffstats
path: root/arch/blackfin/lib/post.c
diff options
context:
space:
mode:
authorWolfgang Denk <wd@denx.de>2011-10-01 21:42:21 +0200
committerWolfgang Denk <wd@denx.de>2011-10-01 21:42:21 +0200
commit97d7ab8a8eb6dbf7c9e8096f31031dfed81db8f8 (patch)
treeee8afc46f2b1db1d875951f5641e4b917c85fe39 /arch/blackfin/lib/post.c
parentaf708cbaae3c7254a50aee333b860dffc78db45d (diff)
parent90a75b050b8a23a6e8f558cc9a76658d8443509d (diff)
downloadblackbird-obmc-uboot-97d7ab8a8eb6dbf7c9e8096f31031dfed81db8f8.tar.gz
blackbird-obmc-uboot-97d7ab8a8eb6dbf7c9e8096f31031dfed81db8f8.zip
Merge branch 'post' of git://git.denx.de/u-boot-blackfin
* 'post' of git://git.denx.de/u-boot-blackfin: Blackfin: uart: implement loop callback for post Blackfin: bf537-stamp/bf548-ezkit: update POST flash block range Blackfin: post: generalize led/button tests with GPIOs Blackfin: bf537-stamp: drop uart/flash post tests Blackfin: post: drop custom test list Blackfin: bf537-stamp: convert to gpio post hotkey
Diffstat (limited to 'arch/blackfin/lib/post.c')
-rw-r--r--arch/blackfin/lib/post.c85
1 files changed, 85 insertions, 0 deletions
diff --git a/arch/blackfin/lib/post.c b/arch/blackfin/lib/post.c
new file mode 100644
index 0000000000..b3c5fab576
--- /dev/null
+++ b/arch/blackfin/lib/post.c
@@ -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
OpenPOWER on IntegriCloud