* [PATCH v10 0/2] Silence missing-graph error for DRM bridges @ 2020-07-01 7:42 Dmitry Osipenko 2020-07-01 7:42 ` [PATCH v10 1/2] of_graph: add of_graph_is_present() Dmitry Osipenko ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Dmitry Osipenko @ 2020-07-01 7:42 UTC (permalink / raw) To: Thierry Reding, Sam Ravnborg, Laurent Pinchart, Rob Herring, Frank Rowand Cc: dri-devel, linux-tegra, devicetree, linux-kernel 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(+) -- 2.26.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v10 1/2] of_graph: add of_graph_is_present() 2020-07-01 7:42 [PATCH v10 0/2] Silence missing-graph error for DRM bridges Dmitry Osipenko @ 2020-07-01 7:42 ` Dmitry Osipenko 2020-07-01 7:55 ` Laurent Pinchart 2020-07-01 7:42 ` [PATCH v10 2/2] drm/of: Make drm_of_find_panel_or_bridge() to check graph's presence Dmitry Osipenko 2020-07-01 9:02 ` [PATCH v10 0/2] Silence missing-graph error for DRM bridges Sam Ravnborg 2 siblings, 1 reply; 6+ messages in thread From: Dmitry Osipenko @ 2020-07-01 7:42 UTC (permalink / raw) To: Thierry Reding, Sam Ravnborg, Laurent Pinchart, Rob Herring, Frank Rowand Cc: dri-devel, linux-tegra, devicetree, linux-kernel 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 <robh@kernel.org> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> --- drivers/of/property.c | 23 +++++++++++++++++++++++ include/linux/of_graph.h | 6 ++++++ 2 files changed, 29 insertions(+) diff --git a/drivers/of/property.c b/drivers/of/property.c index 6a5760f0d6cd..fed7229d9d9f 100644 --- a/drivers/of/property.c +++ b/drivers/of/property.c @@ -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 * diff --git a/include/linux/of_graph.h b/include/linux/of_graph.h index 01038a6aade0..4d7756087b6b 100644 --- a/include/linux/of_graph.h +++ b/include/linux/of_graph.h @@ -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) { -- 2.26.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v10 1/2] of_graph: add of_graph_is_present() 2020-07-01 7:42 ` [PATCH v10 1/2] of_graph: add of_graph_is_present() Dmitry Osipenko @ 2020-07-01 7:55 ` Laurent Pinchart 0 siblings, 0 replies; 6+ messages in thread From: Laurent Pinchart @ 2020-07-01 7:55 UTC (permalink / raw) To: Dmitry Osipenko Cc: Thierry Reding, Sam Ravnborg, Rob Herring, Frank Rowand, dri-devel, linux-tegra, devicetree, linux-kernel Hi Dmitry, Thank you for the patch. On Wed, Jul 01, 2020 at 10:42:31AM +0300, Dmitry Osipenko wrote: > 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 <robh@kernel.org> > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > drivers/of/property.c | 23 +++++++++++++++++++++++ > include/linux/of_graph.h | 6 ++++++ > 2 files changed, 29 insertions(+) > > diff --git a/drivers/of/property.c b/drivers/of/property.c > index 6a5760f0d6cd..fed7229d9d9f 100644 > --- a/drivers/of/property.c > +++ b/drivers/of/property.c > @@ -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 > * > diff --git a/include/linux/of_graph.h b/include/linux/of_graph.h > index 01038a6aade0..4d7756087b6b 100644 > --- a/include/linux/of_graph.h > +++ b/include/linux/of_graph.h > @@ -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) > { -- Regards, Laurent Pinchart ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v10 2/2] drm/of: Make drm_of_find_panel_or_bridge() to check graph's presence 2020-07-01 7:42 [PATCH v10 0/2] Silence missing-graph error for DRM bridges Dmitry Osipenko 2020-07-01 7:42 ` [PATCH v10 1/2] of_graph: add of_graph_is_present() Dmitry Osipenko @ 2020-07-01 7:42 ` Dmitry Osipenko 2020-07-01 9:02 ` [PATCH v10 0/2] Silence missing-graph error for DRM bridges Sam Ravnborg 2 siblings, 0 replies; 6+ messages in thread From: Dmitry Osipenko @ 2020-07-01 7:42 UTC (permalink / raw) To: Thierry Reding, Sam Ravnborg, Laurent Pinchart, Rob Herring, Frank Rowand Cc: dri-devel, linux-tegra, devicetree, linux-kernel When 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. Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> --- drivers/gpu/drm/drm_of.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index b50b44e76279..fdb05fbf72a0 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -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; -- 2.26.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v10 0/2] Silence missing-graph error for DRM bridges 2020-07-01 7:42 [PATCH v10 0/2] Silence missing-graph error for DRM bridges Dmitry Osipenko 2020-07-01 7:42 ` [PATCH v10 1/2] of_graph: add of_graph_is_present() Dmitry Osipenko 2020-07-01 7:42 ` [PATCH v10 2/2] drm/of: Make drm_of_find_panel_or_bridge() to check graph's presence Dmitry Osipenko @ 2020-07-01 9:02 ` Sam Ravnborg 2020-07-01 9:31 ` Dmitry Osipenko 2 siblings, 1 reply; 6+ messages in thread From: Sam Ravnborg @ 2020-07-01 9:02 UTC (permalink / raw) To: Dmitry Osipenko Cc: Thierry Reding, Laurent Pinchart, Rob Herring, Frank Rowand, dri-devel, linux-tegra, devicetree, linux-kernel Hi Dmitry On Wed, Jul 01, 2020 at 10:42:30AM +0300, Dmitry Osipenko wrote: > 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 Thanks for your patience with these - applied to drm-misc-next now. Sam > > drivers/gpu/drm/drm_of.c | 9 +++++++++ > drivers/of/property.c | 23 +++++++++++++++++++++++ > include/linux/of_graph.h | 6 ++++++ > 3 files changed, 38 insertions(+) > > -- > 2.26.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v10 0/2] Silence missing-graph error for DRM bridges 2020-07-01 9:02 ` [PATCH v10 0/2] Silence missing-graph error for DRM bridges Sam Ravnborg @ 2020-07-01 9:31 ` Dmitry Osipenko 0 siblings, 0 replies; 6+ messages in thread From: Dmitry Osipenko @ 2020-07-01 9:31 UTC (permalink / raw) To: Sam Ravnborg Cc: Thierry Reding, Laurent Pinchart, Rob Herring, Frank Rowand, dri-devel, linux-tegra, devicetree, linux-kernel 01.07.2020 12:02, Sam Ravnborg пишет: > Hi Dmitry > On Wed, Jul 01, 2020 at 10:42:30AM +0300, Dmitry Osipenko wrote: >> 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 > > Thanks for your patience with these - applied to drm-misc-next now. Thanks to you and Laurent! ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-07-01 9:32 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-07-01 7:42 [PATCH v10 0/2] Silence missing-graph error for DRM bridges Dmitry Osipenko 2020-07-01 7:42 ` [PATCH v10 1/2] of_graph: add of_graph_is_present() Dmitry Osipenko 2020-07-01 7:55 ` Laurent Pinchart 2020-07-01 7:42 ` [PATCH v10 2/2] drm/of: Make drm_of_find_panel_or_bridge() to check graph's presence Dmitry Osipenko 2020-07-01 9:02 ` [PATCH v10 0/2] Silence missing-graph error for DRM bridges Sam Ravnborg 2020-07-01 9:31 ` Dmitry Osipenko
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).