xref: /rk3399_rockchip-uboot/include/dm/fdtaddr.h (revision d6ffb00a438ef8ba714feb2c72a7ddbdebad2b2e)
1*d6ffb00aSSimon Glass /*
2*d6ffb00aSSimon Glass  * Copyright (c) 2017 Google, Inc
3*d6ffb00aSSimon Glass  *
4*d6ffb00aSSimon Glass  * (C) Copyright 2012
5*d6ffb00aSSimon Glass  * Pavel Herrmann <morpheus.ibis@gmail.com>
6*d6ffb00aSSimon Glass  * Marek Vasut <marex@denx.de>
7*d6ffb00aSSimon Glass  *
8*d6ffb00aSSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
9*d6ffb00aSSimon Glass  */
10*d6ffb00aSSimon Glass 
11*d6ffb00aSSimon Glass #ifndef _DM_ADDR_H
12*d6ffb00aSSimon Glass #define _DM_ADDR_H
13*d6ffb00aSSimon Glass 
14*d6ffb00aSSimon Glass #include <fdtdec.h>
15*d6ffb00aSSimon Glass 
16*d6ffb00aSSimon Glass struct udevice;
17*d6ffb00aSSimon Glass 
18*d6ffb00aSSimon Glass /**
19*d6ffb00aSSimon Glass  * dev_get_addr() - Get the reg property of a device
20*d6ffb00aSSimon Glass  *
21*d6ffb00aSSimon Glass  * @dev: Pointer to a device
22*d6ffb00aSSimon Glass  *
23*d6ffb00aSSimon Glass  * @return addr
24*d6ffb00aSSimon Glass  */
25*d6ffb00aSSimon Glass fdt_addr_t dev_get_addr(struct udevice *dev);
26*d6ffb00aSSimon Glass 
27*d6ffb00aSSimon Glass /**
28*d6ffb00aSSimon Glass  * dev_get_addr_ptr() - Return pointer to the address of the reg property
29*d6ffb00aSSimon Glass  *                      of a device
30*d6ffb00aSSimon Glass  *
31*d6ffb00aSSimon Glass  * @dev: Pointer to a device
32*d6ffb00aSSimon Glass  *
33*d6ffb00aSSimon Glass  * @return Pointer to addr, or NULL if there is no such property
34*d6ffb00aSSimon Glass  */
35*d6ffb00aSSimon Glass void *dev_get_addr_ptr(struct udevice *dev);
36*d6ffb00aSSimon Glass 
37*d6ffb00aSSimon Glass /**
38*d6ffb00aSSimon Glass  * dev_map_physmem() - Read device address from reg property of the
39*d6ffb00aSSimon Glass  *                     device node and map the address into CPU address
40*d6ffb00aSSimon Glass  *                     space.
41*d6ffb00aSSimon Glass  *
42*d6ffb00aSSimon Glass  * @dev: Pointer to device
43*d6ffb00aSSimon Glass  * @size: size of the memory to map
44*d6ffb00aSSimon Glass  *
45*d6ffb00aSSimon Glass  * @return  mapped address, or NULL if the device does not have reg
46*d6ffb00aSSimon Glass  *          property.
47*d6ffb00aSSimon Glass  */
48*d6ffb00aSSimon Glass void *dev_map_physmem(struct udevice *dev, unsigned long size);
49*d6ffb00aSSimon Glass 
50*d6ffb00aSSimon Glass /**
51*d6ffb00aSSimon Glass  * dev_get_addr_index() - Get the indexed reg property of a device
52*d6ffb00aSSimon Glass  *
53*d6ffb00aSSimon Glass  * @dev: Pointer to a device
54*d6ffb00aSSimon Glass  * @index: the 'reg' property can hold a list of <addr, size> pairs
55*d6ffb00aSSimon Glass  *	   and @index is used to select which one is required
56*d6ffb00aSSimon Glass  *
57*d6ffb00aSSimon Glass  * @return addr
58*d6ffb00aSSimon Glass  */
59*d6ffb00aSSimon Glass fdt_addr_t dev_get_addr_index(struct udevice *dev, int index);
60*d6ffb00aSSimon Glass 
61*d6ffb00aSSimon Glass /**
62*d6ffb00aSSimon Glass  * dev_get_addr_size_index() - Get the indexed reg property of a device
63*d6ffb00aSSimon Glass  *
64*d6ffb00aSSimon Glass  * Returns the address and size specified in the 'reg' property of a device.
65*d6ffb00aSSimon Glass  *
66*d6ffb00aSSimon Glass  * @dev: Pointer to a device
67*d6ffb00aSSimon Glass  * @index: the 'reg' property can hold a list of <addr, size> pairs
68*d6ffb00aSSimon Glass  *	   and @index is used to select which one is required
69*d6ffb00aSSimon Glass  * @size: Pointer to size varible - this function returns the size
70*d6ffb00aSSimon Glass  *        specified in the 'reg' property here
71*d6ffb00aSSimon Glass  *
72*d6ffb00aSSimon Glass  * @return addr
73*d6ffb00aSSimon Glass  */
74*d6ffb00aSSimon Glass fdt_addr_t dev_get_addr_size_index(struct udevice *dev, int index,
75*d6ffb00aSSimon Glass 				   fdt_size_t *size);
76*d6ffb00aSSimon Glass 
77*d6ffb00aSSimon Glass /**
78*d6ffb00aSSimon Glass  * dev_get_addr_name() - Get the reg property of a device, indexed by name
79*d6ffb00aSSimon Glass  *
80*d6ffb00aSSimon Glass  * @dev: Pointer to a device
81*d6ffb00aSSimon Glass  * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
82*d6ffb00aSSimon Glass  *	  'reg-names' property providing named-based identification. @index
83*d6ffb00aSSimon Glass  *	  indicates the value to search for in 'reg-names'.
84*d6ffb00aSSimon Glass  *
85*d6ffb00aSSimon Glass  * @return addr
86*d6ffb00aSSimon Glass  */
87*d6ffb00aSSimon Glass fdt_addr_t dev_get_addr_name(struct udevice *dev, const char *name);
88*d6ffb00aSSimon Glass 
89*d6ffb00aSSimon Glass /**
90*d6ffb00aSSimon Glass  * dm_set_translation_offset() - Set translation offset
91*d6ffb00aSSimon Glass  * @offs: Translation offset
92*d6ffb00aSSimon Glass  *
93*d6ffb00aSSimon Glass  * Some platforms need a special address translation. Those
94*d6ffb00aSSimon Glass  * platforms (e.g. mvebu in SPL) can configure a translation
95*d6ffb00aSSimon Glass  * offset in the DM by calling this function. It will be
96*d6ffb00aSSimon Glass  * added to all addresses returned in dev_get_addr().
97*d6ffb00aSSimon Glass  */
98*d6ffb00aSSimon Glass void dm_set_translation_offset(fdt_addr_t offs);
99*d6ffb00aSSimon Glass 
100*d6ffb00aSSimon Glass /**
101*d6ffb00aSSimon Glass  * dm_get_translation_offset() - Get translation offset
102*d6ffb00aSSimon Glass  *
103*d6ffb00aSSimon Glass  * This function returns the translation offset that can
104*d6ffb00aSSimon Glass  * be configured by calling dm_set_translation_offset().
105*d6ffb00aSSimon Glass  *
106*d6ffb00aSSimon Glass  * @return translation offset for the device address (0 as default).
107*d6ffb00aSSimon Glass  */
108*d6ffb00aSSimon Glass fdt_addr_t dm_get_translation_offset(void);
109*d6ffb00aSSimon Glass 
110*d6ffb00aSSimon Glass #endif
111