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)