Lines Matching full:fdt

36 #define PROP_SUB_FDT "fdt"
107 struct page *fdt; member
120 struct mutex lock; /* protects KHO FDT finalization */
448 static void __init kho_mem_deserialize(const void *fdt) in kho_mem_deserialize() argument
454 mem = fdt_getprop(fdt, 0, PROP_PRESERVED_MEMORY_MAP, &len); in kho_mem_deserialize()
684 const char *name, const void *fdt) in kho_debugfs_fdt_add() argument
693 f->wrapper.data = (void *)fdt; in kho_debugfs_fdt_add()
694 f->wrapper.size = fdt_totalsize(fdt); in kho_debugfs_fdt_add()
709 * kho_add_subtree - record the physical address of a sub FDT in KHO root tree.
712 * @fdt: the sub tree blob.
714 * Creates a new child node named @name in KHO root FDT and records
715 * the physical address of @fdt. The pages of @fdt must also be preserved
723 int kho_add_subtree(struct kho_serialization *ser, const char *name, void *fdt) in kho_add_subtree() argument
726 u64 phys = (u64)virt_to_phys(fdt); in kho_add_subtree()
727 void *root = page_to_virt(ser->fdt); in kho_add_subtree()
736 return kho_debugfs_fdt_add(&ser->fdt_list, ser->sub_fdt_dir, name, fdt); in kho_add_subtree()
1079 "fdt", page_to_virt(kho_out.ser.fdt)); in kho_out_update_debugfs_fdt()
1128 void *fdt = page_to_virt(kho_out.ser.fdt); in kho_finalize() local
1130 err |= fdt_create(fdt, PAGE_SIZE); in kho_finalize()
1131 err |= fdt_finish_reservemap(fdt); in kho_finalize()
1132 err |= fdt_begin_node(fdt, ""); in kho_finalize()
1133 err |= fdt_property_string(fdt, "compatible", KHO_FDT_COMPATIBLE); in kho_finalize()
1135 * Reserve the preserved-memory-map property in the root FDT, so in kho_finalize()
1139 err |= fdt_property_placeholder(fdt, PROP_PRESERVED_MEMORY_MAP, in kho_finalize()
1145 err = kho_preserve_folio(page_folio(kho_out.ser.fdt)); in kho_finalize()
1161 err |= fdt_end_node(fdt); in kho_finalize()
1162 err |= fdt_finish(fdt); in kho_finalize()
1291 * operation with KHO enabled, by verifying that a valid KHO FDT
1307 * kho_retrieve_subtree - retrieve a preserved sub FDT by its name.
1308 * @name: the name of the sub FDT passed to kho_add_subtree().
1309 * @phys: if found, the physical address of the sub FDT is stored in @phys.
1311 * Retrieve a preserved sub FDT named @name and store its physical
1318 const void *fdt = kho_get_fdt(); in kho_retrieve_subtree() local
1322 if (!fdt) in kho_retrieve_subtree()
1328 offset = fdt_subnode_offset(fdt, 0, name); in kho_retrieve_subtree()
1332 val = fdt_getprop(fdt, offset, PROP_SUB_FDT, &len); in kho_retrieve_subtree()
1344 static __init int kho_in_debugfs_init(const void *fdt) in kho_in_debugfs_init() argument
1359 err = kho_debugfs_fdt_add(&kho_in.fdt_list, kho_in.dir, "fdt", fdt); in kho_in_debugfs_init()
1363 fdt_for_each_subnode(child, fdt, 0) { in kho_in_debugfs_init()
1365 const char *name = fdt_get_name(fdt, child, NULL); in kho_in_debugfs_init()
1368 fdt_phys = fdt_getprop(fdt, child, "fdt", &len); in kho_in_debugfs_init()
1372 pr_warn("node `%s`'s prop `fdt` has invalid length: %d\n", in kho_in_debugfs_init()
1379 pr_warn("failed to add fdt `%s` to debugfs: %d\n", name, in kho_in_debugfs_init()
1395 const void *fdt = kho_get_fdt(); in kho_init() local
1400 kho_out.ser.fdt = alloc_page(GFP_KERNEL); in kho_init()
1401 if (!kho_out.ser.fdt) { in kho_init()
1416 if (fdt) { in kho_init()
1417 err = kho_in_debugfs_init(fdt); in kho_init()
1424 pr_err("failed exposing handover FDT in debugfs: %d\n", in kho_init()
1443 put_page(kho_out.ser.fdt); in kho_init()
1444 kho_out.ser.fdt = NULL; in kho_init()
1492 pr_warn("failed to restore folio for KHO fdt\n"); in kho_memory_init()
1501 void *fdt = NULL; in kho_populate() local
1506 /* Validate the input FDT */ in kho_populate()
1507 fdt = early_memremap(fdt_phys, fdt_len); in kho_populate()
1508 if (!fdt) { in kho_populate()
1509 pr_warn("setup: failed to memremap FDT (0x%llx)\n", fdt_phys); in kho_populate()
1513 err = fdt_check_header(fdt); in kho_populate()
1515 pr_warn("setup: handover FDT (0x%llx) is invalid: %d\n", in kho_populate()
1520 err = fdt_node_check_compatible(fdt, 0, KHO_FDT_COMPATIBLE); in kho_populate()
1522 pr_warn("setup: handover FDT (0x%llx) is incompatible with '%s': %d\n", in kho_populate()
1572 if (fdt) in kho_populate()
1573 early_memunmap(fdt, fdt_len); in kho_populate()
1591 image->kho.fdt = page_to_phys(kho_out.ser.fdt); in kho_fill_kimage()