xref: /rk3399_rockchip-uboot/drivers/core/read_extra.c (revision a44810123f9ef069587beacdce7d6f488cf42973)
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