Mercurial > ecos
comparison packages/redboot/current/src/flash.c @ 2211:acfe2ec52590
Fix build problems on systems without FLASH locking
| author | gthomas |
|---|---|
| date | Tue, 23 May 2006 11:56:45 +0000 |
| parents | eee88a59c155 |
| children | 19ce76dd5f64 |
comparison
equal
deleted
inserted
replaced
| 2210:7f47e5d2fe20 | 2211:acfe2ec52590 |
|---|---|
| 293 int | 293 int |
| 294 fis_update_directory(int autolock, int error) | 294 fis_update_directory(int autolock, int error) |
| 295 { | 295 { |
| 296 void* err_addr=0; | 296 void* err_addr=0; |
| 297 | 297 |
| 298 #ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING | |
| 298 #ifdef CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL | 299 #ifdef CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL |
| 299 // Ensure [quietly] that the directory is unlocked before trying to update and locked again afterwards | 300 // Ensure [quietly] that the directory is unlocked before trying to update and locked again afterwards |
| 300 int do_autolock=1; | 301 int do_autolock=1; |
| 301 #else | 302 #else |
| 302 int do_autolock=autolock; | 303 int do_autolock=autolock; |
| 304 #endif | |
| 303 #endif | 305 #endif |
| 304 | 306 |
| 305 #ifdef CYGOPT_REDBOOT_REDUNDANT_FIS | 307 #ifdef CYGOPT_REDBOOT_REDUNDANT_FIS |
| 306 | 308 |
| 307 struct fis_image_desc* img=(struct fis_image_desc*)fis_work_block; | 309 struct fis_image_desc* img=(struct fis_image_desc*)fis_work_block; |
| 328 img->u.valid_info.valid_flag[0]=CYG_REDBOOT_RFIS_VALID; | 330 img->u.valid_info.valid_flag[0]=CYG_REDBOOT_RFIS_VALID; |
| 329 img->u.valid_info.valid_flag[1]=CYG_REDBOOT_RFIS_VALID; | 331 img->u.valid_info.valid_flag[1]=CYG_REDBOOT_RFIS_VALID; |
| 330 | 332 |
| 331 flash_program(tmp_fis_addr, img->u.valid_info.valid_flag, sizeof(img->u.valid_info.valid_flag), (void **)&err_addr); | 333 flash_program(tmp_fis_addr, img->u.valid_info.valid_flag, sizeof(img->u.valid_info.valid_flag), (void **)&err_addr); |
| 332 } | 334 } |
| 335 #ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING | |
| 333 if (do_autolock) | 336 if (do_autolock) |
| 334 flash_lock((void *)fis_addr, fisdir_size, (void **)&err_addr); | 337 flash_lock((void *)fis_addr, fisdir_size, (void **)&err_addr); |
| 338 #endif | |
| 335 | 339 |
| 336 #else // CYGOPT_REDBOOT_REDUNDANT_FIS | 340 #else // CYGOPT_REDBOOT_REDUNDANT_FIS |
| 337 int blk_size = fisdir_size; | 341 int blk_size = fisdir_size; |
| 338 int stat; | 342 int stat; |
| 339 | 343 |
| 341 #ifdef CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG | 345 #ifdef CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG |
| 342 memcpy((char *)fis_work_block+fisdir_size, config, cfg_size); | 346 memcpy((char *)fis_work_block+fisdir_size, config, cfg_size); |
| 343 conf_endian_fixup((char *)fis_work_block+fisdir_size); | 347 conf_endian_fixup((char *)fis_work_block+fisdir_size); |
| 344 blk_size += cfg_size; | 348 blk_size += cfg_size; |
| 345 #endif | 349 #endif |
| 350 #ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING | |
| 346 if (do_autolock) | 351 if (do_autolock) |
| 347 flash_unlock((void *)fis_addr, blk_size, (void **)&err_addr); | 352 flash_unlock((void *)fis_addr, blk_size, (void **)&err_addr); |
| 353 #endif | |
| 348 | 354 |
| 349 if ((stat = flash_erase(fis_addr, blk_size, (void **)&err_addr)) != 0) { | 355 if ((stat = flash_erase(fis_addr, blk_size, (void **)&err_addr)) != 0) { |
| 350 diag_printf("Error erasing FIS directory at %p: %s\n", err_addr, flash_errmsg(stat)); | 356 diag_printf("Error erasing FIS directory at %p: %s\n", err_addr, flash_errmsg(stat)); |
| 351 } else { | 357 } else { |
| 352 if ((stat = FLASH_PROGRAM(fis_addr, fis_work_block, | 358 if ((stat = FLASH_PROGRAM(fis_addr, fis_work_block, |
| 354 diag_printf("Error writing FIS directory at %p: %s\n", | 360 diag_printf("Error writing FIS directory at %p: %s\n", |
| 355 err_addr, flash_errmsg(stat)); | 361 err_addr, flash_errmsg(stat)); |
| 356 } | 362 } |
| 357 } | 363 } |
| 358 fis_endian_fixup(fis_work_block); | 364 fis_endian_fixup(fis_work_block); |
| 365 #ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING | |
| 359 if (do_autolock) | 366 if (do_autolock) |
| 360 flash_lock((void *)fis_addr, blk_size, (void **)&err_addr); | 367 flash_lock((void *)fis_addr, blk_size, (void **)&err_addr); |
| 368 #endif | |
| 361 | 369 |
| 362 #endif // CYGOPT_REDBOOT_REDUNDANT_FIS | 370 #endif // CYGOPT_REDBOOT_REDUNDANT_FIS |
| 363 | 371 |
| 364 return 0; | 372 return 0; |
| 365 } | 373 } |
