11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */ 2a4f139d7SJerome Forissier /* 301254f1dSEtienne Carriere * Copyright (c) 2016-2021, Linaro Limited 4a4f139d7SJerome Forissier */ 5a4f139d7SJerome Forissier 6d50fee03SEtienne Carriere #ifndef __KERNEL_DT_H 7d50fee03SEtienne Carriere #define __KERNEL_DT_H 8a4f139d7SJerome Forissier 9a4f139d7SJerome Forissier #include <compiler.h> 10c0cfb36cSEtienne Carriere #include <kernel/panic.h> 1161bdedeaSJerome Forissier #include <scattered_array.h> 12a4f139d7SJerome Forissier #include <stdint.h> 1301254f1dSEtienne Carriere #include <tee_api_types.h> 14a4f139d7SJerome Forissier #include <types_ext.h> 159fe4c797SJerome Forissier #include <util.h> 169fe4c797SJerome Forissier 179fe4c797SJerome Forissier /* 1823b1daf4SPeng Fan * Bitfield to reflect status and secure-status values ("okay", "disabled" 1923b1daf4SPeng Fan * or not present) 209fe4c797SJerome Forissier */ 21b4bfc9a9SJens Wiklander #define DT_STATUS_DISABLED U(0) 229fe4c797SJerome Forissier #define DT_STATUS_OK_NSEC BIT(0) 239fe4c797SJerome Forissier #define DT_STATUS_OK_SEC BIT(1) 24a4f139d7SJerome Forissier 25c0cfb36cSEtienne Carriere #define DT_INFO_INVALID_REG ((paddr_t)-1) 26df7cecc0SLionel Debieve #define DT_INFO_INVALID_REG_SIZE ((size_t)-1) 27c0cfb36cSEtienne Carriere #define DT_INFO_INVALID_CLOCK -1 28c0cfb36cSEtienne Carriere #define DT_INFO_INVALID_RESET -1 2995cdc5e0SCedric Neveux #define DT_INFO_INVALID_INTERRUPT -1 3095cdc5e0SCedric Neveux 31c0cfb36cSEtienne Carriere /* 32c0cfb36cSEtienne Carriere * @status: Bit mask for DT_STATUS_* 33c0cfb36cSEtienne Carriere * @reg: Device register physical base address or DT_INFO_INVALID_REG 3406fd21ddSLionel Debieve * @reg_size: Device register size or DT_INFO_INVALID_REG_SIZE 35c0cfb36cSEtienne Carriere * @clock: Device identifier (positive value) or DT_INFO_INVALID_CLOCK 36c0cfb36cSEtienne Carriere * @reset: Device reset identifier (positive value) or DT_INFO_INVALID_CLOCK 377acb3a47SLudovic Barre * @interrupt: Device interrupt identifier (positive value) or 387acb3a47SLudovic Barre * DT_INFO_INVALID_INTERRUPT 39702fe5a7SClément Léger * @type: IRQ_TYPE_* value parsed from interrupts properties or IRQ_TYPE_NONE if 40702fe5a7SClément Léger * not present 41702fe5a7SClément Léger * @prio: interrupt priority parsed from interrupts properties or 0 if not 42702fe5a7SClément Léger * present 43c0cfb36cSEtienne Carriere */ 44c0cfb36cSEtienne Carriere struct dt_node_info { 45c0cfb36cSEtienne Carriere unsigned int status; 46c0cfb36cSEtienne Carriere paddr_t reg; 4706fd21ddSLionel Debieve size_t reg_size; 48c0cfb36cSEtienne Carriere int clock; 49c0cfb36cSEtienne Carriere int reset; 507acb3a47SLudovic Barre int interrupt; 51702fe5a7SClément Léger uint32_t type; 52702fe5a7SClément Léger uint32_t prio; 53c0cfb36cSEtienne Carriere }; 54c0cfb36cSEtienne Carriere 55a4f139d7SJerome Forissier /* 56a4f139d7SJerome Forissier * DT-aware drivers 57a4f139d7SJerome Forissier */ 58a4f139d7SJerome Forissier 59a4f139d7SJerome Forissier struct dt_device_match { 60a4f139d7SJerome Forissier const char *compatible; 617e6a39feSEtienne Carriere const void *compat_data; 62a4f139d7SJerome Forissier }; 63a4f139d7SJerome Forissier 6401254f1dSEtienne Carriere /* 65a5d5bbc8SVesa Jääskeläinen * DT_MAP_AUTO: Uses status properties from device tree to determine mapping. 66a5d5bbc8SVesa Jääskeläinen * DT_MAP_SECURE: Force mapping for device to be secure. 67a5d5bbc8SVesa Jääskeläinen * DT_MAP_NON_SECURE: Force mapping for device to be non-secure. 68a5d5bbc8SVesa Jääskeläinen */ 69a5d5bbc8SVesa Jääskeläinen enum dt_map_dev_directive { 70a5d5bbc8SVesa Jääskeläinen DT_MAP_AUTO, 71a5d5bbc8SVesa Jääskeläinen DT_MAP_SECURE, 72a5d5bbc8SVesa Jääskeläinen DT_MAP_NON_SECURE 73a5d5bbc8SVesa Jääskeläinen }; 74a5d5bbc8SVesa Jääskeläinen 754e45454aSJens Wiklander /* 76e6027f48SAlvin Chang * struct dt_descriptor - Descriptor of the device tree 77e6027f48SAlvin Chang * @blob: Pointer to the device tree binary 78e6027f48SAlvin Chang * @frag_id: Used ID of fragments for device tree overlay 79e6027f48SAlvin Chang */ 80e6027f48SAlvin Chang struct dt_descriptor { 81e6027f48SAlvin Chang void *blob; 82e6027f48SAlvin Chang #ifdef _CFG_USE_DTB_OVERLAY 83e6027f48SAlvin Chang int frag_id; 84e6027f48SAlvin Chang #endif 85e6027f48SAlvin Chang }; 86e6027f48SAlvin Chang 87e6027f48SAlvin Chang extern uint8_t embedded_secure_dtb[]; 88e6027f48SAlvin Chang 89*5a982d0eSJens Wiklander #ifdef CFG_DT 90e6027f48SAlvin 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 104a4f139d7SJerome Forissier /* 105a4f139d7SJerome Forissier * Find a driver that is suitable for the given DT node, that is, with 106a4f139d7SJerome Forissier * a matching "compatible" property. 107a4f139d7SJerome Forissier * 108a4f139d7SJerome Forissier * @fdt: pointer to the device tree 109a4f139d7SJerome Forissier * @offs: node offset 110a4f139d7SJerome Forissier */ 111a4f139d7SJerome Forissier const struct dt_driver *dt_find_compatible_driver(const void *fdt, int offs); 112a4f139d7SJerome Forissier 1139fe4c797SJerome Forissier /* 1147ba16abbSJerome Forissier * Map a device into secure or non-secure memory and return the base VA and 1157ba16abbSJerome Forissier * the mapping size. The mapping is done with type MEM_AREA_IO_SEC or 1167ba16abbSJerome Forissier * MEM_AREA_IO_NSEC, depending on the device status. 1177ba16abbSJerome Forissier * If the mapping already exists, the function simply returns the @vbase and 1187ba16abbSJerome Forissier * @size information. 1197ba16abbSJerome Forissier * 1207ba16abbSJerome Forissier * @offs is the offset of the node that describes the device in @fdt. 1217ba16abbSJerome Forissier * @base receives the base virtual address corresponding to the base physical 1227ba16abbSJerome Forissier * address of the "reg" property 1237ba16abbSJerome Forissier * @size receives the size of the mapping 124a5d5bbc8SVesa Jääskeläinen * @mapping what kind of mapping is done for memory. 1257ba16abbSJerome Forissier * 1267ba16abbSJerome Forissier * Returns 0 on success or -1 in case of error. 1277ba16abbSJerome Forissier */ 128a5d5bbc8SVesa Jääskeläinen int dt_map_dev(const void *fdt, int offs, vaddr_t *base, size_t *size, 129a5d5bbc8SVesa Jääskeläinen enum dt_map_dev_directive mapping); 1307ba16abbSJerome Forissier 1317ba16abbSJerome Forissier /* 13250f3b323SPeng Fan * Check whether the node at @offs contains the property with propname or not. 13350f3b323SPeng Fan * 13450f3b323SPeng Fan * @offs is the offset of the node that describes the device in @fdt. 13550f3b323SPeng Fan * @propname is the property that need to check 13650f3b323SPeng Fan * 13750f3b323SPeng Fan * Returns true on success or false if no propname. 13850f3b323SPeng Fan */ 13950f3b323SPeng Fan bool dt_have_prop(const void *fdt, int offs, const char *propname); 14050f3b323SPeng Fan 14150f3b323SPeng Fan /* 14295cdc5e0SCedric Neveux * Modify or add "status" property to "disabled" 14395cdc5e0SCedric Neveux * 14495cdc5e0SCedric Neveux * @fdt reference to the Device Tree 14595cdc5e0SCedric Neveux * @node is the node offset to modify 14695cdc5e0SCedric Neveux * 14795cdc5e0SCedric Neveux * Returns 0 on success or -1 on failure 14895cdc5e0SCedric Neveux */ 14995cdc5e0SCedric Neveux int dt_disable_status(void *fdt, int node); 15095cdc5e0SCedric Neveux 15195cdc5e0SCedric Neveux /* 15295cdc5e0SCedric Neveux * Force secure-status = "okay" and status="disabled" for the target node. 15395cdc5e0SCedric Neveux * 15495cdc5e0SCedric Neveux * @fdt reference to the Device Tree 15595cdc5e0SCedric Neveux * @node is the node offset to modify 15695cdc5e0SCedric Neveux * 15795cdc5e0SCedric Neveux * Returns 0 on success or -1 on failure 15895cdc5e0SCedric Neveux */ 15995cdc5e0SCedric Neveux int dt_enable_secure_status(void *fdt, int node); 16095cdc5e0SCedric Neveux 16195cdc5e0SCedric Neveux /* 1629fe4c797SJerome Forissier * FDT manipulation functions, not provided by <libfdt.h> 1639fe4c797SJerome Forissier */ 1649fe4c797SJerome Forissier 1659fe4c797SJerome Forissier /* 1669fe4c797SJerome Forissier * Return the base address for the "reg" property of the specified node or 1679fe4c797SJerome Forissier * (paddr_t)-1 in case of error 1689fe4c797SJerome Forissier */ 169f354a5d8SGatien Chevallier paddr_t fdt_reg_base_address(const void *fdt, int offs); 1709fe4c797SJerome Forissier 1719fe4c797SJerome Forissier /* 1729fe4c797SJerome Forissier * Return the reg size for the reg property of the specified node or -1 in case 1739fe4c797SJerome Forissier * of error 1749fe4c797SJerome Forissier */ 175f354a5d8SGatien Chevallier size_t fdt_reg_size(const void *fdt, int offs); 1769fe4c797SJerome Forissier 1779fe4c797SJerome Forissier /* 1789fe4c797SJerome Forissier * Read the status and secure-status properties into a bitfield. 179c020046dSEtienne Carriere * Return -1 on failure, DT_STATUS_DISABLED if the node is disabled, 180c020046dSEtienne Carriere * otherwise return a combination of DT_STATUS_OK_NSEC and DT_STATUS_OK_SEC. 1819fe4c797SJerome Forissier */ 182f354a5d8SGatien Chevallier int fdt_get_status(const void *fdt, int offs); 1839fe4c797SJerome Forissier 184c0cfb36cSEtienne Carriere /* 185c0cfb36cSEtienne Carriere * fdt_fill_device_info - Get generic device info from a node 186c0cfb36cSEtienne Carriere * 187c0cfb36cSEtienne Carriere * This function fills the generic information from a given node. 188c0cfb36cSEtienne Carriere * Currently supports a single base register, a single clock, 189c0cfb36cSEtienne Carriere * a single reset ID line and a single interrupt ID. 190c0cfb36cSEtienne Carriere * Default DT_INFO_* macros are used when the relate property is not found. 191c0cfb36cSEtienne Carriere */ 192f354a5d8SGatien Chevallier void fdt_fill_device_info(const void *fdt, struct dt_node_info *info, 193df45c114SEtienne Carriere int node); 194876826f3SGabriel Fernandez /* 195876826f3SGabriel Fernandez * Read cells from a given property of the given node. Any number of 32-bit 196876826f3SGabriel Fernandez * cells of the property can be read. Returns 0 on success, or a negative 197876826f3SGabriel Fernandez * FDT error value otherwise. 198876826f3SGabriel Fernandez */ 199f354a5d8SGatien Chevallier int fdt_read_uint32_array(const void *fdt, int node, const char *prop_name, 200876826f3SGabriel Fernandez uint32_t *array, size_t count); 201876826f3SGabriel Fernandez 202876826f3SGabriel Fernandez /* 2037c3a6b7bSGatien Chevallier * Read one cell from a given multi-value property of the given node. 2047c3a6b7bSGatien Chevallier * Returns 0 on success, or a negative FDT error value otherwise. 2057c3a6b7bSGatien Chevallier */ 2067c3a6b7bSGatien Chevallier int fdt_read_uint32_index(const void *fdt, int node, const char *prop_name, 2077c3a6b7bSGatien Chevallier int index, uint32_t *value); 2087c3a6b7bSGatien Chevallier 2097c3a6b7bSGatien Chevallier /* 210876826f3SGabriel Fernandez * Read one cell from a given property of the given node. 211876826f3SGabriel Fernandez * Returns 0 on success, or a negative FDT error value otherwise. 212876826f3SGabriel Fernandez */ 213f354a5d8SGatien Chevallier int fdt_read_uint32(const void *fdt, int node, const char *prop_name, 214876826f3SGabriel Fernandez uint32_t *value); 215876826f3SGabriel Fernandez 216876826f3SGabriel Fernandez /* 217876826f3SGabriel Fernandez * Read one cell from a property of a cell or default to a given value 218876826f3SGabriel Fernandez * Returns the 32bit cell value or @dflt_value on failure. 219876826f3SGabriel Fernandez */ 220f354a5d8SGatien Chevallier uint32_t fdt_read_uint32_default(const void *fdt, int node, 221876826f3SGabriel Fernandez const char *prop_name, uint32_t dflt_value); 222876826f3SGabriel Fernandez 223876826f3SGabriel Fernandez /* 22407ced948SGatien Chevallier * This function fills reg node info (base & size) with an index. 22507ced948SGatien Chevallier * 22607ced948SGatien Chevallier * Returns 0 on success and a negative FDT error code on failure. 22707ced948SGatien Chevallier */ 22807ced948SGatien Chevallier int fdt_get_reg_props_by_index(const void *fdt, int node, int index, 22907ced948SGatien Chevallier paddr_t *base, size_t *size); 23007ced948SGatien Chevallier 23107ced948SGatien Chevallier /* 23207ced948SGatien Chevallier * This function fills reg node info (base & size) with an index found by 23307ced948SGatien Chevallier * checking the reg-names node. 23407ced948SGatien Chevallier * 23507ced948SGatien Chevallier * Returns 0 on success and a negative FDT error code on failure. 23607ced948SGatien Chevallier */ 23707ced948SGatien Chevallier int fdt_get_reg_props_by_name(const void *fdt, int node, const char *name, 23807ced948SGatien Chevallier paddr_t *base, size_t *size); 23907ced948SGatien Chevallier 240e6027f48SAlvin Chang /* Returns embedded DTB if present, then external DTB if found, then NULL */ 241e6027f48SAlvin Chang void *get_dt(void); 242e6027f48SAlvin Chang 243e6027f48SAlvin Chang /* 244e6027f48SAlvin Chang * get_secure_dt() - returns secure DTB for drivers 245e6027f48SAlvin Chang * 246e6027f48SAlvin Chang * Returns device tree that is considered secure for drivers to use. 247e6027f48SAlvin Chang * 248e6027f48SAlvin Chang * 1. Returns embedded DTB if available, 249e6027f48SAlvin Chang * 2. Secure external DTB if available, 250e6027f48SAlvin Chang * 3. If neither then NULL 251e6027f48SAlvin Chang */ 252e6027f48SAlvin Chang void *get_secure_dt(void); 253e6027f48SAlvin Chang 254e6027f48SAlvin Chang /* Returns embedded DTB location if present, otherwise NULL */ 255e6027f48SAlvin Chang void *get_embedded_dt(void); 256e6027f48SAlvin Chang 257e6027f48SAlvin Chang /* Returns true if passed DTB is same as Embedded DTB, otherwise false */ 258e6027f48SAlvin Chang static inline bool is_embedded_dt(void *fdt) 259e6027f48SAlvin Chang { 260e6027f48SAlvin Chang return fdt && fdt == get_embedded_dt(); 261e6027f48SAlvin Chang } 262e6027f48SAlvin Chang 263e6027f48SAlvin Chang /* Returns DTB descriptor of the external DTB if present, otherwise NULL */ 264e6027f48SAlvin Chang struct dt_descriptor *get_external_dt_desc(void); 265e6027f48SAlvin Chang 266e6027f48SAlvin Chang /* 267e6027f48SAlvin Chang * init_external_dt() - Initialize the external DTB located at given address. 268e6027f48SAlvin Chang * @phys_dt: Physical address where the external DTB located. 269dcff802bSRaymond Mao * @dt_sz: Maximum size of the external DTB. 270e6027f48SAlvin Chang * 271e6027f48SAlvin Chang * Initialize the external DTB. 272e6027f48SAlvin Chang * 273e6027f48SAlvin Chang * 1. Add MMU mapping of the external DTB, 274e6027f48SAlvin Chang * 2. Initialize device tree overlay 275e6027f48SAlvin Chang */ 276dcff802bSRaymond Mao void init_external_dt(unsigned long phys_dt, size_t dt_sz); 277e6027f48SAlvin Chang 278e6027f48SAlvin Chang /* Returns external DTB if present, otherwise NULL */ 279e6027f48SAlvin Chang void *get_external_dt(void); 280e6027f48SAlvin Chang 281e6027f48SAlvin Chang /* 282e6027f48SAlvin Chang * add_dt_path_subnode() - Add new child node into a parent node. 283e6027f48SAlvin Chang * @dt: Pointer to a device tree descriptor which has DTB. 284e6027f48SAlvin Chang * @path: Path to the parent node. 285e6027f48SAlvin Chang * @subnode: Name of the child node. 286e6027f48SAlvin Chang * 2870c49b6d6SAlvin Chang * Returns the offset of the child node in DTB on success or a negative libfdt 2880c49b6d6SAlvin Chang * error number. 289e6027f48SAlvin Chang */ 290e6027f48SAlvin Chang int add_dt_path_subnode(struct dt_descriptor *dt, const char *path, 291e6027f48SAlvin Chang const char *subnode); 292e6027f48SAlvin Chang 293e6027f48SAlvin Chang /* 294e6027f48SAlvin Chang * add_res_mem_dt_node() - Create "reserved-memory" parent and child nodes. 295e6027f48SAlvin Chang * @dt: Pointer to a device tree descriptor which has DTB. 296e6027f48SAlvin Chang * @name: Name of the child node. 297e6027f48SAlvin Chang * @pa: Physical address of specific reserved memory region. 298e6027f48SAlvin Chang * @size: Size of specific reserved memory region. 299e6027f48SAlvin Chang * 3000c49b6d6SAlvin Chang * Returns 0 if succeeds, otherwise a negative libfdt error number. 301e6027f48SAlvin Chang */ 302e6027f48SAlvin Chang int add_res_mem_dt_node(struct dt_descriptor *dt, const char *name, 303e6027f48SAlvin Chang paddr_t pa, size_t size); 304e6027f48SAlvin 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*5a982d0eSJens Wiklander static inline int dt_getprop_as_number(const void *fdt __unused, 399*5a982d0eSJens Wiklander int nodeoffset __unused, 400*5a982d0eSJens Wiklander const char *name __unused, 401*5a982d0eSJens Wiklander uint64_t *num __unused) 402*5a982d0eSJens Wiklander { 403*5a982d0eSJens Wiklander return -1; 404*5a982d0eSJens Wiklander } 405*5a982d0eSJens Wiklander 406e6027f48SAlvin Chang static inline void *get_dt(void) 407e6027f48SAlvin Chang { 408e6027f48SAlvin Chang return NULL; 409e6027f48SAlvin Chang } 410e6027f48SAlvin Chang 411e6027f48SAlvin Chang static inline void *get_secure_dt(void) 412e6027f48SAlvin Chang { 413e6027f48SAlvin Chang return NULL; 414e6027f48SAlvin Chang } 415e6027f48SAlvin Chang 416e6027f48SAlvin Chang static inline void *get_embedded_dt(void) 417e6027f48SAlvin Chang { 418e6027f48SAlvin Chang return NULL; 419e6027f48SAlvin Chang } 420e6027f48SAlvin Chang 421e6027f48SAlvin Chang static inline bool is_embedded_dt(void *fdt __unused) 422e6027f48SAlvin Chang { 423e6027f48SAlvin Chang return false; 424e6027f48SAlvin Chang } 425e6027f48SAlvin Chang 426e6027f48SAlvin Chang static inline struct dt_descriptor *get_external_dt_desc(void) 427e6027f48SAlvin Chang { 428e6027f48SAlvin Chang return NULL; 429e6027f48SAlvin Chang } 430e6027f48SAlvin Chang 431dcff802bSRaymond Mao static inline void init_external_dt(unsigned long phys_dt __unused, 432dcff802bSRaymond Mao size_t dt_sz __unused) 433e6027f48SAlvin Chang { 434e6027f48SAlvin Chang } 435e6027f48SAlvin Chang 436e6027f48SAlvin Chang static inline void *get_external_dt(void) 437e6027f48SAlvin Chang { 438e6027f48SAlvin Chang return NULL; 439e6027f48SAlvin Chang } 440e6027f48SAlvin Chang 441e6027f48SAlvin Chang static inline int add_dt_path_subnode(struct dt_descriptor *dt __unused, 442e6027f48SAlvin Chang const char *path __unused, 443e6027f48SAlvin Chang const char *subnode __unused) 444e6027f48SAlvin Chang { 445e6027f48SAlvin Chang return -1; 446e6027f48SAlvin Chang } 447e6027f48SAlvin Chang 448e6027f48SAlvin Chang static inline int add_res_mem_dt_node(struct dt_descriptor *dt __unused, 449e6027f48SAlvin Chang const char *name __unused, 450e6027f48SAlvin Chang paddr_t pa __unused, 451e6027f48SAlvin Chang size_t size __unused) 452e6027f48SAlvin Chang { 453e6027f48SAlvin Chang return -1; 454e6027f48SAlvin Chang } 455e6027f48SAlvin Chang 456a4f139d7SJerome Forissier #endif /* !CFG_DT */ 457d50fee03SEtienne Carriere #endif /* __KERNEL_DT_H */ 458