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 }