[ARM] S3C: Add <plat/cpu-freq.h> for initial cpufreq definitions
This is the header file that defines the basic cpu frequency scalling support for the Samsung S3C series of SoC. Signed-off-by: Ben Dooks <ben-linux@fluff.org>
This commit is contained in:
parent
b2a6cf3b1e
commit
7f565ecc33
1 changed files with 94 additions and 0 deletions
94
arch/arm/plat-s3c/include/plat/cpu-freq.h
Normal file
94
arch/arm/plat-s3c/include/plat/cpu-freq.h
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
/* arch/arm/plat-s3c/include/plat/cpu-freq.h
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006,2007 Simtec Electronics
|
||||||
|
* http://armlinux.simtec.co.uk/
|
||||||
|
* Ben Dooks <ben@simtec.co.uk>
|
||||||
|
*
|
||||||
|
* S3C CPU frequency scaling support - driver and board
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/cpufreq.h>
|
||||||
|
|
||||||
|
struct s3c_cpufreq_info;
|
||||||
|
struct s3c_cpufreq_board;
|
||||||
|
struct s3c_iotimings;
|
||||||
|
|
||||||
|
struct s3c_freq {
|
||||||
|
unsigned long fclk;
|
||||||
|
unsigned long armclk;
|
||||||
|
unsigned long hclk_tns; /* in 10ths of ns */
|
||||||
|
unsigned long hclk;
|
||||||
|
unsigned long pclk;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* wrapper 'struct cpufreq_freqs' so that any drivers receiving the
|
||||||
|
* notification can use this information that is not provided by just
|
||||||
|
* having the core frequency alone.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct s3c_cpufreq_freqs {
|
||||||
|
struct cpufreq_freqs freqs;
|
||||||
|
struct s3c_freq old;
|
||||||
|
struct s3c_freq new;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define to_s3c_cpufreq(_cf) container_of(_cf, struct s3c_cpufreq_freqs, freqs)
|
||||||
|
|
||||||
|
struct s3c_clkdivs {
|
||||||
|
int p_divisor; /* fclk / pclk */
|
||||||
|
int h_divisor; /* fclk / hclk */
|
||||||
|
int arm_divisor; /* not all cpus have this. */
|
||||||
|
unsigned char dvs; /* using dvs mode to arm. */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define PLLVAL(_m, _p, _s) (((_m) << 12) | ((_p) << 4) | (_s))
|
||||||
|
|
||||||
|
struct s3c_pllval {
|
||||||
|
unsigned long freq;
|
||||||
|
unsigned long pll_reg;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct s3c_cpufreq_config {
|
||||||
|
struct s3c_freq freq;
|
||||||
|
struct s3c_pllval pll;
|
||||||
|
struct s3c_clkdivs divs;
|
||||||
|
struct s3c_cpufreq_info *info; /* for core, not drivers */
|
||||||
|
struct s3c_cpufreq_board *board;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* s3c_cpufreq_board
|
||||||
|
*
|
||||||
|
* per-board configuraton information, such as memory refresh and
|
||||||
|
* how to initialise IO timings.
|
||||||
|
*/
|
||||||
|
struct s3c_cpufreq_board {
|
||||||
|
unsigned int refresh; /* refresh period in ns */
|
||||||
|
unsigned int auto_io:1; /* automatically init io timings. */
|
||||||
|
unsigned int need_io:1; /* set if needs io timing support. */
|
||||||
|
|
||||||
|
/* any non-zero field in here is taken as an upper limit. */
|
||||||
|
struct s3c_freq max; /* frequency limits */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Things depending on frequency scaling. */
|
||||||
|
#ifdef CONFIG_CPU_FREQ_S3C
|
||||||
|
#define __init_or_cpufreq
|
||||||
|
#else
|
||||||
|
#define __init_or_cpufreq __init
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Board functions */
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_FREQ_S3C
|
||||||
|
extern int s3c_cpufreq_setboard(struct s3c_cpufreq_board *board);
|
||||||
|
#else
|
||||||
|
|
||||||
|
static inline int s3c_cpufreq_setboard(struct s3c_cpufreq_board *board)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_CPU_FREQ_S3C */
|
Loading…
Reference in a new issue