From: Fei Jiang Date: Wed, 9 May 2012 13:50:17 +0000 (+0800) Subject: kernel-drm: fix thumbernail scrambled issue when IED is enabled X-Git-Tag: 2.1b_release~760 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a3d756fb28184702073d252a5ec03eaca97be520;p=platform%2Fkernel%2Fkernel-mfld-blackbay.git kernel-drm: fix thumbernail scrambled issue when IED is enabled BZ: 32464 Video kernel driver need query DRM_CNTL_STATE register to know whether IED is enabled. Then return the state to user space driver. When widevine is running, IED will be enabled and video surface will be encrypted. So CPU will only get scambled image. For that case, need return error for vaDeriveImage and vaGetImage. Change-Id: I9da4dfa88af241fb0729695b4e9e8266e8583bb0 Reviewed-on: http://android.intel.com:8080/48098 Reviewed-by: Jiang, Fei Reviewed-by: Sun, Mingruo Reviewed-by: Qiu, Junhai Reviewed-by: Ding, Haitao Tested-by: Ding, Haitao Reviewed-by: buildbot Tested-by: buildbot --- diff --git a/drivers/staging/mrst/drv/psb_drm.h b/drivers/staging/mrst/drv/psb_drm.h index 47a3e46..72291dc 100644 --- a/drivers/staging/mrst/drv/psb_drm.h +++ b/drivers/staging/mrst/drv/psb_drm.h @@ -275,7 +275,8 @@ typedef enum { IMG_VIDEO_GET_HDMI_STATE, IMG_VIDEO_SET_HDMI_STATE, PNW_VIDEO_QUERY_ENTRY, - IMG_DISPLAY_SET_WIDI_EXT_STATE + IMG_DISPLAY_SET_WIDI_EXT_STATE, + IMG_VIDEO_IED_STATE } lnc_getparam_key_t; struct drm_lnc_video_getparam_arg { diff --git a/drivers/staging/mrst/drv/psb_drv.h b/drivers/staging/mrst/drv/psb_drv.h index 10d3073..12e02c0 100644 --- a/drivers/staging/mrst/drv/psb_drv.h +++ b/drivers/staging/mrst/drv/psb_drv.h @@ -168,6 +168,10 @@ enum panel_type { #define MRST_MSVDX_OFFSET 0x90000 /*MSVDX Base offset */ #define PSB_MSVDX_OFFSET 0x50000 /*MSVDX Base offset */ + +#define PSB_IED_DRM_CNTL_STATUS 0x2208 +#define IED_DRM_VLD (1<<0) + /* MSVDX MMIO region is 0x50000 - 0x57fff ==> 32KB */ #define PSB_MSVDX_SIZE 0x10000 diff --git a/drivers/staging/mrst/imgv/psb_msvdx.c b/drivers/staging/mrst/imgv/psb_msvdx.c index 715f45b..382d606 100644 --- a/drivers/staging/mrst/imgv/psb_msvdx.c +++ b/drivers/staging/mrst/imgv/psb_msvdx.c @@ -859,7 +859,6 @@ loop: /* just for coding style check */ FW_VA_HW_PANIC_FIRST_MB_NUM); last_mb = MEMIO_READ_FIELD(buf, FW_VA_HW_PANIC_FAULT_MB_NUM); - printk("jiangfei debug: fence in panic message is %d.\n", fence); PSB_DEBUG_MSVDX("MSVDX_DEBUG: PANIC MESSAGE fence is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_HW_PANIC_FENCE_VALUE)); PSB_DEBUG_MSVDX("MSVDX_DEBUG: PANIC MESSAGE first mb num is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_HW_PANIC_FIRST_MB_NUM)); PSB_DEBUG_MSVDX("MSVDX_DEBUG: PANIC MESSAGE fault mb num is %d.\n", MEMIO_READ_FIELD(buf, FW_VA_HW_PANIC_FAULT_MB_NUM)); @@ -1545,6 +1544,29 @@ int lnc_video_getparam(struct drm_device *dev, void *data, ((unsigned long)arg->value), &i, sizeof(i)); break; + case IMG_VIDEO_IED_STATE: + if (IS_MDFLD(dev)) { + int ied_enable; + /* VXD must be power on during query IED register */ + if (!ospm_power_using_hw_begin(OSPM_VIDEO_DEC_ISLAND, + OSPM_UHB_FORCE_POWER_ON)) + return -EBUSY; + /* wrong spec, IED should be located in pci device 2 */ + if (REG_READ(PSB_IED_DRM_CNTL_STATUS) & IED_DRM_VLD) + ied_enable = 1; + else + ied_enable = 0; + PSB_DEBUG_GENERAL("ied_enable is %d.\n", ied_enable); + ospm_power_using_hw_end(OSPM_VIDEO_DEC_ISLAND); + + ret = copy_to_user((void __user *) + ((unsigned long)arg->value), + &ied_enable, sizeof(ied_enable)); + } else { /* Moorestown should not call it */ + DRM_ERROR("IMG_VIDEO_IED_EANBLE error.\n"); + return -EFAULT; + } + break; default: ret = -EFAULT; @@ -1643,3 +1665,4 @@ int psb_msvdx_check_reset_fw(struct drm_device *dev) return 0; } +