All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Paul <seanpaul@chromium.org>
To: Daniel Kurtz <djkurtz@chromium.org>
Cc: "Stéphane Marchesin" <marcheu@chromium.org>,
	dri-devel <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH v3 19/32] drm/exynos: Use mode_set to configure fimd
Date: Wed, 4 Dec 2013 17:37:15 -0500	[thread overview]
Message-ID: <CAOw6vbKc3t9ncb0gg30MA1SzNessF=n-pDF-+ncuSGsspzPutw@mail.gmail.com> (raw)
In-Reply-To: <CAGS+omAP2LS8pS5Nybz31hO4gozqznELpmVmURgETXaVHrQ0uA@mail.gmail.com>

On Fri, Nov 15, 2013 at 8:53 AM, Daniel Kurtz <djkurtz@chromium.org> wrote:
> Hi Sean, Tomasz,
>
> On Mon, Nov 11, 2013 at 6:03 AM, Tomasz Figa <tomasz.figa@gmail.com> wrote:
>> Hi Sean,
>>
>> On Tuesday 29 of October 2013 12:13:05 Sean Paul wrote:
>>> This patch uses the mode passed into mode_set to configure fimd instead
>>> of directly using the panel from context. This will allow us to move
>>> the exynos_drm_display implementation from fimd into the DP driver
>>> where it belongs.
>>
>> Remember that DP is not the only possible way to connect a display driven
>> by FIMD. You also have the direct (RGB and i80) and DSI interfaces.
>>
>> Also, please see my comments inline.
>>
>>>
>>> Signed-off-by: Sean Paul <seanpaul@chromium.org>
>>> ---
>>>
>>> Changes in v2: None
>>> Changes in v3: None
>>>
>>>  drivers/gpu/drm/exynos/exynos_drm_fimd.c | 159 ++++++++++++++++++-------------
>>>  1 file changed, 91 insertions(+), 68 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> index d2b8ccb..f69d6e5 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
>>> @@ -104,6 +104,20 @@ struct fimd_win_data {
>>>       bool                    resume;
>>>  };
>>>
>>> +struct fimd_mode_data {
>>> +     unsigned                vtotal;
>>
>> For consistency with rest of the code, unsigned int would prefered.
>>
>> However, I'm not sure what is this struct for, since it does not store
>> neither raw register values (1 needs to be subtracted from them) nor
>> any values hard to compute at commit time (maybe except clkdiv, but still
>> how often commit would be called?).
>>
>>> +     unsigned                vdisplay;
>>> +     unsigned                vsync_len;
>>> +     unsigned                vbpd;
>>> +     unsigned                vfpd;
>>> +     unsigned                htotal;
>>> +     unsigned                hdisplay;
>>> +     unsigned                hsync_len;
>>> +     unsigned                hbpd;
>>> +     unsigned                hfpd;
>>> +     u32                     clkdiv;
>>> +};
>>> +
>>>  struct fimd_context {
>>>       struct device                   *dev;
>>>       struct drm_device               *drm_dev;
>>> @@ -112,8 +126,8 @@ struct fimd_context {
>>>       struct clk                      *bus_clk;
>>>       struct clk                      *lcd_clk;
>>>       void __iomem                    *regs;
>>> +     struct fimd_mode_data           mode;
>>>       struct fimd_win_data            win_data[WINDOWS_NR];
>>> -     unsigned int                    clkdiv;
>>>       unsigned int                    default_win;
>>>       unsigned long                   irq_flags;
>>>       u32                             vidcon0;
>>> @@ -560,11 +574,56 @@ static void fimd_dpms(struct exynos_drm_manager *mgr, int mode)
>>>       mutex_unlock(&ctx->lock);
>>>  }
>>>
>>> +static u32 fimd_calc_clkdiv(struct fimd_context *ctx,
>>> +             const struct drm_display_mode *mode)
>>> +{
>>> +     unsigned long ideal_clk = mode->htotal * mode->vtotal * mode->vrefresh;
>>> +     u32 clkdiv;
>>> +
>>> +     /* Find the clock divider value that gets us closest to ideal_clk */
>>> +     clkdiv = DIV_ROUND_CLOSEST(clk_get_rate(ctx->lcd_clk), ideal_clk);
>>
>> This is a functional change unrelated to $subject. Before this patch,
>> DIV_ROUND_UP() had been used.
>>
>>> +
>>> +     return (clkdiv < 0x100) ? clkdiv : 0xff;
>>> +}
>>> +
>>> +static bool fimd_mode_fixup(struct exynos_drm_manager *mgr,
>>> +             const struct drm_display_mode *mode,
>>> +             struct drm_display_mode *adjusted_mode)
>>> +{
>>> +     if (adjusted_mode->vrefresh == 0)
>>> +             adjusted_mode->vrefresh = FIMD_DEFAULT_FRAMERATE;
>
> The actual pixel clock will be clk_get_rate(ctx->lcd_clk) / clkdiv.
> Should we also be adjusting the "clock" field of adjusted_mode here?
>

Seems like we'll need the patchset you just merged in the chromium
tree to fix the mismatch between userspace/kernel (to avoid the
multiple modesets on boot). I don't think it'll make any functional
difference, maybe you can post that as a followup?

>>> +
>>> +     return true;
>>> +}
>>> +
>>> +static void fimd_mode_set(struct exynos_drm_manager *mgr,
>>> +             const struct drm_display_mode *in_mode)
>>> +{
>>> +     struct fimd_context *ctx = mgr->ctx;
>>> +     struct fimd_mode_data *mode = &ctx->mode;
>>> +     int hblank, vblank;
>>> +
>>> +     vblank = in_mode->crtc_vblank_end - in_mode->crtc_vblank_start;
>>> +     mode->vtotal = in_mode->crtc_vtotal;
>>> +     mode->vdisplay = in_mode->crtc_vdisplay;
>>> +     mode->vsync_len = in_mode->crtc_vsync_end - in_mode->crtc_vsync_start;
>>> +     mode->vbpd = (vblank - mode->vsync_len) / 2;
>>> +     mode->vfpd = vblank - mode->vsync_len - mode->vbpd;
>>> +
>>> +     hblank = in_mode->crtc_hblank_end - in_mode->crtc_hblank_start;
>>> +     mode->htotal = in_mode->crtc_htotal;
>>> +     mode->hdisplay = in_mode->crtc_hdisplay;
>>> +     mode->hsync_len = in_mode->crtc_hsync_end - in_mode->crtc_hsync_start;
>>> +     mode->hbpd = (hblank - mode->hsync_len) / 2;
>>> +     mode->hfpd = hblank - mode->hsync_len - mode->hbpd;
>>> +
>>> +     mode->clkdiv = fimd_calc_clkdiv(ctx, in_mode);
>>
>> What about simply copying contents of in_mode to driver context
>> and then calculating clkdiv at commit time? You could get rid
>> of the fimd_mode_data struct and most of this function.
>>

That makes sense, and I originally had it this way, but changed it in
response to some review feedback. The reason it was changed was to
avoid recomputing things every flip, however that seems like a
chromium-specific hack, so I'll change it back.

Sean


>> Otherwise, the patch looks fine.
>>
>> Best regards,
>> Tomasz
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2013-12-04 22:37 UTC|newest]

Thread overview: 130+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-29 16:12 [PATCH v3 00/32] drm/exynos: Refactor parts of the exynos driver Sean Paul
2013-10-29 16:12 ` [PATCH v3 01/32] drm/exynos: Remove useless slab.h include Sean Paul
2013-10-31 10:24   ` Inki Dae
2013-10-31 23:32   ` Tomasz Figa
2013-10-29 16:12 ` [PATCH v3 02/32] drm/exynos: Merge overlay_ops into manager_ops Sean Paul
2013-10-31 23:39   ` Tomasz Figa
2013-11-01 19:50     ` Sean Paul
2013-11-01 19:55       ` Tomasz Figa
2013-11-04  7:44         ` Inki Dae
2013-10-29 16:12 ` [PATCH v3 03/32] drm/exynos: Add an initialize function to manager and display Sean Paul
2013-10-31 23:42   ` Tomasz Figa
2013-10-29 16:12 ` [PATCH v3 04/32] drm/exynos: Use manager_op initialize in fimd Sean Paul
2013-10-31 23:49   ` Tomasz Figa
2013-11-01 19:51     ` Sean Paul
2013-11-01 19:57       ` Tomasz Figa
2013-10-29 16:12 ` [PATCH v3 05/32] drm/exynos: hdmi: Implement initialize op for hdmi Sean Paul
2013-10-31 23:53   ` Tomasz Figa
2013-11-01 19:54     ` Sean Paul
2013-11-01 19:56       ` Tomasz Figa
2013-11-01 20:08         ` Sean Paul
2013-10-29 16:12 ` [PATCH v3 06/32] drm/exynos: Pass exynos_drm_manager in manager ops instead of dev Sean Paul
2013-11-01  0:19   ` Tomasz Figa
2013-11-01 20:01     ` Sean Paul
2013-11-01 20:11       ` Tomasz Figa
2013-10-29 16:12 ` [PATCH v3 07/32] drm/exynos: Remove apply manager callback Sean Paul
2013-11-08 21:05   ` Tomasz Figa
2013-10-29 16:12 ` [PATCH v3 08/32] drm/exynos: Remove dpms link between encoder/connector Sean Paul
2013-11-08 21:45   ` Tomasz Figa
2013-10-29 16:12 ` [PATCH v3 09/32] drm/exynos: Rename display_op power_on to dpms Sean Paul
2013-11-08 22:09   ` Tomasz Figa
2013-10-29 16:12 ` [PATCH v3 10/32] drm/exynos: Don't keep dpms state in encoder Sean Paul
2013-11-10 20:47   ` Tomasz Figa
2013-10-29 16:12 ` [PATCH v3 11/32] drm/exynos: Use unsigned long for possible_crtcs Sean Paul
2013-11-10 20:47   ` Tomasz Figa
2013-10-29 16:12 ` [PATCH v3 12/32] drm/exynos: Split manager/display/subdrv Sean Paul
2013-10-31 10:30   ` Inki Dae
2013-10-31 16:08     ` Sean Paul
2013-11-01  4:20       ` Inki Dae
2013-11-10 21:09   ` Tomasz Figa
2013-11-12 17:51     ` Sean Paul
2013-11-12 18:35       ` Tomasz Figa
2013-11-26 18:00         ` Olof Johansson
2013-11-27 10:04           ` Thierry Reding
2013-11-28 23:04           ` Tomasz Figa
2013-11-29  7:52             ` Daniel Vetter
2013-11-29  9:10               ` Tomasz Figa
2013-11-29 10:25                 ` Daniel Vetter
2013-11-29 14:13                 ` Rob Clark
2013-11-29 17:05                   ` Tomasz Figa
2013-11-29 18:35                     ` Rob Clark
2013-11-30  5:25                       ` Inki Dae
2013-12-03 21:38                     ` Sean Paul
2013-11-29 10:16             ` Thierry Reding
2013-10-29 16:12 ` [PATCH v3 13/32] drm/exynos: hdmi: remove the i2c drivers and use devtree Sean Paul
2013-11-10 20:46   ` Tomasz Figa
2013-11-11  8:44     ` Thierry Reding
2013-11-28 13:30       ` Tomasz Figa
2013-11-29 10:24         ` Thierry Reding
2013-12-03  0:37           ` Olof Johansson
2013-10-29 16:13 ` [PATCH v3 14/32] drm/exynos: Remove exynos_drm_hdmi shim Sean Paul
2013-11-10 21:24   ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 15/32] drm/exynos: Use drm_mode_copy to copy modes Sean Paul
2013-11-10 21:27   ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 16/32] drm/exynos: Disable unused crtc planes from crtc Sean Paul
2013-11-10 21:29   ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 17/32] drm/exynos: Add mode_set manager operation Sean Paul
2013-11-10 21:31   ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 18/32] drm/exynos: Implement mode_fixup " Sean Paul
2013-11-10 21:33   ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 19/32] drm/exynos: Use mode_set to configure fimd Sean Paul
2013-11-10 22:03   ` Tomasz Figa
2013-11-15 13:49     ` Daniel Kurtz
2013-11-15 13:53     ` Daniel Kurtz
2013-11-28 22:57       ` Tomasz Figa
2013-12-04 22:37       ` Sean Paul [this message]
2013-10-29 16:13 ` [PATCH v3 20/32] drm/exynos: Remove unused/useless fimd_context members Sean Paul
2013-11-11  1:19   ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 21/32] drm/exynos: Move dp driver from video/ to drm/ Sean Paul
2013-10-31 10:46   ` Inki Dae
2013-10-31 16:05     ` Sean Paul
2013-10-31 23:06     ` Jingoo Han
2013-10-31 23:06       ` Jingoo Han
2013-10-31 23:11       ` Tomasz Figa
2013-10-31 23:11         ` Tomasz Figa
2013-10-31 23:23         ` Jingoo Han
2013-10-31 23:23           ` Jingoo Han
2013-10-31 23:27           ` Tomasz Figa
2013-10-31 23:27             ` Tomasz Figa
2013-10-31 23:55             ` Jingoo Han
2013-10-31 23:55               ` Jingoo Han
2013-11-01  0:01               ` Tomasz Figa
2013-11-01  0:01                 ` Tomasz Figa
     [not found]   ` <3513711.0qTZKxmOZX@flatron>
2013-12-04 23:07     ` Sean Paul
2013-10-29 16:13 ` [PATCH v3 22/32] drm/exynos: Move display implementation into dp Sean Paul
     [not found]   ` <1383063198-10526-23-git-send-email-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2013-11-11  1:53     ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 23/32] ARM: dts: Move display-timings node from fimd to dp Sean Paul
2013-10-29 16:13 ` [PATCH v3 24/32] drm/exynos: Implement dpms display callback in DP Sean Paul
2013-11-11  2:04   ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 25/32] drm/exynos: Clean up FIMD power on/off routines Sean Paul
2013-10-31 10:54   ` Inki Dae
     [not found]     ` <1630995.NnKzZB9Rl5@flatron>
2013-11-11  4:08       ` Inki Dae
2013-11-11  2:09   ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 26/32] drm/exynos: Consolidate suspend/resume in drm_drv Sean Paul
2013-11-29 14:58   ` Tomasz Figa
2013-12-19 16:48   ` Inki Dae
2013-10-29 16:13 ` [PATCH v3 27/32] drm/exynos: Add create_connector callback Sean Paul
2013-11-11  2:19   ` Tomasz Figa
2013-12-03  5:01   ` Inki Dae
2013-10-29 16:13 ` [PATCH v3 28/32] drm/exynos: Implement drm_connector in hdmi directly Sean Paul
2013-11-29 15:58   ` Tomasz Figa
2013-12-02  9:46     ` Thierry Reding
2013-12-02  9:54       ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 29/32] drm/exynos: Implement drm_connector directly in dp driver Sean Paul
2013-11-29 16:04   ` Tomasz Figa
2013-12-03  4:45   ` Inki Dae
2013-12-04  6:46     ` Inki Dae
2013-10-29 16:13 ` [PATCH v3 30/32] drm/exynos: Implement drm_connector directly in vidi driver Sean Paul
2013-11-29 16:13   ` Tomasz Figa
2013-12-03  4:47   ` Inki Dae
2013-12-04  6:47     ` Inki Dae
2013-10-29 16:13 ` [PATCH v3 31/32] drm/exynos: Move lvds bridge discovery into DP driver Sean Paul
2013-11-29 16:55   ` Tomasz Figa
2013-11-30  5:18     ` Inki Dae
2013-11-30 12:27       ` Tomasz Figa
2013-10-29 16:13 ` [PATCH v3 32/32] drm/exynos: Remove the exynos_drm_connector shim Sean Paul
2013-11-29 16:14   ` Tomasz Figa
2013-11-07  5:48 ` [PATCH v3 00/32] drm/exynos: Refactor parts of the exynos driver Inki Dae
2013-11-07 18:20   ` Sean Paul
2013-11-08 21:01   ` Tomasz Figa
2013-11-08 21:22     ` Sean Paul

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='CAOw6vbKc3t9ncb0gg30MA1SzNessF=n-pDF-+ncuSGsspzPutw@mail.gmail.com' \
    --to=seanpaul@chromium.org \
    --cc=djkurtz@chromium.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=marcheu@chromium.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.