Lines Matching +full:dt +full:- +full:node

1 // SPDX-License-Identifier: GPL-2.0+
18 int ofnode_read_u32(ofnode node, const char *propname, u32 *outp) in ofnode_read_u32() argument
20 assert(ofnode_valid(node)); in ofnode_read_u32()
23 if (ofnode_is_np(node)) { in ofnode_read_u32()
24 return of_read_u32(ofnode_to_np(node), propname, outp); in ofnode_read_u32()
29 cell = fdt_getprop(gd->fdt_blob, ofnode_to_offset(node), in ofnode_read_u32()
33 return -EINVAL; in ofnode_read_u32()
42 int ofnode_read_u32_default(ofnode node, const char *propname, u32 def) in ofnode_read_u32_default() argument
44 assert(ofnode_valid(node)); in ofnode_read_u32_default()
45 ofnode_read_u32(node, propname, &def); in ofnode_read_u32_default()
50 int ofnode_read_s32_default(ofnode node, const char *propname, s32 def) in ofnode_read_s32_default() argument
52 assert(ofnode_valid(node)); in ofnode_read_s32_default()
53 ofnode_read_u32(node, propname, (u32 *)&def); in ofnode_read_s32_default()
58 int ofnode_read_u64(ofnode node, const char *propname, u64 *outp) in ofnode_read_u64() argument
63 assert(ofnode_valid(node)); in ofnode_read_u64()
66 if (ofnode_is_np(node)) in ofnode_read_u64()
67 return of_read_u64(ofnode_to_np(node), propname, outp); in ofnode_read_u64()
69 cell = fdt_getprop(gd->fdt_blob, ofnode_to_offset(node), propname, in ofnode_read_u64()
73 return -EINVAL; in ofnode_read_u64()
82 int ofnode_read_u64_default(ofnode node, const char *propname, u64 def) in ofnode_read_u64_default() argument
84 assert(ofnode_valid(node)); in ofnode_read_u64_default()
85 ofnode_read_u64(node, propname, &def); in ofnode_read_u64_default()
90 bool ofnode_read_bool(ofnode node, const char *propname) in ofnode_read_bool() argument
94 assert(ofnode_valid(node)); in ofnode_read_bool()
97 prop = ofnode_get_property(node, propname, NULL); in ofnode_read_bool()
104 const char *ofnode_read_string(ofnode node, const char *propname) in ofnode_read_string() argument
107 int len = -1; in ofnode_read_string()
109 assert(ofnode_valid(node)); in ofnode_read_string()
112 if (ofnode_is_np(node)) { in ofnode_read_string()
114 ofnode_to_np(node), propname, NULL); in ofnode_read_string()
117 str = prop->value; in ofnode_read_string()
118 len = prop->length; in ofnode_read_string()
121 str = fdt_getprop(gd->fdt_blob, ofnode_to_offset(node), in ofnode_read_string()
137 ofnode ofnode_find_subnode(ofnode node, const char *subnode_name) in ofnode_find_subnode() argument
141 assert(ofnode_valid(node)); in ofnode_find_subnode()
144 if (ofnode_is_np(node)) { in ofnode_find_subnode()
145 const struct device_node *np = ofnode_to_np(node); in ofnode_find_subnode()
147 for (np = np->child; np; np = np->sibling) { in ofnode_find_subnode()
148 if (!strcmp(subnode_name, np->name)) in ofnode_find_subnode()
153 int ooffset = fdt_subnode_offset(gd->fdt_blob, in ofnode_find_subnode()
154 ofnode_to_offset(node), subnode_name); in ofnode_find_subnode()
163 int ofnode_read_u32_array(ofnode node, const char *propname, in ofnode_read_u32_array() argument
166 assert(ofnode_valid(node)); in ofnode_read_u32_array()
169 if (ofnode_is_np(node)) { in ofnode_read_u32_array()
170 return of_read_u32_array(ofnode_to_np(node), propname, in ofnode_read_u32_array()
173 return fdtdec_get_int_array(gd->fdt_blob, in ofnode_read_u32_array()
174 ofnode_to_offset(node), propname, in ofnode_read_u32_array()
179 ofnode ofnode_first_subnode(ofnode node) in ofnode_first_subnode() argument
181 assert(ofnode_valid(node)); in ofnode_first_subnode()
182 if (ofnode_is_np(node)) in ofnode_first_subnode()
183 return np_to_ofnode(node.np->child); in ofnode_first_subnode()
186 fdt_first_subnode(gd->fdt_blob, ofnode_to_offset(node))); in ofnode_first_subnode()
189 ofnode ofnode_next_subnode(ofnode node) in ofnode_next_subnode() argument
191 assert(ofnode_valid(node)); in ofnode_next_subnode()
192 if (ofnode_is_np(node)) in ofnode_next_subnode()
193 return np_to_ofnode(node.np->sibling); in ofnode_next_subnode()
196 fdt_next_subnode(gd->fdt_blob, ofnode_to_offset(node))); in ofnode_next_subnode()
199 ofnode ofnode_get_parent(ofnode node) in ofnode_get_parent() argument
203 assert(ofnode_valid(node)); in ofnode_get_parent()
204 if (ofnode_is_np(node)) in ofnode_get_parent()
205 parent = np_to_ofnode(of_get_parent(ofnode_to_np(node))); in ofnode_get_parent()
207 parent.of_offset = fdt_parent_offset(gd->fdt_blob, in ofnode_get_parent()
208 ofnode_to_offset(node)); in ofnode_get_parent()
213 const char *ofnode_get_name(ofnode node) in ofnode_get_name() argument
215 assert(ofnode_valid(node)); in ofnode_get_name()
216 if (ofnode_is_np(node)) in ofnode_get_name()
217 return strrchr(node.np->full_name, '/') + 1; in ofnode_get_name()
219 return fdt_get_name(gd->fdt_blob, ofnode_to_offset(node), NULL); in ofnode_get_name()
224 ofnode node; in ofnode_get_by_phandle() local
227 node = np_to_ofnode(of_find_node_by_phandle(phandle)); in ofnode_get_by_phandle()
229 node.of_offset = fdt_node_offset_by_phandle(gd->fdt_blob, in ofnode_get_by_phandle()
232 return node; in ofnode_get_by_phandle()
235 int ofnode_read_size(ofnode node, const char *propname) in ofnode_read_size() argument
239 if (ofnode_is_np(node)) { in ofnode_read_size()
241 ofnode_to_np(node), propname, NULL); in ofnode_read_size()
244 return prop->length; in ofnode_read_size()
246 if (fdt_getprop(gd->fdt_blob, ofnode_to_offset(node), propname, in ofnode_read_size()
251 return -EINVAL; in ofnode_read_size()
254 fdt_addr_t ofnode_get_addr_index(ofnode node, int index) in ofnode_get_addr_index() argument
259 if (ofnode_is_np(node)) { in ofnode_get_addr_index()
263 prop_val = of_get_address(ofnode_to_np(node), index, in ofnode_get_addr_index()
268 ns = of_n_size_cells(ofnode_to_np(node)); in ofnode_get_addr_index()
271 return of_translate_address(ofnode_to_np(node), prop_val); in ofnode_get_addr_index()
273 na = of_n_addr_cells(ofnode_to_np(node)); in ofnode_get_addr_index()
277 na = ofnode_read_simple_addr_cells(ofnode_get_parent(node)); in ofnode_get_addr_index()
278 ns = ofnode_read_simple_size_cells(ofnode_get_parent(node)); in ofnode_get_addr_index()
279 return fdtdec_get_addr_size_fixed(gd->fdt_blob, in ofnode_get_addr_index()
280 ofnode_to_offset(node), "reg", in ofnode_get_addr_index()
287 fdt_addr_t ofnode_get_addr(ofnode node) in ofnode_get_addr() argument
289 return ofnode_get_addr_index(node, 0); in ofnode_get_addr()
292 int ofnode_stringlist_search(ofnode node, const char *property, in ofnode_stringlist_search() argument
295 if (ofnode_is_np(node)) { in ofnode_stringlist_search()
296 return of_property_match_string(ofnode_to_np(node), in ofnode_stringlist_search()
301 ret = fdt_stringlist_search(gd->fdt_blob, in ofnode_stringlist_search()
302 ofnode_to_offset(node), property, in ofnode_stringlist_search()
304 if (ret == -FDT_ERR_NOTFOUND) in ofnode_stringlist_search()
305 return -ENODATA; in ofnode_stringlist_search()
307 return -EINVAL; in ofnode_stringlist_search()
313 int ofnode_read_string_index(ofnode node, const char *property, int index, in ofnode_read_string_index() argument
316 if (ofnode_is_np(node)) { in ofnode_read_string_index()
317 return of_property_read_string_index(ofnode_to_np(node), in ofnode_read_string_index()
322 *outp = fdt_stringlist_get(gd->fdt_blob, ofnode_to_offset(node), in ofnode_read_string_index()
325 return -EINVAL; in ofnode_read_string_index()
330 int ofnode_read_string_count(ofnode node, const char *property) in ofnode_read_string_count() argument
332 if (ofnode_is_np(node)) { in ofnode_read_string_count()
333 return of_property_count_strings(ofnode_to_np(node), property); in ofnode_read_string_count()
335 return fdt_stringlist_count(gd->fdt_blob, in ofnode_read_string_count()
336 ofnode_to_offset(node), property); in ofnode_read_string_count()
344 out->node = offset_to_ofnode(in->node); in ofnode_from_fdtdec_phandle_args()
345 out->args_count = in->args_count; in ofnode_from_fdtdec_phandle_args()
346 memcpy(out->args, in->args, sizeof(out->args)); in ofnode_from_fdtdec_phandle_args()
353 out->node = np_to_ofnode(in->np); in ofnode_from_of_phandle_args()
354 out->args_count = in->args_count; in ofnode_from_of_phandle_args()
355 memcpy(out->args, in->args, sizeof(out->args)); in ofnode_from_of_phandle_args()
358 int ofnode_parse_phandle_with_args(ofnode node, const char *list_name, in ofnode_parse_phandle_with_args() argument
363 if (ofnode_is_np(node)) { in ofnode_parse_phandle_with_args()
367 ret = of_parse_phandle_with_args(ofnode_to_np(node), in ofnode_parse_phandle_with_args()
377 ret = fdtdec_parse_phandle_with_args(gd->fdt_blob, in ofnode_parse_phandle_with_args()
378 ofnode_to_offset(node), in ofnode_parse_phandle_with_args()
389 int ofnode_count_phandle_with_args(ofnode node, const char *list_name, in ofnode_count_phandle_with_args() argument
392 if (ofnode_is_np(node)) in ofnode_count_phandle_with_args()
393 return of_count_phandle_with_args(ofnode_to_np(node), in ofnode_count_phandle_with_args()
396 return fdtdec_parse_phandle_with_args(gd->fdt_blob, in ofnode_count_phandle_with_args()
397 ofnode_to_offset(node), list_name, cells_name, in ofnode_count_phandle_with_args()
398 0, -1, NULL); in ofnode_count_phandle_with_args()
406 return offset_to_ofnode(fdt_path_offset(gd->fdt_blob, path)); in ofnode_path()
429 static int decode_timing_property(ofnode node, const char *name, in decode_timing_property() argument
434 length = ofnode_read_size(node, name); in decode_timing_property()
437 ofnode_get_name(node), name); in decode_timing_property()
442 result->typ = ofnode_read_u32_default(node, name, 0); in decode_timing_property()
443 result->min = result->typ; in decode_timing_property()
444 result->max = result->typ; in decode_timing_property()
446 ret = ofnode_read_u32_array(node, name, &result->min, 3); in decode_timing_property()
453 struct display_timing *dt) in ofnode_decode_display_timing() argument
456 ofnode timings, node; in ofnode_decode_display_timing() local
460 timings = ofnode_find_subnode(parent, "display-timings"); in ofnode_decode_display_timing()
462 return -EINVAL; in ofnode_decode_display_timing()
465 ofnode_for_each_subnode(node, timings) { in ofnode_decode_display_timing()
470 if (!ofnode_valid(node)) in ofnode_decode_display_timing()
471 return -EINVAL; in ofnode_decode_display_timing()
473 memset(dt, 0, sizeof(*dt)); in ofnode_decode_display_timing()
475 ret |= decode_timing_property(node, "hback-porch", &dt->hback_porch); in ofnode_decode_display_timing()
476 ret |= decode_timing_property(node, "hfront-porch", &dt->hfront_porch); in ofnode_decode_display_timing()
477 ret |= decode_timing_property(node, "hactive", &dt->hactive); in ofnode_decode_display_timing()
478 ret |= decode_timing_property(node, "hsync-len", &dt->hsync_len); in ofnode_decode_display_timing()
479 ret |= decode_timing_property(node, "vback-porch", &dt->vback_porch); in ofnode_decode_display_timing()
480 ret |= decode_timing_property(node, "vfront-porch", &dt->vfront_porch); in ofnode_decode_display_timing()
481 ret |= decode_timing_property(node, "vactive", &dt->vactive); in ofnode_decode_display_timing()
482 ret |= decode_timing_property(node, "vsync-len", &dt->vsync_len); in ofnode_decode_display_timing()
483 ret |= decode_timing_property(node, "clock-frequency", &dt->pixelclock); in ofnode_decode_display_timing()
485 dt->flags = 0; in ofnode_decode_display_timing()
486 val = ofnode_read_u32_default(node, "vsync-active", -1); in ofnode_decode_display_timing()
487 if (val != -1) { in ofnode_decode_display_timing()
488 dt->flags |= val ? DISPLAY_FLAGS_VSYNC_HIGH : in ofnode_decode_display_timing()
491 val = ofnode_read_u32_default(node, "hsync-active", -1); in ofnode_decode_display_timing()
492 if (val != -1) { in ofnode_decode_display_timing()
493 dt->flags |= val ? DISPLAY_FLAGS_HSYNC_HIGH : in ofnode_decode_display_timing()
496 val = ofnode_read_u32_default(node, "de-active", -1); in ofnode_decode_display_timing()
497 if (val != -1) { in ofnode_decode_display_timing()
498 dt->flags |= val ? DISPLAY_FLAGS_DE_HIGH : in ofnode_decode_display_timing()
501 val = ofnode_read_u32_default(node, "pixelclk-active", -1); in ofnode_decode_display_timing()
502 if (val != -1) { in ofnode_decode_display_timing()
503 dt->flags |= val ? DISPLAY_FLAGS_PIXDATA_POSEDGE : in ofnode_decode_display_timing()
507 if (ofnode_read_bool(node, "interlaced")) in ofnode_decode_display_timing()
508 dt->flags |= DISPLAY_FLAGS_INTERLACED; in ofnode_decode_display_timing()
509 if (ofnode_read_bool(node, "doublescan")) in ofnode_decode_display_timing()
510 dt->flags |= DISPLAY_FLAGS_DOUBLESCAN; in ofnode_decode_display_timing()
511 if (ofnode_read_bool(node, "doubleclk")) in ofnode_decode_display_timing()
512 dt->flags |= DISPLAY_FLAGS_DOUBLECLK; in ofnode_decode_display_timing()
517 const void *ofnode_get_property(ofnode node, const char *propname, int *lenp) in ofnode_get_property() argument
519 if (ofnode_is_np(node)) in ofnode_get_property()
520 return of_get_property(ofnode_to_np(node), propname, lenp); in ofnode_get_property()
522 return fdt_getprop(gd->fdt_blob, ofnode_to_offset(node), in ofnode_get_property()
526 bool ofnode_is_available(ofnode node) in ofnode_is_available() argument
528 if (ofnode_is_np(node)) in ofnode_is_available()
529 return of_device_is_available(ofnode_to_np(node)); in ofnode_is_available()
531 return fdtdec_get_is_enabled(gd->fdt_blob, in ofnode_is_available()
532 ofnode_to_offset(node)); in ofnode_is_available()
535 fdt_addr_t ofnode_get_addr_size(ofnode node, const char *property, in ofnode_get_addr_size() argument
538 if (ofnode_is_np(node)) { in ofnode_get_addr_size()
541 const struct device_node *np = ofnode_to_np(node); in ofnode_get_addr_size()
555 return fdtdec_get_addr_size(gd->fdt_blob, in ofnode_get_addr_size()
556 ofnode_to_offset(node), property, in ofnode_get_addr_size()
561 const uint8_t *ofnode_read_u8_array_ptr(ofnode node, const char *propname, in ofnode_read_u8_array_ptr() argument
564 if (ofnode_is_np(node)) { in ofnode_read_u8_array_ptr()
565 const struct device_node *np = ofnode_to_np(node); in ofnode_read_u8_array_ptr()
574 return fdtdec_locate_byte_array(gd->fdt_blob, in ofnode_read_u8_array_ptr()
575 ofnode_to_offset(node), propname, sz); in ofnode_read_u8_array_ptr()
579 int ofnode_read_pci_addr(ofnode node, enum fdt_pci_space type, in ofnode_read_pci_addr() argument
584 int ret = -ENOENT; in ofnode_read_pci_addr()
590 * the value of the node's parent node's #address-cells and in ofnode_read_pci_addr()
591 * #size-cells. They need to be 3 and 2 accordingly. However, in ofnode_read_pci_addr()
594 cell = ofnode_get_property(node, propname, &len); in ofnode_read_pci_addr()
608 addr->phys_hi = fdt32_to_cpu(cell[0]); in ofnode_read_pci_addr()
609 addr->phys_mid = fdt32_to_cpu(cell[1]); in ofnode_read_pci_addr()
610 addr->phys_lo = fdt32_to_cpu(cell[1]); in ofnode_read_pci_addr()
619 ret = -ENXIO; in ofnode_read_pci_addr()
626 ret = -EINVAL; in ofnode_read_pci_addr()
633 int ofnode_read_pci_vendev(ofnode node, u16 *vendor, u16 *device) in ofnode_read_pci_vendev() argument
638 list = ofnode_get_property(node, "compatible", &len); in ofnode_read_pci_vendev()
640 return -ENOENT; in ofnode_read_pci_vendev()
666 return -ENOENT; in ofnode_read_pci_vendev()
669 int ofnode_read_addr_cells(ofnode node) in ofnode_read_addr_cells() argument
671 if (ofnode_is_np(node)) in ofnode_read_addr_cells()
672 return of_n_addr_cells(ofnode_to_np(node)); in ofnode_read_addr_cells()
674 return fdt_address_cells(gd->fdt_blob, ofnode_to_offset(node)); in ofnode_read_addr_cells()
677 int ofnode_read_size_cells(ofnode node) in ofnode_read_size_cells() argument
679 if (ofnode_is_np(node)) in ofnode_read_size_cells()
680 return of_n_size_cells(ofnode_to_np(node)); in ofnode_read_size_cells()
682 return fdt_size_cells(gd->fdt_blob, ofnode_to_offset(node)); in ofnode_read_size_cells()
685 int ofnode_read_simple_addr_cells(ofnode node) in ofnode_read_simple_addr_cells() argument
687 if (ofnode_is_np(node)) in ofnode_read_simple_addr_cells()
688 return of_simple_addr_cells(ofnode_to_np(node)); in ofnode_read_simple_addr_cells()
690 return fdt_address_cells(gd->fdt_blob, ofnode_to_offset(node)); in ofnode_read_simple_addr_cells()
693 int ofnode_read_simple_size_cells(ofnode node) in ofnode_read_simple_size_cells() argument
695 if (ofnode_is_np(node)) in ofnode_read_simple_size_cells()
696 return of_simple_size_cells(ofnode_to_np(node)); in ofnode_read_simple_size_cells()
698 return fdt_size_cells(gd->fdt_blob, ofnode_to_offset(node)); in ofnode_read_simple_size_cells()
701 bool ofnode_pre_reloc(ofnode node) in ofnode_pre_reloc() argument
703 if (ofnode_read_bool(node, "u-boot,dm-pre-reloc")) in ofnode_pre_reloc()
705 if (ofnode_read_bool(node, "u-boot,dm-pre-proper")) in ofnode_pre_reloc()
709 if (ofnode_read_bool(node, "u-boot,dm-tpl")) in ofnode_pre_reloc()
712 if (ofnode_read_bool(node, "u-boot,dm-spl")) in ofnode_pre_reloc()
717 * count as handled pre-relocation for later second init. in ofnode_pre_reloc()
719 if (ofnode_read_bool(node, "u-boot,dm-spl") || in ofnode_pre_reloc()
720 ofnode_read_bool(node, "u-boot,dm-tpl")) in ofnode_pre_reloc()
727 int ofnode_read_resource(ofnode node, uint index, struct resource *res) in ofnode_read_resource() argument
729 if (ofnode_is_np(node)) { in ofnode_read_resource()
730 return of_address_to_resource(ofnode_to_np(node), index, res); in ofnode_read_resource()
735 ret = fdt_get_resource(gd->fdt_blob, ofnode_to_offset(node), in ofnode_read_resource()
738 return -EINVAL; in ofnode_read_resource()
740 res->start = fres.start; in ofnode_read_resource()
741 res->end = fres.end; in ofnode_read_resource()
747 int ofnode_read_resource_byname(ofnode node, const char *name, in ofnode_read_resource_byname() argument
752 index = ofnode_stringlist_search(node, "reg-names", name); in ofnode_read_resource_byname()
756 return ofnode_read_resource(node, index, res); in ofnode_read_resource_byname()
759 u64 ofnode_translate_address(ofnode node, const fdt32_t *in_addr) in ofnode_translate_address() argument
761 if (ofnode_is_np(node)) in ofnode_translate_address()
762 return of_translate_address(ofnode_to_np(node), in_addr); in ofnode_translate_address()
764 return fdt_translate_address(gd->fdt_blob, ofnode_to_offset(node), in_addr); in ofnode_translate_address()
767 int ofnode_device_is_compatible(ofnode node, const char *compat) in ofnode_device_is_compatible() argument
769 if (ofnode_is_np(node)) in ofnode_device_is_compatible()
770 return of_device_is_compatible(ofnode_to_np(node), compat, in ofnode_device_is_compatible()
773 return !fdt_node_check_compatible(gd->fdt_blob, in ofnode_device_is_compatible()
774 ofnode_to_offset(node), in ofnode_device_is_compatible()
786 gd->fdt_blob, ofnode_to_offset(from), compat)); in ofnode_by_compatible()
799 gd->fdt_blob, ofnode_to_offset(from), in ofnode_by_prop_value()
804 int ofnode_write_prop(ofnode node, const char *propname, int len, in ofnode_write_prop() argument
807 const struct device_node *np = ofnode_to_np(node); in ofnode_write_prop()
813 return -ENOSYS; in ofnode_write_prop()
816 return -EINVAL; in ofnode_write_prop()
818 for (pp = np->properties; pp; pp = pp->next) { in ofnode_write_prop()
819 if (strcmp(pp->name, propname) == 0) { in ofnode_write_prop()
820 /* Property exists -> change value */ in ofnode_write_prop()
821 pp->value = (void *)value; in ofnode_write_prop()
822 pp->length = len; in ofnode_write_prop()
829 return -ENOENT; in ofnode_write_prop()
831 /* Property does not exist -> append new property */ in ofnode_write_prop()
834 return -ENOMEM; in ofnode_write_prop()
836 new->name = strdup(propname); in ofnode_write_prop()
837 if (!new->name) { in ofnode_write_prop()
839 return -ENOMEM; in ofnode_write_prop()
842 new->value = (void *)value; in ofnode_write_prop()
843 new->length = len; in ofnode_write_prop()
844 new->next = NULL; in ofnode_write_prop()
846 pp_last->next = new; in ofnode_write_prop()
851 int ofnode_write_string(ofnode node, const char *propname, const char *value) in ofnode_write_string() argument
854 return -ENOSYS; in ofnode_write_string()
856 assert(ofnode_valid(node)); in ofnode_write_string()
860 return ofnode_write_prop(node, propname, strlen(value) + 1, value); in ofnode_write_string()
863 int ofnode_set_enabled(ofnode node, bool value) in ofnode_set_enabled() argument
866 return -ENOSYS; in ofnode_set_enabled()
868 assert(ofnode_valid(node)); in ofnode_set_enabled()
871 return ofnode_write_string(node, "status", "okay"); in ofnode_set_enabled()
873 return ofnode_write_string(node, "status", "disable"); in ofnode_set_enabled()