]> Git Repo - u-boot.git/blame - include/dm/platdata.h
Merge tag 'dm-pull-14dec20' of git://git.denx.de/u-boot-dm into next
[u-boot.git] / include / dm / platdata.h
CommitLineData
83d290c5 1/* SPDX-License-Identifier: GPL-2.0+ */
6494d708
SG
2/*
3 * Copyright (c) 2013 Google, Inc
4 *
5 * (C) Copyright 2012
6 * Pavel Herrmann <[email protected]>
7 * Marek Vasut <[email protected]>
6494d708
SG
8 */
9
10#ifndef _DM_PLATDATA_H
11#define _DM_PLATDATA_H
12
42c23dd2
MY
13#include <linker_lists.h>
14
0040b944
SG
15/**
16 * struct driver_info - Information required to instantiate a device
17 *
97f3ee34
SG
18 * NOTE: Avoid using this except in extreme circumstances, where device tree
19 * is not feasible (e.g. serial driver in SPL where <8KB of SRAM is
20 * available). U-Boot's driver model uses device tree for configuration.
21 *
81b4e751 22 * @name: Driver name
caa4daa2 23 * @plat: Driver-specific platform data
4f50086a 24 * @plat_size: Size of platform data structure
e41651ff 25 * @parent_idx: Index of the parent driver_info structure
0040b944 26 */
6494d708 27struct driver_info {
0040b944 28 const char *name;
caa4daa2 29 const void *plat;
9fa28190 30#if CONFIG_IS_ENABLED(OF_PLATDATA)
4f50086a 31 unsigned short plat_size;
e41651ff 32 short parent_idx;
9fa28190 33#endif
6494d708
SG
34};
35
e41651ff
SG
36#if CONFIG_IS_ENABLED(OF_PLATDATA)
37#define driver_info_parent_id(driver_info) driver_info->parent_idx
38#else
39#define driver_info_parent_id(driver_info) (-1)
40#endif
41
a294ead8
SG
42/**
43 * driver_rt - runtime information set up by U-Boot
44 *
45 * There is one of these for every driver_info in the linker list, indexed by
46 * the driver_info idx value.
47 *
48 * @dev: Device created from this idx
49 */
50struct driver_rt {
51 struct udevice *dev;
52};
53
97f3ee34
SG
54/**
55 * NOTE: Avoid using these except in extreme circumstances, where device tree
56 * is not feasible (e.g. serial driver in SPL where <8KB of SRAM is
57 * available). U-Boot's driver model uses device tree for configuration.
cb43ac18
SG
58 *
59 * When of-platdata is in use, U_BOOT_DEVICE() cannot be used outside of the
caa4daa2 60 * dt-plat.c file created by dtoc
97f3ee34 61 */
cb43ac18
SG
62#if CONFIG_IS_ENABLED(OF_PLATDATA) && !defined(DT_PLATDATA_C)
63#define U_BOOT_DEVICE(__name) _Static_assert(false, \
64 "Cannot use U_BOOT_DEVICE with of-platdata. Please use devicetree instead")
65#else
6494d708
SG
66#define U_BOOT_DEVICE(__name) \
67 ll_entry_declare(struct driver_info, __name, driver_info)
cb43ac18 68#endif
6494d708 69
10778398
SG
70/* Declare a list of devices. The argument is a driver_info[] array */
71#define U_BOOT_DEVICES(__name) \
72 ll_entry_declare_list(struct driver_info, __name, driver_info)
73
3c14083f
SG
74/**
75 * Get a pointer to a given device info given its name
76 *
77 * With the declaration U_BOOT_DEVICE(name), DM_GET_DEVICE(name) will return a
78 * pointer to the struct driver_info created by that declaration.
79 *
80 * if OF_PLATDATA is enabled, from this it is possible to use the @dev member of
81 * struct driver_info to find the device pointer itself.
82 *
83 * TODO([email protected]): U_BOOT_DEVICE() tells U-Boot to create a device, so
84 * the naming seems sensible, but DM_GET_DEVICE() is a bit of misnomer, since it
85 * finds the driver_info record, not the device.
86 *
87 * @__name: Driver name (C identifier, not a string. E.g. gpio7_at_ff7e0000)
88 * @return struct driver_info * to the driver that created the device
89 */
fed0f891
WL
90#define DM_GET_DEVICE(__name) \
91 ll_entry_get(struct driver_info, __name, driver_info)
92
93/**
94 * dm_populate_phandle_data() - Populates phandle data in platda
95 *
96 * This populates phandle data with an U_BOOT_DEVICE entry get by
97 * DM_GET_DEVICE. The implementation of this function will be done
98 * by dtoc when parsing dtb.
99 */
100void dm_populate_phandle_data(void);
6494d708 101#endif
This page took 0.332793 seconds and 4 git commands to generate.