mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
![James Hogan](/assets/img/avatar_default.png)
If the common clock framework is enabled, call of_clk_init(NULL) in time_init() to register device tree clocks with the clock framework. After this time_init() calls a new function init_metag_clocks(), which looks for a clock named "core" in the node compatible with "img,meta" (usually the root node). If found the get_core_freq machine callback is overridden to obtain the core clock frequency using that clock. Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Mike Turquette <mturquette@linaro.org> Cc: Grant Likely <grant.likely@linaro.org> Cc: Rob Herring <rob.herring@calxeda.com> Cc: devicetree-discuss@lists.ozlabs.org
59 lines
1.6 KiB
C
59 lines
1.6 KiB
C
/*
|
|
* arch/metag/include/asm/clock.h
|
|
*
|
|
* Copyright (C) 2012 Imagination Technologies Ltd.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef _METAG_CLOCK_H_
|
|
#define _METAG_CLOCK_H_
|
|
|
|
#include <asm/mach/arch.h>
|
|
|
|
/**
|
|
* struct meta_clock_desc - Meta Core clock callbacks.
|
|
* @get_core_freq: Get the frequency of the Meta core. If this is NULL, the
|
|
* core frequency will be determined like this:
|
|
* Meta 1: based on loops_per_jiffy.
|
|
* Meta 2: (EXPAND_TIMER_DIV + 1) MHz.
|
|
* If a "core" clock is provided by the device tree, it
|
|
* will override this function.
|
|
*/
|
|
struct meta_clock_desc {
|
|
unsigned long (*get_core_freq)(void);
|
|
};
|
|
|
|
extern struct meta_clock_desc _meta_clock;
|
|
|
|
/*
|
|
* Perform platform clock initialisation, reading clocks from device tree etc.
|
|
* Only accessible during boot.
|
|
*/
|
|
void init_metag_clocks(void);
|
|
|
|
/*
|
|
* Set up the default clock, ensuring all callbacks are valid - only accessible
|
|
* during boot.
|
|
*/
|
|
void setup_meta_clocks(struct meta_clock_desc *desc);
|
|
|
|
/**
|
|
* get_coreclock() - Get the frequency of the Meta core clock.
|
|
*
|
|
* Returns: The Meta core clock frequency in Hz.
|
|
*/
|
|
static inline unsigned long get_coreclock(void)
|
|
{
|
|
/*
|
|
* Use the current clock callback. If set correctly this will provide
|
|
* the most accurate frequency as it can be calculated directly from the
|
|
* PLL configuration. otherwise a default callback will have been set
|
|
* instead.
|
|
*/
|
|
return _meta_clock.get_core_freq();
|
|
}
|
|
|
|
#endif /* _METAG_CLOCK_H_ */
|