~ubuntu-branches/ubuntu/vivid/u-boot/vivid

« back to all changes in this revision

Viewing changes to include/fdtdec.h

  • Committer: Package Import Robot
  • Author(s): Clint Adams
  • Date: 2012-01-02 17:49:39 UTC
  • mfrom: (1.2.7)
  • Revision ID: package-import@ubuntu.com-20120102174939-iddq37p3372x10yp
Tags: 2011.12-1
* New upstream version.
  - Drop build-timestamp_autogenerated.h-without-config.patch (merged).
  - Drop ublimage-NAND-block-size-isn-t-set-at-build-time.patch (merged).
  - Update kerma-sheevaplug-mvsdio.diff
  - Update mipsel-native-endianness.diff
  - Drop dreamplug-v8.patch (merged).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2011 The Chromium OS Authors.
 
3
 * See file CREDITS for list of people who contributed to this
 
4
 * project.
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or
 
7
 * modify it under the terms of the GNU General Public License as
 
8
 * published by the Free Software Foundation; either version 2 of
 
9
 * the License, or (at your option) any later version.
 
10
 *
 
11
 * This program is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 * GNU General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU General Public License
 
17
 * along with this program; if not, write to the Free Software
 
18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 
19
 * MA 02111-1307 USA
 
20
 */
 
21
 
 
22
 
 
23
/*
 
24
 * This file contains convenience functions for decoding useful and
 
25
 * enlightening information from FDTs. It is intended to be used by device
 
26
 * drivers and board-specific code within U-Boot. It aims to reduce the
 
27
 * amount of FDT munging required within U-Boot itself, so that driver code
 
28
 * changes to support FDT are minimized.
 
29
 */
 
30
 
 
31
#include <libfdt.h>
 
32
 
 
33
/*
 
34
 * A typedef for a physical address. Note that fdt data is always big
 
35
 * endian even on a litle endian machine.
 
36
 */
 
37
#ifdef CONFIG_PHYS_64BIT
 
38
typedef u64 fdt_addr_t;
 
39
#define FDT_ADDR_T_NONE (-1ULL)
 
40
#define fdt_addr_to_cpu(reg) be64_to_cpu(reg)
 
41
#else
 
42
typedef u32 fdt_addr_t;
 
43
#define FDT_ADDR_T_NONE (-1U)
 
44
#define fdt_addr_to_cpu(reg) be32_to_cpu(reg)
 
45
#endif
 
46
 
 
47
/* Information obtained about memory from the FDT */
 
48
struct fdt_memory {
 
49
        fdt_addr_t start;
 
50
        fdt_addr_t end;
 
51
};
 
52
 
 
53
/**
 
54
 * Compat types that we know about and for which we might have drivers.
 
55
 * Each is named COMPAT_<dir>_<filename> where <dir> is the directory
 
56
 * within drivers.
 
57
 */
 
58
enum fdt_compat_id {
 
59
        COMPAT_UNKNOWN,
 
60
 
 
61
        COMPAT_COUNT,
 
62
};
 
63
 
 
64
/**
 
65
 * Find the next numbered alias for a peripheral. This is used to enumerate
 
66
 * all the peripherals of a certain type.
 
67
 *
 
68
 * Do the first call with *upto = 0. Assuming /aliases/<name>0 exists then
 
69
 * this function will return a pointer to the node the alias points to, and
 
70
 * then update *upto to 1. Next time you call this function, the next node
 
71
 * will be returned.
 
72
 *
 
73
 * All nodes returned will match the compatible ID, as it is assumed that
 
74
 * all peripherals use the same driver.
 
75
 *
 
76
 * @param blob          FDT blob to use
 
77
 * @param name          Root name of alias to search for
 
78
 * @param id            Compatible ID to look for
 
79
 * @return offset of next compatible node, or -FDT_ERR_NOTFOUND if no more
 
80
 */
 
81
int fdtdec_next_alias(const void *blob, const char *name,
 
82
                enum fdt_compat_id id, int *upto);
 
83
 
 
84
/**
 
85
 * Look up an address property in a node and return it as an address.
 
86
 * The property must hold either one address with no trailing data or
 
87
 * one address with a length. This is only tested on 32-bit machines.
 
88
 *
 
89
 * @param blob  FDT blob
 
90
 * @param node  node to examine
 
91
 * @param prop_name     name of property to find
 
92
 * @return address, if found, or FDT_ADDR_T_NONE if not
 
93
 */
 
94
fdt_addr_t fdtdec_get_addr(const void *blob, int node,
 
95
                const char *prop_name);
 
96
 
 
97
/**
 
98
 * Look up a 32-bit integer property in a node and return it. The property
 
99
 * must have at least 4 bytes of data. The value of the first cell is
 
100
 * returned.
 
101
 *
 
102
 * @param blob  FDT blob
 
103
 * @param node  node to examine
 
104
 * @param prop_name     name of property to find
 
105
 * @param default_val   default value to return if the property is not found
 
106
 * @return integer value, if found, or default_val if not
 
107
 */
 
108
s32 fdtdec_get_int(const void *blob, int node, const char *prop_name,
 
109
                s32 default_val);
 
110
 
 
111
/**
 
112
 * Checks whether a node is enabled.
 
113
 * This looks for a 'status' property. If this exists, then returns 1 if
 
114
 * the status is 'ok' and 0 otherwise. If there is no status property,
 
115
 * it returns the default value.
 
116
 *
 
117
 * @param blob  FDT blob
 
118
 * @param node  node to examine
 
119
 * @param default_val   default value to return if no 'status' property exists
 
120
 * @return integer value 0/1, if found, or default_val if not
 
121
 */
 
122
int fdtdec_get_is_enabled(const void *blob, int node, int default_val);
 
123
 
 
124
/**
 
125
 * Checks whether we have a valid fdt available to control U-Boot, and panic
 
126
 * if not.
 
127
 */
 
128
int fdtdec_check_fdt(void);