mirror of
https://github.com/torvalds/linux.git
synced 2024-11-02 18:21:49 +00:00
46a57afdd7
Change A9 PLL rate, as per requirement from the cpufreq framework, for DVFS. For rate change, the A9 clock needs to be temporarily sourced from PLL external to A9 and then sourced back to A9-PLL Signed-off-by: Pankaj Dev <pankaj.dev@st.com> Signed-off-by: Gabriel Fernandez <gabriel.fernandez@linaro.org> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
/************************************************************************
|
|
File : Clock H/w specific Information
|
|
|
|
Author: Pankaj Dev <pankaj.dev@st.com>
|
|
|
|
Copyright (C) 2014 STMicroelectronics
|
|
************************************************************************/
|
|
|
|
#ifndef __CLKGEN_INFO_H
|
|
#define __CLKGEN_INFO_H
|
|
|
|
extern spinlock_t clkgen_a9_lock;
|
|
|
|
struct clkgen_field {
|
|
unsigned int offset;
|
|
unsigned int mask;
|
|
unsigned int shift;
|
|
};
|
|
|
|
static inline unsigned long clkgen_read(void __iomem *base,
|
|
struct clkgen_field *field)
|
|
{
|
|
return (readl(base + field->offset) >> field->shift) & field->mask;
|
|
}
|
|
|
|
|
|
static inline void clkgen_write(void __iomem *base, struct clkgen_field *field,
|
|
unsigned long val)
|
|
{
|
|
writel((readl(base + field->offset) &
|
|
~(field->mask << field->shift)) | (val << field->shift),
|
|
base + field->offset);
|
|
|
|
return;
|
|
}
|
|
|
|
#define CLKGEN_FIELD(_offset, _mask, _shift) { \
|
|
.offset = _offset, \
|
|
.mask = _mask, \
|
|
.shift = _shift, \
|
|
}
|
|
|
|
#define CLKGEN_READ(pll, field) clkgen_read(pll->regs_base, \
|
|
&pll->data->field)
|
|
|
|
#define CLKGEN_WRITE(pll, field, val) clkgen_write(pll->regs_base, \
|
|
&pll->data->field, val)
|
|
|
|
#endif /*__CLKGEN_INFO_H*/
|
|
|