Mercurial > flash_v2
comparison packages/redboot/current/src/flash.c @ 1721:16115b7a4b8c
* src/flash.c (do_flash_init): cyg_flash_get_limits has been removed.
Reimplement this functionality using other calls.
| author | asl |
|---|---|
| date | Sat, 21 Aug 2004 13:47:12 +0000 |
| parents | faaea4243d52 |
| children | 6aedf0a683e4 |
comparison
equal
deleted
inserted
replaced
| 1720:fcf5b538459b | 1721:16115b7a4b8c |
|---|---|
| 1370 } | 1370 } |
| 1371 | 1371 |
| 1372 bool | 1372 bool |
| 1373 do_flash_init(void) | 1373 do_flash_init(void) |
| 1374 { | 1374 { |
| 1375 int stat; | 1375 int stat, i; |
| 1376 cyg_flashaddr_t err_addr; | 1376 cyg_flashaddr_t err_addr; |
| 1377 #ifdef CYGNUM_REDBOOT_FLASH_BASE | 1377 #ifdef CYGNUM_REDBOOT_FLASH_BASE |
| 1378 cyg_flash_info_t info; | 1378 cyg_flash_info_t info; |
| 1379 #endif | 1379 #endif |
| 1380 | 1380 |
| 1386 return false; | 1386 return false; |
| 1387 } | 1387 } |
| 1388 | 1388 |
| 1389 #ifdef CYGNUM_REDBOOT_FLASH_BASE | 1389 #ifdef CYGNUM_REDBOOT_FLASH_BASE |
| 1390 stat = cyg_flash_get_info_addr(CYGNUM_REDBOOT_FLASH_BASE, &info); | 1390 stat = cyg_flash_get_info_addr(CYGNUM_REDBOOT_FLASH_BASE, &info); |
| 1391 #else | |
| 1392 stat = cyg_flash_get_info(0, &info); | |
| 1393 #endif | |
| 1391 if (stat != CYG_FLASH_ERR_OK) { | 1394 if (stat != CYG_FLASH_ERR_OK) { |
| 1392 diag_printf("FLASH: driver init failed: %s\n", | 1395 diag_printf("FLASH: driver init failed: %s\n", |
| 1393 cyg_flash_errmsg(stat)); | 1396 cyg_flash_errmsg(stat)); |
| 1394 return false; | 1397 return false; |
| 1395 } | 1398 } |
| 1396 flash_start = info.start; | 1399 flash_start = info.start; |
| 1397 flash_end = info.end; | 1400 flash_end = info.end -1; |
| 1398 #else | 1401 |
| 1399 if ((stat = cyg_flash_get_limits(&flash_start, &flash_end)) != 0) { | 1402 // No bootblock support yet, so we merge any bootblocks we might |
| 1400 diag_printf("FLASH: driver init failed: %s\n", | 1403 // find into full size blocks |
| 1401 cyg_flash_errmsg(stat)); | 1404 for (i=0; i < info.num_block_infos; i++) { |
| 1402 return false; | 1405 if (info.block_info[i].block_size > flash_block_size) { |
| 1403 } | 1406 flash_block_size = info.block_info[i].block_size; |
| 1404 #endif | 1407 } |
| 1405 // Keep 'end' address as last valid location, to avoid wrap around problems | 1408 } |
| 1406 flash_end = ((CYG_ADDRESS)flash_end - 1); | 1409 flash_num_blocks = 0; |
| 1407 cyg_flash_get_block_info(&flash_block_size, &flash_num_blocks); | 1410 for (i=0; i < info.num_block_infos; i++) { |
| 1411 flash_num_blocks += (info.block_info[i].block_size * | |
| 1412 info.block_info[i].blocks) / | |
| 1413 flash_block_size; | |
| 1414 } | |
| 1408 | 1415 |
| 1409 #ifdef CYGOPT_REDBOOT_FIS | 1416 #ifdef CYGOPT_REDBOOT_FIS |
| 1410 fisdir_size = CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_COUNT * CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE; | 1417 fisdir_size = CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_COUNT * CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE; |
| 1411 fisdir_size = ((fisdir_size + flash_block_size - 1) / flash_block_size) * flash_block_size; | 1418 fisdir_size = ((fisdir_size + flash_block_size - 1) / flash_block_size) * flash_block_size; |
| 1412 # if defined(CYGPRI_REDBOOT_ZLIB_FLASH) && defined(CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER) | 1419 # if defined(CYGPRI_REDBOOT_ZLIB_FLASH) && defined(CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER) |
