* [PATCH v4 0/22] On-demand device probing @ 2015-09-07 12:23 Tomeu Vizoso [not found] ` <1441628627-5143-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> ` (2 more replies) 0 siblings, 3 replies; 11+ messages in thread From: Tomeu Vizoso @ 2015-09-07 12:23 UTC (permalink / raw) To: linux-kernel Cc: Rob Herring, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel, Dmitry Torokhov, devicetree, Linus Walleij, linux-acpi, Arnd Bergmann, Tomeu Vizoso, linux-fbdev, linux-usb, Felipe Balbi, linux-pwm, Terje Bergström, Greg Kroah-Hartman, Jingoo Han, David Airlie, Michael Turquette, linux-clk, dmaengine Hello, I have a problem with the panel on my Tegra Chromebook taking longer than expected to be ready during boot (Stéphane Marchesin reported what is basically the same issue in [0]), and have looked into ordered probing as a better way of solving this than moving nodes around in the DT or playing with initcall levels and linking order. While reading the thread [1] that Alexander Holler started with his series to make probing order deterministic, it occurred to me that it should be possible to achieve the same by probing devices as they are referenced by other devices. This basically reuses the information that is already implicit in the probe() implementations, saving us from refactoring existing drivers or adding information to DTBs. During review of v1 of this series Linus Walleij suggested that it should be the device driver core to make sure that dependencies are ready before probing a device. I gave this idea a try [2] but Mark Brown pointed out to the logic duplication between the resource acquisition and dependency discovery code paths (though I think it's fairly minor). To address that code duplication I experimented with Arnd's devm_probe [3] concept of having drivers declare their dependencies instead of acquiring them during probe, and while it worked [4], I don't think we end up winning anything when compared to just probing devices on-demand from resource getters. One remaining objection is to the "sprinkling" of calls to of_device_probe() in the resource getters of each subsystem, but I think it's the right thing to do given that the storage of resources is currently subsystem-specific. We could avoid the above by moving resource storage into the core, but I don't think there's a compelling case for that. I have tested this on boards with Tegra, iMX.6, Exynos, Rockchip and OMAP SoCs, and these patches were enough to eliminate all the deferred probes (except one in PandaBoard because omap_dma_system doesn't have a firmware node as of yet). Have submitted a branch [5] with only these patches on top of thursday's linux-next to kernelci.org and I don't see any issues that could be caused by them. For some reason it currently has more passes than the version of -next it's based on! With this series I get the kernel to output to the panel in 0.5s, instead of 2.8s. Regards, Tomeu [0] http://lists.freedesktop.org/archives/dri-devel/2014-August/066527.html [1] https://lkml.org/lkml/2014/5/12/452 [2] https://lkml.org/lkml/2015/6/17/305 [3] http://article.gmane.org/gmane.linux.ports.arm.kernel/277689 [4] https://lkml.org/lkml/2015/7/21/441a [5] https://git.collabora.com/cgit/user/tomeu/linux.git/log/?h=on-demand-probes-v6 [6] http://kernelci.org/boot/all/job/collabora/kernel/v4.2-11902-g25d80c927f8b/ [7] http://kernelci.org/boot/all/job/next/kernel/next-20150903/ Changes in v4: - Added bus.pre_probe callback so the probes of Primecell devices can be deferred if their device IDs cannot be yet read because of the clock driver not having probed when they are registered. Maybe this goes overboard and the matching information should be in the DT if there is one. - Rename of_platform_probe to of_device_probe - Use device_node.device instead of device_node.platform_dev - Take a reference to the regulator's device to prevent dangling pointers - Add Kconfig DELAY_DEVICE_PROBES to allow disabling delayed probing in machines with initcalls that depend on devices probing at a given time. - Start processing deferred probes in device_initcall_sync - Also defer probes of AMBA devices registered from the DT as they can also request resources. Changes in v3: - Set and use device_node.platform_dev instead of reversing the logic to find the platform device that encloses a device node. - Drop the fwnode API to probe firmware nodes and add OF-only API for now. I think this same scheme could be used for machines with ACPI, but I haven't been able to find one that had to defer its probes because of the device probe order. - Avoid unlocking the regulator device's mutex if we don't have a device Changes in v2: - Acquire regulator device lock before returning from regulator_dev_lookup() Tomeu Vizoso (22): driver core: Add pre_probe callback to bus_type ARM: amba: Move reading of periphid to pre_probe() of/platform: Point to struct device from device node of: add function to allow probing a device from a OF node gpio: Probe GPIO drivers on demand gpio: Probe pinctrl devices on demand regulator: core: Reduce critical area in _regulator_get regulator: core: Probe regulators on demand drm: Probe panels on demand drm/tegra: Probe dpaux devices on demand i2c: core: Probe i2c adapters and devices on demand pwm: Probe PWM chip devices on demand backlight: Probe backlight devices on demand usb: phy: Probe phy devices on demand clk: Probe clk providers on demand pinctrl: Probe pinctrl devices on demand phy: core: Probe phy providers on demand dma: of: Probe DMA controllers on demand power-supply: Probe power supplies on demand driver core: Allow deferring probes until late init driver core: Start processing deferred probes earlier of/platform: Defer probes of registered devices drivers/amba/bus.c | 78 ++++++++++++++++++------------------- drivers/base/Kconfig | 18 +++++++++ drivers/base/dd.c | 35 ++++++++++++++++- drivers/clk/clk.c | 3 ++ drivers/dma/of-dma.c | 3 ++ drivers/gpio/gpiolib-of.c | 5 +++ drivers/gpu/drm/drm_panel.c | 3 ++ drivers/gpu/drm/tegra/dpaux.c | 3 ++ drivers/i2c/i2c-core.c | 4 ++ drivers/of/device.c | 58 +++++++++++++++++++++++++++ drivers/of/platform.c | 26 +++++++------ drivers/phy/phy-core.c | 3 ++ drivers/pinctrl/devicetree.c | 3 ++ drivers/power/power_supply_core.c | 3 ++ drivers/pwm/core.c | 3 ++ drivers/regulator/core.c | 58 ++++++++++++++++++--------- drivers/usb/phy/phy.c | 3 ++ drivers/video/backlight/backlight.c | 3 ++ include/linux/device.h | 6 +++ include/linux/of.h | 1 + include/linux/of_device.h | 3 ++ 21 files changed, 251 insertions(+), 71 deletions(-) -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <1441628627-5143-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>]
* [PATCH v4 05/22] gpio: Probe GPIO drivers on demand [not found] ` <1441628627-5143-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> @ 2015-09-07 12:23 ` Tomeu Vizoso 2015-09-25 17:01 ` Linus Walleij 2015-09-07 12:23 ` [PATCH v4 16/22] pinctrl: Probe pinctrl devices " Tomeu Vizoso 1 sibling, 1 reply; 11+ messages in thread From: Tomeu Vizoso @ 2015-09-07 12:23 UTC (permalink / raw) To: linux-kernel-u79uwXL29TY76Z2rM5mHXA Cc: Rob Herring, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, Dmitry Torokhov, devicetree-u79uwXL29TY76Z2rM5mHXA, Linus Walleij, linux-acpi-u79uwXL29TY76Z2rM5mHXA, Arnd Bergmann, Tomeu Vizoso, linux-gpio-u79uwXL29TY76Z2rM5mHXA, Alexandre Courbot When looking up a gpiochip through its firmware node, probe it if it hasn't already. The goal is to reduce deferred probes to a minimum, as it makes it very cumbersome to find out why a device failed to probe, and can introduce very big delays in when a critical device is probed. Signed-off-by: Tomeu Vizoso <tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> --- Changes in v4: None Changes in v3: None Changes in v2: None drivers/gpio/gpiolib-of.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index fa6e3c8823d6..9a439dab7a87 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -19,6 +19,7 @@ #include <linux/gpio/consumer.h> #include <linux/of.h> #include <linux/of_address.h> +#include <linux/of_device.h> #include <linux/of_gpio.h> #include <linux/pinctrl/pinctrl.h> #include <linux/slab.h> @@ -95,6 +96,8 @@ struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np, return ERR_PTR(ret); } + of_device_probe(gg_data.gpiospec.np); + gpiochip_find(&gg_data, of_gpiochip_find_and_xlate); of_node_put(gg_data.gpiospec.np); -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v4 05/22] gpio: Probe GPIO drivers on demand 2015-09-07 12:23 ` [PATCH v4 05/22] gpio: Probe GPIO drivers on demand Tomeu Vizoso @ 2015-09-25 17:01 ` Linus Walleij 0 siblings, 0 replies; 11+ messages in thread From: Linus Walleij @ 2015-09-25 17:01 UTC (permalink / raw) To: Tomeu Vizoso Cc: linux-kernel@vger.kernel.org, Rob Herring, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel@lists.infradead.org, Dmitry Torokhov, devicetree@vger.kernel.org, ACPI Devel Maling List, Arnd Bergmann, linux-gpio@vger.kernel.org, Alexandre Courbot On Mon, Sep 7, 2015 at 5:23 AM, Tomeu Vizoso <tomeu.vizoso@collabora.com> wrote: > When looking up a gpiochip through its firmware node, probe it if it > hasn't already. > > The goal is to reduce deferred probes to a minimum, as it makes it very > cumbersome to find out why a device failed to probe, and can introduce > very big delays in when a critical device is probed. > > Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> > --- > > Changes in v4: None > Changes in v3: None > Changes in v2: None Acked-by: Linus Walleij <linus.walleij@linaro.org> That is if the whole thing goes in as-is for the GPIO parts. Yours, Linus Walleij ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v4 16/22] pinctrl: Probe pinctrl devices on demand [not found] ` <1441628627-5143-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> 2015-09-07 12:23 ` [PATCH v4 05/22] gpio: Probe GPIO drivers on demand Tomeu Vizoso @ 2015-09-07 12:23 ` Tomeu Vizoso 2015-09-25 17:03 ` Linus Walleij 1 sibling, 1 reply; 11+ messages in thread From: Tomeu Vizoso @ 2015-09-07 12:23 UTC (permalink / raw) To: linux-kernel-u79uwXL29TY76Z2rM5mHXA Cc: Rob Herring, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, Dmitry Torokhov, devicetree-u79uwXL29TY76Z2rM5mHXA, Linus Walleij, linux-acpi-u79uwXL29TY76Z2rM5mHXA, Arnd Bergmann, Tomeu Vizoso, linux-gpio-u79uwXL29TY76Z2rM5mHXA When looking up a pin controller through its OF node, probe it if it hasn't already. The goal is to reduce deferred probes to a minimum, as it makes it very cumbersome to find out why a device failed to probe, and can introduce very big delays in when a critical device is probed. Signed-off-by: Tomeu Vizoso <tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> --- Changes in v4: None Changes in v3: None Changes in v2: None drivers/pinctrl/devicetree.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c index fe04e748dfe4..f5340b8e1dbe 100644 --- a/drivers/pinctrl/devicetree.c +++ b/drivers/pinctrl/devicetree.c @@ -18,6 +18,7 @@ #include <linux/device.h> #include <linux/of.h> +#include <linux/of_device.h> #include <linux/pinctrl/pinctrl.h> #include <linux/slab.h> @@ -110,6 +111,8 @@ static int dt_to_map_one_config(struct pinctrl *p, const char *statename, struct pinctrl_map *map; unsigned num_maps; + of_device_probe(np_config); + /* Find the pin controller containing np_config */ np_pctldev = of_node_get(np_config); for (;;) { -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v4 16/22] pinctrl: Probe pinctrl devices on demand 2015-09-07 12:23 ` [PATCH v4 16/22] pinctrl: Probe pinctrl devices " Tomeu Vizoso @ 2015-09-25 17:03 ` Linus Walleij 0 siblings, 0 replies; 11+ messages in thread From: Linus Walleij @ 2015-09-25 17:03 UTC (permalink / raw) To: Tomeu Vizoso Cc: linux-kernel@vger.kernel.org, Rob Herring, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel@lists.infradead.org, Dmitry Torokhov, devicetree@vger.kernel.org, ACPI Devel Maling List, Arnd Bergmann, linux-gpio@vger.kernel.org On Mon, Sep 7, 2015 at 5:23 AM, Tomeu Vizoso <tomeu.vizoso@collabora.com> wrote: > When looking up a pin controller through its OF node, probe it if it > hasn't already. > > The goal is to reduce deferred probes to a minimum, as it makes it very > cumbersome to find out why a device failed to probe, and can introduce > very big delays in when a critical device is probed. > > Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> > --- > > Changes in v4: None > Changes in v3: None > Changes in v2: None Acked-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v4 06/22] gpio: Probe pinctrl devices on demand 2015-09-07 12:23 [PATCH v4 0/22] On-demand device probing Tomeu Vizoso [not found] ` <1441628627-5143-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> @ 2015-09-07 12:23 ` Tomeu Vizoso 2015-09-25 17:02 ` Linus Walleij 2015-09-07 20:50 ` [PATCH v4 0/22] On-demand device probing Rob Herring 2 siblings, 1 reply; 11+ messages in thread From: Tomeu Vizoso @ 2015-09-07 12:23 UTC (permalink / raw) To: linux-kernel Cc: Rob Herring, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel, Dmitry Torokhov, devicetree, Linus Walleij, linux-acpi, Arnd Bergmann, Tomeu Vizoso, linux-gpio, Alexandre Courbot When looking up a pin controller through its OF node, probe it if it hasn't already. The goal is to reduce deferred probes to a minimum, as it makes it very cumbersome to find out why a device failed to probe, and can introduce very big delays in when a critical device is probed. Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> --- Changes in v4: None Changes in v3: None Changes in v2: None drivers/gpio/gpiolib-of.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index 9a439dab7a87..05da9a56608d 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -359,6 +359,8 @@ static int of_gpiochip_add_pin_range(struct gpio_chip *chip) if (ret) break; + of_device_probe(pinspec.np); + pctldev = of_pinctrl_get(pinspec.np); if (!pctldev) return -EPROBE_DEFER; -- 2.4.3 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v4 06/22] gpio: Probe pinctrl devices on demand 2015-09-07 12:23 ` [PATCH v4 06/22] gpio: " Tomeu Vizoso @ 2015-09-25 17:02 ` Linus Walleij 0 siblings, 0 replies; 11+ messages in thread From: Linus Walleij @ 2015-09-25 17:02 UTC (permalink / raw) To: Tomeu Vizoso Cc: linux-kernel@vger.kernel.org, Rob Herring, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel@lists.infradead.org, Dmitry Torokhov, devicetree@vger.kernel.org, ACPI Devel Maling List, Arnd Bergmann, linux-gpio@vger.kernel.org, Alexandre Courbot On Mon, Sep 7, 2015 at 5:23 AM, Tomeu Vizoso <tomeu.vizoso@collabora.com> wrote: Nit: prefix patch with "pinctrl:" > When looking up a pin controller through its OF node, probe it if it > hasn't already. > > The goal is to reduce deferred probes to a minimum, as it makes it very > cumbersome to find out why a device failed to probe, and can introduce > very big delays in when a critical device is probed. > > Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> > --- > > Changes in v4: None > Changes in v3: None > Changes in v2: None Acked-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 0/22] On-demand device probing 2015-09-07 12:23 [PATCH v4 0/22] On-demand device probing Tomeu Vizoso [not found] ` <1441628627-5143-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> 2015-09-07 12:23 ` [PATCH v4 06/22] gpio: " Tomeu Vizoso @ 2015-09-07 20:50 ` Rob Herring 2015-09-08 7:30 ` Tomeu Vizoso 2 siblings, 1 reply; 11+ messages in thread From: Rob Herring @ 2015-09-07 20:50 UTC (permalink / raw) To: Tomeu Vizoso Cc: linux-kernel@vger.kernel.org, Rob Herring, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel@lists.infradead.org, Dmitry Torokhov, devicetree@vger.kernel.org, Linus Walleij, linux-acpi@vger.kernel.org, Arnd Bergmann, linux-fbdev@vger.kernel.org, Linux USB List, Felipe Balbi, Linux PWM List, Terje Bergström On Mon, Sep 7, 2015 at 7:23 AM, Tomeu Vizoso <tomeu.vizoso@collabora.com> wrote: > Hello, > > I have a problem with the panel on my Tegra Chromebook taking longer > than expected to be ready during boot (Stéphane Marchesin reported what > is basically the same issue in [0]), and have looked into ordered > probing as a better way of solving this than moving nodes around in the > DT or playing with initcall levels and linking order. > > While reading the thread [1] that Alexander Holler started with his > series to make probing order deterministic, it occurred to me that it > should be possible to achieve the same by probing devices as they are > referenced by other devices. > > This basically reuses the information that is already implicit in the > probe() implementations, saving us from refactoring existing drivers or > adding information to DTBs. > > During review of v1 of this series Linus Walleij suggested that it > should be the device driver core to make sure that dependencies are > ready before probing a device. I gave this idea a try [2] but Mark Brown > pointed out to the logic duplication between the resource acquisition > and dependency discovery code paths (though I think it's fairly minor). > > To address that code duplication I experimented with Arnd's devm_probe > [3] concept of having drivers declare their dependencies instead of > acquiring them during probe, and while it worked [4], I don't think we > end up winning anything when compared to just probing devices on-demand > from resource getters. > > One remaining objection is to the "sprinkling" of calls to > of_device_probe() in the resource getters of each subsystem, but I think > it's the right thing to do given that the storage of resources is > currently subsystem-specific. > > We could avoid the above by moving resource storage into the core, but I > don't think there's a compelling case for that. > > I have tested this on boards with Tegra, iMX.6, Exynos, Rockchip and > OMAP SoCs, and these patches were enough to eliminate all the deferred > probes (except one in PandaBoard because omap_dma_system doesn't have a > firmware node as of yet). > > Have submitted a branch [5] with only these patches on top of thursday's > linux-next to kernelci.org and I don't see any issues that could be > caused by them. For some reason it currently has more passes than the > version of -next it's based on! > > With this series I get the kernel to output to the panel in 0.5s, > instead of 2.8s. > > Regards, > > Tomeu > > [0] http://lists.freedesktop.org/archives/dri-devel/2014-August/066527.html > > [1] https://lkml.org/lkml/2014/5/12/452 > > [2] https://lkml.org/lkml/2015/6/17/305 > > [3] http://article.gmane.org/gmane.linux.ports.arm.kernel/277689 > > [4] https://lkml.org/lkml/2015/7/21/441a > > [5] https://git.collabora.com/cgit/user/tomeu/linux.git/log/?h=on-demand-probes-v6 > > [6] http://kernelci.org/boot/all/job/collabora/kernel/v4.2-11902-g25d80c927f8b/ > > [7] http://kernelci.org/boot/all/job/next/kernel/next-20150903/ > > Changes in v4: > - Added bus.pre_probe callback so the probes of Primecell devices can be > deferred if their device IDs cannot be yet read because of the clock > driver not having probed when they are registered. Maybe this goes > overboard and the matching information should be in the DT if there is > one. Seems overboard to me or at least a separate problem. Most clocks have to be setup before the driver model simply because timers depend on clocks usually. Rob -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 0/22] On-demand device probing 2015-09-07 20:50 ` [PATCH v4 0/22] On-demand device probing Rob Herring @ 2015-09-08 7:30 ` Tomeu Vizoso 2015-09-09 1:33 ` Rob Herring 0 siblings, 1 reply; 11+ messages in thread From: Tomeu Vizoso @ 2015-09-08 7:30 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel@vger.kernel.org, Rob Herring, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel@lists.infradead.org, Dmitry Torokhov, devicetree@vger.kernel.org, Linus Walleij, linux-acpi@vger.kernel.org, Arnd Bergmann, linux-fbdev@vger.kernel.org, Linux USB List, Felipe Balbi, Linux PWM List, Terje Bergström On 7 September 2015 at 22:50, Rob Herring <robherring2@gmail.com> wrote: > On Mon, Sep 7, 2015 at 7:23 AM, Tomeu Vizoso <tomeu.vizoso@collabora.com> wrote: >> Hello, >> >> I have a problem with the panel on my Tegra Chromebook taking longer >> than expected to be ready during boot (Stéphane Marchesin reported what >> is basically the same issue in [0]), and have looked into ordered >> probing as a better way of solving this than moving nodes around in the >> DT or playing with initcall levels and linking order. >> >> While reading the thread [1] that Alexander Holler started with his >> series to make probing order deterministic, it occurred to me that it >> should be possible to achieve the same by probing devices as they are >> referenced by other devices. >> >> This basically reuses the information that is already implicit in the >> probe() implementations, saving us from refactoring existing drivers or >> adding information to DTBs. >> >> During review of v1 of this series Linus Walleij suggested that it >> should be the device driver core to make sure that dependencies are >> ready before probing a device. I gave this idea a try [2] but Mark Brown >> pointed out to the logic duplication between the resource acquisition >> and dependency discovery code paths (though I think it's fairly minor). >> >> To address that code duplication I experimented with Arnd's devm_probe >> [3] concept of having drivers declare their dependencies instead of >> acquiring them during probe, and while it worked [4], I don't think we >> end up winning anything when compared to just probing devices on-demand >> from resource getters. >> >> One remaining objection is to the "sprinkling" of calls to >> of_device_probe() in the resource getters of each subsystem, but I think >> it's the right thing to do given that the storage of resources is >> currently subsystem-specific. >> >> We could avoid the above by moving resource storage into the core, but I >> don't think there's a compelling case for that. >> >> I have tested this on boards with Tegra, iMX.6, Exynos, Rockchip and >> OMAP SoCs, and these patches were enough to eliminate all the deferred >> probes (except one in PandaBoard because omap_dma_system doesn't have a >> firmware node as of yet). >> >> Have submitted a branch [5] with only these patches on top of thursday's >> linux-next to kernelci.org and I don't see any issues that could be >> caused by them. For some reason it currently has more passes than the >> version of -next it's based on! >> >> With this series I get the kernel to output to the panel in 0.5s, >> instead of 2.8s. >> >> Regards, >> >> Tomeu >> >> [0] http://lists.freedesktop.org/archives/dri-devel/2014-August/066527.html >> >> [1] https://lkml.org/lkml/2014/5/12/452 >> >> [2] https://lkml.org/lkml/2015/6/17/305 >> >> [3] http://article.gmane.org/gmane.linux.ports.arm.kernel/277689 >> >> [4] https://lkml.org/lkml/2015/7/21/441a >> >> [5] https://git.collabora.com/cgit/user/tomeu/linux.git/log/?h=on-demand-probes-v6 >> >> [6] http://kernelci.org/boot/all/job/collabora/kernel/v4.2-11902-g25d80c927f8b/ >> >> [7] http://kernelci.org/boot/all/job/next/kernel/next-20150903/ >> >> Changes in v4: >> - Added bus.pre_probe callback so the probes of Primecell devices can be >> deferred if their device IDs cannot be yet read because of the clock >> driver not having probed when they are registered. Maybe this goes >> overboard and the matching information should be in the DT if there is >> one. > > Seems overboard to me or at least a separate problem. It's a separate problem but this was preventing the series from working on a few boards. > Most clocks have > to be setup before the driver model simply because timers depend on > clocks usually. Yes, but in this case the apb clocks for the primecell devices are implemented in a normal platform driver (vexpress_osc_driver), instead of using CLK_OF_DECLARE. Regards, Tomeu > Rob > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 0/22] On-demand device probing 2015-09-08 7:30 ` Tomeu Vizoso @ 2015-09-09 1:33 ` Rob Herring [not found] ` <55EF8C65.4030706-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> 0 siblings, 1 reply; 11+ messages in thread From: Rob Herring @ 2015-09-09 1:33 UTC (permalink / raw) To: Tomeu Vizoso Cc: linux-kernel@vger.kernel.org, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel@lists.infradead.org, Dmitry Torokhov, devicetree@vger.kernel.org, Linus Walleij, linux-acpi@vger.kernel.org, Arnd Bergmann, linux-fbdev@vger.kernel.org, Linux USB List, Felipe Balbi, Linux PWM List, Terje Bergström, Greg Kroah-Hartman On 09/08/2015 02:30 AM, Tomeu Vizoso wrote: > On 7 September 2015 at 22:50, Rob Herring <robherring2@gmail.com> wrote: >> On Mon, Sep 7, 2015 at 7:23 AM, Tomeu Vizoso <tomeu.vizoso@collabora.com> wrote: >>> Hello, >>> >>> I have a problem with the panel on my Tegra Chromebook taking longer >>> than expected to be ready during boot (Stéphane Marchesin reported what >>> is basically the same issue in [0]), and have looked into ordered >>> probing as a better way of solving this than moving nodes around in the >>> DT or playing with initcall levels and linking order. >>> >>> While reading the thread [1] that Alexander Holler started with his >>> series to make probing order deterministic, it occurred to me that it >>> should be possible to achieve the same by probing devices as they are >>> referenced by other devices. >>> >>> This basically reuses the information that is already implicit in the >>> probe() implementations, saving us from refactoring existing drivers or >>> adding information to DTBs. >>> >>> During review of v1 of this series Linus Walleij suggested that it >>> should be the device driver core to make sure that dependencies are >>> ready before probing a device. I gave this idea a try [2] but Mark Brown >>> pointed out to the logic duplication between the resource acquisition >>> and dependency discovery code paths (though I think it's fairly minor). >>> >>> To address that code duplication I experimented with Arnd's devm_probe >>> [3] concept of having drivers declare their dependencies instead of >>> acquiring them during probe, and while it worked [4], I don't think we >>> end up winning anything when compared to just probing devices on-demand >>> from resource getters. >>> >>> One remaining objection is to the "sprinkling" of calls to >>> of_device_probe() in the resource getters of each subsystem, but I think >>> it's the right thing to do given that the storage of resources is >>> currently subsystem-specific. >>> >>> We could avoid the above by moving resource storage into the core, but I >>> don't think there's a compelling case for that. >>> >>> I have tested this on boards with Tegra, iMX.6, Exynos, Rockchip and >>> OMAP SoCs, and these patches were enough to eliminate all the deferred >>> probes (except one in PandaBoard because omap_dma_system doesn't have a >>> firmware node as of yet). >>> >>> Have submitted a branch [5] with only these patches on top of thursday's >>> linux-next to kernelci.org and I don't see any issues that could be >>> caused by them. For some reason it currently has more passes than the >>> version of -next it's based on! >>> >>> With this series I get the kernel to output to the panel in 0.5s, >>> instead of 2.8s. >>> >>> Regards, >>> >>> Tomeu >>> >>> [0] http://lists.freedesktop.org/archives/dri-devel/2014-August/066527.html >>> >>> [1] https://lkml.org/lkml/2014/5/12/452 >>> >>> [2] https://lkml.org/lkml/2015/6/17/305 >>> >>> [3] http://article.gmane.org/gmane.linux.ports.arm.kernel/277689 >>> >>> [4] https://lkml.org/lkml/2015/7/21/441a >>> >>> [5] https://git.collabora.com/cgit/user/tomeu/linux.git/log/?h=on-demand-probes-v6 >>> >>> [6] http://kernelci.org/boot/all/job/collabora/kernel/v4.2-11902-g25d80c927f8b/ >>> >>> [7] http://kernelci.org/boot/all/job/next/kernel/next-20150903/ >>> >>> Changes in v4: >>> - Added bus.pre_probe callback so the probes of Primecell devices can be >>> deferred if their device IDs cannot be yet read because of the clock >>> driver not having probed when they are registered. Maybe this goes >>> overboard and the matching information should be in the DT if there is >>> one. >> >> Seems overboard to me or at least a separate problem. > > It's a separate problem but this was preventing the series from > working on a few boards. What is the failure? Not booting? Fixing not working would certainly not be overboard. > >> Most clocks have >> to be setup before the driver model simply because timers depend on >> clocks usually. > > Yes, but in this case the apb clocks for the primecell devices are > implemented in a normal platform driver (vexpress_osc_driver), instead > of using CLK_OF_DECLARE. Okay. Rob ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <55EF8C65.4030706-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>]
* Re: [PATCH v4 0/22] On-demand device probing [not found] ` <55EF8C65.4030706-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> @ 2015-09-09 9:40 ` Tomeu Vizoso 0 siblings, 0 replies; 11+ messages in thread From: Tomeu Vizoso @ 2015-09-09 9:40 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Stephen Warren, Javier Martinez Canillas, Mark Brown, Thierry Reding, Rafael J. Wysocki, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, Dmitry Torokhov, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Linus Walleij, linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Arnd Bergmann, linux-fbdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Linux USB List, Felipe Balbi, Linux PWM List, Terje Bergström, Greg Kroah-Hartman On 9 September 2015 at 03:33, Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote: > On 09/08/2015 02:30 AM, Tomeu Vizoso wrote: >> On 7 September 2015 at 22:50, Rob Herring <robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >>> On Mon, Sep 7, 2015 at 7:23 AM, Tomeu Vizoso <tomeu.vizoso@collabora.com> wrote: >>>> Hello, >>>> >>>> I have a problem with the panel on my Tegra Chromebook taking longer >>>> than expected to be ready during boot (Stéphane Marchesin reported what >>>> is basically the same issue in [0]), and have looked into ordered >>>> probing as a better way of solving this than moving nodes around in the >>>> DT or playing with initcall levels and linking order. >>>> >>>> While reading the thread [1] that Alexander Holler started with his >>>> series to make probing order deterministic, it occurred to me that it >>>> should be possible to achieve the same by probing devices as they are >>>> referenced by other devices. >>>> >>>> This basically reuses the information that is already implicit in the >>>> probe() implementations, saving us from refactoring existing drivers or >>>> adding information to DTBs. >>>> >>>> During review of v1 of this series Linus Walleij suggested that it >>>> should be the device driver core to make sure that dependencies are >>>> ready before probing a device. I gave this idea a try [2] but Mark Brown >>>> pointed out to the logic duplication between the resource acquisition >>>> and dependency discovery code paths (though I think it's fairly minor). >>>> >>>> To address that code duplication I experimented with Arnd's devm_probe >>>> [3] concept of having drivers declare their dependencies instead of >>>> acquiring them during probe, and while it worked [4], I don't think we >>>> end up winning anything when compared to just probing devices on-demand >>>> from resource getters. >>>> >>>> One remaining objection is to the "sprinkling" of calls to >>>> of_device_probe() in the resource getters of each subsystem, but I think >>>> it's the right thing to do given that the storage of resources is >>>> currently subsystem-specific. >>>> >>>> We could avoid the above by moving resource storage into the core, but I >>>> don't think there's a compelling case for that. >>>> >>>> I have tested this on boards with Tegra, iMX.6, Exynos, Rockchip and >>>> OMAP SoCs, and these patches were enough to eliminate all the deferred >>>> probes (except one in PandaBoard because omap_dma_system doesn't have a >>>> firmware node as of yet). >>>> >>>> Have submitted a branch [5] with only these patches on top of thursday's >>>> linux-next to kernelci.org and I don't see any issues that could be >>>> caused by them. For some reason it currently has more passes than the >>>> version of -next it's based on! >>>> >>>> With this series I get the kernel to output to the panel in 0.5s, >>>> instead of 2.8s. >>>> >>>> Regards, >>>> >>>> Tomeu >>>> >>>> [0] http://lists.freedesktop.org/archives/dri-devel/2014-August/066527.html >>>> >>>> [1] https://lkml.org/lkml/2014/5/12/452 >>>> >>>> [2] https://lkml.org/lkml/2015/6/17/305 >>>> >>>> [3] http://article.gmane.org/gmane.linux.ports.arm.kernel/277689 >>>> >>>> [4] https://lkml.org/lkml/2015/7/21/441a >>>> >>>> [5] https://git.collabora.com/cgit/user/tomeu/linux.git/log/?h=on-demand-probes-v6 >>>> >>>> [6] http://kernelci.org/boot/all/job/collabora/kernel/v4.2-11902-g25d80c927f8b/ >>>> >>>> [7] http://kernelci.org/boot/all/job/next/kernel/next-20150903/ >>>> >>>> Changes in v4: >>>> - Added bus.pre_probe callback so the probes of Primecell devices can be >>>> deferred if their device IDs cannot be yet read because of the clock >>>> driver not having probed when they are registered. Maybe this goes >>>> overboard and the matching information should be in the DT if there is >>>> one. >>> >>> Seems overboard to me or at least a separate problem. >> >> It's a separate problem but this was preventing the series from >> working on a few boards. > > What is the failure? Not booting? Fixing not working would certainly not > be overboard. On the device I was testing on (qemu's vexpress-a15 machine) the machine booted and I was able to open a ssh session, but serial was broken among other AMBA devices: /memory-controller@2b0a0000 /memory-controller@7ffd0000 /dma@7ffb0000 /smb/motherboard/iofpga@3,00000000/sysctl@020000 /smb/motherboard/iofpga@3,00000000/aaci@040000 /smb/motherboard/iofpga@3,00000000/mmci@050000 /smb/motherboard/iofpga@3,00000000/kmi@060000 /smb/motherboard/iofpga@3,00000000/kmi@070000 /smb/motherboard/iofpga@3,00000000/uart@090000 /smb/motherboard/iofpga@3,00000000/uart@0a0000 /smb/motherboard/iofpga@3,00000000/uart@0b0000 /smb/motherboard/iofpga@3,00000000/uart@0c0000 /smb/motherboard/iofpga@3,00000000/wdt@0f0000 /smb/motherboard/iofpga@3,00000000/timer@110000 /smb/motherboard/iofpga@3,00000000/timer@120000 /smb/motherboard/iofpga@3,00000000/rtc@170000 /smb/motherboard/iofpga@3,00000000/clcd@1f0000 Another way of avoiding this particular problem would be not delaying the probe of devices in the configuration bus, by doing something like this: diff --git a/drivers/bus/vexpress-config.c b/drivers/bus/vexpress-config.c index 6575c0fe6a4e..eda293869cd3 100644 --- a/drivers/bus/vexpress-config.c +++ b/drivers/bus/vexpress-config.c @@ -181,7 +181,7 @@ static int vexpress_config_populate(struct device_node *node) if (WARN_ON(!parent)) return -ENODEV; - return of_platform_populate(node, NULL, NULL, parent); + return of_platform_populate_early(node, NULL, NULL, parent); } static int __init vexpress_config_init(void) But I think this would be papering over the underlying issue and it would be better to have proper explicit dependencies. Regards, Tomeu >>> Most clocks have >>> to be setup before the driver model simply because timers depend on >>> clocks usually. >> >> Yes, but in this case the apb clocks for the primecell devices are >> implemented in a normal platform driver (vexpress_osc_driver), instead >> of using CLK_OF_DECLARE. > > Okay. > > Rob > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply related [flat|nested] 11+ messages in thread
end of thread, other threads:[~2015-09-25 17:03 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-09-07 12:23 [PATCH v4 0/22] On-demand device probing Tomeu Vizoso [not found] ` <1441628627-5143-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> 2015-09-07 12:23 ` [PATCH v4 05/22] gpio: Probe GPIO drivers on demand Tomeu Vizoso 2015-09-25 17:01 ` Linus Walleij 2015-09-07 12:23 ` [PATCH v4 16/22] pinctrl: Probe pinctrl devices " Tomeu Vizoso 2015-09-25 17:03 ` Linus Walleij 2015-09-07 12:23 ` [PATCH v4 06/22] gpio: " Tomeu Vizoso 2015-09-25 17:02 ` Linus Walleij 2015-09-07 20:50 ` [PATCH v4 0/22] On-demand device probing Rob Herring 2015-09-08 7:30 ` Tomeu Vizoso 2015-09-09 1:33 ` Rob Herring [not found] ` <55EF8C65.4030706-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> 2015-09-09 9:40 ` Tomeu Vizoso
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).