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> 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 /* 77e6027f48SAlvin Chang * struct dt_descriptor - Descriptor of the device tree 78e6027f48SAlvin Chang * @blob: Pointer to the device tree binary 79e6027f48SAlvin Chang * @frag_id: Used ID of fragments for device tree overlay 80e6027f48SAlvin Chang */ 81e6027f48SAlvin Chang struct dt_descriptor { 82e6027f48SAlvin Chang void *blob; 83e6027f48SAlvin Chang #ifdef _CFG_USE_DTB_OVERLAY 84e6027f48SAlvin Chang int frag_id; 85e6027f48SAlvin Chang #endif 86e6027f48SAlvin Chang }; 87e6027f48SAlvin Chang 88e6027f48SAlvin Chang extern uint8_t embedded_secure_dtb[]; 89e6027f48SAlvin Chang 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 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 241e6027f48SAlvin Chang /* Returns embedded DTB if present, then external DTB if found, then NULL */ 242e6027f48SAlvin Chang void *get_dt(void); 243e6027f48SAlvin Chang 244e6027f48SAlvin Chang /* 245e6027f48SAlvin Chang * get_secure_dt() - returns secure DTB for drivers 246e6027f48SAlvin Chang * 247e6027f48SAlvin Chang * Returns device tree that is considered secure for drivers to use. 248e6027f48SAlvin Chang * 249e6027f48SAlvin Chang * 1. Returns embedded DTB if available, 250e6027f48SAlvin Chang * 2. Secure external DTB if available, 251e6027f48SAlvin Chang * 3. If neither then NULL 252e6027f48SAlvin Chang */ 253e6027f48SAlvin Chang void *get_secure_dt(void); 254e6027f48SAlvin Chang 255e6027f48SAlvin Chang /* Returns embedded DTB location if present, otherwise NULL */ 256e6027f48SAlvin Chang void *get_embedded_dt(void); 257e6027f48SAlvin Chang 258e6027f48SAlvin Chang /* Returns true if passed DTB is same as Embedded DTB, otherwise false */ 259e6027f48SAlvin Chang static inline bool is_embedded_dt(void *fdt) 260e6027f48SAlvin Chang { 261e6027f48SAlvin Chang return fdt && fdt == get_embedded_dt(); 262e6027f48SAlvin Chang } 263e6027f48SAlvin Chang 264e6027f48SAlvin Chang /* Returns DTB descriptor of the external DTB if present, otherwise NULL */ 265e6027f48SAlvin Chang struct dt_descriptor *get_external_dt_desc(void); 266e6027f48SAlvin Chang 267e6027f48SAlvin Chang /* 268e6027f48SAlvin Chang * init_external_dt() - Initialize the external DTB located at given address. 269e6027f48SAlvin Chang * @phys_dt: Physical address where the external DTB located. 270*dcff802bSRaymond Mao * @dt_sz: Maximum size of the external DTB. 271e6027f48SAlvin Chang * 272e6027f48SAlvin Chang * Initialize the external DTB. 273e6027f48SAlvin Chang * 274e6027f48SAlvin Chang * 1. Add MMU mapping of the external DTB, 275e6027f48SAlvin Chang * 2. Initialize device tree overlay 276e6027f48SAlvin Chang */ 277*dcff802bSRaymond Mao void init_external_dt(unsigned long phys_dt, size_t dt_sz); 278e6027f48SAlvin Chang 279e6027f48SAlvin Chang /* Returns external DTB if present, otherwise NULL */ 280e6027f48SAlvin Chang void *get_external_dt(void); 281e6027f48SAlvin Chang 282e6027f48SAlvin Chang /* 283e6027f48SAlvin Chang * add_dt_path_subnode() - Add new child node into a parent node. 284e6027f48SAlvin Chang * @dt: Pointer to a device tree descriptor which has DTB. 285e6027f48SAlvin Chang * @path: Path to the parent node. 286e6027f48SAlvin Chang * @subnode: Name of the child node. 287e6027f48SAlvin Chang * 2880c49b6d6SAlvin Chang * Returns the offset of the child node in DTB on success or a negative libfdt 2890c49b6d6SAlvin Chang * error number. 290e6027f48SAlvin Chang */ 291e6027f48SAlvin Chang int add_dt_path_subnode(struct dt_descriptor *dt, const char *path, 292e6027f48SAlvin Chang const char *subnode); 293e6027f48SAlvin Chang 294e6027f48SAlvin Chang /* 295e6027f48SAlvin Chang * add_res_mem_dt_node() - Create "reserved-memory" parent and child nodes. 296e6027f48SAlvin Chang * @dt: Pointer to a device tree descriptor which has DTB. 297e6027f48SAlvin Chang * @name: Name of the child node. 298e6027f48SAlvin Chang * @pa: Physical address of specific reserved memory region. 299e6027f48SAlvin Chang * @size: Size of specific reserved memory region. 300e6027f48SAlvin Chang * 3010c49b6d6SAlvin Chang * Returns 0 if succeeds, otherwise a negative libfdt error number. 302e6027f48SAlvin Chang */ 303e6027f48SAlvin Chang int add_res_mem_dt_node(struct dt_descriptor *dt, const char *name, 304e6027f48SAlvin Chang paddr_t pa, size_t size); 305e6027f48SAlvin Chang 3069fe4c797SJerome Forissier #else /* !CFG_DT */ 307a4f139d7SJerome Forissier 308a4f139d7SJerome Forissier static inline const struct dt_driver *dt_find_compatible_driver( 309a4f139d7SJerome Forissier const void *fdt __unused, 310a4f139d7SJerome Forissier int offs __unused) 311a4f139d7SJerome Forissier { 312a4f139d7SJerome Forissier return NULL; 313a4f139d7SJerome Forissier } 314a4f139d7SJerome Forissier 3157ba16abbSJerome Forissier static inline int dt_map_dev(const void *fdt __unused, int offs __unused, 316a5d5bbc8SVesa Jääskeläinen vaddr_t *vbase __unused, size_t *size __unused, 317a5d5bbc8SVesa Jääskeläinen enum dt_map_dev_directive mapping __unused) 3187ba16abbSJerome Forissier { 3197ba16abbSJerome Forissier return -1; 3207ba16abbSJerome Forissier } 3217ba16abbSJerome Forissier 322f354a5d8SGatien Chevallier static inline paddr_t fdt_reg_base_address(const void *fdt __unused, 3239fe4c797SJerome Forissier int offs __unused) 3249fe4c797SJerome Forissier { 3259fe4c797SJerome Forissier return (paddr_t)-1; 3269fe4c797SJerome Forissier } 3279fe4c797SJerome Forissier 328f354a5d8SGatien Chevallier static inline size_t fdt_reg_size(const void *fdt __unused, 3299fe4c797SJerome Forissier int offs __unused) 3309fe4c797SJerome Forissier { 331df7cecc0SLionel Debieve return (size_t)-1; 3329fe4c797SJerome Forissier } 3339fe4c797SJerome Forissier 334f354a5d8SGatien Chevallier static inline int fdt_get_status(const void *fdt __unused, int offs __unused) 3359fe4c797SJerome Forissier { 3369fe4c797SJerome Forissier return -1; 3379fe4c797SJerome Forissier } 3389fe4c797SJerome Forissier 3391e866588SJerome Forissier __noreturn 340f354a5d8SGatien Chevallier static inline void fdt_fill_device_info(const void *fdt __unused, 341c0cfb36cSEtienne Carriere struct dt_node_info *info __unused, 342c0cfb36cSEtienne Carriere int node __unused) 343c0cfb36cSEtienne Carriere { 344c0cfb36cSEtienne Carriere panic(); 345c0cfb36cSEtienne Carriere } 346876826f3SGabriel Fernandez 347f354a5d8SGatien Chevallier static inline int fdt_read_uint32_array(const void *fdt __unused, 348876826f3SGabriel Fernandez int node __unused, 349876826f3SGabriel Fernandez const char *prop_name __unused, 350876826f3SGabriel Fernandez uint32_t *array __unused, 351876826f3SGabriel Fernandez size_t count __unused) 352876826f3SGabriel Fernandez { 353876826f3SGabriel Fernandez return -1; 354876826f3SGabriel Fernandez } 355876826f3SGabriel Fernandez 356f354a5d8SGatien Chevallier static inline int fdt_read_uint32(const void *fdt __unused, 357876826f3SGabriel Fernandez int node __unused, 358876826f3SGabriel Fernandez const char *prop_name __unused, 359876826f3SGabriel Fernandez uint32_t *value __unused) 360876826f3SGabriel Fernandez { 361876826f3SGabriel Fernandez return -1; 362876826f3SGabriel Fernandez } 363876826f3SGabriel Fernandez 364f354a5d8SGatien Chevallier static inline uint32_t fdt_read_uint32_default(const void *fdt __unused, 365876826f3SGabriel Fernandez int node __unused, 366876826f3SGabriel Fernandez const char *prop_name __unused, 367876826f3SGabriel Fernandez uint32_t dflt_value __unused) 368876826f3SGabriel Fernandez { 369876826f3SGabriel Fernandez return dflt_value; 370876826f3SGabriel Fernandez } 371876826f3SGabriel Fernandez 3727c3a6b7bSGatien Chevallier static inline int fdt_read_uint32_index(const void *fdt __unused, 3737c3a6b7bSGatien Chevallier int node __unused, 3747c3a6b7bSGatien Chevallier const char *prop_name __unused, 3757c3a6b7bSGatien Chevallier int index __unused, 3767c3a6b7bSGatien Chevallier uint32_t *value __unused) 3777c3a6b7bSGatien Chevallier { 3787c3a6b7bSGatien Chevallier return -1; 3797c3a6b7bSGatien Chevallier } 3807c3a6b7bSGatien Chevallier 38107ced948SGatien Chevallier static inline int fdt_get_reg_props_by_index(const void *fdt __unused, 38207ced948SGatien Chevallier int node __unused, 38307ced948SGatien Chevallier int index __unused, 38407ced948SGatien Chevallier paddr_t *base __unused, 38507ced948SGatien Chevallier size_t *size __unused) 38607ced948SGatien Chevallier { 38707ced948SGatien Chevallier return -1; 38807ced948SGatien Chevallier } 38907ced948SGatien Chevallier 39007ced948SGatien Chevallier static inline int fdt_get_reg_props_by_name(const void *fdt __unused, 39107ced948SGatien Chevallier int node __unused, 39207ced948SGatien Chevallier const char *name __unused, 39307ced948SGatien Chevallier paddr_t *base __unused, 39407ced948SGatien Chevallier size_t *size __unused) 39507ced948SGatien Chevallier { 39607ced948SGatien Chevallier return -1; 39707ced948SGatien Chevallier } 39807ced948SGatien Chevallier 399e6027f48SAlvin Chang static inline void *get_dt(void) 400e6027f48SAlvin Chang { 401e6027f48SAlvin Chang return NULL; 402e6027f48SAlvin Chang } 403e6027f48SAlvin Chang 404e6027f48SAlvin Chang static inline void *get_secure_dt(void) 405e6027f48SAlvin Chang { 406e6027f48SAlvin Chang return NULL; 407e6027f48SAlvin Chang } 408e6027f48SAlvin Chang 409e6027f48SAlvin Chang static inline void *get_embedded_dt(void) 410e6027f48SAlvin Chang { 411e6027f48SAlvin Chang return NULL; 412e6027f48SAlvin Chang } 413e6027f48SAlvin Chang 414e6027f48SAlvin Chang static inline bool is_embedded_dt(void *fdt __unused) 415e6027f48SAlvin Chang { 416e6027f48SAlvin Chang return false; 417e6027f48SAlvin Chang } 418e6027f48SAlvin Chang 419e6027f48SAlvin Chang static inline struct dt_descriptor *get_external_dt_desc(void) 420e6027f48SAlvin Chang { 421e6027f48SAlvin Chang return NULL; 422e6027f48SAlvin Chang } 423e6027f48SAlvin Chang 424*dcff802bSRaymond Mao static inline void init_external_dt(unsigned long phys_dt __unused, 425*dcff802bSRaymond Mao size_t dt_sz __unused) 426e6027f48SAlvin Chang { 427e6027f48SAlvin Chang } 428e6027f48SAlvin Chang 429e6027f48SAlvin Chang static inline void *get_external_dt(void) 430e6027f48SAlvin Chang { 431e6027f48SAlvin Chang return NULL; 432e6027f48SAlvin Chang } 433e6027f48SAlvin Chang 434e6027f48SAlvin Chang static inline int add_dt_path_subnode(struct dt_descriptor *dt __unused, 435e6027f48SAlvin Chang const char *path __unused, 436e6027f48SAlvin Chang const char *subnode __unused) 437e6027f48SAlvin Chang { 438e6027f48SAlvin Chang return -1; 439e6027f48SAlvin Chang } 440e6027f48SAlvin Chang 441e6027f48SAlvin Chang static inline int add_res_mem_dt_node(struct dt_descriptor *dt __unused, 442e6027f48SAlvin Chang const char *name __unused, 443e6027f48SAlvin Chang paddr_t pa __unused, 444e6027f48SAlvin Chang size_t size __unused) 445e6027f48SAlvin Chang { 446e6027f48SAlvin Chang return -1; 447e6027f48SAlvin Chang } 448e6027f48SAlvin Chang 449a4f139d7SJerome Forissier #endif /* !CFG_DT */ 450d50fee03SEtienne Carriere #endif /* __KERNEL_DT_H */ 451