rockchip: rk3399: Add Nanopi M4 2GB board support
[platform/kernel/u-boot.git] / tools / binman / etype / text.py
1 # SPDX-License-Identifier: GPL-2.0+
2 # Copyright (c) 2018 Google, Inc
3 # Written by Simon Glass <sjg@chromium.org>
4 #
5
6 from collections import OrderedDict
7
8 from entry import Entry, EntryArg
9 import fdt_util
10 import tools
11
12
13 class Entry_text(Entry):
14     """An entry which contains text
15
16     The text can be provided either in the node itself or by a command-line
17     argument. There is a level of indirection to allow multiple text strings
18     and sharing of text.
19
20     Properties / Entry arguments:
21         text-label: The value of this string indicates the property / entry-arg
22             that contains the string to place in the entry
23         <xxx> (actual name is the value of text-label): contains the string to
24             place in the entry.
25         <text>: The text to place in the entry (overrides the above mechanism).
26             This is useful when the text is constant.
27
28     Example node:
29
30         text {
31             size = <50>;
32             text-label = "message";
33         };
34
35     You can then use:
36
37         binman -amessage="this is my message"
38
39     and binman will insert that string into the entry.
40
41     It is also possible to put the string directly in the node:
42
43         text {
44             size = <8>;
45             text-label = "message";
46             message = "a message directly in the node"
47         };
48
49     or just:
50
51         text {
52             size = <8>;
53             text = "some text directly in the node"
54         };
55
56     The text is not itself nul-terminated. This can be achieved, if required,
57     by setting the size of the entry to something larger than the text.
58     """
59     def __init__(self, section, etype, node):
60         Entry.__init__(self, section, etype, node)
61         value = fdt_util.GetString(self._node, 'text')
62         if value:
63             value = tools.ToBytes(value)
64         else:
65             label, = self.GetEntryArgsOrProps([EntryArg('text-label', str)])
66             self.text_label = label
67             if self.text_label:
68                 value, = self.GetEntryArgsOrProps([EntryArg(self.text_label,
69                                                             str)])
70                 value = tools.ToBytes(value) if value is not None else value
71         self.value = value
72
73     def ObtainContents(self):
74         if not self.value:
75             self.Raise("No value provided for text label '%s'" %
76                        self.text_label)
77         self.SetContents(self.value)
78         return True