Signed-off-by: Mike Frysinger <vapier@gentoo.org>master
parent
5e8f245743
commit
4de1a5daab
@ -0,0 +1,244 @@ |
||||
/*
|
||||
* 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> |
||||
|
||||
#define POST_WORD_ADDR 0xFF903FFC |
||||
|
||||
/* Using sw10-PF5 as the hotkey */ |
||||
int post_hotkeys_pressed(void) |
||||
{ |
||||
int delay = 3; |
||||
int i; |
||||
unsigned short value; |
||||
|
||||
*pPORTF_FER &= ~PF5; |
||||
*pPORTFIO_DIR &= ~PF5; |
||||
*pPORTFIO_INEN |= PF5; |
||||
|
||||
printf("########Press SW10 to enter Memory POST########: %2d ", delay); |
||||
while (delay--) { |
||||
for (i = 0; i < 100; i++) { |
||||
value = *pPORTFIO & 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; |
||||
} |
||||
} |
||||
|
||||
void post_word_store(ulong a) |
||||
{ |
||||
volatile ulong *save_addr = (volatile ulong *)POST_WORD_ADDR; |
||||
*save_addr = a; |
||||
} |
||||
|
||||
ulong post_word_load(void) |
||||
{ |
||||
volatile ulong *save_addr = (volatile ulong *)POST_WORD_ADDR; |
||||
return *save_addr; |
||||
} |
||||
|
||||
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) |
||||
{ |
||||
*pPORTF_FER &= ~(PF6 | PF7 | PF8 | PF9 | PF10 | PF11); |
||||
*pPORTFIO_DIR |= PF6 | PF7 | PF8 | PF9 | PF10 | PF11; |
||||
*pPORTFIO_INEN &= ~(PF6 | PF7 | PF8 | PF9 | PF10 | PF11); |
||||
*pPORTFIO &= ~(PF6 | PF7 | PF8 | PF9 | PF10 | PF11); |
||||
udelay(1000000); |
||||
printf("LED1 on"); |
||||
*pPORTFIO |= PF6; |
||||
udelay(1000000); |
||||
printf("\b\b\b\b\b\b\b"); |
||||
printf("LED2 on"); |
||||
*pPORTFIO |= PF7; |
||||
udelay(1000000); |
||||
printf("\b\b\b\b\b\b\b"); |
||||
printf("LED3 on"); |
||||
*pPORTFIO |= PF8; |
||||
udelay(1000000); |
||||
printf("\b\b\b\b\b\b\b"); |
||||
printf("LED4 on"); |
||||
*pPORTFIO |= PF9; |
||||
udelay(1000000); |
||||
printf("\b\b\b\b\b\b\b"); |
||||
printf("LED5 on"); |
||||
*pPORTFIO |= PF10; |
||||
udelay(1000000); |
||||
printf("\b\b\b\b\b\b\b"); |
||||
printf("lED6 on"); |
||||
*pPORTFIO |= PF11; |
||||
printf("\b\b\b\b\b\b\b "); |
||||
return 0; |
||||
} |
||||
|
||||
/************************************************
|
||||
* SW10 ---- PF5 SW11 ---- PF4 * |
||||
* SW12 ---- PF3 SW13 ---- PF2 * |
||||
************************************************/ |
||||
int button_post_test(int flags) |
||||
{ |
||||
int i, delay = 5; |
||||
unsigned short value = 0; |
||||
int result = 0; |
||||
|
||||
*pPORTF_FER &= ~(PF5 | PF4 | PF3 | PF2); |
||||
*pPORTFIO_DIR &= ~(PF5 | PF4 | PF3 | PF2); |
||||
*pPORTFIO_INEN |= (PF5 | PF4 | PF3 | PF2); |
||||
|
||||
printf("\n--------Press SW10: %2d ", delay); |
||||
while (delay--) { |
||||
for (i = 0; i < 100; i++) { |
||||
value = *pPORTFIO & PF5; |
||||
if (value != 0) { |
||||
break; |
||||
} |
||||
udelay(10000); |
||||
} |
||||
printf("\b\b\b%2d ", delay); |
||||
} |
||||
if (value != 0) |
||||
printf("\b\bOK"); |
||||
else { |
||||
result = -1; |
||||
printf("\b\bfailed"); |
||||
} |
||||
|
||||
delay = 5; |
||||
printf("\n--------Press SW11: %2d ", delay); |
||||
while (delay--) { |
||||
for (i = 0; i < 100; i++) { |
||||
value = *pPORTFIO & PF4; |
||||
if (value != 0) { |
||||
break; |
||||
} |
||||
udelay(10000); |
||||
} |
||||
printf("\b\b\b%2d ", delay); |
||||
} |
||||
if (value != 0) |
||||
printf("\b\bOK"); |
||||
else { |
||||
result = -1; |
||||
printf("\b\bfailed"); |
||||
} |
||||
|
||||
delay = 5; |
||||
printf("\n--------Press SW12: %2d ", delay); |
||||
while (delay--) { |
||||
for (i = 0; i < 100; i++) { |
||||
value = *pPORTFIO & PF3; |
||||
if (value != 0) { |
||||
break; |
||||
} |
||||
udelay(10000); |
||||
} |
||||
printf("\b\b\b%2d ", delay); |
||||
} |
||||
if (value != 0) |
||||
printf("\b\bOK"); |
||||
else { |
||||
result = -1; |
||||
printf("\b\bfailed"); |
||||
} |
||||
|
||||
delay = 5; |
||||
printf("\n--------Press SW13: %2d ", delay); |
||||
while (delay--) { |
||||
for (i = 0; i < 100; i++) { |
||||
value = *pPORTFIO & PF2; |
||||
if (value != 0) { |
||||
break; |
||||
} |
||||
udelay(10000); |
||||
} |
||||
printf("\b\b\b%2d ", delay); |
||||
} |
||||
if (value != 0) |
||||
printf("\b\bOK"); |
||||
else { |
||||
result = -1; |
||||
printf("\b\bfailed"); |
||||
} |
||||
printf("\n"); |
||||
return result; |
||||
} |
Loading…
Reference in new issue