Skip to content

Commit a8ed390

Browse files
hschauhanavpatel
authored andcommitted
[LIBS] libfdt: Made code symentically correct by introducing fdt_cell_t.
Signed-off-by: Anup Patel <[email protected]>
1 parent 0ee6cb6 commit a8ed390

File tree

2 files changed

+29
-26
lines changed

2 files changed

+29
-26
lines changed

libs/libfdt/libfdt.c

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -75,26 +75,26 @@ static void libfdt_parse_devtree_recursive(struct fdt_fileinfo * fdt,
7575
while (LIBFDT_DATA32(*data) != FDT_END_NODE) {
7676
switch (LIBFDT_DATA32(*data)) {
7777
case FDT_PROP:
78-
*data += sizeof(u32);
78+
*data += sizeof(fdt_cell_t);
7979
len = LIBFDT_DATA32(*data);
80-
*data += sizeof(u32);
80+
*data += sizeof(fdt_cell_t);
8181
name = &fdt->str[LIBFDT_DATA32(*data)];
82-
*data += sizeof(u32);
82+
*data += sizeof(fdt_cell_t);
8383
type = vmm_devtree_estimate_attrtype(name);
8484
vmm_devtree_setattr(node, name, *data, type, len);
8585
*data += len;
86-
while ((u32) (*data) % sizeof(u32) != 0)
86+
while ((virtual_addr_t) (*data) % sizeof(fdt_cell_t) != 0)
8787
(*data)++;
8888
break;
8989
case FDT_NOP:
90-
*data += sizeof(u32);
90+
*data += sizeof(fdt_cell_t);
9191
break;
9292
case FDT_BEGIN_NODE:
93-
*data += sizeof(u32);
93+
*data += sizeof(fdt_cell_t);
9494
type = VMM_DEVTREE_NODETYPE_UNKNOWN;
9595
child = vmm_devtree_addnode(node, *data, type, NULL);
9696
*data += vmm_strlen(*data) + 1;
97-
while ((u32) (*data) % sizeof(u32) != 0) {
97+
while ((virtual_addr_t) (*data) % sizeof(fdt_cell_t) != 0) {
9898
(*data)++;
9999
}
100100
libfdt_parse_devtree_recursive(fdt, child, data);
@@ -105,7 +105,7 @@ static void libfdt_parse_devtree_recursive(struct fdt_fileinfo * fdt,
105105
};
106106
}
107107

108-
*data += sizeof(u32);
108+
*data += sizeof(fdt_cell_t);
109109

110110
return;
111111
}
@@ -128,15 +128,15 @@ int libfdt_parse_devtree(struct fdt_fileinfo * fdt,
128128
return VMM_EFAIL;
129129

130130
/* Point to root node name */
131-
data += sizeof(u32);
131+
data += sizeof(fdt_cell_t);
132132

133133
/* Create root node */
134134
*root = vmm_devtree_addnode(NULL, data,
135135
VMM_DEVTREE_NODETYPE_UNKNOWN, NULL);
136136

137137
/* Skip root node name */
138138
data += vmm_strlen(data) + 1;
139-
while ((u32) (data) % sizeof(u32) != 0) {
139+
while ((virtual_addr_t) (data) % sizeof(fdt_cell_t) != 0) {
140140
(data)++;
141141
}
142142

@@ -163,7 +163,7 @@ static struct fdt_node_header * libfdt_find_node_recursive(char **data,
163163
if (LIBFDT_DATA32(*data) != FDT_BEGIN_NODE)
164164
return NULL;
165165

166-
*data += sizeof(u32);
166+
*data += sizeof(fdt_cell_t);
167167

168168
len = vmm_strlen(*data);
169169
valid = 1;
@@ -192,29 +192,29 @@ static struct fdt_node_header * libfdt_find_node_recursive(char **data,
192192
}
193193

194194
if (*node_path == '\0') {
195-
*data -= sizeof(u32);
195+
*data -= sizeof(fdt_cell_t);
196196
return (struct fdt_node_header *)(*data);
197197
}
198198
}
199199
*data += len + 1;
200-
while ((u32) (*data) % sizeof(u32) != 0) {
200+
while ((virtual_addr_t) (*data) % sizeof(fdt_cell_t) != 0) {
201201
(*data)++;
202202
}
203203

204204
while (LIBFDT_DATA32(*data) != FDT_END_NODE) {
205205
switch (LIBFDT_DATA32(*data)) {
206206
case FDT_PROP:
207-
*data += sizeof(u32);
207+
*data += sizeof(fdt_cell_t);
208208
len = LIBFDT_DATA32(*data);
209-
*data += sizeof(u32);
210-
*data += sizeof(u32);
209+
*data += sizeof(fdt_cell_t);
210+
*data += sizeof(fdt_cell_t);
211211
*data += len;
212-
while ((u32) (*data) % sizeof(u32) != 0) {
212+
while ((virtual_addr_t) (*data) % sizeof(fdt_cell_t) != 0) {
213213
(*data)++;
214214
}
215215
break;
216216
case FDT_NOP:
217-
*data += sizeof(u32);
217+
*data += sizeof(fdt_cell_t);
218218
break;
219219
case FDT_BEGIN_NODE:
220220
ret = libfdt_find_node_recursive(data, str, node_path);
@@ -228,7 +228,7 @@ static struct fdt_node_header * libfdt_find_node_recursive(char **data,
228228
};
229229
}
230230

231-
*data += sizeof(u32);
231+
*data += sizeof(fdt_cell_t);
232232

233233
return NULL;
234234
}
@@ -267,30 +267,30 @@ struct fdt_property * libfdt_get_property(struct fdt_fileinfo * fdt,
267267

268268
/* Convert node to character stream */
269269
data = (char *)fdt_node;
270-
data += sizeof(u32);
270+
data += sizeof(fdt_cell_t);
271271

272272
/* Skip node name */
273273
len = vmm_strlen(data);
274274
data += len + 1;
275-
while ((u32) (data) % sizeof(u32) != 0) {
275+
while ((virtual_addr_t) (data) % sizeof(fdt_cell_t) != 0) {
276276
data++;
277277
}
278278

279279
/* Find node property and its value */
280280
ret = NULL;
281281
while (LIBFDT_DATA32(data) == FDT_PROP) {
282-
data += sizeof(u32);
282+
data += sizeof(fdt_cell_t);
283283
len = LIBFDT_DATA32(data);
284-
data += sizeof(u32);
284+
data += sizeof(fdt_cell_t);
285285
if (!vmm_strcmp(&fdt->str[LIBFDT_DATA32(data)],
286286
property)) {
287-
data -= sizeof(u32) * 2;
287+
data -= sizeof(fdt_cell_t) * 2;
288288
ret = (struct fdt_property *)data;
289289
break;
290290
}
291-
data += sizeof(u32);
291+
data += sizeof(fdt_cell_t);
292292
data += len;
293-
while ((u32) (data) % sizeof(u32) != 0) {
293+
while ((virtual_addr_t) (data) % sizeof(fdt_cell_t) != 0) {
294294
(data)++;
295295
}
296296
}

libs/libfdt/libfdt.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@
4242
#define FDT_V16_SIZE FDT_V3_SIZE
4343
#define FDT_V17_SIZE (FDT_V16_SIZE + sizeof(u32))
4444

45+
/* Memory unit in FDT is called a cell (assumed to be u32) */
46+
typedef u32 fdt_cell_t;
47+
4548
struct fdt_header {
4649
u32 magic; /* magic word FDT_MAGIC */
4750
u32 totalsize; /* total size of DT block */

0 commit comments

Comments
 (0)