[Intel-gfx] [PATCH 1/2] drm/i915: Reduce INTEL_DISPLAY_ENABLED to just removing the outputs
Jani Nikula
jani.nikula at linux.intel.com
Thu Sep 10 09:54:53 UTC 2020
On Thu, 10 Sep 2020, Jani Nikula <jani.nikula at linux.intel.com> wrote:
> On Thu, 10 Sep 2020, Ville Syrjala <ville.syrjala at linux.intel.com> wrote:
>> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>>
>> Having a mode where the display hardware is present but we try
>> to pretend it isn't just leads to massive headaches when trying
>> to reason what the fallout might be from skipping some random
>> bits of programming.
>>
>> Let's just neuter INTEL_DISPLAY_ENABLED so that we treat the
>> hardware as fully present, except we just don't register any
>> outputs. That's still rather sketchy if the outputs are already
>> enabled when the driver is loaded. I think the simplest solution
>> would be to probe everything as normal and just return
>> disconnected" from all .detect() hooks. That would avoid anything
>> automagically enabling those outputs, but the driver could then
>> shut things down using the normal codepaths.
>>
>> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> I agree with the reasoning and the patches. It will probably conflict
> with someone else's unspecified notion of what "display disable" should
> actually mean. But at least this approach is internally consistent.
>
> Would be great if we could hide the outputs from userspace afterwards,
> but that's probably not trivial.
>
> Both patches,
>
> Reviewed-by: Jani Nikula <jani.nikula at intel.com>
Patch 1 in [1] is follow-up to this, patches 2-3 should probably have
been sent separately as related but independent.
BR,
Jani.
[1] https://patchwork.freedesktop.org/series/81541/
>
>
>> ---
>> drivers/gpu/drm/i915/display/intel_bios.c | 2 +-
>> drivers/gpu/drm/i915/display/intel_display.c | 8 ++++----
>> drivers/gpu/drm/i915/display/intel_fbdev.c | 3 +--
>> drivers/gpu/drm/i915/display/intel_gmbus.c | 2 +-
>> drivers/gpu/drm/i915/i915_drv.c | 4 ++--
>> 5 files changed, 9 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>> index a0a41ec5c341..c110cd9e8a73 100644
>> --- a/drivers/gpu/drm/i915/display/intel_bios.c
>> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
>> @@ -2133,7 +2133,7 @@ void intel_bios_init(struct drm_i915_private *dev_priv)
>>
>> INIT_LIST_HEAD(&dev_priv->vbt.display_devices);
>>
>> - if (!HAS_DISPLAY(dev_priv) || !INTEL_DISPLAY_ENABLED(dev_priv)) {
>> + if (!HAS_DISPLAY(dev_priv)) {
>> drm_dbg_kms(&dev_priv->drm,
>> "Skipping VBT init due to disabled display.\n");
>> return;
>> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>> index ec148a8da2c2..bacaf713eed4 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display.c
>> +++ b/drivers/gpu/drm/i915/display/intel_display.c
>> @@ -17882,7 +17882,7 @@ int intel_modeset_init_noirq(struct drm_i915_private *i915)
>> if (i915_inject_probe_failure(i915))
>> return -ENODEV;
>>
>> - if (HAS_DISPLAY(i915) && INTEL_DISPLAY_ENABLED(i915)) {
>> + if (HAS_DISPLAY(i915)) {
>> ret = drm_vblank_init(&i915->drm,
>> INTEL_NUM_PIPES(i915));
>> if (ret)
>> @@ -17956,7 +17956,7 @@ int intel_modeset_init_nogem(struct drm_i915_private *i915)
>> INTEL_NUM_PIPES(i915),
>> INTEL_NUM_PIPES(i915) > 1 ? "s" : "");
>>
>> - if (HAS_DISPLAY(i915) && INTEL_DISPLAY_ENABLED(i915)) {
>> + if (HAS_DISPLAY(i915)) {
>> for_each_pipe(i915, pipe) {
>> ret = intel_crtc_init(i915, pipe);
>> if (ret) {
>> @@ -18045,7 +18045,7 @@ int intel_modeset_init(struct drm_i915_private *i915)
>>
>> intel_overlay_setup(i915);
>>
>> - if (!HAS_DISPLAY(i915) || !INTEL_DISPLAY_ENABLED(i915))
>> + if (!HAS_DISPLAY(i915))
>> return 0;
>>
>> ret = intel_fbdev_init(&i915->drm);
>> @@ -19018,7 +19018,7 @@ intel_display_capture_error_state(struct drm_i915_private *dev_priv)
>>
>> BUILD_BUG_ON(ARRAY_SIZE(transcoders) != ARRAY_SIZE(error->transcoder));
>>
>> - if (!HAS_DISPLAY(dev_priv) || !INTEL_DISPLAY_ENABLED(dev_priv))
>> + if (!HAS_DISPLAY(dev_priv))
>> return NULL;
>>
>> error = kzalloc(sizeof(*error), GFP_ATOMIC);
>> diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
>> index bd39eb6a21b8..842c04e63214 100644
>> --- a/drivers/gpu/drm/i915/display/intel_fbdev.c
>> +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
>> @@ -451,8 +451,7 @@ int intel_fbdev_init(struct drm_device *dev)
>> struct intel_fbdev *ifbdev;
>> int ret;
>>
>> - if (drm_WARN_ON(dev, !HAS_DISPLAY(dev_priv) ||
>> - !INTEL_DISPLAY_ENABLED(dev_priv)))
>> + if (drm_WARN_ON(dev, !HAS_DISPLAY(dev_priv)))
>> return -ENODEV;
>>
>> ifbdev = kzalloc(sizeof(struct intel_fbdev), GFP_KERNEL);
>> diff --git a/drivers/gpu/drm/i915/display/intel_gmbus.c b/drivers/gpu/drm/i915/display/intel_gmbus.c
>> index a8d119b6b45c..e6b8d6dfb598 100644
>> --- a/drivers/gpu/drm/i915/display/intel_gmbus.c
>> +++ b/drivers/gpu/drm/i915/display/intel_gmbus.c
>> @@ -834,7 +834,7 @@ int intel_gmbus_setup(struct drm_i915_private *dev_priv)
>> unsigned int pin;
>> int ret;
>>
>> - if (!HAS_DISPLAY(dev_priv) || !INTEL_DISPLAY_ENABLED(dev_priv))
>> + if (!HAS_DISPLAY(dev_priv))
>> return 0;
>>
>> if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
>> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
>> index d66fe09d337e..9b35af2cf225 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.c
>> +++ b/drivers/gpu/drm/i915/i915_drv.c
>> @@ -693,7 +693,7 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
>> drm_err(&dev_priv->drm,
>> "Failed to register driver for userspace access!\n");
>>
>> - if (HAS_DISPLAY(dev_priv) && INTEL_DISPLAY_ENABLED(dev_priv)) {
>> + if (HAS_DISPLAY(dev_priv)) {
>> /* Must be done after probing outputs */
>> intel_opregion_register(dev_priv);
>> acpi_video_register();
>> @@ -716,7 +716,7 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
>> * We need to coordinate the hotplugs with the asynchronous fbdev
>> * configuration, for which we use the fbdev->async_cookie.
>> */
>> - if (HAS_DISPLAY(dev_priv) && INTEL_DISPLAY_ENABLED(dev_priv))
>> + if (HAS_DISPLAY(dev_priv))
>> drm_kms_helper_poll_init(dev);
>>
>> intel_power_domains_enable(dev_priv);
--
Jani Nikula, Intel Open Source Graphics Center
More information about the Intel-gfx
mailing list