[PATCH v2] core: devres: optionally build devres into the SPL

Add a CONFIG_SPL_DEVRES option
Signed-off-by: Angus Ainslie angus@akkea.ca ---
Changes since v1:
Instead of gaurding the source add an SPL_DEVRES option
drivers/core/Kconfig | 13 +++++++++++++ drivers/core/Makefile | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig index 8f7703c8b5..7e666708fe 100644 --- a/drivers/core/Kconfig +++ b/drivers/core/Kconfig @@ -206,6 +206,19 @@ config DEVRES non-managed variants. For example, devres_alloc() to kzalloc(), devm_kmalloc() to kmalloc(), etc.
+config SPL_DEVRES + bool "Managed device resources in the SPL" + depends on DM + help + This option enables the Managed device resources core support. + Device resources managed by the devres framework are automatically + released whether initialization fails half-way or the device gets + detached. + + If this option is disabled, devres functions fall back to + non-managed variants. For example, devres_alloc() to kzalloc(), + devm_kmalloc() to kmalloc(), etc. + config DEBUG_DEVRES bool "Managed device resources debugging functions" depends on DEVRES diff --git a/drivers/core/Makefile b/drivers/core/Makefile index 5edd4e4135..0cbc3ab217 100644 --- a/drivers/core/Makefile +++ b/drivers/core/Makefile @@ -4,7 +4,7 @@
obj-y += device.o fdtaddr.o lists.o root.o uclass.o util.o obj-$(CONFIG_$(SPL_TPL_)ACPIGEN) += acpi.o -obj-$(CONFIG_DEVRES) += devres.o +obj-$(CONFIG_$(SPL_TPL_)DEVRES) += devres.o obj-$(CONFIG_$(SPL_)DM_DEVICE_REMOVE) += device-remove.o obj-$(CONFIG_$(SPL_)SIMPLE_BUS) += simple-bus.o obj-$(CONFIG_SIMPLE_PM_BUS) += simple-pm-bus.o

On Mon, 28 Feb 2022 at 13:33, Angus Ainslie angus@akkea.ca wrote:
Add a CONFIG_SPL_DEVRES option
Signed-off-by: Angus Ainslie angus@akkea.ca
Changes since v1:
Instead of gaurding the source add an SPL_DEVRES option
drivers/core/Kconfig | 13 +++++++++++++ drivers/core/Makefile | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-)
Reviewed-by: Simon Glass sjg@chromium.org

Hi Angus,
On Tue, 1 Mar 2022 at 07:58, Simon Glass sjg@chromium.org wrote:
On Mon, 28 Feb 2022 at 13:33, Angus Ainslie angus@akkea.ca wrote:
Add a CONFIG_SPL_DEVRES option
Signed-off-by: Angus Ainslie angus@akkea.ca
Changes since v1:
Instead of gaurding the source add an SPL_DEVRES option
drivers/core/Kconfig | 13 +++++++++++++ drivers/core/Makefile | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-)
Unfortunately this break the tests, e.g. building sandbox_spl - can you please take a look?
sandbox_spl: +make O=build-sandbox_spl -s sandbox_spl_defconfig +make O=build-sandbox_spl -s -j4 /usr/bin/ld: /tmp/ccsYY64W.ltrans0.ltrans.o: in function `device_unbind': build-sandbox_spl/spl/../../drivers/core/device-remove.c:120: undefined reference to `devres_release_all' /usr/bin/ld: /tmp/ccsYY64W.ltrans0.ltrans.o: in function `device_free': build-sandbox_spl/spl/../../drivers/core/device-remove.c:157: undefined reference to `devres_release_probe' collect2: error: ld returned 1 exit status make[3]: *** [../scripts/Makefile.spl:509: spl/u-boot-spl] Error 1 make[2]: *** [Makefile:2094: spl/u-boot-spl] Error 2 make[1]: *** [Makefile:177: sub-make] Error 2 Exit code: 2
Regards, Simon

Hi Simon,
On 2022-03-18 15:41, Simon Glass wrote:
Hi Angus,
On Tue, 1 Mar 2022 at 07:58, Simon Glass sjg@chromium.org wrote:
On Mon, 28 Feb 2022 at 13:33, Angus Ainslie angus@akkea.ca wrote:
Add a CONFIG_SPL_DEVRES option
Signed-off-by: Angus Ainslie angus@akkea.ca
Changes since v1:
Instead of gaurding the source add an SPL_DEVRES option
drivers/core/Kconfig | 13 +++++++++++++ drivers/core/Makefile | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-)
Unfortunately this break the tests, e.g. building sandbox_spl - can you please take a look?
sandbox_spl: +make O=build-sandbox_spl -s sandbox_spl_defconfig +make O=build-sandbox_spl -s -j4 /usr/bin/ld: /tmp/ccsYY64W.ltrans0.ltrans.o: in function `device_unbind': build-sandbox_spl/spl/../../drivers/core/device-remove.c:120: undefined reference to `devres_release_all' /usr/bin/ld: /tmp/ccsYY64W.ltrans0.ltrans.o: in function `device_free': build-sandbox_spl/spl/../../drivers/core/device-remove.c:157: undefined reference to `devres_release_probe' collect2: error: ld returned 1 exit status make[3]: *** [../scripts/Makefile.spl:509: spl/u-boot-spl] Error 1 make[2]: *** [Makefile:2094: spl/u-boot-spl] Error 2 make[1]: *** [Makefile:177: sub-make] Error 2 Exit code: 2
So the problem here is that CONFIG_DM_DEVICE_REMOVE can be defined without CONFIG_DEVRES being defined.
Is there a way to make DM_DEVICE_REMOVE dependant on DEVRES or do I need to add "&& CONFIG_IS_ENABLED(DEVRES)" everywhere that I find "CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)" ?
Thanks Angus
Regards, Simon

On 2022-03-19 07:15, Angus Ainslie wrote:
Hi Simon,
On 2022-03-18 15:41, Simon Glass wrote:
Hi Angus,
On Tue, 1 Mar 2022 at 07:58, Simon Glass sjg@chromium.org wrote:
On Mon, 28 Feb 2022 at 13:33, Angus Ainslie angus@akkea.ca wrote:
Add a CONFIG_SPL_DEVRES option
Signed-off-by: Angus Ainslie angus@akkea.ca
Changes since v1:
Instead of gaurding the source add an SPL_DEVRES option
drivers/core/Kconfig | 13 +++++++++++++ drivers/core/Makefile | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-)
Unfortunately this break the tests, e.g. building sandbox_spl - can you please take a look?
sandbox_spl: +make O=build-sandbox_spl -s sandbox_spl_defconfig +make O=build-sandbox_spl -s -j4 /usr/bin/ld: /tmp/ccsYY64W.ltrans0.ltrans.o: in function `device_unbind': build-sandbox_spl/spl/../../drivers/core/device-remove.c:120: undefined reference to `devres_release_all' /usr/bin/ld: /tmp/ccsYY64W.ltrans0.ltrans.o: in function `device_free': build-sandbox_spl/spl/../../drivers/core/device-remove.c:157: undefined reference to `devres_release_probe' collect2: error: ld returned 1 exit status make[3]: *** [../scripts/Makefile.spl:509: spl/u-boot-spl] Error 1 make[2]: *** [Makefile:2094: spl/u-boot-spl] Error 2 make[1]: *** [Makefile:177: sub-make] Error 2 Exit code: 2
So the problem here is that CONFIG_DM_DEVICE_REMOVE can be defined without CONFIG_DEVRES being defined.
Is there a way to make DM_DEVICE_REMOVE dependant on DEVRES or do I need to add "&& CONFIG_IS_ENABLED(DEVRES)" everywhere that I find "CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)" ?
The test failure can be "fixed" using this
diff --git a/configs/sandbox_noinst_defconfig b/configs/sandbox_noinst_defconfig index ec912cf0ec8..69c97921744 100644 --- a/configs/sandbox_noinst_defconfig +++ b/configs/sandbox_noinst_defconfig @@ -105,6 +105,7 @@ CONFIG_SYSCON=y CONFIG_SPL_SYSCON=y CONFIG_DEVRES=y CONFIG_DEBUG_DEVRES=y +CONFIG_SPL_DEVRES=y # CONFIG_SPL_SIMPLE_BUS is not set CONFIG_ADC=y CONFIG_ADC_SANDBOX=y diff --git a/configs/sandbox_spl_defconfig b/configs/sandbox_spl_defconfig index 1687ccf4530..2fcda46dfd1 100644 --- a/configs/sandbox_spl_defconfig +++ b/configs/sandbox_spl_defconfig @@ -107,6 +107,7 @@ CONFIG_SYSCON=y CONFIG_SPL_SYSCON=y CONFIG_DEVRES=y CONFIG_DEBUG_DEVRES=y +CONFIG_SPL_DEVRES=y # CONFIG_SPL_SIMPLE_BUS is not set CONFIG_ADC=y CONFIG_ADC_SANDBOX=y
But is that the right way based on the questions above ?
Thanks Angus
Regards, Simon

Hi Angus,
On Sat, 19 Mar 2022 at 09:18, Angus Ainslie angus@akkea.ca wrote:
On 2022-03-19 07:15, Angus Ainslie wrote:
Hi Simon,
On 2022-03-18 15:41, Simon Glass wrote:
Hi Angus,
On Tue, 1 Mar 2022 at 07:58, Simon Glass sjg@chromium.org wrote:
On Mon, 28 Feb 2022 at 13:33, Angus Ainslie angus@akkea.ca wrote:
Add a CONFIG_SPL_DEVRES option
Signed-off-by: Angus Ainslie angus@akkea.ca
Changes since v1:
Instead of gaurding the source add an SPL_DEVRES option
drivers/core/Kconfig | 13 +++++++++++++ drivers/core/Makefile | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-)
Unfortunately this break the tests, e.g. building sandbox_spl - can you please take a look?
sandbox_spl: +make O=build-sandbox_spl -s sandbox_spl_defconfig +make O=build-sandbox_spl -s -j4 /usr/bin/ld: /tmp/ccsYY64W.ltrans0.ltrans.o: in function `device_unbind': build-sandbox_spl/spl/../../drivers/core/device-remove.c:120: undefined reference to `devres_release_all' /usr/bin/ld: /tmp/ccsYY64W.ltrans0.ltrans.o: in function `device_free': build-sandbox_spl/spl/../../drivers/core/device-remove.c:157: undefined reference to `devres_release_probe' collect2: error: ld returned 1 exit status make[3]: *** [../scripts/Makefile.spl:509: spl/u-boot-spl] Error 1 make[2]: *** [Makefile:2094: spl/u-boot-spl] Error 2 make[1]: *** [Makefile:177: sub-make] Error 2 Exit code: 2
So the problem here is that CONFIG_DM_DEVICE_REMOVE can be defined without CONFIG_DEVRES being defined.
Is there a way to make DM_DEVICE_REMOVE dependant on DEVRES or do I need to add "&& CONFIG_IS_ENABLED(DEVRES)" everywhere that I find "CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)" ?
The test failure can be "fixed" using this
diff --git a/configs/sandbox_noinst_defconfig b/configs/sandbox_noinst_defconfig index ec912cf0ec8..69c97921744 100644 --- a/configs/sandbox_noinst_defconfig +++ b/configs/sandbox_noinst_defconfig @@ -105,6 +105,7 @@ CONFIG_SYSCON=y CONFIG_SPL_SYSCON=y CONFIG_DEVRES=y CONFIG_DEBUG_DEVRES=y +CONFIG_SPL_DEVRES=y # CONFIG_SPL_SIMPLE_BUS is not set CONFIG_ADC=y CONFIG_ADC_SANDBOX=y diff --git a/configs/sandbox_spl_defconfig b/configs/sandbox_spl_defconfig index 1687ccf4530..2fcda46dfd1 100644 --- a/configs/sandbox_spl_defconfig +++ b/configs/sandbox_spl_defconfig @@ -107,6 +107,7 @@ CONFIG_SYSCON=y CONFIG_SPL_SYSCON=y CONFIG_DEVRES=y CONFIG_DEBUG_DEVRES=y +CONFIG_SPL_DEVRES=y # CONFIG_SPL_SIMPLE_BUS is not set CONFIG_ADC=y CONFIG_ADC_SANDBOX=y
But is that the right way based on the questions above ?
I just sent a patch to update DEVRES to only be enabled on SPL. I think DM_DEVICE_REMOVE should not depend on DEVRES., but perhaps the other way around would make sense?
Regards, Simon
participants (2)
-
Angus Ainslie
-
Simon Glass