From patchwork Wed May 20 22:19:27 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Jakobi X-Patchwork-Id: 6450821 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 0BE3A9F318 for ; Wed, 20 May 2015 22:19:34 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2F1242034F for ; Wed, 20 May 2015 22:19:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9D3A420270 for ; Wed, 20 May 2015 22:19:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752821AbbETWTa (ORCPT ); Wed, 20 May 2015 18:19:30 -0400 Received: from smtp.math.uni-bielefeld.de ([129.70.45.10]:38484 "EHLO smtp.math.uni-bielefeld.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751962AbbETWT3 (ORCPT ); Wed, 20 May 2015 18:19:29 -0400 Received: from [192.168.0.34] (unknown [5.147.63.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by smtp.math.uni-bielefeld.de (Postfix) with ESMTPSA id 7C3AB60309; Thu, 21 May 2015 00:19:27 +0200 (CEST) Message-ID: <555D086F.4000104@math.uni-bielefeld.de> Date: Thu, 21 May 2015 00:19:27 +0200 From: Tobias Jakobi User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0 SeaMonkey/2.33.1 MIME-Version: 1.0 To: Gustavo Padovan , linux-samsung-soc@vger.kernel.org CC: dri-devel@lists.freedesktop.org, inki.dae@samsung.com, jy0922.shim@samsung.com, daniel@fooishbar.org, Gustavo Padovan Subject: Re: [PATCH v3] drm/exynos: calculate vrefresh instead of use a fixed value References: <1432155399-5586-1-git-send-email-gustavo@padovan.org> In-Reply-To: <1432155399-5586-1-git-send-email-gustavo@padovan.org> Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Gustavo Padovan wrote: > From: Gustavo Padovan > > When mode's vrefresh is zero we should ask DRM core to calculate vrefresh > for us so we can get the correct value instead of relying on fixed value > defined in a macro. But if vrefresh is still zero we should fail the > update. This works better for me: Otherwise I get an oops (nullptr deref) on boot, so 'state' is probably not initialized yet at this point. With best wishes, Tobias Jakobi > > Suggested-by: Daniel Stone > Signed-off-by: Gustavo Padovan > --- > drivers/gpu/drm/exynos/exynos_drm_fimd.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > index 9819fa6..3f9646d 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > @@ -42,7 +42,6 @@ > * CPU Interface. > */ > > -#define FIMD_DEFAULT_FRAMERATE 60 > #define MIN_FB_WIDTH_FOR_16WORD_BURST 128 > > /* position control register for hardware window 0, 2 ~ 4.*/ > @@ -329,7 +328,9 @@ static bool fimd_mode_fixup(struct exynos_drm_crtc *crtc, > struct drm_display_mode *adjusted_mode) > { > if (adjusted_mode->vrefresh == 0) > - adjusted_mode->vrefresh = FIMD_DEFAULT_FRAMERATE; > + adjusted_mode->vrefresh = drm_mode_vrefresh(mode); > + if (adjusted_mode->vrefresh == 0) > + return false; > > return true; > } > @@ -427,7 +428,7 @@ static void fimd_commit(struct exynos_drm_crtc *crtc) > if (ctx->driver_data->has_clksel) > val |= VIDCON0_CLKSEL_LCD; > > - clkdiv = fimd_calc_clkdiv(ctx, mode); > + clkdiv = fimd_calc_clkdiv(ctx, &crtc->base.state->adjusted_mode); > if (clkdiv > 1) > val |= VIDCON0_CLKVAL_F(clkdiv - 1) | VIDCON0_CLKDIR; > > --- 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 diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index dc834b8..26e8ae4 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -346,11 +346,16 @@ static bool fimd_mode_fixup(struct exynos_drm_crtc *crtc, static void fimd_commit(struct exynos_drm_crtc *crtc) { struct fimd_context *ctx = crtc->ctx; - struct drm_display_mode *mode = &crtc->base.mode; + struct drm_display_mode *mode; struct fimd_driver_data *driver_data = ctx->driver_data; void *timing_base = ctx->regs + driver_data->timing_base; u32 val, clkdiv; + if (crtc->base.state) + mode = &crtc->base.state->adjusted_mode; + else + mode = &crtc->base.mode; + if (ctx->suspended) return;