linux_dsm_epyc7002/drivers/gpu/drm/i915/display
Hans de Goede 6fb0a14fac drm/i915: opregion: set opregion chpd value to indicate the driver handles hotplug
According to both the old acpi_igd_opregion_spec_0.pdf and the newer
skl_opregion_rev0p5.pdf opregion specification documents, if a driver
handles hotplug events itself, it should set the opregion CHPD field to
1 to indicate this and the firmware should respond to this by no longer
sending ACPI 0x00 notification events on e.g. lid-state changes.

Specifically skl_opregion_rev0p5.pdf states thid in the documentation of
the CHPD word: "Re-enumeration trigger logic in System BIOS MUST be
disabled for all the Operating Systems supporting Hot-Plug
(e.g., Windows* Longhorn and above)." Note the MUST in there.

We ignore these notifications, so this should not be a problem but many
recent DSTDs seem to all have the same copy-pasted bug in the GNOT() AML
function which is used to send these notifications. Windows likely does not
hit this bug as it presumably correcty sets CHPD to 1.

Here is an example of the broken GNOT() method:

            Method (GNOT, 2, NotSerialized)
            {
                ...
                CEVT = Arg0
                CSTS = 0x03
                If (((CHPD == Zero) && (Arg1 == Zero)))
                {
                    If (((OSYS > 0x07D0) || (OSYS < 0x07D6)))
                    {
                        Notify (PCI0, Arg1)
                    }
                    Else
                    {
                        Notify (GFX0, Arg1)
                    }
                }
                ...

Notice that the condition for the If is always true I believe that the
|| like needs to be an &&, but there is nothing we can do about this and
in my own DSDT archive 55 of the 93 DSDTs have this issue.

When the if is true the notification gets send to the PCI root instead
of only to the GFX0 device. This causes Linux to re-enumerate PCI devices
whenever the LID opens / closes, leading to unexpected messages in dmesg:

Suspend through lid close:
[  313.598199] intel_atomisp2_pm 0000:00:03.0: Refused to change power state, currently in D3
[  313.664453] intel_atomisp2_pm 0000:00:03.0: Refused to change power state, currently in D3
[  313.737982] pci_bus 0000:01: Allocating resources
[  313.738036] pcieport 0000:00:1c.0: bridge window [io  0x1000-0x0fff] to [bus 01] add_size 1000
[  313.738051] pcieport 0000:00:1c.0: bridge window [mem 0x00100000-0x000fffff 64bit pref] to [bus 01] add_size 200000 add_align 100000
[  313.738111] pcieport 0000:00:1c.0: BAR 15: assigned [mem 0x91000000-0x911fffff 64bit pref]
[  313.738128] pcieport 0000:00:1c.0: BAR 13: assigned [io  0x1000-0x1fff]

Resume:
[  813.623894] pci 0000:00:03.0: [8086:22b8] type 00 class 0x048000
[  813.623955] pci 0000:00:03.0: reg 0x10: [mem 0x00000000-0x003fffff]
[  813.630477] pci 0000:00:03.0: BAR 0: assigned [mem 0x91c00000-0x91ffffff]
[  854.579101] intel_atomisp2_pm 0000:00:03.0: Refused to change power state, currently in D3

And more importantly this re-enumeration races with suspend/resume causing
enumeration to not be complete  when assert_isp_power_gated() from
drivers/gpu/drm/i915/display/intel_display_power.c runs. This causes
the !pci_dev_present(isp_ids) check in assert_isp_power_gated() to fail
making the condition for the WARN true, leading to:

[  813.327886] ------------[ cut here ]------------
[  813.327898] ISP not power gated
[  813.328028] WARNING: CPU: 2 PID: 2317 at drivers/gpu/drm/i915/display/intel_display_power.c:4870 intel_display_print_error_state+0x2b98/0x3a80 [i915]
...
[  813.328599] ---[ end trace f01e81b599596774 ]---

This commit fixes the unwanted ACPI notification on the PCI root device
by setting CHPD to 1, so that the broken if condition in the AML never
gets checked as notifications of type 0x00 are disabled altogether.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191212204828.191288-1-hdegoede@redhat.com
2019-12-16 21:38:05 +01:00
..
dvo_ch7xxx.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
dvo_ch7017.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
dvo_ivch.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
dvo_ns2501.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
dvo_sil164.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
dvo_tfp410.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
icl_dsi.c drm/i915/dsi: add support for DSC 2019-12-11 08:20:06 +02:00
intel_acpi.c
intel_acpi.h
intel_atomic_plane.c drm/i915: Remove special case slave handling during hw programming, v3. 2019-11-01 14:51:21 +01:00
intel_atomic_plane.h drm/i915: Remove special case slave handling during hw programming, v3. 2019-11-01 14:51:21 +01:00
intel_atomic.c drm/i915: Preload LUTs if the hw isn't currently using them 2019-11-11 11:44:43 +02:00
intel_atomic.h drm/i915: Complete crtc hw/uapi split, v6. 2019-11-01 14:51:21 +01:00
intel_audio.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> uapi. 2019-11-01 14:51:21 +01:00
intel_audio.h
intel_bios.c drm/i915/bios: remove extra debug messages 2019-12-13 14:36:06 -08:00
intel_bios.h drm/i915/bios: add support for querying DSC details for encoder 2019-12-11 07:39:47 +02:00
intel_bw.c drm/i915: Support more QGV points 2019-11-26 18:27:37 +02:00
intel_bw.h drm/i915/bw: make intel_atomic_get_bw_state() static 2019-08-07 12:01:46 +03:00
intel_cdclk.c drm/i915/ehl: Update voltage level checks 2019-11-18 21:07:04 -08:00
intel_cdclk.h drm/i915: Extract intel_modeset_calc_cdclk() 2019-09-16 14:51:09 +03:00
intel_color.c drm/i915: Preload LUTs if the hw isn't currently using them 2019-11-11 11:44:43 +02:00
intel_color.h drm/i915/display: Add func to compare hw/sw gamma lut 2019-09-04 11:55:30 +03:00
intel_combo_phy.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
intel_combo_phy.h
intel_connector.c drm/i915/dp: Attach colorspace property 2019-10-15 16:24:59 +03:00
intel_connector.h
intel_crt.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> uapi. 2019-11-01 14:51:21 +01:00
intel_crt.h
intel_ddi.c drm/i915/dsc: add basic hardware state readout support 2019-12-11 08:16:16 +02:00
intel_ddi.h drm/i915/dp: Add support of BT.2020 Colorimetry to DP MSA 2019-10-15 16:24:59 +03:00
intel_display_power.c drm/i915/icl: Cleanup combo PHY aux power well handlers 2019-12-13 12:06:34 -08:00
intel_display_power.h drm/i915/tgl: Switch between dc3co and dc5 based on display idleness 2019-10-08 11:05:28 +03:00
intel_display_types.h drm/i915: Preload LUTs if the hw isn't currently using them 2019-11-11 11:44:43 +02:00
intel_display.c drm/i915/dsi: fix pipe D readout for DSI transcoders 2019-12-13 15:05:37 -08:00
intel_display.h drm/i915: Pass cpu transcoder to assert_pipe() 2019-12-11 17:24:06 +02:00
intel_dp_aux_backlight.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
intel_dp_aux_backlight.h
intel_dp_link_training.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
intel_dp_link_training.h
intel_dp_mst.c drm/i915/display/tgl: Fix the order of the step to turn transcoder clock off 2019-12-06 15:19:37 -08:00
intel_dp_mst.h drm/i915/mst: un-inline intel_dp_mst_encoder_active_links() 2019-08-07 12:01:51 +03:00
intel_dp.c drm/i915/dsc: make DSC source support helper generic 2019-12-11 08:16:05 +02:00
intel_dp.h drm/i915/dp: Program an Infoframe SDP Header and DB for HDR Static Metadata 2019-10-15 16:24:59 +03:00
intel_dpio_phy.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> uapi. 2019-11-01 14:51:21 +01:00
intel_dpio_phy.h
intel_dpll_mgr.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> uapi. 2019-11-01 14:51:21 +01:00
intel_dpll_mgr.h drm/i915: Describe structure member in documentation 2019-10-25 12:06:26 +01:00
intel_dsb.c drm/i915/dsb: fix cmd_buf being wrongly set 2019-12-02 10:06:25 -08:00
intel_dsb.h drm/i915/dsb: remove atomic operations 2019-11-18 13:27:09 -08:00
intel_dsi_dcs_backlight.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
intel_dsi_dcs_backlight.h
intel_dsi_vbt.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
intel_dsi.c drm/i915: Don't advertise modes that exceed the max plane size 2019-09-19 20:28:57 +03:00
intel_dsi.h drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
intel_dvo_dev.h
intel_dvo.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> uapi. 2019-11-01 14:51:21 +01:00
intel_dvo.h
intel_fbc.c drm/i915/fbc: Reallocate cfb if we need more of it 2019-12-09 16:10:59 +02:00
intel_fbc.h drm/i915/fbc: Wait for vblank after FBC disable on glk+ 2019-12-09 16:10:58 +02:00
intel_fbdev.c drm/i915/fbdev: Restore physical addresses for fb_mmap() 2019-11-14 12:16:13 +00:00
intel_fbdev.h
intel_fifo_underrun.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
intel_fifo_underrun.h
intel_frontbuffer.c drm/i915: Coordinate i915_active with its own mutex 2019-10-04 15:39:12 +01:00
intel_frontbuffer.h drm/i915: Extract intel_frontbuffer active tracking 2019-08-16 09:51:11 +01:00
intel_gmbus.c drm/i915: introduce INTEL_DISPLAY_ENABLED() 2019-09-16 10:20:05 +03:00
intel_gmbus.h drm/i915: Move gmbus definitions out of i915_reg.h 2019-08-16 21:52:49 +01:00
intel_hdcp.c drm/i915/hdcp: Nuke intel_hdcp_transcoder_config() 2019-12-09 17:49:39 +02:00
intel_hdcp.h drm/i915/hdcp: Nuke intel_hdcp_transcoder_config() 2019-12-09 17:49:39 +02:00
intel_hdmi.c drm/i915/hdcp: Nuke intel_hdcp_transcoder_config() 2019-12-09 17:49:39 +02:00
intel_hdmi.h drm: Move port definition back to i915 header 2019-08-30 14:08:26 +05:30
intel_hotplug.c drm/i915: Prefer encoder->name over port_name() 2019-09-02 18:43:28 +03:00
intel_hotplug.h drm: Move port definition back to i915 header 2019-08-30 14:08:26 +05:30
intel_lpe_audio.c drm/i915: add INTEL_NUM_PIPES() and use it 2019-09-11 22:33:20 +03:00
intel_lpe_audio.h
intel_lspcon.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> hw. 2019-11-01 14:51:20 +01:00
intel_lspcon.h
intel_lvds.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> uapi. 2019-11-01 14:51:21 +01:00
intel_lvds.h
intel_opregion.c drm/i915: opregion: set opregion chpd value to indicate the driver handles hotplug 2019-12-16 21:38:05 +01:00
intel_opregion.h
intel_overlay.c drm/i915: Avoid calling i915_gem_object_unbind holding object lock 2019-12-07 19:27:36 +00:00
intel_overlay.h
intel_panel.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> uapi. 2019-11-01 14:51:21 +01:00
intel_panel.h
intel_pipe_crc.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> uapi. 2019-11-01 14:51:21 +01:00
intel_pipe_crc.h
intel_psr.c drm/i915/psr: Check if sink PSR capability changed 2019-12-02 12:06:15 -08:00
intel_psr.h drm/i915: Do not unmask PSR interruption in IRQ postinstall 2019-08-22 13:09:24 -07:00
intel_quirks.c drm/i915: rename intel_drv.h to display/intel_display_types.h 2019-08-07 12:43:50 +03:00
intel_quirks.h
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Drop redundant aspec ratio prop value initialization 2019-11-14 19:49:19 +02:00
intel_sdvo.h drm: Move port definition back to i915 header 2019-08-30 14:08:26 +05:30
intel_sprite.c drm/i915: fix accidental static variable use 2019-11-18 13:06:22 +02:00
intel_sprite.h drm/i915: Allow planes to declare their minimum acceptable cdclk 2019-10-24 21:22:25 +03:00
intel_tc.c drm/i915/tc: Update DP_MODE programming 2019-09-27 10:40:17 -07:00
intel_tc.h drm/i915/tc: Update DP_MODE programming 2019-09-27 10:40:17 -07:00
intel_tv.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> uapi. 2019-11-01 14:51:21 +01:00
intel_tv.h
intel_vbt_defs.h drm/i915/bios: parse compression parameters block 2019-12-11 07:39:41 +02:00
intel_vdsc.c drm/i915/dsc: add basic hardware state readout support 2019-12-11 08:16:16 +02:00
intel_vdsc.h drm/i915/dsc: add basic hardware state readout support 2019-12-11 08:16:16 +02:00
intel_vga.c drm/i915/vga: rename intel_vga_msr_write() to intel_vga_reset_io_mem() 2019-10-06 11:24:53 +03:00
intel_vga.h drm/i915/vga: rename intel_vga_msr_write() to intel_vga_reset_io_mem() 2019-10-06 11:24:53 +03:00
Makefile
vlv_dsi_pll.c drm/i915: Wrappers for display register waits 2019-08-16 22:19:05 +01:00
vlv_dsi.c drm/i915: Perform automated conversions for crtc uapi/hw split, base -> uapi. 2019-11-01 14:51:21 +01:00