.dec_reg_num = REG_NUM_9190_DEC_PP,\r
.dec_io_size = REG_NUM_9190_DEC_PP * 4,\r
},\r
- \r
+\r
};\r
\r
\r
struct dentry *debugfs_file_regs;\r
\r
u32 irq_status;\r
-#if defined(CONFIG_VCODEC_MMU) \r
+#if defined(CONFIG_VCODEC_MMU)\r
struct ion_client *ion_client;\r
struct list_head mem_region_list;\r
struct device *mmu_dev;\r
#define VPU_TIMEOUT_DELAY 2*HZ /* 2s */\r
#define VPU_SIMULATE_DELAY msecs_to_jiffies(15)\r
\r
+#define BIT_VCODEC_SEL_RK3036 (1<<3)\r
+#define BIT_VCODEC_SEL_RK312X (1<<15)\r
static void vcodec_enter_mode_nolock(enum vcodec_device_id id, u32 *reserved_mode)\r
{\r
- if (soc_is_rk3036()) {\r
+ if (soc_is_rk3036() || soc_is_rk3126() || soc_is_rk3128()) {\r
+ int bits = soc_is_rk3036() ? BIT_VCODEC_SEL_RK3036 : BIT_VCODEC_SEL_RK312X;\r
+ void __iomem *addr = soc_is_rk3036() ? (RK_GRF_VIRT + RK3036_GRF_SOC_CON1) : (RK_GRF_VIRT + RK312X_GRF_SOC_CON1);\r
if (reserved_mode)\r
- *reserved_mode = readl_relaxed(RK_GRF_VIRT + RK3036_GRF_SOC_CON1);\r
-#define BIT_VCODEC_SEL (1<<3)\r
- if (id == VCODEC_DEVICE_ID_HEVC) {\r
- writel_relaxed(readl_relaxed(RK_GRF_VIRT + RK3036_GRF_SOC_CON1) | (BIT_VCODEC_SEL) | (BIT_VCODEC_SEL << 16), RK_GRF_VIRT + RK3036_GRF_SOC_CON1);\r
- } else {\r
- writel_relaxed((readl_relaxed(RK_GRF_VIRT + RK3036_GRF_SOC_CON1) & (~BIT_VCODEC_SEL)) | (BIT_VCODEC_SEL << 16), RK_GRF_VIRT + RK3036_GRF_SOC_CON1);\r
- }\r
+ *reserved_mode = readl_relaxed(addr);\r
+ if (id == VCODEC_DEVICE_ID_HEVC)\r
+ writel_relaxed(readl_relaxed(addr) | (bits) | (bits << 16), addr);\r
+ else\r
+ writel_relaxed((readl_relaxed(addr) & (~bits)) | (bits << 16), addr);\r
}\r
}\r
\r
static void vcodec_exit_mode_nolock(enum vcodec_device_id id, u32 reserved_mode)\r
{\r
- writel_relaxed(reserved_mode | (BIT_VCODEC_SEL << 16), RK_GRF_VIRT + RK3036_GRF_SOC_CON1);\r
+ if (soc_is_rk3036() || soc_is_rk3126() || soc_is_rk3128()) {\r
+ int bits = soc_is_rk3036() ? BIT_VCODEC_SEL_RK3036 : BIT_VCODEC_SEL_RK312X;\r
+ void __iomem *addr = soc_is_rk3036() ? (RK_GRF_VIRT + RK3036_GRF_SOC_CON1) : (RK_GRF_VIRT + RK312X_GRF_SOC_CON1);\r
+ writel_relaxed(reserved_mode | (bits << 16), addr);\r
+ }\r
}\r
\r
static void vcodec_enter_mode(enum vcodec_device_id id)\r
{\r
- if (soc_is_rk3036())\r
+ if (soc_is_rk3036() || soc_is_rk3126() || soc_is_rk3128())\r
mutex_lock(&g_mode_mutex);\r
vcodec_enter_mode_nolock(id, NULL);\r
}\r
\r
static void vcodec_exit_mode(void)\r
{\r
- if (soc_is_rk3036())\r
+ if (soc_is_rk3036() || soc_is_rk3126() || soc_is_rk3128())\r
mutex_unlock(&g_mode_mutex);\r
}\r
\r
break;\r
}\r
\r
- if (!soc_is_rk3036()) {\r
+ if (!soc_is_rk3036() && !soc_is_rk3126() && !soc_is_rk3128()) {\r
pservice->clk_cabac = devm_clk_get(pservice->dev, "clk_cabac");\r
if (IS_ERR(pservice->clk_cabac)) {\r
dev_err(pservice->dev, "failed on clk_get clk_cabac\n");\r
pservice->clk_cabac = NULL;\r
}\r
\r
- if (!soc_is_rk3036()) {\r
+ if (!soc_is_rk3036() && !soc_is_rk3126() && !soc_is_rk3128()) {\r
pservice->pd_video = devm_clk_get(pservice->dev, "pd_hevc");\r
if (IS_ERR(pservice->pd_video)) {\r
dev_err(pservice->dev, "failed on clk_get pd_hevc\n");\r
pservice->pd_video = NULL;\r
}\r
} else {\r
- if (!soc_is_rk3036()) {\r
+ if (!soc_is_rk3036() && !soc_is_rk3126() && !soc_is_rk3128()) {\r
pservice->pd_video = devm_clk_get(pservice->dev, "pd_video");\r
if (IS_ERR(pservice->pd_video)) {\r
dev_err(pservice->dev, "failed on clk_get pd_video\n");\r
}\r
}\r
\r
+ if (soc_is_rk3126() || soc_is_rk3128()) {\r
+ pservice->pd_video = devm_clk_get(pservice->dev, "pd_video");\r
+ if (IS_ERR(pservice->pd_video)) {\r
+ dev_err(pservice->dev, "failed on clk_get pd_video\n");\r
+ break;\r
+ }\r
+ }\r
+\r
return 0;\r
} while (0);\r
\r
INIT_LIST_HEAD(®->session_link);\r
INIT_LIST_HEAD(®->status_link);\r
\r
-#if defined(CONFIG_VCODEC_MMU) \r
+#if defined(CONFIG_VCODEC_MMU)\r
if (pservice->mmu_dev)\r
INIT_LIST_HEAD(®->mem_region_list);\r
#endif\r
int iommu_enable = 0;\r
\r
#if defined(CONFIG_VCODEC_MMU)\r
- iommu_enable = pservice->mmu_dev ? 1 : 0; \r
+ iommu_enable = pservice->mmu_dev ? 1 : 0;\r
#endif\r
\r
if (copy_to_user((void __user *)arg, &iommu_enable, sizeof(int))) {\r
if (pservice->debugfs_dir == NULL)\r
pr_err("create debugfs dir %s failed\n", dev_name(dev));\r
\r
- pservice->debugfs_file_regs = \r
+ pservice->debugfs_file_regs =\r
debugfs_create_file("regs", 0664,\r
pservice->debugfs_dir, pservice,\r
&debug_vcodec_fops);\r
if (pservice->dev_id == VCODEC_DEVICE_ID_VPU) {\r
u32 configReg = pservice->dec_dev.hwregs[VPU_DEC_HWCFG0];\r
u32 asicID = pservice->dec_dev.hwregs[0];\r
- \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
\r
if (soc_is_rk3190() || soc_is_rk3288())\r
dec->maxDecPicWidth = 4096;\r
- else if (soc_is_rk3036())\r
+ else if (soc_is_rk3036() || soc_is_rk3126() || soc_is_rk3128())\r
dec->maxDecPicWidth = 1920;\r
else\r
dec->maxDecPicWidth = configReg & 0x07FFU;\r
- \r
+\r
/* 2nd Config register */\r
configReg = pservice->dec_dev.hwregs[VPU_DEC_HWCFG1];\r
if (dec->refBufSupport) {\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() && !soc_is_rk3036()) {\r
+ if (!soc_is_rk3190() && !soc_is_rk3288() && !soc_is_rk3036() && !soc_is_rk3126() && !soc_is_rk3128()) {\r
VPUHwFuseStatus_t hwFuseSts;\r
/* Decoder fuse configuration */\r
u32 fuseReg = pservice->dec_dev.hwregs[VPU_DEC_HW_FUSE_CFG];\r
\r
pservice->bug_dec_addr = cpu_is_rk30xx();\r
} else {\r
- if (soc_is_rk3036())\r
+ if (soc_is_rk3036() || soc_is_rk3126() || soc_is_rk3128())\r
dec->maxDecPicWidth = 1920;\r
else\r
dec->maxDecPicWidth = 4096;\r
static int hevc_test_case0(vpu_service_info *pservice)\r
{\r
vpu_session session;\r
- vpu_reg *reg; \r
+ vpu_reg *reg;\r
unsigned long size = 272;//sizeof(register_00); // registers array length\r
int testidx = 0;\r
int ret = 0;\r
int rps_size[2];\r
int scl_size[2];\r
int cabac_size[2];\r
- \r
+\r
u32 phy_pps;\r
u32 phy_rps;\r
u32 phy_scl;\r
\r
scl_size[0] = sizeof(scaling_list_00);\r
scl_size[1] = sizeof(scaling_list_01);\r
- \r
+\r
cabac_size[0] = sizeof(Cabac_table);\r
cabac_size[1] = sizeof(Cabac_table);\r
\r