Home | History | Annotate | Download | only in dm
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * Copyright (c) 2017 Google, Inc
      4  *
      5  * (C) Copyright 2012
      6  * Pavel Herrmann <morpheus.ibis (at) gmail.com>
      7  * Marek Vasut <marex (at) 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(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(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(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(struct udevice *dev, int index);
     57 
     58 /**
     59  * devfdt_map_physmem() - Read device address from reg property of the
     60  *                     device node and map the address into CPU address
     61  *                     space.
     62  *
     63  * @dev: Pointer to device
     64  * @size: size of the memory to map
     65  *
     66  * @return  mapped address, or NULL if the device does not have reg
     67  *          property.
     68  */
     69 void *devfdt_map_physmem(struct udevice *dev, unsigned long size);
     70 
     71 /**
     72  * devfdt_get_addr_index() - Get the indexed reg property of a device
     73  *
     74  * @dev: Pointer to a device
     75  * @index: the 'reg' property can hold a list of <addr, size> pairs
     76  *	   and @index is used to select which one is required
     77  *
     78  * @return addr
     79  */
     80 fdt_addr_t devfdt_get_addr_index(struct udevice *dev, int index);
     81 
     82 /**
     83  * devfdt_get_addr_size_index() - Get the indexed reg property of a device
     84  *
     85  * Returns the address and size specified in the '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  * @size: Pointer to size varible - this function returns the size
     91  *        specified in the 'reg' property here
     92  *
     93  * @return addr
     94  */
     95 fdt_addr_t devfdt_get_addr_size_index(struct udevice *dev, int index,
     96 				   fdt_size_t *size);
     97 
     98 /**
     99  * devfdt_get_addr_name() - Get the reg property of a device, indexed by name
    100  *
    101  * @dev: Pointer to a device
    102  * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
    103  *	  'reg-names' property providing named-based identification. @index
    104  *	  indicates the value to search for in 'reg-names'.
    105  *
    106  * @return addr
    107  */
    108 fdt_addr_t devfdt_get_addr_name(struct udevice *dev, const char *name);
    109 
    110 /**
    111  * dm_set_translation_offset() - Set translation offset
    112  * @offs: Translation offset
    113  *
    114  * Some platforms need a special address translation. Those
    115  * platforms (e.g. mvebu in SPL) can configure a translation
    116  * offset in the DM by calling this function. It will be
    117  * added to all addresses returned in devfdt_get_addr().
    118  */
    119 void dm_set_translation_offset(fdt_addr_t offs);
    120 
    121 /**
    122  * dm_get_translation_offset() - Get translation offset
    123  *
    124  * This function returns the translation offset that can
    125  * be configured by calling dm_set_translation_offset().
    126  *
    127  * @return translation offset for the device address (0 as default).
    128  */
    129 fdt_addr_t dm_get_translation_offset(void);
    130 
    131 #endif
    132