MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / fdt_reserved_memory_reg

Function fdt_reserved_memory_reg

components/drivers/ofw/fdt.c:227–268  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

225}
226
227static rt_err_t fdt_reserved_memory_reg(int nodeoffset, const char *uname)
228{
229 rt_err_t err = RT_EOK;
230
231 rt_ubase_t base, size;
232 const fdt32_t *prop;
233 int len, t_len = (_root_addr_cells + _root_size_cells) * sizeof(fdt32_t);
234
235 if ((prop = fdt_getprop(_fdt, nodeoffset, "reg", &len)))
236 {
237 if (len && len % t_len != 0)
238 {
239 LOG_E("Reserved memory: invalid reg property in '%s', skipping node", uname);
240 err = -RT_EINVAL;
241 }
242 else
243 {
244 for (; len >= t_len; len -= t_len)
245 {
246 base = rt_fdt_next_cell(&prop, _root_addr_cells);
247 size = rt_fdt_next_cell(&prop, _root_size_cells);
248
249 if (!size)
250 {
251 continue;
252 }
253
254 rt_bool_t is_nomap = fdt_getprop(_fdt, nodeoffset, "no-map", RT_NULL) ? RT_TRUE : RT_FALSE;
255 base = rt_fdt_translate_address(_fdt, nodeoffset, base);
256
257 rt_memblock_reserve_memory(fdt_get_name(_fdt, nodeoffset, RT_NULL),
258 base, base + size, is_nomap);
259 }
260 }
261 }
262 else
263 {
264 err = -RT_EEMPTY;
265 }
266
267 return err;
268}
269
270static void fdt_scan_reserved_memory(void)
271{

Callers 1

fdt_scan_reserved_memoryFunction · 0.85

Calls 5

rt_fdt_next_cellFunction · 0.85
rt_fdt_translate_addressFunction · 0.85
fdt_getpropFunction · 0.50
fdt_get_nameFunction · 0.50

Tested by

no test coverage detected