rk29: vpu: add dsb for flush write buffer
author陈恒明 <chm@rockchip.com>
Fri, 25 Mar 2011 03:51:31 +0000 (11:51 +0800)
committer陈恒明 <chm@rockchip.com>
Fri, 25 Mar 2011 03:51:31 +0000 (11:51 +0800)
arch/arm/mach-rk29/vpu.c

index 402dcd0ce1b1082bd377b0416752344d9e1b4dc8..a839ee2c4543c84a5ff85bbbbf5eb3774b450ca5 100644 (file)
@@ -244,6 +244,8 @@ static long vpu_write_dec(u32 *src)
        for (i = REG_NUM_DEC - 1; i > VPU_REG_DEC_GATE; i--)
                dst[i] = src[i];
 
+       dsb();
+
        dst[VPU_REG_DEC_GATE] = src[VPU_REG_DEC_GATE] | VPU_REG_DEC_GATE_BIT;
        dst[VPU_REG_EN_DEC]   = src[VPU_REG_EN_DEC];
 
@@ -258,6 +260,8 @@ static long vpu_write_dec_pp(u32 *src)
        for (i = VPU_REG_EN_DEC_PP + 1; i < REG_NUM_DEC_PP; i++)
                dst[i] = src[i];
 
+       dsb();
+
        dst[VPU_REG_DEC_PP_GATE] = src[VPU_REG_DEC_PP_GATE] | VPU_REG_PP_GATE_BIT;
        dst[VPU_REG_DEC_GATE]    = src[VPU_REG_DEC_GATE]        | VPU_REG_DEC_GATE_BIT;
        dst[VPU_REG_EN_DEC]      = src[VPU_REG_EN_DEC];
@@ -278,6 +282,8 @@ static long vpu_write_enc(u32 *src)
        for (i = VPU_REG_EN_ENC + 1; i < REG_NUM_ENC; i++)
                dst[i] = src[i];
 
+       dsb();
+
        dst[VPU_REG_ENC_GATE] = src[VPU_REG_ENC_GATE] | VPU_REG_ENC_GATE_BIT;
        dst[VPU_REG_EN_ENC]   = src[VPU_REG_EN_ENC];
 
@@ -294,6 +300,8 @@ static long vpu_write_pp(u32 *src)
        for (i = VPU_REG_PP_GATE + 1; i < REG_NUM_PP; i++)
                dst[i] = src[i];
 
+       dsb();
+
        dst[VPU_REG_EN_PP] = src[VPU_REG_EN_PP];
 
        return 0;