]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
b7e0d73b SG |
2 | /* |
3 | * Copyright (c) 2017 Google, Inc | |
4 | * Written by Simon Glass <[email protected]> | |
b7e0d73b SG |
5 | */ |
6 | ||
7 | #ifndef _DM_OF_EXTRA_H | |
8 | #define _DM_OF_EXTRA_H | |
9 | ||
10 | #include <dm/ofnode.h> | |
11 | ||
12 | enum fmap_compress_t { | |
13 | FMAP_COMPRESS_NONE, | |
b8bccced | 14 | FMAP_COMPRESS_LZMA, |
e6c5c94a | 15 | FMAP_COMPRESS_LZ4, |
b8bccced SG |
16 | |
17 | FMAP_COMPRESS_COUNT, | |
18 | FMAP_COMPRESS_UNKNOWN, | |
b7e0d73b SG |
19 | }; |
20 | ||
21 | enum fmap_hash_t { | |
22 | FMAP_HASH_NONE, | |
23 | FMAP_HASH_SHA1, | |
24 | FMAP_HASH_SHA256, | |
25 | }; | |
26 | ||
27 | /* A flash map entry, containing an offset and length */ | |
28 | struct fmap_entry { | |
29 | uint32_t offset; | |
30 | uint32_t length; | |
31 | uint32_t used; /* Number of bytes used in region */ | |
32 | enum fmap_compress_t compress_algo; /* Compression type */ | |
e6c5c94a | 33 | uint32_t unc_length; /* Uncompressed length */ |
b7e0d73b SG |
34 | enum fmap_hash_t hash_algo; /* Hash algorithm */ |
35 | const uint8_t *hash; /* Hash value */ | |
36 | int hash_size; /* Hash size */ | |
b8bccced SG |
37 | /* Node pointer if CBFS, else NULL */ |
38 | const struct cbfs_cachenode *cbfs_node; | |
39 | /* Hash node pointer if CBFS, else NULL */ | |
40 | const struct cbfs_cachenode *cbfs_hash_node; | |
b7e0d73b SG |
41 | }; |
42 | ||
43 | /** | |
be74f71a | 44 | * ofnode_read_fmap_entry() - Read a flash entry from the fdt |
b7e0d73b | 45 | * |
be74f71a PD |
46 | * @node: Reference to node to read |
47 | * @entry: Place to put offset and size of this node | |
48 | * Return: 0 if ok, -ve on error | |
b7e0d73b | 49 | */ |
5e0a7341 | 50 | int ofnode_read_fmap_entry(ofnode node, struct fmap_entry *entry); |
b7e0d73b | 51 | |
964cadc4 SG |
52 | /** |
53 | * ofnode_decode_region() - Decode a memory region from a node | |
54 | * | |
55 | * Look up a property in a node which contains a memory region address and | |
56 | * size. Then return a pointer to this address. | |
57 | * | |
58 | * The property must hold one address with a length. This is only tested on | |
59 | * 32-bit machines. | |
60 | * | |
be74f71a PD |
61 | * @node: ofnode to examine |
62 | * @prop_name: name of property to find | |
63 | * @basep: Returns base address of region | |
64 | * @sizep: Returns size of region | |
65 | * Return: 0 if ok, -1 on error (property not found) | |
964cadc4 SG |
66 | */ |
67 | int ofnode_decode_region(ofnode node, const char *prop_name, fdt_addr_t *basep, | |
68 | fdt_size_t *sizep); | |
69 | ||
70 | /** | |
71 | * ofnode_decode_memory_region()- Decode a named region within a memory bank | |
72 | * | |
73 | * This function handles selection of a memory region. The region is | |
74 | * specified as an offset/size within a particular type of memory. | |
75 | * | |
76 | * The properties used are: | |
77 | * | |
78 | * <mem_type>-memory<suffix> for the name of the memory bank | |
79 | * <mem_type>-offset<suffix> for the offset in that bank | |
80 | * | |
81 | * The property value must have an offset and a size. The function checks | |
82 | * that the region is entirely within the memory bank.5 | |
83 | * | |
be74f71a PD |
84 | * @config_node: ofnode containing the properties (invalid for "/config") |
85 | * @mem_type: Type of memory to use, which is a name, such as | |
86 | * "u-boot" or "kernel". | |
87 | * @suffix: String to append to the memory/offset | |
88 | * property names | |
89 | * @basep: Returns base of region | |
90 | * @sizep: Returns size of region | |
91 | * Return: 0 if OK, -ive on error | |
964cadc4 SG |
92 | */ |
93 | int ofnode_decode_memory_region(ofnode config_node, const char *mem_type, | |
94 | const char *suffix, fdt_addr_t *basep, | |
95 | fdt_size_t *sizep); | |
96 | ||
173c66bf BM |
97 | /** |
98 | * ofnode_phy_is_fixed_link() - Detect fixed-link pseudo-PHY device | |
99 | * | |
100 | * This function detects whether the ethernet controller connects to a | |
101 | * fixed-link pseudo-PHY device. | |
102 | * | |
103 | * This function supports the following two DT bindings: | |
104 | * - the new DT binding, where 'fixed-link' is a sub-node of the | |
be74f71a | 105 | * Ethernet device |
173c66bf | 106 | * - the old DT binding, where 'fixed-link' is a property with 5 |
be74f71a | 107 | * cells encoding various information about the fixed PHY |
173c66bf BM |
108 | * |
109 | * If both new and old bindings exist, the new one is preferred. | |
110 | * | |
be74f71a PD |
111 | * @eth_node: ofnode containing the fixed-link subnode/property |
112 | * @phy_node: if fixed-link PHY detected, containing the PHY ofnode | |
113 | * Return: true if a fixed-link pseudo-PHY device exists, false otherwise | |
173c66bf BM |
114 | */ |
115 | bool ofnode_phy_is_fixed_link(ofnode eth_node, ofnode *phy_node); | |
116 | ||
2dd6acb7 VO |
117 | /** |
118 | * ofnode_eth_uses_inband_aneg() - Detect whether MAC should use in-band autoneg | |
119 | * | |
120 | * This function detects whether the Ethernet controller should use IEEE 802.3 | |
121 | * clause 37 in-band autonegotiation for serial protocols such as 1000base-x, | |
122 | * SGMII, USXGMII, etc. The property is relevant when the Ethernet controller | |
123 | * is connected to an on-board PHY or an SFP cage, and is not relevant when it | |
124 | * has a fixed link (in that case, in-band autoneg should not be used). | |
125 | * | |
be74f71a PD |
126 | * @eth_node: ofnode belonging to the Ethernet controller |
127 | * Return: true if in-band autoneg should be used, false otherwise | |
2dd6acb7 VO |
128 | */ |
129 | bool ofnode_eth_uses_inband_aneg(ofnode eth_node); | |
130 | ||
b7e0d73b | 131 | #endif |