d2c1994291698ab811d28625b3df6f30c3e910a8
[platform/kernel/u-boot.git] / include / dm / fdtaddr.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (c) 2017 Google, Inc
4  *
5  * (C) Copyright 2012
6  * Pavel Herrmann <morpheus.ibis@gmail.com>
7  * Marek Vasut <marex@denx.de>
8  */
9
10 #ifndef _DM_FDTADDR_H
11 #define _DM_FDTADDR_H
12
13 #include <fdtdec.h>
14
15 struct udevice;
16
17 /**
18  * devfdt_get_addr() - Get the reg property of a device
19  *
20  * @dev: Pointer to a device
21  *
22  * @return addr
23  */
24 fdt_addr_t devfdt_get_addr(const struct udevice *dev);
25
26 /**
27  * devfdt_get_addr_ptr() - Return pointer to the address of the reg property
28  *                      of a device
29  *
30  * @dev: Pointer to a device
31  *
32  * @return Pointer to addr, or NULL if there is no such property
33  */
34 void *devfdt_get_addr_ptr(const struct udevice *dev);
35
36 /**
37  * devfdt_remap_addr() - Return pointer to the memory-mapped I/O address
38  *                           of the reg property of a device
39  *
40  * @dev: Pointer to a device
41  *
42  * @return Pointer to addr, or NULL if there is no such property
43  */
44 void *devfdt_remap_addr(const struct udevice *dev);
45
46 /**
47  * devfdt_remap_addr_index() - Return indexed pointer to the memory-mapped
48  *                                 I/O address of the reg property of a device
49  * @index: the 'reg' property can hold a list of <addr, size> pairs
50  *         and @index is used to select which one is required
51  *
52  * @dev: Pointer to a device
53  *
54  * @return Pointer to addr, or NULL if there is no such property
55  */
56 void *devfdt_remap_addr_index(const struct udevice *dev, int index);
57
58 /**
59  * devfdt_remap_addr_name() - Get the reg property of a device, indexed by
60  *                            name, as a memory-mapped I/O pointer
61  * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
62  *        'reg-names' property providing named-based identification. @index
63  *        indicates the value to search for in 'reg-names'.
64  *
65  * @dev: Pointer to a device
66  *
67  * @return Pointer to addr, or NULL if there is no such property
68  */
69 void *devfdt_remap_addr_name(const struct udevice *dev, const char *name);
70
71 /**
72  * devfdt_map_physmem() - Read device address from reg property of the
73  *                     device node and map the address into CPU address
74  *                     space.
75  *
76  * @dev: Pointer to device
77  * @size: size of the memory to map
78  *
79  * @return  mapped address, or NULL if the device does not have reg
80  *          property.
81  */
82 void *devfdt_map_physmem(const struct udevice *dev, unsigned long size);
83
84 /**
85  * devfdt_get_addr_index() - Get the indexed reg property of a device
86  *
87  * @dev: Pointer to a device
88  * @index: the 'reg' property can hold a list of <addr, size> pairs
89  *         and @index is used to select which one is required
90  *
91  * @return addr
92  */
93 fdt_addr_t devfdt_get_addr_index(const struct udevice *dev, int index);
94
95 /**
96  * devfdt_get_addr_index_ptr() - Return indexed pointer to the address of the
97  *                               reg property of a device
98  *
99  * @dev: Pointer to a device
100  * @index: the 'reg' property can hold a list of <addr, size> pairs
101  *         and @index is used to select which one is required
102  *
103  * @return Pointer to addr, or NULL if there is no such property
104  */
105 void *devfdt_get_addr_index_ptr(const struct udevice *dev, int index);
106
107 /**
108  * devfdt_get_addr_size_index() - Get the indexed reg property of a device
109  *
110  * Returns the address and size specified in the 'reg' property of a device.
111  *
112  * @dev: Pointer to a device
113  * @index: the 'reg' property can hold a list of <addr, size> pairs
114  *         and @index is used to select which one is required
115  * @size: Pointer to size varible - this function returns the size
116  *        specified in the 'reg' property here
117  *
118  * @return addr
119  */
120 fdt_addr_t devfdt_get_addr_size_index(const struct udevice *dev, int index,
121                                       fdt_size_t *size);
122
123 /**
124  * devfdt_get_addr_name() - Get the reg property of a device, indexed by name
125  *
126  * @dev: Pointer to a device
127  * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
128  *        'reg-names' property providing named-based identification. @index
129  *        indicates the value to search for in 'reg-names'.
130  *
131  * @return addr
132  */
133 fdt_addr_t devfdt_get_addr_name(const struct udevice *dev, const char *name);
134
135 /**
136  * devfdt_get_addr_size_name() - Get the reg property and its size for a device,
137  *                               indexed by name
138  *
139  * Returns the address and size specified in the 'reg' property of a device.
140  *
141  * @dev: Pointer to a device
142  * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
143  *        'reg-names' property providing named-based identification. @index
144  *        indicates the value to search for in 'reg-names'.
145  * @size: Pointer to size variable - this function returns the size
146  *        specified in the 'reg' property here
147  *
148  * @return addr
149  */
150 fdt_addr_t devfdt_get_addr_size_name(const struct udevice *dev,
151                                      const char *name, fdt_size_t *size);
152
153 /**
154  * devfdt_get_addr_pci() - Read an address and handle PCI address translation
155  *
156  * @dev: Device to read from
157  * @return address or FDT_ADDR_T_NONE if not found
158  */
159 fdt_addr_t devfdt_get_addr_pci(const struct udevice *dev);
160
161 #endif