@@ -47,6 +47,8 @@ enum dsp_clk_id {
*/
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:
@@ -60,6 +62,8 @@ extern dsp_status dsp_clk_enable(IN enum dsp_clk_id clk_id);
*/
extern dsp_status dsp_clk_disable(IN enum dsp_clk_id clk_id);
+u32 dsp_clock_disable_all(u32 dsp_per_clocks);
+
void ssi_clk_exit(void);
void ssi_clk_init(void);
@@ -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 ========
@@ -242,6 +242,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 = DSP_EFAIL;
+
+ 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:
@@ -287,3 +306,25 @@ dsp_status dsp_clk_disable(IN enum dsp_clk_id clk_id)
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 = DSP_EFAIL;
+
+ 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;
+}
+
@@ -123,7 +123,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);
if (DSP_SUCCEEDED(status)) {
/* Update the Bridger Driver state */
@@ -240,7 +240,7 @@ dsp_status sleep_dsp(struct wmd_dev_context *dev_context, IN u32 dw_cmd,
dev_context->dw_brd_state = BRD_RETENTION;
/* 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;
}
@@ -422,44 +422,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 = DSP_EFAIL;
-
- 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;
@@ -425,7 +425,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);
/*
* 2:0 AUTO_IVA2_DPLL - Enabling IVA2 DPLL auto control
@@ -451,7 +451,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);
@@ -283,7 +283,7 @@ void bridge_deh_notify(struct deh_mgr *hdeh_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 */
- (void)dsp_peripheral_clocks_disable(dev_context, NULL);
+ dsp_clock_disable_all(dev_context->dsp_per_clks);
/* Call DSP Trace Buffer */
print_dsp_trace_buffer(hdeh_mgr->hwmd_context);