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

Commit 5b4e8453 authored by Andrew Bresticker's avatar Andrew Bresticker Committed by Ralf Baechle
Browse files

CLOCKSOURCE: mips-gic: Allow GIC clock to be specified in device-tree



As an alternative to the "clock-frequency" property, allow the GIC
timer operating clock to be specified in the device-tree instead.
This is useful on systems which use common clock or where the GIC
is not fixed to a particular frequency and is instead, for example,
derived from the CPU clock.

Signed-off-by: default avatarAndrew Bresticker <abrestic@chromium.org>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Pawel Moll <pawel.moll@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Ian Campbell <ijc+devicetree@hellion.org.uk>
Cc: Kumar Gala <galak@codeaurora.org>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: devicetree@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/9309/
parent 615eb603
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -27,8 +27,13 @@ Optional properties:
Required properties for timer sub-node:
Required properties for timer sub-node:
- compatible : Should be "mti,gic-timer".
- compatible : Should be "mti,gic-timer".
- interrupts : Interrupt for the GIC local timer.
- interrupts : Interrupt for the GIC local timer.

Optional properties for timer sub-node:
- clocks : GIC timer operating clock.
- clock-frequency : Clock frequency at which the GIC timers operate.
- clock-frequency : Clock frequency at which the GIC timers operate.


Note that one of clocks or clock-frequency must be specified.

Example:
Example:


	gic: interrupt-controller@1bdc0000 {
	gic: interrupt-controller@1bdc0000 {
+9 −1
Original line number Original line Diff line number Diff line
@@ -5,6 +5,7 @@
 *
 *
 * Copyright (C) 2012 MIPS Technologies, Inc.  All rights reserved.
 * Copyright (C) 2012 MIPS Technologies, Inc.  All rights reserved.
 */
 */
#include <linux/clk.h>
#include <linux/clockchips.h>
#include <linux/clockchips.h>
#include <linux/cpu.h>
#include <linux/cpu.h>
#include <linux/init.h>
#include <linux/init.h>
@@ -149,11 +150,18 @@ void __init gic_clocksource_init(unsigned int frequency)


static void __init gic_clocksource_of_init(struct device_node *node)
static void __init gic_clocksource_of_init(struct device_node *node)
{
{
	struct clk *clk;

	if (WARN_ON(!gic_present || !node->parent ||
	if (WARN_ON(!gic_present || !node->parent ||
		    !of_device_is_compatible(node->parent, "mti,gic")))
		    !of_device_is_compatible(node->parent, "mti,gic")))
		return;
		return;


	if (of_property_read_u32(node, "clock-frequency", &gic_frequency)) {
	clk = of_clk_get(node, 0);
	if (!IS_ERR(clk)) {
		gic_frequency = clk_get_rate(clk);
		clk_put(clk);
	} else if (of_property_read_u32(node, "clock-frequency",
					&gic_frequency)) {
		pr_err("GIC frequency not specified.\n");
		pr_err("GIC frequency not specified.\n");
		return;
		return;
	}
	}