1b047d671SHeiko Schocher /* 2b047d671SHeiko Schocher * Copyright (c) 2014 3b047d671SHeiko Schocher * Heiko Schocher, DENX Software Engineering, hs@denx.de. 4b047d671SHeiko Schocher * 5b047d671SHeiko Schocher * Based on lib/fdtdec.c: 6b047d671SHeiko Schocher * Copyright (c) 2011 The Chromium OS Authors. 7b047d671SHeiko Schocher * 8b047d671SHeiko Schocher * SPDX-License-Identifier: GPL-2.0+ 9b047d671SHeiko Schocher */ 10b047d671SHeiko Schocher 11b047d671SHeiko Schocher #ifndef USE_HOSTCC 12b047d671SHeiko Schocher #include <common.h> 13b047d671SHeiko Schocher #include <libfdt.h> 14b047d671SHeiko Schocher #include <fdtdec.h> 15b047d671SHeiko Schocher #else 16b047d671SHeiko Schocher #include "libfdt.h" 17b047d671SHeiko Schocher #include "fdt_support.h" 18b047d671SHeiko Schocher 19b047d671SHeiko Schocher #define debug(...) 20b047d671SHeiko Schocher #endif 21b047d671SHeiko Schocher 22b047d671SHeiko Schocher int fdtdec_get_int(const void *blob, int node, const char *prop_name, 23b047d671SHeiko Schocher int default_val) 24b047d671SHeiko Schocher { 25b047d671SHeiko Schocher const int *cell; 26b047d671SHeiko Schocher int len; 27b047d671SHeiko Schocher 28b047d671SHeiko Schocher debug("%s: %s: ", __func__, prop_name); 29b047d671SHeiko Schocher cell = fdt_getprop(blob, node, prop_name, &len); 30b047d671SHeiko Schocher if (cell && len >= sizeof(int)) { 31b047d671SHeiko Schocher int val = fdt32_to_cpu(cell[0]); 32b047d671SHeiko Schocher 33b047d671SHeiko Schocher debug("%#x (%d)\n", val, val); 34b047d671SHeiko Schocher return val; 35b047d671SHeiko Schocher } 36b047d671SHeiko Schocher debug("(not found)\n"); 37b047d671SHeiko Schocher return default_val; 38b047d671SHeiko Schocher } 39*bfa3e55bSChin Liang See 40*bfa3e55bSChin Liang See unsigned int fdtdec_get_uint(const void *blob, int node, const char *prop_name, 41*bfa3e55bSChin Liang See unsigned int default_val) 42*bfa3e55bSChin Liang See { 43*bfa3e55bSChin Liang See const int *cell; 44*bfa3e55bSChin Liang See int len; 45*bfa3e55bSChin Liang See 46*bfa3e55bSChin Liang See debug("%s: %s: ", __func__, prop_name); 47*bfa3e55bSChin Liang See cell = fdt_getprop(blob, node, prop_name, &len); 48*bfa3e55bSChin Liang See if (cell && len >= sizeof(unsigned int)) { 49*bfa3e55bSChin Liang See unsigned int val = fdt32_to_cpu(cell[0]); 50*bfa3e55bSChin Liang See 51*bfa3e55bSChin Liang See debug("%#x (%d)\n", val, val); 52*bfa3e55bSChin Liang See return val; 53*bfa3e55bSChin Liang See } 54*bfa3e55bSChin Liang See debug("(not found)\n"); 55*bfa3e55bSChin Liang See return default_val; 56*bfa3e55bSChin Liang See } 57