Message ID | 20190311105144.7276-3-mjourdan@baylibre.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/meson: only allow using meson-canvas | expand |
On 11/03/2019 11:51, Maxime Jourdan wrote: > Now that the DMC register range is no longer in the bindings, remove any > mention towards it and exclusively use the meson-canvas module. > > Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com> > --- > drivers/gpu/drm/meson/Makefile | 2 +- > drivers/gpu/drm/meson/meson_canvas.c | 73 ----------------------- > drivers/gpu/drm/meson/meson_canvas.h | 51 ---------------- > drivers/gpu/drm/meson/meson_crtc.c | 84 ++++++++------------------- > drivers/gpu/drm/meson/meson_drv.c | 68 ++++++++-------------- > drivers/gpu/drm/meson/meson_drv.h | 1 - > drivers/gpu/drm/meson/meson_overlay.c | 8 --- > drivers/gpu/drm/meson/meson_plane.c | 6 +- > drivers/gpu/drm/meson/meson_viu.c | 1 - > 9 files changed, 51 insertions(+), 243 deletions(-) > delete mode 100644 drivers/gpu/drm/meson/meson_canvas.c > delete mode 100644 drivers/gpu/drm/meson/meson_canvas.h > > diff --git a/drivers/gpu/drm/meson/Makefile b/drivers/gpu/drm/meson/Makefile > index 7709f2fbb9f7..d4ea82fc493b 100644 > --- a/drivers/gpu/drm/meson/Makefile > +++ b/drivers/gpu/drm/meson/Makefile > @@ -1,5 +1,5 @@ > meson-drm-y := meson_drv.o meson_plane.o meson_crtc.o meson_venc_cvbs.o > -meson-drm-y += meson_viu.o meson_vpp.o meson_venc.o meson_vclk.o meson_canvas.o meson_overlay.o > +meson-drm-y += meson_viu.o meson_vpp.o meson_venc.o meson_vclk.o meson_overlay.o > > obj-$(CONFIG_DRM_MESON) += meson-drm.o > obj-$(CONFIG_DRM_MESON_DW_HDMI) += meson_dw_hdmi.o > diff --git a/drivers/gpu/drm/meson/meson_canvas.c b/drivers/gpu/drm/meson/meson_canvas.c > deleted file mode 100644 > index 5de11aa7c775..000000000000 > --- a/drivers/gpu/drm/meson/meson_canvas.c > +++ /dev/null > @@ -1,73 +0,0 @@ > -/* > - * Copyright (C) 2016 BayLibre, SAS > - * Author: Neil Armstrong <narmstrong@baylibre.com> > - * Copyright (C) 2015 Amlogic, Inc. All rights reserved. > - * Copyright (C) 2014 Endless Mobile > - * > - * This program is free software; you can redistribute it and/or > - * modify it under the terms of the GNU General Public License as > - * published by the Free Software Foundation; either version 2 of the > - * License, or (at your option) any later version. > - * > - * This program is distributed in the hope that it will be useful, but > - * WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - * General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, see <http://www.gnu.org/licenses/>. > - */ > - > -#include <linux/kernel.h> > -#include <linux/module.h> > -#include "meson_drv.h" > -#include "meson_canvas.h" > -#include "meson_registers.h" > - > -/** > - * DOC: Canvas > - * > - * CANVAS is a memory zone where physical memory frames information > - * are stored for the VIU to scanout. > - */ > - > -/* DMC Registers */ > -#define DMC_CAV_LUT_DATAL 0x48 /* 0x12 offset in data sheet */ > -#define CANVAS_WIDTH_LBIT 29 > -#define CANVAS_WIDTH_LWID 3 > -#define DMC_CAV_LUT_DATAH 0x4c /* 0x13 offset in data sheet */ > -#define CANVAS_WIDTH_HBIT 0 > -#define CANVAS_HEIGHT_BIT 9 > -#define CANVAS_BLKMODE_BIT 24 > -#define CANVAS_ENDIAN_BIT 26 > -#define DMC_CAV_LUT_ADDR 0x50 /* 0x14 offset in data sheet */ > -#define CANVAS_LUT_WR_EN (0x2 << 8) > -#define CANVAS_LUT_RD_EN (0x1 << 8) > - > -void meson_canvas_setup(struct meson_drm *priv, > - uint32_t canvas_index, uint32_t addr, > - uint32_t stride, uint32_t height, > - unsigned int wrap, > - unsigned int blkmode, > - unsigned int endian) > -{ > - unsigned int val; > - > - regmap_write(priv->dmc, DMC_CAV_LUT_DATAL, > - (((addr + 7) >> 3)) | > - (((stride + 7) >> 3) << CANVAS_WIDTH_LBIT)); > - > - regmap_write(priv->dmc, DMC_CAV_LUT_DATAH, > - ((((stride + 7) >> 3) >> CANVAS_WIDTH_LWID) << > - CANVAS_WIDTH_HBIT) | > - (height << CANVAS_HEIGHT_BIT) | > - (wrap << 22) | > - (blkmode << CANVAS_BLKMODE_BIT) | > - (endian << CANVAS_ENDIAN_BIT)); > - > - regmap_write(priv->dmc, DMC_CAV_LUT_ADDR, > - CANVAS_LUT_WR_EN | canvas_index); > - > - /* Force a read-back to make sure everything is flushed. */ > - regmap_read(priv->dmc, DMC_CAV_LUT_DATAH, &val); > -} > diff --git a/drivers/gpu/drm/meson/meson_canvas.h b/drivers/gpu/drm/meson/meson_canvas.h > deleted file mode 100644 > index 85dbf26e2826..000000000000 > --- a/drivers/gpu/drm/meson/meson_canvas.h > +++ /dev/null > @@ -1,51 +0,0 @@ > -/* > - * Copyright (C) 2016 BayLibre, SAS > - * Author: Neil Armstrong <narmstrong@baylibre.com> > - * Copyright (C) 2014 Endless Mobile > - * > - * This program is free software; you can redistribute it and/or > - * modify it under the terms of the GNU General Public License as > - * published by the Free Software Foundation; either version 2 of the > - * License, or (at your option) any later version. > - * > - * This program is distributed in the hope that it will be useful, but > - * WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - * General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, see <http://www.gnu.org/licenses/>. > - */ > - > -/* Canvas LUT Memory */ > - > -#ifndef __MESON_CANVAS_H > -#define __MESON_CANVAS_H > - > -#define MESON_CANVAS_ID_OSD1 0x4e > -#define MESON_CANVAS_ID_VD1_0 0x60 > -#define MESON_CANVAS_ID_VD1_1 0x61 > -#define MESON_CANVAS_ID_VD1_2 0x62 > - > -/* Canvas configuration. */ > -#define MESON_CANVAS_WRAP_NONE 0x00 > -#define MESON_CANVAS_WRAP_X 0x01 > -#define MESON_CANVAS_WRAP_Y 0x02 > - > -#define MESON_CANVAS_BLKMODE_LINEAR 0x00 > -#define MESON_CANVAS_BLKMODE_32x32 0x01 > -#define MESON_CANVAS_BLKMODE_64x64 0x02 > - > -#define MESON_CANVAS_ENDIAN_SWAP16 0x1 > -#define MESON_CANVAS_ENDIAN_SWAP32 0x3 > -#define MESON_CANVAS_ENDIAN_SWAP64 0x7 > -#define MESON_CANVAS_ENDIAN_SWAP128 0xf > - > -void meson_canvas_setup(struct meson_drm *priv, > - uint32_t canvas_index, uint32_t addr, > - uint32_t stride, uint32_t height, > - unsigned int wrap, > - unsigned int blkmode, > - unsigned int endian); > - > -#endif /* __MESON_CANVAS_H */ > diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c > index 4f5c67f70c4d..37c70641bcdf 100644 > --- a/drivers/gpu/drm/meson/meson_crtc.c > +++ b/drivers/gpu/drm/meson/meson_crtc.c > @@ -37,7 +37,6 @@ > #include "meson_venc.h" > #include "meson_vpp.h" > #include "meson_viu.h" > -#include "meson_canvas.h" > #include "meson_registers.h" > > /* CRTC definition */ > @@ -214,13 +213,7 @@ void meson_crtc_irq(struct meson_drm *priv) > writel_relaxed(priv->viu.osd_sc_v_ctrl0, > priv->io_base + _REG(VPP_OSD_VSC_CTRL0)); > > - if (priv->canvas) > - meson_canvas_config(priv->canvas, priv->canvas_id_osd1, > - priv->viu.osd1_addr, priv->viu.osd1_stride, > - priv->viu.osd1_height, MESON_CANVAS_WRAP_NONE, > - MESON_CANVAS_BLKMODE_LINEAR, 0); > - else > - meson_canvas_setup(priv, MESON_CANVAS_ID_OSD1, > + meson_canvas_config(priv->canvas, priv->canvas_id_osd1, > priv->viu.osd1_addr, priv->viu.osd1_stride, > priv->viu.osd1_height, MESON_CANVAS_WRAP_NONE, > MESON_CANVAS_BLKMODE_LINEAR, 0); > @@ -237,61 +230,34 @@ void meson_crtc_irq(struct meson_drm *priv) > > switch (priv->viu.vd1_planes) { > case 3: > - if (priv->canvas) > - meson_canvas_config(priv->canvas, > - priv->canvas_id_vd1_2, > - priv->viu.vd1_addr2, > - priv->viu.vd1_stride2, > - priv->viu.vd1_height2, > - MESON_CANVAS_WRAP_NONE, > - MESON_CANVAS_BLKMODE_LINEAR, > - MESON_CANVAS_ENDIAN_SWAP64); > - else > - meson_canvas_setup(priv, MESON_CANVAS_ID_VD1_2, > - priv->viu.vd1_addr2, > - priv->viu.vd1_stride2, > - priv->viu.vd1_height2, > - MESON_CANVAS_WRAP_NONE, > - MESON_CANVAS_BLKMODE_LINEAR, > - MESON_CANVAS_ENDIAN_SWAP64); > + meson_canvas_config(priv->canvas, > + priv->canvas_id_vd1_2, > + priv->viu.vd1_addr2, > + priv->viu.vd1_stride2, > + priv->viu.vd1_height2, > + MESON_CANVAS_WRAP_NONE, > + MESON_CANVAS_BLKMODE_LINEAR, > + MESON_CANVAS_ENDIAN_SWAP64); > /* fallthrough */ > case 2: > - if (priv->canvas) > - meson_canvas_config(priv->canvas, > - priv->canvas_id_vd1_1, > - priv->viu.vd1_addr1, > - priv->viu.vd1_stride1, > - priv->viu.vd1_height1, > - MESON_CANVAS_WRAP_NONE, > - MESON_CANVAS_BLKMODE_LINEAR, > - MESON_CANVAS_ENDIAN_SWAP64); > - else > - meson_canvas_setup(priv, MESON_CANVAS_ID_VD1_1, > - priv->viu.vd1_addr2, > - priv->viu.vd1_stride2, > - priv->viu.vd1_height2, > - MESON_CANVAS_WRAP_NONE, > - MESON_CANVAS_BLKMODE_LINEAR, > - MESON_CANVAS_ENDIAN_SWAP64); > + meson_canvas_config(priv->canvas, > + priv->canvas_id_vd1_1, > + priv->viu.vd1_addr1, > + priv->viu.vd1_stride1, > + priv->viu.vd1_height1, > + MESON_CANVAS_WRAP_NONE, > + MESON_CANVAS_BLKMODE_LINEAR, > + MESON_CANVAS_ENDIAN_SWAP64); > /* fallthrough */ > case 1: > - if (priv->canvas) > - meson_canvas_config(priv->canvas, > - priv->canvas_id_vd1_0, > - priv->viu.vd1_addr0, > - priv->viu.vd1_stride0, > - priv->viu.vd1_height0, > - MESON_CANVAS_WRAP_NONE, > - MESON_CANVAS_BLKMODE_LINEAR, > - MESON_CANVAS_ENDIAN_SWAP64); > - else > - meson_canvas_setup(priv, MESON_CANVAS_ID_VD1_0, > - priv->viu.vd1_addr2, > - priv->viu.vd1_stride2, > - priv->viu.vd1_height2, > - MESON_CANVAS_WRAP_NONE, > - MESON_CANVAS_BLKMODE_LINEAR, > - MESON_CANVAS_ENDIAN_SWAP64); > + meson_canvas_config(priv->canvas, > + priv->canvas_id_vd1_0, > + priv->viu.vd1_addr0, > + priv->viu.vd1_stride0, > + priv->viu.vd1_height0, > + MESON_CANVAS_WRAP_NONE, > + MESON_CANVAS_BLKMODE_LINEAR, > + MESON_CANVAS_ENDIAN_SWAP64); > }; > > writel_relaxed(priv->viu.vd1_if0_gen_reg, > diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c > index 12ff47b13668..7913983f2981 100644 > --- a/drivers/gpu/drm/meson/meson_drv.c > +++ b/drivers/gpu/drm/meson/meson_drv.c > @@ -48,7 +48,6 @@ > #include "meson_vpp.h" > #include "meson_viu.h" > #include "meson_venc.h" > -#include "meson_canvas.h" > #include "meson_registers.h" > > #define DRIVER_NAME "meson" > @@ -214,50 +213,31 @@ static int meson_drv_bind_master(struct device *dev, bool has_components) > } > > priv->canvas = meson_canvas_get(dev); > - if (!IS_ERR(priv->canvas)) { > - ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_osd1); > - if (ret) > - goto free_drm; > - ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_0); > - if (ret) { > - meson_canvas_free(priv->canvas, priv->canvas_id_osd1); > - goto free_drm; > - } > - ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_1); > - if (ret) { > - meson_canvas_free(priv->canvas, priv->canvas_id_osd1); > - meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); > - goto free_drm; > - } > - ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_2); > - if (ret) { > - meson_canvas_free(priv->canvas, priv->canvas_id_osd1); > - meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); > - meson_canvas_free(priv->canvas, priv->canvas_id_vd1_1); > - goto free_drm; > - } > - } else { > - priv->canvas = NULL; > - > - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dmc"); > - if (!res) { > - ret = -EINVAL; > - goto free_drm; > - } > - /* Simply ioremap since it may be a shared register zone */ > - regs = devm_ioremap(dev, res->start, resource_size(res)); > - if (!regs) { > - ret = -EADDRNOTAVAIL; > - goto free_drm; > - } > + if (IS_ERR(priv->canvas)) { > + ret = PTR_ERR(priv->canvas); > + goto free_drm; > + } > > - priv->dmc = devm_regmap_init_mmio(dev, regs, > - &meson_regmap_config); > - if (IS_ERR(priv->dmc)) { > - dev_err(&pdev->dev, "Couldn't create the DMC regmap\n"); > - ret = PTR_ERR(priv->dmc); > - goto free_drm; > - } > + ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_osd1); > + if (ret) > + goto free_drm; > + ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_0); > + if (ret) { > + meson_canvas_free(priv->canvas, priv->canvas_id_osd1); > + goto free_drm; > + } > + ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_1); > + if (ret) { > + meson_canvas_free(priv->canvas, priv->canvas_id_osd1); > + meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); > + goto free_drm; > + } > + ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_2); > + if (ret) { > + meson_canvas_free(priv->canvas, priv->canvas_id_osd1); > + meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); > + meson_canvas_free(priv->canvas, priv->canvas_id_vd1_1); > + goto free_drm; > } > > priv->vsync_irq = platform_get_irq(pdev, 0); > diff --git a/drivers/gpu/drm/meson/meson_drv.h b/drivers/gpu/drm/meson/meson_drv.h > index 4dccf4cd042a..214a7cb18ce2 100644 > --- a/drivers/gpu/drm/meson/meson_drv.h > +++ b/drivers/gpu/drm/meson/meson_drv.h > @@ -29,7 +29,6 @@ struct meson_drm { > struct device *dev; > void __iomem *io_base; > struct regmap *hhi; > - struct regmap *dmc; > int vsync_irq; > > struct meson_canvas *canvas; > diff --git a/drivers/gpu/drm/meson/meson_overlay.c b/drivers/gpu/drm/meson/meson_overlay.c > index 691a9fd16b36..b54a22e483b9 100644 > --- a/drivers/gpu/drm/meson/meson_overlay.c > +++ b/drivers/gpu/drm/meson/meson_overlay.c > @@ -22,7 +22,6 @@ > #include "meson_overlay.h" > #include "meson_vpp.h" > #include "meson_viu.h" > -#include "meson_canvas.h" > #include "meson_registers.h" > > /* VD1_IF0_GEN_REG */ > @@ -350,13 +349,6 @@ static void meson_overlay_atomic_update(struct drm_plane *plane, > > DRM_DEBUG_DRIVER("\n"); > > - /* Fallback is canvas provider is not available */ > - if (!priv->canvas) { > - priv->canvas_id_vd1_0 = MESON_CANVAS_ID_VD1_0; > - priv->canvas_id_vd1_1 = MESON_CANVAS_ID_VD1_1; > - priv->canvas_id_vd1_2 = MESON_CANVAS_ID_VD1_2; > - } > - > interlace_mode = state->crtc->mode.flags & DRM_MODE_FLAG_INTERLACE; > > spin_lock_irqsave(&priv->drm->event_lock, flags); > diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c > index 6119a0224278..b7786218cb10 100644 > --- a/drivers/gpu/drm/meson/meson_plane.c > +++ b/drivers/gpu/drm/meson/meson_plane.c > @@ -38,7 +38,6 @@ > #include "meson_plane.h" > #include "meson_vpp.h" > #include "meson_viu.h" > -#include "meson_canvas.h" > #include "meson_registers.h" > > /* OSD_SCI_WH_M1 */ > @@ -148,10 +147,7 @@ static void meson_plane_atomic_update(struct drm_plane *plane, > (0xFF << OSD_GLOBAL_ALPHA_SHIFT) | > OSD_BLK0_ENABLE; > > - if (priv->canvas) > - canvas_id_osd1 = priv->canvas_id_osd1; > - else > - canvas_id_osd1 = MESON_CANVAS_ID_OSD1; > + canvas_id_osd1 = priv->canvas_id_osd1; > > /* Set up BLK0 to point to the right canvas */ > priv->viu.osd1_blk0_cfg[0] = ((canvas_id_osd1 << OSD_CANVAS_SEL) | > diff --git a/drivers/gpu/drm/meson/meson_viu.c b/drivers/gpu/drm/meson/meson_viu.c > index e46e05f50bad..ac0f3687e09a 100644 > --- a/drivers/gpu/drm/meson/meson_viu.c > +++ b/drivers/gpu/drm/meson/meson_viu.c > @@ -25,7 +25,6 @@ > #include "meson_viu.h" > #include "meson_vpp.h" > #include "meson_venc.h" > -#include "meson_canvas.h" > #include "meson_registers.h" > > /** > Finally ! Acked-by: Neil Armstrong <narmstrong@baylibre.com>
diff --git a/drivers/gpu/drm/meson/Makefile b/drivers/gpu/drm/meson/Makefile index 7709f2fbb9f7..d4ea82fc493b 100644 --- a/drivers/gpu/drm/meson/Makefile +++ b/drivers/gpu/drm/meson/Makefile @@ -1,5 +1,5 @@ meson-drm-y := meson_drv.o meson_plane.o meson_crtc.o meson_venc_cvbs.o -meson-drm-y += meson_viu.o meson_vpp.o meson_venc.o meson_vclk.o meson_canvas.o meson_overlay.o +meson-drm-y += meson_viu.o meson_vpp.o meson_venc.o meson_vclk.o meson_overlay.o obj-$(CONFIG_DRM_MESON) += meson-drm.o obj-$(CONFIG_DRM_MESON_DW_HDMI) += meson_dw_hdmi.o diff --git a/drivers/gpu/drm/meson/meson_canvas.c b/drivers/gpu/drm/meson/meson_canvas.c deleted file mode 100644 index 5de11aa7c775..000000000000 --- a/drivers/gpu/drm/meson/meson_canvas.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2016 BayLibre, SAS - * Author: Neil Armstrong <narmstrong@baylibre.com> - * Copyright (C) 2015 Amlogic, Inc. All rights reserved. - * Copyright (C) 2014 Endless Mobile - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, see <http://www.gnu.org/licenses/>. - */ - -#include <linux/kernel.h> -#include <linux/module.h> -#include "meson_drv.h" -#include "meson_canvas.h" -#include "meson_registers.h" - -/** - * DOC: Canvas - * - * CANVAS is a memory zone where physical memory frames information - * are stored for the VIU to scanout. - */ - -/* DMC Registers */ -#define DMC_CAV_LUT_DATAL 0x48 /* 0x12 offset in data sheet */ -#define CANVAS_WIDTH_LBIT 29 -#define CANVAS_WIDTH_LWID 3 -#define DMC_CAV_LUT_DATAH 0x4c /* 0x13 offset in data sheet */ -#define CANVAS_WIDTH_HBIT 0 -#define CANVAS_HEIGHT_BIT 9 -#define CANVAS_BLKMODE_BIT 24 -#define CANVAS_ENDIAN_BIT 26 -#define DMC_CAV_LUT_ADDR 0x50 /* 0x14 offset in data sheet */ -#define CANVAS_LUT_WR_EN (0x2 << 8) -#define CANVAS_LUT_RD_EN (0x1 << 8) - -void meson_canvas_setup(struct meson_drm *priv, - uint32_t canvas_index, uint32_t addr, - uint32_t stride, uint32_t height, - unsigned int wrap, - unsigned int blkmode, - unsigned int endian) -{ - unsigned int val; - - regmap_write(priv->dmc, DMC_CAV_LUT_DATAL, - (((addr + 7) >> 3)) | - (((stride + 7) >> 3) << CANVAS_WIDTH_LBIT)); - - regmap_write(priv->dmc, DMC_CAV_LUT_DATAH, - ((((stride + 7) >> 3) >> CANVAS_WIDTH_LWID) << - CANVAS_WIDTH_HBIT) | - (height << CANVAS_HEIGHT_BIT) | - (wrap << 22) | - (blkmode << CANVAS_BLKMODE_BIT) | - (endian << CANVAS_ENDIAN_BIT)); - - regmap_write(priv->dmc, DMC_CAV_LUT_ADDR, - CANVAS_LUT_WR_EN | canvas_index); - - /* Force a read-back to make sure everything is flushed. */ - regmap_read(priv->dmc, DMC_CAV_LUT_DATAH, &val); -} diff --git a/drivers/gpu/drm/meson/meson_canvas.h b/drivers/gpu/drm/meson/meson_canvas.h deleted file mode 100644 index 85dbf26e2826..000000000000 --- a/drivers/gpu/drm/meson/meson_canvas.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2016 BayLibre, SAS - * Author: Neil Armstrong <narmstrong@baylibre.com> - * Copyright (C) 2014 Endless Mobile - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, see <http://www.gnu.org/licenses/>. - */ - -/* Canvas LUT Memory */ - -#ifndef __MESON_CANVAS_H -#define __MESON_CANVAS_H - -#define MESON_CANVAS_ID_OSD1 0x4e -#define MESON_CANVAS_ID_VD1_0 0x60 -#define MESON_CANVAS_ID_VD1_1 0x61 -#define MESON_CANVAS_ID_VD1_2 0x62 - -/* Canvas configuration. */ -#define MESON_CANVAS_WRAP_NONE 0x00 -#define MESON_CANVAS_WRAP_X 0x01 -#define MESON_CANVAS_WRAP_Y 0x02 - -#define MESON_CANVAS_BLKMODE_LINEAR 0x00 -#define MESON_CANVAS_BLKMODE_32x32 0x01 -#define MESON_CANVAS_BLKMODE_64x64 0x02 - -#define MESON_CANVAS_ENDIAN_SWAP16 0x1 -#define MESON_CANVAS_ENDIAN_SWAP32 0x3 -#define MESON_CANVAS_ENDIAN_SWAP64 0x7 -#define MESON_CANVAS_ENDIAN_SWAP128 0xf - -void meson_canvas_setup(struct meson_drm *priv, - uint32_t canvas_index, uint32_t addr, - uint32_t stride, uint32_t height, - unsigned int wrap, - unsigned int blkmode, - unsigned int endian); - -#endif /* __MESON_CANVAS_H */ diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c index 4f5c67f70c4d..37c70641bcdf 100644 --- a/drivers/gpu/drm/meson/meson_crtc.c +++ b/drivers/gpu/drm/meson/meson_crtc.c @@ -37,7 +37,6 @@ #include "meson_venc.h" #include "meson_vpp.h" #include "meson_viu.h" -#include "meson_canvas.h" #include "meson_registers.h" /* CRTC definition */ @@ -214,13 +213,7 @@ void meson_crtc_irq(struct meson_drm *priv) writel_relaxed(priv->viu.osd_sc_v_ctrl0, priv->io_base + _REG(VPP_OSD_VSC_CTRL0)); - if (priv->canvas) - meson_canvas_config(priv->canvas, priv->canvas_id_osd1, - priv->viu.osd1_addr, priv->viu.osd1_stride, - priv->viu.osd1_height, MESON_CANVAS_WRAP_NONE, - MESON_CANVAS_BLKMODE_LINEAR, 0); - else - meson_canvas_setup(priv, MESON_CANVAS_ID_OSD1, + meson_canvas_config(priv->canvas, priv->canvas_id_osd1, priv->viu.osd1_addr, priv->viu.osd1_stride, priv->viu.osd1_height, MESON_CANVAS_WRAP_NONE, MESON_CANVAS_BLKMODE_LINEAR, 0); @@ -237,61 +230,34 @@ void meson_crtc_irq(struct meson_drm *priv) switch (priv->viu.vd1_planes) { case 3: - if (priv->canvas) - meson_canvas_config(priv->canvas, - priv->canvas_id_vd1_2, - priv->viu.vd1_addr2, - priv->viu.vd1_stride2, - priv->viu.vd1_height2, - MESON_CANVAS_WRAP_NONE, - MESON_CANVAS_BLKMODE_LINEAR, - MESON_CANVAS_ENDIAN_SWAP64); - else - meson_canvas_setup(priv, MESON_CANVAS_ID_VD1_2, - priv->viu.vd1_addr2, - priv->viu.vd1_stride2, - priv->viu.vd1_height2, - MESON_CANVAS_WRAP_NONE, - MESON_CANVAS_BLKMODE_LINEAR, - MESON_CANVAS_ENDIAN_SWAP64); + meson_canvas_config(priv->canvas, + priv->canvas_id_vd1_2, + priv->viu.vd1_addr2, + priv->viu.vd1_stride2, + priv->viu.vd1_height2, + MESON_CANVAS_WRAP_NONE, + MESON_CANVAS_BLKMODE_LINEAR, + MESON_CANVAS_ENDIAN_SWAP64); /* fallthrough */ case 2: - if (priv->canvas) - meson_canvas_config(priv->canvas, - priv->canvas_id_vd1_1, - priv->viu.vd1_addr1, - priv->viu.vd1_stride1, - priv->viu.vd1_height1, - MESON_CANVAS_WRAP_NONE, - MESON_CANVAS_BLKMODE_LINEAR, - MESON_CANVAS_ENDIAN_SWAP64); - else - meson_canvas_setup(priv, MESON_CANVAS_ID_VD1_1, - priv->viu.vd1_addr2, - priv->viu.vd1_stride2, - priv->viu.vd1_height2, - MESON_CANVAS_WRAP_NONE, - MESON_CANVAS_BLKMODE_LINEAR, - MESON_CANVAS_ENDIAN_SWAP64); + meson_canvas_config(priv->canvas, + priv->canvas_id_vd1_1, + priv->viu.vd1_addr1, + priv->viu.vd1_stride1, + priv->viu.vd1_height1, + MESON_CANVAS_WRAP_NONE, + MESON_CANVAS_BLKMODE_LINEAR, + MESON_CANVAS_ENDIAN_SWAP64); /* fallthrough */ case 1: - if (priv->canvas) - meson_canvas_config(priv->canvas, - priv->canvas_id_vd1_0, - priv->viu.vd1_addr0, - priv->viu.vd1_stride0, - priv->viu.vd1_height0, - MESON_CANVAS_WRAP_NONE, - MESON_CANVAS_BLKMODE_LINEAR, - MESON_CANVAS_ENDIAN_SWAP64); - else - meson_canvas_setup(priv, MESON_CANVAS_ID_VD1_0, - priv->viu.vd1_addr2, - priv->viu.vd1_stride2, - priv->viu.vd1_height2, - MESON_CANVAS_WRAP_NONE, - MESON_CANVAS_BLKMODE_LINEAR, - MESON_CANVAS_ENDIAN_SWAP64); + meson_canvas_config(priv->canvas, + priv->canvas_id_vd1_0, + priv->viu.vd1_addr0, + priv->viu.vd1_stride0, + priv->viu.vd1_height0, + MESON_CANVAS_WRAP_NONE, + MESON_CANVAS_BLKMODE_LINEAR, + MESON_CANVAS_ENDIAN_SWAP64); }; writel_relaxed(priv->viu.vd1_if0_gen_reg, diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c index 12ff47b13668..7913983f2981 100644 --- a/drivers/gpu/drm/meson/meson_drv.c +++ b/drivers/gpu/drm/meson/meson_drv.c @@ -48,7 +48,6 @@ #include "meson_vpp.h" #include "meson_viu.h" #include "meson_venc.h" -#include "meson_canvas.h" #include "meson_registers.h" #define DRIVER_NAME "meson" @@ -214,50 +213,31 @@ static int meson_drv_bind_master(struct device *dev, bool has_components) } priv->canvas = meson_canvas_get(dev); - if (!IS_ERR(priv->canvas)) { - ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_osd1); - if (ret) - goto free_drm; - ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_0); - if (ret) { - meson_canvas_free(priv->canvas, priv->canvas_id_osd1); - goto free_drm; - } - ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_1); - if (ret) { - meson_canvas_free(priv->canvas, priv->canvas_id_osd1); - meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); - goto free_drm; - } - ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_2); - if (ret) { - meson_canvas_free(priv->canvas, priv->canvas_id_osd1); - meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); - meson_canvas_free(priv->canvas, priv->canvas_id_vd1_1); - goto free_drm; - } - } else { - priv->canvas = NULL; - - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dmc"); - if (!res) { - ret = -EINVAL; - goto free_drm; - } - /* Simply ioremap since it may be a shared register zone */ - regs = devm_ioremap(dev, res->start, resource_size(res)); - if (!regs) { - ret = -EADDRNOTAVAIL; - goto free_drm; - } + if (IS_ERR(priv->canvas)) { + ret = PTR_ERR(priv->canvas); + goto free_drm; + } - priv->dmc = devm_regmap_init_mmio(dev, regs, - &meson_regmap_config); - if (IS_ERR(priv->dmc)) { - dev_err(&pdev->dev, "Couldn't create the DMC regmap\n"); - ret = PTR_ERR(priv->dmc); - goto free_drm; - } + ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_osd1); + if (ret) + goto free_drm; + ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_0); + if (ret) { + meson_canvas_free(priv->canvas, priv->canvas_id_osd1); + goto free_drm; + } + ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_1); + if (ret) { + meson_canvas_free(priv->canvas, priv->canvas_id_osd1); + meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); + goto free_drm; + } + ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_2); + if (ret) { + meson_canvas_free(priv->canvas, priv->canvas_id_osd1); + meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); + meson_canvas_free(priv->canvas, priv->canvas_id_vd1_1); + goto free_drm; } priv->vsync_irq = platform_get_irq(pdev, 0); diff --git a/drivers/gpu/drm/meson/meson_drv.h b/drivers/gpu/drm/meson/meson_drv.h index 4dccf4cd042a..214a7cb18ce2 100644 --- a/drivers/gpu/drm/meson/meson_drv.h +++ b/drivers/gpu/drm/meson/meson_drv.h @@ -29,7 +29,6 @@ struct meson_drm { struct device *dev; void __iomem *io_base; struct regmap *hhi; - struct regmap *dmc; int vsync_irq; struct meson_canvas *canvas; diff --git a/drivers/gpu/drm/meson/meson_overlay.c b/drivers/gpu/drm/meson/meson_overlay.c index 691a9fd16b36..b54a22e483b9 100644 --- a/drivers/gpu/drm/meson/meson_overlay.c +++ b/drivers/gpu/drm/meson/meson_overlay.c @@ -22,7 +22,6 @@ #include "meson_overlay.h" #include "meson_vpp.h" #include "meson_viu.h" -#include "meson_canvas.h" #include "meson_registers.h" /* VD1_IF0_GEN_REG */ @@ -350,13 +349,6 @@ static void meson_overlay_atomic_update(struct drm_plane *plane, DRM_DEBUG_DRIVER("\n"); - /* Fallback is canvas provider is not available */ - if (!priv->canvas) { - priv->canvas_id_vd1_0 = MESON_CANVAS_ID_VD1_0; - priv->canvas_id_vd1_1 = MESON_CANVAS_ID_VD1_1; - priv->canvas_id_vd1_2 = MESON_CANVAS_ID_VD1_2; - } - interlace_mode = state->crtc->mode.flags & DRM_MODE_FLAG_INTERLACE; spin_lock_irqsave(&priv->drm->event_lock, flags); diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c index 6119a0224278..b7786218cb10 100644 --- a/drivers/gpu/drm/meson/meson_plane.c +++ b/drivers/gpu/drm/meson/meson_plane.c @@ -38,7 +38,6 @@ #include "meson_plane.h" #include "meson_vpp.h" #include "meson_viu.h" -#include "meson_canvas.h" #include "meson_registers.h" /* OSD_SCI_WH_M1 */ @@ -148,10 +147,7 @@ static void meson_plane_atomic_update(struct drm_plane *plane, (0xFF << OSD_GLOBAL_ALPHA_SHIFT) | OSD_BLK0_ENABLE; - if (priv->canvas) - canvas_id_osd1 = priv->canvas_id_osd1; - else - canvas_id_osd1 = MESON_CANVAS_ID_OSD1; + canvas_id_osd1 = priv->canvas_id_osd1; /* Set up BLK0 to point to the right canvas */ priv->viu.osd1_blk0_cfg[0] = ((canvas_id_osd1 << OSD_CANVAS_SEL) | diff --git a/drivers/gpu/drm/meson/meson_viu.c b/drivers/gpu/drm/meson/meson_viu.c index e46e05f50bad..ac0f3687e09a 100644 --- a/drivers/gpu/drm/meson/meson_viu.c +++ b/drivers/gpu/drm/meson/meson_viu.c @@ -25,7 +25,6 @@ #include "meson_viu.h" #include "meson_vpp.h" #include "meson_venc.h" -#include "meson_canvas.h" #include "meson_registers.h" /**
Now that the DMC register range is no longer in the bindings, remove any mention towards it and exclusively use the meson-canvas module. Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com> --- drivers/gpu/drm/meson/Makefile | 2 +- drivers/gpu/drm/meson/meson_canvas.c | 73 ----------------------- drivers/gpu/drm/meson/meson_canvas.h | 51 ---------------- drivers/gpu/drm/meson/meson_crtc.c | 84 ++++++++------------------- drivers/gpu/drm/meson/meson_drv.c | 68 ++++++++-------------- drivers/gpu/drm/meson/meson_drv.h | 1 - drivers/gpu/drm/meson/meson_overlay.c | 8 --- drivers/gpu/drm/meson/meson_plane.c | 6 +- drivers/gpu/drm/meson/meson_viu.c | 1 - 9 files changed, 51 insertions(+), 243 deletions(-) delete mode 100644 drivers/gpu/drm/meson/meson_canvas.c delete mode 100644 drivers/gpu/drm/meson/meson_canvas.h