Skip to content

Commit dd2d4e5

Browse files
committed
kboot: Use adt_segment_ranges struct instead of open-coding
Signed-off-by: Hector Martin <[email protected]>
1 parent f4d6d20 commit dd2d4e5

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
@@ -1596,33 +1596,32 @@ static int dt_reserve_asc_firmware(const char *adt_path, const char *fdt_path)
15961596
bail("FDT: couldn't set '%s.phandle' property: %d\n", fdt_path, ret);
15971597
}
15981598

1599-
const uint64_t *segments;
1599+
const struct adt_segment_ranges *seg;
16001600
u32 segments_len;
16011601

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

16051605
for (unsigned i = 0; i < num_maps; i++) {
1606-
u64 paddr = segments[0];
1607-
u64 iova = segments[2];
1608-
u32 size = segments[3];
1609-
segments += 4;
1606+
u64 iova = seg->iova;
16101607

16111608
char node_name[64];
1612-
snprintf(node_name, sizeof(node_name), "asc-firmware@%lx", paddr);
1609+
snprintf(node_name, sizeof(node_name), "asc-firmware@%lx", seg->phys);
16131610

1614-
int mem_node = dt_get_or_add_reserved_mem(node_name, "apple,asc-mem", paddr, size);
1611+
int mem_node = dt_get_or_add_reserved_mem(node_name, "apple,asc-mem", seg->phys, seg->size);
16151612
if (mem_node < 0)
16161613
return ret;
16171614
uint32_t mem_phandle = fdt_get_phandle(dt, mem_node);
16181615

1619-
ret = dt_device_set_reserved_mem(mem_node, node_name, dev_phandle, iova, size);
1616+
ret = dt_device_set_reserved_mem(mem_node, node_name, dev_phandle, iova, seg->size);
16201617
if (ret < 0)
16211618
return ret;
16221619

16231620
ret = dt_device_add_mem_region(fdt_path, mem_phandle, NULL);
16241621
if (ret < 0)
16251622
return ret;
1623+
1624+
seg++;
16261625
}
16271626

16281627
return 0;

0 commit comments

Comments
 (0)