drm/amd/display: Add DCN36 DM Support
authorWayne Lin <Wayne.Lin@amd.com>
Fri, 10 Jan 2025 13:20:49 +0000 (21:20 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 13 Feb 2025 02:04:08 +0000 (21:04 -0500)
Add DM handling for DCN36.

Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index a9e062714135356caa5a2ea85e84ecaba3ef9dec..660265a97015438b364ec8029d6036d31397dc85 100644 (file)
@@ -155,6 +155,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);
 
@@ -1269,6 +1272,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;
@@ -1280,6 +1284,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:
@@ -1834,6 +1839,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.
@@ -2337,6 +2343,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:
@@ -2462,6 +2469,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;
@@ -5069,6 +5079,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");
@@ -5092,6 +5103,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;
@@ -5109,6 +5121,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;
 
@@ -5258,6 +5271,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");
@@ -5400,6 +5414,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;
@@ -5528,6 +5545,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;