fdt_supernod...depth_offset(9)
π fdt_supernod...depth_offset(9) β Kernel API Manual π
okay so bestie, we're doing fdt_supernode_atdepth_offset today. it's from the Kernel API Manual, section (9), and it's genuinely one of those "walk up the family tree" functions. no cap, it's giving ancestry.com but for device tree nodes. π³
β¨ NAME β¨
fdt_supernode_atdepth_offset β find a specific ancestor of a node π
π SYNOPSIS π
int fdt_supernode_atdepth_offset (const void *fdt , int nodeoffset ,
int supernodedepth , int *nodedepth );
π¦ ARGUMENTS π¦
fdtβ pointer to the device tree blob. the whole vibe. the main character.nodeoffsetβ offset of the node whose parent to find. like, whose ancestor are we hunting, bestie?supernodedepthβ depth of the ancestor to find. you're picking which level of the family tree you want. π§¬nodedepthβ pointer to an integer variable (will be overwritten) orNULL. heads up: she will get overwritten, that's literally the whole point. π
πΈ DESCRIPTION πΈ
so fdt_supernode_atdepth_offset finds an ancestor of the given node at a specific depth from the root β and like, the root itself has depth 0, its immediate subnodes depth 1, and so forth, all the way down. it's a whole staircase of ancestors. πͺ
the way that means this works:
fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, NULL);
will always return 0, the offset of the root node. always. every single time. iconic behavior tbh. π
and if the node at nodeoffset has depth D, then:
fdt_supernode_atdepth_offset(fdt, nodeoffset, D, NULL);
will return nodeoffset itself. she found herself, honestly relatable. π
π NOTE π
this function is expensive, bestie. π it must scan the device tree structure from the start to nodeoffset. no shortcuts, no vibes-based caching, just a full walk from the top every time. use it mindfully, fr fr.
π₯ RETURN π₯
on success, you get the structure block offset of the node at node offset's ancestor of depth supernodedepth (>=0). slay. β¨
but listen, things can go sideways:
-FDT_ERR_BADOFFSETβnodeoffsetdoes not refer to aBEGIN_NODEtag. wrong tag, wrong vibe. π-FDT_ERR_NOTFOUNDβsupernodedepthwas greater than the depth ofnodeoffset. you asked for an ancestor that literally does not exist up there. π-FDT_ERR_BADMAGICβ standard meaning-FDT_ERR_BADVERSIONβ standard meaning-FDT_ERR_BADSTATEβ standard meaning-FDT_ERR_BADSTRUCTUREβ standard meaning
π SEE ALSO π
Kernel file ./scripts/dtc/libfdt/libfdt.h β and honestly bestie, the whole libfdt friend group showed up to the group chat:
fdt_offset_ptr(9), fdt_next_tag(9), fdt_first_subnode(9), fdt_next_subnode(9), fdt_for_each_subnode(9), fdt_header_size(9), fdt_header_size_(9), fdt_check_header(9), fdt_move(9), fdt_check_full(9), fdt_get_string(9), fdt_string(9), fdt_find_max_phandle(9), fdt_get_max_phandle(9), fdt_generate_phandle(9), fdt_num_mem_rsv(9), fdt_get_mem_rsv(9), fdt_subnode_offset_namelen(9), fdt_subnode_offset(9), fdt_path_offset_namelen(9), fdt_path_offset(9), fdt_get_name(9), fdt_first_property_offset(9), fdt_next_property_offset(9), fdt_for_each_property_offset(9), fdt_get_property_by_offset(9), fdt_get_property_namelen(9), fdt_get_property(9), fdt_getprop_by_offset(9), fdt_getprop_namelen(9), fdt_getprop(9), fdt_get_phandle(9), fdt_get_alias_namelen(9), fdt_get_alias(9), fdt_get_symbol_namelen(9), fdt_get_symbol(9), fdt_get_path(9), fdt_node_depth(9), fdt_parent_offset(9), fdt_node_offset_by_prop_value(9), fdt_node_offset_by_phandle(9), fdt_node_check_compatible(9), fdt_node_offset_by_compatible(9), fdt_stringlist_contains(9), fdt_stringlist_count(9), fdt_stringlist_search(9), fdt_stringlist_get(9), FDT_MAX_NCELLS(9), fdt_address_cells(9), fdt_size_cells(9), fdt_setprop_inplace_namelen_partial(9), fdt_setprop_inplace(9), fdt_setprop_inplace_u32(9), fdt_setprop_inplace_u64(9), fdt_setprop_inplace_cell(9), fdt_nop_property(9), fdt_nop_node(9), fdt_create_with_flags(9), fdt_create(9), fdt_resize(9), fdt_add_reservemap_entry(9), fdt_finish_reservemap(9), fdt_begin_node(9), fdt_property(9), fdt_property_placeholder(9), fdt_end_node(9), fdt_finish(9), fdt_create_empty_tree(9), fdt_open_into(9), fdt_pack(9), fdt_add_mem_rsv(9), fdt_del_mem_rsv(9), fdt_set_name(9), fdt_setprop_namelen(9), fdt_setprop(9), fdt_setprop_placeholder_namelen(9), fdt_setprop_placeholder(9), fdt_setprop_u32(9), fdt_setprop_u64(9), fdt_setprop_cell(9), fdt_setprop_string(9), fdt_setprop_namelen_string(9), fdt_setprop_empty(9), fdt_appendprop(9), fdt_appendprop_u32(9), fdt_appendprop_u64(9), fdt_appendprop_cell(9), fdt_appendprop_string(9), fdt_appendprop_addrrange(9), fdt_delprop(9), fdt_add_subnode_namelen(9), fdt_add_subnode(9), fdt_del_node(9), fdt_overlay_apply(9), fdt_overlay_target_offset(9), fdt_strerror(9)
and that's the whole page, bestie!! π«Ά sourced straight from ./scripts/dtc/libfdt, dated October 2026, and yes the title up top really is fdt_supernod...depth_offset(9) β they truncated it, not me. π
β¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms