Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f01baa0 authored by Channagoud Kadabi's avatar Channagoud Kadabi Committed by Suren Baghdasaryan
Browse files

ANDROID: GKI: drivers: clksource: Add API to return cval



Sleep driver needs to program the absolute clock value for next expiry
into pdc register for system wake up. Add an API to read the cval low
and high counters.

Signed-off-by: default avatarChannagoud Kadabi <ckadabi@codeaurora.org>
Bug: 152635062
Test: build
(cherry picked from commit ee514e90)
[surenb: replaced out-of-tree readl_relaxed_no_log with functionally
identical in-tree readl_relaxed]
Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
Change-Id: I1244c31c8a2717a6f2002cac3b26ee3526409058
Merged-In: I1244c31c8a2717a6f2002cac3b26ee3526409058
parent 3179a1a3
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -52,6 +52,8 @@
#define CNTFRQ		0x10
#define CNTP_TVAL	0x28
#define CNTP_CTL	0x2c
#define CNTCVAL_LO	0x30
#define CNTCVAL_HI	0x34
#define CNTV_TVAL	0x38
#define CNTV_CTL	0x3c

@@ -957,6 +959,23 @@ bool arch_timer_evtstrm_available(void)
	return cpumask_test_cpu(raw_smp_processor_id(), &evtstrm_available);
}

void arch_timer_mem_get_cval(u32 *lo, u32 *hi)
{
	u32 ctrl;

	*lo = *hi = ~0U;

	if (!arch_counter_base)
		return;

	ctrl = readl_relaxed(arch_counter_base + CNTV_CTL);

	if (ctrl & ARCH_TIMER_CTRL_ENABLE) {
		*lo = readl_relaxed(arch_counter_base + CNTCVAL_LO);
		*hi = readl_relaxed(arch_counter_base + CNTCVAL_HI);
	}
}

static u64 arch_counter_get_cntvct_mem(void)
{
	u32 vct_lo, vct_hi, tmp_hi;
+5 −0
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ extern u32 arch_timer_get_rate(void);
extern u64 (*arch_timer_read_counter)(void);
extern struct arch_timer_kvm_info *arch_timer_get_kvm_info(void);
extern bool arch_timer_evtstrm_available(void);
extern void arch_timer_mem_get_cval(u32 *lo, u32 *hi);

#else

@@ -114,6 +115,10 @@ static inline bool arch_timer_evtstrm_available(void)
	return false;
}

static void arch_timer_mem_get_cval(u32 *lo, u32 *hi)
{
	*lo = *hi = ~0U;
}
#endif

#endif