11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */ 2a4f139d7SJerome Forissier /* 301254f1dSEtienne Carriere * Copyright (c) 2016-2021, Linaro Limited 4a4f139d7SJerome Forissier */ 5a4f139d7SJerome Forissier 6a4f139d7SJerome Forissier #ifndef KERNEL_DT_H 7a4f139d7SJerome Forissier #define KERNEL_DT_H 8a4f139d7SJerome Forissier 9a4f139d7SJerome Forissier #include <compiler.h> 10702fe5a7SClément Léger #include <kernel/interrupt.h> 11c0cfb36cSEtienne Carriere #include <kernel/panic.h> 1261bdedeaSJerome Forissier #include <scattered_array.h> 13a4f139d7SJerome Forissier #include <stdint.h> 1401254f1dSEtienne Carriere #include <tee_api_types.h> 15a4f139d7SJerome Forissier #include <types_ext.h> 169fe4c797SJerome Forissier #include <util.h> 179fe4c797SJerome Forissier 189fe4c797SJerome Forissier /* 1923b1daf4SPeng Fan * Bitfield to reflect status and secure-status values ("okay", "disabled" 2023b1daf4SPeng Fan * or not present) 219fe4c797SJerome Forissier */ 22b4bfc9a9SJens Wiklander #define DT_STATUS_DISABLED U(0) 239fe4c797SJerome Forissier #define DT_STATUS_OK_NSEC BIT(0) 249fe4c797SJerome Forissier #define DT_STATUS_OK_SEC BIT(1) 25a4f139d7SJerome Forissier 26c0cfb36cSEtienne Carriere #define DT_INFO_INVALID_REG ((paddr_t)-1) 27df7cecc0SLionel Debieve #define DT_INFO_INVALID_REG_SIZE ((size_t)-1) 28c0cfb36cSEtienne Carriere #define DT_INFO_INVALID_CLOCK -1 29c0cfb36cSEtienne Carriere #define DT_INFO_INVALID_RESET -1 3095cdc5e0SCedric Neveux #define DT_INFO_INVALID_INTERRUPT -1 3195cdc5e0SCedric Neveux 32c0cfb36cSEtienne Carriere /* 33c0cfb36cSEtienne Carriere * @status: Bit mask for DT_STATUS_* 34c0cfb36cSEtienne Carriere * @reg: Device register physical base address or DT_INFO_INVALID_REG 3506fd21ddSLionel Debieve * @reg_size: Device register size or DT_INFO_INVALID_REG_SIZE 36c0cfb36cSEtienne Carriere * @clock: Device identifier (positive value) or DT_INFO_INVALID_CLOCK 37c0cfb36cSEtienne Carriere * @reset: Device reset identifier (positive value) or DT_INFO_INVALID_CLOCK 387acb3a47SLudovic Barre * @interrupt: Device interrupt identifier (positive value) or 397acb3a47SLudovic Barre * DT_INFO_INVALID_INTERRUPT 40702fe5a7SClément Léger * @type: IRQ_TYPE_* value parsed from interrupts properties or IRQ_TYPE_NONE if 41702fe5a7SClément Léger * not present 42702fe5a7SClément Léger * @prio: interrupt priority parsed from interrupts properties or 0 if not 43702fe5a7SClément Léger * present 44c0cfb36cSEtienne Carriere */ 45c0cfb36cSEtienne Carriere struct dt_node_info { 46c0cfb36cSEtienne Carriere unsigned int status; 47c0cfb36cSEtienne Carriere paddr_t reg; 4806fd21ddSLionel Debieve size_t reg_size; 49c0cfb36cSEtienne Carriere int clock; 50c0cfb36cSEtienne Carriere int reset; 517acb3a47SLudovic Barre int interrupt; 52702fe5a7SClément Léger uint32_t type; 53702fe5a7SClément Léger uint32_t prio; 54c0cfb36cSEtienne Carriere }; 55c0cfb36cSEtienne Carriere 56a4f139d7SJerome Forissier /* 57a4f139d7SJerome Forissier * DT-aware drivers 58a4f139d7SJerome Forissier */ 59a4f139d7SJerome Forissier 60a4f139d7SJerome Forissier struct dt_device_match { 61a4f139d7SJerome Forissier const char *compatible; 627e6a39feSEtienne Carriere const void *compat_data; 63a4f139d7SJerome Forissier }; 64a4f139d7SJerome Forissier 6501254f1dSEtienne Carriere /* 66a5d5bbc8SVesa Jääskeläinen * DT_MAP_AUTO: Uses status properties from device tree to determine mapping. 67a5d5bbc8SVesa Jääskeläinen * DT_MAP_SECURE: Force mapping for device to be secure. 68a5d5bbc8SVesa Jääskeläinen * DT_MAP_NON_SECURE: Force mapping for device to be non-secure. 69a5d5bbc8SVesa Jääskeläinen */ 70a5d5bbc8SVesa Jääskeläinen enum dt_map_dev_directive { 71a5d5bbc8SVesa Jääskeläinen DT_MAP_AUTO, 72a5d5bbc8SVesa Jääskeläinen DT_MAP_SECURE, 73a5d5bbc8SVesa Jääskeläinen DT_MAP_NON_SECURE 74a5d5bbc8SVesa Jääskeläinen }; 75a5d5bbc8SVesa Jääskeläinen 764e45454aSJens Wiklander /* 77*e6027f48SAlvin Chang * struct dt_descriptor - Descriptor of the device tree 78*e6027f48SAlvin Chang * @blob: Pointer to the device tree binary 79*e6027f48SAlvin Chang * @frag_id: Used ID of fragments for device tree overlay 80*e6027f48SAlvin Chang */ 81*e6027f48SAlvin Chang struct dt_descriptor { 82*e6027f48SAlvin Chang void *blob; 83*e6027f48SAlvin Chang #ifdef _CFG_USE_DTB_OVERLAY 84*e6027f48SAlvin Chang int frag_id; 85*e6027f48SAlvin Chang #endif 86*e6027f48SAlvin Chang }; 87*e6027f48SAlvin Chang 88*e6027f48SAlvin Chang extern uint8_t embedded_secure_dtb[]; 89*e6027f48SAlvin Chang 90*e6027f48SAlvin Chang /* 914e45454aSJens Wiklander * dt_getprop_as_number() - get a DT property a unsigned number 924e45454aSJens Wiklander * @fdt: DT base address 934e45454aSJens Wiklander * @nodeoffset: node offset 944e45454aSJens Wiklander * @name: property string name 954e45454aSJens Wiklander * @num: output number read 964e45454aSJens Wiklander * Return 0 on success and a negative FDT error value on error 974e45454aSJens Wiklander * 984e45454aSJens Wiklander * The size of the property determines if it is read as an unsigned 32-bit 994e45454aSJens Wiklander * or 64-bit integer. 1004e45454aSJens Wiklander */ 1014e45454aSJens Wiklander int dt_getprop_as_number(const void *fdt, int nodeoffset, const char *name, 1024e45454aSJens Wiklander uint64_t *num); 1034e45454aSJens Wiklander 1049e3c57c8SEtienne Carriere #ifdef CFG_DT 105a4f139d7SJerome Forissier /* 106a4f139d7SJerome Forissier * Find a driver that is suitable for the given DT node, that is, with 107a4f139d7SJerome Forissier * a matching "compatible" property. 108a4f139d7SJerome Forissier * 109a4f139d7SJerome Forissier * @fdt: pointer to the device tree 110a4f139d7SJerome Forissier * @offs: node offset 111a4f139d7SJerome Forissier */ 112a4f139d7SJerome Forissier const struct dt_driver *dt_find_compatible_driver(const void *fdt, int offs); 113a4f139d7SJerome Forissier 1149fe4c797SJerome Forissier /* 1157ba16abbSJerome Forissier * Map a device into secure or non-secure memory and return the base VA and 1167ba16abbSJerome Forissier * the mapping size. The mapping is done with type MEM_AREA_IO_SEC or 1177ba16abbSJerome Forissier * MEM_AREA_IO_NSEC, depending on the device status. 1187ba16abbSJerome Forissier * If the mapping already exists, the function simply returns the @vbase and 1197ba16abbSJerome Forissier * @size information. 1207ba16abbSJerome Forissier * 1217ba16abbSJerome Forissier * @offs is the offset of the node that describes the device in @fdt. 1227ba16abbSJerome Forissier * @base receives the base virtual address corresponding to the base physical 1237ba16abbSJerome Forissier * address of the "reg" property 1247ba16abbSJerome Forissier * @size receives the size of the mapping 125a5d5bbc8SVesa Jääskeläinen * @mapping what kind of mapping is done for memory. 1267ba16abbSJerome Forissier * 1277ba16abbSJerome Forissier * Returns 0 on success or -1 in case of error. 1287ba16abbSJerome Forissier */ 129a5d5bbc8SVesa Jääskeläinen int dt_map_dev(const void *fdt, int offs, vaddr_t *base, size_t *size, 130a5d5bbc8SVesa Jääskeläinen enum dt_map_dev_directive mapping); 1317ba16abbSJerome Forissier 1327ba16abbSJerome Forissier /* 13350f3b323SPeng Fan * Check whether the node at @offs contains the property with propname or not. 13450f3b323SPeng Fan * 13550f3b323SPeng Fan * @offs is the offset of the node that describes the device in @fdt. 13650f3b323SPeng Fan * @propname is the property that need to check 13750f3b323SPeng Fan * 13850f3b323SPeng Fan * Returns true on success or false if no propname. 13950f3b323SPeng Fan */ 14050f3b323SPeng Fan bool dt_have_prop(const void *fdt, int offs, const char *propname); 14150f3b323SPeng Fan 14250f3b323SPeng Fan /* 14395cdc5e0SCedric Neveux * Modify or add "status" property to "disabled" 14495cdc5e0SCedric Neveux * 14595cdc5e0SCedric Neveux * @fdt reference to the Device Tree 14695cdc5e0SCedric Neveux * @node is the node offset to modify 14795cdc5e0SCedric Neveux * 14895cdc5e0SCedric Neveux * Returns 0 on success or -1 on failure 14995cdc5e0SCedric Neveux */ 15095cdc5e0SCedric Neveux int dt_disable_status(void *fdt, int node); 15195cdc5e0SCedric Neveux 15295cdc5e0SCedric Neveux /* 15395cdc5e0SCedric Neveux * Force secure-status = "okay" and status="disabled" for the target node. 15495cdc5e0SCedric Neveux * 15595cdc5e0SCedric Neveux * @fdt reference to the Device Tree 15695cdc5e0SCedric Neveux * @node is the node offset to modify 15795cdc5e0SCedric Neveux * 15895cdc5e0SCedric Neveux * Returns 0 on success or -1 on failure 15995cdc5e0SCedric Neveux */ 16095cdc5e0SCedric Neveux int dt_enable_secure_status(void *fdt, int node); 16195cdc5e0SCedric Neveux 16295cdc5e0SCedric Neveux /* 1639fe4c797SJerome Forissier * FDT manipulation functions, not provided by <libfdt.h> 1649fe4c797SJerome Forissier */ 1659fe4c797SJerome Forissier 1669fe4c797SJerome Forissier /* 1679fe4c797SJerome Forissier * Return the base address for the "reg" property of the specified node or 1689fe4c797SJerome Forissier * (paddr_t)-1 in case of error 1699fe4c797SJerome Forissier */ 170f354a5d8SGatien Chevallier paddr_t fdt_reg_base_address(const void *fdt, int offs); 1719fe4c797SJerome Forissier 1729fe4c797SJerome Forissier /* 1739fe4c797SJerome Forissier * Return the reg size for the reg property of the specified node or -1 in case 1749fe4c797SJerome Forissier * of error 1759fe4c797SJerome Forissier */ 176f354a5d8SGatien Chevallier size_t fdt_reg_size(const void *fdt, int offs); 1779fe4c797SJerome Forissier 1789fe4c797SJerome Forissier /* 1799fe4c797SJerome Forissier * Read the status and secure-status properties into a bitfield. 180c020046dSEtienne Carriere * Return -1 on failure, DT_STATUS_DISABLED if the node is disabled, 181c020046dSEtienne Carriere * otherwise return a combination of DT_STATUS_OK_NSEC and DT_STATUS_OK_SEC. 1829fe4c797SJerome Forissier */ 183f354a5d8SGatien Chevallier int fdt_get_status(const void *fdt, int offs); 1849fe4c797SJerome Forissier 185c0cfb36cSEtienne Carriere /* 186c0cfb36cSEtienne Carriere * fdt_fill_device_info - Get generic device info from a node 187c0cfb36cSEtienne Carriere * 188c0cfb36cSEtienne Carriere * This function fills the generic information from a given node. 189c0cfb36cSEtienne Carriere * Currently supports a single base register, a single clock, 190c0cfb36cSEtienne Carriere * a single reset ID line and a single interrupt ID. 191c0cfb36cSEtienne Carriere * Default DT_INFO_* macros are used when the relate property is not found. 192c0cfb36cSEtienne Carriere */ 193f354a5d8SGatien Chevallier void fdt_fill_device_info(const void *fdt, struct dt_node_info *info, 194df45c114SEtienne Carriere int node); 195876826f3SGabriel Fernandez /* 196876826f3SGabriel Fernandez * Read cells from a given property of the given node. Any number of 32-bit 197876826f3SGabriel Fernandez * cells of the property can be read. Returns 0 on success, or a negative 198876826f3SGabriel Fernandez * FDT error value otherwise. 199876826f3SGabriel Fernandez */ 200f354a5d8SGatien Chevallier int fdt_read_uint32_array(const void *fdt, int node, const char *prop_name, 201876826f3SGabriel Fernandez uint32_t *array, size_t count); 202876826f3SGabriel Fernandez 203876826f3SGabriel Fernandez /* 2047c3a6b7bSGatien Chevallier * Read one cell from a given multi-value property of the given node. 2057c3a6b7bSGatien Chevallier * Returns 0 on success, or a negative FDT error value otherwise. 2067c3a6b7bSGatien Chevallier */ 2077c3a6b7bSGatien Chevallier int fdt_read_uint32_index(const void *fdt, int node, const char *prop_name, 2087c3a6b7bSGatien Chevallier int index, uint32_t *value); 2097c3a6b7bSGatien Chevallier 2107c3a6b7bSGatien Chevallier /* 211876826f3SGabriel Fernandez * Read one cell from a given property of the given node. 212876826f3SGabriel Fernandez * Returns 0 on success, or a negative FDT error value otherwise. 213876826f3SGabriel Fernandez */ 214f354a5d8SGatien Chevallier int fdt_read_uint32(const void *fdt, int node, const char *prop_name, 215876826f3SGabriel Fernandez uint32_t *value); 216876826f3SGabriel Fernandez 217876826f3SGabriel Fernandez /* 218876826f3SGabriel Fernandez * Read one cell from a property of a cell or default to a given value 219876826f3SGabriel Fernandez * Returns the 32bit cell value or @dflt_value on failure. 220876826f3SGabriel Fernandez */ 221f354a5d8SGatien Chevallier uint32_t fdt_read_uint32_default(const void *fdt, int node, 222876826f3SGabriel Fernandez const char *prop_name, uint32_t dflt_value); 223876826f3SGabriel Fernandez 224876826f3SGabriel Fernandez /* 22507ced948SGatien Chevallier * This function fills reg node info (base & size) with an index. 22607ced948SGatien Chevallier * 22707ced948SGatien Chevallier * Returns 0 on success and a negative FDT error code on failure. 22807ced948SGatien Chevallier */ 22907ced948SGatien Chevallier int fdt_get_reg_props_by_index(const void *fdt, int node, int index, 23007ced948SGatien Chevallier paddr_t *base, size_t *size); 23107ced948SGatien Chevallier 23207ced948SGatien Chevallier /* 23307ced948SGatien Chevallier * This function fills reg node info (base & size) with an index found by 23407ced948SGatien Chevallier * checking the reg-names node. 23507ced948SGatien Chevallier * 23607ced948SGatien Chevallier * Returns 0 on success and a negative FDT error code on failure. 23707ced948SGatien Chevallier */ 23807ced948SGatien Chevallier int fdt_get_reg_props_by_name(const void *fdt, int node, const char *name, 23907ced948SGatien Chevallier paddr_t *base, size_t *size); 24007ced948SGatien Chevallier 241*e6027f48SAlvin Chang /* Returns embedded DTB if present, then external DTB if found, then NULL */ 242*e6027f48SAlvin Chang void *get_dt(void); 243*e6027f48SAlvin Chang 244*e6027f48SAlvin Chang /* 245*e6027f48SAlvin Chang * get_secure_dt() - returns secure DTB for drivers 246*e6027f48SAlvin Chang * 247*e6027f48SAlvin Chang * Returns device tree that is considered secure for drivers to use. 248*e6027f48SAlvin Chang * 249*e6027f48SAlvin Chang * 1. Returns embedded DTB if available, 250*e6027f48SAlvin Chang * 2. Secure external DTB if available, 251*e6027f48SAlvin Chang * 3. If neither then NULL 252*e6027f48SAlvin Chang */ 253*e6027f48SAlvin Chang void *get_secure_dt(void); 254*e6027f48SAlvin Chang 255*e6027f48SAlvin Chang /* Returns embedded DTB location if present, otherwise NULL */ 256*e6027f48SAlvin Chang void *get_embedded_dt(void); 257*e6027f48SAlvin Chang 258*e6027f48SAlvin Chang /* Returns true if passed DTB is same as Embedded DTB, otherwise false */ 259*e6027f48SAlvin Chang static inline bool is_embedded_dt(void *fdt) 260*e6027f48SAlvin Chang { 261*e6027f48SAlvin Chang return fdt && fdt == get_embedded_dt(); 262*e6027f48SAlvin Chang } 263*e6027f48SAlvin Chang 264*e6027f48SAlvin Chang /* Returns DTB descriptor of the external DTB if present, otherwise NULL */ 265*e6027f48SAlvin Chang struct dt_descriptor *get_external_dt_desc(void); 266*e6027f48SAlvin Chang 267*e6027f48SAlvin Chang /* 268*e6027f48SAlvin Chang * init_external_dt() - Initialize the external DTB located at given address. 269*e6027f48SAlvin Chang * @phys_dt: Physical address where the external DTB located. 270*e6027f48SAlvin Chang * 271*e6027f48SAlvin Chang * Initialize the external DTB. 272*e6027f48SAlvin Chang * 273*e6027f48SAlvin Chang * 1. Add MMU mapping of the external DTB, 274*e6027f48SAlvin Chang * 2. Initialize device tree overlay 275*e6027f48SAlvin Chang */ 276*e6027f48SAlvin Chang void init_external_dt(unsigned long phys_dt); 277*e6027f48SAlvin Chang 278*e6027f48SAlvin Chang /* Returns external DTB if present, otherwise NULL */ 279*e6027f48SAlvin Chang void *get_external_dt(void); 280*e6027f48SAlvin Chang 281*e6027f48SAlvin Chang /* 282*e6027f48SAlvin Chang * add_dt_path_subnode() - Add new child node into a parent node. 283*e6027f48SAlvin Chang * @dt: Pointer to a device tree descriptor which has DTB. 284*e6027f48SAlvin Chang * @path: Path to the parent node. 285*e6027f48SAlvin Chang * @subnode: Name of the child node. 286*e6027f48SAlvin Chang * 287*e6027f48SAlvin Chang * Returns the offset of the child node in DTB on success or a negative value 288*e6027f48SAlvin Chang * upon error. 289*e6027f48SAlvin Chang */ 290*e6027f48SAlvin Chang int add_dt_path_subnode(struct dt_descriptor *dt, const char *path, 291*e6027f48SAlvin Chang const char *subnode); 292*e6027f48SAlvin Chang 293*e6027f48SAlvin Chang /* 294*e6027f48SAlvin Chang * add_res_mem_dt_node() - Create "reserved-memory" parent and child nodes. 295*e6027f48SAlvin Chang * @dt: Pointer to a device tree descriptor which has DTB. 296*e6027f48SAlvin Chang * @name: Name of the child node. 297*e6027f48SAlvin Chang * @pa: Physical address of specific reserved memory region. 298*e6027f48SAlvin Chang * @size: Size of specific reserved memory region. 299*e6027f48SAlvin Chang * 300*e6027f48SAlvin Chang * Returns 0 if succeeds, otherwise -1. 301*e6027f48SAlvin Chang */ 302*e6027f48SAlvin Chang int add_res_mem_dt_node(struct dt_descriptor *dt, const char *name, 303*e6027f48SAlvin Chang paddr_t pa, size_t size); 304*e6027f48SAlvin Chang 3059fe4c797SJerome Forissier #else /* !CFG_DT */ 306a4f139d7SJerome Forissier 307a4f139d7SJerome Forissier static inline const struct dt_driver *dt_find_compatible_driver( 308a4f139d7SJerome Forissier const void *fdt __unused, 309a4f139d7SJerome Forissier int offs __unused) 310a4f139d7SJerome Forissier { 311a4f139d7SJerome Forissier return NULL; 312a4f139d7SJerome Forissier } 313a4f139d7SJerome Forissier 3147ba16abbSJerome Forissier static inline int dt_map_dev(const void *fdt __unused, int offs __unused, 315a5d5bbc8SVesa Jääskeläinen vaddr_t *vbase __unused, size_t *size __unused, 316a5d5bbc8SVesa Jääskeläinen enum dt_map_dev_directive mapping __unused) 3177ba16abbSJerome Forissier { 3187ba16abbSJerome Forissier return -1; 3197ba16abbSJerome Forissier } 3207ba16abbSJerome Forissier 321f354a5d8SGatien Chevallier static inline paddr_t fdt_reg_base_address(const void *fdt __unused, 3229fe4c797SJerome Forissier int offs __unused) 3239fe4c797SJerome Forissier { 3249fe4c797SJerome Forissier return (paddr_t)-1; 3259fe4c797SJerome Forissier } 3269fe4c797SJerome Forissier 327f354a5d8SGatien Chevallier static inline size_t fdt_reg_size(const void *fdt __unused, 3289fe4c797SJerome Forissier int offs __unused) 3299fe4c797SJerome Forissier { 330df7cecc0SLionel Debieve return (size_t)-1; 3319fe4c797SJerome Forissier } 3329fe4c797SJerome Forissier 333f354a5d8SGatien Chevallier static inline int fdt_get_status(const void *fdt __unused, int offs __unused) 3349fe4c797SJerome Forissier { 3359fe4c797SJerome Forissier return -1; 3369fe4c797SJerome Forissier } 3379fe4c797SJerome Forissier 3381e866588SJerome Forissier __noreturn 339f354a5d8SGatien Chevallier static inline void fdt_fill_device_info(const void *fdt __unused, 340c0cfb36cSEtienne Carriere struct dt_node_info *info __unused, 341c0cfb36cSEtienne Carriere int node __unused) 342c0cfb36cSEtienne Carriere { 343c0cfb36cSEtienne Carriere panic(); 344c0cfb36cSEtienne Carriere } 345876826f3SGabriel Fernandez 346f354a5d8SGatien Chevallier static inline int fdt_read_uint32_array(const void *fdt __unused, 347876826f3SGabriel Fernandez int node __unused, 348876826f3SGabriel Fernandez const char *prop_name __unused, 349876826f3SGabriel Fernandez uint32_t *array __unused, 350876826f3SGabriel Fernandez size_t count __unused) 351876826f3SGabriel Fernandez { 352876826f3SGabriel Fernandez return -1; 353876826f3SGabriel Fernandez } 354876826f3SGabriel Fernandez 355f354a5d8SGatien Chevallier static inline int fdt_read_uint32(const void *fdt __unused, 356876826f3SGabriel Fernandez int node __unused, 357876826f3SGabriel Fernandez const char *prop_name __unused, 358876826f3SGabriel Fernandez uint32_t *value __unused) 359876826f3SGabriel Fernandez { 360876826f3SGabriel Fernandez return -1; 361876826f3SGabriel Fernandez } 362876826f3SGabriel Fernandez 363f354a5d8SGatien Chevallier static inline uint32_t fdt_read_uint32_default(const void *fdt __unused, 364876826f3SGabriel Fernandez int node __unused, 365876826f3SGabriel Fernandez const char *prop_name __unused, 366876826f3SGabriel Fernandez uint32_t dflt_value __unused) 367876826f3SGabriel Fernandez { 368876826f3SGabriel Fernandez return dflt_value; 369876826f3SGabriel Fernandez } 370876826f3SGabriel Fernandez 3717c3a6b7bSGatien Chevallier static inline int fdt_read_uint32_index(const void *fdt __unused, 3727c3a6b7bSGatien Chevallier int node __unused, 3737c3a6b7bSGatien Chevallier const char *prop_name __unused, 3747c3a6b7bSGatien Chevallier int index __unused, 3757c3a6b7bSGatien Chevallier uint32_t *value __unused) 3767c3a6b7bSGatien Chevallier { 3777c3a6b7bSGatien Chevallier return -1; 3787c3a6b7bSGatien Chevallier } 3797c3a6b7bSGatien Chevallier 38007ced948SGatien Chevallier static inline int fdt_get_reg_props_by_index(const void *fdt __unused, 38107ced948SGatien Chevallier int node __unused, 38207ced948SGatien Chevallier int index __unused, 38307ced948SGatien Chevallier paddr_t *base __unused, 38407ced948SGatien Chevallier size_t *size __unused) 38507ced948SGatien Chevallier { 38607ced948SGatien Chevallier return -1; 38707ced948SGatien Chevallier } 38807ced948SGatien Chevallier 38907ced948SGatien Chevallier static inline int fdt_get_reg_props_by_name(const void *fdt __unused, 39007ced948SGatien Chevallier int node __unused, 39107ced948SGatien Chevallier const char *name __unused, 39207ced948SGatien Chevallier paddr_t *base __unused, 39307ced948SGatien Chevallier size_t *size __unused) 39407ced948SGatien Chevallier { 39507ced948SGatien Chevallier return -1; 39607ced948SGatien Chevallier } 39707ced948SGatien Chevallier 398*e6027f48SAlvin Chang static inline void *get_dt(void) 399*e6027f48SAlvin Chang { 400*e6027f48SAlvin Chang return NULL; 401*e6027f48SAlvin Chang } 402*e6027f48SAlvin Chang 403*e6027f48SAlvin Chang static inline void *get_secure_dt(void) 404*e6027f48SAlvin Chang { 405*e6027f48SAlvin Chang return NULL; 406*e6027f48SAlvin Chang } 407*e6027f48SAlvin Chang 408*e6027f48SAlvin Chang static inline void *get_embedded_dt(void) 409*e6027f48SAlvin Chang { 410*e6027f48SAlvin Chang return NULL; 411*e6027f48SAlvin Chang } 412*e6027f48SAlvin Chang 413*e6027f48SAlvin Chang static inline bool is_embedded_dt(void *fdt __unused) 414*e6027f48SAlvin Chang { 415*e6027f48SAlvin Chang return false; 416*e6027f48SAlvin Chang } 417*e6027f48SAlvin Chang 418*e6027f48SAlvin Chang static inline struct dt_descriptor *get_external_dt_desc(void) 419*e6027f48SAlvin Chang { 420*e6027f48SAlvin Chang return NULL; 421*e6027f48SAlvin Chang } 422*e6027f48SAlvin Chang 423*e6027f48SAlvin Chang static inline void init_external_dt(unsigned long phys_dt __unused) 424*e6027f48SAlvin Chang { 425*e6027f48SAlvin Chang } 426*e6027f48SAlvin Chang 427*e6027f48SAlvin Chang static inline void *get_external_dt(void) 428*e6027f48SAlvin Chang { 429*e6027f48SAlvin Chang return NULL; 430*e6027f48SAlvin Chang } 431*e6027f48SAlvin Chang 432*e6027f48SAlvin Chang static inline int add_dt_path_subnode(struct dt_descriptor *dt __unused, 433*e6027f48SAlvin Chang const char *path __unused, 434*e6027f48SAlvin Chang const char *subnode __unused) 435*e6027f48SAlvin Chang { 436*e6027f48SAlvin Chang return -1; 437*e6027f48SAlvin Chang } 438*e6027f48SAlvin Chang 439*e6027f48SAlvin Chang static inline int add_res_mem_dt_node(struct dt_descriptor *dt __unused, 440*e6027f48SAlvin Chang const char *name __unused, 441*e6027f48SAlvin Chang paddr_t pa __unused, 442*e6027f48SAlvin Chang size_t size __unused) 443*e6027f48SAlvin Chang { 444*e6027f48SAlvin Chang return -1; 445*e6027f48SAlvin Chang } 446*e6027f48SAlvin Chang 447a4f139d7SJerome Forissier #endif /* !CFG_DT */ 448a4f139d7SJerome Forissier #endif /* KERNEL_DT_H */ 449