* '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 hotkeymaster
commit
97d7ab8a8e
@ -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 |
@ -1,250 +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 |
||||
* |
||||
* Be sure to mark tests to be run before relocation as such with the |
||||
* CONFIG_SYS_POST_PREREL flag so that logging is done correctly if the |
||||
* logbuffer support is enabled. |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <config.h> |
||||
|
||||
#include <post.h> |
||||
#define CONFIG_SYS_POST_FLASH 0x00004000 |
||||
#define CONFIG_SYS_POST_LED 0x00008000 |
||||
#define CONFIG_SYS_POST_BUTTON 0x00010000 |
||||
|
||||
extern int cache_post_test(int flags); |
||||
extern int watchdog_post_test(int flags); |
||||
extern int i2c_post_test(int flags); |
||||
extern int rtc_post_test(int flags); |
||||
extern int memory_post_test(int flags); |
||||
extern int cpu_post_test(int flags); |
||||
extern int uart_post_test(int flags); |
||||
extern int ether_post_test(int flags); |
||||
extern int spi_post_test(int flags); |
||||
extern int usb_post_test(int flags); |
||||
extern int spr_post_test(int flags); |
||||
extern int sysmon_post_test(int flags); |
||||
extern int dsp_post_test(int flags); |
||||
extern int codec_post_test(int flags); |
||||
|
||||
extern int sysmon_init_f(void); |
||||
|
||||
extern void sysmon_reloc(void); |
||||
|
||||
extern int flash_post_test(int flags); |
||||
extern int led_post_test(int flags); |
||||
extern int button_post_test(int flags); |
||||
|
||||
struct post_test post_list[] = { |
||||
#if CONFIG_POST & CONFIG_SYS_POST_CACHE |
||||
{ |
||||
"Cache test", |
||||
"cache", |
||||
"This test verifies the CPU cache operation.", |
||||
POST_RAM | POST_ALWAYS, |
||||
&cache_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_CACHE}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_WATCHDOG |
||||
{ |
||||
"Watchdog timer test", |
||||
"watchdog", |
||||
"This test checks the watchdog timer.", |
||||
POST_RAM | POST_POWERON | POST_SLOWTEST | POST_MANUAL | POST_REBOOT, |
||||
&watchdog_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_WATCHDOG}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_I2C |
||||
{ |
||||
"I2C test", |
||||
"i2c", |
||||
"This test verifies the I2C operation.", |
||||
POST_RAM | POST_ALWAYS, |
||||
&i2c_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_I2C}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_RTC |
||||
{ |
||||
"RTC test", |
||||
"rtc", |
||||
"This test verifies the RTC operation.", |
||||
POST_RAM | POST_SLOWTEST | POST_MANUAL, |
||||
&rtc_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_RTC}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_MEMORY |
||||
{ |
||||
"Memory test", |
||||
"memory", |
||||
"This test checks RAM.", |
||||
POST_ROM | POST_POWERON | POST_SLOWTEST | POST_PREREL, |
||||
&memory_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_MEMORY}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_CPU |
||||
{ |
||||
"CPU test", |
||||
"cpu", |
||||
"This test verifies the arithmetic logic unit of" " CPU.", |
||||
POST_RAM | POST_ALWAYS, |
||||
&cpu_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_CPU}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_UART |
||||
{ |
||||
"UART test", |
||||
"uart", |
||||
"This test verifies the UART operation.", |
||||
POST_RAM | POST_SLOWTEST | POST_MANUAL, |
||||
&uart_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_UART}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_ETHER |
||||
{ |
||||
"ETHERNET test", |
||||
"ethernet", |
||||
"This test verifies the ETHERNET operation.", |
||||
POST_RAM | POST_ALWAYS | POST_MANUAL, |
||||
ðer_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_ETHER}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_SPI |
||||
{ |
||||
"SPI test", |
||||
"spi", |
||||
"This test verifies the SPI operation.", |
||||
POST_RAM | POST_ALWAYS | POST_MANUAL, |
||||
&spi_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_SPI}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_USB |
||||
{ |
||||
"USB test", |
||||
"usb", |
||||
"This test verifies the USB operation.", |
||||
POST_RAM | POST_ALWAYS | POST_MANUAL, |
||||
&usb_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_USB}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_SPR |
||||
{ |
||||
"SPR test", |
||||
"spr", |
||||
"This test checks SPR contents.", |
||||
POST_ROM | POST_ALWAYS | POST_PREREL, |
||||
&spr_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_SPR}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_SYSMON |
||||
{ |
||||
"SYSMON test", |
||||
"sysmon", |
||||
"This test monitors system hardware.", |
||||
POST_RAM | POST_ALWAYS, |
||||
&sysmon_post_test, |
||||
&sysmon_init_f, |
||||
&sysmon_reloc, |
||||
CONFIG_SYS_POST_SYSMON}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_DSP |
||||
{ |
||||
"DSP test", |
||||
"dsp", |
||||
"This test checks any connected DSP(s).", |
||||
POST_RAM | POST_MANUAL, |
||||
&dsp_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_DSP}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_CODEC |
||||
{ |
||||
"CODEC test", |
||||
"codec", |
||||
"This test checks any connected codec(s).", |
||||
POST_RAM | POST_MANUAL, |
||||
&codec_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_CODEC}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_FLASH |
||||
{ |
||||
"FLASH test", |
||||
"flash", |
||||
"This test checks flash.", |
||||
POST_RAM | POST_ALWAYS | POST_MANUAL, |
||||
&flash_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_FLASH}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_LED |
||||
{ |
||||
"LED test", |
||||
"LED", |
||||
"This test checks LED ", |
||||
POST_RAM | POST_ALWAYS | POST_MANUAL, |
||||
&led_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_LED}, |
||||
#endif |
||||
#if CONFIG_POST & CONFIG_SYS_POST_BUTTON |
||||
{ |
||||
"Button test", |
||||
"button", |
||||
"This test checks Button ", |
||||
POST_RAM | POST_ALWAYS | POST_MANUAL, |
||||
&button_post_test, |
||||
NULL, |
||||
NULL, |
||||
CONFIG_SYS_POST_BUTTON}, |
||||
#endif |
||||
|
||||
}; |
||||
|
||||
unsigned int post_list_size = sizeof(post_list) / sizeof(struct post_test); |
@ -1,174 +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> |
||||
|
||||
/* Using sw10-PF5 as the hotkey */ |
||||
int post_hotkeys_pressed(void) |
||||
{ |
||||
int delay = 3; |
||||
int i; |
||||
unsigned short value; |
||||
|
||||
gpio_request(GPIO_PF5, "post"); |
||||
gpio_direction_input(GPIO_PF5); |
||||
|
||||
printf("########Press SW10 to enter Memory POST########: %2d ", delay); |
||||
while (delay--) { |
||||
for (i = 0; i < 100; i++) { |
||||
value = gpio_get_value(GPIO_PF5); |
||||
if (value != 0) { |
||||
break; |
||||
} |
||||
udelay(10000); |
||||
} |
||||
printf("\b\b\b%2d ", delay); |
||||
} |
||||
printf("\b\b\b 0"); |
||||
printf("\n"); |
||||
if (value == 0) |
||||
return 0; |
||||
else { |
||||
printf("Hotkey has been pressed, Enter POST . . . . . .\n"); |
||||
return 1; |
||||
} |
||||
|
||||
gpio_free(GPIO_PF5); |
||||
} |
||||
|
||||
int uart_post_test(int flags) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
#define BLOCK_SIZE 0x10000 |
||||
#define VERIFY_ADDR 0x2000000 |
||||
extern int erase_block_flash(int); |
||||
extern int write_data(long lStart, long lCount, uchar * pnData); |
||||
int flash_post_test(int flags) |
||||
{ |
||||
unsigned short *pbuf, *temp; |
||||
int offset, n, i; |
||||
int value = 0; |
||||
int result = 0; |
||||
printf("\n"); |
||||
pbuf = (unsigned short *)VERIFY_ADDR; |
||||
temp = pbuf; |
||||
for (n = FLASH_START_POST_BLOCK; n < FLASH_END_POST_BLOCK; n++) { |
||||
offset = (n - 7) * BLOCK_SIZE; |
||||
printf("--------Erase block:%2d..", n); |
||||
erase_block_flash(n); |
||||
printf("OK\r"); |
||||
printf("--------Program block:%2d...", n); |
||||
write_data(CONFIG_SYS_FLASH_BASE + offset, BLOCK_SIZE, pbuf); |
||||
printf("OK\r"); |
||||
printf("--------Verify block:%2d...", n); |
||||
for (i = 0; i < BLOCK_SIZE; i += 2) { |
||||
if (*(unsigned short *)(CONFIG_SYS_FLASH_BASE + offset + i) != |
||||
*temp++) { |
||||
value = 1; |
||||
result = 1; |
||||
} |
||||
} |
||||
if (value) |
||||
printf("failed\n"); |
||||
else |
||||
printf("OK %3d%%\r", |
||||
(int)( |
||||
(n + 1 - |
||||
FLASH_START_POST_BLOCK) * |
||||
100 / (FLASH_END_POST_BLOCK - |
||||
FLASH_START_POST_BLOCK))); |
||||
|
||||
temp = pbuf; |
||||
value = 0; |
||||
} |
||||
printf("\n"); |
||||
if (result) |
||||
return -1; |
||||
else |
||||
return 0; |
||||
} |
||||
|
||||
/****************************************************
|
||||
* 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; |
||||
} |
Loading…
Reference in new issue