summaryrefslogtreecommitdiff
path: root/patches.tizen/0860-exynos_drm_fimc-replace-hw-access-macros-with-functi.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches.tizen/0860-exynos_drm_fimc-replace-hw-access-macros-with-functi.patch')
-rw-r--r--patches.tizen/0860-exynos_drm_fimc-replace-hw-access-macros-with-functi.patch850
1 files changed, 850 insertions, 0 deletions
diff --git a/patches.tizen/0860-exynos_drm_fimc-replace-hw-access-macros-with-functi.patch b/patches.tizen/0860-exynos_drm_fimc-replace-hw-access-macros-with-functi.patch
new file mode 100644
index 00000000000..81bd4b9b4fc
--- /dev/null
+++ b/patches.tizen/0860-exynos_drm_fimc-replace-hw-access-macros-with-functi.patch
@@ -0,0 +1,850 @@
+From 4e191d4a852529db8643eda73b93f9fa9a4753aa Mon Sep 17 00:00:00 2001
+From: Andrzej Hajda <a.hajda@samsung.com>
+Date: Wed, 9 Oct 2013 13:23:21 +0200
+Subject: [PATCH 0860/1302] exynos_drm_fimc: replace hw access macros with
+ functions
+
+HW access macros depended on presence of ctx local variable.
+This patch replaces them with proper functions.
+
+Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
+Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
+---
+ drivers/gpu/drm/exynos/exynos_drm_fimc.c | 305 +++++++++++++++----------------
+ 1 file changed, 147 insertions(+), 158 deletions(-)
+
+diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimc.c b/drivers/gpu/drm/exynos/exynos_drm_fimc.c
+index 9dbc90d..455266e 100644
+--- a/drivers/gpu/drm/exynos/exynos_drm_fimc.c
++++ b/drivers/gpu/drm/exynos/exynos_drm_fimc.c
+@@ -69,9 +69,6 @@
+ #define get_fimc_context(dev) platform_get_drvdata(to_platform_device(dev))
+ #define get_ctx_from_ippdrv(ippdrv) container_of(ippdrv,\
+ struct fimc_context, ippdrv);
+-#define fimc_read(offset) readl(ctx->regs + (offset))
+-#define fimc_write(cfg, offset) writel(cfg, ctx->regs + (offset))
+-
+ enum fimc_wb {
+ FIMC_WB_NONE,
+ FIMC_WB_A,
+@@ -172,39 +169,53 @@ struct fimc_context {
+ bool suspended;
+ };
+
++static u32 fimc_read(struct fimc_context *ctx, u32 reg)
++{
++ return readl(ctx->regs + reg);
++}
++
++static void fimc_write(struct fimc_context *ctx, u32 val, u32 reg)
++{
++ writel(val, ctx->regs + reg);
++}
++
++static void fimc_set_bits(struct fimc_context *ctx, u32 reg, u32 bits)
++{
++ void __iomem *r = ctx->regs + reg;
++
++ writel(readl(r) | bits, r);
++}
++
++static void fimc_clear_bits(struct fimc_context *ctx, u32 reg, u32 bits)
++{
++ void __iomem *r = ctx->regs + reg;
++
++ writel(readl(r) & ~bits, r);
++}
++
+ static void fimc_sw_reset(struct fimc_context *ctx)
+ {
+ u32 cfg;
+
+ /* stop dma operation */
+- cfg = fimc_read(EXYNOS_CISTATUS);
+- if (EXYNOS_CISTATUS_GET_ENVID_STATUS(cfg)) {
+- cfg = fimc_read(EXYNOS_MSCTRL);
+- cfg &= ~EXYNOS_MSCTRL_ENVID;
+- fimc_write(cfg, EXYNOS_MSCTRL);
+- }
++ cfg = fimc_read(ctx, EXYNOS_CISTATUS);
++ if (EXYNOS_CISTATUS_GET_ENVID_STATUS(cfg))
++ fimc_clear_bits(ctx, EXYNOS_MSCTRL, EXYNOS_MSCTRL_ENVID);
+
+- cfg = fimc_read(EXYNOS_CISRCFMT);
+- cfg |= EXYNOS_CISRCFMT_ITU601_8BIT;
+- fimc_write(cfg, EXYNOS_CISRCFMT);
++ fimc_set_bits(ctx, EXYNOS_CISRCFMT, EXYNOS_CISRCFMT_ITU601_8BIT);
+
+ /* disable image capture */
+- cfg = fimc_read(EXYNOS_CIIMGCPT);
+- cfg &= ~(EXYNOS_CIIMGCPT_IMGCPTEN_SC | EXYNOS_CIIMGCPT_IMGCPTEN);
+- fimc_write(cfg, EXYNOS_CIIMGCPT);
++ fimc_clear_bits(ctx, EXYNOS_CIIMGCPT,
++ EXYNOS_CIIMGCPT_IMGCPTEN_SC | EXYNOS_CIIMGCPT_IMGCPTEN);
+
+ /* s/w reset */
+- cfg = fimc_read(EXYNOS_CIGCTRL);
+- cfg |= (EXYNOS_CIGCTRL_SWRST);
+- fimc_write(cfg, EXYNOS_CIGCTRL);
++ fimc_set_bits(ctx, EXYNOS_CIGCTRL, EXYNOS_CIGCTRL_SWRST);
+
+ /* s/w reset complete */
+- cfg = fimc_read(EXYNOS_CIGCTRL);
+- cfg &= ~EXYNOS_CIGCTRL_SWRST;
+- fimc_write(cfg, EXYNOS_CIGCTRL);
++ fimc_clear_bits(ctx, EXYNOS_CIGCTRL, EXYNOS_CIGCTRL_SWRST);
+
+ /* reset sequence */
+- fimc_write(0x0, EXYNOS_CIFCNTSEQ);
++ fimc_write(ctx, 0x0, EXYNOS_CIFCNTSEQ);
+ }
+
+ static int fimc_set_camblk_fimd0_wb(struct fimc_context *ctx)
+@@ -220,7 +231,7 @@ static void fimc_set_type_ctrl(struct fimc_context *ctx, enum fimc_wb wb)
+
+ DRM_DEBUG_KMS("%s:wb[%d]\n", __func__, wb);
+
+- cfg = fimc_read(EXYNOS_CIGCTRL);
++ cfg = fimc_read(ctx, EXYNOS_CIGCTRL);
+ cfg &= ~(EXYNOS_CIGCTRL_TESTPATTERN_MASK |
+ EXYNOS_CIGCTRL_SELCAM_ITU_MASK |
+ EXYNOS_CIGCTRL_SELCAM_MIPI_MASK |
+@@ -246,7 +257,7 @@ static void fimc_set_type_ctrl(struct fimc_context *ctx, enum fimc_wb wb)
+ break;
+ }
+
+- fimc_write(cfg, EXYNOS_CIGCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CIGCTRL);
+ }
+
+ static void fimc_set_polarity(struct fimc_context *ctx,
+@@ -259,7 +270,7 @@ static void fimc_set_polarity(struct fimc_context *ctx,
+ DRM_DEBUG_KMS("%s:inv_href[%d]inv_hsync[%d]\n",
+ __func__, pol->inv_href, pol->inv_hsync);
+
+- cfg = fimc_read(EXYNOS_CIGCTRL);
++ cfg = fimc_read(ctx, EXYNOS_CIGCTRL);
+ cfg &= ~(EXYNOS_CIGCTRL_INVPOLPCLK | EXYNOS_CIGCTRL_INVPOLVSYNC |
+ EXYNOS_CIGCTRL_INVPOLHREF | EXYNOS_CIGCTRL_INVPOLHSYNC);
+
+@@ -272,7 +283,7 @@ static void fimc_set_polarity(struct fimc_context *ctx,
+ if (pol->inv_hsync)
+ cfg |= EXYNOS_CIGCTRL_INVPOLHSYNC;
+
+- fimc_write(cfg, EXYNOS_CIGCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CIGCTRL);
+ }
+
+ static void fimc_handle_jpeg(struct fimc_context *ctx, bool enable)
+@@ -281,13 +292,13 @@ static void fimc_handle_jpeg(struct fimc_context *ctx, bool enable)
+
+ DRM_DEBUG_KMS("%s:enable[%d]\n", __func__, enable);
+
+- cfg = fimc_read(EXYNOS_CIGCTRL);
++ cfg = fimc_read(ctx, EXYNOS_CIGCTRL);
+ if (enable)
+ cfg |= EXYNOS_CIGCTRL_CAM_JPEG;
+ else
+ cfg &= ~EXYNOS_CIGCTRL_CAM_JPEG;
+
+- fimc_write(cfg, EXYNOS_CIGCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CIGCTRL);
+ }
+
+ static void fimc_mask_irq(struct fimc_context *ctx, bool enable,
+@@ -295,7 +306,7 @@ static void fimc_mask_irq(struct fimc_context *ctx, bool enable,
+ {
+ u32 cfg;
+
+- cfg = fimc_read(EXYNOS_CIGCTRL);
++ cfg = fimc_read(ctx, EXYNOS_CIGCTRL);
+ cfg &= ~(EXYNOS_CIGCTRL_IRQ_OVFEN | EXYNOS_CIGCTRL_IRQ_ENABLE |
+ EXYNOS_CIGCTRL_IRQ_LEVEL);
+ if (enable) {
+@@ -305,42 +316,33 @@ static void fimc_mask_irq(struct fimc_context *ctx, bool enable,
+ if (level)
+ cfg |= EXYNOS_CIGCTRL_IRQ_LEVEL;
+ }
+- fimc_write(cfg, EXYNOS_CIGCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CIGCTRL);
+ }
+
+ static void fimc_clear_irq(struct fimc_context *ctx)
+ {
+- u32 cfg;
+-
+- cfg = fimc_read(EXYNOS_CIGCTRL);
+- cfg |= EXYNOS_CIGCTRL_IRQ_CLR;
+- fimc_write(cfg, EXYNOS_CIGCTRL);
++ fimc_set_bits(ctx, EXYNOS_CIGCTRL, EXYNOS_CIGCTRL_IRQ_CLR);
+ }
+
+ static bool fimc_check_ovf(struct fimc_context *ctx)
+ {
+ struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;
+- u32 cfg, status, flag;
++ u32 status, flag;
+
+- status = fimc_read(EXYNOS_CISTATUS);
++ status = fimc_read(ctx, EXYNOS_CISTATUS);
+ flag = EXYNOS_CISTATUS_OVFIY | EXYNOS_CISTATUS_OVFICB |
+ EXYNOS_CISTATUS_OVFICR;
+
+ DRM_DEBUG_KMS("%s:flag[0x%x]\n", __func__, flag);
+
+ if (status & flag) {
+- cfg = fimc_read(EXYNOS_CIWDOFST);
+- cfg |= (EXYNOS_CIWDOFST_CLROVFIY | EXYNOS_CIWDOFST_CLROVFICB |
++ fimc_set_bits(ctx, EXYNOS_CIWDOFST,
++ EXYNOS_CIWDOFST_CLROVFIY | EXYNOS_CIWDOFST_CLROVFICB |
+ EXYNOS_CIWDOFST_CLROVFICR);
+-
+- fimc_write(cfg, EXYNOS_CIWDOFST);
+-
+- cfg = fimc_read(EXYNOS_CIWDOFST);
+- cfg &= ~(EXYNOS_CIWDOFST_CLROVFIY | EXYNOS_CIWDOFST_CLROVFICB |
++ fimc_clear_bits(ctx, EXYNOS_CIWDOFST,
++ EXYNOS_CIWDOFST_CLROVFIY | EXYNOS_CIWDOFST_CLROVFICB |
+ EXYNOS_CIWDOFST_CLROVFICR);
+
+- fimc_write(cfg, EXYNOS_CIWDOFST);
+-
+ dev_err(ippdrv->dev, "occured overflow at %d, status 0x%x.\n",
+ ctx->id, status);
+ return true;
+@@ -353,7 +355,7 @@ static bool fimc_check_frame_end(struct fimc_context *ctx)
+ {
+ u32 cfg;
+
+- cfg = fimc_read(EXYNOS_CISTATUS);
++ cfg = fimc_read(ctx, EXYNOS_CISTATUS);
+
+ DRM_DEBUG_KMS("%s:cfg[0x%x]\n", __func__, cfg);
+
+@@ -361,7 +363,7 @@ static bool fimc_check_frame_end(struct fimc_context *ctx)
+ return false;
+
+ cfg &= ~(EXYNOS_CISTATUS_FRAMEEND);
+- fimc_write(cfg, EXYNOS_CISTATUS);
++ fimc_write(ctx, cfg, EXYNOS_CISTATUS);
+
+ return true;
+ }
+@@ -371,7 +373,7 @@ static int fimc_get_buf_id(struct fimc_context *ctx)
+ u32 cfg;
+ int frame_cnt, buf_id;
+
+- cfg = fimc_read(EXYNOS_CISTATUS2);
++ cfg = fimc_read(ctx, EXYNOS_CISTATUS2);
+ frame_cnt = EXYNOS_CISTATUS2_GET_FRAMECOUNT_BEFORE(cfg);
+
+ if (frame_cnt == 0)
+@@ -398,13 +400,13 @@ static void fimc_handle_lastend(struct fimc_context *ctx, bool enable)
+
+ DRM_DEBUG_KMS("%s:enable[%d]\n", __func__, enable);
+
+- cfg = fimc_read(EXYNOS_CIOCTRL);
++ cfg = fimc_read(ctx, EXYNOS_CIOCTRL);
+ if (enable)
+ cfg |= EXYNOS_CIOCTRL_LASTENDEN;
+ else
+ cfg &= ~EXYNOS_CIOCTRL_LASTENDEN;
+
+- fimc_write(cfg, EXYNOS_CIOCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CIOCTRL);
+ }
+
+
+@@ -416,18 +418,18 @@ static int fimc_src_set_fmt_order(struct fimc_context *ctx, u32 fmt)
+ DRM_DEBUG_KMS("%s:fmt[0x%x]\n", __func__, fmt);
+
+ /* RGB */
+- cfg = fimc_read(EXYNOS_CISCCTRL);
++ cfg = fimc_read(ctx, EXYNOS_CISCCTRL);
+ cfg &= ~EXYNOS_CISCCTRL_INRGB_FMT_RGB_MASK;
+
+ switch (fmt) {
+ case DRM_FORMAT_RGB565:
+ cfg |= EXYNOS_CISCCTRL_INRGB_FMT_RGB565;
+- fimc_write(cfg, EXYNOS_CISCCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CISCCTRL);
+ return 0;
+ case DRM_FORMAT_RGB888:
+ case DRM_FORMAT_XRGB8888:
+ cfg |= EXYNOS_CISCCTRL_INRGB_FMT_RGB888;
+- fimc_write(cfg, EXYNOS_CISCCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CISCCTRL);
+ return 0;
+ default:
+ /* bypass */
+@@ -435,7 +437,7 @@ static int fimc_src_set_fmt_order(struct fimc_context *ctx, u32 fmt)
+ }
+
+ /* YUV */
+- cfg = fimc_read(EXYNOS_MSCTRL);
++ cfg = fimc_read(ctx, EXYNOS_MSCTRL);
+ cfg &= ~(EXYNOS_MSCTRL_ORDER2P_SHIFT_MASK |
+ EXYNOS_MSCTRL_C_INT_IN_2PLANE |
+ EXYNOS_MSCTRL_ORDER422_YCBYCR);
+@@ -475,7 +477,7 @@ static int fimc_src_set_fmt_order(struct fimc_context *ctx, u32 fmt)
+ return -EINVAL;
+ }
+
+- fimc_write(cfg, EXYNOS_MSCTRL);
++ fimc_write(ctx, cfg, EXYNOS_MSCTRL);
+
+ return 0;
+ }
+@@ -488,7 +490,7 @@ static int fimc_src_set_fmt(struct device *dev, u32 fmt)
+
+ DRM_DEBUG_KMS("%s:fmt[0x%x]\n", __func__, fmt);
+
+- cfg = fimc_read(EXYNOS_MSCTRL);
++ cfg = fimc_read(ctx, EXYNOS_MSCTRL);
+ cfg &= ~EXYNOS_MSCTRL_INFORMAT_RGB;
+
+ switch (fmt) {
+@@ -523,9 +525,9 @@ static int fimc_src_set_fmt(struct device *dev, u32 fmt)
+ return -EINVAL;
+ }
+
+- fimc_write(cfg, EXYNOS_MSCTRL);
++ fimc_write(ctx, cfg, EXYNOS_MSCTRL);
+
+- cfg = fimc_read(EXYNOS_CIDMAPARAM);
++ cfg = fimc_read(ctx, EXYNOS_CIDMAPARAM);
+ cfg &= ~EXYNOS_CIDMAPARAM_R_MODE_MASK;
+
+ if (fmt == DRM_FORMAT_NV12MT)
+@@ -533,7 +535,7 @@ static int fimc_src_set_fmt(struct device *dev, u32 fmt)
+ else
+ cfg |= EXYNOS_CIDMAPARAM_R_MODE_LINEAR;
+
+- fimc_write(cfg, EXYNOS_CIDMAPARAM);
++ fimc_write(ctx, cfg, EXYNOS_CIDMAPARAM);
+
+ return fimc_src_set_fmt_order(ctx, fmt);
+ }
+@@ -549,11 +551,11 @@ static int fimc_src_set_transf(struct device *dev,
+ DRM_DEBUG_KMS("%s:degree[%d]flip[0x%x]\n", __func__,
+ degree, flip);
+
+- cfg1 = fimc_read(EXYNOS_MSCTRL);
++ cfg1 = fimc_read(ctx, EXYNOS_MSCTRL);
+ cfg1 &= ~(EXYNOS_MSCTRL_FLIP_X_MIRROR |
+ EXYNOS_MSCTRL_FLIP_Y_MIRROR);
+
+- cfg2 = fimc_read(EXYNOS_CITRGFMT);
++ cfg2 = fimc_read(ctx, EXYNOS_CITRGFMT);
+ cfg2 &= ~EXYNOS_CITRGFMT_INROT90_CLOCKWISE;
+
+ switch (degree) {
+@@ -592,8 +594,8 @@ static int fimc_src_set_transf(struct device *dev,
+ return -EINVAL;
+ }
+
+- fimc_write(cfg1, EXYNOS_MSCTRL);
+- fimc_write(cfg2, EXYNOS_CITRGFMT);
++ fimc_write(ctx, cfg1, EXYNOS_MSCTRL);
++ fimc_write(ctx, cfg2, EXYNOS_CITRGFMT);
+ *swap = (cfg2 & EXYNOS_CITRGFMT_INROT90_CLOCKWISE) ? 1 : 0;
+
+ return 0;
+@@ -619,17 +621,17 @@ static int fimc_set_window(struct fimc_context *ctx,
+ * set window offset 1, 2 size
+ * check figure 43-21 in user manual
+ */
+- cfg = fimc_read(EXYNOS_CIWDOFST);
++ cfg = fimc_read(ctx, EXYNOS_CIWDOFST);
+ cfg &= ~(EXYNOS_CIWDOFST_WINHOROFST_MASK |
+ EXYNOS_CIWDOFST_WINVEROFST_MASK);
+ cfg |= (EXYNOS_CIWDOFST_WINHOROFST(h1) |
+ EXYNOS_CIWDOFST_WINVEROFST(v1));
+ cfg |= EXYNOS_CIWDOFST_WINOFSEN;
+- fimc_write(cfg, EXYNOS_CIWDOFST);
++ fimc_write(ctx, cfg, EXYNOS_CIWDOFST);
+
+ cfg = (EXYNOS_CIWDOFST2_WINHOROFST2(h2) |
+ EXYNOS_CIWDOFST2_WINVEROFST2(v2));
+- fimc_write(cfg, EXYNOS_CIWDOFST2);
++ fimc_write(ctx, cfg, EXYNOS_CIWDOFST2);
+
+ return 0;
+ }
+@@ -649,7 +651,7 @@ static int fimc_src_set_size(struct device *dev, int swap,
+ cfg = (EXYNOS_ORGISIZE_HORIZONTAL(img_sz.hsize) |
+ EXYNOS_ORGISIZE_VERTICAL(img_sz.vsize));
+
+- fimc_write(cfg, EXYNOS_ORGISIZE);
++ fimc_write(ctx, cfg, EXYNOS_ORGISIZE);
+
+ DRM_DEBUG_KMS("%s:x[%d]y[%d]w[%d]h[%d]\n", __func__,
+ pos->x, pos->y, pos->w, pos->h);
+@@ -662,12 +664,12 @@ static int fimc_src_set_size(struct device *dev, int swap,
+ }
+
+ /* set input DMA image size */
+- cfg = fimc_read(EXYNOS_CIREAL_ISIZE);
++ cfg = fimc_read(ctx, EXYNOS_CIREAL_ISIZE);
+ cfg &= ~(EXYNOS_CIREAL_ISIZE_HEIGHT_MASK |
+ EXYNOS_CIREAL_ISIZE_WIDTH_MASK);
+ cfg |= (EXYNOS_CIREAL_ISIZE_WIDTH(img_pos.w) |
+ EXYNOS_CIREAL_ISIZE_HEIGHT(img_pos.h));
+- fimc_write(cfg, EXYNOS_CIREAL_ISIZE);
++ fimc_write(ctx, cfg, EXYNOS_CIREAL_ISIZE);
+
+ /*
+ * set input FIFO image size
+@@ -676,18 +678,18 @@ static int fimc_src_set_size(struct device *dev, int swap,
+ cfg = (EXYNOS_CISRCFMT_ITU601_8BIT |
+ EXYNOS_CISRCFMT_SOURCEHSIZE(img_sz.hsize) |
+ EXYNOS_CISRCFMT_SOURCEVSIZE(img_sz.vsize));
+- fimc_write(cfg, EXYNOS_CISRCFMT);
++ fimc_write(ctx, cfg, EXYNOS_CISRCFMT);
+
+ /* offset Y(RGB), Cb, Cr */
+ cfg = (EXYNOS_CIIYOFF_HORIZONTAL(img_pos.x) |
+ EXYNOS_CIIYOFF_VERTICAL(img_pos.y));
+- fimc_write(cfg, EXYNOS_CIIYOFF);
++ fimc_write(ctx, cfg, EXYNOS_CIIYOFF);
+ cfg = (EXYNOS_CIICBOFF_HORIZONTAL(img_pos.x) |
+ EXYNOS_CIICBOFF_VERTICAL(img_pos.y));
+- fimc_write(cfg, EXYNOS_CIICBOFF);
++ fimc_write(ctx, cfg, EXYNOS_CIICBOFF);
+ cfg = (EXYNOS_CIICROFF_HORIZONTAL(img_pos.x) |
+ EXYNOS_CIICROFF_VERTICAL(img_pos.y));
+- fimc_write(cfg, EXYNOS_CIICROFF);
++ fimc_write(ctx, cfg, EXYNOS_CIICROFF);
+
+ return fimc_set_window(ctx, &img_pos, &img_sz);
+ }
+@@ -721,18 +723,18 @@ static int fimc_src_set_addr(struct device *dev,
+ switch (buf_type) {
+ case IPP_BUF_ENQUEUE:
+ config = &property->config[EXYNOS_DRM_OPS_SRC];
+- fimc_write(buf_info->base[EXYNOS_DRM_PLANAR_Y],
++ fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_Y],
+ EXYNOS_CIIYSA(0));
+
+ if (config->fmt == DRM_FORMAT_YVU420) {
+- fimc_write(buf_info->base[EXYNOS_DRM_PLANAR_CR],
++ fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CR],
+ EXYNOS_CIICBSA(0));
+- fimc_write(buf_info->base[EXYNOS_DRM_PLANAR_CB],
++ fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CB],
+ EXYNOS_CIICRSA(0));
+ } else {
+- fimc_write(buf_info->base[EXYNOS_DRM_PLANAR_CB],
++ fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CB],
+ EXYNOS_CIICBSA(0));
+- fimc_write(buf_info->base[EXYNOS_DRM_PLANAR_CR],
++ fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CR],
+ EXYNOS_CIICRSA(0));
+ }
+ break;
+@@ -760,22 +762,22 @@ static int fimc_dst_set_fmt_order(struct fimc_context *ctx, u32 fmt)
+ DRM_DEBUG_KMS("%s:fmt[0x%x]\n", __func__, fmt);
+
+ /* RGB */
+- cfg = fimc_read(EXYNOS_CISCCTRL);
++ cfg = fimc_read(ctx, EXYNOS_CISCCTRL);
+ cfg &= ~EXYNOS_CISCCTRL_OUTRGB_FMT_RGB_MASK;
+
+ switch (fmt) {
+ case DRM_FORMAT_RGB565:
+ cfg |= EXYNOS_CISCCTRL_OUTRGB_FMT_RGB565;
+- fimc_write(cfg, EXYNOS_CISCCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CISCCTRL);
+ return 0;
+ case DRM_FORMAT_RGB888:
+ cfg |= EXYNOS_CISCCTRL_OUTRGB_FMT_RGB888;
+- fimc_write(cfg, EXYNOS_CISCCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CISCCTRL);
+ return 0;
+ case DRM_FORMAT_XRGB8888:
+ cfg |= (EXYNOS_CISCCTRL_OUTRGB_FMT_RGB888 |
+ EXYNOS_CISCCTRL_EXTRGB_EXTENSION);
+- fimc_write(cfg, EXYNOS_CISCCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CISCCTRL);
+ break;
+ default:
+ /* bypass */
+@@ -783,7 +785,7 @@ static int fimc_dst_set_fmt_order(struct fimc_context *ctx, u32 fmt)
+ }
+
+ /* YUV */
+- cfg = fimc_read(EXYNOS_CIOCTRL);
++ cfg = fimc_read(ctx, EXYNOS_CIOCTRL);
+ cfg &= ~(EXYNOS_CIOCTRL_ORDER2P_MASK |
+ EXYNOS_CIOCTRL_ORDER422_MASK |
+ EXYNOS_CIOCTRL_YCBCR_PLANE_MASK);
+@@ -825,7 +827,7 @@ static int fimc_dst_set_fmt_order(struct fimc_context *ctx, u32 fmt)
+ return -EINVAL;
+ }
+
+- fimc_write(cfg, EXYNOS_CIOCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CIOCTRL);
+
+ return 0;
+ }
+@@ -838,16 +840,16 @@ static int fimc_dst_set_fmt(struct device *dev, u32 fmt)
+
+ DRM_DEBUG_KMS("%s:fmt[0x%x]\n", __func__, fmt);
+
+- cfg = fimc_read(EXYNOS_CIEXTEN);
++ cfg = fimc_read(ctx, EXYNOS_CIEXTEN);
+
+ if (fmt == DRM_FORMAT_AYUV) {
+ cfg |= EXYNOS_CIEXTEN_YUV444_OUT;
+- fimc_write(cfg, EXYNOS_CIEXTEN);
++ fimc_write(ctx, cfg, EXYNOS_CIEXTEN);
+ } else {
+ cfg &= ~EXYNOS_CIEXTEN_YUV444_OUT;
+- fimc_write(cfg, EXYNOS_CIEXTEN);
++ fimc_write(ctx, cfg, EXYNOS_CIEXTEN);
+
+- cfg = fimc_read(EXYNOS_CITRGFMT);
++ cfg = fimc_read(ctx, EXYNOS_CITRGFMT);
+ cfg &= ~EXYNOS_CITRGFMT_OUTFORMAT_MASK;
+
+ switch (fmt) {
+@@ -880,10 +882,10 @@ static int fimc_dst_set_fmt(struct device *dev, u32 fmt)
+ return -EINVAL;
+ }
+
+- fimc_write(cfg, EXYNOS_CITRGFMT);
++ fimc_write(ctx, cfg, EXYNOS_CITRGFMT);
+ }
+
+- cfg = fimc_read(EXYNOS_CIDMAPARAM);
++ cfg = fimc_read(ctx, EXYNOS_CIDMAPARAM);
+ cfg &= ~EXYNOS_CIDMAPARAM_W_MODE_MASK;
+
+ if (fmt == DRM_FORMAT_NV12MT)
+@@ -891,7 +893,7 @@ static int fimc_dst_set_fmt(struct device *dev, u32 fmt)
+ else
+ cfg |= EXYNOS_CIDMAPARAM_W_MODE_LINEAR;
+
+- fimc_write(cfg, EXYNOS_CIDMAPARAM);
++ fimc_write(ctx, cfg, EXYNOS_CIDMAPARAM);
+
+ return fimc_dst_set_fmt_order(ctx, fmt);
+ }
+@@ -907,7 +909,7 @@ static int fimc_dst_set_transf(struct device *dev,
+ DRM_DEBUG_KMS("%s:degree[%d]flip[0x%x]\n", __func__,
+ degree, flip);
+
+- cfg = fimc_read(EXYNOS_CITRGFMT);
++ cfg = fimc_read(ctx, EXYNOS_CITRGFMT);
+ cfg &= ~EXYNOS_CITRGFMT_FLIP_MASK;
+ cfg &= ~EXYNOS_CITRGFMT_OUTROT90_CLOCKWISE;
+
+@@ -947,7 +949,7 @@ static int fimc_dst_set_transf(struct device *dev,
+ return -EINVAL;
+ }
+
+- fimc_write(cfg, EXYNOS_CITRGFMT);
++ fimc_write(ctx, cfg, EXYNOS_CITRGFMT);
+ *swap = (cfg & EXYNOS_CITRGFMT_OUTROT90_CLOCKWISE) ? 1 : 0;
+
+ return 0;
+@@ -963,7 +965,7 @@ static int fimc_set_prescaler(struct fimc_context *ctx, struct fimc_scaler *sc,
+ int ret = 0;
+ u32 src_w, src_h, dst_w, dst_h;
+
+- cfg_ext = fimc_read(EXYNOS_CITRGFMT);
++ cfg_ext = fimc_read(ctx, EXYNOS_CITRGFMT);
+ if (cfg_ext & EXYNOS_CITRGFMT_INROT90_CLOCKWISE) {
+ src_w = src->h;
+ src_h = src->w;
+@@ -1013,11 +1015,11 @@ static int fimc_set_prescaler(struct fimc_context *ctx, struct fimc_scaler *sc,
+ cfg = (EXYNOS_CISCPRERATIO_SHFACTOR(shfactor) |
+ EXYNOS_CISCPRERATIO_PREHORRATIO(1 << hfactor) |
+ EXYNOS_CISCPRERATIO_PREVERRATIO(1 << vfactor));
+- fimc_write(cfg, EXYNOS_CISCPRERATIO);
++ fimc_write(ctx, cfg, EXYNOS_CISCPRERATIO);
+
+ cfg = (EXYNOS_CISCPREDST_PREDSTWIDTH(pre_dst_width) |
+ EXYNOS_CISCPREDST_PREDSTHEIGHT(pre_dst_height));
+- fimc_write(cfg, EXYNOS_CISCPREDST);
++ fimc_write(ctx, cfg, EXYNOS_CISCPREDST);
+
+ return ret;
+ }
+@@ -1031,7 +1033,7 @@ static void fimc_set_scaler(struct fimc_context *ctx, struct fimc_scaler *sc)
+ DRM_DEBUG_KMS("%s:hratio[%d]vratio[%d]\n",
+ __func__, sc->hratio, sc->vratio);
+
+- cfg = fimc_read(EXYNOS_CISCCTRL);
++ cfg = fimc_read(ctx, EXYNOS_CISCCTRL);
+ cfg &= ~(EXYNOS_CISCCTRL_SCALERBYPASS |
+ EXYNOS_CISCCTRL_SCALEUP_H | EXYNOS_CISCCTRL_SCALEUP_V |
+ EXYNOS_CISCCTRL_MAIN_V_RATIO_MASK |
+@@ -1051,14 +1053,14 @@ static void fimc_set_scaler(struct fimc_context *ctx, struct fimc_scaler *sc)
+
+ cfg |= (EXYNOS_CISCCTRL_MAINHORRATIO((sc->hratio >> 6)) |
+ EXYNOS_CISCCTRL_MAINVERRATIO((sc->vratio >> 6)));
+- fimc_write(cfg, EXYNOS_CISCCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CISCCTRL);
+
+- cfg_ext = fimc_read(EXYNOS_CIEXTEN);
++ cfg_ext = fimc_read(ctx, EXYNOS_CIEXTEN);
+ cfg_ext &= ~EXYNOS_CIEXTEN_MAINHORRATIO_EXT_MASK;
+ cfg_ext &= ~EXYNOS_CIEXTEN_MAINVERRATIO_EXT_MASK;
+ cfg_ext |= (EXYNOS_CIEXTEN_MAINHORRATIO_EXT(sc->hratio) |
+ EXYNOS_CIEXTEN_MAINVERRATIO_EXT(sc->vratio));
+- fimc_write(cfg_ext, EXYNOS_CIEXTEN);
++ fimc_write(ctx, cfg_ext, EXYNOS_CIEXTEN);
+ }
+
+ static int fimc_dst_set_size(struct device *dev, int swap,
+@@ -1076,13 +1078,13 @@ static int fimc_dst_set_size(struct device *dev, int swap,
+ cfg = (EXYNOS_ORGOSIZE_HORIZONTAL(img_sz.hsize) |
+ EXYNOS_ORGOSIZE_VERTICAL(img_sz.vsize));
+
+- fimc_write(cfg, EXYNOS_ORGOSIZE);
++ fimc_write(ctx, cfg, EXYNOS_ORGOSIZE);
+
+ DRM_DEBUG_KMS("%s:x[%d]y[%d]w[%d]h[%d]\n",
+ __func__, pos->x, pos->y, pos->w, pos->h);
+
+ /* CSC ITU */
+- cfg = fimc_read(EXYNOS_CIGCTRL);
++ cfg = fimc_read(ctx, EXYNOS_CIGCTRL);
+ cfg &= ~EXYNOS_CIGCTRL_CSC_MASK;
+
+ if (sz->hsize >= FIMC_WIDTH_ITU_709)
+@@ -1090,7 +1092,7 @@ static int fimc_dst_set_size(struct device *dev, int swap,
+ else
+ cfg |= EXYNOS_CIGCTRL_CSC_ITU601;
+
+- fimc_write(cfg, EXYNOS_CIGCTRL);
++ fimc_write(ctx, cfg, EXYNOS_CIGCTRL);
+
+ if (swap) {
+ img_pos.w = pos->h;
+@@ -1100,27 +1102,27 @@ static int fimc_dst_set_size(struct device *dev, int swap,
+ }
+
+ /* target image size */
+- cfg = fimc_read(EXYNOS_CITRGFMT);
++ cfg = fimc_read(ctx, EXYNOS_CITRGFMT);
+ cfg &= ~(EXYNOS_CITRGFMT_TARGETH_MASK |
+ EXYNOS_CITRGFMT_TARGETV_MASK);
+ cfg |= (EXYNOS_CITRGFMT_TARGETHSIZE(img_pos.w) |
+ EXYNOS_CITRGFMT_TARGETVSIZE(img_pos.h));
+- fimc_write(cfg, EXYNOS_CITRGFMT);
++ fimc_write(ctx, cfg, EXYNOS_CITRGFMT);
+
+ /* target area */
+ cfg = EXYNOS_CITAREA_TARGET_AREA(img_pos.w * img_pos.h);
+- fimc_write(cfg, EXYNOS_CITAREA);
++ fimc_write(ctx, cfg, EXYNOS_CITAREA);
+
+ /* offset Y(RGB), Cb, Cr */
+ cfg = (EXYNOS_CIOYOFF_HORIZONTAL(img_pos.x) |
+ EXYNOS_CIOYOFF_VERTICAL(img_pos.y));
+- fimc_write(cfg, EXYNOS_CIOYOFF);
++ fimc_write(ctx, cfg, EXYNOS_CIOYOFF);
+ cfg = (EXYNOS_CIOCBOFF_HORIZONTAL(img_pos.x) |
+ EXYNOS_CIOCBOFF_VERTICAL(img_pos.y));
+- fimc_write(cfg, EXYNOS_CIOCBOFF);
++ fimc_write(ctx, cfg, EXYNOS_CIOCBOFF);
+ cfg = (EXYNOS_CIOCROFF_HORIZONTAL(img_pos.x) |
+ EXYNOS_CIOCROFF_VERTICAL(img_pos.y));
+- fimc_write(cfg, EXYNOS_CIOCROFF);
++ fimc_write(ctx, cfg, EXYNOS_CIOCROFF);
+
+ return 0;
+ }
+@@ -1130,7 +1132,7 @@ static int fimc_dst_get_buf_seq(struct fimc_context *ctx)
+ u32 cfg, i, buf_num = 0;
+ u32 mask = 0x00000001;
+
+- cfg = fimc_read(EXYNOS_CIFCNTSEQ);
++ cfg = fimc_read(ctx, EXYNOS_CIFCNTSEQ);
+
+ for (i = 0; i < FIMC_REG_SZ; i++)
+ if (cfg & (mask << i))
+@@ -1156,7 +1158,7 @@ static int fimc_dst_set_buf_seq(struct fimc_context *ctx, u32 buf_id,
+ mutex_lock(&ctx->lock);
+
+ /* mask register set */
+- cfg = fimc_read(EXYNOS_CIFCNTSEQ);
++ cfg = fimc_read(ctx, EXYNOS_CIFCNTSEQ);
+
+ switch (buf_type) {
+ case IPP_BUF_ENQUEUE:
+@@ -1174,7 +1176,7 @@ static int fimc_dst_set_buf_seq(struct fimc_context *ctx, u32 buf_id,
+ /* sequence id */
+ cfg &= ~mask;
+ cfg |= (enable << buf_id);
+- fimc_write(cfg, EXYNOS_CIFCNTSEQ);
++ fimc_write(ctx, cfg, EXYNOS_CIFCNTSEQ);
+
+ /* interrupt enable */
+ if (buf_type == IPP_BUF_ENQUEUE &&
+@@ -1221,25 +1223,25 @@ static int fimc_dst_set_addr(struct device *dev,
+ case IPP_BUF_ENQUEUE:
+ config = &property->config[EXYNOS_DRM_OPS_DST];
+
+- fimc_write(buf_info->base[EXYNOS_DRM_PLANAR_Y],
++ fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_Y],
+ EXYNOS_CIOYSA(buf_id));
+
+ if (config->fmt == DRM_FORMAT_YVU420) {
+- fimc_write(buf_info->base[EXYNOS_DRM_PLANAR_CR],
++ fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CR],
+ EXYNOS_CIOCBSA(buf_id));
+- fimc_write(buf_info->base[EXYNOS_DRM_PLANAR_CB],
++ fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CB],
+ EXYNOS_CIOCRSA(buf_id));
+ } else {
+- fimc_write(buf_info->base[EXYNOS_DRM_PLANAR_CB],
++ fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CB],
+ EXYNOS_CIOCBSA(buf_id));
+- fimc_write(buf_info->base[EXYNOS_DRM_PLANAR_CR],
++ fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CR],
+ EXYNOS_CIOCRSA(buf_id));
+ }
+ break;
+ case IPP_BUF_DEQUEUE:
+- fimc_write(0x0, EXYNOS_CIOYSA(buf_id));
+- fimc_write(0x0, EXYNOS_CIOCBSA(buf_id));
+- fimc_write(0x0, EXYNOS_CIOCRSA(buf_id));
++ fimc_write(ctx, 0x0, EXYNOS_CIOYSA(buf_id));
++ fimc_write(ctx, 0x0, EXYNOS_CIOCBSA(buf_id));
++ fimc_write(ctx, 0x0, EXYNOS_CIOCRSA(buf_id));
+ break;
+ default:
+ /* bypass */
+@@ -1477,15 +1479,15 @@ static void fimc_clear_addr(struct fimc_context *ctx)
+ int i;
+
+ for (i = 0; i < FIMC_MAX_SRC; i++) {
+- fimc_write(0, EXYNOS_CIIYSA(i));
+- fimc_write(0, EXYNOS_CIICBSA(i));
+- fimc_write(0, EXYNOS_CIICRSA(i));
++ fimc_write(ctx, 0, EXYNOS_CIIYSA(i));
++ fimc_write(ctx, 0, EXYNOS_CIICBSA(i));
++ fimc_write(ctx, 0, EXYNOS_CIICRSA(i));
+ }
+
+ for (i = 0; i < FIMC_MAX_DST; i++) {
+- fimc_write(0, EXYNOS_CIOYSA(i));
+- fimc_write(0, EXYNOS_CIOCBSA(i));
+- fimc_write(0, EXYNOS_CIOCRSA(i));
++ fimc_write(ctx, 0, EXYNOS_CIOYSA(i));
++ fimc_write(ctx, 0, EXYNOS_CIOCBSA(i));
++ fimc_write(ctx, 0, EXYNOS_CIOCRSA(i));
+ }
+ }
+
+@@ -1551,10 +1553,10 @@ static int fimc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd)
+ fimc_handle_lastend(ctx, false);
+
+ /* setup dma */
+- cfg0 = fimc_read(EXYNOS_MSCTRL);
++ cfg0 = fimc_read(ctx, EXYNOS_MSCTRL);
+ cfg0 &= ~EXYNOS_MSCTRL_INPUT_MASK;
+ cfg0 |= EXYNOS_MSCTRL_INPUT_MEMORY;
+- fimc_write(cfg0, EXYNOS_MSCTRL);
++ fimc_write(ctx, cfg0, EXYNOS_MSCTRL);
+ break;
+ case IPP_CMD_WB:
+ fimc_set_type_ctrl(ctx, FIMC_WB_A);
+@@ -1579,41 +1581,33 @@ static int fimc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd)
+ }
+
+ /* Reset status */
+- fimc_write(0x0, EXYNOS_CISTATUS);
++ fimc_write(ctx, 0x0, EXYNOS_CISTATUS);
+
+- cfg0 = fimc_read(EXYNOS_CIIMGCPT);
++ cfg0 = fimc_read(ctx, EXYNOS_CIIMGCPT);
+ cfg0 &= ~EXYNOS_CIIMGCPT_IMGCPTEN_SC;
+ cfg0 |= EXYNOS_CIIMGCPT_IMGCPTEN_SC;
+
+ /* Scaler */
+- cfg1 = fimc_read(EXYNOS_CISCCTRL);
++ cfg1 = fimc_read(ctx, EXYNOS_CISCCTRL);
+ cfg1 &= ~EXYNOS_CISCCTRL_SCAN_MASK;
+ cfg1 |= (EXYNOS_CISCCTRL_PROGRESSIVE |
+ EXYNOS_CISCCTRL_SCALERSTART);
+
+- fimc_write(cfg1, EXYNOS_CISCCTRL);
++ fimc_write(ctx, cfg1, EXYNOS_CISCCTRL);
+
+ /* Enable image capture*/
+ cfg0 |= EXYNOS_CIIMGCPT_IMGCPTEN;
+- fimc_write(cfg0, EXYNOS_CIIMGCPT);
++ fimc_write(ctx, cfg0, EXYNOS_CIIMGCPT);
+
+ /* Disable frame end irq */
+- cfg0 = fimc_read(EXYNOS_CIGCTRL);
+- cfg0 &= ~EXYNOS_CIGCTRL_IRQ_END_DISABLE;
+- fimc_write(cfg0, EXYNOS_CIGCTRL);
++ fimc_clear_bits(ctx, EXYNOS_CIGCTRL, EXYNOS_CIGCTRL_IRQ_END_DISABLE);
+
+- cfg0 = fimc_read(EXYNOS_CIOCTRL);
+- cfg0 &= ~EXYNOS_CIOCTRL_WEAVE_MASK;
+- fimc_write(cfg0, EXYNOS_CIOCTRL);
++ fimc_clear_bits(ctx, EXYNOS_CIOCTRL, EXYNOS_CIOCTRL_WEAVE_MASK);
+
+ if (cmd == IPP_CMD_M2M) {
+- cfg0 = fimc_read(EXYNOS_MSCTRL);
+- cfg0 |= EXYNOS_MSCTRL_ENVID;
+- fimc_write(cfg0, EXYNOS_MSCTRL);
++ fimc_set_bits(ctx, EXYNOS_MSCTRL, EXYNOS_MSCTRL_ENVID);
+
+- cfg0 = fimc_read(EXYNOS_MSCTRL);
+- cfg0 |= EXYNOS_MSCTRL_ENVID;
+- fimc_write(cfg0, EXYNOS_MSCTRL);
++ fimc_set_bits(ctx, EXYNOS_MSCTRL, EXYNOS_MSCTRL_ENVID);
+ }
+
+ return 0;
+@@ -1630,10 +1624,10 @@ static void fimc_ippdrv_stop(struct device *dev, enum drm_exynos_ipp_cmd cmd)
+ switch (cmd) {
+ case IPP_CMD_M2M:
+ /* Source clear */
+- cfg = fimc_read(EXYNOS_MSCTRL);
++ cfg = fimc_read(ctx, EXYNOS_MSCTRL);
+ cfg &= ~EXYNOS_MSCTRL_INPUT_MASK;
+ cfg &= ~EXYNOS_MSCTRL_ENVID;
+- fimc_write(cfg, EXYNOS_MSCTRL);
++ fimc_write(ctx, cfg, EXYNOS_MSCTRL);
+ break;
+ case IPP_CMD_WB:
+ exynos_drm_ippnb_send_event(IPP_SET_WRITEBACK, (void *)&set_wb);
+@@ -1647,22 +1641,17 @@ static void fimc_ippdrv_stop(struct device *dev, enum drm_exynos_ipp_cmd cmd)
+ fimc_mask_irq(ctx, false, false, true);
+
+ /* reset sequence */
+- fimc_write(0x0, EXYNOS_CIFCNTSEQ);
++ fimc_write(ctx, 0x0, EXYNOS_CIFCNTSEQ);
+
+ /* Scaler disable */
+- cfg = fimc_read(EXYNOS_CISCCTRL);
+- cfg &= ~EXYNOS_CISCCTRL_SCALERSTART;
+- fimc_write(cfg, EXYNOS_CISCCTRL);
++ fimc_clear_bits(ctx, EXYNOS_CISCCTRL, EXYNOS_CISCCTRL_SCALERSTART);
+
+ /* Disable image capture */
+- cfg = fimc_read(EXYNOS_CIIMGCPT);
+- cfg &= ~(EXYNOS_CIIMGCPT_IMGCPTEN_SC | EXYNOS_CIIMGCPT_IMGCPTEN);
+- fimc_write(cfg, EXYNOS_CIIMGCPT);
++ fimc_clear_bits(ctx, EXYNOS_CIIMGCPT,
++ EXYNOS_CIIMGCPT_IMGCPTEN_SC | EXYNOS_CIIMGCPT_IMGCPTEN);
+
+ /* Enable frame end irq */
+- cfg = fimc_read(EXYNOS_CIGCTRL);
+- cfg |= EXYNOS_CIGCTRL_IRQ_END_DISABLE;
+- fimc_write(cfg, EXYNOS_CIGCTRL);
++ fimc_set_bits(ctx, EXYNOS_CIGCTRL, EXYNOS_CIGCTRL_IRQ_END_DISABLE);
+ }
+
+ static void fimc_put_clocks(struct fimc_context *ctx)
+--
+1.8.3.2
+