@@ -353,14 +353,17 @@ uint8_t flash_area_erased_val(const struct flash_area *fa);
353
353
#else
354
354
355
355
/**
356
- * Returns non-0 value if fixed-partition of given DTS node label exists.
356
+ * Returns non-0 value if fixed-partition as well as fixed-subpartition of given
357
+ * DTS node label exists.
357
358
*
358
359
* @param label DTS node label
359
360
*
360
361
* @return non-0 if fixed-partition node exists and is enabled;
361
362
* 0 if node does not exist, is not enabled or is not fixed-partition.
362
363
*/
363
- #define FIXED_PARTITION_EXISTS (label ) DT_FIXED_PARTITION_EXISTS(DT_NODELABEL(label))
364
+ #define FIXED_PARTITION_EXISTS (label ) \
365
+ UTIL_OR(DT_FIXED_PARTITION_EXISTS(DT_NODELABEL(label)), \
366
+ DT_FIXED_SUBPARTITION_EXISTS(DT_NODELABEL(label)))
364
367
365
368
/**
366
369
* Get flash area ID from fixed-partition DTS node label
@@ -372,14 +375,40 @@ uint8_t flash_area_erased_val(const struct flash_area *fa);
372
375
#define FIXED_PARTITION_ID (label ) DT_FIXED_PARTITION_ID(DT_NODELABEL(label))
373
376
374
377
/**
375
- * Get fixed-partition offset from DTS node label
378
+ * Get fixed-partition as well as fixed-subpartition offset from DTS node label
376
379
*
377
380
* @param label DTS node label of a partition
378
381
*
379
382
* @return fixed-partition offset, as defined for the partition in DTS.
380
383
*/
381
384
#define FIXED_PARTITION_OFFSET (label ) DT_REG_ADDR(DT_NODELABEL(label))
382
385
386
+ /**
387
+ * Get fixed-partition as well as fixed-subpartition address from DTS node label
388
+ *
389
+ * @param label DTS node label of a partition or subpartition
390
+ *
391
+ * @return fixed-partition address, as defined for the partition in DTS.
392
+ */
393
+ #define FIXED_PARTITION_ADDRESS (label ) \
394
+ (DT_REG_ADDR(DT_NODELABEL(label)) + \
395
+ COND_CODE_1(DT_FIXED_SUBPARTITION_EXISTS(DT_NODELABEL(label)), \
396
+ (DT_REG_ADDR(DT_GPARENT(DT_PARENT(DT_NODELABEL(label))))), \
397
+ (DT_REG_ADDR(DT_GPARENT(DT_NODELABEL(label))))))
398
+
399
+ /**
400
+ * Get fixed-partition as well as fixed-subpartition address from DTS node
401
+ *
402
+ * @param node DTS node of a partition
403
+ *
404
+ * @return fixed-partition address, as defined for the partition in DTS.
405
+ */
406
+ #define FIXED_PARTITION_NODE_ADDRESS (node ) \
407
+ (DT_REG_ADDR(node) + \
408
+ COND_CODE_1(DT_FIXED_SUBPARTITION_EXISTS(node), \
409
+ (DT_REG_ADDR(DT_GPARENT(DT_PARENT(node)))), \
410
+ (DT_REG_ADDR(DT_GPARENT(node)))))
411
+
383
412
/**
384
413
* Get fixed-partition offset from DTS node
385
414
*
@@ -425,8 +454,10 @@ uint8_t flash_area_erased_val(const struct flash_area *fa);
425
454
* @return Pointer to a device.
426
455
*/
427
456
#define FIXED_PARTITION_DEVICE (label ) \
428
- DEVICE_DT_GET(DT_MTD_FROM_FIXED_PARTITION(DT_NODELABEL(label)))
429
-
457
+ DEVICE_DT_GET(COND_CODE_1( \
458
+ DT_FIXED_SUBPARTITION_EXISTS(DT_NODELABEL(label)), \
459
+ (DT_MTD_FROM_FIXED_SUBPARTITION(DT_NODELABEL(label))), \
460
+ (DT_MTD_FROM_FIXED_PARTITION(DT_NODELABEL(label)))))
430
461
/**
431
462
* Get device pointer for device the area/partition resides on
432
463
*
@@ -435,7 +466,10 @@ uint8_t flash_area_erased_val(const struct flash_area *fa);
435
466
* @return Pointer to a device.
436
467
*/
437
468
#define FIXED_PARTITION_NODE_DEVICE (node ) \
438
- DEVICE_DT_GET(DT_MTD_FROM_FIXED_PARTITION(node))
469
+ DEVICE_DT_GET(COND_CODE_1( \
470
+ DT_FIXED_SUBPARTITION_EXISTS(node), \
471
+ (DT_MTD_FROM_FIXED_SUBPARTITION(node)), \
472
+ (DT_MTD_FROM_FIXED_PARTITION(node))))
439
473
440
474
/**
441
475
* Get pointer to flash_area object by partition label
@@ -471,6 +505,22 @@ DT_FOREACH_STATUS_OKAY(fixed_partitions, FOR_EACH_PARTITION_TABLE)
471
505
#undef DECLARE_PARTITION
472
506
#undef DECLARE_PARTITION_0
473
507
#undef FOR_EACH_PARTITION_TABLE
508
+
509
+ #define FIXED_SUBPARTITION_1 (node ) FIXED_SUBPARTITION_0(DT_DEP_ORD(node))
510
+ #define FIXED_SUBPARTITION_0 (ord ) \
511
+ ((const struct flash_area *)&DT_CAT(global_fixed_subpartition_ORD_, ord))
512
+
513
+ #define DECLARE_SUBPARTITION (node ) DECLARE_SUBPARTITION_0(DT_DEP_ORD(node))
514
+ #define DECLARE_SUBPARTITION_0 (ord ) \
515
+ extern const struct flash_area DT_CAT(global_fixed_subpartition_ORD_, ord);
516
+ #define FOR_EACH_SUBPARTITION_TABLE (table ) DT_FOREACH_CHILD(table, DECLARE_SUBPARTITION)
517
+
518
+ /* Generate declarations */
519
+ DT_FOREACH_STATUS_OKAY (fixed_subpartitions , FOR_EACH_SUBPARTITION_TABLE )
520
+
521
+ #undef DECLARE_SUBPARTITION
522
+ #undef DECLARE_SUBPARTITION_0
523
+ #undef FOR_EACH_SUBPARTITION_TABLE
474
524
/** @endcond */
475
525
476
526
#endif /* USE_PARTITION_MANAGER */
0 commit comments