Re: [PATCH 1/3] net: extract function net_sntp_set_rtc() from sntp_handler()

Heinrich Schuchardt xypron.glpk at gmx.de
Mon Jun 2 23:13:39 CEST 2025


Am 21. Mai 2025 17:14:41 MESZ schrieb Jerome Forissier <jerome.forissier at linaro.org>:
>Extract the code that sets the RTC clock from sntp_handler() in
>net/sntp.c and make it a new function net_sntp_set_rtc() in
>net/net-common.c. This will allow re-use with NET_LWIP.
>
>Signed-off-by: Jerome Forissier <jerome.forissier at linaro.org>
>---
>
> include/net-common.h |  2 ++
> net/net-common.c     | 28 ++++++++++++++++++++++++++++
> net/sntp.c           | 23 +++--------------------
> 3 files changed, 33 insertions(+), 20 deletions(-)
>
>diff --git a/include/net-common.h b/include/net-common.h
>index e536968a92b..a021bf503ff 100644
>--- a/include/net-common.h
>+++ b/include/net-common.h
>@@ -586,4 +586,6 @@ extern struct wget_http_info default_wget_info;
> extern struct wget_http_info *wget_info;
> int wget_request(ulong dst_addr, char *uri, struct wget_http_info *info);
> 
>+void net_sntp_set_rtc(u32 seconds);
>+
> #endif /* __NET_COMMON_H__ */
>diff --git a/net/net-common.c b/net/net-common.c
>index e01b0da7d7b..30d04323d4a 100644
>--- a/net/net-common.c
>+++ b/net/net-common.c
>@@ -1,5 +1,9 @@
> // SPDX-License-Identifier: GPL-2.0
>+
>+#include <dm/uclass.h>
> #include <net-common.h>
>+#include <linux/time.h>
>+#include <rtc.h>
> 
> void copy_filename(char *dst, const char *src, int size)
> {
>@@ -25,3 +29,27 @@ int wget_request(ulong dst_addr, char *uri, struct wget_http_info *info)
> 	wget_info = info ? info : &default_wget_info;
> 	return wget_do_request(dst_addr, uri);
> }
>+
>+void net_sntp_set_rtc(u32 seconds)
>+{
>+	struct rtc_time tm;
>+#ifdef CONFIG_DM_RTC

Are there really RTC drivers that have not been converted to the driver model. If yes, shouldn't we drop these?

Best regards

Heinrich

>+	struct udevice *dev;
>+	int ret;
>+#endif
>+
>+	rtc_to_tm(seconds, &tm);
>+
>+#ifdef CONFIG_DM_RTC
>+	ret = uclass_get_device(UCLASS_RTC, 0, &dev);
>+	if (ret)
>+		printf("SNTP: cannot find RTC: err=%d\n", ret);
>+	else
>+		dm_rtc_set(dev, &tm);
>+#elif defined(CONFIG_CMD_DATE)
>+	rtc_set(&tm);
>+#endif
>+	printf("Date: %4d-%02d-%02d Time: %2d:%02d:%02d\n",
>+	       tm.tm_year, tm.tm_mon, tm.tm_mday,
>+	       tm.tm_hour, tm.tm_min, tm.tm_sec);
>+}
>diff --git a/net/sntp.c b/net/sntp.c
>index 73d1d87d38b..77cee0046bd 100644
>--- a/net/sntp.c
>+++ b/net/sntp.c
>@@ -57,8 +57,7 @@ static void sntp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
> 			 unsigned src, unsigned len)
> {
> 	struct sntp_pkt_t *rpktp = (struct sntp_pkt_t *)pkt;
>-	struct rtc_time tm;
>-	ulong seconds;
>+	u32 seconds;
> 
> 	debug("%s\n", __func__);
> 
>@@ -69,24 +68,8 @@ static void sntp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
> 	 * As the RTC's used in U-Boot support second resolution only
> 	 * we simply ignore the sub-second field.
> 	 */
>-	memcpy(&seconds, &rpktp->transmit_timestamp, sizeof(ulong));
>-
>-	rtc_to_tm(ntohl(seconds) - 2208988800UL + net_ntp_time_offset, &tm);
>-#ifdef CONFIG_DM_RTC
>-	struct udevice *dev;
>-	int ret;
>-
>-	ret = uclass_get_device(UCLASS_RTC, 0, &dev);
>-	if (ret)
>-		printf("SNTP: cannot find RTC: err=%d\n", ret);
>-	else
>-		dm_rtc_set(dev, &tm);
>-#elif defined(CONFIG_CMD_DATE)
>-	rtc_set(&tm);
>-#endif
>-	printf("Date: %4d-%02d-%02d Time: %2d:%02d:%02d\n",
>-	       tm.tm_year, tm.tm_mon, tm.tm_mday,
>-	       tm.tm_hour, tm.tm_min, tm.tm_sec);
>+	memcpy(&seconds, &rpktp->transmit_timestamp, sizeof(seconds));
>+	net_sntp_set_rtc(ntohl(seconds) - 2208988800UL + net_ntp_time_offset);
> 
> 	net_set_state(NETLOOP_SUCCESS);
> }



More information about the U-Boot mailing list