@@ -307,23 +307,26 @@ static int app_max_sectors(struct boot_loader_state *state)
307
307
uint32_t sz = 0 ;
308
308
uint32_t sector_sz ;
309
309
uint32_t trailer_sz ;
310
- uint32_t first_trailer_idx ;
310
+ uint32_t available_sectors_pri ;
311
+ uint32_t available_sectors_sec ;
312
+ uint32_t trailer_sectors = 0 ;
311
313
312
314
sector_sz = boot_img_sector_size (state , BOOT_PRIMARY_SLOT , 0 );
313
315
trailer_sz = boot_trailer_sz (BOOT_WRITE_SZ (state ));
314
- first_trailer_idx = boot_img_num_sectors (state , BOOT_PRIMARY_SLOT );
315
316
316
317
while (1 ) {
317
318
sz += sector_sz ;
319
+ ++ trailer_sectors ;
318
320
319
321
if (sz >= trailer_sz ) {
320
322
break ;
321
323
}
322
-
323
- first_trailer_idx -- ;
324
324
}
325
325
326
- return first_trailer_idx ;
326
+ available_sectors_pri = boot_img_num_sectors (state , BOOT_PRIMARY_SLOT ) - trailer_sectors ;
327
+ available_sectors_sec = boot_img_num_sectors (state , BOOT_SECONDARY_SLOT ) - 1 ;
328
+
329
+ return (available_sectors_pri < available_sectors_sec ? available_sectors_pri : available_sectors_sec );
327
330
}
328
331
329
332
int boot_slots_compatible (struct boot_loader_state * state )
@@ -333,34 +336,35 @@ int boot_slots_compatible(struct boot_loader_state *state)
333
336
size_t sector_sz_pri = 0 ;
334
337
size_t sector_sz_sec = 0 ;
335
338
size_t i ;
336
- size_t num_usable_sectors_pri ;
339
+ size_t num_usable_sectors ;
337
340
338
341
num_sectors_pri = boot_img_num_sectors (state , BOOT_PRIMARY_SLOT );
339
342
num_sectors_sec = boot_img_num_sectors (state , BOOT_SECONDARY_SLOT );
340
- num_usable_sectors_pri = app_max_sectors (state );
343
+ num_usable_sectors = app_max_sectors (state );
341
344
342
- if (( num_sectors_pri != num_sectors_sec ) &&
343
- (( num_sectors_pri + 1 ) != num_sectors_sec ) &&
344
- (( num_usable_sectors_pri + 1 ) != (num_sectors_sec ) )) {
345
+ if (num_sectors_pri != num_sectors_sec &&
346
+ ( num_sectors_pri + 1 ) != num_sectors_sec &&
347
+ num_usable_sectors != (num_sectors_sec - 1 )) {
345
348
BOOT_LOG_WRN ("Cannot upgrade: not a compatible amount of sectors" );
346
- BOOT_LOG_DBG ("slot0 sectors: %d, slot1 sectors: %d, usable slot0 sectors: %d" ,
349
+ BOOT_LOG_DBG ("slot0 sectors: %d, slot1 sectors: %d, usable sectors: %d" ,
347
350
(int )num_sectors_pri , (int )num_sectors_sec ,
348
- (int )(num_usable_sectors_pri - 1 ));
351
+ (int )(num_usable_sectors ));
349
352
return 0 ;
350
353
} else if (num_sectors_pri > BOOT_MAX_IMG_SECTORS ) {
351
354
BOOT_LOG_WRN ("Cannot upgrade: more sectors than allowed" );
352
355
return 0 ;
353
356
}
354
357
355
- if ((num_usable_sectors_pri + 1 ) != num_sectors_sec ) {
358
+ if ((num_usable_sectors + 1 ) != num_sectors_sec ) {
356
359
BOOT_LOG_DBG ("Non-optimal sector distribution, slot0 has %d usable sectors "
357
- "but slot1 has %d usable sectors" , (int )(num_usable_sectors_pri ),
360
+ "but slot1 has %d usable sectors" , (int )(num_usable_sectors ),
358
361
((int )num_sectors_sec - 1 ));
359
362
}
360
363
361
- for (i = 0 ; i < num_sectors_pri ; i ++ ) {
364
+ for (i = 0 ; i < num_usable_sectors ; i ++ ) {
362
365
sector_sz_pri = boot_img_sector_size (state , BOOT_PRIMARY_SLOT , i );
363
366
sector_sz_sec = boot_img_sector_size (state , BOOT_SECONDARY_SLOT , i );
367
+
364
368
if (sector_sz_pri != sector_sz_sec ) {
365
369
BOOT_LOG_WRN ("Cannot upgrade: not same sector layout" );
366
370
return 0 ;
@@ -726,19 +730,10 @@ void swap_run(struct boot_loader_state *state, struct boot_status *bs,
726
730
int app_max_size (struct boot_loader_state * state )
727
731
{
728
732
uint32_t sector_sz_primary ;
729
- uint32_t sector_sz_secondary ;
730
- uint32_t sz_primary ;
731
- uint32_t sz_secondary ;
732
733
733
734
sector_sz_primary = boot_img_sector_size (state , BOOT_PRIMARY_SLOT , 0 );
734
- sector_sz_secondary = boot_img_sector_size (state , BOOT_SECONDARY_SLOT , 0 );
735
-
736
- /* Account for image flags and move sector */
737
- sz_primary = app_max_sectors (state ) * sector_sz_primary ;
738
- sz_secondary = boot_img_num_sectors (state , BOOT_SECONDARY_SLOT ) * sector_sz_secondary -
739
- sector_sz_primary ;
740
735
741
- return ( sz_primary <= sz_secondary ? sz_primary : sz_secondary ) ;
736
+ return app_max_sectors ( state ) * sector_sz_primary ;
742
737
}
743
738
744
739
/* Compute the total size of the given image. Includes the size of the TLVs. */
0 commit comments