blob: a6534c00efe355e9da6c16ae228624d70c353dc8 [file] [log] [blame]
Lijuan Gao9f152862014-08-18 13:45:24 +08001/* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
Deepa Dinamani28c0ffe2012-09-24 11:45:21 -07002 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
12 * * Neither the name of The Linux Foundation nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*/
28
29#include <debug.h>
Lijuan Gao9f152862014-08-18 13:45:24 +080030#include <list.h>
Deepa Dinamani28c0ffe2012-09-24 11:45:21 -070031
32#ifndef __DEVICE_TREE__
33#define __DEVICE_TREE__
34
35#define DEV_TREE_SUCCESS 0
36#define DEV_TREE_MAGIC 0x54444351 /* "QCDT" */
37#define DEV_TREE_MAGIC_LEN 4
Joel Kingaa335dc2013-06-03 16:11:08 -070038#define DEV_TREE_VERSION_V1 1
39#define DEV_TREE_VERSION_V2 2
Lijuan Gao9f152862014-08-18 13:45:24 +080040#define DEV_TREE_VERSION_V3 3
41
Deepa Dinamani28c0ffe2012-09-24 11:45:21 -070042#define DEV_TREE_HEADER_SIZE 12
43
Channagoud Kadabi11682e92013-02-28 11:21:46 -080044#define DTB_MAGIC 0xedfe0dd0
45#define DTB_OFFSET 0x2C
46
Dima Zavin77e41f32013-03-06 16:10:43 -080047#define DTB_PAD_SIZE 1024
48
Channagoud Kadabia4dbe332013-09-05 17:44:11 -070049/*
50 * For DTB V1: The DTB entries would be of the format
51 * qcom,msm-id = <msm8974, CDP, rev_1>; (3 * sizeof(uint32_t))
52 * For DTB V2: The DTB entries would be of the format
53 * qcom,msm-id = <msm8974, rev_1>; (2 * sizeof(uint32_t))
54 * qcom,board-id = <CDP, subtype_ID>; (2 * sizeof(uint32_t))
55 * The macros below are defined based on these.
56 */
57#define DT_ENTRY_V1_SIZE 0xC
58#define PLAT_ID_SIZE 0x8
59#define BOARD_ID_SIZE 0x8
Lijuan Gao9f152862014-08-18 13:45:24 +080060#define PMIC_ID_SIZE 0x8
61
62
63struct dt_entry_v2
64{
65 uint32_t platform_id;
66 uint32_t variant_id;
67 uint32_t board_hw_subtype;
68 uint32_t soc_rev;
69 uint32_t offset;
70 uint32_t size;
71};
Channagoud Kadabia4dbe332013-09-05 17:44:11 -070072
Deepa Dinamani28c0ffe2012-09-24 11:45:21 -070073struct dt_entry
74{
75 uint32_t platform_id;
76 uint32_t variant_id;
Joel Kingaa335dc2013-06-03 16:11:08 -070077 uint32_t board_hw_subtype;
Deepa Dinamani28c0ffe2012-09-24 11:45:21 -070078 uint32_t soc_rev;
Lijuan Gao9f152862014-08-18 13:45:24 +080079 uint32_t pmic_rev[4];
Deepa Dinamani28c0ffe2012-09-24 11:45:21 -070080 uint32_t offset;
81 uint32_t size;
82};
83
84struct dt_table
85{
86 uint32_t magic;
87 uint32_t version;
88 uint32_t num_entries;
89};
90
Channagoud Kadabia4dbe332013-09-05 17:44:11 -070091struct plat_id
92{
93 uint32_t platform_id;
94 uint32_t soc_rev;
95};
96
97struct board_id
98{
99 uint32_t variant_id;
100 uint32_t platform_subtype;
101};
102
Lijuan Gao9f152862014-08-18 13:45:24 +0800103struct pmic_id
104{
105 uint32_t pmic_version[4];
106};
107
Sundarajan Srinivasan44de4342013-07-08 14:47:13 -0700108struct dt_mem_node_info
109{
110 uint32_t offset;
111 uint32_t mem_info_cnt;
112 uint32_t addr_cell_size;
113 uint32_t size_cell_size;
114};
115
Lijuan Gao9f152862014-08-18 13:45:24 +0800116enum dt_entry_info
117{
118 DTB_FOUNDRY = 0,
119 DTB_SOC,
120 DTB_MAJOR_MINOR,
121 DTB_PMIC0,
122 DTB_PMIC1,
123 DTB_PMIC2,
124 DTB_PMIC3,
125 DTB_PMIC_MODEL,
126};
127
Deepa Dinamani28c0ffe2012-09-24 11:45:21 -0700128enum dt_err_codes
129{
130 DT_OP_SUCCESS,
131 DT_OP_FAILURE = -1,
132};
133
Lijuan Gao9f152862014-08-18 13:45:24 +0800134typedef struct dt_entry_node {
135 struct list_node node;
136 struct dt_entry * dt_entry_m;
137}dt_node;
Sundarajan Srinivasan763c0db2014-05-20 17:08:36 -0700138
Deepa Dinamani87252952013-09-09 13:58:27 -0700139int dev_tree_validate(struct dt_table *table, unsigned int page_size, uint32_t *dt_hdr_size);
Joel Kingaa335dc2013-06-03 16:11:08 -0700140int dev_tree_get_entry_info(struct dt_table *table, struct dt_entry *dt_entry_info);
Sundarajan Srinivasan44de4342013-07-08 14:47:13 -0700141int update_device_tree(void *fdt, const char *, void *, unsigned);
142int dev_tree_add_mem_info(void *fdt, uint32_t offset, uint64_t size, uint64_t addr);
Dima Zavine63e5572013-05-03 12:23:06 -0700143void *dev_tree_appended(void *kernel, uint32_t kernel_size, void *tags);
Deepa Dinamani28c0ffe2012-09-24 11:45:21 -0700144#endif