drivers/gpu/drm/amd/amdgpu/amdgpu_device.c                   |   45 ++++-------
 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c                |   32 ++++++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c                      |    5 -
 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c                     |   20 +---
 drivers/gpu/drm/amd/amdgpu/cik.c                             |    4 
 drivers/gpu/drm/amd/amdgpu/vi.c                              |    4 
 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c |   11 --
 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c    |   11 --
 drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.c |   25 ------
 drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.h |    2 
 drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c |   25 ------
 drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.h |    2 
 drivers/gpu/drm/amd/display/dc/irq/irq_service.c             |    2 
 drivers/gpu/drm/amd/display/dc/irq/irq_service.h             |    4 
 drivers/gpu/drm/i915/display/intel_ddi.c                     |   22 +++++
 drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c           |   10 +-
 drivers/gpu/drm/i915/i915_reg.h                              |    8 +
 drivers/gpu/drm/radeon/radeon_kms.c                          |   22 ++---
 18 files changed, 108 insertions(+), 146 deletions(-)

New commits:
commit 1a8a0e9f160f0abffe65a29a7484d153e53bf467
Merge: 172d6fe5e9d7 ccf34586758c
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Fri Jan 21 16:06:32 2022 -0600

    Merge tag 'drm-next-2022-01-21' of git://anongit.freedesktop.org/drm/drm 
into drm-next-5.17
    
    drm fixes for 5.17-rc1
    
    amdgpu:
    - SR-IOV fix
    - VCN harvest fix
    - Suspend/resume fixes
    - Tahiti fix
    - Enable GPU recovery on yellow carp
    
    radeon:
    - Fix error handling regression in radeon_driver_open_kms
    
    i915:
    - Update EHL display voltage swing table
    - Fix programming the ADL-P display TC voltage swing

commit ccf34586758cf00c0934e48f6ef6d688f01d7b19
Merge: 410482b51afe 4722f463896c
Author: Dave Airlie <airl...@redhat.com>
Date:   Fri Jan 21 08:37:56 2022 +1000

    Merge tag 'amd-drm-fixes-5.17-2022-01-19' of 
https://gitlab.freedesktop.org/agd5f/linux into drm-next
    
    amd-drm-fixes-5.17-2022-01-19:
    
    amdgpu:
    - SR-IOV fix
    - VCN harvest fix
    - Suspend/resume fixes
    - Tahiti fix
    - Enable GPU recovery on yellow carp
    
    radeon:
    - Fix error handling regression in radeon_driver_open_kms
    
    Signed-off-by: Dave Airlie <airl...@redhat.com>
    From: Alex Deucher <alexander.deuc...@amd.com>
    Link: 
https://patchwork.freedesktop.org/patch/msgid/20220120013547.5649-1-alexander.deuc...@amd.com

commit 410482b51afecddb8fc29324d1b11945dfa0b682
Merge: 4efdddbce7c1 e26602be4869
Author: Dave Airlie <airl...@redhat.com>
Date:   Fri Jan 21 08:31:29 2022 +1000

    Merge tag 'drm-intel-next-fixes-2022-01-20' of 
git://anongit.freedesktop.org/drm/drm-intel into drm-next
    
    - Latest updates for the EHL display voltage swing table (José Roberto de 
Souza)
    - Additional step is required when programming the ADL-P display TC voltage 
swing (José Roberto de Souza)
    
    Signed-off-by: Dave Airlie <airl...@redhat.com>
    From: Tvrtko Ursulin <tvrtko.ursu...@linux.intel.com>
    Link: 
https://patchwork.freedesktop.org/patch/msgid/Yek1zdsnRPiBVvFF@tursulin-mobl2

commit 4722f463896cc0ef1a6f1c3cb2e171e949831249
Author: Christian König <christian.koe...@amd.com>
Date:   Mon Jan 17 10:31:26 2022 +0100

    drm/radeon: fix error handling in radeon_driver_open_kms
    
    The return value was never initialized so the cleanup code executed when
    it isn't even necessary.
    
    Just add proper error handling.
    
    Fixes: ab50cb9df889 ("drm/radeon/radeon_kms: Fix a NULL pointer dereference 
in radeon_driver_open_kms()")
    Signed-off-by: Christian König <christian.koe...@amd.com>
    Tested-by: Jan Stancek <jstan...@redhat.com>
    Tested-by: Borislav Petkov <b...@suse.de>
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>
    Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/drivers/gpu/drm/radeon/radeon_kms.c 
b/drivers/gpu/drm/radeon/radeon_kms.c
index e2488559cc9f..11ad210919c8 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -666,18 +666,18 @@ int radeon_driver_open_kms(struct drm_device *dev, struct 
drm_file *file_priv)
                fpriv = kzalloc(sizeof(*fpriv), GFP_KERNEL);
                if (unlikely(!fpriv)) {
                        r = -ENOMEM;
-                       goto out_suspend;
+                       goto err_suspend;
                }
 
                if (rdev->accel_working) {
                        vm = &fpriv->vm;
                        r = radeon_vm_init(rdev, vm);
                        if (r)
-                               goto out_fpriv;
+                               goto err_fpriv;
 
                        r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
                        if (r)
-                               goto out_vm_fini;
+                               goto err_vm_fini;
 
                        /* map the ib pool buffer read only into
                         * virtual address space */
@@ -685,7 +685,7 @@ int radeon_driver_open_kms(struct drm_device *dev, struct 
drm_file *file_priv)
                                                        rdev->ring_tmp_bo.bo);
                        if (!vm->ib_bo_va) {
                                r = -ENOMEM;
-                               goto out_vm_fini;
+                               goto err_vm_fini;
                        }
 
                        r = radeon_vm_bo_set_addr(rdev, vm->ib_bo_va,
@@ -693,19 +693,21 @@ int radeon_driver_open_kms(struct drm_device *dev, struct 
drm_file *file_priv)
                                                  RADEON_VM_PAGE_READABLE |
                                                  RADEON_VM_PAGE_SNOOPED);
                        if (r)
-                               goto out_vm_fini;
+                               goto err_vm_fini;
                }
                file_priv->driver_priv = fpriv;
        }
 
-       if (!r)
-               goto out_suspend;
+       pm_runtime_mark_last_busy(dev->dev);
+       pm_runtime_put_autosuspend(dev->dev);
+       return 0;
 
-out_vm_fini:
+err_vm_fini:
        radeon_vm_fini(rdev, vm);
-out_fpriv:
+err_fpriv:
        kfree(fpriv);
-out_suspend:
+
+err_suspend:
        pm_runtime_mark_last_busy(dev->dev);
        pm_runtime_put_autosuspend(dev->dev);
        return r;
commit 9a458402fb69bda886aa6cbe067311b6e3d9c52a
Author: Jingwen Chen <jingwen.ch...@amd.com>
Date:   Thu Jan 13 19:06:59 2022 +0800

    drm/amd/amdgpu: fixing read wrong pf2vf data in SRIOV
    
    [Why]
    This fixes 892deb48269c ("drm/amdgpu: Separate vf2pf work item init from 
virt data exchange").
    we should read pf2vf data based at mman.fw_vram_usage_va after gmc
    sw_init. commit 892deb48269c breaks this logic.
    
    [How]
    calling amdgpu_virt_exchange_data in amdgpu_virt_init_data_exchange to
    set the right base in the right sequence.
    
    v2:
    call amdgpu_virt_init_data_exchange after gmc sw_init to make data
    exchange workqueue run
    
    v3:
    clean up the code logic
    
    v4:
    add some comment and make the code more readable
    
    Fixes: 892deb48269c ("drm/amdgpu: Separate vf2pf work item init from virt 
data exchange")
    Signed-off-by: Jingwen Chen <jingwen.ch...@amd.com>
    Reviewed-by: Horace Chen <horace.c...@amd.com>
    Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index c4f3c886be55..ed077de426d9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2354,7 +2354,7 @@ static int amdgpu_device_ip_init(struct amdgpu_device 
*adev)
        }
 
        if (amdgpu_sriov_vf(adev))
-               amdgpu_virt_exchange_data(adev);
+               amdgpu_virt_init_data_exchange(adev);
 
        r = amdgpu_ib_pool_init(adev);
        if (r) {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index 894444ab0032..07bc0f504713 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
@@ -625,20 +625,20 @@ void amdgpu_virt_init_data_exchange(struct amdgpu_device 
*adev)
        adev->virt.fw_reserve.p_vf2pf = NULL;
        adev->virt.vf2pf_update_interval_ms = 0;
 
-       if (adev->bios != NULL) {
-               adev->virt.vf2pf_update_interval_ms = 2000;
+       if (adev->mman.fw_vram_usage_va != NULL) {
+               /* go through this logic in ip_init and reset to init 
workqueue*/
+               amdgpu_virt_exchange_data(adev);
 
+               INIT_DELAYED_WORK(&adev->virt.vf2pf_work, 
amdgpu_virt_update_vf2pf_work_item);
+               schedule_delayed_work(&(adev->virt.vf2pf_work), 
msecs_to_jiffies(adev->virt.vf2pf_update_interval_ms));
+       } else if (adev->bios != NULL) {
+               /* got through this logic in early init stage to get necessary 
flags, e.g. rlcg_acc related*/
                adev->virt.fw_reserve.p_pf2vf =
                        (struct amd_sriov_msg_pf2vf_info_header *)
                        (adev->bios + (AMD_SRIOV_MSG_PF2VF_OFFSET_KB << 10));
 
                amdgpu_virt_read_pf2vf_data(adev);
        }
-
-       if (adev->virt.vf2pf_update_interval_ms != 0) {
-               INIT_DELAYED_WORK(&adev->virt.vf2pf_work, 
amdgpu_virt_update_vf2pf_work_item);
-               schedule_delayed_work(&(adev->virt.vf2pf_work), 
msecs_to_jiffies(adev->virt.vf2pf_update_interval_ms));
-       }
 }
 
 
@@ -674,12 +674,6 @@ void amdgpu_virt_exchange_data(struct amdgpu_device *adev)
                                if (adev->virt.ras_init_done)
                                        amdgpu_virt_add_bad_page(adev, 
bp_block_offset, bp_block_size);
                        }
-       } else if (adev->bios != NULL) {
-               adev->virt.fw_reserve.p_pf2vf =
-                       (struct amd_sriov_msg_pf2vf_info_header *)
-                       (adev->bios + (AMD_SRIOV_MSG_PF2VF_OFFSET_KB << 10));
-
-               amdgpu_virt_read_pf2vf_data(adev);
        }
 }
 
commit 520d9cd267618181901272a79db6154c0b83309c
Author: Guchun Chen <guchun.c...@amd.com>
Date:   Fri Jan 14 13:49:13 2022 +0800

    drm/amdgpu: apply vcn harvest quirk
    
    This is a following patch to apply the workaround only on
    those boards with a bad harvest table in ip discovery.
    
    Signed-off-by: Guchun Chen <guchun.c...@amd.com>
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>
    Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
index be45650250fa..81bfee978b74 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
@@ -243,6 +243,30 @@ static inline bool 
amdgpu_discovery_verify_binary_signature(uint8_t *binary)
        return (le32_to_cpu(bhdr->binary_signature) == BINARY_SIGNATURE);
 }
 
+static void amdgpu_discovery_harvest_config_quirk(struct amdgpu_device *adev)
+{
+       /*
+        * So far, apply this quirk only on those Navy Flounder boards which
+        * have a bad harvest table of VCN config.
+        */
+       if ((adev->ip_versions[UVD_HWIP][1] == IP_VERSION(3, 0, 1)) &&
+               (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 3, 2))) {
+               switch (adev->pdev->revision) {
+               case 0xC1:
+               case 0xC2:
+               case 0xC3:
+               case 0xC5:
+               case 0xC7:
+               case 0xCF:
+               case 0xDF:
+                       adev->vcn.harvest_config |= AMDGPU_VCN_HARVEST_VCN1;
+                       break;
+               default:
+                       break;
+               }
+       }
+}
+
 static int amdgpu_discovery_init(struct amdgpu_device *adev)
 {
        struct table_info *info;
@@ -548,11 +572,9 @@ void amdgpu_discovery_harvest_ip(struct amdgpu_device 
*adev)
                        break;
                }
        }
-       /* some IP discovery tables on Navy Flounder don't have this set 
correctly */
-       if ((adev->ip_versions[UVD_HWIP][1] == IP_VERSION(3, 0, 1)) &&
-           (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 3, 2)) &&
-           (adev->pdev->revision != 0xFF))
-               adev->vcn.harvest_config |= AMDGPU_VCN_HARVEST_VCN1;
+
+       amdgpu_discovery_harvest_config_quirk(adev);
+
        if (vcn_harvest_count == adev->vcn.num_vcn_inst) {
                adev->harvest_ip_mask |= AMD_HARVEST_IP_VCN_MASK;
                adev->harvest_ip_mask |= AMD_HARVEST_IP_JPEG_MASK;
commit e26602be4869c74dd8a0f66f718b8a0ce120edb4
Author: José Roberto de Souza <jose.so...@intel.com>
Date:   Thu Jan 13 09:48:26 2022 -0800

    drm/i915/display/adlp: Implement new step in the TC voltage swing prog 
sequence
    
    TC voltage swing programming sequence was updated with a new step.
    
    BSpec: 54956
    Cc: sta...@vger.kernel.org
    Cc: Jani Nikula <jani.nik...@linux.intel.com>
    Cc: Clint Taylor <clinton.a.tay...@intel.com>
    Cc: Imre Deak <imre.d...@intel.com>
    Signed-off-by: José Roberto de Souza <jose.so...@intel.com>
    Reviewed-by: Clint Taylor <clinton.a.tay...@intel.com>
    Link: 
https://patchwork.freedesktop.org/patch/msgid/20220113174826.50272-1-jose.so...@intel.com
    (cherry picked from commit 5ff59dddacd4738edcbd01847d9df7682348cf86)
    Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com>

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c 
b/drivers/gpu/drm/i915/display/intel_ddi.c
index 9c9d574f0b8c..cab505277595 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -1298,6 +1298,28 @@ static void tgl_dkl_phy_set_signal_levels(struct 
intel_encoder *encoder,
 
                intel_de_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port),
                             DKL_TX_DP20BITMODE, 0);
+
+               if (IS_ALDERLAKE_P(dev_priv)) {
+                       u32 val;
+
+                       if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) 
{
+                               if (ln == 0) {
+                                       val = 
DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1(0);
+                                       val |= 
DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2(2);
+                               } else {
+                                       val = 
DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1(3);
+                                       val |= 
DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2(3);
+                               }
+                       } else {
+                               val = DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1(0);
+                               val |= DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2(0);
+                       }
+
+                       intel_de_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port),
+                                    DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1_MASK |
+                                    DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2_MASK,
+                                    val);
+               }
        }
 }
 
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 4c28dadf8d69..971d601fe751 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -11166,8 +11166,12 @@ enum skl_power_gate {
                                                     _DKL_PHY2_BASE) + \
                                                     _DKL_TX_DPCNTL1)
 
-#define _DKL_TX_DPCNTL2                                0x2C8
-#define  DKL_TX_DP20BITMODE                            (1 << 2)
+#define _DKL_TX_DPCNTL2                                        0x2C8
+#define  DKL_TX_DP20BITMODE                            REG_BIT(2)
+#define  DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1_MASK     REG_GENMASK(4, 3)
+#define  DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1(val)     
REG_FIELD_PREP(DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1_MASK, (val))
+#define  DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2_MASK     REG_GENMASK(6, 5)
+#define  DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2(val)     
REG_FIELD_PREP(DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2_MASK, (val))
 #define DKL_TX_DPCNTL2(tc_port) _MMIO(_PORT(tc_port, \
                                                     _DKL_PHY1_BASE, \
                                                     _DKL_PHY2_BASE) + \
commit ef3ac01564067a4337bb798b8eddc6ea7b78fd10
Author: José Roberto de Souza <jose.so...@intel.com>
Date:   Thu Jan 13 08:04:37 2022 -0800

    drm/i915/display/ehl: Update voltage swing table
    
    EHL table was recently updated with some minor fixes.
    
    BSpec: 21257
    Cc: sta...@vger.kernel.org
    Cc: Clint Taylor <clinton.a.tay...@intel.com>
    Signed-off-by: José Roberto de Souza <jose.so...@intel.com>
    Reviewed-by: Clint Taylor <clinton.a.tay...@intel.com>
    Link: 
https://patchwork.freedesktop.org/patch/msgid/20220113160437.49059-1-jose.so...@intel.com
    (cherry picked from commit 5ec7baef52c367cdbda964aa662f7135c25bab1f)
    Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com>

diff --git a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c 
b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
index 1e689d573512..e2dfb93a82bd 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
@@ -477,14 +477,14 @@ static const struct intel_ddi_buf_trans 
icl_combo_phy_trans_hdmi = {
 static const union intel_ddi_buf_trans_entry _ehl_combo_phy_trans_dp[] = {
                                                        /* NT mV Trans mV db    
*/
        { .icl = { 0xA, 0x33, 0x3F, 0x00, 0x00 } },     /* 350   350      0.0   
*/
-       { .icl = { 0xA, 0x47, 0x36, 0x00, 0x09 } },     /* 350   500      3.1   
*/
-       { .icl = { 0xC, 0x64, 0x34, 0x00, 0x0B } },     /* 350   700      6.0   
*/
-       { .icl = { 0x6, 0x7F, 0x30, 0x00, 0x0F } },     /* 350   900      8.2   
*/
+       { .icl = { 0xA, 0x47, 0x38, 0x00, 0x07 } },     /* 350   500      3.1   
*/
+       { .icl = { 0xC, 0x64, 0x33, 0x00, 0x0C } },     /* 350   700      6.0   
*/
+       { .icl = { 0x6, 0x7F, 0x2F, 0x00, 0x10 } },     /* 350   900      8.2   
*/
        { .icl = { 0xA, 0x46, 0x3F, 0x00, 0x00 } },     /* 500   500      0.0   
*/
-       { .icl = { 0xC, 0x64, 0x38, 0x00, 0x07 } },     /* 500   700      2.9   
*/
+       { .icl = { 0xC, 0x64, 0x37, 0x00, 0x08 } },     /* 500   700      2.9   
*/
        { .icl = { 0x6, 0x7F, 0x32, 0x00, 0x0D } },     /* 500   900      5.1   
*/
        { .icl = { 0xC, 0x61, 0x3F, 0x00, 0x00 } },     /* 650   700      0.6   
*/
-       { .icl = { 0x6, 0x7F, 0x38, 0x00, 0x07 } },     /* 600   900      3.5   
*/
+       { .icl = { 0x6, 0x7F, 0x37, 0x00, 0x08 } },     /* 600   900      3.5   
*/
        { .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },     /* 900   900      0.0   
*/
 };
 
commit c4849f88164b13dd141885e28210f599741b304b
Author: Mario Limonciello <mario.limoncie...@amd.com>
Date:   Fri Jan 7 10:44:17 2022 -0600

    drm/amd/display: Revert W/A for hard hangs on DCN20/DCN21
    
    The WA from commit 2a50edbf10c8 ("drm/amd/display: Apply w/a for hard hang
    on HPD") and commit 1bd3bc745e7f ("drm/amd/display: Extend w/a for hard
    hang on HPD to dcn20") causes a regression in s0ix where the system will
    fail to resume properly on many laptops.  Pull the workarounds out to
    avoid that s0ix regression in the common case.  This HPD hang happens with
    an external device in special circumstances and a new W/A will need to be
    developed for this in the future.
    
    Cc: sta...@vger.kernel.org
    Cc: Qingqing Zhuo <qingqing.z...@amd.com>
    Reported-by: Scott Bruce <smbr...@gmail.com>
    Reported-by: Chris Hixon <linux-kernel-b...@hixontech.com>
    Reported-by: spassw...@web.de
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=215436
    Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1821
    Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1852
    Fixes: 2a50edbf10c8 ("drm/amd/display: Apply w/a for hard hang on HPD")
    Fixes: 1bd3bc745e7f ("drm/amd/display: Extend w/a for hard hang on HPD to 
dcn20")
    Reviewed-by: Nicholas Kazlauskas <nicholas.kazlaus...@amd.com>
    Signed-off-by: Mario Limonciello <mario.limoncie...@amd.com>
    Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c 
b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c
index 9f35f2e8f971..cac80ba69072 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c
@@ -38,7 +38,6 @@
 #include "clk/clk_11_0_0_offset.h"
 #include "clk/clk_11_0_0_sh_mask.h"
 
-#include "irq/dcn20/irq_service_dcn20.h"
 
 #undef FN
 #define FN(reg_name, field_name) \
@@ -223,8 +222,6 @@ void dcn2_update_clocks(struct clk_mgr *clk_mgr_base,
        bool force_reset = false;
        bool p_state_change_support;
        int total_plane_count;
-       int irq_src;
-       uint32_t hpd_state;
 
        if (dc->work_arounds.skip_clock_update)
                return;
@@ -242,13 +239,7 @@ void dcn2_update_clocks(struct clk_mgr *clk_mgr_base,
        if (dc->res_pool->pp_smu)
                pp_smu = &dc->res_pool->pp_smu->nv_funcs;
 
-       for (irq_src = DC_IRQ_SOURCE_HPD1; irq_src <= DC_IRQ_SOURCE_HPD6; 
irq_src++) {
-               hpd_state = dc_get_hpd_state_dcn20(dc->res_pool->irqs, irq_src);
-               if (hpd_state)
-                       break;
-       }
-
-       if (display_count == 0 && !hpd_state)
+       if (display_count == 0)
                enter_display_off = true;
 
        if (enter_display_off == safe_to_lower) {
diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c 
b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c
index fbda42313bfe..f4dee0e48a67 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c
@@ -42,7 +42,6 @@
 #include "clk/clk_10_0_2_sh_mask.h"
 #include "renoir_ip_offset.h"
 
-#include "irq/dcn21/irq_service_dcn21.h"
 
 /* Constants */
 
@@ -129,11 +128,9 @@ static void rn_update_clocks(struct clk_mgr *clk_mgr_base,
        struct dc_clocks *new_clocks = &context->bw_ctx.bw.dcn.clk;
        struct dc *dc = clk_mgr_base->ctx->dc;
        int display_count;
-       int irq_src;
        bool update_dppclk = false;
        bool update_dispclk = false;
        bool dpp_clock_lowered = false;
-       uint32_t hpd_state;
 
        struct dmcu *dmcu = clk_mgr_base->ctx->dc->res_pool->dmcu;
 
@@ -150,14 +147,8 @@ static void rn_update_clocks(struct clk_mgr *clk_mgr_base,
 
                        display_count = rn_get_active_display_cnt_wa(dc, 
context);
 
-                       for (irq_src = DC_IRQ_SOURCE_HPD1; irq_src <= 
DC_IRQ_SOURCE_HPD5; irq_src++) {
-                               hpd_state = 
dc_get_hpd_state_dcn21(dc->res_pool->irqs, irq_src);
-                               if (hpd_state)
-                                       break;
-                       }
-
                        /* if we can go lower, go lower */
-                       if (display_count == 0 && !hpd_state) {
+                       if (display_count == 0) {
                                rn_vbios_smu_set_dcn_low_power_state(clk_mgr, 
DCN_PWR_STATE_LOW_POWER);
                                /* update power state */
                                clk_mgr_base->clks.pwr_state = 
DCN_PWR_STATE_LOW_POWER;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.c 
b/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.c
index 9ccafe007b23..c4b067d01895 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.c
@@ -132,31 +132,6 @@ enum dc_irq_source to_dal_irq_source_dcn20(
        }
 }
 
-uint32_t dc_get_hpd_state_dcn20(struct irq_service *irq_service, enum 
dc_irq_source source)
-{
-       const struct irq_source_info *info;
-       uint32_t addr;
-       uint32_t value;
-       uint32_t current_status;
-
-       info = find_irq_source_info(irq_service, source);
-       if (!info)
-               return 0;
-
-       addr = info->status_reg;
-       if (!addr)
-               return 0;
-
-       value = dm_read_reg(irq_service->ctx, addr);
-       current_status =
-               get_reg_field_value(
-                       value,
-                       HPD0_DC_HPD_INT_STATUS,
-                       DC_HPD_SENSE);
-
-       return current_status;
-}
-
 static bool hpd_ack(
        struct irq_service *irq_service,
        const struct irq_source_info *info)
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.h 
b/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.h
index 4d69ab24ca25..aee4b37999f1 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.h
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.h
@@ -31,6 +31,4 @@
 struct irq_service *dal_irq_service_dcn20_create(
        struct irq_service_init_data *init_data);
 
-uint32_t dc_get_hpd_state_dcn20(struct irq_service *irq_service, enum 
dc_irq_source source);
-
 #endif
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c 
b/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
index 235294534c43..0f15bcada4e9 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
@@ -134,31 +134,6 @@ static enum dc_irq_source to_dal_irq_source_dcn21(struct 
irq_service *irq_servic
        return DC_IRQ_SOURCE_INVALID;
 }
 
-uint32_t dc_get_hpd_state_dcn21(struct irq_service *irq_service, enum 
dc_irq_source source)
-{
-       const struct irq_source_info *info;
-       uint32_t addr;
-       uint32_t value;
-       uint32_t current_status;
-
-       info = find_irq_source_info(irq_service, source);
-       if (!info)
-               return 0;
-
-       addr = info->status_reg;
-       if (!addr)
-               return 0;
-
-       value = dm_read_reg(irq_service->ctx, addr);
-       current_status =
-               get_reg_field_value(
-                       value,
-                       HPD0_DC_HPD_INT_STATUS,
-                       DC_HPD_SENSE);
-
-       return current_status;
-}
-
 static bool hpd_ack(
        struct irq_service *irq_service,
        const struct irq_source_info *info)
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.h 
b/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.h
index 616470e32380..da2bd0e93d7a 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.h
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.h
@@ -31,6 +31,4 @@
 struct irq_service *dal_irq_service_dcn21_create(
        struct irq_service_init_data *init_data);
 
-uint32_t dc_get_hpd_state_dcn21(struct irq_service *irq_service, enum 
dc_irq_source source);
-
 #endif
diff --git a/drivers/gpu/drm/amd/display/dc/irq/irq_service.c 
b/drivers/gpu/drm/amd/display/dc/irq/irq_service.c
index 4db1133e4466..a2a4fbeb83f8 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/irq_service.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/irq_service.c
@@ -79,7 +79,7 @@ void dal_irq_service_destroy(struct irq_service **irq_service)
        *irq_service = NULL;
 }
 
-const struct irq_source_info *find_irq_source_info(
+static const struct irq_source_info *find_irq_source_info(
        struct irq_service *irq_service,
        enum dc_irq_source source)
 {
diff --git a/drivers/gpu/drm/amd/display/dc/irq/irq_service.h 
b/drivers/gpu/drm/amd/display/dc/irq/irq_service.h
index e60b82480093..dbfcb096eedd 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/irq_service.h
+++ b/drivers/gpu/drm/amd/display/dc/irq/irq_service.h
@@ -69,10 +69,6 @@ struct irq_service {
        const struct irq_service_funcs *funcs;
 };
 
-const struct irq_source_info *find_irq_source_info(
-       struct irq_service *irq_service,
-       enum dc_irq_source source);
-
 void dal_irq_service_construct(
        struct irq_service *irq_service,
        struct irq_service_init_data *init_data);
commit d82ce3cd30aa28db3e94ffc36ebf0af2ff12801d
Author: Alex Deucher <alexander.deuc...@amd.com>
Date:   Fri Jan 14 09:59:29 2022 -0500

    drm/amdgpu: drop flags check for CHIP_IP_DISCOVERY
    
    Support for IP based discovery is in place now so this
    check is no longer required.
    
    Reviewed-by: Hawking Zhang <hawking.zh...@amd.com>
    Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 625e00131e27..2a4bb032a7e2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -1907,11 +1907,6 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
                        return -ENODEV;
        }
 
-       if (flags == CHIP_IP_DISCOVERY) {
-               DRM_INFO("Unsupported asic.  Remove me when IP discovery init 
is in place.\n");
-               return -ENODEV;
-       }
-
        if (amdgpu_virtual_display ||
            amdgpu_device_asic_has_dc_support(flags & AMD_ASIC_MASK))
                supports_atomic = true;
commit 3993a799fc971bc9b918bd969aa55864447b5dde
Author: Lukas Fink <lukas.fi...@gmail.com>
Date:   Fri Jan 14 07:51:41 2022 +0100

    drm/amdgpu: Fix rejecting Tahiti GPUs
    
    eb4fd29afd4a ("drm/amdgpu: bind to any 0x1002 PCI diplay class device") 
added
    generic bindings to amdgpu so that that it binds to all display class 
devices
    with VID 0x1002 and then rejects those in amdgpu_pci_probe.
    
    Unfortunately it reuses a driver_data value of 0 to detect those new 
bindings,
    which is already used to denote CHIP_TAHITI ASICs.
    
    The driver_data value given to those new bindings was changed in
    dd0761fd24ea1 ("drm/amdgpu: set CHIP_IP_DISCOVERY as the asic type by 
default")
    to CHIP_IP_DISCOVERY (=36), but it seems that the check in amdgpu_pci_probe
    was forgotten to be changed. Therefore, it still rejects Tahiti GPUs.
    
    Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1860
    Fixes: eb4fd29afd4a ("drm/amdgpu: bind to any 0x1002 PCI diplay class 
device")
    
    Cc: sta...@vger.kernel.org
    Signed-off-by: Lukas Fink <lukas.fi...@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 366e475056bd..625e00131e27 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -1907,7 +1907,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
                        return -ENODEV;
        }
 
-       if (flags == 0) {
+       if (flags == CHIP_IP_DISCOVERY) {
                DRM_INFO("Unsupported asic.  Remove me when IP discovery init 
is in place.\n");
                return -ENODEV;
        }
commit e8309d50e97851ff135c4e33325d37b032666b94
Author: Alex Deucher <alexander.deuc...@amd.com>
Date:   Wed Jan 12 22:38:51 2022 -0500

    drm/amdgpu: don't do resets on APUs which don't support it
    
    It can cause a hang.  This is normally not enabled for GPU
    hangs on these asics, but was recently enabled for handling
    aborted suspends.  This causes hangs on some platforms
    on suspend.
    
    Fixes: daf8de0874ab5b ("drm/amdgpu: always reset the asic in suspend (v2)")
    Cc: sta...@vger.kernel.org
    Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1858
    Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c
index 54f28c075f21..f10ce740a29c 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik.c
@@ -1428,6 +1428,10 @@ static int cik_asic_reset(struct amdgpu_device *adev)
 {
        int r;
 
+       /* APUs don't have full asic reset */
+       if (adev->flags & AMD_IS_APU)
+               return 0;
+
        if (cik_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) {
                dev_info(adev->dev, "BACO reset\n");
                r = amdgpu_dpm_baco_reset(adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
index fe9a7cc8d9eb..6645ebbd2696 100644
--- a/drivers/gpu/drm/amd/amdgpu/vi.c
+++ b/drivers/gpu/drm/amd/amdgpu/vi.c
@@ -956,6 +956,10 @@ static int vi_asic_reset(struct amdgpu_device *adev)
 {
        int r;
 
+       /* APUs don't have full asic reset */
+       if (adev->flags & AMD_IS_APU)
+               return 0;
+
        if (vi_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) {
                dev_info(adev->dev, "BACO reset\n");
                r = amdgpu_dpm_baco_reset(adev);
commit 0ffb1fd1582a78649f22253d81515997fff88bc4
Author: Alex Deucher <alexander.deuc...@amd.com>
Date:   Tue Jan 11 17:41:44 2022 -0500

    drm/amdgpu: invert the logic in amdgpu_device_should_recover_gpu()
    
    Rather than opting into GPU recovery support, default to on, and
    opt out if it's not working on a particular GPU.  This avoids the
    need to add new asics to this list since this is a core feature.
    
    Reviewed-by: Evan Quan <evan.q...@amd.com>
    Reviewed-by: Guchun Chen <guchun.c...@amd.com>
    Reviewed-by: Christian König <christian.koe...@amd.com>
    Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index cde34129e23a..c4f3c886be55 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -4450,34 +4450,24 @@ bool amdgpu_device_should_recover_gpu(struct 
amdgpu_device *adev)
 
        if (amdgpu_gpu_recovery == -1) {
                switch (adev->asic_type) {
-               case CHIP_BONAIRE:
-               case CHIP_HAWAII:
-               case CHIP_TOPAZ:
-               case CHIP_TONGA:
-               case CHIP_FIJI:
-               case CHIP_POLARIS10:
-               case CHIP_POLARIS11:
-               case CHIP_POLARIS12:
-               case CHIP_VEGAM:
-               case CHIP_VEGA20:
-               case CHIP_VEGA10:
-               case CHIP_VEGA12:
-               case CHIP_RAVEN:
-               case CHIP_ARCTURUS:
-               case CHIP_RENOIR:
-               case CHIP_NAVI10:
-               case CHIP_NAVI14:
-               case CHIP_NAVI12:
-               case CHIP_SIENNA_CICHLID:
-               case CHIP_NAVY_FLOUNDER:
-               case CHIP_DIMGREY_CAVEFISH:
-               case CHIP_BEIGE_GOBY:
-               case CHIP_VANGOGH:
-               case CHIP_ALDEBARAN:
-               case CHIP_YELLOW_CARP:
-                       break;
-               default:
+#ifdef CONFIG_DRM_AMDGPU_SI
+               case CHIP_VERDE:
+               case CHIP_TAHITI:
+               case CHIP_PITCAIRN:
+               case CHIP_OLAND:
+               case CHIP_HAINAN:
+#endif
+#ifdef CONFIG_DRM_AMDGPU_CIK
+               case CHIP_KAVERI:
+               case CHIP_KABINI:
+               case CHIP_MULLINS:
+#endif
+               case CHIP_CARRIZO:
+               case CHIP_STONEY:
+               case CHIP_CYAN_SKILLFISH:
                        goto disabled;
+               default:
+                       break;
                }
        }
 
commit 4175c32be5ef0ff254d6931931ec412e8029c32a
Author: CHANDAN VURDIGERE NATARAJ <chandan.vurdigerenata...@amd.com>
Date:   Tue Jan 11 19:02:26 2022 +0530

    drm/amdgpu: Enable recovery on yellow carp
    
    Add yellow carp to devices which support recovery
    
    Signed-off-by: CHANDAN VURDIGERE NATARAJ <chandan.vurdigerenata...@amd.com>
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>
    Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index cf7fad88c138..cde34129e23a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -4474,6 +4474,7 @@ bool amdgpu_device_should_recover_gpu(struct 
amdgpu_device *adev)
                case CHIP_BEIGE_GOBY:
                case CHIP_VANGOGH:
                case CHIP_ALDEBARAN:
+               case CHIP_YELLOW_CARP:
                        break;
                default:
                        goto disabled;

Reply via email to