* Copyright (C) 2020-2022 Loongson Technology Corporation Limited
  */
 #include <linux/clockchips.h>
+#include <linux/cpuhotplug.h>
 #include <linux/delay.h>
 #include <linux/export.h>
 #include <linux/init.h>
        return 0;
 }
 
+static int arch_timer_starting(unsigned int cpu)
+{
+       set_csr_ecfg(ECFGF_TIMER);
+
+       return 0;
+}
+
+static int arch_timer_dying(unsigned int cpu)
+{
+       constant_set_state_shutdown(this_cpu_ptr(&constant_clockevent_device));
+
+       /* Clear Timer Interrupt */
+       write_csr_tintclear(CSR_TINTCLR_TI);
+
+       return 0;
+}
+
 static unsigned long get_loops_per_jiffy(void)
 {
        unsigned long lpj = (unsigned long)const_clock_freq;
        lpj_fine = get_loops_per_jiffy();
        pr_info("Constant clock event device register\n");
 
+       cpuhp_setup_state(CPUHP_AP_LOONGARCH_ARCH_TIMER_STARTING,
+                         "clockevents/loongarch/timer:starting",
+                         arch_timer_starting, arch_timer_dying);
+
        return 0;
 }
 
 
        CPUHP_AP_QCOM_TIMER_STARTING,
        CPUHP_AP_TEGRA_TIMER_STARTING,
        CPUHP_AP_ARMADA_TIMER_STARTING,
+       CPUHP_AP_LOONGARCH_ARCH_TIMER_STARTING,
        CPUHP_AP_MIPS_GIC_TIMER_STARTING,
        CPUHP_AP_ARC_TIMER_STARTING,
        CPUHP_AP_REALTEK_TIMER_STARTING,