1*a4481012SSimon Glass /* 2*a4481012SSimon Glass * Copyright (c) 2017 Google, Inc 3*a4481012SSimon Glass * Written by Simon Glass <sjg@chromium.org> 4*a4481012SSimon Glass * 5*a4481012SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 6*a4481012SSimon Glass */ 7*a4481012SSimon Glass 8*a4481012SSimon Glass #include <common.h> 9*a4481012SSimon Glass #include <dm.h> 10*a4481012SSimon Glass #include <dm/of_addr.h> 11*a4481012SSimon Glass #include <dm/read.h> 12*a4481012SSimon Glass #include <linux/ioport.h> 13*a4481012SSimon Glass 14*a4481012SSimon Glass int dev_read_resource(struct udevice *dev, uint index, struct resource *res) 15*a4481012SSimon Glass { 16*a4481012SSimon Glass ofnode node = dev_ofnode(dev); 17*a4481012SSimon Glass 18*a4481012SSimon Glass #ifdef CONFIG_OF_LIVE 19*a4481012SSimon Glass if (ofnode_is_np(node)) { 20*a4481012SSimon Glass return of_address_to_resource(ofnode_to_np(node), index, res); 21*a4481012SSimon Glass } else 22*a4481012SSimon Glass #endif 23*a4481012SSimon Glass { 24*a4481012SSimon Glass struct fdt_resource fres; 25*a4481012SSimon Glass int ret; 26*a4481012SSimon Glass 27*a4481012SSimon Glass ret = fdt_get_resource(gd->fdt_blob, ofnode_to_offset(node), 28*a4481012SSimon Glass "reg", index, &fres); 29*a4481012SSimon Glass if (ret < 0) 30*a4481012SSimon Glass return -EINVAL; 31*a4481012SSimon Glass memset(res, '\0', sizeof(*res)); 32*a4481012SSimon Glass res->start = fres.start; 33*a4481012SSimon Glass res->end = fres.end; 34*a4481012SSimon Glass 35*a4481012SSimon Glass return 0; 36*a4481012SSimon Glass } 37*a4481012SSimon Glass } 38