Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
0670adb2
U
U-Boot.Mirror
项目概览
OS
/
U-Boot.Mirror
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
U-Boot.Mirror
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0670adb2
编写于
12月 31, 2019
作者:
M
mingming lee
提交者:
Tom Rini
1月 16, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
clk: mediatek: add configurable pcw_chg_reg/ibits/fmin to mtk_pll
Add configurable pcw_chg_reg/ibits/fmin to mtk_pll to support mt8512
上级
f62168d3
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
20 addition
and
8 deletion
+20
-8
drivers/clk/mediatek/clk-mtk.c
drivers/clk/mediatek/clk-mtk.c
+17
-8
drivers/clk/mediatek/clk-mtk.h
drivers/clk/mediatek/clk-mtk.h
+3
-0
未找到文件。
drivers/clk/mediatek/clk-mtk.c
浏览文件 @
0670adb2
...
...
@@ -95,11 +95,13 @@ static unsigned long __mtk_pll_recalc_rate(const struct mtk_pll_data *pll,
{
int
pcwbits
=
pll
->
pcwbits
;
int
pcwfbits
;
int
ibits
;
u64
vco
;
u8
c
=
0
;
/* The fractional part of the PLL divider. */
pcwfbits
=
pcwbits
>
INTEGER_BITS
?
pcwbits
-
INTEGER_BITS
:
0
;
ibits
=
pll
->
pcwibits
?
pll
->
pcwibits
:
INTEGER_BITS
;
pcwfbits
=
pcwbits
>
ibits
?
pcwbits
-
ibits
:
0
;
vco
=
(
u64
)
fin
*
pcw
;
...
...
@@ -124,7 +126,7 @@ static void mtk_pll_set_rate_regs(struct clk *clk, u32 pcw, int postdiv)
{
struct
mtk_clk_priv
*
priv
=
dev_get_priv
(
clk
->
dev
);
const
struct
mtk_pll_data
*
pll
=
&
priv
->
tree
->
plls
[
clk
->
id
];
u32
val
;
u32
val
,
chg
;
/* set postdiv */
val
=
readl
(
priv
->
base
+
pll
->
pd_reg
);
...
...
@@ -140,11 +142,16 @@ static void mtk_pll_set_rate_regs(struct clk *clk, u32 pcw, int postdiv)
/* set pcw */
val
&=
~
GENMASK
(
pll
->
pcw_shift
+
pll
->
pcwbits
-
1
,
pll
->
pcw_shift
);
val
|=
pcw
<<
pll
->
pcw_shift
;
val
&=
~
CON1_PCW_CHG
;
writel
(
val
,
priv
->
base
+
pll
->
pcw_reg
);
val
|=
CON1_PCW_CHG
;
writel
(
val
,
priv
->
base
+
pll
->
pcw_reg
);
if
(
pll
->
pcw_chg_reg
)
{
chg
=
readl
(
priv
->
base
+
pll
->
pcw_chg_reg
);
chg
|=
CON1_PCW_CHG
;
writel
(
val
,
priv
->
base
+
pll
->
pcw_reg
);
writel
(
chg
,
priv
->
base
+
pll
->
pcw_chg_reg
);
}
else
{
val
|=
CON1_PCW_CHG
;
writel
(
val
,
priv
->
base
+
pll
->
pcw_reg
);
}
udelay
(
20
);
}
...
...
@@ -161,8 +168,9 @@ static void mtk_pll_calc_values(struct clk *clk, u32 *pcw, u32 *postdiv,
{
struct
mtk_clk_priv
*
priv
=
dev_get_priv
(
clk
->
dev
);
const
struct
mtk_pll_data
*
pll
=
&
priv
->
tree
->
plls
[
clk
->
id
];
unsigned
long
fmin
=
1000
*
MHZ
;
unsigned
long
fmin
=
pll
->
fmin
?
pll
->
fmin
:
1000
*
MHZ
;
u64
_pcw
;
int
ibits
;
u32
val
;
if
(
freq
>
pll
->
fmax
)
...
...
@@ -175,7 +183,8 @@ static void mtk_pll_calc_values(struct clk *clk, u32 *pcw, u32 *postdiv,
}
/* _pcw = freq * postdiv / xtal_rate * 2^pcwfbits */
_pcw
=
((
u64
)
freq
<<
val
)
<<
(
pll
->
pcwbits
-
INTEGER_BITS
);
ibits
=
pll
->
pcwibits
?
pll
->
pcwibits
:
INTEGER_BITS
;
_pcw
=
((
u64
)
freq
<<
val
)
<<
(
pll
->
pcwbits
-
ibits
);
do_div
(
_pcw
,
priv
->
tree
->
xtal2_rate
);
*
pcw
=
(
u32
)
_pcw
;
...
...
drivers/clk/mediatek/clk-mtk.h
浏览文件 @
0670adb2
...
...
@@ -37,9 +37,12 @@ struct mtk_pll_data {
u32
flags
;
u32
rst_bar_mask
;
u64
fmax
;
u64
fmin
;
int
pcwbits
;
int
pcwibits
;
u32
pcw_reg
;
int
pcw_shift
;
u32
pcw_chg_reg
;
};
/**
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录