* '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