From: Daniel(Qiang), Miao <qiang.m...@intel.com> code refine on video dec/enc pm status at /sys/devices/pci0000:00/0000:00:02.0/msvdx_pmstate /sys/devices/pci0000:00/0000:00:02.0/topaz_pmstate when using video driver runtime pm and dec/enc D0i3
Signed-off-by: Daniel(Qiang), Miao <qiang.m...@intel.com> Signed-off-by: Hitesh K. Patel <hitesh.k.pa...@intel.com> --- drivers/staging/mrst/drv/psb_powermgmt.c | 26 ++++++++++++++++++++++---- 1 files changed, 22 insertions(+), 4 deletions(-) diff --git a/drivers/staging/mrst/drv/psb_powermgmt.c b/drivers/staging/mrst/drv/psb_powermgmt.c index 8c50579..9a849d5 100644 --- a/drivers/staging/mrst/drv/psb_powermgmt.c +++ b/drivers/staging/mrst/drv/psb_powermgmt.c @@ -180,6 +180,7 @@ static int ospm_runtime_pm_topaz_suspend(struct drm_device *dev) int ret = 0; struct drm_psb_private *dev_priv = dev->dev_private; struct topaz_private *topaz_priv = dev_priv->topaz_private; + struct pnw_topaz_private *pnw_topaz_priv = dev_priv->topaz_private; //printk(KERN_ALERT "enter %s\n", __func__); @@ -211,17 +212,18 @@ static int ospm_runtime_pm_topaz_suspend(struct drm_device *dev) } } - TOPAZ_NEW_PMSTATE(dev, topaz_priv, PSB_PMSTATE_POWERDOWN); psb_irq_uninstall_islands(gpDrmDevice, OSPM_VIDEO_ENC_ISLAND); if(IS_MRST(dev)) { lnc_topaz_save_mtx_state(gpDrmDevice); lnc_unmap_topaz_reg(gpDrmDevice); + TOPAZ_NEW_PMSTATE(dev, topaz_priv, PSB_PMSTATE_POWERDOWN); } if(IS_MDFLD(dev)) { pnw_topaz_save_mtx_state(gpDrmDevice); pnw_unmap_topaz_reg(gpDrmDevice); + PNW_TOPAZ_NEW_PMSTATE(dev, pnw_topaz_priv, PSB_PMSTATE_POWERDOWN); } ospm_power_island_down(OSPM_VIDEO_ENC_ISLAND); //printk(KERN_ALERT "%s done\n", __func__); @@ -233,21 +235,23 @@ static int ospm_runtime_pm_topaz_resume(struct drm_device *dev) { struct drm_psb_private *dev_priv = dev->dev_private; struct topaz_private *topaz_priv = dev_priv->topaz_private; + struct pnw_topaz_private *pnw_topaz_priv = dev_priv->topaz_private; //printk(KERN_ALERT "ospm_runtime_pm_topaz_resume\n"); - TOPAZ_NEW_PMSTATE(dev, topaz_priv, PSB_PMSTATE_POWERUP); if (IS_MRST(dev)) { lnc_map_topaz_reg(gpDrmDevice); psb_irq_uninstall_islands(gpDrmDevice, OSPM_VIDEO_ENC_ISLAND); lnc_topaz_restore_mtx_state(gpDrmDevice); + TOPAZ_NEW_PMSTATE(dev, topaz_priv, PSB_PMSTATE_POWERUP); } if (IS_MDFLD(dev)) { pnw_map_topaz_reg(gpDrmDevice); psb_irq_uninstall_islands(gpDrmDevice, OSPM_VIDEO_ENC_ISLAND); pnw_topaz_restore_mtx_state(gpDrmDevice); + PNW_TOPAZ_NEW_PMSTATE(dev, pnw_topaz_priv, PSB_PMSTATE_POWERUP); } return 0; @@ -299,6 +303,9 @@ out: #else void ospm_apm_power_down_msvdx(struct drm_device *dev) { + struct drm_psb_private *dev_priv = dev->dev_private; + struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; + mutex_lock(&g_ospm_mutex); if (!ospm_power_is_hw_on(OSPM_VIDEO_DEC_ISLAND)) goto out; @@ -312,6 +319,7 @@ void ospm_apm_power_down_msvdx(struct drm_device *dev) psb_msvdx_save_context(dev); ospm_power_island_down(OSPM_VIDEO_DEC_ISLAND); gbSuspendInProgress = false; + MSVDX_NEW_PMSTATE(dev, msvdx_priv, PSB_PMSTATE_POWERDOWN); out: mutex_unlock(&g_ospm_mutex); return; @@ -319,25 +327,35 @@ out: void ospm_apm_power_down_topaz(struct drm_device *dev) { + struct drm_psb_private *dev_priv = dev->dev_private; + struct topaz_private *topaz_priv = dev_priv->topaz_private; + struct pnw_topaz_private *pnw_topaz_priv = dev_priv->topaz_private; + mutex_lock(&g_ospm_mutex); if (!ospm_power_is_hw_on(OSPM_VIDEO_ENC_ISLAND)) goto out; if (atomic_read(&g_videoenc_access_count)) goto out; - if (lnc_check_topaz_idle(dev)) - goto out; + if (IS_MRST(dev)) + if (lnc_check_topaz_idle(dev)) + goto out; + if (IS_MDFLD(dev)) + if (pnw_check_topaz_idle(dev)) + goto out; gbSuspendInProgress = true; if (IS_MRST(dev)) { psb_irq_uninstall_islands(dev, OSPM_VIDEO_ENC_ISLAND); lnc_topaz_save_mtx_state(dev); lnc_unmap_topaz_reg(dev); + TOPAZ_NEW_PMSTATE(dev, topaz_priv, PSB_PMSTATE_POWERDOWN); } if (IS_MDFLD(dev)) { psb_irq_uninstall_islands(dev, OSPM_VIDEO_ENC_ISLAND); pnw_topaz_save_mtx_state(gpDrmDevice); pnw_unmap_topaz_reg(gpDrmDevice); + PNW_TOPAZ_NEW_PMSTATE(dev, pnw_topaz_priv, PSB_PMSTATE_POWERDOWN); } ospm_power_island_down(OSPM_VIDEO_ENC_ISLAND); gbSuspendInProgress = false; -- 1.7.1 _______________________________________________ MeeGo-kernel mailing list MeeGo-kernel@lists.meego.com http://lists.meego.com/listinfo/meego-kernel