Add DM handling for DCN36.

Acked-by: Harry Wentland <harry.wentl...@amd.com>
Signed-off-by: Wayne Lin <wayne....@amd.com>
---
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c  | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index a8421c07b160..b26ae1dd1fd7 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -154,6 +154,9 @@ MODULE_FIRMWARE(FIRMWARE_DCN_35_DMUB);
 #define FIRMWARE_DCN_351_DMUB "amdgpu/dcn_3_5_1_dmcub.bin"
 MODULE_FIRMWARE(FIRMWARE_DCN_351_DMUB);
 
+#define FIRMWARE_DCN_36_DMUB "amdgpu/dcn_3_6_dmcub.bin"
+MODULE_FIRMWARE(FIRMWARE_DCN_36_DMUB);
+
 #define FIRMWARE_DCN_401_DMUB "amdgpu/dcn_4_0_1_dmcub.bin"
 MODULE_FIRMWARE(FIRMWARE_DCN_401_DMUB);
 
@@ -1266,6 +1269,7 @@ static int dm_dmub_hw_init(struct amdgpu_device *adev)
        case IP_VERSION(3, 1, 4):
        case IP_VERSION(3, 5, 0):
        case IP_VERSION(3, 5, 1):
+       case IP_VERSION(3, 6, 0):
        case IP_VERSION(4, 0, 1):
                hw_params.dpia_supported = true;
                hw_params.disable_dpia = 
adev->dm.dc->debug.dpia_debug.bits.disable_dpia;
@@ -1277,6 +1281,7 @@ static int dm_dmub_hw_init(struct amdgpu_device *adev)
        switch (amdgpu_ip_version(adev, DCE_HWIP, 0)) {
        case IP_VERSION(3, 5, 0):
        case IP_VERSION(3, 5, 1):
+       case IP_VERSION(3, 6, 0):
                hw_params.ips_sequential_ono = adev->external_rev_id > 0x10;
                break;
        default:
@@ -1831,6 +1836,7 @@ static enum dmub_ips_disable_type dm_get_default_ips_mode(
 
        switch (amdgpu_ip_version(adev, DCE_HWIP, 0)) {
        case IP_VERSION(3, 5, 0):
+       case IP_VERSION(3, 6, 0):
                /*
                 * On DCN35 systems with Z8 enabled, it's possible for IPS2 + 
Z8 to
                 * cause a hard hang. A fix exists for newer PMFW.
@@ -2334,6 +2340,7 @@ static int load_dmcu_fw(struct amdgpu_device *adev)
                case IP_VERSION(3, 2, 1):
                case IP_VERSION(3, 5, 0):
                case IP_VERSION(3, 5, 1):
+               case IP_VERSION(3, 6, 0):
                case IP_VERSION(4, 0, 1):
                        return 0;
                default:
@@ -2459,6 +2466,9 @@ static int dm_dmub_sw_init(struct amdgpu_device *adev)
        case IP_VERSION(3, 5, 1):
                dmub_asic = DMUB_ASIC_DCN35;
                break;
+       case IP_VERSION(3, 6, 0):
+               dmub_asic = DMUB_ASIC_DCN36;
+               break;
        case IP_VERSION(4, 0, 1):
                dmub_asic = DMUB_ASIC_DCN401;
                break;
@@ -5061,6 +5071,7 @@ static int amdgpu_dm_initialize_drm_device(struct 
amdgpu_device *adev)
        case IP_VERSION(2, 1, 0):
        case IP_VERSION(3, 5, 0):
        case IP_VERSION(3, 5, 1):
+       case IP_VERSION(3, 6, 0):
        case IP_VERSION(4, 0, 1):
                if (register_outbox_irq_handlers(dm->adev)) {
                        DRM_ERROR("DM: Failed to initialize IRQ\n");
@@ -5084,6 +5095,7 @@ static int amdgpu_dm_initialize_drm_device(struct 
amdgpu_device *adev)
                case IP_VERSION(3, 2, 1):
                case IP_VERSION(3, 5, 0):
                case IP_VERSION(3, 5, 1):
+               case IP_VERSION(3, 6, 0):
                case IP_VERSION(4, 0, 1):
                        psr_feature_enabled = true;
                        break;
@@ -5101,6 +5113,7 @@ static int amdgpu_dm_initialize_drm_device(struct 
amdgpu_device *adev)
                case IP_VERSION(3, 2, 1):
                case IP_VERSION(3, 5, 0):
                case IP_VERSION(3, 5, 1):
+               case IP_VERSION(3, 6, 0):
                        replay_feature_enabled = true;
                        break;
 
@@ -5250,6 +5263,7 @@ static int amdgpu_dm_initialize_drm_device(struct 
amdgpu_device *adev)
                case IP_VERSION(3, 2, 1):
                case IP_VERSION(3, 5, 0):
                case IP_VERSION(3, 5, 1):
+               case IP_VERSION(3, 6, 0):
                case IP_VERSION(4, 0, 1):
                        if (dcn10_register_irq_handlers(dm->adev)) {
                                DRM_ERROR("DM: Failed to initialize IRQ\n");
@@ -5392,6 +5406,9 @@ static int dm_init_microcode(struct amdgpu_device *adev)
        case IP_VERSION(3, 5, 1):
                fw_name_dmub = FIRMWARE_DCN_351_DMUB;
                break;
+       case IP_VERSION(3, 6, 0):
+               fw_name_dmub = FIRMWARE_DCN_36_DMUB;
+               break;
        case IP_VERSION(4, 0, 1):
                fw_name_dmub = FIRMWARE_DCN_401_DMUB;
                break;
@@ -5520,6 +5537,7 @@ static int dm_early_init(struct amdgpu_ip_block *ip_block)
                case IP_VERSION(3, 2, 1):
                case IP_VERSION(3, 5, 0):
                case IP_VERSION(3, 5, 1):
+               case IP_VERSION(3, 6, 0):
                case IP_VERSION(4, 0, 1):
                        adev->mode_info.num_crtc = 4;
                        adev->mode_info.num_hpd = 4;
-- 
2.37.3

Reply via email to