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