From: Omar Ramirez Luna <omar.ramirez@ti.com>
To: linux-omap <linux-omap@vger.kernel.org>
Cc: Ameya Palande <ameya.palande@nokia.com>,
Hiroshi Doyu <Hiroshi.DOYU@nokia.com>,
Felipe Contreras <felipe.contreras@nokia.com>,
Nishanth Menon <nm@ti.com>,
Omar Ramirez Luna <omar.ramirez@ti.com>,
Omar Ramirez Luna <omar.ramirez@hotmail.com>
Subject: [PATCH v2] DSPBRIDGE: reorganize the code to handle peripheral clocks
Date: Tue, 27 Apr 2010 20:29:27 -0500 [thread overview]
Message-ID: <1272418167-12630-20-git-send-email-omar.ramirez@ti.com> (raw)
In-Reply-To: <1272418167-12630-19-git-send-email-omar.ramirez@ti.com>
This patch moves and simplifies the code used to enable/disable
all the requested peripheral clocks.
Signed-off-by: Omar Ramirez Luna <omar.ramirez@hotmail.com>
---
arch/arm/plat-omap/include/dspbridge/clk.h | 4 ++
drivers/dsp/bridge/rmgr/drv_interface.c | 1 +
drivers/dsp/bridge/wmd/_tiomap_pwr.h | 17 ----------
drivers/dsp/bridge/wmd/dsp-clock.c | 43 +++++++++++++++++++++++++
drivers/dsp/bridge/wmd/tiomap3430_pwr.c | 47 +++-------------------------
drivers/dsp/bridge/wmd/tiomap_io.c | 4 +-
drivers/dsp/bridge/wmd/ue_deh.c | 2 +-
7 files changed, 56 insertions(+), 62 deletions(-)
diff --git a/arch/arm/plat-omap/include/dspbridge/clk.h b/arch/arm/plat-omap/include/dspbridge/clk.h
index e6b09c7..439fc2d 100644
--- a/arch/arm/plat-omap/include/dspbridge/clk.h
+++ b/arch/arm/plat-omap/include/dspbridge/clk.h
@@ -75,6 +75,8 @@ extern void dsp_clk_init(void);
*/
extern dsp_status dsp_clk_enable(IN enum dsp_clk_id clk_id);
+u32 dsp_clock_enable_all(u32 dsp_per_clocks);
+
/*
* ======== dsp_clk_disable ========
* Purpose:
@@ -90,6 +92,8 @@ extern dsp_status dsp_clk_disable(IN enum dsp_clk_id clk_id);
extern u32 dsp_clk_get_iva2_rate(void);
+u32 dsp_clock_disable_all(u32 dsp_per_clocks);
+
extern void ssi_clk_prepare(bool FLAG);
#endif /* _SYNC_H */
diff --git a/drivers/dsp/bridge/rmgr/drv_interface.c b/drivers/dsp/bridge/rmgr/drv_interface.c
index db1c746..04b17be 100644
--- a/drivers/dsp/bridge/rmgr/drv_interface.c
+++ b/drivers/dsp/bridge/rmgr/drv_interface.c
@@ -41,6 +41,7 @@
/* ----------------------------------- OS Adaptation Layer */
#include <dspbridge/services.h>
+#include <dspbridge/clk.h>
#include <dspbridge/sync.h>
/* ----------------------------------- Platform Manager */
diff --git a/drivers/dsp/bridge/wmd/_tiomap_pwr.h b/drivers/dsp/bridge/wmd/_tiomap_pwr.h
index a7a4fc2..1948e83 100644
--- a/drivers/dsp/bridge/wmd/_tiomap_pwr.h
+++ b/drivers/dsp/bridge/wmd/_tiomap_pwr.h
@@ -64,23 +64,6 @@ dsp_status pre_scale_dsp(struct wmd_dev_context *dev_context, IN void *pargs);
*/
dsp_status handle_constraints_set(struct wmd_dev_context *dev_context,
IN void *pargs);
-/*
- * ======== dsp_peripheral_clocks_disable ========
- * This function disables all the peripheral clocks that
- * were enabled by DSP. Call this function only when
- * DSP is entering Hibernation or when DSP is in
- * Error state
- */
-dsp_status dsp_peripheral_clocks_disable(struct wmd_dev_context *dev_context,
- IN void *pargs);
-
-/*
- * ======== dsp_peripheral_clocks_enable ========
- * This function enables all the peripheral clocks that
- * were requested by DSP.
- */
-dsp_status dsp_peripheral_clocks_enable(struct wmd_dev_context *dev_context,
- IN void *pargs);
/*
* ======== dsp_clk_wakeup_event_ctrl ========
diff --git a/drivers/dsp/bridge/wmd/dsp-clock.c b/drivers/dsp/bridge/wmd/dsp-clock.c
index c4f0874..608ff03 100644
--- a/drivers/dsp/bridge/wmd/dsp-clock.c
+++ b/drivers/dsp/bridge/wmd/dsp-clock.c
@@ -115,6 +115,8 @@ static s8 get_clk_type(u8 id)
*/
void dsp_clk_exit(void)
{
+ dsp_clock_disable_all(dsp_clocks);
+
clk_put(iva2_clk);
clk_put(ssi.sst_fck);
clk_put(ssi.ssr_fck);
@@ -247,6 +249,25 @@ out:
return status;
}
+/**
+ * dsp_clock_enable_all - Enable clocks used by the DSP
+ * @dev_context Driver's device context strucure
+ *
+ * This function enables all the peripheral clocks that were requested by DSP.
+ */
+u32 dsp_clock_enable_all(u32 dsp_per_clocks)
+{
+ u32 clk_id;
+ u32 status = -EPERM;
+
+ for (clk_id = 0; clk_id < DSP_CLK_NOT_DEFINED; clk_id++) {
+ if (is_dsp_clk_active(dsp_per_clocks, clk_id))
+ status = dsp_clk_enable(clk_id);
+ }
+
+ return status;
+}
+
/*
* ======== dsp_clk_disable ========
* Purpose:
@@ -295,6 +316,27 @@ out:
return status;
}
+/**
+ * dsp_clock_disable_all - Disable all active clocks
+ * @dev_context Driver's device context structure
+ *
+ * This function disables all the peripheral clocks that were enabled by DSP.
+ * It is meant to be called only when DSP is entering hibernation or when DSP
+ * is in error state.
+ */
+u32 dsp_clock_disable_all(u32 dsp_per_clocks)
+{
+ u32 clk_id;
+ u32 status = -EPERM;
+
+ for (clk_id = 0; clk_id < DSP_CLK_NOT_DEFINED; clk_id++) {
+ if (is_dsp_clk_active(dsp_per_clocks, clk_id))
+ status = dsp_clk_disable(clk_id);
+ }
+
+ return status;
+}
+
u32 dsp_clk_get_iva2_rate(void)
{
u32 clk_speed_khz;
@@ -332,3 +374,4 @@ void ssi_clk_prepare(bool FLAG)
__raw_writel(value, ssi_base + OMAP_SSI_SYSCONFIG_OFFSET);
iounmap(ssi_base);
}
+
diff --git a/drivers/dsp/bridge/wmd/tiomap3430_pwr.c b/drivers/dsp/bridge/wmd/tiomap3430_pwr.c
index 6d1d557..906c2c5 100644
--- a/drivers/dsp/bridge/wmd/tiomap3430_pwr.c
+++ b/drivers/dsp/bridge/wmd/tiomap3430_pwr.c
@@ -112,7 +112,7 @@ dsp_status handle_hibernation_from_dsp(struct wmd_dev_context *dev_context)
omap_mbox_save_ctx(dev_context->mbox);
/* Turn off DSP Peripheral clocks and DSP Load monitor timer */
- status = dsp_peripheral_clocks_disable(dev_context, NULL);
+ status = dsp_clock_disable_all(dev_context->dsp_per_clks);
/* Disable wdt on hibernation. */
dsp_wdt_enable(false);
@@ -230,7 +230,7 @@ dsp_status sleep_dsp(struct wmd_dev_context *dev_context, IN u32 dw_cmd,
dsp_wdt_enable(false);
/* Turn off DSP Peripheral clocks */
- status = dsp_peripheral_clocks_disable(dev_context, NULL);
+ status = dsp_clock_disable_all(dev_context->dsp_per_clks);
if (DSP_FAILED(status)) {
return status;
}
@@ -316,14 +316,15 @@ dsp_status dsp_peripheral_clk_ctrl(struct wmd_dev_context *dev_context,
false);
if (DSP_SUCCEEDED(status)) {
(dev_context->dsp_per_clks) &=
- (~((u32) (1 << clk_id_index)));
+ (~((u32) (1 << bpwr_clks[clk_id_index].clk)));
}
break;
case BPWR_ENABLE_CLOCK:
status = dsp_clk_enable(bpwr_clks[clk_id_index].clk);
dsp_clk_wakeup_event_ctrl(bpwr_clks[clk_id_index].clk_id, true);
if (DSP_SUCCEEDED(status))
- (dev_context->dsp_per_clks) |= (1 << clk_id_index);
+ (dev_context->dsp_per_clks) |=
+ (1 << bpwr_clks[clk_id_index].clk);
break;
default:
dev_dbg(bridge, "%s: Unsupported CMD\n", __func__);
@@ -409,44 +410,6 @@ dsp_status post_scale_dsp(struct wmd_dev_context *dev_context, IN void *pargs)
return status;
}
-/*
- * ========dsp_peripheral_clocks_disable========
- * Disables all the peripheral clocks that were requested by DSP
- */
-dsp_status dsp_peripheral_clocks_disable(struct wmd_dev_context *dev_context,
- IN void *pargs)
-{
- u32 clk_idx;
- dsp_status status = DSP_SOK;
-
- for (clk_idx = 0; clk_idx < MBX_PM_MAX_RESOURCES; clk_idx++) {
- if (((dev_context->dsp_per_clks) >> clk_idx) & 0x01) {
- /* Disables the clocks of the peripheral */
- status = dsp_clk_disable(bpwr_clks[clk_idx].clk);
- }
- }
- return status;
-}
-
-/*
- * ========dsp_peripheral_clocks_enable========
- * Enables all the peripheral clocks that were requested by DSP
- */
-dsp_status dsp_peripheral_clocks_enable(struct wmd_dev_context *dev_context,
- IN void *pargs)
-{
- u32 clk_idx;
- dsp_status clk_status = -EPERM;
-
- for (clk_idx = 0; clk_idx < MBX_PM_MAX_RESOURCES; clk_idx++) {
- if (((dev_context->dsp_per_clks) >> clk_idx) & 0x01) {
- /* Enable the clocks of the peripheral */
- clk_status = dsp_clk_enable(bpwr_clks[clk_idx].clk);
- }
- }
- return clk_status;
-}
-
void dsp_clk_wakeup_event_ctrl(u32 ClkId, bool enable)
{
struct cfg_hostres *resources;
diff --git a/drivers/dsp/bridge/wmd/tiomap_io.c b/drivers/dsp/bridge/wmd/tiomap_io.c
index 5880428..2ab7b7d 100644
--- a/drivers/dsp/bridge/wmd/tiomap_io.c
+++ b/drivers/dsp/bridge/wmd/tiomap_io.c
@@ -415,7 +415,7 @@ dsp_status sm_interrupt_dsp(struct wmd_dev_context *dev_context, u16 mb_val)
}
#endif
/* Restart the peripheral clocks */
- dsp_peripheral_clocks_enable(dev_context, NULL);
+ dsp_clock_enable_all(dev_context->dsp_per_clks);
dsp_wdt_enable(true);
/*
@@ -445,7 +445,7 @@ dsp_status sm_interrupt_dsp(struct wmd_dev_context *dev_context, u16 mb_val)
dev_context->dw_brd_state = BRD_RUNNING;
} else if (dev_context->dw_brd_state == BRD_RETENTION) {
/* Restart the peripheral clocks */
- dsp_peripheral_clocks_enable(dev_context, NULL);
+ dsp_clock_enable_all(dev_context->dsp_per_clks);
}
status = omap_mbox_msg_send(dev_context->mbox, mb_val);
diff --git a/drivers/dsp/bridge/wmd/ue_deh.c b/drivers/dsp/bridge/wmd/ue_deh.c
index 03b29b6..55a6790 100644
--- a/drivers/dsp/bridge/wmd/ue_deh.c
+++ b/drivers/dsp/bridge/wmd/ue_deh.c
@@ -328,7 +328,7 @@ void bridge_deh_notify(struct deh_mgr *deh_mgr, u32 ulEventMask, u32 dwErrInfo)
/* Set the Board state as ERROR */
dev_context->dw_brd_state = BRD_ERROR;
/* Disable all the clocks that were enabled by DSP */
- dsp_peripheral_clocks_disable(dev_context, NULL);
+ dsp_clock_disable_all(dev_context->dsp_per_clks);
/*
* Avoid the subsequent WDT if it happens once,
* also if fatal error occurs.
--
1.6.0.4
next prev parent reply other threads:[~2010-04-28 1:24 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-28 1:29 [PATCH v2] generic clk module removal Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: remove clk_handle from drv interface Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: fail if clk handle is NULL Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: Now actually fail if a clk handle is wrong Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: Rename services_clk_* to dsp_clk_* Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: remove unused clock sys_ck Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: remove function clk_set32k_hz Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: remove clk_get_use_cnt Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: trivial clock cleanup for unused code Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: function to get the type of clock requested by dsp Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: iva2 clock handling Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: use dm timer framework for gpt timers Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: use omap mcbsp to enable mcbsp clocks Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: remove wdt3 from dsp control Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: dsp interface to enable ssi clocks Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: use one call for both ick and fck clocks Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: Move MCBSP_CLOCKS code to a common place Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: Balance the number of enable/disable Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: move clk to dsp-clock Omar Ramirez Luna
2010-04-28 1:29 ` Omar Ramirez Luna [this message]
2010-04-28 7:46 ` [PATCH v2] DSPBRIDGE: use dm timer framework for gpt timers Felipe Contreras
2010-04-28 14:15 ` Omar Ramirez Luna
2010-04-28 16:29 ` Kevin Hilman
2010-04-28 16:36 ` Nishanth Menon
2010-04-28 17:00 ` Omar Ramirez Luna
2010-04-28 17:11 ` Vladimir Pantelic
2010-04-28 17:22 ` Nishanth Menon
2010-04-28 17:59 ` Kevin Hilman
2010-04-28 18:56 ` Nishanth Menon
2010-04-28 19:52 ` Vladimir Pantelic
2010-04-28 19:57 ` Nishanth Menon
2010-04-28 20:50 ` Kevin Hilman
2010-04-29 13:40 ` Benoit Cousson
2010-04-29 14:12 ` Kevin Hilman
2010-04-28 17:02 ` Uribe de Leon, Armando
2010-04-28 17:04 ` Felipe Contreras
2010-04-28 1:34 ` [PATCH v2] generic clk module removal Nishanth Menon
2010-04-28 13:55 ` Omar Ramirez Luna
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1272418167-12630-20-git-send-email-omar.ramirez@ti.com \
--to=omar.ramirez@ti.com \
--cc=Hiroshi.DOYU@nokia.com \
--cc=ameya.palande@nokia.com \
--cc=felipe.contreras@nokia.com \
--cc=linux-omap@vger.kernel.org \
--cc=nm@ti.com \
--cc=omar.ramirez@hotmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox