On Tue, Oct 16, 2018 at 04:31:37AM +0300, Souza, Jose wrote: > On Mon, 2018-10-15 at 13:58 +0300, Imre Deak wrote: > > On Fri, Oct 12, 2018 at 02:52:15PM -0700, José Roberto de Souza > > wrote: > > > When DMC firmware is not loaded, it return earlier in > > > gen9_dc_off_power_well_disable() as it will have no effect without > > > DMC firmware loaded. But it will cause a mismatch state error when > > > running intel_power_domains_verify_state(), so skipping this error > > > in this case. > > > > DC states are disabled when DMC is not loaded and we won't ever > > enable > > them, as runtime PM as a whole is disabled. So not sure why you get a > > mismatch error, but ignoring that by special casing it doesn't seem > > correct. > > I just found out a bug that was hidden this bug from drm-tip, I just > sent a separated PR(https://patchwork.freedesktop.org/series/51039/) > with this patch and the fix please take a look. > > But it was hidden because at every call to > intel_power_domains_verify_state() something was holding a reference to > one of DC_OFF domains, keeping it in the on state that means DC is > disabaled. Yes, runtime PM is kept disabled if the DMC firmware is not loaded. This also means we keep all power wells in the INIT domain - including the DC_OFF power well - enabled. > If you run drm-tip with the fix without any output all references to > DC_OFF domain will be release but as DMC firmware was not loaded DC is > not actualy enabled causing the state mismatch. > A easy way to reproduce is just run drm-tip with disable_display=1 and > check the error message in dmesg. > > Although I'm not 100% happy with the way that I'm identifying DC_OFF > power well, do you have suggestion? > > > > > > Signed-off-by: José Roberto de Souza <jose.souza@xxxxxxxxx> > > > --- > > > drivers/gpu/drm/i915/intel_runtime_pm.c | 13 ++++++++++++- > > > 1 file changed, 12 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c > > > b/drivers/gpu/drm/i915/intel_runtime_pm.c > > > index 8b1c4d0db0af..629091ad8337 100644 > > > --- a/drivers/gpu/drm/i915/intel_runtime_pm.c > > > +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c > > > @@ -4014,11 +4014,22 @@ static void > > > intel_power_domains_verify_state(struct drm_i915_private *dev_priv) > > > enabled = power_well->desc->ops->is_enabled(dev_priv, > > > power_well) > > > ; > > > if ((power_well->count || power_well->desc->always_on) > > > != > > > - enabled) > > > + enabled) { > > > + /* If DMC firmware is not loaded it could cause > > > a > > > + * mismatch state as we can't disable DC off, > > > so let's > > > + * do not print any errors in this scenario. > > > + */ > > > + > > > + if (!strcmp("DC off", power_well->desc->name) > > > && > > > + !dev_priv->csr.dmc_payload) > > > + goto skip_state_mismatch_error; > > > + > > > DRM_ERROR("power well %s state mismatch > > > (refcount %d/enabled %d)", > > > power_well->desc->name, > > > power_well->count, enabled); > > > + } > > > > > > +skip_state_mismatch_error: > > > domains_count = 0; > > > for_each_power_domain(domain, power_well->desc- > > > >domains) > > > domains_count += power_domains- > > > >domain_use_count[domain]; > > > -- > > > 2.19.1 > > > > > > _______________________________________________ > > > Intel-gfx mailing list > > > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx