Hi Simon,

Thanks for your patch.
Where suppose the "#define " to locate? I can't find it anywhere, maybe
something wrong with this patch?

Thanks,
- Kever
On 06/08/2017 11:29 AM, Simon Glass wrote:
Sometimes a node will have multiple compatible strings. Drivers may use
one or the other so the best approach seems to be to #define them to be
equivalent.

Update dtoc to support this.

Signed-off-by: Simon Glass <s...@chromium.org>
---

  doc/driver-model/of-plat.txt |  5 +++++
  tools/dtoc/dtoc.py           | 24 +++++++++++++++++-------
  2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/doc/driver-model/of-plat.txt b/doc/driver-model/of-plat.txt
index 0063bfe510..3ed8c759d6 100644
--- a/doc/driver-model/of-plat.txt
+++ b/doc/driver-model/of-plat.txt
@@ -156,6 +156,11 @@ This avoids the code overhead of converting the device 
tree data to
  platform data in the driver. The ofdata_to_platdata() method should
  therefore do nothing in such a driver.
+Where a node has multiple compatible strings, a #define is used to make them
+equivalent, e.g.:
+
+#define dtd_rockchip_rk3299_dw_mshc dtd_rockchip_rk3288_dw_mshc
+
Converting of-platdata to a useful form
  ---------------------------------------
diff --git a/tools/dtoc/dtoc.py b/tools/dtoc/dtoc.py
index 08e35f148c..168de518fd 100755
--- a/tools/dtoc/dtoc.py
+++ b/tools/dtoc/dtoc.py
@@ -88,6 +88,7 @@ class DtbPlatdata:
          self._phandle_node = {}
          self._outfile = None
          self._lines = []
+        self._aliases = {}
def SetupOutput(self, fname):
          """Set up the output destination
@@ -159,9 +160,10 @@ class DtbPlatdata:
              C identifier for the first compatible string
          """
          compat = node.props['compatible'].value
+        aliases = []
          if type(compat) == list:
-            compat = compat[0]
-        return Conv_name_to_c(compat)
+            compat, aliases = compat[0], compat[1:]
+        return Conv_name_to_c(compat), [Conv_name_to_c(a) for a in aliases]
def ScanDtb(self):
          """Scan the device tree to obtain a tree of notes and properties
@@ -239,7 +241,7 @@ class DtbPlatdata:
          """
          structs = {}
          for node in self._valid_nodes:
-            node_name = self.GetCompatName(node)
+            node_name, _ = self.GetCompatName(node)
              fields = {}
# Get a list of all the valid properties in this node.
@@ -263,7 +265,7 @@ class DtbPlatdata:
upto = 0
          for node in self._valid_nodes:
-            node_name = self.GetCompatName(node)
+            node_name, _ = self.GetCompatName(node)
              struct = structs[node_name]
              for name, prop in node.props.items():
                  if name not in PROP_IGNORE_LIST and name[0] != '#':
@@ -333,7 +335,9 @@ class DtbPlatdata:
          Args:
              node: node to output
          """
-        struct_name = self.GetCompatName(node)
+        struct_name, aliases = self.GetCompatName(node)
+        for alias in aliases:
+            self._aliases[alias] = struct_name
          var_name = Conv_name_to_c(node.name)
          self.Buf('static struct %s%s %s%s = {\n' %
              (STRUCT_PREFIX, struct_name, VAL_PREFIX, var_name))
@@ -384,8 +388,11 @@ class DtbPlatdata:
          """Generate device defintions for the platform data
This writes out C platform data initialisation data and
-        U_BOOT_DEVICE() declarations for each valid node. See the
-        documentation in README.of-plat for more information.
+        U_BOOT_DEVICE() declarations for each valid node. Where a node has
+        multiple compatible strings, a #define is used to make them equivalent.
+
+        See the documentation in doc/driver-model/of-plat.txt for more
+        information.
          """
          self.Out('#include <common.h>\n')
          self.Out('#include <dm.h>\n')
@@ -404,6 +411,9 @@ class DtbPlatdata:
              self.OutputNode(node)
              nodes_to_output.remove(node)
+ for alias, struct_name in self._aliases.iteritems():
+            self.Out('#define %s %s\n'% (alias, struct_name))
+
if __name__ != "__main__":
      pass


_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to