Thread (2 messages) flat view 2 messages, 2 authors, 2016-09-19

[PATCH v5 3/5] arm64: arch_timer: Work around QorIQ Erratum A-008585

From: mark.rutland@arm.com (Mark Rutland)
Date: 2016-09-19 17:07:07
Also in: linux-devicetree

On Mon, Sep 19, 2016 at 12:01:29PM -0500, Scott Wood wrote:
On Mon, 2016-09-19 at 17:52 +0100, Mark Rutland wrote:
quoted
quoted
quoted
quoted
+static void fsl_a008585_set_sne(struct clock_event_device *clk)
+{
+#ifdef CONFIG_FSL_ERRATUM_A008585
+	if (!static_branch_unlikely(&arch_timer_read_ool_enabled))
+		return;
+
+	if (arch_timer_uses_ppi == VIRT_PPI)
+		clk->set_next_event =
fsl_a008585_set_next_event_virt;
+	else
+		clk->set_next_event =
fsl_a008585_set_next_event_phys;
+#endif
+}
+
I'm not keen on the magic hook to reset the function pointers, and the
additional phys/virt stubs seem pointless. Instead, can we fold this
into the existing set_next_event? e.g. have that do:

	if (needs_fsl_a008585_workaround() {
		fsl_a008585_set_next_event(access, evt, clk);
		return;
	}
OK. ?I had been trying to avoid messing with the standard set_next_event,
but
it doesn't matter as much now that static branches are being used. ?In
that
case we can avoid duplicating the ctrl code, and only replace the tval
write.
Reconsidering my suggestion, I realise this will also affect the MMIO
timers, so that doesn't work.

So for the moment, I guess we have to keep fsl_a008585_set_next_event().
What is the problem with MMIO timers? ?needs_fsl_a008585_workaround() should
always be false for them.
As suggested, needs_fsl_a008585_workaround() takes no parameter, and
set_next_event is called for both cp15/sysreg and MMIO timers. So it
would either be true for all, or false for all.

If it's true for all, we'd end up calling fsl_a008585_set_next_event()
for the MMIO timers too.

Thanks,
Mark.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help