@@ -475,6 +475,19 @@ static rt_err_t fdt_scan_memory(void)
475
475
break ;
476
476
}
477
477
478
+ /*
479
+ * +--------+ +--------+
480
+ * | memory | | memory |
481
+ * +--------+ +----------+ +----------+ +--------+
482
+ * | reserved | | reserved |
483
+ * +----------+ +----------+
484
+ */
485
+ if (res_region -> start >= region -> end || res_region -> end <= region -> start )
486
+ {
487
+ /* No adjustments needed */
488
+ continue ;
489
+ }
490
+
478
491
/*
479
492
* case 0: case 1:
480
493
* +------------------+ +----------+
@@ -490,56 +503,49 @@ static rt_err_t fdt_scan_memory(void)
490
503
* | reserved | | reserved |
491
504
* +----------+ +----------+
492
505
*/
493
-
494
- /* case 0 */
495
- if (res_region -> start >= region -> start && res_region -> end <= region -> end )
506
+ if (res_region -> start > region -> start )
496
507
{
497
- rt_size_t new_size = region -> end - res_region -> end ;
508
+ if (res_region -> end < region -> end )
509
+ {
510
+ /* case 0 */
511
+ rt_size_t new_size = region -> end - res_region -> end ;
498
512
499
- region -> end = res_region -> start ;
513
+ region -> end = res_region -> start ;
500
514
501
- /* Commit part next block */
502
- if (new_size )
503
- {
515
+ /* Commit part next block */
504
516
err = commit_memregion (region -> name , res_region -> end , new_size , RT_FALSE );
505
- }
506
517
507
- if (!err )
508
- {
509
- ++ no ;
518
+ if (!err )
519
+ {
520
+ ++ no ;
510
521
511
- /* Scan again */
512
- region = & _memregion [0 ];
513
- -- region ;
522
+ /* Scan again */
523
+ region = & _memregion [0 ];
524
+ -- region ;
514
525
515
- break ;
526
+ break ;
527
+ }
528
+ }
529
+ else
530
+ {
531
+ /* case 2 */
532
+ region -> end = res_region -> start ;
516
533
}
517
-
518
- continue ;
519
- }
520
-
521
- /* case 1 */
522
- if (res_region -> start <= region -> start && res_region -> end >= region -> end )
523
- {
524
- region -> name = RT_NULL ;
525
-
526
- break ;
527
- }
528
-
529
- /* case 2 */
530
- if (res_region -> start <= region -> end && res_region -> end >= region -> end )
531
- {
532
- region -> end = res_region -> start ;
533
-
534
- continue ;
535
534
}
536
-
537
- /* case 3 */
538
- if (res_region -> start <= region -> start && res_region -> end >= region -> start )
535
+ else
539
536
{
540
- region -> start = res_region -> end ;
537
+ if (res_region -> end < region -> end )
538
+ {
539
+ /* case 3 */
540
+ region -> start = res_region -> end ;
541
+ }
542
+ else
543
+ {
544
+ /* case 1 */
545
+ region -> name = RT_NULL ;
541
546
542
- continue ;
547
+ break ;
548
+ }
543
549
}
544
550
}
545
551
}
0 commit comments