From: Tobias Jakobi <liquid.acid@gmx.net>
To: Inki Dae <daeinki@gmail.com>,
Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
Cc: "linux-samsung-soc@vger.kernel.org"
<linux-samsung-soc@vger.kernel.org>,
Gustavo Padovan <gustavo.padovan@collabora.co.uk>,
DRI mailing list <dri-devel@lists.freedesktop.org>,
Marek Szyprowski <m.szyprowski@samsung.com>
Subject: Re: [PATCH v2 4/5] drm/exynos: mixer: do blending setup in mixer_cfg_layer()
Date: Thu, 26 Nov 2015 17:42:38 +0100 [thread overview]
Message-ID: <5657367E.2080800@gmx.net> (raw)
In-Reply-To: <CAAQKjZOj=cT0NjsZ-M1uL0QFaXm=oxprO1brjRfnCT=F0DPqbA@mail.gmail.com>
Hello Inki,
my main system which I also used for development was stolen on Tuesday,
so I won't be working on this series anytime soon. If anyone wants to
pick it up, please go ahead.
- Tobias
Inki Dae wrote:
> 2015-11-24 2:44 GMT+09:00 Tobias Jakobi <tjakobi@math.uni-bielefeld.de>:
>> Hey Inki,
>>
>>
>> Inki Dae wrote:
>>>
>>> 2015년 11월 23일 01:09에 Tobias Jakobi 이(가) 쓴 글:
>>>> This updates the blending setup when the layer configuration
>>>> changes (triggered by mixer_win_{commit,disable}).
>>>>
>>>> To avoid unnecesary reconfigurations we cache the layer
>>>> state in the mixer context.
>>>>
>>>> Extra care has to be taken for the layer that is currently
>>>> being enabled/disabled.
>>>>
>>>> Signed-off-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
>>>> ---
>>>> drivers/gpu/drm/exynos/exynos_mixer.c | 41 +++++++++++++++++++++++++++++++++--
>>>> 1 file changed, 39 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
>>>> index ec9659e..1c24fb5 100644
>>>> --- a/drivers/gpu/drm/exynos/exynos_mixer.c
>>>> +++ b/drivers/gpu/drm/exynos/exynos_mixer.c
>>>> @@ -99,6 +99,7 @@ struct mixer_context {
>>>> struct exynos_drm_plane planes[MIXER_WIN_NR];
>>>> const struct layer_cfg *layer_cfg;
>>>> unsigned int num_layer;
>>>> + u32 layer_state;
>>>> int pipe;
>>>> unsigned long flags;
>>>> bool interlace;
>>>> @@ -189,6 +190,27 @@ static inline bool is_alpha_format(const struct mixer_context* ctx, unsigned int
>>>> }
>>>> }
>>>>
>>>> +static inline u32 get_layer_state(const struct mixer_context *ctx,
>>>> + unsigned int win, bool enable)
>>>> +{
>>>> + u32 enable_state, alpha_state;
>>>> +
>>>> + enable_state =tx->layer_state & 0xffff;
>>>> + alpha_state =tx->layer_state >> 16;
>>>> +
>>>> + if (enable)
>>>> + enable_state |=1 << win);
>>>> + else
>>>> + enable_state &=(1 << win);
>>>> +
>>>> + if (enable && is_alpha_format(ctx, win))
>>>> + alpha_state |=1 << win);
>>>> + else
>>>> + alpha_state &=(1 << win);
>>>> +
>>>> + return ((alpha_state << 16) | enable_state);
>>>> +}
>>>> +
>>>> static inline u32 vp_reg_read(struct mixer_resources *res, u32 reg_id)
>>>> {
>>>> return readl(res->vp_regs + reg_id);
>>>> @@ -370,8 +392,9 @@ static void mixer_general_layer(struct mixer_context *ctx,
>>>> {
>>>> u32 val;
>>>> struct mixer_resources *res =ctx->mixer_res;
>>>> + const u32 alpha_state =tx->layer_state >> 16;
>>>>
>>>> - if (is_alpha_format(ctx, cfg->index)) {
>>>> + if (alpha_state & (1 << cfg->index)) {
>>>> val =XR_GRP_CFG_COLOR_KEY_DISABLE; /* no blank key */
>>>> val |=XR_GRP_CFG_BLEND_PRE_MUL;
>>>> val |=XR_GRP_CFG_PIXEL_BLEND_EN; /* blending based on pixel alpha */
>>>> @@ -397,10 +420,11 @@ static void mixer_general_layer(struct mixer_context *ctx,
>>>> }
>>>> }
>>>>
>>>> -static void mixer_layer_blending(struct mixer_context *ctx, unsigned int enable_state)
>>>> +static void mixer_layer_blending(struct mixer_context *ctx)
>>>> {
>>>> unsigned int i, index;
>>>> bool bottom_layer =alse;
>>>> + const u32 enable_state =tx->layer_state & 0xffff;
>>>>
>>>> for (i =; i < ctx->num_layer; ++i) {
>>>> index =tx->layer_cfg[i].index;
>>>> @@ -503,8 +527,19 @@ static void mixer_cfg_layer(struct mixer_context *ctx, unsigned int win,
>>>> bool enable)
>>>> {
>>>> struct mixer_resources *res =ctx->mixer_res;
>>>> + u32 new_layer_state;
>>>> u32 val =nable ? ~0 : 0;
>>>>
>>>> + new_layer_state =et_layer_state(ctx, win, enable);
>>>> + if (new_layer_state =ctx->layer_state)
>>>> + return;
>>>> +
>>>> + /*
>>>> + * Update the layer state so that mixer_layer_blending()
>>>> + * below can use it.
>>>> + */
>>>> + ctx->layer_state =ew_layer_state;
>>> It may be trivial but I think it'd be better to move above line to most bottom of this function.
>> Sure, I can do that, but I would rather know what's the rationale here.
> Very simple. Above line sets layer_state to new_layer_state logically
> but physically not.
> So it'd be reasonable to update layer state after physically setting
> the mixer layer.
>
> Thanks,
> Inki Dae
>
>>
>> With best wishes,
>> Tobias
>>
>>>> +
>>>> switch (win) {
>>>> case 0:
>>>> mixer_reg_writemask(res, MXR_CFG, val, MXR_CFG_GRP0_ENABLE);
>>>> @@ -520,6 +555,8 @@ static void mixer_cfg_layer(struct mixer_context *ctx, unsigned int win,
>>>> }
>>>> break;
>>>> }
>>>> +
>>>> + mixer_layer_blending(ctx);
>>> Here.
>>>
>>> Thanks,
>>> Inki Dae
>>>
>>>> }
>>>>
>>>> static void mixer_run(struct mixer_context *ctx)
>>>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2015-11-26 16:42 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-22 16:09 [PATCH v2 0/5] drm/exynos: rework layer blending setup Tobias Jakobi
2015-11-22 16:09 ` [PATCH v2 1/5] drm/exynos: mixer: refactor layer setup Tobias Jakobi
2015-11-23 7:22 ` Inki Dae
2015-11-23 17:44 ` Tobias Jakobi
2015-11-25 16:38 ` Inki Dae
2015-11-22 16:09 ` [PATCH v2 2/5] drm/exynos: mixer: introduce mixer_layer_blending() Tobias Jakobi
2015-11-23 8:33 ` Inki Dae
2015-11-23 17:44 ` Tobias Jakobi
2015-11-25 16:31 ` Inki Dae
2015-11-22 16:09 ` [PATCH v2 3/5] drm/exynos: mixer: remove all static blending setup Tobias Jakobi
2015-11-22 16:09 ` [PATCH v2 4/5] drm/exynos: mixer: do blending setup in mixer_cfg_layer() Tobias Jakobi
2015-11-23 7:34 ` Inki Dae
2015-11-23 17:44 ` Tobias Jakobi
2015-11-25 16:00 ` Inki Dae
2015-11-26 16:42 ` Tobias Jakobi [this message]
2015-11-22 16:09 ` [PATCH v2 5/5] drm/exynos: mixer: also allow ARGB1555 and ARGB4444 Tobias Jakobi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5657367E.2080800@gmx.net \
--to=liquid.acid@gmx.net \
--cc=daeinki@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gustavo.padovan@collabora.co.uk \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=tjakobi@math.uni-bielefeld.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox