[PATCH v4 0/2] rtc: Add fallbacks for dm functions

This adds some fallbacks for DM RTC consumers, so they don't have to ifdef out their RTC code.
Changes in v4: - Don't compile fsp_save_s3_stack in SPL (or TPL/VPL).
Changes in v3: - Select SPL_DM_RTC for HAVE_FSP. Before this series, even if just DM_RTC was selected, the DM RTC functions would be forward-declared. This probably would result in funky things at runtime.
Changes in v2: - Include linux/errno.h for ENOSYS. This is needed for some mips boards when CONFIG_BLK is enabled for whatever reason.
Sean Anderson (2): x86: fsp: Only compile fsp_save_s3_stack if (SPL_)DM_RTC is enabled rtc: Add fallbacks for dm functions
arch/x86/lib/fsp/fsp_common.c | 2 ++ include/rtc.h | 32 +++++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-)

This function calls rtc_write32, which has a different signature depending on if (SPL_)DM_RTC is enabled or not. This could result in a mismatch in SPL if DM_RTC was enabled but SPL_DM_RTC, as the non-DM declaration would still be used in SPL even though the implementation would be for non-DM_RTC. We are switching to the correct definitions in the next commit, so this will become a compilation error. Since fsp_save_s3_stack is not called from SPL, avoid compiling it if (SPL_)DM_RTC is disabled.
Signed-off-by: Sean Anderson sean.anderson@seco.com ---
Changes in v4: - Don't compile fsp_save_s3_stack in SPL (or TPL/VPL).
Changes in v3: - New
arch/x86/lib/fsp/fsp_common.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/x86/lib/fsp/fsp_common.c b/arch/x86/lib/fsp/fsp_common.c index 82f7d3ab5f..8f2977a807 100644 --- a/arch/x86/lib/fsp/fsp_common.c +++ b/arch/x86/lib/fsp/fsp_common.c @@ -61,6 +61,7 @@ void board_final_init(void) debug("OK\n"); }
+#if CONFIG_IS_ENABLED(DM_RTC) int fsp_save_s3_stack(void) { struct udevice *dev; @@ -84,3 +85,4 @@ int fsp_save_s3_stack(void)
return 0; } +#endif

On Tue, Nov 22, 2022 at 12:54:51PM -0500, Sean Anderson wrote:
This function calls rtc_write32, which has a different signature depending on if (SPL_)DM_RTC is enabled or not. This could result in a mismatch in SPL if DM_RTC was enabled but SPL_DM_RTC, as the non-DM declaration would still be used in SPL even though the implementation would be for non-DM_RTC. We are switching to the correct definitions in the next commit, so this will become a compilation error. Since fsp_save_s3_stack is not called from SPL, avoid compiling it if (SPL_)DM_RTC is disabled.
Signed-off-by: Sean Anderson sean.anderson@seco.com
Applied to u-boot/next, thanks!

This adds fallbacks for the various dm_rtc_* functions. This allows common code to use these functions without ifdefs.
Fixes: c8ce7ba87d1 ("misc: Add support for nvmem cells") Reviewed-by: Simon Glass sjg@chromium.org Signed-off-by: Sean Anderson sean.anderson@seco.com ---
(no changes since v2)
Changes in v2: - Include linux/errno.h for ENOSYS. This is needed for some mips boards when CONFIG_BLK is enabled for whatever reason.
include/rtc.h | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-)
diff --git a/include/rtc.h b/include/rtc.h index 10104e3bf5..b6fdbb60dc 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -15,13 +15,12 @@
#include <bcd.h> #include <rtc_def.h> +#include <linux/errno.h>
typedef int64_t time64_t; - -#ifdef CONFIG_DM_RTC - struct udevice;
+#if CONFIG_IS_ENABLED(DM_RTC) struct rtc_ops { /** * get() - get the current time @@ -222,6 +221,33 @@ int rtc_enable_32khz_output(int busnum, int chip_addr); #endif
#else +static inline int dm_rtc_get(struct udevice *dev, struct rtc_time *time) +{ + return -ENOSYS; +} + +static inline int dm_rtc_set(struct udevice *dev, struct rtc_time *time) +{ + return -ENOSYS; +} + +static inline int dm_rtc_reset(struct udevice *dev) +{ + return -ENOSYS; +} + +static inline int dm_rtc_read(struct udevice *dev, unsigned int reg, u8 *buf, + unsigned int len) +{ + return -ENOSYS; +} + +static inline int dm_rtc_write(struct udevice *dev, unsigned int reg, + const u8 *buf, unsigned int len) +{ + return -ENOSYS; +} + int rtc_get (struct rtc_time *); int rtc_set (struct rtc_time *); void rtc_reset (void);

On Tue, Nov 22, 2022 at 12:54:52PM -0500, Sean Anderson wrote:
This adds fallbacks for the various dm_rtc_* functions. This allows common code to use these functions without ifdefs.
Fixes: c8ce7ba87d1 ("misc: Add support for nvmem cells") Reviewed-by: Simon Glass sjg@chromium.org Signed-off-by: Sean Anderson sean.anderson@seco.com
Applied to u-boot/next, thanks!
participants (2)
-
Sean Anderson
-
Tom Rini