From: gregkh@linuxfoundation.org (Greg Kroah-Hartman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V4 08/12] boot_constraint: Manage deferrable constraints
Date: Wed, 13 Dec 2017 10:53:45 +0100 [thread overview]
Message-ID: <20171213095345.GJ13194@kroah.com> (raw)
In-Reply-To: <88c7a0a6421d267c118f501ea1e920b04649002d.1509284255.git.viresh.kumar@linaro.org>
On Sun, Oct 29, 2017 at 07:18:56PM +0530, Viresh Kumar wrote:
> It is possible that some of the resources aren't available at the time
> constraints are getting set and the boot constraints core will return
> -EPROBE_DEFER for them. In order to retry adding the constraints at a
> later point of time (after the resource is added and before any of its
> users come up), this patch proposes two things:
>
> - Each constraint is represented by a virtual platform device, so that
> it is re-probed again until the time all the dependencies aren't met.
> The platform device is removed along with the constraint, with help of
> the free_resources() callback.
>
> - Enable early defer probing support by calling
> driver_enable_deferred_probe(), so that the core retries probing
> deferred devices every time any device is bound to a driver. This
> makes sure that the constraint is set before any of the users of the
> resources come up.
>
> This is tested on ARM64 Hikey board where probe was deferred for a
> device.
>
> Tested-by: Rajendra Nayak <rnayak@codeaurora.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
> drivers/base/dd.c | 12 ++
> drivers/boot_constraints/Makefile | 2 +-
> drivers/boot_constraints/deferrable_dev.c | 235 ++++++++++++++++++++++++++++++
> include/linux/boot_constraint.h | 14 ++
> 4 files changed, 262 insertions(+), 1 deletion(-)
> create mode 100644 drivers/boot_constraints/deferrable_dev.c
>
> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> index 4eec27fe2b2b..19eff5d08b9a 100644
> --- a/drivers/base/dd.c
> +++ b/drivers/base/dd.c
> @@ -228,6 +228,18 @@ void device_unblock_probing(void)
> driver_deferred_probe_trigger();
> }
>
> +/**
> + * driver_enable_deferred_probe() - Enable probing of deferred devices
> + *
> + * We don't want to get in the way when the bulk of drivers are getting probed
> + * and so deferred probe is disabled in the beginning. Enable it now because we
> + * need it.
> + */
> +void driver_enable_deferred_probe(void)
> +{
> + driver_deferred_probe_enable = true;
> +}
> +
> /**
> * deferred_probe_initcall() - Enable probing of deferred devices
> *
> diff --git a/drivers/boot_constraints/Makefile b/drivers/boot_constraints/Makefile
> index b7ade1a7afb5..a765094623a3 100644
> --- a/drivers/boot_constraints/Makefile
> +++ b/drivers/boot_constraints/Makefile
> @@ -1,3 +1,3 @@
> # Makefile for device boot constraints
>
> -obj-y := clk.o core.o pm.o supply.o
> +obj-y := clk.o deferrable_dev.o core.o pm.o supply.o
> diff --git a/drivers/boot_constraints/deferrable_dev.c b/drivers/boot_constraints/deferrable_dev.c
> new file mode 100644
> index 000000000000..04056f317aff
> --- /dev/null
> +++ b/drivers/boot_constraints/deferrable_dev.c
> @@ -0,0 +1,235 @@
> +/*
> + * Copyright (C) 2017 Linaro.
> + * Viresh Kumar <viresh.kumar@linaro.org>
> + *
> + * This file is released under the GPLv2.
> + */
> +
> +#define pr_fmt(fmt) "Boot Constraints: " fmt
Hey, you use this one!
But you shouldn't :)
> +/* This only creates platform devices for now */
> +static void add_deferrable_of_single(struct device_node *np,
> + struct dev_boot_constraint *constraints,
> + int count)
> +{
> + struct device *dev;
> + int ret;
> +
> + if (!of_device_is_available(np))
> + return;
> +
> + ret = of_platform_bus_create(np, NULL, NULL, NULL, false);
> + if (ret)
> + return;
> +
> + if (of_device_is_compatible(np, "arm,primecell")) {
Why is "arm,primecell" in the core code here?
> + struct amba_device *adev = of_find_amba_device_by_node(np);
> +
> + if (!adev) {
> + pr_err("Failed to find amba dev: %s\n", np->full_name);
Never use pr_* when you have a valid struct device to use. Don't you
have one from the struct device_node * passed in here?
> + return;
> + }
> + dev = &adev->dev;
> + } else {
> + struct platform_device *pdev = of_find_device_by_node(np);
> +
> + if (!pdev) {
> + pr_err("Failed to find pdev: %s\n", np->full_name);
Same here.
thanks,
greg k-h
WARNING: multiple messages have this Message-ID (diff)
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Vincent Guittot <vincent.guittot@linaro.org>,
Stephen Boyd <sboyd@codeaurora.org>,
Rajendra Nayak <rnayak@codeaurora.org>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, robdclark@gmail.com,
s.hauer@pengutronix.de, l.stach@pengutronix.de,
shawnguo@kernel.org, fabio.estevam@nxp.com, nm@ti.com,
xuwei5@hisilicon.com, robh+dt@kernel.org
Subject: Re: [PATCH V4 08/12] boot_constraint: Manage deferrable constraints
Date: Wed, 13 Dec 2017 10:53:45 +0100 [thread overview]
Message-ID: <20171213095345.GJ13194@kroah.com> (raw)
In-Reply-To: <88c7a0a6421d267c118f501ea1e920b04649002d.1509284255.git.viresh.kumar@linaro.org>
On Sun, Oct 29, 2017 at 07:18:56PM +0530, Viresh Kumar wrote:
> It is possible that some of the resources aren't available at the time
> constraints are getting set and the boot constraints core will return
> -EPROBE_DEFER for them. In order to retry adding the constraints at a
> later point of time (after the resource is added and before any of its
> users come up), this patch proposes two things:
>
> - Each constraint is represented by a virtual platform device, so that
> it is re-probed again until the time all the dependencies aren't met.
> The platform device is removed along with the constraint, with help of
> the free_resources() callback.
>
> - Enable early defer probing support by calling
> driver_enable_deferred_probe(), so that the core retries probing
> deferred devices every time any device is bound to a driver. This
> makes sure that the constraint is set before any of the users of the
> resources come up.
>
> This is tested on ARM64 Hikey board where probe was deferred for a
> device.
>
> Tested-by: Rajendra Nayak <rnayak@codeaurora.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
> drivers/base/dd.c | 12 ++
> drivers/boot_constraints/Makefile | 2 +-
> drivers/boot_constraints/deferrable_dev.c | 235 ++++++++++++++++++++++++++++++
> include/linux/boot_constraint.h | 14 ++
> 4 files changed, 262 insertions(+), 1 deletion(-)
> create mode 100644 drivers/boot_constraints/deferrable_dev.c
>
> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> index 4eec27fe2b2b..19eff5d08b9a 100644
> --- a/drivers/base/dd.c
> +++ b/drivers/base/dd.c
> @@ -228,6 +228,18 @@ void device_unblock_probing(void)
> driver_deferred_probe_trigger();
> }
>
> +/**
> + * driver_enable_deferred_probe() - Enable probing of deferred devices
> + *
> + * We don't want to get in the way when the bulk of drivers are getting probed
> + * and so deferred probe is disabled in the beginning. Enable it now because we
> + * need it.
> + */
> +void driver_enable_deferred_probe(void)
> +{
> + driver_deferred_probe_enable = true;
> +}
> +
> /**
> * deferred_probe_initcall() - Enable probing of deferred devices
> *
> diff --git a/drivers/boot_constraints/Makefile b/drivers/boot_constraints/Makefile
> index b7ade1a7afb5..a765094623a3 100644
> --- a/drivers/boot_constraints/Makefile
> +++ b/drivers/boot_constraints/Makefile
> @@ -1,3 +1,3 @@
> # Makefile for device boot constraints
>
> -obj-y := clk.o core.o pm.o supply.o
> +obj-y := clk.o deferrable_dev.o core.o pm.o supply.o
> diff --git a/drivers/boot_constraints/deferrable_dev.c b/drivers/boot_constraints/deferrable_dev.c
> new file mode 100644
> index 000000000000..04056f317aff
> --- /dev/null
> +++ b/drivers/boot_constraints/deferrable_dev.c
> @@ -0,0 +1,235 @@
> +/*
> + * Copyright (C) 2017 Linaro.
> + * Viresh Kumar <viresh.kumar@linaro.org>
> + *
> + * This file is released under the GPLv2.
> + */
> +
> +#define pr_fmt(fmt) "Boot Constraints: " fmt
Hey, you use this one!
But you shouldn't :)
> +/* This only creates platform devices for now */
> +static void add_deferrable_of_single(struct device_node *np,
> + struct dev_boot_constraint *constraints,
> + int count)
> +{
> + struct device *dev;
> + int ret;
> +
> + if (!of_device_is_available(np))
> + return;
> +
> + ret = of_platform_bus_create(np, NULL, NULL, NULL, false);
> + if (ret)
> + return;
> +
> + if (of_device_is_compatible(np, "arm,primecell")) {
Why is "arm,primecell" in the core code here?
> + struct amba_device *adev = of_find_amba_device_by_node(np);
> +
> + if (!adev) {
> + pr_err("Failed to find amba dev: %s\n", np->full_name);
Never use pr_* when you have a valid struct device to use. Don't you
have one from the struct device_node * passed in here?
> + return;
> + }
> + dev = &adev->dev;
> + } else {
> + struct platform_device *pdev = of_find_device_by_node(np);
> +
> + if (!pdev) {
> + pr_err("Failed to find pdev: %s\n", np->full_name);
Same here.
thanks,
greg k-h
next prev parent reply other threads:[~2017-12-13 9:53 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-29 13:48 [PATCH V4 00/12] drivers: Boot Constraints core Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 01/12] of: platform: Add of_find_amba_device_by_node() Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 02/12] of: platform: Make of_platform_bus_create() global Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 03/12] drivers: Add boot constraints core Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-12-13 9:42 ` Greg Kroah-Hartman
2017-12-13 9:42 ` Greg Kroah-Hartman
2017-12-13 9:59 ` Viresh Kumar
2017-12-13 9:59 ` Viresh Kumar
2017-12-13 9:42 ` Greg Kroah-Hartman
2017-12-13 9:42 ` Greg Kroah-Hartman
2017-12-13 10:00 ` Viresh Kumar
2017-12-13 10:00 ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 04/12] boot_constraint: Add support for supply constraints Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-12-13 9:48 ` Greg Kroah-Hartman
2017-12-13 9:48 ` Greg Kroah-Hartman
2017-10-29 13:48 ` [PATCH V4 05/12] boot_constraint: Add support for clk constraints Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-12-13 9:48 ` Greg Kroah-Hartman
2017-12-13 9:48 ` Greg Kroah-Hartman
2017-10-29 13:48 ` [PATCH V4 06/12] boot_constraint: Add support for PM constraints Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-12-13 9:48 ` Greg Kroah-Hartman
2017-12-13 9:48 ` Greg Kroah-Hartman
2017-10-29 13:48 ` [PATCH V4 07/12] boot_constraint: Add debugfs support Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-10-29 15:09 ` Randy Dunlap
2017-10-29 15:09 ` Randy Dunlap
2017-10-30 3:37 ` Viresh Kumar
2017-10-30 3:37 ` Viresh Kumar
2017-10-30 3:43 ` Randy Dunlap
2017-10-30 3:43 ` Randy Dunlap
2017-12-13 9:50 ` Greg Kroah-Hartman
2017-12-13 9:50 ` Greg Kroah-Hartman
2017-10-29 13:48 ` [PATCH V4 08/12] boot_constraint: Manage deferrable constraints Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-10-31 16:20 ` Rob Herring
2017-10-31 16:20 ` Rob Herring
2017-11-01 2:29 ` Viresh Kumar
2017-11-01 2:29 ` Viresh Kumar
2017-12-13 9:53 ` Greg Kroah-Hartman [this message]
2017-12-13 9:53 ` Greg Kroah-Hartman
2017-12-13 10:27 ` Viresh Kumar
2017-12-13 10:27 ` Viresh Kumar
2017-12-13 10:33 ` Russell King - ARM Linux
2017-12-13 10:33 ` Russell King - ARM Linux
2017-12-13 14:39 ` Viresh Kumar
2017-12-13 14:39 ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 09/12] boot_constraint: Add earlycon helper Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-12-13 9:44 ` Greg Kroah-Hartman
2017-12-13 9:44 ` Greg Kroah-Hartman
2017-12-14 5:22 ` Viresh Kumar
2017-12-14 5:22 ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 10/12] boot_constraint: Add support for Hisilicon platforms Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-12-13 9:47 ` Greg Kroah-Hartman
2017-12-13 9:47 ` Greg Kroah-Hartman
2017-12-13 10:13 ` Viresh Kumar
2017-12-13 10:13 ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 11/12] boot_constraint: Add support for IMX platform Viresh Kumar
2017-10-29 13:48 ` Viresh Kumar
2017-11-03 8:58 ` Sascha Hauer
2017-11-03 8:58 ` Sascha Hauer
2017-10-29 13:49 ` [PATCH V4 12/12] boot_constraint: Add Qualcomm display controller constraints Viresh Kumar
2017-10-29 13:49 ` Viresh Kumar
2017-10-30 22:07 ` [PATCH V4 00/12] drivers: Boot Constraints core Rob Herring
2017-10-30 22:07 ` Rob Herring
2017-10-31 10:01 ` Viresh Kumar
2017-10-31 10:01 ` Viresh Kumar
2017-10-31 16:03 ` Rob Herring
2017-11-28 4:18 ` Viresh Kumar
2017-11-28 4:18 ` Viresh Kumar
2017-11-28 4:18 ` Viresh Kumar
2017-12-13 9:55 ` Greg Kroah-Hartman
2017-12-13 9:55 ` Greg Kroah-Hartman
2017-12-13 10:27 ` Viresh Kumar
2017-12-13 10:27 ` Viresh Kumar
2017-12-13 10:27 ` Viresh Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171213095345.GJ13194@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.