[FYI] TI dspbridge rebase against latest l-o

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

"CONFIG_BRIDGE_DVFS" hasn't been verified since it requires the latest
PM patches. I will wait for the new pm-* branch.

The changes against the previous are:

Ramesh Gupta (1):
      BRIDGE Power Management cleanup

Tony Lindgren (1):
      DSPBRIDGE: Flush posted write when acking mailbox irq

TI's dspbridge patchset has been rebased on the latest l-o just for
its easy intergration.  Most of the patches just came from o-z(Thanks
TI dspbridge team!) and I just collected them. The latest one is:

	http://4869037.web.fc2.com/tidspbridge-20081107.tgz

So steps are:

  $ git clone http://www.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
  $ cd linux-omap-2.6
  $ wget http://4869037.web.fc2.com/tidspbridge-<date>.tgz
  $ tar xvzf tidspbridge-<date>.tgz
  $ git am *.patch
  $ make <your omap3 board>_defconfig
  $ make menuconfig # add the following options in the menuconfig
 ...
 CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=14
 ...
 #
 # CBUS support
 #
 # CONFIG_CBUS is not set
 CONFIG_MPU_BRIDGE=m
 # CONFIG_BRIDGE_DVFS is not set
 CONFIG_BRIDGE_DEBUG=y
 ...

You can get bridge sample binaries as below:

  https://omapzoom.org/gf/download/frsrelease/132/632/dspbridge_binaries.tar.bz2

And extract it somewhere on target rootfs. After kernel booted up:

 $ depmod -a
 $ modprobe bridgedriver base_img=ddspbase_tiomap3430.dof64P
 $ <Thy some sample applications>

If I missed something here, please let me know.

   Hiroshi DOYU

From: "ext Ramirez Luna, Omar" <x00omar@xxxxxx>
Subject: [PATCH] BRIDGE Power Management cleanup
Date: Fri, 31 Oct 2008 20:38:43 -0500

> Hi All,
> 
> Here it is Bridge Power Management cleanup patch that applies in top of currently bridge patches series for linux-omap kernel.
> 
> ---
> 
> From: Ramesh Gupta <grgupta@xxxxxx>
> Date: Fri, 31 Oct 2008 18:09:16 -0500
> Subject: [PATCH] BRIDGE Power Management cleanup
> 
> 1. Removed DISABLE_BRIDGE_* Flags.
> 2. Used platform_data for calling the functions.
> 3. Check for CONFIG_CPU_FREQ added while boosting the opp.
> 4. Removed CONFIG_OMAP3_PM flag.
> 
> Signed-off-by: Ramesh Gupta <grgupta@xxxxxx>
> ---
>  arch/arm/plat-omap/include/dspbridge/host_os.h |   20 +++
>  drivers/dsp/bridge/Kconfig                     |   16 +--
>  drivers/dsp/bridge/rmgr/drv_interface.c        |  176 ++++++++----------------
>  drivers/dsp/bridge/rmgr/node.c                 |   79 ++++-------
>  drivers/dsp/bridge/rmgr/proc.c                 |   58 ++------
>  drivers/dsp/bridge/services/clk.c              |    9 +-
>  drivers/dsp/bridge/wmd/io_sm.c                 |   36 ++----
>  drivers/dsp/bridge/wmd/tiomap3430.c            |   15 ++-
>  drivers/dsp/bridge/wmd/tiomap3430_pwr.c        |   89 ++++---------
>  drivers/dsp/bridge/wmd/tiomap_sm.c             |   73 ++++-------
>  10 files changed, 202 insertions(+), 369 deletions(-)
> 
> diff --git a/arch/arm/plat-omap/include/dspbridge/host_os.h b/arch/arm/plat-omap/include/dspbridge/host_os.h
> index ff49e0d..dab2111 100644
> --- a/arch/arm/plat-omap/include/dspbridge/host_os.h
> +++ b/arch/arm/plat-omap/include/dspbridge/host_os.h
> @@ -70,4 +70,24 @@
>  #define INT_MAIL_MPU_IRQ        26
>  #define INT_DSP_MMU_IRQ        28
> 
> +#ifdef CONFIG_PM
> +struct dspbridge_platform_data {
> +       void    (*dsp_set_min_opp)(u8 opp_id);
> +       u8      (*dsp_get_opp)(void);
> +       void    (*cpu_set_freq)(unsigned long f);
> +       unsigned long (*cpu_get_freq)(void);
> +       unsigned long mpu_speed[6];
> +};
> +
> +#define PRCM_VDD1 1
> +
> +#ifndef CONFIG_OMAP_PM_SRF
> +#define VDD1_OPP1 1
> +#define VDD1_OPP2 2
> +#define VDD1_OPP3 3
> +#define VDD1_OPP4 4
> +#define VDD1_OPP5 5
> +#endif
> +
> +#endif
>  #endif
> diff --git a/drivers/dsp/bridge/Kconfig b/drivers/dsp/bridge/Kconfig
> index cba1338..78aed30 100644
> --- a/drivers/dsp/bridge/Kconfig
> +++ b/drivers/dsp/bridge/Kconfig
> @@ -11,26 +11,18 @@ menuconfig MPU_BRIDGE
>           "host" processor, and the attached DSPs are processing resources
>           that can be utilized by applications and drivers running on the GPP.
> 
> -config DISABLE_BRIDGE_DVFS
> -       bool "Disable Bridge Dynamic Voltage and Frequency Scaling (DVFS)"
> +config BRIDGE_DVFS
> +       bool "Enable Bridge Dynamic Voltage and Frequency Scaling (DVFS)"
>         depends on MPU_BRIDGE
> -       default y
> +       default n
>         help
>           DVFS allows DSP Bridge to initiate the operating point change to
>           scale the chip voltage and frequency in order to match the
>           performance and power consumption to the current processing
>           requirements.
> 
> -config DISABLE_BRIDGE_PM
> -       bool "Disable Bridge Power Management"
> -       depends on MPU_BRIDGE && PM
> -       default y
> -       help
> -         DSP Bridge employs power management techniques to save dynamic and
> -         static power consumption of the IVA sub system.
> -
>  config BRIDGE_DEBUG
>         bool "DSP Bridge Debug Support"
>         depends on MPU_BRIDGE
>         help
> -         Say Y to enable Bridge debugging capabilities
> \ No newline at end of file
> +         Say Y to enable Bridge debugging capabilities
> diff --git a/drivers/dsp/bridge/rmgr/drv_interface.c b/drivers/dsp/bridge/rmgr/drv_interface.c
> index cf28f86..4650370 100644
> --- a/drivers/dsp/bridge/rmgr/drv_interface.c
> +++ b/drivers/dsp/bridge/rmgr/drv_interface.c
> @@ -58,16 +58,8 @@
>  #include <linux/init.h>
>  #include <linux/moduleparam.h>
>  #include <linux/cdev.h>
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifndef CONFIG_OMAP3_PM
> -#include <mach/omap-pm.h>
> -#else
> -#include <mach/resource.h>
> -#include <mach/prcm_34xx.h>
> -#endif
> -#endif
> -#endif
> +
> +#include <mach/board-3430sdp.h>
> 
>  /*  ----------------------------------- DSP/BIOS Bridge */
>  #include <dspbridge/std.h>
> @@ -108,16 +100,14 @@
>  #include <dspbridge/dbreg.h>
>  #endif
> 
> -#ifndef DISABLE_BRIDGE_PM
> -#ifndef DISABLE_BRIDGE_DVFS
> -#ifndef CONFIG_OMAP3_PM
> -#define PRCM_VDD1 1
> -struct clk *clk_handle;
> -#endif
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +#if (defined CONFIG_OMAP_PM_NOOP) || (defined CONFIG_OMAP_PM_SRF)
> +#include <mach/omap-pm.h>
>  #endif
>  #endif
> 
> 
> +
>  #define BRIDGE_NAME "C6410"
>  /*  ----------------------------------- Globals */
>  #define DRIVER_NAME  "DspBridge"
> @@ -149,7 +139,7 @@ static u32 phys_mempool_base;
>  static u32 phys_mempool_size;
>  static int tc_wordswapon;      /* Default value is always false */
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> +#ifdef CONFIG_PM
>  struct omap34xx_bridge_suspend_data {
>         int suspended;
>         wait_queue_head_t suspend_wq;
> @@ -219,11 +209,33 @@ static struct file_operations bridge_fops = {
>         .mmap           = bridge_mmap,
>  };
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> +#ifdef CONFIG_PM
>  static u32 timeOut = 1000;
> +#ifdef CONFIG_BRIDGE_DVFS
> +static struct clk *clk_handle;
> +s32 dsp_max_opps = VDD1_OPP3;
> +#endif
> 
>  static int bridge_suspend(struct platform_device *pdev, pm_message_t state);
>  static int bridge_resume(struct platform_device *pdev);
> +
> +/* Maximum Opps that can be requested by IVA*/
> +/*vdd1 rate table*/
> +#if (defined CONFIG_OMAP_PM_NOOP) || (defined CONFIG_OMAP_PM_SRF)
> +const struct vdd_prcm_config vdd1_rate_table_bridge[] = {
> +       {0, 0, 0},
> +       /*OPP1*/
> +       {S125M, VDD1_OPP1, 0},
> +       /*OPP2*/
> +       {S250M, VDD1_OPP2, 0},
> +       /*OPP3*/
> +       {S500M, VDD1_OPP3, 0},
> +       /*OPP4*/
> +       {S550M, VDD1_OPP4, 0},
> +       /*OPP5*/
> +       {S600M, VDD1_OPP5, 0},
> +};
> +#endif
>  #endif
> 
>  static void bridge_free(struct device *dev);
> @@ -235,41 +247,27 @@ static int omap34xx_bridge_probe(struct platform_device *dev)
>         return 0;
>  }
> 
> -static struct platform_device omap_dspbridge_dev = {
> +static struct dspbridge_platform_data dspbridge_pdata = {
> +#if (defined CONFIG_OMAP_PM_NOOP) || (defined CONFIG_OMAP_PM_SRF)
> +       .dsp_set_min_opp = omap_pm_dsp_set_min_opp,
> +       .dsp_get_opp = omap_pm_dsp_get_opp,
> +       .cpu_set_freq = omap_pm_cpu_set_freq,
> +       .cpu_get_freq = omap_pm_cpu_get_freq,
> +#endif
> +
> +};
> +
> +struct platform_device omap_dspbridge_dev = {
>                 .name = BRIDGE_NAME,
>                 .id = -1,
>                 .num_resources = 0,
>                 .dev = {
>                 .release = bridge_free,
> +               .platform_data = &dspbridge_pdata,
>                 },
>                 .resource = NULL,
>  };
> 
> -
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifndef CONFIG_OMAP3_PM
> -/* Maximum Opps that can be requested by IVA*/
> -s32 dsp_max_opps = VDD1_OPP3;
> -/*vdd1 rate table*/
> -const struct vdd_prcm_config vdd1_rate_table[] = {
> -       {0, 0, 0},
> -       /*OPP1*/
> -       {S125M, VDD1_OPP1, 0},
> -       /*OPP2*/
> -       {S250M, VDD1_OPP2, 0},
> -       /*OPP3*/
> -       {S500M, VDD1_OPP3, 0},
> -       /*OPP4*/
> -       {S550M, VDD1_OPP4, 0},
> -       /*OPP5*/
> -       {S600M, VDD1_OPP5, 0},
> -};
> -#else
> -/* Maximum Opps that can be requested by IVA*/
> -s32 dsp_max_opps = CO_VDD1_OPP3;
> -#endif
> -
>  u32 vdd1_dsp_freq[6][4] = {
>         {0, 0, 0, 0},
>         /*OPP1*/
> @@ -284,6 +282,7 @@ u32 vdd1_dsp_freq[6][4] = {
>         {0, 430000, 355000, 430000},
>  };
> 
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> 
>  static int dspbridge_post_scale(struct notifier_block *op, unsigned long level,
>                                 void *ptr)
> @@ -292,27 +291,11 @@ static int dspbridge_post_scale(struct notifier_block *op, unsigned long level,
>         return 0;
>  }
> 
> -#ifndef CONFIG_OMAP3_PM
>  static struct notifier_block iva_clk_notifier = {
>         .notifier_call = dspbridge_post_scale,
>         NULL,
>  };
> 
> -#else
> -/* The handle for setting constraints */
> -struct constraint_handle *dsp_constraint_handle;
> -struct constraint_handle *mpu_constraint_handle;
> -
> -static struct notifier_block omap34xxbridge_post_scale = {
> -       .notifier_call = dspbridge_post_scale,
> -       NULL,
> -};
> -static struct constraint_id cnstr_id_vdd1 = {
> -       .type = RES_OPP_CO,
> -       .data = (void *)"vdd1_opp",
> -};
> -#endif
> -#endif
>  #endif
> 
>  static struct platform_driver bridge_driver_ldm = {
> @@ -321,7 +304,7 @@ static struct platform_driver bridge_driver_ldm = {
>               .name     = BRIDGE_NAME,
>          },
>        .probe = omap34xx_bridge_probe,
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> +#ifdef CONFIG_PM
>        .suspend = bridge_suspend,
>        .resume = bridge_resume,
>  #endif
> @@ -344,6 +327,9 @@ static int __init bridge_init(void)
>         u32 temp;
>         dev_t   dev = 0 ;
>         int     result;
> +       int i = 0;
> +       struct dspbridge_platform_data *pdata =
> +                               omap_dspbridge_dev.dev.platform_data;
> 
>         /* use 2.6 device model */
>         if (driver_major) {
> @@ -409,7 +395,7 @@ static int __init bridge_init(void)
>         if (!status)
>                 status = platform_device_register(&omap_dspbridge_dev);
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> +#ifdef CONFIG_PM
>         /* Initialize the wait queue */
>         if (!status) {
>                 bridge_suspend_data.suspended = 0;
> @@ -486,9 +472,11 @@ static int __init bridge_init(void)
>                         GT_0trace(driverTrace, GT_5CLASS,
>                                         "DSP/BIOS Bridge driver loaded\n");
>                 }
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifndef CONFIG_OMAP3_PM
> +#ifdef CONFIG_PM
> +#if (defined CONFIG_OMAP_PM_NOOP) || (defined CONFIG_OMAP_PM_SRF)
> +               for (i = 0; i < 5; i++)
> +                       pdata->mpu_speed[i] = vdd1_rate_table_bridge[i].speed;
> +
>                 clk_handle = clk_get(NULL, "iva2_ck");
>                 if (!clk_handle) {
>                         GT_0trace(driverTrace, GT_7CLASS,
> @@ -505,19 +493,6 @@ static int __init bridge_init(void)
>                         "clk_notifier_register FAIL for iva2_ck \n");
>                 }
> 
> -#else
> -               /* Register for the constraints */
> -               dsp_constraint_handle = constraint_get("dspbridge",
> -                                                     &cnstr_id_vdd1);
> -               constraint_register_post_notification(dsp_constraint_handle,
> -                                                &omap34xxbridge_post_scale,
> -                                                CO_VDD1_OPP5 + 1);
> -               mpu_constraint_handle = constraint_get("mpubridge",
> -                                                     &cnstr_id_vdd1);
> -               constraint_register_post_notification(mpu_constraint_handle,
> -                                                &omap34xxbridge_post_scale,
> -                                                CO_VDD1_OPP5 + 1);
> -#endif
>  #endif
>  #endif
>         }
> @@ -536,10 +511,9 @@ static void __exit bridge_exit(void)
>         bool ret;
>         GT_0trace(driverTrace, GT_ENTER, "-> driver_exit\n");
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -       /* remove the constraints */
> -#ifndef CONFIG_OMAP3_PM
> +       /* unregister the clock notifier */
> +#ifdef CONFIG_PM
> +#if (defined CONFIG_OMAP_PM_NOOP) || (defined CONFIG_OMAP_PM_SRF)
>         if (!clk_notifier_unregister(clk_handle, &iva_clk_notifier)) {
>                 GT_0trace(driverTrace, GT_7CLASS,
>                 "clk_notifier_unregister PASS for iva2_ck \n");
> @@ -551,38 +525,8 @@ static void __exit bridge_exit(void)
>         clk_put(clk_handle);
>         clk_handle = NULL;
> 
> -#else
> -       if (dsp_constraint_handle != NULL) {
> -               GT_0trace(driverTrace, GT_7CLASS,
> -                        "bridge_exit: remove constraints\n");
> -               constraint_remove(dsp_constraint_handle);
> -               constraint_unregister_post_notification(dsp_constraint_handle,
> -                                               &omap34xxbridge_post_scale,
> -                                               CO_VDD1_OPP5 + 1);
> -               constraint_put(dsp_constraint_handle);
> -               dsp_constraint_handle = NULL;
> -       } else {
> -               GT_0trace(driverTrace, GT_7CLASS,
> -                        "dsp_constraint_handle is NULL\n");
> -
> -       }
> -       if (mpu_constraint_handle != NULL) {
> -               GT_0trace(driverTrace, GT_7CLASS,
> -                        "bridge_exit: remove constraints\n");
> -               constraint_remove(mpu_constraint_handle);
> -               constraint_unregister_post_notification(mpu_constraint_handle,
> -                                               &omap34xxbridge_post_scale,
> -                                               CO_VDD1_OPP5 + 1);
> -               constraint_put(mpu_constraint_handle);
> -               mpu_constraint_handle = NULL;
> -       } else {
> -               GT_0trace(driverTrace, GT_7CLASS,
> -                        "mpu_constraint_handle is NULL\n");
> -
> -       }
> -#endif /*#ifndef CONFIG_OMAP3_PM*/
> -#endif /*#ifndef CONFIG_DISABLE_BRIDGE_DVFS*/
> -#endif /*#ifndef CONFIG_DISABLE_BRIDGE_PM*/
> +#endif
> +#endif /*#ifdef CONFIG_PM*/
>         /* unregister bridge driver */
>         platform_device_unregister(&omap_dspbridge_dev);
>         platform_driver_unregister(&bridge_driver_ldm);
> @@ -738,7 +682,7 @@ static int bridge_ioctl(struct inode *ip, struct file *filp, unsigned int code,
>         union Trapped_Args pBufIn;
> 
>         DBC_Require(filp != NULL);
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> +#ifdef CONFIG_PM
>         status = omap34xxbridge_suspend_lockout(&bridge_suspend_data, filp);
>         if (status != 0)
>                 return status;
> @@ -814,7 +758,7 @@ DSP_STATUS DRV_RemoveAllResources(HANDLE hPCtxt)
>  }
>  #endif
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> +#ifdef CONFIG_PM
> 
>  static int bridge_suspend(struct platform_device *pdev, pm_message_t state)
>  {
> diff --git a/drivers/dsp/bridge/rmgr/node.c b/drivers/dsp/bridge/rmgr/node.c
> index db6b287..27ef481 100644
> --- a/drivers/dsp/bridge/rmgr/node.c
> +++ b/drivers/dsp/bridge/rmgr/node.c
> @@ -152,16 +152,6 @@
>  #include <dspbridge/resourcecleanup.h>
>  #endif
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifndef CONFIG_OMAP3_PM
> -#include <mach/omap-pm.h>
> -#include <mach/board-3430sdp.h>
> -#else
> -#include <mach/resource.h>
> -#endif
> -#endif
> -#endif
> 
>  #define NODE_SIGNATURE      0x45444f4e /* "EDON" */
>  #define NODEMGR_SIGNATURE   0x52474d4e /* "RGMN" */
> @@ -374,13 +364,8 @@ static struct NLDR_FXNS nldrFxns = {
>         NLDR_Load,
>         NLDR_Unload,
>  };
> -
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifdef CONFIG_OMAP3_PM
> -extern struct constraint_handle *mpu_constraint_handle;
> -#endif
> -#endif
> +#ifdef CONFIG_PM
> +extern struct platform_device omap_dspbridge_dev;
>  #endif
> 
>  enum NODE_STATE NODE_GetState(HANDLE hNode)
> @@ -1324,6 +1309,11 @@ DSP_STATUS NODE_Create(struct NODE_OBJECT *hNode)
>         bool bJustWokeDSP = false;
>         struct DSP_CBDATA cbData;
>         u32 procId = 255;
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +       struct dspbridge_platform_data *pdata =
> +                               omap_dspbridge_dev.dev.platform_data;
> +#endif
> +
> 
>         DBC_Require(cRefs > 0);
>         GT_1trace(NODE_debugMask, GT_ENTER, "NODE_Create: hNode: 0x%x\n",
> @@ -1364,24 +1354,18 @@ DSP_STATUS NODE_Create(struct NODE_OBJECT *hNode)
> 
>         if (DSP_SUCCEEDED(status)) {
>                 /* If node's create function is not loaded, load it */
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
>                 /* Boost the OPP level to max level that DSP can be requested */
> -#ifndef CONFIG_OMAP3_PM
> -               omap_pm_cpu_set_freq(vdd1_rate_table[VDD1_OPP3].speed);
> -               GT_1trace(NODE_debugMask, GT_4CLASS, "opp level"
> -               "after setting to VDD1_OPP3 is %d\n",
> -               omap_pm_dsp_get_opp());
> -#else
> -               if (constraint_set(mpu_constraint_handle,
> -                  CO_VDD1_OPP3) != 0)
> -                       GT_1trace(NODE_debugMask, GT_4CLASS, "NODE_Create:"
> -                       "Constraint set of %d failed\n", CO_VDD1_OPP3);
> -               else
> -                       GT_1trace(NODE_debugMask, GT_4CLASS, "NODE_Create:"
> -                                "Constraint set of %d passed\n",
> -                                CO_VDD1_OPP3);
> -#endif
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +#ifndef CONFIG_CPU_FREQ
> +               if (pdata->cpu_set_freq) {
> +                       (*pdata->cpu_set_freq)(pdata->mpu_speed[VDD1_OPP3]);
> +
> +                       if (pdata->dsp_get_opp) {
> +                               GT_1trace(NODE_debugMask, GT_4CLASS, "opp level"
> +                               "after setting to VDD1_OPP3 is %d\n",
> +                               (*pdata->dsp_get_opp)());
> +                       }
> +               }
>  #endif
>  #endif
>                 status = hNodeMgr->nldrFxns.pfnLoad(hNode->hNldrNode,
> @@ -1398,27 +1382,20 @@ DSP_STATUS NODE_Create(struct NODE_OBJECT *hNode)
>                                  "NODE_Create: failed to load"
>                                  " create code: 0x%x\n", status);
>                 }
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
>                 /* Request the lowest OPP level*/
> -#ifndef CONFIG_OMAP3_PM
> -               omap_pm_cpu_set_freq(vdd1_rate_table[VDD1_OPP1].speed);
> -               GT_1trace(NODE_debugMask, GT_4CLASS, "opp level"
> -               "after setting to VDD1_OPP1 is %d\n",
> -               omap_pm_dsp_get_opp());
> -#else
> -               if (constraint_set(mpu_constraint_handle,
> -                  (CO_VDD1_OPP1)) != 0) {
> -                       GT_1trace(NODE_debugMask, GT_4CLASS,
> -                                "NODE_Create: Constraint set of %d "
> -                                "failed\n", CO_VDD1_OPP1);
> -               } else {
> -                       GT_1trace(NODE_debugMask, GT_4CLASS, "NODE_Create:"
> -                       "Constraint set of %d passed\n", CO_VDD1_OPP1);
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +#ifndef CONFIG_CPU_FREQ
> +               if (pdata->cpu_set_freq) {
> +                       (*pdata->cpu_set_freq)(pdata->mpu_speed[VDD1_OPP1]);
> +
> +                       if (pdata->dsp_get_opp) {
> +                               GT_1trace(NODE_debugMask, GT_4CLASS, "opp level"
> +                               "after setting to VDD1_OPP1 is %d\n",
> +                               (*pdata->dsp_get_opp)());
> +                       }
>                 }
>  #endif
>  #endif
> -#endif
>                 /* Get address of iAlg functions, if socket node */
>                 if (DSP_SUCCEEDED(status)) {
>                         if (nodeType == NODE_DAISSOCKET) {
> diff --git a/drivers/dsp/bridge/rmgr/proc.c b/drivers/dsp/bridge/rmgr/proc.c
> index e5bd3e1..c13248c 100644
> --- a/drivers/dsp/bridge/rmgr/proc.c
> +++ b/drivers/dsp/bridge/rmgr/proc.c
> @@ -148,16 +148,6 @@
>  #ifndef RES_CLEANUP_DISABLE
>  #include <dspbridge/resourcecleanup.h>
>  #endif
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifndef CONFIG_OMAP3_PM
> -#include <mach/omap-pm.h>
> -#include <mach/board-3430sdp.h>
> -#else
> -#include <mach/resource.h>
> -#endif
> -#endif
> -#endif
>  /*  ----------------------------------- Defines, Data Structures, Typedefs */
>  #define PROC_SIGNATURE    0x434F5250   /* "PROC" (in reverse). */
>  #define MAXCMDLINELEN       255
> @@ -199,12 +189,8 @@ static u32 cRefs;
> 
>  struct SYNC_CSOBJECT *hProcLock;       /* For critical sections */
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifdef CONFIG_OMAP3_PM
> -extern struct constraint_handle *mpu_constraint_handle;
> -#endif
> -#endif
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +extern struct platform_device omap_dspbridge_dev;
>  #endif
> 
>  /*  ----------------------------------- Function Prototypes */
> @@ -1053,6 +1039,10 @@ DSP_STATUS PROC_Load(DSP_HPROCESSOR hProcessor, IN CONST s32 iArgc,
>  #ifdef OPT_LOAD_TIME_INSTRUMENTATION
>         do_gettimeofday(&tv1);
>  #endif
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +       struct dspbridge_platform_data *pdata =
> +                               omap_dspbridge_dev.dev.platform_data;
> +#endif
>         GT_2trace(PROC_DebugMask, GT_ENTER, "Entered PROC_Load, args:\n\t"
>                  "hProcessor:  0x%x\taArgv: 0x%x\n", hProcessor, aArgv[0]);
>         /* Call the WMD_BRD_Load Fxn */
> @@ -1223,19 +1213,11 @@ DSP_STATUS PROC_Load(DSP_HPROCESSOR hProcessor, IN CONST s32 iArgc,
>         if (DSP_SUCCEEDED(status)) {
>                 /* Now, attempt to load an exec: */
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
>         /* Boost the OPP level to Maximum level supported by baseport*/
> -#ifndef CONFIG_OMAP3_PM
> -       omap_pm_cpu_set_freq(vdd1_rate_table[VDD1_OPP5].speed);
> -#else
> -       if (constraint_set(mpu_constraint_handle, CO_VDD1_OPP5) != 0)
> -               GT_1trace(PROC_DebugMask, GT_4CLASS, "PROC_Load:"
> -                         "Constraint set of %d failed\n", CO_VDD1_OPP5);
> -       else
> -               GT_1trace(PROC_DebugMask, GT_4CLASS, "PROC_Load:"
> -                        "Constraint set of %d passed\n", CO_VDD1_OPP5);
> -#endif
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +#ifndef CONFIG_CPU_FREQ
> +       if (pdata->cpu_set_freq)
> +               (*pdata->cpu_set_freq)(pdata->mpu_speed[VDD1_OPP5]);
>  #endif
>  #endif
>                 status = COD_LoadBase(hCodMgr, iArgc, (char **)aArgv,
> @@ -1255,21 +1237,11 @@ DSP_STATUS PROC_Load(DSP_HPROCESSOR hProcessor, IN CONST s32 iArgc,
>                                          "COD_Load  status 0x%x \n", status);
>                         }
>                 }
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -       /* Requesting the lowest opp supported by baseport*/
> -#ifndef CONFIG_OMAP3_PM
> -               omap_pm_cpu_set_freq(vdd1_rate_table[VDD1_OPP1].speed);
> -#else
> -               if (constraint_set(mpu_constraint_handle, CO_VDD1_OPP1) != 0)
> -                       GT_1trace(PROC_DebugMask, GT_4CLASS, "PROC_Load:"
> -                                "Constraint setting of %d failed\n",
> -                                CO_VDD1_OPP1);
> -               else
> -                       GT_1trace(PROC_DebugMask, GT_4CLASS, "PROC_Load:"
> -                                "Constraint setting  of %d passed\n",
> -                                CO_VDD1_OPP1);
> -#endif
> +       /* Requesting the lowest opp supported*/
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +#ifndef CONFIG_CPU_FREQ
> +       if (pdata->cpu_set_freq)
> +               (*pdata->cpu_set_freq)(pdata->mpu_speed[VDD1_OPP1]);
>  #endif
>  #endif
> 
> diff --git a/drivers/dsp/bridge/services/clk.c b/drivers/dsp/bridge/services/clk.c
> index b469509..dacb013 100644
> --- a/drivers/dsp/bridge/services/clk.c
> +++ b/drivers/dsp/bridge/services/clk.c
> @@ -100,9 +100,8 @@ static struct SERVICES_Clk_t SERVICES_Clks[] = {
>         {NULL, ""}
>  };
> 
> -
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -extern struct platform_device dspbridge_device;
> +#ifdef CONFIG_PM
> +extern struct platform_device omap_dspbridge_dev;
>  #endif
> 
> 
> @@ -153,8 +152,8 @@ bool CLK_Init(void)
>         /* Get the clock handles from base port and store locally */
>         while (i < SERVICESCLK_NOT_DEFINED) {
>                 /* get the handle from BP */
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -               clk_handle = clk_get(&dspbridge_device.dev,
> +#ifndef CONFIG_PM
> +               clk_handle = clk_get(&omap_dspbridge_dev.dev,
>                              SERVICES_Clks[i].clk_name);
>  #else
>                 clk_handle = clk_get(NULL, SERVICES_Clks[i].clk_name);
> diff --git a/drivers/dsp/bridge/wmd/io_sm.c b/drivers/dsp/bridge/wmd/io_sm.c
> index 08bc4d3..576f43f 100644
> --- a/drivers/dsp/bridge/wmd/io_sm.c
> +++ b/drivers/dsp/bridge/wmd/io_sm.c
> @@ -111,15 +111,6 @@
> 
>  /*  ----------------------------------- Host OS */
>  #include <dspbridge/host_os.h>
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifndef CONFIG_OMAP3_PM
> -#include <mach/omap-pm.h>
> -#else
> -#include <mach/resource.h>
> -#endif
> -#endif
> -#endif
> 
>  /*  ----------------------------------- DSP/BIOS Bridge */
>  #include <dspbridge/std.h>
> @@ -249,19 +240,17 @@ static DSP_STATUS registerSHMSegs(struct IO_MGR *hIOMgr,
> 
>  extern u32 DRV_GetFirstDevExtension();
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifdef CONFIG_OMAP3_PM
> -/* The maximum number of OPPs that are supported by Baseport */
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +/* The maximum number of OPPs that are supported */
>  extern s32 dsp_max_opps;
>  /* The Vdd1 opp table information */
>  extern u32 vdd1_dsp_freq[6][4] ;
> -/* The contraint handle for OPP information */
> -extern struct constraint_handle *dsp_constraint_handle;
> -#endif
> -#endif
> +
> +extern struct platform_device omap_dspbridge_dev;
>  #endif
> 
> +
> +
>  #if GT_TRACE
>  static struct GT_Mask dsp_trace_mask = { NULL, NULL }; /* GT trace variable */
>  #endif
> @@ -1714,9 +1703,10 @@ void IO_IntrDSP2(IN struct IO_MGR *pIOMgr, IN u16 wMbVal)
>  DSP_STATUS IO_SHMsetting(IN struct IO_MGR *hIOMgr, IN enum SHM_DESCTYPE desc,
>                          IN void *pArgs)
>  {
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
>         u32 i;
> +       struct dspbridge_platform_data *pdata =
> +                               omap_dspbridge_dev.dev.platform_data;
> 
>         switch (desc) {
>         case SHM_CURROPP:
> @@ -1756,11 +1746,8 @@ DSP_STATUS IO_SHMsetting(IN struct IO_MGR *hIOMgr, IN enum SHM_DESCTYPE desc,
>                 DBG_Trace(DBG_LEVEL5, "OPP shared memory - max OPP number: "
>                          "%d\n", hIOMgr->pSharedMem->oppTableStruct.numOppPts);
>                 /* Update the current OPP number */
> -#ifndef CONFIG_OMAP3_PM
> -               i = omap_pm_dsp_get_opp();
> -#else
> -               i = constraint_get_level(dsp_constraint_handle);
> -#endif
> +               if (pdata->dsp_get_opp)
> +                       i = (*pdata->dsp_get_opp)();
>                 hIOMgr->pSharedMem->oppTableStruct.currOppPt = i;
>                 DBG_Trace(DBG_LEVEL7, "OPP value programmed to shared memory: "
>                          "%d\n", i);
> @@ -1774,7 +1761,6 @@ DSP_STATUS IO_SHMsetting(IN struct IO_MGR *hIOMgr, IN enum SHM_DESCTYPE desc,
> 
>         }
>  #endif
> -#endif
>         return DSP_SOK;
>  }
> 
> diff --git a/drivers/dsp/bridge/wmd/tiomap3430.c b/drivers/dsp/bridge/wmd/tiomap3430.c
> index 3fa29c7..92bb00c 100644
> --- a/drivers/dsp/bridge/wmd/tiomap3430.c
> +++ b/drivers/dsp/bridge/wmd/tiomap3430.c
> @@ -1142,8 +1142,6 @@ static DSP_STATUS WMD_DEV_Ctrl(struct WMD_DEV_CONTEXT *pDevContext, u32 dwCmd,
>                 DBG_Trace(DBG_LEVEL5, "WMDIOCTL_PWR_HIBERNATE\n");
>                 status = handle_hibernation_fromDSP(pDevContext);
>                 break;
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
>         case WMDIOCTL_PRESCALE_NOTIFY:
>                 DBG_Trace(DBG_LEVEL5, "WMDIOCTL_PRESCALE_NOTIFY\n");
>                 status = PreScale_DSP(pDevContext, pArgs);
> @@ -1156,8 +1154,6 @@ static DSP_STATUS WMD_DEV_Ctrl(struct WMD_DEV_CONTEXT *pDevContext, u32 dwCmd,
>                 DBG_Trace(DBG_LEVEL5, "WMDIOCTL_CONSTRAINT_REQUEST\n");
>                 status = handle_constraints_set(pDevContext, pArgs);
>                 break;
> -#endif
> -#endif
>         default:
>                 status = DSP_EFAIL;
>                 DBG_Trace(DBG_LEVEL7, "Error in WMD_BRD_Ioctl \n");
> @@ -1292,10 +1288,13 @@ static DSP_STATUS WMD_BRD_MemMap(struct WMD_DEV_CONTEXT *hDevContext,
>         u32 *pPhysAddrPageTbl = NULL;
>         struct vm_area_struct *vma;
>         struct mm_struct *mm = current->mm;
> +       struct CFG_HOSTRES resources;
> 
>         DBG_Trace(DBG_ENTER, "> WMD_BRD_MemMap hDevContext %x, pa %x, va %x, "
>                  "size %x, ulMapAttr %x\n", hDevContext, ulMpuAddr, ulVirtAddr,
>                  ulNumBytes, ulMapAttr);
> +       status = CFG_GetHostResources(
> +                (struct CFG_DEVNODE *)DRV_GetFirstDevExtension(), &resources);
>         if (ulNumBytes == 0)
>                 return DSP_EINVALIDARG;
> 
> @@ -1423,6 +1422,12 @@ func_cont:
>          * This is called from here instead from PteUpdate to avoid unnecessary
>          * repetition while mapping non-contiguous physical regions of a virtual
>          * region */
> +       HW_PWRST_IVA2RegGet(resources.dwPrmBase, &temp);
> +       if ((temp & 0x03) != 0x03 || (temp & 0x03) != 0x02) {
> +               DBG_Trace(DBG_LEVEL7, "temp value is 0x%x\n", temp);
> +               CLK_Enable(SERVICESCLK_iva2_ck);
> +               WakeDSP(pDevContext, NULL);
> +       }
>         HW_MMU_TLBFlushAll(pDevContext->dwDSPMmuBase);
>         DBG_Trace(DBG_ENTER, "< WMD_BRD_MemMap status %x\n", status);
>         return status;
> @@ -1564,6 +1569,7 @@ static DSP_STATUS WMD_BRD_MemUnMap(struct WMD_DEV_CONTEXT *hDevContext,
>          /* It is better to flush the TLB here, so that any stale old entries
>          * get flushed */
>  EXIT_LOOP:
> +       IO_InterruptDSP2(pDevContext, MBX_PM_DSPWAKEUP);
>         HW_MMU_TLBFlushAll(pDevContext->dwDSPMmuBase);
>         DBG_Trace(DBG_LEVEL1, "WMD_BRD_MemUnMap vaCurr %x, pteAddrL1 %x "
>                   "pteAddrL2 %x\n", vaCurr, pteAddrL1, pteAddrL2);
> @@ -2048,6 +2054,7 @@ func_cont:
>          * repetition while mapping non-contiguous physical regions of a virtual
>          * region */
>         /* Waking up DSP before calling TLB Flush */
> +       IO_InterruptDSP2(pDevContext, MBX_PM_DSPWAKEUP);
>         HW_MMU_TLBFlushAll(pDevContext->dwDSPMmuBase);
>         DBG_Trace(DBG_LEVEL7, "< WMD_BRD_MemMap  at end status %x\n", status);
>         return status;
> diff --git a/drivers/dsp/bridge/wmd/tiomap3430_pwr.c b/drivers/dsp/bridge/wmd/tiomap3430_pwr.c
> index cdc2227..8659fda 100644
> --- a/drivers/dsp/bridge/wmd/tiomap3430_pwr.c
> +++ b/drivers/dsp/bridge/wmd/tiomap3430_pwr.c
> @@ -61,24 +61,15 @@
>  #include "_tiomap.h"
>  #include "_tiomap_pwr.h"
>  #include "_tiomap_util.h"
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifndef CONFIG_OMAP3_PM
> -#include <mach/omap-pm.h>
> +#ifdef CONFIG_PM
>  #include <mach/board-3430sdp.h>
> -#else
> -#include <mach/resource.h>
> -#endif
>  #endif
> +#ifdef CONFIG_PM
> +extern struct platform_device omap_dspbridge_dev;
> +#define VDD1_OPP1 1
> +#define VDD1_OPP5 5
>  #endif
>  extern s32 dsp_test_sleepstate;
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifdef CONFIG_OMAP3_PM
> -extern struct constraint_handle *dsp_constraint_handle;
> -#endif
> -#endif
> -#endif
>  extern struct MAILBOX_CONTEXT mboxsetting;
> 
>  /*
> @@ -88,31 +79,21 @@ extern struct MAILBOX_CONTEXT mboxsetting;
>  DSP_STATUS handle_constraints_set(struct WMD_DEV_CONTEXT *pDevContext,
>                                   IN void *pArgs)
>  {
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
>         u32 *pConstraintVal;
> +       struct dspbridge_platform_data *pdata =
> +                               omap_dspbridge_dev.dev.platform_data;
> 
>         pConstraintVal = (u32 *)(pArgs);
>         /* Read the target value requested by DSP  */
>         DBG_Trace(DBG_LEVEL7, "handle_constraints_set: opp requested = 0x%x\n",
>                                                   (u32)*(pConstraintVal+1));
> 
> -       /* Set the new constraint in resource framework */
> -#ifndef CONFIG_OMAP3_PM
> -       omap_pm_dsp_set_min_opp((u32)*(pConstraintVal+1));
> +       /* Set the new opp value */
> +       if (pdata->dsp_set_min_opp)
> +               (*pdata->dsp_set_min_opp)((u32)*(pConstraintVal+1));
>         return DSP_SOK;
> -#else
> -       if (constraint_set(dsp_constraint_handle,
> -                          (u32)*(pConstraintVal+1)) == 0)
> -               return DSP_SOK;
> -       else {
> -               DBG_Trace(DBG_LEVEL7,
> -                        "handle_constraints_set: Constraint set failed\n");
> -               return DSP_EFAIL;
> -       }
> -#endif /*#ifndef CONFIG_OMAP3_PM*/
> -#endif /*#ifndef CONFIG_DISABLE_BRIDGE_DVFS */
> -#endif /*#ifndef CONFIG_DISABLE_BRIDGE_PM */
> +#endif /* #if (defined  CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS) */
>         return DSP_SOK;
>  }
> 
> @@ -122,13 +103,15 @@ DSP_STATUS handle_constraints_set(struct WMD_DEV_CONTEXT *pDevContext,
>   */
>  DSP_STATUS handle_hibernation_fromDSP(struct WMD_DEV_CONTEXT *pDevContext)
>  {
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> +       DSP_STATUS status = DSP_SOK;
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
>         u16 usCount = TIHELEN_ACKTIMEOUT;
>         struct CFG_HOSTRES resources;
> -       DSP_STATUS status = DSP_SOK;
>         enum HW_PwrState_t pwrState;
>         u32 opplevel;
>         struct IO_MGR *hIOMgr;
> +       struct dspbridge_platform_data *pdata =
> +                               omap_dspbridge_dev.dev.platform_data;
> 
>         status = CFG_GetHostResources(
>                  (struct CFG_DEVNODE *)DRV_GetFirstDevExtension(), &resources);
> @@ -164,40 +147,22 @@ DSP_STATUS handle_hibernation_fromDSP(struct WMD_DEV_CONTEXT *pDevContext)
>                 if (DSP_SUCCEEDED(status)) {
>                         /* Update the Bridger Driver state */
>                         pDevContext->dwBrdState = BRD_DSP_HIBERNATION;
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
>                         status = DEV_GetIOMgr(pDevContext->hDevObject, &hIOMgr);
>                         if (DSP_FAILED(status))
>                                 return status;
>                         IO_SHMsetting(hIOMgr, SHM_GETOPP, &opplevel);
>                         /* Set the OPP to low level before moving to OFF mode */
> -#ifndef CONFIG_OMAP3_PM
>                         if (opplevel != VDD1_OPP1) {
>                                 DBG_Trace(DBG_LEVEL5,
>                                         "Tiomap_pwr.c - DSP requested"
>                                         " OPP = %d, MPU requesting low"
>                                         " OPP %d instead\n", opplevel,
>                                         VDD1_OPP1);
> -                               omap_pm_dsp_set_min_opp(VDD1_OPP1);
> +                               if (pdata->dsp_set_min_opp)
> +                                       (*pdata->dsp_set_min_opp)(VDD1_OPP1);
>                                 status = DSP_SOK;
>                         }
> 
> -#else
> -                       if (opplevel != CO_VDD1_OPP1) {
> -                               DBG_Trace(DBG_LEVEL5,
> -                                       "Tiomap_pwr.c - DSP requested"
> -                                       " OPP = %d, MPU requesting low"
> -                                       " OPP %d instead\n", opplevel,
> -                                       CO_VDD1_OPP1);
> -                               if (constraint_set(dsp_constraint_handle,
> -                                                 CO_VDD1_OPP1) != 0) {
> -                                       DBG_Trace(DBG_LEVEL7,
> -                                               "handle_hibernation_fromDSP:"
> -                                               "Constraint set failed\n");
> -                                       status = DSP_EFAIL;
> -                               }
> -                       }
> -#endif
> -#endif
>                 } else {
>                         DBG_Trace(DBG_LEVEL7,
>                                  "handle_hibernation_fromDSP- FAILED\n");
> @@ -206,7 +171,7 @@ DSP_STATUS handle_hibernation_fromDSP(struct WMD_DEV_CONTEXT *pDevContext)
>         return status;
> 
>  #endif
> -       return DSP_SOK;
> +       return status;
> 
>  }
>  /*
> @@ -217,7 +182,7 @@ DSP_STATUS SleepDSP(struct WMD_DEV_CONTEXT *pDevContext, IN u32 dwCmd,
>                    IN void *pArgs)
>  {
>         DSP_STATUS status = DSP_SOK;
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> +#ifdef CONFIG_PM
>         struct CFG_HOSTRES resources;
>         u16 usCount = TIHELEN_ACKTIMEOUT;
>         enum HW_PwrState_t pwrState;
> @@ -311,7 +276,7 @@ DSP_STATUS SleepDSP(struct WMD_DEV_CONTEXT *pDevContext, IN u32 dwCmd,
>  DSP_STATUS WakeDSP(struct WMD_DEV_CONTEXT *pDevContext, IN void *pArgs)
>  {
>         DSP_STATUS status = DSP_SOK;
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> +#ifdef CONFIG_PM
>         struct CFG_HOSTRES resources;
>         enum HW_PwrState_t pwrState;
> 
> @@ -441,8 +406,7 @@ DSP_STATUS DSPPeripheralClkCtrl(struct WMD_DEV_CONTEXT *pDevContext,
>   */
>  DSP_STATUS PreScale_DSP(struct WMD_DEV_CONTEXT *pDevContext, IN void *pArgs)
>  {
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
>         u32 level;
>         u32 voltage_domain;
> 
> @@ -468,8 +432,7 @@ DSP_STATUS PreScale_DSP(struct WMD_DEV_CONTEXT *pDevContext, IN void *pArgs)
>                           " state in wrong state");
>                 return DSP_EFAIL;
>         }
> -#endif /*#ifndef CONFIG_DISABLE_BRIDGE_DVFS */
> -#endif  /*#ifndef CONFIG_DISABLE_BRIDGE_PM */
> +#endif /* #if (defined CONFIG_PM)&&(CONFIG_BRIDGE_DVFS) */
>         return DSP_SOK;
>  }
> 
> @@ -480,8 +443,7 @@ DSP_STATUS PreScale_DSP(struct WMD_DEV_CONTEXT *pDevContext, IN void *pArgs)
>   */
>  DSP_STATUS PostScale_DSP(struct WMD_DEV_CONTEXT *pDevContext, IN void *pArgs)
>  {
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> +#if (defined CONFIG_PM) && (CONFIG_BRIDGE_DVFS)
>         u32 level;
>         u32 voltage_domain;
>         struct IO_MGR *hIOMgr;
> @@ -517,8 +479,7 @@ DSP_STATUS PostScale_DSP(struct WMD_DEV_CONTEXT *pDevContext, IN void *pArgs)
>                           "in wrong state");
>                 return DSP_EFAIL;
>         }
> -#endif /*#ifndef CONFIG_DISABLE_BRIDGE_DVFS*/
> -#endif /*#ifndef CONFIG_DISABLE_BRIDGE_PM*/
> +#endif /* #if (defined CONFIG_PM)&&(CONFIG_BRIDGE_DVFS) */
>         return DSP_SOK;
>  }
> 
> diff --git a/drivers/dsp/bridge/wmd/tiomap_sm.c b/drivers/dsp/bridge/wmd/tiomap_sm.c
> index 63655d9..d1724e7 100644
> --- a/drivers/dsp/bridge/wmd/tiomap_sm.c
> +++ b/drivers/dsp/bridge/wmd/tiomap_sm.c
> @@ -67,15 +67,8 @@
>  #include <dspbridge/chnl_sm.h>
>  #include "_tiomap_pwr.h"
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifndef CONFIG_OMAP3_PM
> -#include <mach/omap-pm.h>
> -#else
> -#include <mach/resource.h>
> -extern struct constraint_handle *dsp_constraint_handle;
> -#endif
> -#endif
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +extern struct platform_device omap_dspbridge_dev;
>  #endif
> 
>  /*  ----------------------------------- Defines, Data Structures, Typedefs */
> @@ -172,10 +165,10 @@ DSP_STATUS CHNLSM_InterruptDSP(struct WMD_DEV_CONTEXT *hDevContext)
>         DSP_STATUS status = DSP_SOK;
>         struct WMD_DEV_CONTEXT *pDevContext = hDevContext;
> 
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -       u32 opplevel;
> -#endif
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +       struct dspbridge_platform_data *pdata =
> +                               omap_dspbridge_dev.dev.platform_data;
> +       u32 opplevel = 0;
>  #endif
>         HW_STATUS hwStatus;
>         u32 mbxFull;
> @@ -187,56 +180,38 @@ DSP_STATUS CHNLSM_InterruptDSP(struct WMD_DEV_CONTEXT *hDevContext)
>         status = CFG_GetHostResources(
>                         (struct CFG_DEVNODE *)DRV_GetFirstDevExtension(),
>                         &resources);
> +#if (defined CONFIG_PM) && (defined CONFIG_BRIDGE_DVFS)
> +               if (pdata->dsp_get_opp)
> +                       opplevel = (*pdata->dsp_get_opp)();
> 
> -       if  (pDevContext->dwBrdState == BRD_DSP_HIBERNATION ||
> -           pDevContext->dwBrdState == BRD_HIBERNATION) {
> -               pDevContext->dwBrdState = BRD_RUNNING;
> -#ifndef CONFIG_DISABLE_BRIDGE_PM
> -#ifndef CONFIG_DISABLE_BRIDGE_DVFS
> -#ifndef CONFIG_OMAP3_PM
> -               opplevel = omap_pm_dsp_get_opp();
>                 /* If OPP is at minimum level, increase it before waking up
>                 * the DSP */
>                 if (opplevel == 1) {
> -                       omap_pm_dsp_set_min_opp(opplevel+1);
> -                       DBG_Trace(DBG_LEVEL7, "CHNLSM_InterruptDSP:Setting "
> -                       "the vdd1 constraint level to %d before "
> -                       "waking DSP \n", (opplevel + 1));
> -               }
> -
> -#else
> -               opplevel = constraint_get_level(dsp_constraint_handle);
> -               /* If OPP is at minimum level, increase it before waking up
> -                * the DSP */
> -               if (opplevel == 1) {
> -                       if (constraint_set(dsp_constraint_handle,
> -                          (opplevel+1)) != 0) {
> +                       if (pdata->dsp_set_min_opp) {
> +                               (*pdata->dsp_set_min_opp)(opplevel+1);
>                                 DBG_Trace(DBG_LEVEL7, "CHNLSM_InterruptDSP: "
> -                                        "Constraint set failed\n");
> -                               return DSP_EFAIL;
> +                                       "Setting the vdd1 opp level to %d "
> +                                       "before waking DSP \n",
> +                                       (opplevel + 1));
>                         }
> -                       DBG_Trace(DBG_LEVEL7, "CHNLSM_InterruptDSP:Setting "
> -                                "the vdd1 constraint level to %d before "
> -                                "waking DSP \n", (opplevel + 1));
>                 }
> 
>  #endif
> -#endif
> -#endif
> -               /* Read MMU register to invoke short wakeup of DSP */
> +
> +       if  (pDevContext->dwBrdState == BRD_DSP_HIBERNATION ||
> +           pDevContext->dwBrdState == BRD_HIBERNATION) {
> +               pDevContext->dwBrdState = BRD_RUNNING;
> +
>                 temp = (u32) *((REG_UWORD32 *) ((u32)
>                        (resources.dwDmmuBase) + 0x10));
> 
>                 /* Restore mailbox settings */
>                 status = HW_MBOX_restoreSettings(resources.dwMboxBase);
> -               DBG_Trace(DBG_LEVEL6, "MailBoxSettings: SYSCONFIG = 0x%x\n",
> -                         mboxsetting.sysconfig);
> -               DBG_Trace(DBG_LEVEL6, "MailBoxSettings: IRQENABLE0 = 0x%x\n",
> -                         mboxsetting.irqEnable0);
> -               DBG_Trace(DBG_LEVEL6, "MailBoxSettings: IRQENABLE1 = 0x%x\n",
> -                        mboxsetting.irqEnable1);
> -               /* Restart the peripheral clocks that were disabled */
> -               DSP_PeripheralClocks_Enable(hDevContext, NULL);
> +
> +               if (pDevContext->dwBrdState == BRD_DSP_HIBERNATION) {
> +                       /* Restart the peripheral clocks that were disabled */
> +                       DSP_PeripheralClocks_Enable(hDevContext, NULL);
> +               }
> 
>         }
>         while (--cnt) {
> --
> 1.5.6.3
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux