]> Git Repo - J-u-boot.git/blob - drivers/core/read.c
Merge https://gitlab.denx.de/u-boot/custodians/u-boot-marvell
[J-u-boot.git] / drivers / core / read.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (c) 2017 Google, Inc
4  * Written by Simon Glass <[email protected]>
5  */
6
7 #include <asm/types.h>
8 #include <asm/io.h>
9 #include <common.h>
10 #include <dm.h>
11 #include <mapmem.h>
12 #include <dm/of_access.h>
13
14 int dev_read_u32(struct udevice *dev, const char *propname, u32 *outp)
15 {
16         return ofnode_read_u32(dev_ofnode(dev), propname, outp);
17 }
18
19 int dev_read_u32_default(struct udevice *dev, const char *propname, int def)
20 {
21         return ofnode_read_u32_default(dev_ofnode(dev), propname, def);
22 }
23
24 int dev_read_s32(struct udevice *dev, const char *propname, s32 *outp)
25 {
26         return ofnode_read_u32(dev_ofnode(dev), propname, (u32 *)outp);
27 }
28
29 int dev_read_s32_default(struct udevice *dev, const char *propname, int def)
30 {
31         return ofnode_read_u32_default(dev_ofnode(dev), propname, def);
32 }
33
34 int dev_read_u32u(struct udevice *dev, const char *propname, uint *outp)
35 {
36         u32 val;
37         int ret;
38
39         ret = ofnode_read_u32(dev_ofnode(dev), propname, &val);
40         if (ret)
41                 return ret;
42         *outp = val;
43
44         return 0;
45 }
46
47 const char *dev_read_string(struct udevice *dev, const char *propname)
48 {
49         return ofnode_read_string(dev_ofnode(dev), propname);
50 }
51
52 bool dev_read_bool(struct udevice *dev, const char *propname)
53 {
54         return ofnode_read_bool(dev_ofnode(dev), propname);
55 }
56
57 ofnode dev_read_subnode(struct udevice *dev, const char *subnode_name)
58 {
59         return ofnode_find_subnode(dev_ofnode(dev), subnode_name);
60 }
61
62 ofnode dev_read_first_subnode(struct udevice *dev)
63 {
64         return ofnode_first_subnode(dev_ofnode(dev));
65 }
66
67 ofnode dev_read_next_subnode(ofnode node)
68 {
69         return ofnode_next_subnode(node);
70 }
71
72 int dev_read_size(struct udevice *dev, const char *propname)
73 {
74         return ofnode_read_size(dev_ofnode(dev), propname);
75 }
76
77 fdt_addr_t dev_read_addr_index(struct udevice *dev, int index)
78 {
79         if (ofnode_is_np(dev_ofnode(dev)))
80                 return ofnode_get_addr_index(dev_ofnode(dev), index);
81         else
82                 return devfdt_get_addr_index(dev, index);
83 }
84
85 fdt_addr_t dev_read_addr_size_index(struct udevice *dev, int index,
86                                     fdt_size_t *size)
87 {
88         if (ofnode_is_np(dev_ofnode(dev)))
89                 return ofnode_get_addr_size_index(dev_ofnode(dev), index, size);
90         else
91                 return devfdt_get_addr_size_index(dev, index, size);
92 }
93
94 void *dev_remap_addr_index(struct udevice *dev, int index)
95 {
96         fdt_addr_t addr = dev_read_addr_index(dev, index);
97
98         if (addr == FDT_ADDR_T_NONE)
99                 return NULL;
100
101         return map_physmem(addr, 0, MAP_NOCACHE);
102 }
103
104 fdt_addr_t dev_read_addr_name(struct udevice *dev, const char *name)
105 {
106         int index = dev_read_stringlist_search(dev, "reg-names", name);
107
108         if (index < 0)
109                 return FDT_ADDR_T_NONE;
110         else
111                 return dev_read_addr_index(dev, index);
112 }
113
114 fdt_addr_t dev_read_addr_size_name(struct udevice *dev, const char *name,
115                                    fdt_size_t *size)
116 {
117         int index = dev_read_stringlist_search(dev, "reg-names", name);
118
119         if (index < 0)
120                 return FDT_ADDR_T_NONE;
121         else
122                 return dev_read_addr_size_index(dev, index, size);
123 }
124
125 void *dev_remap_addr_name(struct udevice *dev, const char *name)
126 {
127         fdt_addr_t addr = dev_read_addr_name(dev, name);
128
129         if (addr == FDT_ADDR_T_NONE)
130                 return NULL;
131
132         return map_physmem(addr, 0, MAP_NOCACHE);
133 }
134
135 fdt_addr_t dev_read_addr(struct udevice *dev)
136 {
137         return dev_read_addr_index(dev, 0);
138 }
139
140 void *dev_read_addr_ptr(struct udevice *dev)
141 {
142         fdt_addr_t addr = dev_read_addr(dev);
143
144         return (addr == FDT_ADDR_T_NONE) ? NULL : map_sysmem(addr, 0);
145 }
146
147 void *dev_remap_addr(struct udevice *dev)
148 {
149         return dev_remap_addr_index(dev, 0);
150 }
151
152 fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *property,
153                               fdt_size_t *sizep)
154 {
155         return ofnode_get_addr_size(dev_ofnode(dev), property, sizep);
156 }
157
158 const char *dev_read_name(struct udevice *dev)
159 {
160         return ofnode_get_name(dev_ofnode(dev));
161 }
162
163 int dev_read_stringlist_search(struct udevice *dev, const char *property,
164                                const char *string)
165 {
166         return ofnode_stringlist_search(dev_ofnode(dev), property, string);
167 }
168
169 int dev_read_string_index(struct udevice *dev, const char *propname, int index,
170                           const char **outp)
171 {
172         return ofnode_read_string_index(dev_ofnode(dev), propname, index, outp);
173 }
174
175 int dev_read_string_count(struct udevice *dev, const char *propname)
176 {
177         return ofnode_read_string_count(dev_ofnode(dev), propname);
178 }
179
180 int dev_read_phandle_with_args(struct udevice *dev, const char *list_name,
181                                const char *cells_name, int cell_count,
182                                int index, struct ofnode_phandle_args *out_args)
183 {
184         return ofnode_parse_phandle_with_args(dev_ofnode(dev), list_name,
185                                               cells_name, cell_count, index,
186                                               out_args);
187 }
188
189 int dev_count_phandle_with_args(struct udevice *dev, const char *list_name,
190                                 const char *cells_name)
191 {
192         return ofnode_count_phandle_with_args(dev_ofnode(dev), list_name,
193                                               cells_name);
194 }
195
196 int dev_read_addr_cells(struct udevice *dev)
197 {
198         return ofnode_read_addr_cells(dev_ofnode(dev));
199 }
200
201 int dev_read_size_cells(struct udevice *dev)
202 {
203         return ofnode_read_size_cells(dev_ofnode(dev));
204 }
205
206 int dev_read_simple_addr_cells(struct udevice *dev)
207 {
208         return ofnode_read_simple_addr_cells(dev_ofnode(dev));
209 }
210
211 int dev_read_simple_size_cells(struct udevice *dev)
212 {
213         return ofnode_read_simple_size_cells(dev_ofnode(dev));
214 }
215
216 int dev_read_phandle(struct udevice *dev)
217 {
218         ofnode node = dev_ofnode(dev);
219
220         if (ofnode_is_np(node))
221                 return ofnode_to_np(node)->phandle;
222         else
223                 return fdt_get_phandle(gd->fdt_blob, ofnode_to_offset(node));
224 }
225
226 const void *dev_read_prop(struct udevice *dev, const char *propname, int *lenp)
227 {
228         return ofnode_get_property(dev_ofnode(dev), propname, lenp);
229 }
230
231 int dev_read_alias_seq(struct udevice *dev, int *devnump)
232 {
233         ofnode node = dev_ofnode(dev);
234         const char *uc_name = dev->uclass->uc_drv->name;
235         int ret;
236
237         if (ofnode_is_np(node)) {
238                 ret = of_alias_get_id(ofnode_to_np(node), uc_name);
239                 if (ret >= 0)
240                         *devnump = ret;
241         } else {
242                 ret = fdtdec_get_alias_seq(gd->fdt_blob, uc_name,
243                                            ofnode_to_offset(node), devnump);
244         }
245
246         return ret;
247 }
248
249 int dev_read_u32_array(struct udevice *dev, const char *propname,
250                        u32 *out_values, size_t sz)
251 {
252         return ofnode_read_u32_array(dev_ofnode(dev), propname, out_values, sz);
253 }
254
255 const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname,
256                                      size_t sz)
257 {
258         return ofnode_read_u8_array_ptr(dev_ofnode(dev), propname, sz);
259 }
260
261 int dev_read_enabled(struct udevice *dev)
262 {
263         ofnode node = dev_ofnode(dev);
264
265         if (ofnode_is_np(node))
266                 return of_device_is_available(ofnode_to_np(node));
267         else
268                 return fdtdec_get_is_enabled(gd->fdt_blob,
269                                              ofnode_to_offset(node));
270 }
271
272 int dev_read_resource(struct udevice *dev, uint index, struct resource *res)
273 {
274         return ofnode_read_resource(dev_ofnode(dev), index, res);
275 }
276
277 int dev_read_resource_byname(struct udevice *dev, const char *name,
278                              struct resource *res)
279 {
280         return ofnode_read_resource_byname(dev_ofnode(dev), name, res);
281 }
282
283 u64 dev_translate_address(struct udevice *dev, const fdt32_t *in_addr)
284 {
285         return ofnode_translate_address(dev_ofnode(dev), in_addr);
286 }
287
288 u64 dev_translate_dma_address(struct udevice *dev, const fdt32_t *in_addr)
289 {
290         return ofnode_translate_dma_address(dev_ofnode(dev), in_addr);
291 }
292
293 int dev_read_alias_highest_id(const char *stem)
294 {
295         if (of_live_active())
296                 return of_alias_get_highest_id(stem);
297
298         return fdtdec_get_alias_highest_id(gd->fdt_blob, stem);
299 }
This page took 0.04169 seconds and 4 git commands to generate.