aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiu Ying <Ying.Liu@freescale.com>2011-05-12 17:59:34 +0800
committerEric Miao <eric.miao@linaro.org>2011-08-16 12:36:58 +0800
commitdb1a45b4e1b2e6c9f88a9e1be41d677ebb54db4e (patch)
tree9313439aaaceae7ada3d4837c2e77cb228d85006
parente56d7a1d2309d0fdb1f0bfc0b743651e65078ce1 (diff)
ENGR00142683 ipuv3: Increase IDMAC BS for RGBP and DMFC BS
This patch increases IDMAC burst size from 16 pixels to 32 pixels for RGBP pixel format and increases DMFC burst size to 128 pixels to workaround 1080P60 display video black flash issue. Signed-off-by: Liu Ying <Ying.Liu@freescale.com> (cherry picked from commit c9fbed971c5a1adf7c727a6b1eba67e179bd1502) Signed-off-by: Richard Zhao <richard.zhao@freescale.com> Signed-off-by: Eric Miao <eric.miao@linaro.org>
-rw-r--r--drivers/mxc/ipu3/ipu_common.c47
-rw-r--r--drivers/mxc/ipu3/ipu_disp.c14
-rw-r--r--drivers/mxc/ipu3/ipu_param_mem.h2
3 files changed, 8 insertions, 55 deletions
diff --git a/drivers/mxc/ipu3/ipu_common.c b/drivers/mxc/ipu3/ipu_common.c
index 9d99f551de5b..0e83611ec4d5 100644
--- a/drivers/mxc/ipu3/ipu_common.c
+++ b/drivers/mxc/ipu3/ipu_common.c
@@ -1110,53 +1110,6 @@ int32_t ipu_init_channel_buffer(ipu_channel_t channel, ipu_buffer_t type,
_ipu_ch_param_set_burst_size(dma_chan, 8);
_ipu_ch_param_set_block_mode(dma_chan);
} else if (_ipu_is_dmfc_chan(dma_chan)) {
- u32 dmfc_dp_chan, dmfc_wr_chan;
- /*
- * non-interleaving format need enlarge burst size
- * to work-around black flash issue.
- */
- if (((dma_chan == 23) || (dma_chan == 27) || (dma_chan == 28))
- && ((pixel_fmt == IPU_PIX_FMT_YUV420P) ||
- (pixel_fmt == IPU_PIX_FMT_YVU420P) ||
- (pixel_fmt == IPU_PIX_FMT_YUV420P2) ||
- (pixel_fmt == IPU_PIX_FMT_YVU422P) ||
- (pixel_fmt == IPU_PIX_FMT_YUV422P) ||
- (pixel_fmt == IPU_PIX_FMT_NV12))) {
- if (dma_chan == 23) {
- dmfc_dp_chan = __raw_readl(DMFC_DP_CHAN);
- dmfc_dp_chan &= ~(0xc0);
- dmfc_dp_chan |= 0x40;
- __raw_writel(dmfc_dp_chan, DMFC_DP_CHAN);
- } else if (dma_chan == 27) {
- dmfc_dp_chan = __raw_readl(DMFC_DP_CHAN);
- dmfc_dp_chan &= ~(0xc000);
- dmfc_dp_chan |= 0x4000;
- __raw_writel(dmfc_dp_chan, DMFC_DP_CHAN);
- } else if (dma_chan == 28) {
- dmfc_wr_chan = __raw_readl(DMFC_WR_CHAN);
- dmfc_wr_chan &= ~(0xc0);
- dmfc_wr_chan |= 0x40;
- __raw_writel(dmfc_wr_chan, DMFC_WR_CHAN);
- }
- _ipu_ch_param_set_burst_size(dma_chan, 64);
- } else {
- if (dma_chan == 23) {
- dmfc_dp_chan = __raw_readl(DMFC_DP_CHAN);
- dmfc_dp_chan &= ~(0xc0);
- dmfc_dp_chan |= 0x80;
- __raw_writel(dmfc_dp_chan, DMFC_DP_CHAN);
- } else if (dma_chan == 27) {
- dmfc_dp_chan = __raw_readl(DMFC_DP_CHAN);
- dmfc_dp_chan &= ~(0xc000);
- dmfc_dp_chan |= 0x8000;
- __raw_writel(dmfc_dp_chan, DMFC_DP_CHAN);
- } else {
- dmfc_wr_chan = __raw_readl(DMFC_WR_CHAN);
- dmfc_wr_chan &= ~(0xc0);
- dmfc_wr_chan |= 0x80;
- __raw_writel(dmfc_wr_chan, DMFC_WR_CHAN);
- }
- }
spin_lock_irqsave(&ipu_lock, lock_flags);
_ipu_dmfc_set_wait4eot(dma_chan, width);
spin_unlock_irqrestore(&ipu_lock, lock_flags);
diff --git a/drivers/mxc/ipu3/ipu_disp.c b/drivers/mxc/ipu3/ipu_disp.c
index 9e8d70379d36..ca42bc5ec82a 100644
--- a/drivers/mxc/ipu3/ipu_disp.c
+++ b/drivers/mxc/ipu3/ipu_disp.c
@@ -81,8 +81,8 @@ void _ipu_dmfc_init(int dmfc_type, int first)
* 1C, 2C and 6B, 6F unused;
*/
printk(KERN_INFO "IPU DMFC DC HIGH RESOLUTION: 1(0~3), 5B(4,5), 5F(6,7)\n");
- dmfc_wr_chan = 0x00000088;
- dmfc_dp_chan = 0x00009694;
+ dmfc_wr_chan = 0x00000008;
+ dmfc_dp_chan = 0x00001614;
dmfc_size_28 = 256*4;
dmfc_size_29 = 0;
dmfc_size_24 = 0;
@@ -95,8 +95,8 @@ void _ipu_dmfc_init(int dmfc_type, int first)
* 1C, 2C and 6B, 6F unused;
*/
printk(KERN_INFO "IPU DMFC DP HIGH RESOLUTION: 1(0,1), 5B(2~5), 5F(6,7)\n");
- dmfc_wr_chan = 0x00000090;
- dmfc_dp_chan = 0x0000968a;
+ dmfc_wr_chan = 0x00000010;
+ dmfc_dp_chan = 0x0000160a;
dmfc_size_28 = 128*4;
dmfc_size_29 = 0;
dmfc_size_24 = 0;
@@ -109,7 +109,7 @@ void _ipu_dmfc_init(int dmfc_type, int first)
*/
printk(KERN_INFO "IPU DMFC ONLY-DP HIGH RESOLUTION: 5B(0~3), 5F(4~7)\n");
dmfc_wr_chan = 0x00000000;
- dmfc_dp_chan = 0x00008c88;
+ dmfc_dp_chan = 0x00000c08;
dmfc_size_28 = 0;
dmfc_size_29 = 0;
dmfc_size_24 = 0;
@@ -122,8 +122,8 @@ void _ipu_dmfc_init(int dmfc_type, int first)
* 1C, 2C and 6B, 6F unused;
*/
printk(KERN_INFO "IPU DMFC NORMAL mode: 1(0~1), 5B(4,5), 5F(6,7)\n");
- dmfc_wr_chan = 0x00000090;
- dmfc_dp_chan = 0x00009694;
+ dmfc_wr_chan = 0x00000010;
+ dmfc_dp_chan = 0x00001614;
dmfc_size_28 = 128*4;
dmfc_size_29 = 0;
dmfc_size_24 = 0;
diff --git a/drivers/mxc/ipu3/ipu_param_mem.h b/drivers/mxc/ipu3/ipu_param_mem.h
index 00ce4ea6c60c..b2049de52f2b 100644
--- a/drivers/mxc/ipu3/ipu_param_mem.h
+++ b/drivers/mxc/ipu3/ipu_param_mem.h
@@ -179,7 +179,7 @@ static inline void _ipu_ch_param_init(int ch,
case IPU_PIX_FMT_RGB565:
ipu_ch_param_set_field(&params, 0, 107, 3, 3); /* bits/pixel */
ipu_ch_param_set_field(&params, 1, 85, 4, 7); /* pix format */
- ipu_ch_param_set_field(&params, 1, 78, 7, 15); /* burst size */
+ ipu_ch_param_set_field(&params, 1, 78, 7, 31); /* burst size */
_ipu_ch_params_set_packing(&params, 5, 0, 6, 5, 5, 11, 8, 16);
break;