提交 6301d584 编写于 作者: T Tero Kristo 提交者: Tony Lindgren

ARM: OMAP2/3: CM: fix cm_split_idlest functionality

cm_split_idlest doesn't take the CM base offset into account right now,
causing it to read reserved registers which show idlestatus as active
always. This will cause the wait_module_ready functionality to be
effectively an expensive NOP, which will cause problems if the
module hasn't really activated during its execution. Fix by adding
the CM offset into the calculation so the wait_module_ready will
access correct register.
Signed-off-by: NTero Kristo <t-kristo@ti.com>
Reported-by: NFilip Matijevic <filip.matijevic.pz@gmail.com>
Signed-off-by: NTony Lindgren <tony@atomide.com>
上级 3c4d296e
...@@ -68,14 +68,17 @@ void __init omap2_set_globals_cm(void __iomem *cm, void __iomem *cm2) ...@@ -68,14 +68,17 @@ void __init omap2_set_globals_cm(void __iomem *cm, void __iomem *cm2)
int cm_split_idlest_reg(struct clk_omap_reg *idlest_reg, s16 *prcm_inst, int cm_split_idlest_reg(struct clk_omap_reg *idlest_reg, s16 *prcm_inst,
u8 *idlest_reg_id) u8 *idlest_reg_id)
{ {
int ret;
if (!cm_ll_data->split_idlest_reg) { if (!cm_ll_data->split_idlest_reg) {
WARN_ONCE(1, "cm: %s: no low-level function defined\n", WARN_ONCE(1, "cm: %s: no low-level function defined\n",
__func__); __func__);
return -EINVAL; return -EINVAL;
} }
return cm_ll_data->split_idlest_reg(idlest_reg, prcm_inst, ret = cm_ll_data->split_idlest_reg(idlest_reg, prcm_inst,
idlest_reg_id); idlest_reg_id);
*prcm_inst -= cm_base.offset;
return ret;
} }
/** /**
...@@ -337,6 +340,7 @@ int __init omap2_cm_base_init(void) ...@@ -337,6 +340,7 @@ int __init omap2_cm_base_init(void)
if (mem) { if (mem) {
mem->pa = res.start + data->offset; mem->pa = res.start + data->offset;
mem->va = data->mem + data->offset; mem->va = data->mem + data->offset;
mem->offset = data->offset;
} }
data->np = np; data->np = np;
......
...@@ -529,6 +529,7 @@ struct omap_prcm_irq_setup { ...@@ -529,6 +529,7 @@ struct omap_prcm_irq_setup {
struct omap_domain_base { struct omap_domain_base {
u32 pa; u32 pa;
void __iomem *va; void __iomem *va;
s16 offset;
}; };
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册