summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/mxc/vpu/mxc_vpu.c25
-rw-r--r--include/asm-arm/arch-mxc/mxc_vpu.h3
2 files changed, 27 insertions, 1 deletions
diff --git a/drivers/mxc/vpu/mxc_vpu.c b/drivers/mxc/vpu/mxc_vpu.c
index d78b4700f531..48ffe3659f63 100644
--- a/drivers/mxc/vpu/mxc_vpu.c
+++ b/drivers/mxc/vpu/mxc_vpu.c
@@ -271,6 +271,31 @@ static int vpu_ioctl(struct inode *inode, struct file *filp, u_int cmd,
codec_done = 0;
break;
}
+ /* set/clear LHD (Latency Hiding Disable) bit in ESDCFG0 reg.
+ Tends to fix MPEG4 issue on MX27 TO2 */
+ case VPU_IOC_LHD:
+ {
+ u_int disable = (u_int) arg;
+ u_int reg;
+ u_int reg_addr;
+
+ reg_addr = IO_ADDRESS(SDRAMC_BASE_ADDR + 0x10);
+ reg = __raw_readl(reg_addr);
+ pr_debug("ESDCFG0: [ 0x%08x ]\n", reg);
+
+ if (disable == 0) {
+ __raw_writel(reg & ~0x00000020, reg_addr);
+ pr_debug("Latency Hiding Disable\n");
+ } else {
+ __raw_writel(reg | 0x00000020, reg_addr);
+ pr_debug("Latency Hiding Enable\n");
+ }
+
+ pr_debug("ESDCFG0: [ 0x%08x ]\n",
+ __raw_readl(reg_addr));
+
+ break;
+ }
case VPU_IOC_VL2CC_FLUSH:
if (cpu_is_mx32()) {
vl2cc_flush();
diff --git a/include/asm-arm/arch-mxc/mxc_vpu.h b/include/asm-arm/arch-mxc/mxc_vpu.h
index 2994d1e3f5de..757862426a4c 100644
--- a/include/asm-arm/arch-mxc/mxc_vpu.h
+++ b/include/asm-arm/arch-mxc/mxc_vpu.h
@@ -42,7 +42,8 @@ typedef struct vpu_mem_desc {
#define VPU_IOC_WAIT4INT _IO(VPU_IOC_MAGIC, 2)
#define VPU_IOC_PHYMEM_DUMP _IO(VPU_IOC_MAGIC, 3)
#define VPU_IOC_REG_DUMP _IO(VPU_IOC_MAGIC, 4)
-#define VPU_IOC_VL2CC_FLUSH _IO(VPU_IOC_MAGIC, 5)
+#define VPU_IOC_LHD _IO(VPU_IOC_MAGIC, 5)
+#define VPU_IOC_VL2CC_FLUSH _IO(VPU_IOC_MAGIC, 6)
int vl2cc_init(u32 vl2cc_hw_base);
void vl2cc_enable(void);