PVRSRV_ERROR SysDevicePostPowerState(IMG_UINT32 ui32DeviceIndex, PVRSRV_DEV_POWER_STATE eNewPowerState, PVRSRV_DEV_POWER_STATE eCurrentPowerState) { if ((eNewPowerState != eCurrentPowerState) && (eCurrentPowerState == PVRSRV_DEV_POWER_STATE_OFF)) { if (ui32DeviceIndex == gui32SGXDeviceID) { PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Restore SGX power")); #if defined(SUPPORT_DRI_DRM_EXT) ospm_power_using_hw_begin(OSPM_GRAPHICS_ISLAND, true); #endif } else if (ui32DeviceIndex == gui32MRSTMSVDXDeviceID) { PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Restore MSVDX power")); if (ospm_power_is_hw_on(OSPM_DISPLAY_ISLAND)) { ospm_power_island_up(OSPM_VIDEO_DEC_ISLAND); } else { ospm_power_island_up(OSPM_DISPLAY_ISLAND); ospm_power_island_up(OSPM_VIDEO_DEC_ISLAND); ospm_power_island_down(OSPM_DISPLAY_ISLAND); } } else if (ui32DeviceIndex == gui32MRSTTOPAZDeviceID) { PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Restore TOPAZ power")); if (ospm_power_is_hw_on(OSPM_DISPLAY_ISLAND)) { ospm_power_island_up(OSPM_VIDEO_ENC_ISLAND); } else { ospm_power_island_up(OSPM_DISPLAY_ISLAND); ospm_power_island_up(OSPM_VIDEO_ENC_ISLAND); ospm_power_island_down(OSPM_DISPLAY_ISLAND); } } } return PVRSRV_OK; }
PVRSRV_ERROR SysDevicePostPowerState(IMG_UINT32 ui32DeviceIndex, PVRSRV_DEV_POWER_STATE eNewPowerState, PVRSRV_DEV_POWER_STATE eCurrentPowerState) { if ((eNewPowerState != eCurrentPowerState) && (eCurrentPowerState == PVRSRV_DEV_POWER_STATE_OFF)) { if (ui32DeviceIndex == gui32SGXDeviceID) { PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Restore SGX power")); #if defined(SUPPORT_DRI_DRM_EXT) if (!ospm_power_using_hw_begin(OSPM_DISPLAY_ISLAND, true)) { return PVRSRV_ERROR_DEVICE_POWER_CHANGE_FAILURE; } if (!ospm_power_using_hw_begin(OSPM_GRAPHICS_ISLAND, true)) { ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); return PVRSRV_ERROR_DEVICE_POWER_CHANGE_FAILURE; } #if (defined CONFIG_GPU_BURST) || (defined CONFIG_GPU_BURST_MODULE) gburst_interface_power_state_set(1); #endif /* if (defined CONFIG_GPU_BURST) || (defined CONFIG_GPU_BURST_MODULE) */ #endif } #if defined(PVR_MDFLD_SYS_MSVDX_AND_TOPAZ) else if (ui32DeviceIndex == gui32MRSTMSVDXDeviceID) { PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Restore MSVDX power")); if (ospm_power_is_hw_on(OSPM_DISPLAY_ISLAND)) { ospm_power_island_up(OSPM_VIDEO_DEC_ISLAND); } else { ospm_power_island_up(OSPM_DISPLAY_ISLAND); ospm_power_island_up(OSPM_VIDEO_DEC_ISLAND); ospm_power_island_down(OSPM_DISPLAY_ISLAND); } #if 0 #if defined(SUPPORT_DRI_DRM_EXT) if (!ospm_power_using_hw_begin(OSPM_DISPLAY_ISLAND, true)) { return PVRSRV_ERROR_GENERIC; } if (!ospm_power_using_hw_begin(OSPM_VIDEO_DEC_ISLAND, true)) { ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); return PVRSRV_ERROR_GENERIC; } #endif #endif } else if (ui32DeviceIndex == gui32MRSTTOPAZDeviceID) { PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Restore TOPAZ power")); if (ospm_power_is_hw_on(OSPM_DISPLAY_ISLAND)) { ospm_power_island_up(OSPM_VIDEO_ENC_ISLAND); } else { ospm_power_island_up(OSPM_DISPLAY_ISLAND); ospm_power_island_up(OSPM_VIDEO_ENC_ISLAND); ospm_power_island_down(OSPM_DISPLAY_ISLAND); } #if 0 #if defined(SUPPORT_DRI_DRM_EXT) if (!ospm_power_using_hw_begin(OSPM_DISPLAY_ISLAND, true)) { return PVRSRV_ERROR_GENERIC; } if (!ospm_power_using_hw_begin(OSPM_VIDEO_ENC_ISLAND, true)) { ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); return PVRSRV_ERROR_GENERIC; } #endif #endif } #endif } return PVRSRV_OK; }
PVRSRV_ERROR SysDevicePrePowerState(IMG_UINT32 ui32DeviceIndex, PVRSRV_DEV_POWER_STATE eNewPowerState, PVRSRV_DEV_POWER_STATE eCurrentPowerState) { if ((eNewPowerState != eCurrentPowerState) && (eNewPowerState == PVRSRV_DEV_POWER_STATE_OFF)) { if (ui32DeviceIndex == gui32SGXDeviceID) { PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: Remove SGX power")); #if defined(SUPPORT_DRI_DRM_EXT) #if (defined CONFIG_GPU_BURST) || (defined CONFIG_GPU_BURST_MODULE) gburst_interface_power_state_set(0); #endif /* if (defined CONFIG_GPU_BURST) || (defined CONFIG_GPU_BURST_MODULE) */ ospm_power_using_hw_end(OSPM_GRAPHICS_ISLAND); /*! missed in IMG's DDK1.6, may cause system hang after early resume */ psb_irq_uninstall_islands( gpDrmDevice, OSPM_GRAPHICS_ISLAND); ospm_power_island_down(OSPM_GRAPHICS_ISLAND); #endif #ifdef CONFIG_MDFD_GL3 /* Power off GL3 */ ospm_power_island_down(OSPM_GL3_CACHE_ISLAND); #endif #if defined(SUPPORT_DRI_DRM_EXT) ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); #endif } #if defined(PVR_MDFLD_SYS_MSVDX_AND_TOPAZ) else if (ui32DeviceIndex == gui32MRSTMSVDXDeviceID) { psb_irq_uninstall_islands(gpDrmDevice, OSPM_VIDEO_DEC_ISLAND); if (ospm_power_is_hw_on(OSPM_DISPLAY_ISLAND)) { ospm_power_island_down(OSPM_VIDEO_DEC_ISLAND); } else { ospm_power_island_up(OSPM_DISPLAY_ISLAND); ospm_power_island_down(OSPM_VIDEO_DEC_ISLAND); ospm_power_island_down(OSPM_DISPLAY_ISLAND); } #if 0 #if defined(SUPPORT_DRI_DRM_EXT) ospm_power_using_hw_end(OSPM_VIDEO_DEC_ISLAND); ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); #endif #endif } else if (ui32DeviceIndex == gui32MRSTTOPAZDeviceID) { if (ospm_power_is_hw_on(OSPM_DISPLAY_ISLAND)) { ospm_power_island_down(OSPM_VIDEO_ENC_ISLAND); } else { ospm_power_island_up(OSPM_DISPLAY_ISLAND); ospm_power_island_down(OSPM_VIDEO_ENC_ISLAND); ospm_power_island_down(OSPM_DISPLAY_ISLAND); } } #if 0 #if defined(SUPPORT_DRI_DRM_EXT) ospm_power_using_hw_end(OSPM_VIDEO_ENC_ISLAND); ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); #endif #endif #endif } return PVRSRV_OK; }