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