Skip to content

Commit 272bcd4

Browse files
marcaneiln
authored andcommitted
kboot: Use adt_segment_ranges struct instead of open-coding
Signed-off-by: Hector Martin <[email protected]>
1 parent f81b2c3 commit 272bcd4

2 files changed

Lines changed: 18 additions & 10 deletions

File tree

src/adt.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,13 @@ bool adt_is_compatible(const void *adt, int nodeoffset, const char *compat);
106106
for (const struct adt_property *prop = ADT_PROP(adt, _poff); _prop_count--; \
107107
prop = ADT_PROP(adt, _poff = adt_next_property_offset(adt, _poff)))
108108

109+
/* Common ADT properties */
110+
struct adt_segment_ranges {
111+
u64 phys;
112+
u64 iova;
113+
u64 remap;
114+
u32 size;
115+
u32 unk;
116+
} PACKED;
117+
109118
#endif

src/kboot.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1540,33 +1540,32 @@ static int dt_reserve_asc_firmware(const char *adt_path, const char *fdt_path)
15401540
bail("FDT: couldn't set '%s.phandle' property: %d\n", fdt_path, ret);
15411541
}
15421542

1543-
const uint64_t *segments;
1543+
const struct adt_segment_ranges *seg;
15441544
u32 segments_len;
15451545

1546-
segments = adt_getprop(adt, node, "segment-ranges", &segments_len);
1547-
unsigned int num_maps = segments_len / 32;
1546+
seg = adt_getprop(adt, node, "segment-ranges", &segments_len);
1547+
unsigned int num_maps = segments_len / sizeof(*seg);
15481548

15491549
for (unsigned i = 0; i < num_maps; i++) {
1550-
u64 paddr = segments[0];
1551-
u64 iova = segments[2];
1552-
u32 size = segments[3];
1553-
segments += 4;
1550+
u64 iova = seg->iova;
15541551

15551552
char node_name[64];
1556-
snprintf(node_name, sizeof(node_name), "asc-firmware@%lx", paddr);
1553+
snprintf(node_name, sizeof(node_name), "asc-firmware@%lx", seg->phys);
15571554

1558-
int mem_node = dt_get_or_add_reserved_mem(node_name, "apple,asc-mem", paddr, size);
1555+
int mem_node = dt_get_or_add_reserved_mem(node_name, "apple,asc-mem", seg->phys, seg->size);
15591556
if (mem_node < 0)
15601557
return ret;
15611558
uint32_t mem_phandle = fdt_get_phandle(dt, mem_node);
15621559

1563-
ret = dt_device_set_reserved_mem(mem_node, node_name, dev_phandle, iova, size);
1560+
ret = dt_device_set_reserved_mem(mem_node, node_name, dev_phandle, iova, seg->size);
15641561
if (ret < 0)
15651562
return ret;
15661563

15671564
ret = dt_device_add_mem_region(fdt_path, mem_phandle, NULL);
15681565
if (ret < 0)
15691566
return ret;
1567+
1568+
seg++;
15701569
}
15711570

15721571
return 0;

0 commit comments

Comments
 (0)