OMAP2 clock: drop DELAYED_APP clock flag
All of the clocks that are marked with DELAYED_APP are changed as part of the virt_prcm_set OPP virtual clock. On 24xx, these clocks all need to be changed as part of a group to keep the clock tree functional - hence the need for the VALID_CONFIG bit, which is not present on later OMAPs. These clocks should not be rate-changed independently. So prevent these clocks from being changed independently by dropping their .round_rate and .set_rate function pointers. It then turns out that the DELAYED_APP clock flag is no longer useful, so drop it and the associated code and renumber the clock flags. Signed-off-by: Paul Walmsley <paul@pwsan.com> Cc: Richard Woodruff <r-woodruff2@ti.com>
This commit is contained in:
parent
5173804fbb
commit
8c34974ab0
|
@ -377,8 +377,6 @@ int omap2_clksel_set_rate(struct clk *clk, unsigned long rate)
|
|||
|
||||
clk->rate = clk->parent->rate / new_div;
|
||||
|
||||
omap2xxx_clk_commit(clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -400,8 +398,6 @@ int omap2_clksel_set_parent(struct clk *clk, struct clk *new_parent)
|
|||
__raw_writel(v, clk->clksel_reg);
|
||||
v = __raw_readl(clk->clksel_reg); /* OCP barrier */
|
||||
|
||||
omap2xxx_clk_commit(clk);
|
||||
|
||||
clk_reparent(clk, new_parent);
|
||||
|
||||
/* CLKSEL clocks follow their parents' rates, divided by a divisor */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* linux/arch/arm/mach-omap2/clock.c
|
||||
*
|
||||
* Copyright (C) 2005-2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2004-2008 Nokia Corporation
|
||||
* Copyright (C) 2004-2010 Nokia Corporation
|
||||
*
|
||||
* Contacts:
|
||||
* Richard Woodruff <r-woodruff2@ti.com>
|
||||
|
@ -14,12 +14,9 @@
|
|||
*/
|
||||
#undef DEBUG
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/bitops.h>
|
||||
|
@ -88,28 +85,6 @@ static void _omap2_clk_disable(struct clk *clk)
|
|||
|
||||
/* Public functions */
|
||||
|
||||
/**
|
||||
* omap2xxx_clk_commit - commit clock parent/rate changes in hardware
|
||||
* @clk: struct clk *
|
||||
*
|
||||
* If @clk has the DELAYED_APP flag set, meaning that parent/rate changes
|
||||
* don't take effect until the VALID_CONFIG bit is written, write the
|
||||
* VALID_CONFIG bit and wait for the write to complete. No return value.
|
||||
*/
|
||||
void omap2xxx_clk_commit(struct clk *clk)
|
||||
{
|
||||
if (!cpu_is_omap24xx())
|
||||
return;
|
||||
|
||||
if (!(clk->flags & DELAYED_APP))
|
||||
return;
|
||||
|
||||
prm_write_mod_reg(OMAP24XX_VALID_CONFIG, OMAP24XX_GR_MOD,
|
||||
OMAP2_PRCM_CLKCFG_CTRL_OFFSET);
|
||||
/* OCP barrier */
|
||||
prm_read_mod_reg(OMAP24XX_GR_MOD, OMAP2_PRCM_CLKCFG_CTRL_OFFSET);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap2_init_clk_clkdm - look up a clockdomain name, store pointer in clk
|
||||
* @clk: OMAP clock struct ptr to use
|
||||
|
|
|
@ -119,7 +119,6 @@ void omap2_clk_dflt_find_companion(struct clk *clk, void __iomem **other_reg,
|
|||
u8 *other_bit);
|
||||
void omap2_clk_dflt_find_idlest(struct clk *clk, void __iomem **idlest_reg,
|
||||
u8 *idlest_bit, u8 *idlest_val);
|
||||
void omap2xxx_clk_commit(struct clk *clk);
|
||||
|
||||
extern u8 cpu_mask;
|
||||
|
||||
|
|
|
@ -404,7 +404,6 @@ static struct clk mpu_ck = { /* Control cpu */
|
|||
.name = "mpu_ck",
|
||||
.ops = &clkops_null,
|
||||
.parent = &core_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "mpu_clkdm",
|
||||
.init = &omap2_init_clksel_parent,
|
||||
.clksel_reg = OMAP_CM_REGADDR(MPU_MOD, CM_CLKSEL),
|
||||
|
@ -443,7 +442,6 @@ static struct clk dsp_fck = {
|
|||
.name = "dsp_fck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "dsp_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT,
|
||||
|
@ -470,7 +468,6 @@ static struct clk dsp_irate_ick = {
|
|||
.name = "dsp_irate_ick",
|
||||
.ops = &clkops_null,
|
||||
.parent = &dsp_fck,
|
||||
.flags = DELAYED_APP,
|
||||
.clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
|
||||
.clksel_mask = OMAP24XX_CLKSEL_DSP_IF_MASK,
|
||||
.clksel = dsp_irate_ick_clksel,
|
||||
|
@ -495,7 +492,6 @@ static struct clk iva1_ifck = {
|
|||
.name = "iva1_ifck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "iva1_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP2420_EN_IVA_COP_SHIFT,
|
||||
|
@ -556,7 +552,6 @@ static struct clk core_l3_ck = { /* Used for ick and fck, interconnect */
|
|||
.name = "core_l3_ck",
|
||||
.ops = &clkops_null,
|
||||
.parent = &core_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "core_l3_clkdm",
|
||||
.clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
|
||||
.clksel_mask = OMAP24XX_CLKSEL_L3_MASK,
|
||||
|
@ -582,7 +577,6 @@ static struct clk usb_l4_ick = { /* FS-USB interface clock */
|
|||
.name = "usb_l4_ick",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_l3_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
|
||||
.enable_bit = OMAP24XX_EN_USB_SHIFT,
|
||||
|
@ -614,14 +608,11 @@ static struct clk l4_ck = { /* used both as an ick and fck */
|
|||
.name = "l4_ck",
|
||||
.ops = &clkops_null,
|
||||
.parent = &core_l3_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
.clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
|
||||
.clksel_mask = OMAP24XX_CLKSEL_L4_MASK,
|
||||
.clksel = l4_clksel,
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
.round_rate = &omap2_clksel_round_rate,
|
||||
.set_rate = &omap2_clksel_set_rate
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -651,7 +642,6 @@ static struct clk ssi_ssr_sst_fck = {
|
|||
.name = "ssi_fck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "core_l3_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
|
||||
.enable_bit = OMAP24XX_EN_SSI_SHIFT,
|
||||
|
@ -659,8 +649,6 @@ static struct clk ssi_ssr_sst_fck = {
|
|||
.clksel_mask = OMAP24XX_CLKSEL_SSI_MASK,
|
||||
.clksel = ssi_ssr_sst_fck_clksel,
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
.round_rate = &omap2_clksel_round_rate,
|
||||
.set_rate = &omap2_clksel_set_rate
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -715,7 +703,6 @@ static struct clk gfx_2d_fck = {
|
|||
.name = "gfx_2d_fck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_l3_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "gfx_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP24XX_EN_2D_SHIFT,
|
||||
|
@ -784,7 +771,6 @@ static struct clk dss1_fck = {
|
|||
.name = "dss1_fck",
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &core_ck, /* Core or sys */
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "dss_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
||||
.enable_bit = OMAP24XX_EN_DSS1_SHIFT,
|
||||
|
@ -793,8 +779,6 @@ static struct clk dss1_fck = {
|
|||
.clksel_mask = OMAP24XX_CLKSEL_DSS1_MASK,
|
||||
.clksel = dss1_fck_clksel,
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
.round_rate = &omap2_clksel_round_rate,
|
||||
.set_rate = &omap2_clksel_set_rate
|
||||
};
|
||||
|
||||
static const struct clksel_rate dss2_fck_sys_rates[] = {
|
||||
|
@ -817,7 +801,6 @@ static struct clk dss2_fck = { /* Alt clk used in power management */
|
|||
.name = "dss2_fck",
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &sys_ck, /* fixed at sys_ck or 48MHz */
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "dss_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
||||
.enable_bit = OMAP24XX_EN_DSS2_SHIFT,
|
||||
|
@ -1636,7 +1619,6 @@ static struct clk vlynq_fck = {
|
|||
.name = "vlynq_fck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &func_96m_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "core_l3_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
||||
.enable_bit = OMAP2420_EN_VLYNQ_SHIFT,
|
||||
|
@ -1645,8 +1627,6 @@ static struct clk vlynq_fck = {
|
|||
.clksel_mask = OMAP2420_CLKSEL_VLYNQ_MASK,
|
||||
.clksel = vlynq_fck_clksel,
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
.round_rate = &omap2_clksel_round_rate,
|
||||
.set_rate = &omap2_clksel_set_rate
|
||||
};
|
||||
|
||||
static struct clk des_ick = {
|
||||
|
|
|
@ -386,7 +386,6 @@ static struct clk mpu_ck = { /* Control cpu */
|
|||
.name = "mpu_ck",
|
||||
.ops = &clkops_null,
|
||||
.parent = &core_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "mpu_clkdm",
|
||||
.init = &omap2_init_clksel_parent,
|
||||
.clksel_reg = OMAP_CM_REGADDR(MPU_MOD, CM_CLKSEL),
|
||||
|
@ -422,7 +421,6 @@ static struct clk dsp_fck = {
|
|||
.name = "dsp_fck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "dsp_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT,
|
||||
|
@ -450,7 +448,6 @@ static struct clk dsp_irate_ick = {
|
|||
.name = "dsp_irate_ick",
|
||||
.ops = &clkops_null,
|
||||
.parent = &dsp_fck,
|
||||
.flags = DELAYED_APP,
|
||||
.clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
|
||||
.clksel_mask = OMAP24XX_CLKSEL_DSP_IF_MASK,
|
||||
.clksel = dsp_irate_ick_clksel,
|
||||
|
@ -501,7 +498,6 @@ static struct clk core_l3_ck = { /* Used for ick and fck, interconnect */
|
|||
.name = "core_l3_ck",
|
||||
.ops = &clkops_null,
|
||||
.parent = &core_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "core_l3_clkdm",
|
||||
.clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
|
||||
.clksel_mask = OMAP24XX_CLKSEL_L3_MASK,
|
||||
|
@ -527,7 +523,6 @@ static struct clk usb_l4_ick = { /* FS-USB interface clock */
|
|||
.name = "usb_l4_ick",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_l3_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
|
||||
.enable_bit = OMAP24XX_EN_USB_SHIFT,
|
||||
|
@ -559,14 +554,11 @@ static struct clk l4_ck = { /* used both as an ick and fck */
|
|||
.name = "l4_ck",
|
||||
.ops = &clkops_null,
|
||||
.parent = &core_l3_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
.clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
|
||||
.clksel_mask = OMAP24XX_CLKSEL_L4_MASK,
|
||||
.clksel = l4_clksel,
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
.round_rate = &omap2_clksel_round_rate,
|
||||
.set_rate = &omap2_clksel_set_rate
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -595,7 +587,6 @@ static struct clk ssi_ssr_sst_fck = {
|
|||
.name = "ssi_fck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "core_l3_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
|
||||
.enable_bit = OMAP24XX_EN_SSI_SHIFT,
|
||||
|
@ -603,8 +594,6 @@ static struct clk ssi_ssr_sst_fck = {
|
|||
.clksel_mask = OMAP24XX_CLKSEL_SSI_MASK,
|
||||
.clksel = ssi_ssr_sst_fck_clksel,
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
.round_rate = &omap2_clksel_round_rate,
|
||||
.set_rate = &omap2_clksel_set_rate
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -659,7 +648,6 @@ static struct clk gfx_2d_fck = {
|
|||
.name = "gfx_2d_fck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_l3_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "gfx_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP24XX_EN_2D_SHIFT,
|
||||
|
@ -703,7 +691,6 @@ static struct clk mdm_ick = { /* used both as a ick and fck */
|
|||
.name = "mdm_ick",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_ck,
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "mdm_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_ICLKEN),
|
||||
.enable_bit = OMAP2430_CM_ICLKEN_MDM_EN_MDM_SHIFT,
|
||||
|
@ -772,7 +759,6 @@ static struct clk dss1_fck = {
|
|||
.name = "dss1_fck",
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &core_ck, /* Core or sys */
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "dss_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
||||
.enable_bit = OMAP24XX_EN_DSS1_SHIFT,
|
||||
|
@ -781,8 +767,6 @@ static struct clk dss1_fck = {
|
|||
.clksel_mask = OMAP24XX_CLKSEL_DSS1_MASK,
|
||||
.clksel = dss1_fck_clksel,
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
.round_rate = &omap2_clksel_round_rate,
|
||||
.set_rate = &omap2_clksel_set_rate
|
||||
};
|
||||
|
||||
static const struct clksel_rate dss2_fck_sys_rates[] = {
|
||||
|
@ -805,7 +789,6 @@ static struct clk dss2_fck = { /* Alt clk used in power management */
|
|||
.name = "dss2_fck",
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &sys_ck, /* fixed at sys_ck or 48MHz */
|
||||
.flags = DELAYED_APP,
|
||||
.clkdm_name = "dss_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
||||
.enable_bit = OMAP24XX_EN_DSS2_SHIFT,
|
||||
|
|
|
@ -190,10 +190,9 @@ extern const struct clkops clkops_null;
|
|||
#define ENABLE_REG_32BIT (1 << 1) /* Use 32-bit access */
|
||||
#define CLOCK_IDLE_CONTROL (1 << 2)
|
||||
#define CLOCK_NO_IDLE_PARENT (1 << 3)
|
||||
#define DELAYED_APP (1 << 4) /* Delay application of clock */
|
||||
#define ENABLE_ON_INIT (1 << 5) /* Enable upon framework init */
|
||||
#define INVERT_ENABLE (1 << 6) /* 0 enables, 1 disables */
|
||||
#define ALWAYS_ENABLED (1 << 7)
|
||||
#define ENABLE_ON_INIT (1 << 4) /* Enable upon framework init */
|
||||
#define INVERT_ENABLE (1 << 5) /* 0 enables, 1 disables */
|
||||
#define ALWAYS_ENABLED (1 << 6)
|
||||
|
||||
/* Clksel_rate flags */
|
||||
#define DEFAULT_RATE (1 << 0)
|
||||
|
|
Loading…
Reference in New Issue