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.foriss...@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
+       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);
 }
-- 
2.43.0

Reply via email to