1*47a0fd3bSSimon Glass /* 2*47a0fd3bSSimon Glass * Copyright (c) 2017 Google, Inc 3*47a0fd3bSSimon Glass * Written by Simon Glass <sjg@chromium.org> 4*47a0fd3bSSimon Glass * 5*47a0fd3bSSimon Glass * SPDX-License-Identifier: GPL-2.0+ 6*47a0fd3bSSimon Glass */ 7*47a0fd3bSSimon Glass 8*47a0fd3bSSimon Glass #include <common.h> 9*47a0fd3bSSimon Glass #include <dm.h> 10*47a0fd3bSSimon Glass #include <dm/of_access.h> 11*47a0fd3bSSimon Glass 12*47a0fd3bSSimon Glass int dev_read_u32_default(struct udevice *dev, const char *propname, int def) 13*47a0fd3bSSimon Glass { 14*47a0fd3bSSimon Glass return ofnode_read_u32_default(dev_ofnode(dev), propname, def); 15*47a0fd3bSSimon Glass } 16*47a0fd3bSSimon Glass 17*47a0fd3bSSimon Glass const char *dev_read_string(struct udevice *dev, const char *propname) 18*47a0fd3bSSimon Glass { 19*47a0fd3bSSimon Glass return ofnode_read_string(dev_ofnode(dev), propname); 20*47a0fd3bSSimon Glass } 21*47a0fd3bSSimon Glass 22*47a0fd3bSSimon Glass bool dev_read_bool(struct udevice *dev, const char *propname) 23*47a0fd3bSSimon Glass { 24*47a0fd3bSSimon Glass return ofnode_read_bool(dev_ofnode(dev), propname); 25*47a0fd3bSSimon Glass } 26*47a0fd3bSSimon Glass 27*47a0fd3bSSimon Glass ofnode dev_read_subnode(struct udevice *dev, const char *subnode_name) 28*47a0fd3bSSimon Glass { 29*47a0fd3bSSimon Glass return ofnode_find_subnode(dev_ofnode(dev), subnode_name); 30*47a0fd3bSSimon Glass } 31*47a0fd3bSSimon Glass 32*47a0fd3bSSimon Glass ofnode dev_read_first_subnode(struct udevice *dev) 33*47a0fd3bSSimon Glass { 34*47a0fd3bSSimon Glass return ofnode_first_subnode(dev_ofnode(dev)); 35*47a0fd3bSSimon Glass } 36*47a0fd3bSSimon Glass 37*47a0fd3bSSimon Glass ofnode dev_read_next_subnode(ofnode node) 38*47a0fd3bSSimon Glass { 39*47a0fd3bSSimon Glass return ofnode_next_subnode(node); 40*47a0fd3bSSimon Glass } 41*47a0fd3bSSimon Glass 42*47a0fd3bSSimon Glass int dev_read_size(struct udevice *dev, const char *propname) 43*47a0fd3bSSimon Glass { 44*47a0fd3bSSimon Glass return ofnode_read_size(dev_ofnode(dev), propname); 45*47a0fd3bSSimon Glass } 46*47a0fd3bSSimon Glass 47*47a0fd3bSSimon Glass fdt_addr_t dev_read_addr_index(struct udevice *dev, int index) 48*47a0fd3bSSimon Glass { 49*47a0fd3bSSimon Glass if (ofnode_is_np(dev_ofnode(dev))) 50*47a0fd3bSSimon Glass return ofnode_get_addr_index(dev_ofnode(dev), index); 51*47a0fd3bSSimon Glass else 52*47a0fd3bSSimon Glass return devfdt_get_addr_index(dev, index); 53*47a0fd3bSSimon Glass } 54*47a0fd3bSSimon Glass 55*47a0fd3bSSimon Glass fdt_addr_t dev_read_addr(struct udevice *dev) 56*47a0fd3bSSimon Glass { 57*47a0fd3bSSimon Glass return dev_read_addr_index(dev, 0); 58*47a0fd3bSSimon Glass } 59*47a0fd3bSSimon Glass 60*47a0fd3bSSimon Glass fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *property, 61*47a0fd3bSSimon Glass fdt_size_t *sizep) 62*47a0fd3bSSimon Glass { 63*47a0fd3bSSimon Glass return ofnode_get_addr_size(dev_ofnode(dev), property, sizep); 64*47a0fd3bSSimon Glass } 65*47a0fd3bSSimon Glass 66*47a0fd3bSSimon Glass const char *dev_read_name(struct udevice *dev) 67*47a0fd3bSSimon Glass { 68*47a0fd3bSSimon Glass return ofnode_get_name(dev_ofnode(dev)); 69*47a0fd3bSSimon Glass } 70*47a0fd3bSSimon Glass 71*47a0fd3bSSimon Glass int dev_read_stringlist_search(struct udevice *dev, const char *property, 72*47a0fd3bSSimon Glass const char *string) 73*47a0fd3bSSimon Glass { 74*47a0fd3bSSimon Glass return ofnode_stringlist_search(dev_ofnode(dev), property, string); 75*47a0fd3bSSimon Glass } 76*47a0fd3bSSimon Glass 77*47a0fd3bSSimon Glass int dev_read_phandle_with_args(struct udevice *dev, const char *list_name, 78*47a0fd3bSSimon Glass const char *cells_name, int cell_count, 79*47a0fd3bSSimon Glass int index, 80*47a0fd3bSSimon Glass struct ofnode_phandle_args *out_args) 81*47a0fd3bSSimon Glass { 82*47a0fd3bSSimon Glass return ofnode_parse_phandle_with_args(dev_ofnode(dev), list_name, 83*47a0fd3bSSimon Glass cells_name, cell_count, index, 84*47a0fd3bSSimon Glass out_args); 85*47a0fd3bSSimon Glass } 86*47a0fd3bSSimon Glass 87*47a0fd3bSSimon Glass int dev_read_addr_cells(struct udevice *dev) 88*47a0fd3bSSimon Glass { 89*47a0fd3bSSimon Glass return ofnode_read_addr_cells(dev_ofnode(dev)); 90*47a0fd3bSSimon Glass } 91*47a0fd3bSSimon Glass 92*47a0fd3bSSimon Glass int dev_read_size_cells(struct udevice *dev) 93*47a0fd3bSSimon Glass { 94*47a0fd3bSSimon Glass return ofnode_read_size_cells(dev_ofnode(dev)); 95*47a0fd3bSSimon Glass } 96*47a0fd3bSSimon Glass 97*47a0fd3bSSimon Glass int dev_read_phandle(struct udevice *dev) 98*47a0fd3bSSimon Glass { 99*47a0fd3bSSimon Glass ofnode node = dev_ofnode(dev); 100*47a0fd3bSSimon Glass 101*47a0fd3bSSimon Glass if (ofnode_is_np(node)) 102*47a0fd3bSSimon Glass return ofnode_to_np(node)->phandle; 103*47a0fd3bSSimon Glass else 104*47a0fd3bSSimon Glass return fdt_get_phandle(gd->fdt_blob, ofnode_to_offset(node)); 105*47a0fd3bSSimon Glass } 106*47a0fd3bSSimon Glass 107*47a0fd3bSSimon Glass const u32 *dev_read_prop(struct udevice *dev, const char *propname, int *lenp) 108*47a0fd3bSSimon Glass { 109*47a0fd3bSSimon Glass return ofnode_read_prop(dev_ofnode(dev), propname, lenp); 110*47a0fd3bSSimon Glass } 111*47a0fd3bSSimon Glass 112*47a0fd3bSSimon Glass int dev_read_alias_seq(struct udevice *dev, int *devnump) 113*47a0fd3bSSimon Glass { 114*47a0fd3bSSimon Glass ofnode node = dev_ofnode(dev); 115*47a0fd3bSSimon Glass const char *uc_name = dev->uclass->uc_drv->name; 116*47a0fd3bSSimon Glass int ret; 117*47a0fd3bSSimon Glass 118*47a0fd3bSSimon Glass if (ofnode_is_np(node)) { 119*47a0fd3bSSimon Glass ret = of_alias_get_id(ofnode_to_np(node), uc_name); 120*47a0fd3bSSimon Glass if (ret >= 0) 121*47a0fd3bSSimon Glass *devnump = ret; 122*47a0fd3bSSimon Glass } else { 123*47a0fd3bSSimon Glass ret = fdtdec_get_alias_seq(gd->fdt_blob, uc_name, 124*47a0fd3bSSimon Glass ofnode_to_offset(node), devnump); 125*47a0fd3bSSimon Glass } 126*47a0fd3bSSimon Glass 127*47a0fd3bSSimon Glass return ret; 128*47a0fd3bSSimon Glass } 129*47a0fd3bSSimon Glass 130*47a0fd3bSSimon Glass int dev_read_u32_array(struct udevice *dev, const char *propname, 131*47a0fd3bSSimon Glass u32 *out_values, size_t sz) 132*47a0fd3bSSimon Glass { 133*47a0fd3bSSimon Glass return ofnode_read_u32_array(dev_ofnode(dev), propname, out_values, sz); 134*47a0fd3bSSimon Glass } 135*47a0fd3bSSimon Glass 136*47a0fd3bSSimon Glass const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname, 137*47a0fd3bSSimon Glass size_t sz) 138*47a0fd3bSSimon Glass { 139*47a0fd3bSSimon Glass return ofnode_read_u8_array_ptr(dev_ofnode(dev), propname, sz); 140*47a0fd3bSSimon Glass } 141