Lines Matching +full:prop +full:-
1 // SPDX-License-Identifier: GPL-2.0-or-later
26 last_lmb = &drmem_info->lmbs[drmem_info->n_lmbs - 1]; in drmem_lmb_memory_max()
27 return last_lmb->base_addr + drmem_lmb_size(); in drmem_lmb_memory_max()
36 return lmb->flags & ~DRMEM_LMB_RESERVED; in drmem_lmb_flags()
39 static struct property *clone_property(struct property *prop, u32 prop_sz) in clone_property() argument
47 new_prop->name = kstrdup(prop->name, GFP_KERNEL); in clone_property()
48 new_prop->value = kzalloc(prop_sz, GFP_KERNEL); in clone_property()
49 if (!new_prop->name || !new_prop->value) { in clone_property()
50 kfree(new_prop->name); in clone_property()
51 kfree(new_prop->value); in clone_property()
56 new_prop->length = prop_sz; in clone_property()
64 struct property *prop) in drmem_update_dt_v1() argument
71 new_prop = clone_property(prop, prop->length); in drmem_update_dt_v1()
73 return -1; in drmem_update_dt_v1()
75 p = new_prop->value; in drmem_update_dt_v1()
76 *p++ = cpu_to_be32(drmem_info->n_lmbs); in drmem_update_dt_v1()
81 dr_cell->base_addr = cpu_to_be64(lmb->base_addr); in drmem_update_dt_v1()
82 dr_cell->drc_index = cpu_to_be32(lmb->drc_index); in drmem_update_dt_v1()
83 dr_cell->aa_index = cpu_to_be32(lmb->aa_index); in drmem_update_dt_v1()
84 dr_cell->flags = cpu_to_be32(drmem_lmb_flags(lmb)); in drmem_update_dt_v1()
96 dr_cell->base_addr = cpu_to_be64(lmb->base_addr); in init_drconf_v2_cell()
97 dr_cell->drc_index = cpu_to_be32(lmb->drc_index); in init_drconf_v2_cell()
98 dr_cell->aa_index = cpu_to_be32(lmb->aa_index); in init_drconf_v2_cell()
99 dr_cell->flags = cpu_to_be32(drmem_lmb_flags(lmb)); in init_drconf_v2_cell()
103 struct property *prop) in drmem_update_dt_v2() argument
121 if (prev_lmb->aa_index != lmb->aa_index || in drmem_update_dt_v2()
129 new_prop = clone_property(prop, prop_sz); in drmem_update_dt_v2()
131 return -1; in drmem_update_dt_v2()
133 p = new_prop->value; in drmem_update_dt_v2()
150 if (prev_lmb->aa_index != lmb->aa_index || in drmem_update_dt_v2()
153 dr_cell->seq_lmbs = cpu_to_be32(seq_lmbs); in drmem_update_dt_v2()
166 dr_cell->seq_lmbs = cpu_to_be32(seq_lmbs); in drmem_update_dt_v2()
174 struct property *prop; in drmem_update_dt() local
175 int rc = -1; in drmem_update_dt()
177 memory = of_find_node_by_path("/ibm,dynamic-reconfiguration-memory"); in drmem_update_dt()
179 return -1; in drmem_update_dt()
181 prop = of_find_property(memory, "ibm,dynamic-memory", NULL); in drmem_update_dt()
182 if (prop) { in drmem_update_dt()
183 rc = drmem_update_dt_v1(memory, prop); in drmem_update_dt()
185 prop = of_find_property(memory, "ibm,dynamic-memory-v2", NULL); in drmem_update_dt()
186 if (prop) in drmem_update_dt()
187 rc = drmem_update_dt_v2(memory, prop); in drmem_update_dt()
195 const __be32 **prop) in read_drconf_v1_cell() argument
197 const __be32 *p = *prop; in read_drconf_v1_cell()
199 lmb->base_addr = of_read_number(p, n_root_addr_cells); in read_drconf_v1_cell()
201 lmb->drc_index = of_read_number(p++, 1); in read_drconf_v1_cell()
205 lmb->aa_index = of_read_number(p++, 1); in read_drconf_v1_cell()
206 lmb->flags = of_read_number(p++, 1); in read_drconf_v1_cell()
208 *prop = p; in read_drconf_v1_cell()
212 __walk_drmem_v1_lmbs(const __be32 *prop, const __be32 *usm, void *data, in __walk_drmem_v1_lmbs() argument
219 n_lmbs = of_read_number(prop++, 1); in __walk_drmem_v1_lmbs()
221 read_drconf_v1_cell(&lmb, &prop); in __walk_drmem_v1_lmbs()
231 const __be32 **prop) in read_drconf_v2_cell() argument
233 const __be32 *p = *prop; in read_drconf_v2_cell()
235 dr_cell->seq_lmbs = of_read_number(p++, 1); in read_drconf_v2_cell()
236 dr_cell->base_addr = of_read_number(p, n_root_addr_cells); in read_drconf_v2_cell()
238 dr_cell->drc_index = of_read_number(p++, 1); in read_drconf_v2_cell()
239 dr_cell->aa_index = of_read_number(p++, 1); in read_drconf_v2_cell()
240 dr_cell->flags = of_read_number(p++, 1); in read_drconf_v2_cell()
242 *prop = p; in read_drconf_v2_cell()
246 __walk_drmem_v2_lmbs(const __be32 *prop, const __be32 *usm, void *data, in __walk_drmem_v2_lmbs() argument
254 lmb_sets = of_read_number(prop++, 1); in __walk_drmem_v2_lmbs()
256 read_drconf_v2_cell(&dr_cell, &prop); in __walk_drmem_v2_lmbs()
281 const __be32 *prop, *usm; in walk_drmem_lmbs_early() local
282 int len, ret = -ENODEV; in walk_drmem_lmbs_early()
284 prop = of_get_flat_dt_prop(node, "ibm,lmb-size", &len); in walk_drmem_lmbs_early()
285 if (!prop || len < dt_root_size_cells * sizeof(__be32)) in walk_drmem_lmbs_early()
292 drmem_info->lmb_size = dt_mem_next_cell(dt_root_size_cells, &prop); in walk_drmem_lmbs_early()
294 usm = of_get_flat_dt_prop(node, "linux,drconf-usable-memory", &len); in walk_drmem_lmbs_early()
296 prop = of_get_flat_dt_prop(node, "ibm,dynamic-memory", &len); in walk_drmem_lmbs_early()
297 if (prop) { in walk_drmem_lmbs_early()
298 ret = __walk_drmem_v1_lmbs(prop, usm, data, func); in walk_drmem_lmbs_early()
300 prop = of_get_flat_dt_prop(node, "ibm,dynamic-memory-v2", in walk_drmem_lmbs_early()
302 if (prop) in walk_drmem_lmbs_early()
303 ret = __walk_drmem_v2_lmbs(prop, usm, data, func); in walk_drmem_lmbs_early()
314 const __be32 *prop; in init_drmem_lmb_size() local
317 if (drmem_info->lmb_size) in init_drmem_lmb_size()
320 prop = of_get_property(dn, "ibm,lmb-size", &len); in init_drmem_lmb_size()
321 if (!prop || len < n_root_size_cells * sizeof(__be32)) { in init_drmem_lmb_size()
323 return -1; in init_drmem_lmb_size()
326 drmem_info->lmb_size = of_read_number(prop, n_root_size_cells); in init_drmem_lmb_size()
331 * Returns the property linux,drconf-usable-memory if
333 * added by kexec-tools)
337 const __be32 *prop; in of_get_usable_memory() local
340 prop = of_get_property(dn, "linux,drconf-usable-memory", &len); in of_get_usable_memory()
341 if (!prop || len < sizeof(unsigned int)) in of_get_usable_memory()
344 return prop; in of_get_usable_memory()
350 const __be32 *prop, *usm; in walk_drmem_lmbs() local
351 int ret = -ENODEV; in walk_drmem_lmbs()
367 prop = of_get_property(dn, "ibm,dynamic-memory", NULL); in walk_drmem_lmbs()
368 if (prop) { in walk_drmem_lmbs()
369 ret = __walk_drmem_v1_lmbs(prop, usm, data, func); in walk_drmem_lmbs()
371 prop = of_get_property(dn, "ibm,dynamic-memory-v2", NULL); in walk_drmem_lmbs()
372 if (prop) in walk_drmem_lmbs()
373 ret = __walk_drmem_v2_lmbs(prop, usm, data, func); in walk_drmem_lmbs()
379 static void __init init_drmem_v1_lmbs(const __be32 *prop) in init_drmem_v1_lmbs() argument
383 drmem_info->n_lmbs = of_read_number(prop++, 1); in init_drmem_v1_lmbs()
384 if (drmem_info->n_lmbs == 0) in init_drmem_v1_lmbs()
387 drmem_info->lmbs = kcalloc(drmem_info->n_lmbs, sizeof(*lmb), in init_drmem_v1_lmbs()
389 if (!drmem_info->lmbs) in init_drmem_v1_lmbs()
393 read_drconf_v1_cell(lmb, &prop); in init_drmem_v1_lmbs()
396 static void __init init_drmem_v2_lmbs(const __be32 *prop) in init_drmem_v2_lmbs() argument
404 lmb_sets = of_read_number(prop++, 1); in init_drmem_v2_lmbs()
409 p = prop; in init_drmem_v2_lmbs()
412 drmem_info->n_lmbs += dr_cell.seq_lmbs; in init_drmem_v2_lmbs()
415 drmem_info->lmbs = kcalloc(drmem_info->n_lmbs, sizeof(*lmb), in init_drmem_v2_lmbs()
417 if (!drmem_info->lmbs) in init_drmem_v2_lmbs()
422 p = prop; in init_drmem_v2_lmbs()
428 lmb = &drmem_info->lmbs[lmb_index++]; in init_drmem_v2_lmbs()
430 lmb->base_addr = dr_cell.base_addr; in init_drmem_v2_lmbs()
431 dr_cell.base_addr += drmem_info->lmb_size; in init_drmem_v2_lmbs()
433 lmb->drc_index = dr_cell.drc_index; in init_drmem_v2_lmbs()
436 lmb->aa_index = dr_cell.aa_index; in init_drmem_v2_lmbs()
437 lmb->flags = dr_cell.flags; in init_drmem_v2_lmbs()
445 const __be32 *prop; in drmem_init() local
447 dn = of_find_node_by_path("/ibm,dynamic-reconfiguration-memory"); in drmem_init()
458 prop = of_get_property(dn, "ibm,dynamic-memory", NULL); in drmem_init()
459 if (prop) { in drmem_init()
460 init_drmem_v1_lmbs(prop); in drmem_init()
462 prop = of_get_property(dn, "ibm,dynamic-memory-v2", NULL); in drmem_init()
463 if (prop) in drmem_init()
464 init_drmem_v2_lmbs(prop); in drmem_init()