xref: /openbmc/u-boot/include/dm/fdtaddr.h (revision d94604d5)
183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2d6ffb00aSSimon Glass /*
3d6ffb00aSSimon Glass  * Copyright (c) 2017 Google, Inc
4d6ffb00aSSimon Glass  *
5d6ffb00aSSimon Glass  * (C) Copyright 2012
6d6ffb00aSSimon Glass  * Pavel Herrmann <morpheus.ibis@gmail.com>
7d6ffb00aSSimon Glass  * Marek Vasut <marex@denx.de>
8d6ffb00aSSimon Glass  */
9d6ffb00aSSimon Glass 
1038d21b41SSimon Glass #ifndef _DM_FDTADDR_H
1138d21b41SSimon Glass #define _DM_FDTADDR_H
12d6ffb00aSSimon Glass 
13d6ffb00aSSimon Glass #include <fdtdec.h>
14d6ffb00aSSimon Glass 
15d6ffb00aSSimon Glass struct udevice;
16d6ffb00aSSimon Glass 
17d6ffb00aSSimon Glass /**
18a821c4afSSimon Glass  * devfdt_get_addr() - Get the reg property of a device
19d6ffb00aSSimon Glass  *
20d6ffb00aSSimon Glass  * @dev: Pointer to a device
21d6ffb00aSSimon Glass  *
22d6ffb00aSSimon Glass  * @return addr
23d6ffb00aSSimon Glass  */
24a821c4afSSimon Glass fdt_addr_t devfdt_get_addr(struct udevice *dev);
25d6ffb00aSSimon Glass 
26d6ffb00aSSimon Glass /**
27a821c4afSSimon Glass  * devfdt_get_addr_ptr() - Return pointer to the address of the reg property
28d6ffb00aSSimon Glass  *                      of a device
29d6ffb00aSSimon Glass  *
30d6ffb00aSSimon Glass  * @dev: Pointer to a device
31d6ffb00aSSimon Glass  *
32d6ffb00aSSimon Glass  * @return Pointer to addr, or NULL if there is no such property
33d6ffb00aSSimon Glass  */
34a821c4afSSimon Glass void *devfdt_get_addr_ptr(struct udevice *dev);
35d6ffb00aSSimon Glass 
36d6ffb00aSSimon Glass /**
3730a90f56SÁlvaro Fernández Rojas  * devfdt_remap_addr() - Return pointer to the memory-mapped I/O address
3830a90f56SÁlvaro Fernández Rojas  *                           of the reg property of a device
3930a90f56SÁlvaro Fernández Rojas  *
4030a90f56SÁlvaro Fernández Rojas  * @dev: Pointer to a device
4130a90f56SÁlvaro Fernández Rojas  *
4230a90f56SÁlvaro Fernández Rojas  * @return Pointer to addr, or NULL if there is no such property
4330a90f56SÁlvaro Fernández Rojas  */
4430a90f56SÁlvaro Fernández Rojas void *devfdt_remap_addr(struct udevice *dev);
4530a90f56SÁlvaro Fernández Rojas 
4630a90f56SÁlvaro Fernández Rojas /**
4730a90f56SÁlvaro Fernández Rojas  * devfdt_remap_addr_index() - Return indexed pointer to the memory-mapped
4830a90f56SÁlvaro Fernández Rojas  *                                 I/O address of the reg property of a device
4930a90f56SÁlvaro Fernández Rojas  * @index: the 'reg' property can hold a list of <addr, size> pairs
5030a90f56SÁlvaro Fernández Rojas  *	   and @index is used to select which one is required
5130a90f56SÁlvaro Fernández Rojas  *
5230a90f56SÁlvaro Fernández Rojas  * @dev: Pointer to a device
5330a90f56SÁlvaro Fernández Rojas  *
5430a90f56SÁlvaro Fernández Rojas  * @return Pointer to addr, or NULL if there is no such property
5530a90f56SÁlvaro Fernández Rojas  */
5630a90f56SÁlvaro Fernández Rojas void *devfdt_remap_addr_index(struct udevice *dev, int index);
5730a90f56SÁlvaro Fernández Rojas 
5830a90f56SÁlvaro Fernández Rojas /**
59*79598820SÁlvaro Fernández Rojas  * devfdt_remap_addr_name() - Get the reg property of a device, indexed by
60*79598820SÁlvaro Fernández Rojas  *                            name, as a memory-mapped I/O pointer
61*79598820SÁlvaro Fernández Rojas  * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
62*79598820SÁlvaro Fernández Rojas  *	  'reg-names' property providing named-based identification. @index
63*79598820SÁlvaro Fernández Rojas  *	  indicates the value to search for in 'reg-names'.
64*79598820SÁlvaro Fernández Rojas  *
65*79598820SÁlvaro Fernández Rojas  * @dev: Pointer to a device
66*79598820SÁlvaro Fernández Rojas  *
67*79598820SÁlvaro Fernández Rojas  * @return Pointer to addr, or NULL if there is no such property
68*79598820SÁlvaro Fernández Rojas  */
69*79598820SÁlvaro Fernández Rojas void *devfdt_remap_addr_name(struct udevice *dev, const char *name);
70*79598820SÁlvaro Fernández Rojas 
71*79598820SÁlvaro Fernández Rojas /**
72a821c4afSSimon Glass  * devfdt_map_physmem() - Read device address from reg property of the
73d6ffb00aSSimon Glass  *                     device node and map the address into CPU address
74d6ffb00aSSimon Glass  *                     space.
75d6ffb00aSSimon Glass  *
76d6ffb00aSSimon Glass  * @dev: Pointer to device
77d6ffb00aSSimon Glass  * @size: size of the memory to map
78d6ffb00aSSimon Glass  *
79d6ffb00aSSimon Glass  * @return  mapped address, or NULL if the device does not have reg
80d6ffb00aSSimon Glass  *          property.
81d6ffb00aSSimon Glass  */
82a821c4afSSimon Glass void *devfdt_map_physmem(struct udevice *dev, unsigned long size);
83d6ffb00aSSimon Glass 
84d6ffb00aSSimon Glass /**
85a821c4afSSimon Glass  * devfdt_get_addr_index() - Get the indexed reg property of a device
86d6ffb00aSSimon Glass  *
87d6ffb00aSSimon Glass  * @dev: Pointer to a device
88d6ffb00aSSimon Glass  * @index: the 'reg' property can hold a list of <addr, size> pairs
89d6ffb00aSSimon Glass  *	   and @index is used to select which one is required
90d6ffb00aSSimon Glass  *
91d6ffb00aSSimon Glass  * @return addr
92d6ffb00aSSimon Glass  */
93a821c4afSSimon Glass fdt_addr_t devfdt_get_addr_index(struct udevice *dev, int index);
94d6ffb00aSSimon Glass 
95d6ffb00aSSimon Glass /**
96a821c4afSSimon Glass  * devfdt_get_addr_size_index() - Get the indexed reg property of a device
97d6ffb00aSSimon Glass  *
98d6ffb00aSSimon Glass  * Returns the address and size specified in the 'reg' property of a device.
99d6ffb00aSSimon Glass  *
100d6ffb00aSSimon Glass  * @dev: Pointer to a device
101d6ffb00aSSimon Glass  * @index: the 'reg' property can hold a list of <addr, size> pairs
102d6ffb00aSSimon Glass  *	   and @index is used to select which one is required
103d6ffb00aSSimon Glass  * @size: Pointer to size varible - this function returns the size
104d6ffb00aSSimon Glass  *        specified in the 'reg' property here
105d6ffb00aSSimon Glass  *
106d6ffb00aSSimon Glass  * @return addr
107d6ffb00aSSimon Glass  */
108a821c4afSSimon Glass fdt_addr_t devfdt_get_addr_size_index(struct udevice *dev, int index,
109d6ffb00aSSimon Glass 				   fdt_size_t *size);
110d6ffb00aSSimon Glass 
111d6ffb00aSSimon Glass /**
112a821c4afSSimon Glass  * devfdt_get_addr_name() - Get the reg property of a device, indexed by name
113d6ffb00aSSimon Glass  *
114d6ffb00aSSimon Glass  * @dev: Pointer to a device
115d6ffb00aSSimon Glass  * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
116d6ffb00aSSimon Glass  *	  'reg-names' property providing named-based identification. @index
117d6ffb00aSSimon Glass  *	  indicates the value to search for in 'reg-names'.
118d6ffb00aSSimon Glass  *
119d6ffb00aSSimon Glass  * @return addr
120d6ffb00aSSimon Glass  */
121a821c4afSSimon Glass fdt_addr_t devfdt_get_addr_name(struct udevice *dev, const char *name);
122d6ffb00aSSimon Glass 
123d6ffb00aSSimon Glass /**
124d6ffb00aSSimon Glass  * dm_set_translation_offset() - Set translation offset
125d6ffb00aSSimon Glass  * @offs: Translation offset
126d6ffb00aSSimon Glass  *
127d6ffb00aSSimon Glass  * Some platforms need a special address translation. Those
128d6ffb00aSSimon Glass  * platforms (e.g. mvebu in SPL) can configure a translation
129d6ffb00aSSimon Glass  * offset in the DM by calling this function. It will be
130a821c4afSSimon Glass  * added to all addresses returned in devfdt_get_addr().
131d6ffb00aSSimon Glass  */
132d6ffb00aSSimon Glass void dm_set_translation_offset(fdt_addr_t offs);
133d6ffb00aSSimon Glass 
134d6ffb00aSSimon Glass /**
135d6ffb00aSSimon Glass  * dm_get_translation_offset() - Get translation offset
136d6ffb00aSSimon Glass  *
137d6ffb00aSSimon Glass  * This function returns the translation offset that can
138d6ffb00aSSimon Glass  * be configured by calling dm_set_translation_offset().
139d6ffb00aSSimon Glass  *
140d6ffb00aSSimon Glass  * @return translation offset for the device address (0 as default).
141d6ffb00aSSimon Glass  */
142d6ffb00aSSimon Glass fdt_addr_t dm_get_translation_offset(void);
143d6ffb00aSSimon Glass 
144d6ffb00aSSimon Glass #endif
145