case VPU_ENC : {\r
pservice->reg_codec = NULL;\r
reg_copy_from_hw(reg, pservice->enc_dev.hwregs, pservice->hw_info->enc_reg_num);\r
- irq_reg = ENC_INTERRUPT_REGISTER;\r
+ irq_reg = ENC_INTERRUPT_REGISTER;\r
break;\r
}\r
case VPU_DEC : {\r
+ int reg_len = pservice->hw_info->hw_id == HEVC_ID ? REG_NUM_HEVC_DEC : REG_NUM_9190_DEC;\r
pservice->reg_codec = NULL;\r
- reg_copy_from_hw(reg, pservice->dec_dev.hwregs, REG_NUM_9190_DEC);\r
- irq_reg = DEC_INTERRUPT_REGISTER;\r
+ reg_copy_from_hw(reg, pservice->dec_dev.hwregs, reg_len);\r
+ irq_reg = DEC_INTERRUPT_REGISTER;\r
break;\r
}\r
case VPU_PP : {\r
break;\r
}\r
case VPU_DEC : {\r
- if (copy_to_user(dst, ®->reg[0], SIZE_REG(REG_NUM_9190_DEC)))\r
+ int reg_len = pservice->hw_info->hw_id == HEVC_ID ? REG_NUM_HEVC_DEC : REG_NUM_9190_DEC;\r
+ if (copy_to_user(dst, ®->reg[0], reg_len))\r
ret = -EFAULT;\r
break;\r
}\r
\r
platform_set_drvdata(pdev, pservice);\r
\r
- if (pservice->hw_info->hw_id != HEVC_ID) {\r
- get_hw_info(pservice);\r
- }\r
+ get_hw_info(pservice);\r
+\r
\r
#ifdef CONFIG_DEBUG_FS\r
pservice->debugfs_dir = vcodec_debugfs_create_device_dir((char*)dev_name(dev), parent);\r
\r
static void get_hw_info(struct vpu_service_info *pservice)\r
{\r
- VPUHwDecConfig_t *dec = &pservice->dec_config;\r
- VPUHwEncConfig_t *enc = &pservice->enc_config;\r
- u32 configReg = pservice->dec_dev.hwregs[VPU_DEC_HWCFG0];\r
- u32 asicID = pservice->dec_dev.hwregs[0];\r
-\r
- dec->h264Support = (configReg >> DWL_H264_E) & 0x3U;\r
- dec->jpegSupport = (configReg >> DWL_JPEG_E) & 0x01U;\r
- if (dec->jpegSupport && ((configReg >> DWL_PJPEG_E) & 0x01U))\r
- dec->jpegSupport = JPEG_PROGRESSIVE;\r
- dec->mpeg4Support = (configReg >> DWL_MPEG4_E) & 0x3U;\r
- dec->vc1Support = (configReg >> DWL_VC1_E) & 0x3U;\r
- dec->mpeg2Support = (configReg >> DWL_MPEG2_E) & 0x01U;\r
- dec->sorensonSparkSupport = (configReg >> DWL_SORENSONSPARK_E) & 0x01U;\r
- dec->refBufSupport = (configReg >> DWL_REF_BUFF_E) & 0x01U;\r
- dec->vp6Support = (configReg >> DWL_VP6_E) & 0x01U;\r
-\r
- if (!soc_is_rk3190() && !soc_is_rk3288()) {\r
- dec->maxDecPicWidth = configReg & 0x07FFU;\r
- } else {\r
- // vpu after rk3190\r
- dec->maxDecPicWidth = 3840;\r
- }\r
-\r
- /* 2nd Config register */\r
- configReg = pservice->dec_dev.hwregs[VPU_DEC_HWCFG1];\r
- if (dec->refBufSupport) {\r
- if ((configReg >> DWL_REF_BUFF_ILACE_E) & 0x01U)\r
- dec->refBufSupport |= 2;\r
- if ((configReg >> DWL_REF_BUFF_DOUBLE_E) & 0x01U)\r
- dec->refBufSupport |= 4;\r
- }\r
- dec->customMpeg4Support = (configReg >> DWL_MPEG4_CUSTOM_E) & 0x01U;\r
- dec->vp7Support = (configReg >> DWL_VP7_E) & 0x01U;\r
- dec->vp8Support = (configReg >> DWL_VP8_E) & 0x01U;\r
- dec->avsSupport = (configReg >> DWL_AVS_E) & 0x01U;\r
-\r
- /* JPEG xtensions */\r
- if (((asicID >> 16) >= 0x8190U) || ((asicID >> 16) == 0x6731U)) {\r
- dec->jpegESupport = (configReg >> DWL_JPEG_EXT_E) & 0x01U;\r
- } else {\r
- dec->jpegESupport = JPEG_EXT_NOT_SUPPORTED;\r
- }\r
-\r
- if (((asicID >> 16) >= 0x9170U) || ((asicID >> 16) == 0x6731U) ) {\r
- dec->rvSupport = (configReg >> DWL_RV_E) & 0x03U;\r
- } else {\r
- dec->rvSupport = RV_NOT_SUPPORTED;\r
- }\r
-\r
- dec->mvcSupport = (configReg >> DWL_MVC_E) & 0x03U;\r
-\r
- if (dec->refBufSupport && (asicID >> 16) == 0x6731U ) {\r
- dec->refBufSupport |= 8; /* enable HW support for offset */\r
- }\r
-\r
- /// invalidate fuse register value in rk319x vpu\r
- if (!soc_is_rk3190() && !soc_is_rk3288()) {\r
- VPUHwFuseStatus_t hwFuseSts;\r
- /* Decoder fuse configuration */\r
- u32 fuseReg = pservice->dec_dev.hwregs[VPU_DEC_HW_FUSE_CFG];\r
-\r
- hwFuseSts.h264SupportFuse = (fuseReg >> DWL_H264_FUSE_E) & 0x01U;\r
- hwFuseSts.mpeg4SupportFuse = (fuseReg >> DWL_MPEG4_FUSE_E) & 0x01U;\r
- hwFuseSts.mpeg2SupportFuse = (fuseReg >> DWL_MPEG2_FUSE_E) & 0x01U;\r
- hwFuseSts.sorensonSparkSupportFuse = (fuseReg >> DWL_SORENSONSPARK_FUSE_E) & 0x01U;\r
- hwFuseSts.jpegSupportFuse = (fuseReg >> DWL_JPEG_FUSE_E) & 0x01U;\r
- hwFuseSts.vp6SupportFuse = (fuseReg >> DWL_VP6_FUSE_E) & 0x01U;\r
- hwFuseSts.vc1SupportFuse = (fuseReg >> DWL_VC1_FUSE_E) & 0x01U;\r
- hwFuseSts.jpegProgSupportFuse = (fuseReg >> DWL_PJPEG_FUSE_E) & 0x01U;\r
- hwFuseSts.rvSupportFuse = (fuseReg >> DWL_RV_FUSE_E) & 0x01U;\r
- hwFuseSts.avsSupportFuse = (fuseReg >> DWL_AVS_FUSE_E) & 0x01U;\r
- hwFuseSts.vp7SupportFuse = (fuseReg >> DWL_VP7_FUSE_E) & 0x01U;\r
- hwFuseSts.vp8SupportFuse = (fuseReg >> DWL_VP8_FUSE_E) & 0x01U;\r
- hwFuseSts.customMpeg4SupportFuse = (fuseReg >> DWL_CUSTOM_MPEG4_FUSE_E) & 0x01U;\r
- hwFuseSts.mvcSupportFuse = (fuseReg >> DWL_MVC_FUSE_E) & 0x01U;\r
-\r
- /* check max. decoder output width */\r
-\r
- if (fuseReg & 0x8000U)\r
- hwFuseSts.maxDecPicWidthFuse = 1920;\r
- else if (fuseReg & 0x4000U)\r
- hwFuseSts.maxDecPicWidthFuse = 1280;\r
- else if (fuseReg & 0x2000U)\r
- hwFuseSts.maxDecPicWidthFuse = 720;\r
- else if (fuseReg & 0x1000U)\r
- hwFuseSts.maxDecPicWidthFuse = 352;\r
- else /* remove warning */\r
- hwFuseSts.maxDecPicWidthFuse = 352;\r
-\r
- hwFuseSts.refBufSupportFuse = (fuseReg >> DWL_REF_BUFF_FUSE_E) & 0x01U;\r
-\r
- /* Pp configuration */\r
- configReg = pservice->dec_dev.hwregs[VPU_PP_HW_SYNTH_CFG];\r
-\r
- if ((configReg >> DWL_PP_E) & 0x01U) {\r
- dec->ppSupport = 1;\r
- dec->maxPpOutPicWidth = configReg & 0x07FFU;\r
- /*pHwCfg->ppConfig = (configReg >> DWL_CFG_E) & 0x0FU; */\r
- dec->ppConfig = configReg;\r
- } else {\r
- dec->ppSupport = 0;\r
- dec->maxPpOutPicWidth = 0;\r
- dec->ppConfig = 0;\r
- }\r
-\r
- /* check the HW versio */\r
- if (((asicID >> 16) >= 0x8190U) || ((asicID >> 16) == 0x6731U)) {\r
- /* Pp configuration */\r
- configReg = pservice->dec_dev.hwregs[VPU_DEC_HW_FUSE_CFG];\r
-\r
- if ((configReg >> DWL_PP_E) & 0x01U) {\r
- /* Pp fuse configuration */\r
- u32 fuseRegPp = pservice->dec_dev.hwregs[VPU_PP_HW_FUSE_CFG];\r
-\r
- if ((fuseRegPp >> DWL_PP_FUSE_E) & 0x01U) {\r
- hwFuseSts.ppSupportFuse = 1;\r
- /* check max. pp output width */\r
- if (fuseRegPp & 0x8000U) hwFuseSts.maxPpOutPicWidthFuse = 1920;\r
- else if (fuseRegPp & 0x4000U) hwFuseSts.maxPpOutPicWidthFuse = 1280;\r
- else if (fuseRegPp & 0x2000U) hwFuseSts.maxPpOutPicWidthFuse = 720;\r
- else if (fuseRegPp & 0x1000U) hwFuseSts.maxPpOutPicWidthFuse = 352;\r
- else hwFuseSts.maxPpOutPicWidthFuse = 352;\r
- hwFuseSts.ppConfigFuse = fuseRegPp;\r
- } else {\r
- hwFuseSts.ppSupportFuse = 0;\r
- hwFuseSts.maxPpOutPicWidthFuse = 0;\r
- hwFuseSts.ppConfigFuse = 0;\r
- }\r
- } else {\r
- hwFuseSts.ppSupportFuse = 0;\r
- hwFuseSts.maxPpOutPicWidthFuse = 0;\r
- hwFuseSts.ppConfigFuse = 0;\r
- }\r
-\r
- if (dec->maxDecPicWidth > hwFuseSts.maxDecPicWidthFuse)\r
- dec->maxDecPicWidth = hwFuseSts.maxDecPicWidthFuse;\r
- if (dec->maxPpOutPicWidth > hwFuseSts.maxPpOutPicWidthFuse)\r
- dec->maxPpOutPicWidth = hwFuseSts.maxPpOutPicWidthFuse;\r
- if (!hwFuseSts.h264SupportFuse) dec->h264Support = H264_NOT_SUPPORTED;\r
- if (!hwFuseSts.mpeg4SupportFuse) dec->mpeg4Support = MPEG4_NOT_SUPPORTED;\r
- if (!hwFuseSts.customMpeg4SupportFuse) dec->customMpeg4Support = MPEG4_CUSTOM_NOT_SUPPORTED;\r
- if (!hwFuseSts.jpegSupportFuse) dec->jpegSupport = JPEG_NOT_SUPPORTED;\r
- if ((dec->jpegSupport == JPEG_PROGRESSIVE) && !hwFuseSts.jpegProgSupportFuse)\r
- dec->jpegSupport = JPEG_BASELINE;\r
- if (!hwFuseSts.mpeg2SupportFuse) dec->mpeg2Support = MPEG2_NOT_SUPPORTED;\r
- if (!hwFuseSts.vc1SupportFuse) dec->vc1Support = VC1_NOT_SUPPORTED;\r
- if (!hwFuseSts.vp6SupportFuse) dec->vp6Support = VP6_NOT_SUPPORTED;\r
- if (!hwFuseSts.vp7SupportFuse) dec->vp7Support = VP7_NOT_SUPPORTED;\r
- if (!hwFuseSts.vp8SupportFuse) dec->vp8Support = VP8_NOT_SUPPORTED;\r
- if (!hwFuseSts.ppSupportFuse) dec->ppSupport = PP_NOT_SUPPORTED;\r
-\r
- /* check the pp config vs fuse status */\r
- if ((dec->ppConfig & 0xFC000000) && ((hwFuseSts.ppConfigFuse & 0xF0000000) >> 5)) {\r
- u32 deInterlace = ((dec->ppConfig & PP_DEINTERLACING) >> 25);\r
- u32 alphaBlend = ((dec->ppConfig & PP_ALPHA_BLENDING) >> 24);\r
- u32 deInterlaceFuse = (((hwFuseSts.ppConfigFuse >> 5) & PP_DEINTERLACING) >> 25);\r
- u32 alphaBlendFuse = (((hwFuseSts.ppConfigFuse >> 5) & PP_ALPHA_BLENDING) >> 24);\r
-\r
- if (deInterlace && !deInterlaceFuse) dec->ppConfig &= 0xFD000000;\r
- if (alphaBlend && !alphaBlendFuse) dec->ppConfig &= 0xFE000000;\r
- }\r
- if (!hwFuseSts.sorensonSparkSupportFuse) dec->sorensonSparkSupport = SORENSON_SPARK_NOT_SUPPORTED;\r
- if (!hwFuseSts.refBufSupportFuse) dec->refBufSupport = REF_BUF_NOT_SUPPORTED;\r
- if (!hwFuseSts.rvSupportFuse) dec->rvSupport = RV_NOT_SUPPORTED;\r
- if (!hwFuseSts.avsSupportFuse) dec->avsSupport = AVS_NOT_SUPPORTED;\r
- if (!hwFuseSts.mvcSupportFuse) dec->mvcSupport = MVC_NOT_SUPPORTED;\r
- }\r
- }\r
-\r
- configReg = pservice->enc_dev.hwregs[63];\r
- enc->maxEncodedWidth = configReg & ((1 << 11) - 1);\r
- enc->h264Enabled = (configReg >> 27) & 1;\r
- enc->mpeg4Enabled = (configReg >> 26) & 1;\r
- enc->jpegEnabled = (configReg >> 25) & 1;\r
- enc->vsEnabled = (configReg >> 24) & 1;\r
- enc->rgbEnabled = (configReg >> 28) & 1;\r
- //enc->busType = (configReg >> 20) & 15;\r
- //enc->synthesisLanguage = (configReg >> 16) & 15;\r
- //enc->busWidth = (configReg >> 12) & 15;\r
- enc->reg_size = pservice->reg_size;\r
- enc->reserv[0] = enc->reserv[1] = 0;\r
-\r
- pservice->auto_freq = soc_is_rk2928g() || soc_is_rk2928l() || soc_is_rk2926();\r
- if (pservice->auto_freq) {\r
- printk("vpu_service set to auto frequency mode\n");\r
- atomic_set(&pservice->freq_status, VPU_FREQ_BUT);\r
- }\r
- pservice->bug_dec_addr = cpu_is_rk30xx();\r
- //printk("cpu 3066b bug %d\n", service.bug_dec_addr);\r
+ if (pservice->dev_id == VCODEC_DEVICE_ID_VPU) {\r
+ VPUHwDecConfig_t *dec = &pservice->dec_config;\r
+ VPUHwEncConfig_t *enc = &pservice->enc_config;\r
+ u32 configReg = pservice->dec_dev.hwregs[VPU_DEC_HWCFG0];\r
+ u32 asicID = pservice->dec_dev.hwregs[0];\r
+ \r
+ dec->h264Support = (configReg >> DWL_H264_E) & 0x3U;\r
+ dec->jpegSupport = (configReg >> DWL_JPEG_E) & 0x01U;\r
+ if (dec->jpegSupport && ((configReg >> DWL_PJPEG_E) & 0x01U))\r
+ dec->jpegSupport = JPEG_PROGRESSIVE;\r
+ dec->mpeg4Support = (configReg >> DWL_MPEG4_E) & 0x3U;\r
+ dec->vc1Support = (configReg >> DWL_VC1_E) & 0x3U;\r
+ dec->mpeg2Support = (configReg >> DWL_MPEG2_E) & 0x01U;\r
+ dec->sorensonSparkSupport = (configReg >> DWL_SORENSONSPARK_E) & 0x01U;\r
+ dec->refBufSupport = (configReg >> DWL_REF_BUFF_E) & 0x01U;\r
+ dec->vp6Support = (configReg >> DWL_VP6_E) & 0x01U;\r
+ \r
+ if (!soc_is_rk3190() && !soc_is_rk3288()) {\r
+ dec->maxDecPicWidth = configReg & 0x07FFU;\r
+ } else {\r
+ dec->maxDecPicWidth = 3840;\r
+ }\r
+ \r
+ /* 2nd Config register */\r
+ configReg = pservice->dec_dev.hwregs[VPU_DEC_HWCFG1];\r
+ if (dec->refBufSupport) {\r
+ if ((configReg >> DWL_REF_BUFF_ILACE_E) & 0x01U)\r
+ dec->refBufSupport |= 2;\r
+ if ((configReg >> DWL_REF_BUFF_DOUBLE_E) & 0x01U)\r
+ dec->refBufSupport |= 4;\r
+ }\r
+ dec->customMpeg4Support = (configReg >> DWL_MPEG4_CUSTOM_E) & 0x01U;\r
+ dec->vp7Support = (configReg >> DWL_VP7_E) & 0x01U;\r
+ dec->vp8Support = (configReg >> DWL_VP8_E) & 0x01U;\r
+ dec->avsSupport = (configReg >> DWL_AVS_E) & 0x01U;\r
+ \r
+ /* JPEG xtensions */\r
+ if (((asicID >> 16) >= 0x8190U) || ((asicID >> 16) == 0x6731U)) {\r
+ dec->jpegESupport = (configReg >> DWL_JPEG_EXT_E) & 0x01U;\r
+ } else {\r
+ dec->jpegESupport = JPEG_EXT_NOT_SUPPORTED;\r
+ }\r
+ \r
+ if (((asicID >> 16) >= 0x9170U) || ((asicID >> 16) == 0x6731U) ) {\r
+ dec->rvSupport = (configReg >> DWL_RV_E) & 0x03U;\r
+ } else {\r
+ dec->rvSupport = RV_NOT_SUPPORTED;\r
+ }\r
+ \r
+ dec->mvcSupport = (configReg >> DWL_MVC_E) & 0x03U;\r
+ \r
+ if (dec->refBufSupport && (asicID >> 16) == 0x6731U ) {\r
+ dec->refBufSupport |= 8; /* enable HW support for offset */\r
+ }\r
+ \r
+ /// invalidate fuse register value in rk319x vpu and following.\r
+ if (!soc_is_rk3190() && !soc_is_rk3288()) {\r
+ VPUHwFuseStatus_t hwFuseSts;\r
+ /* Decoder fuse configuration */\r
+ u32 fuseReg = pservice->dec_dev.hwregs[VPU_DEC_HW_FUSE_CFG];\r
+ \r
+ hwFuseSts.h264SupportFuse = (fuseReg >> DWL_H264_FUSE_E) & 0x01U;\r
+ hwFuseSts.mpeg4SupportFuse = (fuseReg >> DWL_MPEG4_FUSE_E) & 0x01U;\r
+ hwFuseSts.mpeg2SupportFuse = (fuseReg >> DWL_MPEG2_FUSE_E) & 0x01U;\r
+ hwFuseSts.sorensonSparkSupportFuse = (fuseReg >> DWL_SORENSONSPARK_FUSE_E) & 0x01U;\r
+ hwFuseSts.jpegSupportFuse = (fuseReg >> DWL_JPEG_FUSE_E) & 0x01U;\r
+ hwFuseSts.vp6SupportFuse = (fuseReg >> DWL_VP6_FUSE_E) & 0x01U;\r
+ hwFuseSts.vc1SupportFuse = (fuseReg >> DWL_VC1_FUSE_E) & 0x01U;\r
+ hwFuseSts.jpegProgSupportFuse = (fuseReg >> DWL_PJPEG_FUSE_E) & 0x01U;\r
+ hwFuseSts.rvSupportFuse = (fuseReg >> DWL_RV_FUSE_E) & 0x01U;\r
+ hwFuseSts.avsSupportFuse = (fuseReg >> DWL_AVS_FUSE_E) & 0x01U;\r
+ hwFuseSts.vp7SupportFuse = (fuseReg >> DWL_VP7_FUSE_E) & 0x01U;\r
+ hwFuseSts.vp8SupportFuse = (fuseReg >> DWL_VP8_FUSE_E) & 0x01U;\r
+ hwFuseSts.customMpeg4SupportFuse = (fuseReg >> DWL_CUSTOM_MPEG4_FUSE_E) & 0x01U;\r
+ hwFuseSts.mvcSupportFuse = (fuseReg >> DWL_MVC_FUSE_E) & 0x01U;\r
+ \r
+ /* check max. decoder output width */\r
+ \r
+ if (fuseReg & 0x8000U)\r
+ hwFuseSts.maxDecPicWidthFuse = 1920;\r
+ else if (fuseReg & 0x4000U)\r
+ hwFuseSts.maxDecPicWidthFuse = 1280;\r
+ else if (fuseReg & 0x2000U)\r
+ hwFuseSts.maxDecPicWidthFuse = 720;\r
+ else if (fuseReg & 0x1000U)\r
+ hwFuseSts.maxDecPicWidthFuse = 352;\r
+ else /* remove warning */\r
+ hwFuseSts.maxDecPicWidthFuse = 352;\r
+ \r
+ hwFuseSts.refBufSupportFuse = (fuseReg >> DWL_REF_BUFF_FUSE_E) & 0x01U;\r
+ \r
+ /* Pp configuration */\r
+ configReg = pservice->dec_dev.hwregs[VPU_PP_HW_SYNTH_CFG];\r
+ \r
+ if ((configReg >> DWL_PP_E) & 0x01U) {\r
+ dec->ppSupport = 1;\r
+ dec->maxPpOutPicWidth = configReg & 0x07FFU;\r
+ /*pHwCfg->ppConfig = (configReg >> DWL_CFG_E) & 0x0FU; */\r
+ dec->ppConfig = configReg;\r
+ } else {\r
+ dec->ppSupport = 0;\r
+ dec->maxPpOutPicWidth = 0;\r
+ dec->ppConfig = 0;\r
+ }\r
+ \r
+ /* check the HW versio */\r
+ if (((asicID >> 16) >= 0x8190U) || ((asicID >> 16) == 0x6731U)) {\r
+ /* Pp configuration */\r
+ configReg = pservice->dec_dev.hwregs[VPU_DEC_HW_FUSE_CFG];\r
+ \r
+ if ((configReg >> DWL_PP_E) & 0x01U) {\r
+ /* Pp fuse configuration */\r
+ u32 fuseRegPp = pservice->dec_dev.hwregs[VPU_PP_HW_FUSE_CFG];\r
+ \r
+ if ((fuseRegPp >> DWL_PP_FUSE_E) & 0x01U) {\r
+ hwFuseSts.ppSupportFuse = 1;\r
+ /* check max. pp output width */\r
+ if (fuseRegPp & 0x8000U) hwFuseSts.maxPpOutPicWidthFuse = 1920;\r
+ else if (fuseRegPp & 0x4000U) hwFuseSts.maxPpOutPicWidthFuse = 1280;\r
+ else if (fuseRegPp & 0x2000U) hwFuseSts.maxPpOutPicWidthFuse = 720;\r
+ else if (fuseRegPp & 0x1000U) hwFuseSts.maxPpOutPicWidthFuse = 352;\r
+ else hwFuseSts.maxPpOutPicWidthFuse = 352;\r
+ hwFuseSts.ppConfigFuse = fuseRegPp;\r
+ } else {\r
+ hwFuseSts.ppSupportFuse = 0;\r
+ hwFuseSts.maxPpOutPicWidthFuse = 0;\r
+ hwFuseSts.ppConfigFuse = 0;\r
+ }\r
+ } else {\r
+ hwFuseSts.ppSupportFuse = 0;\r
+ hwFuseSts.maxPpOutPicWidthFuse = 0;\r
+ hwFuseSts.ppConfigFuse = 0;\r
+ }\r
+ \r
+ if (dec->maxDecPicWidth > hwFuseSts.maxDecPicWidthFuse)\r
+ dec->maxDecPicWidth = hwFuseSts.maxDecPicWidthFuse;\r
+ if (dec->maxPpOutPicWidth > hwFuseSts.maxPpOutPicWidthFuse)\r
+ dec->maxPpOutPicWidth = hwFuseSts.maxPpOutPicWidthFuse;\r
+ if (!hwFuseSts.h264SupportFuse) dec->h264Support = H264_NOT_SUPPORTED;\r
+ if (!hwFuseSts.mpeg4SupportFuse) dec->mpeg4Support = MPEG4_NOT_SUPPORTED;\r
+ if (!hwFuseSts.customMpeg4SupportFuse) dec->customMpeg4Support = MPEG4_CUSTOM_NOT_SUPPORTED;\r
+ if (!hwFuseSts.jpegSupportFuse) dec->jpegSupport = JPEG_NOT_SUPPORTED;\r
+ if ((dec->jpegSupport == JPEG_PROGRESSIVE) && !hwFuseSts.jpegProgSupportFuse)\r
+ dec->jpegSupport = JPEG_BASELINE;\r
+ if (!hwFuseSts.mpeg2SupportFuse) dec->mpeg2Support = MPEG2_NOT_SUPPORTED;\r
+ if (!hwFuseSts.vc1SupportFuse) dec->vc1Support = VC1_NOT_SUPPORTED;\r
+ if (!hwFuseSts.vp6SupportFuse) dec->vp6Support = VP6_NOT_SUPPORTED;\r
+ if (!hwFuseSts.vp7SupportFuse) dec->vp7Support = VP7_NOT_SUPPORTED;\r
+ if (!hwFuseSts.vp8SupportFuse) dec->vp8Support = VP8_NOT_SUPPORTED;\r
+ if (!hwFuseSts.ppSupportFuse) dec->ppSupport = PP_NOT_SUPPORTED;\r
+ \r
+ /* check the pp config vs fuse status */\r
+ if ((dec->ppConfig & 0xFC000000) && ((hwFuseSts.ppConfigFuse & 0xF0000000) >> 5)) {\r
+ u32 deInterlace = ((dec->ppConfig & PP_DEINTERLACING) >> 25);\r
+ u32 alphaBlend = ((dec->ppConfig & PP_ALPHA_BLENDING) >> 24);\r
+ u32 deInterlaceFuse = (((hwFuseSts.ppConfigFuse >> 5) & PP_DEINTERLACING) >> 25);\r
+ u32 alphaBlendFuse = (((hwFuseSts.ppConfigFuse >> 5) & PP_ALPHA_BLENDING) >> 24);\r
+ \r
+ if (deInterlace && !deInterlaceFuse) dec->ppConfig &= 0xFD000000;\r
+ if (alphaBlend && !alphaBlendFuse) dec->ppConfig &= 0xFE000000;\r
+ }\r
+ if (!hwFuseSts.sorensonSparkSupportFuse) dec->sorensonSparkSupport = SORENSON_SPARK_NOT_SUPPORTED;\r
+ if (!hwFuseSts.refBufSupportFuse) dec->refBufSupport = REF_BUF_NOT_SUPPORTED;\r
+ if (!hwFuseSts.rvSupportFuse) dec->rvSupport = RV_NOT_SUPPORTED;\r
+ if (!hwFuseSts.avsSupportFuse) dec->avsSupport = AVS_NOT_SUPPORTED;\r
+ if (!hwFuseSts.mvcSupportFuse) dec->mvcSupport = MVC_NOT_SUPPORTED;\r
+ }\r
+ }\r
+ \r
+ configReg = pservice->enc_dev.hwregs[63];\r
+ enc->maxEncodedWidth = configReg & ((1 << 11) - 1);\r
+ enc->h264Enabled = (configReg >> 27) & 1;\r
+ enc->mpeg4Enabled = (configReg >> 26) & 1;\r
+ enc->jpegEnabled = (configReg >> 25) & 1;\r
+ enc->vsEnabled = (configReg >> 24) & 1;\r
+ enc->rgbEnabled = (configReg >> 28) & 1;\r
+ //enc->busType = (configReg >> 20) & 15;\r
+ //enc->synthesisLanguage = (configReg >> 16) & 15;\r
+ //enc->busWidth = (configReg >> 12) & 15;\r
+ enc->reg_size = pservice->reg_size;\r
+ enc->reserv[0] = enc->reserv[1] = 0;\r
+ \r
+ pservice->auto_freq = soc_is_rk2928g() || soc_is_rk2928l() || soc_is_rk2926();\r
+ if (pservice->auto_freq) {\r
+ pr_info("vpu_service set to auto frequency mode\n");\r
+ atomic_set(&pservice->freq_status, VPU_FREQ_BUT);\r
+ }\r
+ pservice->bug_dec_addr = cpu_is_rk30xx();\r
+ //printk("cpu 3066b bug %d\n", service.bug_dec_addr);\r
+ }\r
}\r
\r
static irqreturn_t vdpu_irq(int irq, void *dev_id)\r