summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiu Ying <victor.liu@nxp.com>2018-08-02 13:55:34 +0800
committerLeonard Crestez <leonard.crestez@nxp.com>2018-08-24 12:41:33 +0300
commit875c31a70f3527c59cc597a10a88c39f3a0095df (patch)
tree1a393a445e1fea9fca67f67c99af16ccd017817a
parentdab218c3c46644215f5709e03729bbe9ba3b5823 (diff)
MLK-19114-2 gpu: imx: imx8-prefetch: Remove has_prefetech_fixup from devtypes
There are prefetch engine fixups embedded in the updated i.MX8QM silicons. So, prefetch engines in all i.MX8 variants should be the same. Let's remove has_prefetech_fixup from devtypes which is no more needed. Signed-off-by: Liu Ying <victor.liu@nxp.com>
-rw-r--r--drivers/gpu/drm/imx/dpu/dpu-crtc.c10
-rw-r--r--drivers/gpu/drm/imx/dpu/dpu-plane.c8
-rw-r--r--drivers/gpu/drm/imx/dpu/dpu-plane.h4
-rw-r--r--drivers/gpu/imx/dpu/dpu-common.c9
-rw-r--r--drivers/gpu/imx/dpu/dpu-prv.h1
-rw-r--r--drivers/gpu/imx/imx8_dprc.c75
-rw-r--r--drivers/gpu/imx/imx8_prg.c31
-rw-r--r--include/video/dpu.h2
8 files changed, 31 insertions, 109 deletions
diff --git a/drivers/gpu/drm/imx/dpu/dpu-crtc.c b/drivers/gpu/drm/imx/dpu/dpu-crtc.c
index bddfb94d229d..8e4f804be861 100644
--- a/drivers/gpu/drm/imx/dpu/dpu-crtc.c
+++ b/drivers/gpu/drm/imx/dpu/dpu-crtc.c
@@ -46,8 +46,6 @@ struct dpu_crtc {
int content_shdld_irq;
int dec_shdld_irq;
- bool has_prefetch_fixup;
-
struct completion safety_shdld_done;
struct completion content_shdld_done;
struct completion dec_shdld_done;
@@ -635,14 +633,12 @@ static int dpu_crtc_init(struct dpu_crtc *dpu_crtc,
struct device *dev = dpu_crtc->dev;
struct dpu_plane_grp *plane_grp = pdata->plane_grp;
unsigned int stream_id = pdata->stream_id;
- bool has_prefetch_fixup = dpu_has_prefetch_fixup(dpu);
int i, ret;
init_completion(&dpu_crtc->safety_shdld_done);
init_completion(&dpu_crtc->content_shdld_done);
init_completion(&dpu_crtc->dec_shdld_done);
- dpu_crtc->has_prefetch_fixup = has_prefetch_fixup;
dpu_crtc->stream_id = stream_id;
dpu_crtc->hw_plane_num = plane_grp->hw_plane_num;
@@ -659,8 +655,7 @@ static int dpu_crtc_init(struct dpu_crtc *dpu_crtc,
plane_grp->res.fg[stream_id] = dpu_crtc->fg;
dpu_crtc->plane[0] = dpu_plane_init(drm, 0, stream_id, plane_grp,
- DRM_PLANE_TYPE_PRIMARY,
- has_prefetch_fixup);
+ DRM_PLANE_TYPE_PRIMARY);
if (IS_ERR(dpu_crtc->plane[0])) {
ret = PTR_ERR(dpu_crtc->plane[0]);
dev_err(dev, "initializing plane0 failed with %d.\n", ret);
@@ -679,8 +674,7 @@ static int dpu_crtc_init(struct dpu_crtc *dpu_crtc,
dpu_crtc->plane[i] = dpu_plane_init(drm,
drm_crtc_mask(&dpu_crtc->base),
stream_id, plane_grp,
- DRM_PLANE_TYPE_OVERLAY,
- has_prefetch_fixup);
+ DRM_PLANE_TYPE_OVERLAY);
if (IS_ERR(dpu_crtc->plane[i])) {
ret = PTR_ERR(dpu_crtc->plane[i]);
dev_err(dev, "initializing plane%d failed with %d.\n",
diff --git a/drivers/gpu/drm/imx/dpu/dpu-plane.c b/drivers/gpu/drm/imx/dpu/dpu-plane.c
index 32d301ff35f6..38041262ce56 100644
--- a/drivers/gpu/drm/imx/dpu/dpu-plane.c
+++ b/drivers/gpu/drm/imx/dpu/dpu-plane.c
@@ -285,10 +285,6 @@ static int dpu_plane_atomic_check(struct drm_plane *plane,
if (fb->modifier[2] || fb->modifier[3])
return -EINVAL;
- if (fb->modifier[0] && (src_x || src_y) &&
- !dplane->has_prefetch_fixup)
- return -EINVAL;
-
if (dplane->grp->has_vproc) {
/* no down scaling */
if (src_w > state->crtc_w || src_h > state->crtc_h)
@@ -733,8 +729,7 @@ struct dpu_plane *dpu_plane_init(struct drm_device *drm,
unsigned int possible_crtcs,
unsigned int stream_id,
struct dpu_plane_grp *grp,
- enum drm_plane_type type,
- bool has_prefetch_fixup)
+ enum drm_plane_type type)
{
struct dpu_plane *dpu_plane;
struct drm_plane *plane;
@@ -747,7 +742,6 @@ struct dpu_plane *dpu_plane_init(struct drm_device *drm,
dpu_plane->stream_id = stream_id;
dpu_plane->grp = grp;
- dpu_plane->has_prefetch_fixup = has_prefetch_fixup;
plane = &dpu_plane->base;
diff --git a/drivers/gpu/drm/imx/dpu/dpu-plane.h b/drivers/gpu/drm/imx/dpu/dpu-plane.h
index cce9576f85de..eeb52f5262b6 100644
--- a/drivers/gpu/drm/imx/dpu/dpu-plane.h
+++ b/drivers/gpu/drm/imx/dpu/dpu-plane.h
@@ -31,7 +31,6 @@ struct dpu_plane {
struct dpu_plane_grp *grp;
struct list_head head;
unsigned int stream_id;
- bool has_prefetch_fixup;
};
struct dpu_plane_state {
@@ -191,6 +190,5 @@ struct dpu_plane *dpu_plane_init(struct drm_device *drm,
unsigned int possible_crtcs,
unsigned int stream_id,
struct dpu_plane_grp *grp,
- enum drm_plane_type type,
- bool has_prefetch_fixup);
+ enum drm_plane_type type);
#endif
diff --git a/drivers/gpu/imx/dpu/dpu-common.c b/drivers/gpu/imx/dpu/dpu-common.c
index 2cf7a5055b9a..4e31c1ec5b0b 100644
--- a/drivers/gpu/imx/dpu/dpu-common.c
+++ b/drivers/gpu/imx/dpu/dpu-common.c
@@ -542,7 +542,6 @@ static const struct dpu_devtype dpu_type_v1 = {
.plane_src_na_mask = 0xffffff80,
.has_capture = true,
.has_prefetch = false,
- .has_prefetch_fixup = false,
.has_disp_sel_clk = false,
.has_dual_ldb = false,
.pixel_link_quirks = false,
@@ -573,7 +572,6 @@ static const struct dpu_devtype dpu_type_v2_qm = {
.plane_src_na_mask = 0xffffffe2,
.has_capture = false,
.has_prefetch = true,
- .has_prefetch_fixup = false,
.has_disp_sel_clk = true,
.has_dual_ldb = false,
.pixel_link_quirks = true,
@@ -604,7 +602,6 @@ static const struct dpu_devtype dpu_type_v2_qxp = {
.plane_src_na_mask = 0xffffffe2,
.has_capture = false,
.has_prefetch = true,
- .has_prefetch_fixup = true,
.has_disp_sel_clk = false,
.has_dual_ldb = true,
.pixel_link_quirks = true,
@@ -625,12 +622,6 @@ static const struct of_device_id dpu_dt_ids[] = {
};
MODULE_DEVICE_TABLE(of, dpu_dt_ids);
-bool dpu_has_prefetch_fixup(struct dpu_soc *dpu)
-{
- return dpu->devtype->has_prefetch_fixup;
-}
-EXPORT_SYMBOL_GPL(dpu_has_prefetch_fixup);
-
bool dpu_vproc_has_fetcheco_cap(u32 cap_mask)
{
return !!(cap_mask & DPU_VPROC_CAP_FETCHECO);
diff --git a/drivers/gpu/imx/dpu/dpu-prv.h b/drivers/gpu/imx/dpu/dpu-prv.h
index ff1039005072..3bfcaad6d252 100644
--- a/drivers/gpu/imx/dpu/dpu-prv.h
+++ b/drivers/gpu/imx/dpu/dpu-prv.h
@@ -207,7 +207,6 @@ struct dpu_devtype {
const u32 plane_src_na_mask;
bool has_capture;
bool has_prefetch;
- bool has_prefetch_fixup;
bool has_disp_sel_clk;
bool has_dual_ldb;
bool pixel_link_quirks;
diff --git a/drivers/gpu/imx/imx8_dprc.c b/drivers/gpu/imx/imx8_dprc.c
index 088484ea8110..162485f5ea73 100644
--- a/drivers/gpu/imx/imx8_dprc.c
+++ b/drivers/gpu/imx/imx8_dprc.c
@@ -146,21 +146,8 @@ enum {
#define ROWS_0_6 BIT(0)
#define ROWS_0_4 0
-struct dprc_devtype {
- bool has_fixup;
-};
-
-static const struct dprc_devtype dprc_type_v1 = {
- .has_fixup = false,
-};
-
-static const struct dprc_devtype dprc_type_v2 = {
- .has_fixup = true,
-};
-
struct dprc {
struct device *dev;
- const struct dprc_devtype *devtype;
void __iomem *base;
struct list_head list;
struct clk *clk_apb;
@@ -410,34 +397,23 @@ void dprc_configure(struct dprc *dprc, unsigned int stream_id,
preq = modifier ? BYTE_64 : BYTE_1K;
dprc_write(dprc, preq, FRAME_2P_CTRL0);
- if (!dprc->devtype->has_fixup) {
- dprc_write(dprc,
- NUM_X_PIX_WIDE(p2_w), FRAME_2P_PIX_X_CTRL);
- dprc_write(dprc,
- NUM_Y_PIX_HIGH(p2_h), FRAME_2P_PIX_Y_CTRL);
- } else {
- if (dprc->sc_resource == SC_R_DC_0_BLIT1) {
- dprc_prg_sel_configure(dprc,
- SC_R_DC_0_BLIT0, true);
- prg_set_auxiliary(dprc->prgs[1]);
- dprc->has_aux_prg = true;
- }
+ if (dprc->sc_resource == SC_R_DC_0_BLIT1) {
+ dprc_prg_sel_configure(dprc, SC_R_DC_0_BLIT0, true);
+ prg_set_auxiliary(dprc->prgs[1]);
+ dprc->has_aux_prg = true;
}
dprc_write(dprc, uv_baddr, FRAME_2P_BASE_ADDR_CTRL0);
} else {
- if (dprc->devtype->has_fixup) {
- switch (dprc->sc_resource) {
- case SC_R_DC_0_BLIT0:
- dprc_prg_sel_configure(dprc,
- SC_R_DC_0_BLIT0, false);
- prg_set_primary(dprc->prgs[0]);
- break;
- case SC_R_DC_0_BLIT1:
- dprc->has_aux_prg = false;
- break;
- default:
- break;
- }
+ switch (dprc->sc_resource) {
+ case SC_R_DC_0_BLIT0:
+ dprc_prg_sel_configure(dprc, SC_R_DC_0_BLIT0, false);
+ prg_set_primary(dprc->prgs[0]);
+ break;
+ case SC_R_DC_0_BLIT1:
+ dprc->has_aux_prg = false;
+ break;
+ default:
+ break;
}
switch (modifier) {
@@ -445,7 +421,7 @@ void dprc_configure(struct dprc *dprc, unsigned int stream_id,
p1_w = round_up(dprc_width, info->cpp[0] == 2 ? 8 : 4);
break;
case DRM_FORMAT_MOD_VIVANTE_SUPER_TILED:
- if (dprc->is_blit_chan && dprc->devtype->has_fixup)
+ if (dprc->is_blit_chan)
p1_w = round_up(dprc_width,
info->cpp[0] == 2 ? 8 : 4);
else
@@ -472,10 +448,7 @@ void dprc_configure(struct dprc *dprc, unsigned int stream_id,
preq = BYTE_64;
mt_w = 8;
} else {
- if (dprc->devtype->has_fixup)
- preq = (x_offset % 8) ? BYTE_64 : BYTE_128;
- else
- preq = BYTE_128;
+ preq = (x_offset % 8) ? BYTE_64 : BYTE_128;
mt_w = 4;
}
mt_h = 4;
@@ -488,7 +461,7 @@ void dprc_configure(struct dprc *dprc, unsigned int stream_id,
dprc_write(dprc, NUM_X_PIX_WIDE(p1_w), FRAME_1P_PIX_X_CTRL);
dprc_write(dprc, NUM_Y_PIX_HIGH(p1_h), FRAME_1P_PIX_Y_CTRL);
dprc_write(dprc, baddr, FRAME_1P_BASE_ADDR_CTRL0);
- if (dprc->devtype->has_fixup && modifier) {
+ if (modifier) {
dprc_write(dprc, CROP_ULC_X(round_down(x_offset, mt_w)),
FRAME_PIX_X_ULC_CTRL);
dprc_write(dprc, CROP_ULC_Y(round_down(y_offset, mt_h)),
@@ -719,9 +692,6 @@ bool dprc_format_supported(struct dprc *dprc, u32 format, u64 modifier)
case SC_R_DC_1_WARP:
return false;
case SC_R_DC_0_BLIT1:
- if (!dprc->devtype->has_fixup)
- break;
-
return (modifier == DRM_FORMAT_MOD_NONE ||
modifier == DRM_FORMAT_MOD_AMPHION_TILED);
}
@@ -801,15 +771,13 @@ dprc_lookup_by_phandle(struct device *dev, const char *name, int index)
EXPORT_SYMBOL_GPL(dprc_lookup_by_phandle);
static const struct of_device_id dprc_dt_ids[] = {
- { .compatible = "fsl,imx8qm-dpr-channel", .data = &dprc_type_v1, },
- { .compatible = "fsl,imx8qxp-dpr-channel", .data = &dprc_type_v2, },
+ { .compatible = "fsl,imx8qm-dpr-channel", },
+ { .compatible = "fsl,imx8qxp-dpr-channel", },
{ /* sentinel */ },
};
static int dprc_probe(struct platform_device *pdev)
{
- const struct of_device_id *of_id =
- of_match_device(dprc_dt_ids, &pdev->dev);
struct device *dev = &pdev->dev;
struct resource *res;
struct dprc *dprc;
@@ -819,8 +787,6 @@ static int dprc_probe(struct platform_device *pdev)
if (!dprc)
return -ENOMEM;
- dprc->devtype = of_id->data;
-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
dprc->base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(dprc->base))
@@ -850,8 +816,7 @@ static int dprc_probe(struct platform_device *pdev)
switch (dprc->sc_resource) {
case SC_R_DC_0_BLIT1:
- if (dprc->devtype->has_fixup)
- dprc->has_aux_prg = true;
+ dprc->has_aux_prg = true;
/* fall-through */
case SC_R_DC_0_BLIT0:
case SC_R_DC_1_BLIT0:
diff --git a/drivers/gpu/imx/imx8_prg.c b/drivers/gpu/imx/imx8_prg.c
index b78aa17956ba..a7b2ae9963cd 100644
--- a/drivers/gpu/imx/imx8_prg.c
+++ b/drivers/gpu/imx/imx8_prg.c
@@ -67,21 +67,8 @@ enum {
#define PRG_WIDTH 0x70
#define WIDTH(n) (((n) - 1) & 0xffff)
-struct prg_devtype {
- bool has_dprc_fixup;
-};
-
-static const struct prg_devtype prg_type_v1 = {
- .has_dprc_fixup = false,
-};
-
-static const struct prg_devtype prg_type_v2 = {
- .has_dprc_fixup = true,
-};
-
struct prg {
struct device *dev;
- const struct prg_devtype *devtype;
void __iomem *base;
struct list_head list;
struct clk *clk_apb;
@@ -163,7 +150,7 @@ void prg_configure(struct prg *prg, unsigned int width, unsigned int height,
return;
}
- if (prg->devtype->has_dprc_fixup && modifier) {
+ if (modifier) {
x_offset %= mt_w;
y_offset %= mt_h;
@@ -187,7 +174,7 @@ void prg_configure(struct prg *prg, unsigned int width, unsigned int height,
* address TKT339017:
* fixup for burst size vs stride mismatch
*/
- if (prg->devtype->has_dprc_fixup && modifier)
+ if (modifier)
stride = round_up(stride + round_up(_baddr % 8, 8), burst_size);
else
stride = round_up(stride, burst_size);
@@ -199,7 +186,7 @@ void prg_configure(struct prg *prg, unsigned int width, unsigned int height,
*/
if (prg->is_auxiliary && stride <= burst_size) {
height /= 2;
- if (prg->devtype->has_dprc_fixup && modifier)
+ if (modifier)
y_offset /= 2;
}
@@ -307,7 +294,7 @@ bool prg_stride_double_check(struct prg *prg,
return false;
}
- if (prg->devtype->has_dprc_fixup && modifier) {
+ if (modifier) {
x_offset %= mt_w;
/* consider x offset to calculate stride */
@@ -328,7 +315,7 @@ bool prg_stride_double_check(struct prg *prg,
* address TKT339017:
* fixup for burst size vs stride mismatch
*/
- if (prg->devtype->has_dprc_fixup && modifier)
+ if (modifier)
stride = round_up(stride + round_up(_baddr % 8, 8), burst_size);
else
stride = round_up(stride, burst_size);
@@ -386,15 +373,13 @@ prg_lookup_by_phandle(struct device *dev, const char *name, int index)
EXPORT_SYMBOL_GPL(prg_lookup_by_phandle);
static const struct of_device_id prg_dt_ids[] = {
- { .compatible = "fsl,imx8qm-prg", .data = &prg_type_v1, },
- { .compatible = "fsl,imx8qxp-prg", .data = &prg_type_v2, },
+ { .compatible = "fsl,imx8qm-prg", },
+ { .compatible = "fsl,imx8qxp-prg", },
{ /* sentinel */ },
};
static int prg_probe(struct platform_device *pdev)
{
- const struct of_device_id *of_id =
- of_match_device(prg_dt_ids, &pdev->dev);
struct device *dev = &pdev->dev;
struct resource *res;
struct prg *prg;
@@ -403,8 +388,6 @@ static int prg_probe(struct platform_device *pdev)
if (!prg)
return -ENOMEM;
- prg->devtype = of_id->data;
-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
prg->base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(prg->base))
diff --git a/include/video/dpu.h b/include/video/dpu.h
index 19d5bbaba6f2..261d59d7dacb 100644
--- a/include/video/dpu.h
+++ b/include/video/dpu.h
@@ -680,8 +680,6 @@ struct dpu_fetchunit *fetchdecode_get_fetcheco(struct dpu_fetchunit *fu);
struct dpu_hscaler *fetchdecode_get_hscaler(struct dpu_fetchunit *fu);
struct dpu_vscaler *fetchdecode_get_vscaler(struct dpu_fetchunit *fu);
-bool dpu_has_prefetch_fixup(struct dpu_soc *dpu);
-
bool dpu_vproc_has_fetcheco_cap(u32 cap_mask);
bool dpu_vproc_has_hscale_cap(u32 cap_mask);
bool dpu_vproc_has_vscale_cap(u32 cap_mask);