[U-Boot] [PATCH V2 1/4] power-domain: add dummy functions when CONFIG_POWER_DOMAIN not defined

Add dummy functions when CONFIG_POWER_DOMAIN not defined.
Signed-off-by: Peng Fan peng.fan@nxp.com ---
V2: Use CONFIG_IS_ENABLED
include/power-domain.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
diff --git a/include/power-domain.h b/include/power-domain.h index aba8c0f65c..2029b17c6f 100644 --- a/include/power-domain.h +++ b/include/power-domain.h @@ -87,7 +87,14 @@ struct power_domain { * @power_domain A pointer to a power domain struct to initialize. * @return 0 if OK, or a negative error code. */ +#if CONFIG_IS_ENABLED(POWER_DOMAIN) int power_domain_get(struct udevice *dev, struct power_domain *power_domain); +#else +int power_domain_get(struct udevice *dev, struct power_domain *power_domain) +{ + return -EINVAL; +} +#endif
/** * power_domain_free - Free a previously requested power domain. @@ -96,7 +103,14 @@ int power_domain_get(struct udevice *dev, struct power_domain *power_domain); * requested by power_domain_get(). * @return 0 if OK, or a negative error code. */ +#if CONFIG_IS_ENABLED(POWER_DOMAIN) int power_domain_free(struct power_domain *power_domain); +#else +int power_domain_free(struct power_domain *power_domain) +{ + return -EINVAL; +} +#endif
/** * power_domain_on - Enable power to a power domain. @@ -105,7 +119,14 @@ int power_domain_free(struct power_domain *power_domain); * requested by power_domain_get(). * @return 0 if OK, or a negative error code. */ +#if CONFIG_IS_ENABLED(POWER_DOMAIN) int power_domain_on(struct power_domain *power_domain); +#else +int power_domain_on(struct power_domain *power_domain) +{ + return -EINVAL; +} +#endif
/** * power_domain_off - Disable power ot a power domain. @@ -114,6 +135,13 @@ int power_domain_on(struct power_domain *power_domain); * requested by power_domain_get(). * @return 0 if OK, or a negative error code. */ +#if CONFIG_IS_ENABLED(POWER_DOMAIN) int power_domain_off(struct power_domain *power_domain); +#else +int power_domain_off(struct power_domain *power_domain) +{ + return -EINVAL; +} +#endif
#endif

Add CONFIG_SPL_POWER_DOMAIN config entry. Build drivers/power/domain if this config is selected.
Signed-off-by: Peng Fan peng.fan@nxp.com Cc: Simon Glass sjg@chromium.org ---
V2: New
common/spl/Kconfig | 9 +++++++++ drivers/Makefile | 1 + drivers/power/domain/Makefile | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/common/spl/Kconfig b/common/spl/Kconfig index 99c9053ab8..2bb1aeb630 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -599,6 +599,15 @@ config SPL_POWER_SUPPORT in drivers/power, drivers/power/pmic and drivers/power/regulator as part of an SPL build.
+config SPL_POWER_DOMAIN + bool "Support power domain drivers" + help + Enable support for power domain control in SPL. Many SoCs allow + power to be applied to or removed from portions of the SoC (power + domains). This may be used to save power. This API provides the + means to control such power management hardware. This enables + the drivers in drivers/power/domain as part of a SPL build. + config SPL_RAM_SUPPORT bool "Support booting from RAM" default y if MICROBLAZE || ARCH_SOCFPGA || TEGRA || ARCH_ZYNQ diff --git a/drivers/Makefile b/drivers/Makefile index 276e5ee4d7..d53208540e 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -28,6 +28,7 @@ obj-$(CONFIG_ARMADA_XP) += ddr/marvell/axp/ obj-$(CONFIG_ALTERA_SDRAM) += ddr/altera/ obj-$(CONFIG_SPL_POWER_SUPPORT) += power/ power/pmic/ obj-$(CONFIG_SPL_POWER_SUPPORT) += power/regulator/ +obj-$(CONFIG_SPL_POWER_DOMAIN) += power/domain/ obj-$(CONFIG_SPL_DM_RESET) += reset/ obj-$(CONFIG_SPL_MTD_SUPPORT) += mtd/ obj-$(CONFIG_SPL_ONENAND_SUPPORT) += mtd/onenand/ diff --git a/drivers/power/domain/Makefile b/drivers/power/domain/Makefile index c7d7644402..020eee2378 100644 --- a/drivers/power/domain/Makefile +++ b/drivers/power/domain/Makefile @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: GPL-2.0
-obj-$(CONFIG_POWER_DOMAIN) += power-domain-uclass.o +obj-$(CONFIG_$(SPL_)POWER_DOMAIN) += power-domain-uclass.o obj-$(CONFIG_BCM6328_POWER_DOMAIN) += bcm6328-power-domain.o obj-$(CONFIG_SANDBOX_POWER_DOMAIN) += sandbox-power-domain.o obj-$(CONFIG_SANDBOX_POWER_DOMAIN) += sandbox-power-domain-test.o

On 26 July 2018 at 20:20, Peng Fan peng.fan@nxp.com wrote:
Add CONFIG_SPL_POWER_DOMAIN config entry. Build drivers/power/domain if this config is selected.
Signed-off-by: Peng Fan peng.fan@nxp.com Cc: Simon Glass sjg@chromium.org
V2: New
common/spl/Kconfig | 9 +++++++++ drivers/Makefile | 1 + drivers/power/domain/Makefile | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-)
Reviewed-by: Simon Glass sjg@chromium.org

On Fri, 27 Jul 2018 10:20:37 +0800 Peng Fan peng.fan@nxp.com wrote:
Add CONFIG_SPL_POWER_DOMAIN config entry. Build drivers/power/domain if this config is selected.
Signed-off-by: Peng Fan peng.fan@nxp.com Cc: Simon Glass sjg@chromium.org
V2: New
common/spl/Kconfig | 9 +++++++++ drivers/Makefile | 1 + drivers/power/domain/Makefile | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-)
Applied to u-boot-staging/agust@denx.de, thanks!
-- Anatolij

Enable power domain associated with the device when probe.
Signed-off-by: Peng Fan peng.fan@nxp.com Reviewed-by: Simon Glass sjg@chromium.org ---
V2: Add review tag
drivers/core/device.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/drivers/core/device.c b/drivers/core/device.c index d5f5fc31b0..207d566b71 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -26,6 +26,7 @@ #include <dm/util.h> #include <linux/err.h> #include <linux/list.h> +#include <power-domain.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -304,6 +305,7 @@ static void *alloc_priv(int size, uint flags)
int device_probe(struct udevice *dev) { + struct power_domain pd; const struct driver *drv; int size = 0; int ret; @@ -383,6 +385,11 @@ int device_probe(struct udevice *dev) if (dev->parent && device_get_uclass_id(dev) != UCLASS_PINCTRL) pinctrl_select_state(dev, "default");
+ if (dev->parent && device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) { + if (!power_domain_get(dev, &pd)) + power_domain_on(&pd); + } + ret = uclass_pre_probe_device(dev); if (ret) goto fail;

On Fri, 27 Jul 2018 10:20:38 +0800 Peng Fan peng.fan@nxp.com wrote:
Enable power domain associated with the device when probe.
Signed-off-by: Peng Fan peng.fan@nxp.com Reviewed-by: Simon Glass sjg@chromium.org
V2: Add review tag
drivers/core/device.c | 7 +++++++ 1 file changed, 7 insertions(+)
Applied to u-boot-staging/agust@denx.de, thanks!
-- Anatolij

This is to test power_domain_on in device_probe. If the device has a power-domain property, enable it when probe the device. So add the test to check whether it is powered on or not.
Signed-off-by: Peng Fan peng.fan@nxp.com Reviewed-by: Simon Glass sjg@chromium.org ---
V2: Add review tag
test/dm/power-domain.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/test/dm/power-domain.c b/test/dm/power-domain.c index a1e1df2bb2..48318218a9 100644 --- a/test/dm/power-domain.c +++ b/test/dm/power-domain.c @@ -26,6 +26,8 @@ static int dm_test_power_domain(struct unit_test_state *uts)
ut_assertok(uclass_get_device_by_name(UCLASS_MISC, "power-domain-test", &dev_test)); + ut_asserteq(1, sandbox_power_domain_query(dev_power_domain, + TEST_POWER_DOMAIN)); ut_assertok(sandbox_power_domain_test_get(dev_test));
ut_assertok(sandbox_power_domain_test_on(dev_test));

On Fri, 27 Jul 2018 10:20:39 +0800 Peng Fan peng.fan@nxp.com wrote:
This is to test power_domain_on in device_probe. If the device has a power-domain property, enable it when probe the device. So add the test to check whether it is powered on or not.
Signed-off-by: Peng Fan peng.fan@nxp.com Reviewed-by: Simon Glass sjg@chromium.org
V2: Add review tag
test/dm/power-domain.c | 2 ++ 1 file changed, 2 insertions(+)
Applied to u-boot-staging/agust@denx.de, thanks!
-- Anatolij

On 26 July 2018 at 20:20, Peng Fan peng.fan@nxp.com wrote:
Add dummy functions when CONFIG_POWER_DOMAIN not defined.
Signed-off-by: Peng Fan peng.fan@nxp.com
V2: Use CONFIG_IS_ENABLED
include/power-domain.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
Reviewed-by: Simon Glass sjg@chromium.org

Hi Simon, Jaehoon
Would you pick up this patchset?
https://patchwork.ozlabs.org/patch/949962/ https://patchwork.ozlabs.org/patch/949963/ https://patchwork.ozlabs.org/patch/949964/ https://patchwork.ozlabs.org/patch/949965/
Thanks, Peng.
-----Original Message----- From: sjg@google.com [mailto:sjg@google.com] On Behalf Of Simon Glass Sent: 2018年7月30日 21:27 To: Peng Fan peng.fan@nxp.com Cc: Jaehoon Chung jh80.chung@samsung.com; U-Boot Mailing List u-boot@lists.denx.de; dl-linux-imx linux-imx@nxp.com Subject: Re: [PATCH V2 1/4] power-domain: add dummy functions when CONFIG_POWER_DOMAIN not defined
On 26 July 2018 at 20:20, Peng Fan peng.fan@nxp.com wrote:
Add dummy functions when CONFIG_POWER_DOMAIN not defined.
Signed-off-by: Peng Fan peng.fan@nxp.com
V2: Use CONFIG_IS_ENABLED
include/power-domain.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
Reviewed-by: Simon Glass sjg@chromium.org

Hi Peng,
On Fri, 27 Jul 2018 10:20:36 +0800 Peng Fan peng.fan@nxp.com wrote:
Add dummy functions when CONFIG_POWER_DOMAIN not defined.
Signed-off-by: Peng Fan peng.fan@nxp.com
V2: Use CONFIG_IS_ENABLED
include/power-domain.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
Applied to u-boot-staging/agust@denx.de, thanks!
-- Anatolij
participants (3)
-
Anatolij Gustschin
-
Peng Fan
-
Simon Glass