Message ID | 555D086F.4000104@math.uni-bielefeld.de (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Hi Tobias, 2015-05-21 Tobias Jakobi <tjakobi@math.uni-bielefeld.de>: > Gustavo Padovan wrote: > > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk> > > > > 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: > 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; > > Otherwise I get an oops (nullptr deref) on boot, so 'state' is probably > not initialized yet at this point. Would you like to send a proper git patch of this? You can move the drm_mode_vrefresh() part to your patch. Gustavo -- 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
Hey, On 2015-05-21 16:06, Gustavo Padovan wrote: > Hi Tobias, > > 2015-05-21 Tobias Jakobi <tjakobi@math.uni-bielefeld.de>: > >> Gustavo Padovan wrote: >> > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk> >> > >> > 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: >> 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; >> >> Otherwise I get an oops (nullptr deref) on boot, so 'state' is >> probably >> not initialized yet at this point. > > Would you like to send a proper git patch of this? You can move the > drm_mode_vrefresh() part to your patch. I'll try to send out something later this day. With best wishes, Tobias > > Gustavo -- 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;