From 8d1108238d8af990b193dadb37262c114edf7a65 Mon Sep 17 00:00:00 2001
From: Flora Cui <flora.cui@amd.com>
Date: Tue, 13 Oct 2020 08:54:27 +0800
Subject: [PATCH] drm/amdkcl: test jiffies64_to_msecs()

fake a kcl copy for legacy kernel support.

Signed-off-by: Flora Cui <flora.cui@amd.com>
Reviewed-by: Guchun Chen <guchun.chen@amd.com>
---
 drivers/gpu/drm/amd/amdkcl/Makefile               |  2 +-
 drivers/gpu/drm/amd/amdkcl/kcl_time.c             | 15 +++++++++++++++
 drivers/gpu/drm/amd/dkms/config/config.h          |  3 +++
 drivers/gpu/drm/amd/dkms/m4/jiffies64_to_msecs.m4 | 11 +++++++++++
 drivers/gpu/drm/amd/dkms/m4/kernel.m4             |  1 +
 include/kcl/kcl_timekeeping.h                     |  4 ++++
 6 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 drivers/gpu/drm/amd/amdkcl/kcl_time.c
 create mode 100644 drivers/gpu/drm/amd/dkms/m4/jiffies64_to_msecs.m4

diff --git a/drivers/gpu/drm/amd/amdkcl/Makefile b/drivers/gpu/drm/amd/amdkcl/Makefile
index 3933fcd80c5fc..c9f04d7c33396 100644
--- a/drivers/gpu/drm/amd/amdkcl/Makefile
+++ b/drivers/gpu/drm/amd/amdkcl/Makefile
@@ -6,7 +6,7 @@ amdkcl-y += kcl_device_cgroup.o kcl_drm_cache.o kcl_drm.o \
 	kcl_fence_array.o kcl_fence.o kcl_io.o kcl_kthread.o kcl_mm.o kcl_pci.o \
 	kcl_perf_event.o kcl_reservation.o kcl_suspend.o kcl_workqueue.o \
 	kcl_seq_file.o kcl_connector.o kcl_backlight.o kcl_drm_atomic_helper.o \
-	kcl_drm_crtc.o kcl_drm_fb.o kcl_drm_modeset_lock.o kcl_drm_modes.o
+	kcl_drm_crtc.o kcl_drm_fb.o kcl_drm_modeset_lock.o kcl_drm_modes.o kcl_time.o
 amdkcl-$(CONFIG_MMU_NOTIFIER) += kcl_mn.o
 amdkcl-y += dma-buf/dma-resv.o
 
diff --git a/drivers/gpu/drm/amd/amdkcl/kcl_time.c b/drivers/gpu/drm/amd/amdkcl/kcl_time.c
new file mode 100644
index 0000000000000..e9ce715d45832
--- /dev/null
+++ b/drivers/gpu/drm/amd/amdkcl/kcl_time.c
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: MIT */
+#include <linux/ktime.h>
+#include <kcl/kcl_timekeeping.h>
+
+#ifndef HAVE_JIFFIES64_TO_MSECS
+u64 jiffies64_to_msecs(const u64 j)
+{
+#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
+	return (MSEC_PER_SEC / HZ) * j;
+#else
+	return div_u64(j * HZ_TO_MSEC_NUM, HZ_TO_MSEC_DEN);
+#endif
+}
+EXPORT_SYMBOL(jiffies64_to_msecs);
+#endif
diff --git a/drivers/gpu/drm/amd/dkms/config/config.h b/drivers/gpu/drm/amd/dkms/config/config.h
index 7e5ea998aa27f..94487e0dbc6bc 100644
--- a/drivers/gpu/drm/amd/dkms/config/config.h
+++ b/drivers/gpu/drm/amd/dkms/config/config.h
@@ -608,6 +608,9 @@
 /* IRQ translation domains exist */
 #define HAVE_IRQ_DOMAIN 1
 
+/* jiffies64_to_msecs() is available */
+#define HAVE_JIFFIES64_TO_MSECS 1
+
 /* kallsyms_lookup_name is available */
 #define HAVE_KALLSYMS_LOOKUP_NAME 1
 
diff --git a/drivers/gpu/drm/amd/dkms/m4/jiffies64_to_msecs.m4 b/drivers/gpu/drm/amd/dkms/m4/jiffies64_to_msecs.m4
new file mode 100644
index 0000000000000..e44504998e830
--- /dev/null
+++ b/drivers/gpu/drm/amd/dkms/m4/jiffies64_to_msecs.m4
@@ -0,0 +1,11 @@
+dnl #
+dnl # v5.1-rc3-699-g3b15d09f7e6d
+dnl # time: Introduce jiffies64_to_msecs()
+dnl #
+AC_DEFUN([AC_AMDGPU_JIFFIES64_TO_MSECS], [
+	AC_KERNEL_DO_BACKGROUND([
+		AC_KERNEL_CHECK_SYMBOL_EXPORT([jiffies64_to_msecs], [kernel/time/time.c], [
+			AC_DEFINE(HAVE_JIFFIES64_TO_MSECS, 1, [jiffies64_to_msecs() is available])
+		])
+	])
+])
diff --git a/drivers/gpu/drm/amd/dkms/m4/kernel.m4 b/drivers/gpu/drm/amd/dkms/m4/kernel.m4
index 929dcd71fd736..c12b949c51a90 100644
--- a/drivers/gpu/drm/amd/dkms/m4/kernel.m4
+++ b/drivers/gpu/drm/amd/dkms/m4/kernel.m4
@@ -202,6 +202,7 @@ AC_DEFUN([AC_CONFIG_KERNEL], [
 	AC_AMDGPU_DOWN_READ_KILLABLE
 	AC_AMDGPU_DRM_DRIVER_RELEASE
 	AC_AMDGPU_KTHREAD_USE_MM
+	AC_AMDGPU_JIFFIES64_TO_MSECS
 
 	AC_KERNEL_WAIT
 	AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
diff --git a/include/kcl/kcl_timekeeping.h b/include/kcl/kcl_timekeeping.h
index 373ddd0cb1cca..dbbc41a943d17 100644
--- a/include/kcl/kcl_timekeeping.h
+++ b/include/kcl/kcl_timekeeping.h
@@ -54,4 +54,8 @@ static inline u64 ktime_get_mono_fast_ns(void)
 }
 #endif
 
+#ifndef HAVE_JIFFIES64_TO_MSECS
+extern u64 jiffies64_to_msecs(u64 j);
+#endif
+
 #endif