mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-09 20:18:54 -04:00
[PCS440EP] - Show on the DIAG LEDs, if the SHA1 check failed
- now the Flash ST M29W040B is supported (not tested) - fix the "led" command - fix compile error, if BUILD_DIR is used Signed-off-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
parent
4ef218f6fd
commit
96e1d75be8
2
Makefile
2
Makefile
@ -268,7 +268,7 @@ $(obj)u-boot.img: $(obj)u-boot.bin
|
|||||||
-d $< $@
|
-d $< $@
|
||||||
|
|
||||||
$(obj)u-boot.sha1: $(obj)u-boot.bin
|
$(obj)u-boot.sha1: $(obj)u-boot.bin
|
||||||
./tools/ubsha1 $(obj)u-boot.bin
|
$(obj)./tools/ubsha1 $(obj)u-boot.bin
|
||||||
|
|
||||||
$(obj)u-boot.dis: $(obj)u-boot
|
$(obj)u-boot.dis: $(obj)u-boot
|
||||||
$(OBJDUMP) -d $< > $@
|
$(OBJDUMP) -d $< > $@
|
||||||
|
@ -82,6 +82,7 @@ void flash_print_info(flash_info_t *info)
|
|||||||
case FLASH_MAN_AMD: printf ("AMD "); break;
|
case FLASH_MAN_AMD: printf ("AMD "); break;
|
||||||
case FLASH_MAN_FUJ: printf ("FUJITSU "); break;
|
case FLASH_MAN_FUJ: printf ("FUJITSU "); break;
|
||||||
case FLASH_MAN_SST: printf ("SST "); break;
|
case FLASH_MAN_SST: printf ("SST "); break;
|
||||||
|
case FLASH_MAN_STM: printf ("ST Micro"); break;
|
||||||
case FLASH_MAN_EXCEL: printf ("Excel Semiconductor "); break;
|
case FLASH_MAN_EXCEL: printf ("Excel Semiconductor "); break;
|
||||||
case FLASH_MAN_MX: printf ("MXIC "); break;
|
case FLASH_MAN_MX: printf ("MXIC "); break;
|
||||||
default: printf ("Unknown Vendor "); break;
|
default: printf ("Unknown Vendor "); break;
|
||||||
@ -118,6 +119,8 @@ void flash_print_info(flash_info_t *info)
|
|||||||
break;
|
break;
|
||||||
case FLASH_SST040: printf ("SST39LF/VF040 (4 Mbit, uniform sector size)\n");
|
case FLASH_SST040: printf ("SST39LF/VF040 (4 Mbit, uniform sector size)\n");
|
||||||
break;
|
break;
|
||||||
|
case STM_ID_M29W040B: printf ("ST Micro M29W040B (4 Mbit, uniform sector size)\n");
|
||||||
|
break;
|
||||||
default: printf ("Unknown Chip Type\n");
|
default: printf ("Unknown Chip Type\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -193,6 +196,9 @@ static ulong flash_get_size(vu_long *addr, flash_info_t *info)
|
|||||||
case (CFG_FLASH_WORD_SIZE)SST_MANUFACT:
|
case (CFG_FLASH_WORD_SIZE)SST_MANUFACT:
|
||||||
info->flash_id = FLASH_MAN_SST;
|
info->flash_id = FLASH_MAN_SST;
|
||||||
break;
|
break;
|
||||||
|
case (CFG_FLASH_WORD_SIZE)STM_MANUFACT:
|
||||||
|
info->flash_id = FLASH_MAN_STM;
|
||||||
|
break;
|
||||||
case (CFG_FLASH_WORD_SIZE)EXCEL_MANUFACT:
|
case (CFG_FLASH_WORD_SIZE)EXCEL_MANUFACT:
|
||||||
info->flash_id = FLASH_MAN_EXCEL;
|
info->flash_id = FLASH_MAN_EXCEL;
|
||||||
break;
|
break;
|
||||||
@ -226,6 +232,11 @@ static ulong flash_get_size(vu_long *addr, flash_info_t *info)
|
|||||||
info->sector_count = 8;
|
info->sector_count = 8;
|
||||||
info->size = 0x0080000; /* => 0.5 MB */
|
info->size = 0x0080000; /* => 0.5 MB */
|
||||||
break;
|
break;
|
||||||
|
case (CFG_FLASH_WORD_SIZE)STM_ID_M29W040B:
|
||||||
|
info->flash_id += FLASH_AM040;
|
||||||
|
info->sector_count = 8;
|
||||||
|
info->size = 0x0080000; /* => 0,5 MB */
|
||||||
|
break;
|
||||||
|
|
||||||
case (CFG_FLASH_WORD_SIZE)AMD_ID_LV800T:
|
case (CFG_FLASH_WORD_SIZE)AMD_ID_LV800T:
|
||||||
info->flash_id += FLASH_AM800T;
|
info->flash_id += FLASH_AM800T;
|
||||||
|
@ -85,8 +85,9 @@ static void status_led_blink (void)
|
|||||||
|
|
||||||
/* set all LED which are on, to state BLINKING */
|
/* set all LED which are on, to state BLINKING */
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
if (val & 0x08) status_led_set (i, STATUS_LED_BLINKING);
|
if (val & 0x01) status_led_set (3 - i, STATUS_LED_BLINKING);
|
||||||
val = val << 1;
|
else status_led_set (3 - i, STATUS_LED_OFF);
|
||||||
|
val = val >> 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,12 +114,14 @@ void show_boot_progress (int val)
|
|||||||
status_led_set (1, STATUS_LED_ON);
|
status_led_set (1, STATUS_LED_ON);
|
||||||
status_led_set (2, STATUS_LED_ON);
|
status_led_set (2, STATUS_LED_ON);
|
||||||
break;
|
break;
|
||||||
|
#if 0
|
||||||
case 64:
|
case 64:
|
||||||
/* starting Ethernet configuration */
|
/* starting Ethernet configuration */
|
||||||
status_led_set (0, STATUS_LED_OFF);
|
status_led_set (0, STATUS_LED_OFF);
|
||||||
status_led_set (1, STATUS_LED_OFF);
|
status_led_set (1, STATUS_LED_OFF);
|
||||||
status_led_set (2, STATUS_LED_ON);
|
status_led_set (2, STATUS_LED_ON);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case 80:
|
case 80:
|
||||||
/* loading Image */
|
/* loading Image */
|
||||||
status_led_set (0, STATUS_LED_ON);
|
status_led_set (0, STATUS_LED_ON);
|
||||||
@ -404,6 +407,9 @@ static void pcs440ep_checksha1 (void)
|
|||||||
int ret;
|
int ret;
|
||||||
char *cs_test;
|
char *cs_test;
|
||||||
|
|
||||||
|
status_led_set (0, STATUS_LED_OFF);
|
||||||
|
status_led_set (1, STATUS_LED_OFF);
|
||||||
|
status_led_set (2, STATUS_LED_ON);
|
||||||
ret = pcs440ep_sha1 (1);
|
ret = pcs440ep_sha1 (1);
|
||||||
if (ret == 0) return;
|
if (ret == 0) return;
|
||||||
|
|
||||||
@ -751,28 +757,41 @@ void hw_watchdog_reset(void)
|
|||||||
************************************************************************/
|
************************************************************************/
|
||||||
int do_led (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
int do_led (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int rcode = 0;
|
int rcode = 0, i;
|
||||||
ulong pattern = 0;
|
ulong pattern = 0;
|
||||||
|
|
||||||
pattern = simple_strtoul (argv[1], NULL, 10);
|
pattern = simple_strtoul (argv[1], NULL, 16);
|
||||||
if (pattern > 200) {
|
if (pattern > 0x400) {
|
||||||
|
int val = GET_LEDS;
|
||||||
|
printf ("led: %x\n", val);
|
||||||
|
return rcode;
|
||||||
|
}
|
||||||
|
if (pattern > 0x200) {
|
||||||
status_led_blink ();
|
status_led_blink ();
|
||||||
hang ();
|
hang ();
|
||||||
return rcode;
|
return rcode;
|
||||||
}
|
}
|
||||||
if (pattern > 100) {
|
if (pattern > 0x100) {
|
||||||
status_led_blink ();
|
status_led_blink ();
|
||||||
return rcode;
|
return rcode;
|
||||||
}
|
}
|
||||||
pattern &= 0x0f;
|
pattern &= 0x0f;
|
||||||
set_leds (pattern);
|
for (i = 0; i < 4; i++) {
|
||||||
|
if (pattern & 0x01) status_led_set (i, STATUS_LED_ON);
|
||||||
|
else status_led_set (i, STATUS_LED_OFF);
|
||||||
|
pattern = pattern >> 1;
|
||||||
|
}
|
||||||
return rcode;
|
return rcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD(
|
||||||
led, 2, 1, do_led,
|
led, 2, 1, do_led,
|
||||||
"led - set the led\n",
|
"led [bitmask] - set the DIAG-LED\n",
|
||||||
NULL
|
"[bitmask] 0x01 = DIAG 1 on\n"
|
||||||
|
" 0x02 = DIAG 2 on\n"
|
||||||
|
" 0x04 = DIAG 3 on\n"
|
||||||
|
" 0x08 = DIAG 4 on\n"
|
||||||
|
" > 0x100 set the LED, who are on, to state blinking\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
#if defined(CONFIG_SHA1_CHECK_UB_IMG)
|
#if defined(CONFIG_SHA1_CHECK_UB_IMG)
|
||||||
|
57
doc/README.sha1
Normal file
57
doc/README.sha1
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
SHA1 usage:
|
||||||
|
-----------
|
||||||
|
|
||||||
|
In the U-Boot Image for the pcs440ep board is a SHA1 checksum integrated.
|
||||||
|
This SHA1 sum is used, to check, if the U-Boot Image in Flash is not
|
||||||
|
corrupted.
|
||||||
|
|
||||||
|
The following command is available:
|
||||||
|
|
||||||
|
=> help sha1
|
||||||
|
sha1 address len [addr] calculate the SHA1 sum [save at addr]
|
||||||
|
-p calculate the SHA1 sum from the U-Boot image in flash and print
|
||||||
|
-c check the U-Boot image in flash
|
||||||
|
|
||||||
|
"sha1 -p"
|
||||||
|
calculates and prints the SHA1 sum, from the Image stored in Flash
|
||||||
|
|
||||||
|
"sha1 -c"
|
||||||
|
check, if the SHA1 sum from the Image stored in Flash is correct
|
||||||
|
|
||||||
|
|
||||||
|
It is possible to calculate a SHA1 checksum from a memoryrange with:
|
||||||
|
|
||||||
|
"sha1 address len"
|
||||||
|
|
||||||
|
If you want to store a new Image in Flash for the pcs440ep board,
|
||||||
|
which has no SHA1 sum, you can do the following:
|
||||||
|
|
||||||
|
a) cp the new Image on a position in RAM (here 0x300000)
|
||||||
|
(for this example we use the Image from Flash, stored at 0xfffa0000 and
|
||||||
|
0x60000 Bytes long)
|
||||||
|
|
||||||
|
"cp.b fffa0000 300000 60000"
|
||||||
|
|
||||||
|
b) Initialize the SHA1 sum in the Image with 0x00
|
||||||
|
The SHA1 sum is stored in Flash at:
|
||||||
|
CFG_MONITOR_BASE + CFG_MONITOR_LEN + SHA1_SUM_POS
|
||||||
|
for the pcs440ep Flash: 0xfffa0000 + 0x60000 + -0x20
|
||||||
|
= 0xffffffe0
|
||||||
|
for the example in RAM: 0x300000 + 0x60000 + -0x20
|
||||||
|
= 0x35ffe0
|
||||||
|
|
||||||
|
note: a SHA1 checksum is 20 bytes long.
|
||||||
|
|
||||||
|
"mw.b 35ffe0 0 14"
|
||||||
|
|
||||||
|
c) now calculate the SHA1 sum from the memoryrange and write
|
||||||
|
the calculated checksum at the right place:
|
||||||
|
|
||||||
|
"sha1 300000 60000 35ffe0"
|
||||||
|
|
||||||
|
Now you have a U-Boot-Image for the pcs440ep board with the correct SHA1 sum.
|
||||||
|
|
||||||
|
If you do a "./MAKEALL pcs440ep" or a "make all" to get the U-Boot image,
|
||||||
|
the correct SHA1 sum will be automagically included in the U-Boot image.
|
||||||
|
|
||||||
|
Heiko Schocher, 11 Jul 2007
|
@ -197,16 +197,16 @@
|
|||||||
#define CONFIG_STATUS_LED 1 /* Status LED enabled */
|
#define CONFIG_STATUS_LED 1 /* Status LED enabled */
|
||||||
#define CONFIG_BOARD_SPECIFIC_LED 1
|
#define CONFIG_BOARD_SPECIFIC_LED 1
|
||||||
|
|
||||||
#define STATUS_LED_BIT 0x08 /* LED 1 is on GPIO_PPC_1 */
|
#define STATUS_LED_BIT 0x08 /* DIAG1 is on GPIO_PPC_1 */
|
||||||
#define STATUS_LED_PERIOD ((CFG_HZ / 2) / 5) /* blink at 5 Hz */
|
#define STATUS_LED_PERIOD ((CFG_HZ / 2) / 5) /* blink at 5 Hz */
|
||||||
#define STATUS_LED_STATE STATUS_LED_OFF
|
#define STATUS_LED_STATE STATUS_LED_OFF
|
||||||
#define STATUS_LED_BIT1 0x04 /* LED 2 is on GPIO_PPC_2 */
|
#define STATUS_LED_BIT1 0x04 /* DIAG2 is on GPIO_PPC_2 */
|
||||||
#define STATUS_LED_PERIOD1 ((CFG_HZ / 2) / 5) /* blink at 5 Hz */
|
#define STATUS_LED_PERIOD1 ((CFG_HZ / 2) / 5) /* blink at 5 Hz */
|
||||||
#define STATUS_LED_STATE1 STATUS_LED_ON
|
#define STATUS_LED_STATE1 STATUS_LED_ON
|
||||||
#define STATUS_LED_BIT2 0x02 /* LED 3 is on GPIO_PPC_3 */
|
#define STATUS_LED_BIT2 0x02 /* DIAG3 is on GPIO_PPC_3 */
|
||||||
#define STATUS_LED_PERIOD2 ((CFG_HZ / 2) / 5) /* blink at 5 Hz */
|
#define STATUS_LED_PERIOD2 ((CFG_HZ / 2) / 5) /* blink at 5 Hz */
|
||||||
#define STATUS_LED_STATE2 STATUS_LED_OFF
|
#define STATUS_LED_STATE2 STATUS_LED_OFF
|
||||||
#define STATUS_LED_BIT3 0x01 /* LED 4 is on GPIO_PPC_4 */
|
#define STATUS_LED_BIT3 0x01 /* DIAG4 is on GPIO_PPC_4 */
|
||||||
#define STATUS_LED_PERIOD3 ((CFG_HZ / 2) / 5) /* blink at 5 Hz */
|
#define STATUS_LED_PERIOD3 ((CFG_HZ / 2) / 5) /* blink at 5 Hz */
|
||||||
#define STATUS_LED_STATE3 STATUS_LED_OFF
|
#define STATUS_LED_STATE3 STATUS_LED_OFF
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user