Silence missing-graph error for DRM bridges
Subsystems (4)
v10 cover Silence missing-graph error for DRM bridges
Hi!
This small series improves DRM bridges code by silencing a noisy error coming from of-graph code for the device-trees that are missing a display bridge graph.
graph: no port node found in ...
One example where this error happens is an older bridge-less DTB used in conjunction with a newer kernel which has a display controller driver that supports DRM bridges.
Changelog:
v10:- Corrected doc-comment, unbroke the of_graph_get_next_endpoint() and
improved commit's message in the "add of_graph_is_present()" patch. Thanks to Laurent Pinchart for spotting the problems!
v9: - These two patches are factored out from [1] in order to ease applying
of the patches.
- The of_graph_presents() is renamed to of_graph_is_present() like it was requested by Rob Herring in the review comment to [1].
- Added Rob's r-b.
[1] https://patchwork.ozlabs.org/project/linux-tegra/list/?series=184102
Dmitry Osipenko (2):
of_graph: add of_graph_is_present()
drm/of: Make drm_of_find_panel_or_bridge() to check graph's presence
drivers/gpu/drm/drm_of.c | 9 +++++++++ drivers/of/property.c | 23 +++++++++++++++++++++++ include/linux/of_graph.h | 6 ++++++ 3 files changed, 38 insertions(+)
Signature · 1 line
2.26.0
PATCH v10 1/2 of_graph: add of_graph_is_present()
In some cases it's very useful to silently check whether port node exists at all in a device-tree before proceeding with parsing the graph. The DRM bridges code is one example of such case where absence of a graph in a device-tree is a legit condition.
This patch adds of_graph_is_present() which returns true if given device-tree node contains OF graph port.
--- drivers/of/property.c | 23 +++++++++++++++++++++++ include/linux/of_graph.h | 6 ++++++ 2 files changed, 29 insertions(+)
drivers/of/property.c +23 -0
@@ -29,6 +29,29 @@#include "of_private.h" +/** +* of_graph_is_present() - check graph's presence +* @node: pointer to device_node containing graph port +* +* Return: True if @node has a port or ports (with a port) sub-node, +* false otherwise. +*/ +bool of_graph_is_present (const struct device_node *node) +{ +struct device_node *ports, *port; + + ports =of_get_child_by_name (node,"ports" ); +if (ports) + node = ports; + + port =of_get_child_by_name (node,"port" ); +of_node_put (ports); +of_node_put (port); + +return !!port; +} +EXPORT_SYMBOL (of_graph_is_present); +/** * of_property_count_elems_of_size - Count the number of elements in a property *
include/linux/of_graph.h +6 -0
@@ -38,6 +38,7 @@ struct of_endpoint { child = of_graph_get_next_endpoint(parent, child))#ifdef CONFIG_OF +bool of_graph_is_present (const struct device_node *node);int of_graph_parse_endpoint (const struct device_node *node,struct of_endpoint *endpoint);int of_graph_get_endpoint_count (const struct device_node *np);
@@ -56,6 +57,11 @@ struct device_node *of_graph_get_remote_node(const struct device_node *node, u32 port, u32 endpoint);#else +static inline bool of_graph_is_present (const struct device_node *node) +{ +return false; +} +static inline int of_graph_parse_endpoint (const struct device_node *node,struct of_endpoint *endpoint) {
Signature · 1 line
2.26.0
Re: [PATCH v10 1/2] of_graph: add of_graph_is_present()
Hi Dmitry,
Thank you for the patch.
Quoted 10 lines · Dmitry Osipenko
In some cases it's very useful to silently check whether port node exists at all in a device-tree before proceeding with parsing the graph. The DRM bridges code is one example of such case where absence of a graph in a device-tree is a legit condition.
This patch adds
of_graph_is_present()which returns true if given device-tree node contains OF graph port.Reviewed-by Rob Herring <[email protected]>Signed-off-by Dmitry Osipenko <[email protected]>
Quoted 63 lines
--- drivers/of/property.c | 23 +++++++++++++++++++++++ include/linux/of_graph.h | 6 ++++++ 2 files changed, 29 insertions(+)drivers/of/property.c +23
-0@@ -29,6 +29,29 @@#include "of_private.h" +/** +* of_graph_is_present() - check graph's presence +* @node: pointer to device_node containing graph port +* +* Return: True if @node has a port or ports (with a port) sub-node, +* false otherwise. +*/ +bool of_graph_is_present (const struct device_node *node) +{ +struct device_node *ports, *port; + + ports =of_get_child_by_name (node,"ports" ); +if (ports) + node = ports; + + port =of_get_child_by_name (node,"port" ); +of_node_put (ports); +of_node_put (port); + +return !!port; +} +EXPORT_SYMBOL (of_graph_is_present); +/** * of_property_count_elems_of_size - Count the number of elements in a property * include/linux/of_graph.h +6
-0@@ -38,6 +38,7 @@ struct of_endpoint { child = of_graph_get_next_endpoint(parent, child))#ifdef CONFIG_OF +bool of_graph_is_present (const struct device_node *node);int of_graph_parse_endpoint (const struct device_node *node,struct of_endpoint *endpoint);int of_graph_get_endpoint_count (const struct device_node *np);@@ -56,6 +57,11 @@ struct device_node *of_graph_get_remote_node(const struct device_node *node, u32 port, u32 endpoint);#else +static inline bool of_graph_is_present (const struct device_node *node) +{ +return false; +} +static inline int of_graph_parse_endpoint (const struct device_node *node,struct of_endpoint *endpoint) {
Signature · 3 lines
Regards, Laurent Pinchart
PATCH v10 2/2 drm/of: Make drm_of_find_panel_or_bridge() to check graph's presence
In reply to Dmitry OsipenkoWhen graph isn't defined in a device-tree, the of_graph_get_remote_node() prints a noisy error message, telling that port node is not found. This is undesirable behaviour in our case because absence of a panel/bridge graph is a valid case. Let's check the graph's presence in a device-tree before proceeding with parsing of the graph.
--- drivers/gpu/drm/drm_of.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/gpu/drm/drm_of.c +9 -0
@@ -246,6 +246,15 @@ int drm_of_find_panel_or_bridge(const struct device_node *np,if (panel) *panel =NULL ; +/* +* of_graph_get_remote_node() produces a noisy error message if port +* node isn't found and the absence of the port is a legit case here, +* so at first we silently check whether graph presents in the +* device-tree node. +*/ +if (!of_graph_is_present (np)) +return -ENODEV ; + remote =of_graph_get_remote_node (np, port, endpoint);if (!remote)return -ENODEV ;
Signature · 1 line
2.26.0
Hi Dmitry
Quoted 24 lines · Dmitry Osipenko
Hi!
This small series improves DRM bridges code by silencing a noisy error coming from of-graph code for the device-trees that are missing a display bridge graph.
graph: no port node found in ...
One example where this error happens is an older bridge-less DTB used in conjunction with a newer kernel which has a display controller driver that supports DRM bridges.
Changelog:
v10:- Corrected doc-comment, unbroke the
of_graph_get_next_endpoint()and
improved commit's message in the "addof_graph_is_present()" patch. Thanks to Laurent Pinchart for spotting the problems!v9: - These two patches are factored out from [1] in order to ease applying
of the patches.- The
of_graph_presents()is renamed toof_graph_is_present()like it was requested by Rob Herring in the review comment to [1].
Quoted 7 lines
- Added Rob's r-b.
[1] https://patchwork.ozlabs.org/project/linux-tegra/list/?series=184102
Dmitry Osipenko (2):
of_graph: addof_graph_is_present()
drm/of: Makedrm_of_find_panel_or_bridge()to check graph's presence
Thanks for your patience with these - applied to drm-misc-next now.
Sam
Quoted 8 lines
drivers/gpu/drm/drm_of.c | 9 +++++++++ drivers/of/property.c | 23 +++++++++++++++++++++++ include/linux/of_graph.h | 6 ++++++ 3 files changed, 38 insertions(+)Signature · 1 line
2.26.0
01.07.2020 12:02, Sam Ravnborg пишет:
Quoted 28 lines
Hi Dmitry
Quoted 26 lines · Dmitry Osipenko
Hi!
This small series improves DRM bridges code by silencing a noisy error coming from of-graph code for the device-trees that are missing a display bridge graph.
graph: no port node found in ...
One example where this error happens is an older bridge-less DTB used in conjunction with a newer kernel which has a display controller driver that supports DRM bridges.
Changelog:
v10:- Corrected doc-comment, unbroke the
of_graph_get_next_endpoint()and
improved commit's message in the "addof_graph_is_present()" patch. Thanks to Laurent Pinchart for spotting the problems!v9: - These two patches are factored out from [1] in order to ease applying
of the patches.- The
of_graph_presents()is renamed toof_graph_is_present()like it was requested by Rob Herring in the review comment to [1].- Added Rob's r-b.
Quoted 7 lines
Quoted 5 lines
[1] https://patchwork.ozlabs.org/project/linux-tegra/list/?series=184102Dmitry Osipenko (2):
of_graph: addof_graph_is_present()
drm/of: Makedrm_of_find_panel_or_bridge()to check graph's presenceThanks for your patience with these - applied to drm-misc-next now.
Thanks to you and Laurent!