* [PATCH 0/2] drm/exynos: decon: Add properties [not found] <CGME20181003094053eucas1p107c7a8a60c48dd68625fdaa223ef1996@eucas1p1.samsung.com> @ 2018-10-03 9:40 ` Christoph Manszewski [not found] ` <CGME20181008093326eucas1p24634c69cc44d324b377755af1f761241@eucas1p2.samsung.com> [not found] ` <1538991182-12961-1-git-send-email-c.manszewski@samsung.com> 0 siblings, 2 replies; 4+ messages in thread From: Christoph Manszewski @ 2018-10-03 9:40 UTC (permalink / raw) To: dri-devel Cc: Christoph Manszewski, Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park, David Airlie, Kukjin Kim, Krzysztof Kozlowski, linux-arm-kernel, linux-samsung-soc, linux-kernel, Gustavo Padovan, Maarten Lankhorst, Sean Paul, Lowry Li, Bartlomiej Zolnierkiewicz, Marek Szyprowski, Andrzej Hajda Hello, This patch series adds two new configurable properties to exynos5433_drm_decon. Patch 1 add window alpha property. Patch 2 add pixel blend mode property. Regards, Chris Christoph Manszewski (2): drm/exynos: decon: Make plane alpha configurable drm/exynos: decon: Make pixel blend mode configurable drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 51 ++++++++++++++++++++++++++- drivers/gpu/drm/exynos/regs-decon5433.h | 5 +++ 2 files changed, 55 insertions(+), 1 deletion(-) -- 2.7.4 ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <CGME20181008093326eucas1p24634c69cc44d324b377755af1f761241@eucas1p2.samsung.com>]
* [PATCH 0/2] drm/exynos: fimd: Add properties [not found] ` <CGME20181008093326eucas1p24634c69cc44d324b377755af1f761241@eucas1p2.samsung.com> @ 2018-10-08 9:33 ` Christoph Manszewski 0 siblings, 0 replies; 4+ messages in thread From: Christoph Manszewski @ 2018-10-08 9:33 UTC (permalink / raw) To: dri-devel Cc: Christoph Manszewski, Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park, David Airlie, Kukjin Kim, Krzysztof Kozlowski, linux-arm-kernel, linux-samsung-soc, linux-kernel, Bartlomiej Zolnierkiewicz, Marek Szyprowski, Andrzej Hajda Hello, This patch series adds two new configurable properties to exynos_drm_fimd. Patch 1 add window alpha property. Patch 2 add pixel blend mode property. Regards, Chris Christoph Manszewski (2): drm/exynos: fimd: Make plane alpha configurable drm/exynos: fimd: Make pixel blend mode configurable drivers/gpu/drm/exynos/exynos_drm_fimd.c | 87 ++++++++++++++++++++++++-------- include/video/samsung_fimd.h | 2 + 2 files changed, 69 insertions(+), 20 deletions(-) -- 2.7.4 ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <1538991182-12961-1-git-send-email-c.manszewski@samsung.com>]
[parent not found: <CGME20181008093328eucas1p2c00d65c7f8451f7628f630934c992185@eucas1p2.samsung.com>]
* [PATCH 1/2] drm/exynos: fimd: Make plane alpha configurable [not found] ` <CGME20181008093328eucas1p2c00d65c7f8451f7628f630934c992185@eucas1p2.samsung.com> @ 2018-10-08 9:33 ` Christoph Manszewski 0 siblings, 0 replies; 4+ messages in thread From: Christoph Manszewski @ 2018-10-08 9:33 UTC (permalink / raw) To: dri-devel Cc: Christoph Manszewski, Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park, David Airlie, Kukjin Kim, Krzysztof Kozlowski, linux-arm-kernel, linux-samsung-soc, linux-kernel, Bartlomiej Zolnierkiewicz, Marek Szyprowski, Andrzej Hajda The fimd hardware supports variable plane alpha. Currently planes are opaque, make this configurable. Tested on TRATS2 with Exynos 4412 CPU, on top of exynos-drm-next. Signed-off-by: Christoph Manszewski <c.manszewski@samsung.com> --- drivers/gpu/drm/exynos/exynos_drm_fimd.c | 69 +++++++++++++++++++++++--------- include/video/samsung_fimd.h | 1 + 2 files changed, 51 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index b7f56935a46b..06d5d2422246 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -229,6 +229,21 @@ static const uint32_t fimd_formats[] = { DRM_FORMAT_ARGB8888, }; +static const unsigned int capabilities[WINDOWS_NR] = { + 0, + EXYNOS_DRM_PLANE_CAP_WIN_BLEND, + EXYNOS_DRM_PLANE_CAP_WIN_BLEND, + EXYNOS_DRM_PLANE_CAP_WIN_BLEND, + EXYNOS_DRM_PLANE_CAP_WIN_BLEND, +}; + +static inline void fimd_set_bits(struct fimd_context *ctx, u32 reg, u32 mask, + u32 val) +{ + val = (val & mask) | (readl(ctx->regs + reg) & ~mask); + writel(val, ctx->regs + reg); +} + static int fimd_enable_vblank(struct exynos_drm_crtc *crtc) { struct fimd_context *ctx = crtc->ctx; @@ -552,10 +567,38 @@ static void fimd_commit(struct exynos_drm_crtc *crtc) writel(val, ctx->regs + VIDCON0); } +static void fimd_win_set_bldmod(struct fimd_context *ctx, unsigned int win, + struct drm_framebuffer *fb) +{ + struct exynos_drm_plane plane = ctx->planes[win]; + struct exynos_drm_plane_state *state = + to_exynos_plane_state(plane.base.state); + unsigned int alpha = state->base.alpha; + u32 win_alpha = alpha >> 8; + u32 val = 0; + + /* OSD alpha */ + val = VIDISD14C_ALPHA0_R(alpha >> 4) | + VIDISD14C_ALPHA0_G(win_alpha >> 4) | + VIDISD14C_ALPHA0_B(win_alpha >> 4) | + VIDISD14C_ALPHA1_R(win_alpha >> 4) | + VIDISD14C_ALPHA1_G(win_alpha >> 4) | + VIDISD14C_ALPHA1_B(win_alpha >> 4); + + writel(val, ctx->regs + VIDOSD_C(win)); + + val = VIDW_ALPHA_R(win_alpha & 0xf) | VIDW_ALPHA_G(win_alpha & 0xf) | + VIDW_ALPHA_G(win_alpha & 0xf); + writel(val, ctx->regs + VIDWnALPHA0(win)); + writel(val, ctx->regs + VIDWnALPHA1(win)); + fimd_set_bits(ctx, BLENDCON, BLENDCON_NEW_MASK, + BLENDCON_NEW_8BIT_ALPHA_VALUE); +} static void fimd_win_set_pixfmt(struct fimd_context *ctx, unsigned int win, - uint32_t pixel_format, int width) + struct drm_framebuffer *fb, int width) { + uint32_t pixel_format = fb->format->format; unsigned long val; val = WINCONx_ENWIN; @@ -596,6 +639,7 @@ static void fimd_win_set_pixfmt(struct fimd_context *ctx, unsigned int win, | WINCON1_BLD_PIX | WINCON1_ALPHA_SEL; val |= WINCONx_WSWP; val |= WINCONx_BURSTLEN_16WORD; + val |= WINCON1_ALPHA_MUL; break; } @@ -607,7 +651,7 @@ static void fimd_win_set_pixfmt(struct fimd_context *ctx, unsigned int win, * still better to change dma-burst than displaying garbage. */ - if (width < MIN_FB_WIDTH_FOR_16WORD_BURST) { + if (fb->width < MIN_FB_WIDTH_FOR_16WORD_BURST) { val &= ~WINCONx_BURSTLEN_MASK; val |= WINCONx_BURSTLEN_4WORD; } @@ -615,22 +659,8 @@ static void fimd_win_set_pixfmt(struct fimd_context *ctx, unsigned int win, writel(val, ctx->regs + WINCON(win)); /* hardware window 0 doesn't support alpha channel. */ - if (win != 0) { - /* OSD alpha */ - val = VIDISD14C_ALPHA0_R(0xf) | - VIDISD14C_ALPHA0_G(0xf) | - VIDISD14C_ALPHA0_B(0xf) | - VIDISD14C_ALPHA1_R(0xf) | - VIDISD14C_ALPHA1_G(0xf) | - VIDISD14C_ALPHA1_B(0xf); - - writel(val, ctx->regs + VIDOSD_C(win)); - - val = VIDW_ALPHA_R(0xf) | VIDW_ALPHA_G(0xf) | - VIDW_ALPHA_G(0xf); - writel(val, ctx->regs + VIDWnALPHA0(win)); - writel(val, ctx->regs + VIDWnALPHA1(win)); - } + if (win != 0) + fimd_win_set_bldmod(ctx, win, fb); } static void fimd_win_set_colkey(struct fimd_context *ctx, unsigned int win) @@ -786,7 +816,7 @@ static void fimd_update_plane(struct exynos_drm_crtc *crtc, DRM_DEBUG_KMS("osd size = 0x%x\n", (unsigned int)val); } - fimd_win_set_pixfmt(ctx, win, fb->format->format, state->src.w); + fimd_win_set_pixfmt(ctx, win, fb, state->src.w); /* hardware window 0 doesn't support color key. */ if (win != 0) @@ -988,6 +1018,7 @@ static int fimd_bind(struct device *dev, struct device *master, void *data) ctx->configs[i].num_pixel_formats = ARRAY_SIZE(fimd_formats); ctx->configs[i].zpos = i; ctx->configs[i].type = fimd_win_types[i]; + ctx->configs[i].capabilities = capabilities[i]; ret = exynos_plane_init(drm_dev, &ctx->planes[i], i, &ctx->configs[i]); if (ret) diff --git a/include/video/samsung_fimd.h b/include/video/samsung_fimd.h index d8fc96ed11e9..f070b7c0d2cf 100644 --- a/include/video/samsung_fimd.h +++ b/include/video/samsung_fimd.h @@ -211,6 +211,7 @@ #define WINCON0_BPPMODE_24BPP_888 (0xb << 2) #define WINCON1_LOCALSEL_CAMIF (1 << 23) +#define WINCON1_ALPHA_MUL (1 << 7) #define WINCON1_BLD_PIX (1 << 6) #define WINCON1_BPPMODE_MASK (0xf << 2) #define WINCON1_BPPMODE_SHIFT 2 -- 2.7.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
[parent not found: <CGME20181008093330eucas1p15363b8acc502292b24a6f6803073accc@eucas1p1.samsung.com>]
* [PATCH 2/2] drm/exynos: fimd: Make pixel blend mode configurable [not found] ` <CGME20181008093330eucas1p15363b8acc502292b24a6f6803073accc@eucas1p1.samsung.com> @ 2018-10-08 9:33 ` Christoph Manszewski 0 siblings, 0 replies; 4+ messages in thread From: Christoph Manszewski @ 2018-10-08 9:33 UTC (permalink / raw) To: dri-devel Cc: Christoph Manszewski, Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park, David Airlie, Kukjin Kim, Krzysztof Kozlowski, linux-arm-kernel, linux-samsung-soc, linux-kernel, Bartlomiej Zolnierkiewicz, Marek Szyprowski, Andrzej Hajda Currently blend mode is set accordingly to pixel format. Add pixel blend mode property and make that configurable. Fimd hardware doesn't support premultiplied mode, choose coverage as default. Tested on TRATS2 with Exynos 4412 CPU, on top of exynos-drm-next using modetest. Signed-off-by: Christoph Manszewski <c.manszewski@samsung.com> --- Similar to exynos5433_drm_decon, the driver exposes the "premultiplied" option for pixel blend mode property, although hardware doesn't support it, and it's hanlded by the driver as "coverage". Again, that's because the premultiplied mode is required and used as default. drivers/gpu/drm/exynos/exynos_drm_fimd.c | 28 ++++++++++++++++++++++------ include/video/samsung_fimd.h | 1 + 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 06d5d2422246..c4b0fb05a19b 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -231,10 +231,10 @@ static const uint32_t fimd_formats[] = { static const unsigned int capabilities[WINDOWS_NR] = { 0, - EXYNOS_DRM_PLANE_CAP_WIN_BLEND, - EXYNOS_DRM_PLANE_CAP_WIN_BLEND, - EXYNOS_DRM_PLANE_CAP_WIN_BLEND, - EXYNOS_DRM_PLANE_CAP_WIN_BLEND, + EXYNOS_DRM_PLANE_CAP_WIN_BLEND | EXYNOS_DRM_PLANE_CAP_PIX_BLEND, + EXYNOS_DRM_PLANE_CAP_WIN_BLEND | EXYNOS_DRM_PLANE_CAP_PIX_BLEND, + EXYNOS_DRM_PLANE_CAP_WIN_BLEND | EXYNOS_DRM_PLANE_CAP_PIX_BLEND, + EXYNOS_DRM_PLANE_CAP_WIN_BLEND | EXYNOS_DRM_PLANE_CAP_PIX_BLEND, }; static inline void fimd_set_bits(struct fimd_context *ctx, u32 reg, u32 mask, @@ -576,6 +576,23 @@ static void fimd_win_set_bldmod(struct fimd_context *ctx, unsigned int win, unsigned int alpha = state->base.alpha; u32 win_alpha = alpha >> 8; u32 val = 0; + unsigned int pixel_alpha; + + if (fb->format->has_alpha) + pixel_alpha = state->base.pixel_blend_mode; + else + pixel_alpha = DRM_MODE_BLEND_PIXEL_NONE; + + switch (pixel_alpha) { + case DRM_MODE_BLEND_PIXEL_NONE: + break; + case DRM_MODE_BLEND_COVERAGE: + default: + val |= WINCON1_ALPHA_SEL; + val |= WINCON1_BLD_PIX; + val |= WINCON1_ALPHA_MUL; + } + fimd_set_bits(ctx, WINCON(win), WINCONx_BLEND_MODE_MASK, val); /* OSD alpha */ val = VIDISD14C_ALPHA0_R(alpha >> 4) | @@ -639,7 +656,6 @@ static void fimd_win_set_pixfmt(struct fimd_context *ctx, unsigned int win, | WINCON1_BLD_PIX | WINCON1_ALPHA_SEL; val |= WINCONx_WSWP; val |= WINCONx_BURSTLEN_16WORD; - val |= WINCON1_ALPHA_MUL; break; } @@ -656,7 +672,7 @@ static void fimd_win_set_pixfmt(struct fimd_context *ctx, unsigned int win, val |= WINCONx_BURSTLEN_4WORD; } - writel(val, ctx->regs + WINCON(win)); + fimd_set_bits(ctx, WINCON(win), ~WINCONx_BLEND_MODE_MASK, val); /* hardware window 0 doesn't support alpha channel. */ if (win != 0) diff --git a/include/video/samsung_fimd.h b/include/video/samsung_fimd.h index f070b7c0d2cf..bb1d5baa74d6 100644 --- a/include/video/samsung_fimd.h +++ b/include/video/samsung_fimd.h @@ -198,6 +198,7 @@ #define WINCONx_BURSTLEN_8WORD (0x1 << 9) #define WINCONx_BURSTLEN_4WORD (0x2 << 9) #define WINCONx_ENWIN (1 << 0) +#define WINCONx_BLEND_MODE_MASK (0xc2) #define WINCON0_BPPMODE_MASK (0xf << 2) #define WINCON0_BPPMODE_SHIFT 2 -- 2.7.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-10-08 9:33 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20181003094053eucas1p107c7a8a60c48dd68625fdaa223ef1996@eucas1p1.samsung.com> 2018-10-03 9:40 ` [PATCH 0/2] drm/exynos: decon: Add properties Christoph Manszewski [not found] ` <CGME20181008093326eucas1p24634c69cc44d324b377755af1f761241@eucas1p2.samsung.com> 2018-10-08 9:33 ` [PATCH 0/2] drm/exynos: fimd: " Christoph Manszewski [not found] ` <1538991182-12961-1-git-send-email-c.manszewski@samsung.com> [not found] ` <CGME20181008093328eucas1p2c00d65c7f8451f7628f630934c992185@eucas1p2.samsung.com> 2018-10-08 9:33 ` [PATCH 1/2] drm/exynos: fimd: Make plane alpha configurable Christoph Manszewski [not found] ` <CGME20181008093330eucas1p15363b8acc502292b24a6f6803073accc@eucas1p1.samsung.com> 2018-10-08 9:33 ` [PATCH 2/2] drm/exynos: fimd: Make pixel blend mode configurable Christoph Manszewski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).