[U-Boot] [PATCH] dtoc: Support multiple compatible strings in a node
Kever Yang
kever.yang at rock-chips.com
Tue Jun 13 14:31:31 UTC 2017
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 <sjg at 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
More information about the U-Boot
mailing list