Commit f9ed188d authored by Lang Yu's avatar Lang Yu Committed by Alex Deucher

drm/amdgpu: add support for GC 10.1.4

Add basic support for GC 10.1.4,
it uses same IP blocks with GC 10.1.3
Signed-off-by: default avatarLang Yu <Lang.Yu@amd.com>
Reviewed-by: default avatarHuang Rui <ray.huang@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d8a25e48
...@@ -674,6 +674,7 @@ static int amdgpu_discovery_set_common_ip_blocks(struct amdgpu_device *adev) ...@@ -674,6 +674,7 @@ static int amdgpu_discovery_set_common_ip_blocks(struct amdgpu_device *adev)
case IP_VERSION(10, 1, 1): case IP_VERSION(10, 1, 1):
case IP_VERSION(10, 1, 2): case IP_VERSION(10, 1, 2):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
case IP_VERSION(10, 3, 0): case IP_VERSION(10, 3, 0):
case IP_VERSION(10, 3, 1): case IP_VERSION(10, 3, 1):
case IP_VERSION(10, 3, 2): case IP_VERSION(10, 3, 2):
...@@ -709,6 +710,7 @@ static int amdgpu_discovery_set_gmc_ip_blocks(struct amdgpu_device *adev) ...@@ -709,6 +710,7 @@ static int amdgpu_discovery_set_gmc_ip_blocks(struct amdgpu_device *adev)
case IP_VERSION(10, 1, 1): case IP_VERSION(10, 1, 1):
case IP_VERSION(10, 1, 2): case IP_VERSION(10, 1, 2):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
case IP_VERSION(10, 3, 0): case IP_VERSION(10, 3, 0):
case IP_VERSION(10, 3, 1): case IP_VERSION(10, 3, 1):
case IP_VERSION(10, 3, 2): case IP_VERSION(10, 3, 2):
...@@ -910,6 +912,7 @@ static int amdgpu_discovery_set_gc_ip_blocks(struct amdgpu_device *adev) ...@@ -910,6 +912,7 @@ static int amdgpu_discovery_set_gc_ip_blocks(struct amdgpu_device *adev)
case IP_VERSION(10, 1, 2): case IP_VERSION(10, 1, 2):
case IP_VERSION(10, 1, 1): case IP_VERSION(10, 1, 1):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
case IP_VERSION(10, 3, 0): case IP_VERSION(10, 3, 0):
case IP_VERSION(10, 3, 2): case IP_VERSION(10, 3, 2):
case IP_VERSION(10, 3, 1): case IP_VERSION(10, 3, 1):
...@@ -1044,6 +1047,7 @@ static int amdgpu_discovery_set_mes_ip_blocks(struct amdgpu_device *adev) ...@@ -1044,6 +1047,7 @@ static int amdgpu_discovery_set_mes_ip_blocks(struct amdgpu_device *adev)
case IP_VERSION(10, 1, 1): case IP_VERSION(10, 1, 1):
case IP_VERSION(10, 1, 2): case IP_VERSION(10, 1, 2):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
case IP_VERSION(10, 3, 0): case IP_VERSION(10, 3, 0):
case IP_VERSION(10, 3, 1): case IP_VERSION(10, 3, 1):
case IP_VERSION(10, 3, 2): case IP_VERSION(10, 3, 2):
...@@ -1243,6 +1247,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev) ...@@ -1243,6 +1247,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
case IP_VERSION(10, 1, 1): case IP_VERSION(10, 1, 1):
case IP_VERSION(10, 1, 2): case IP_VERSION(10, 1, 2):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
case IP_VERSION(10, 3, 0): case IP_VERSION(10, 3, 0):
case IP_VERSION(10, 3, 2): case IP_VERSION(10, 3, 2):
case IP_VERSION(10, 3, 4): case IP_VERSION(10, 3, 4):
...@@ -1264,6 +1269,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev) ...@@ -1264,6 +1269,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
case IP_VERSION(9, 2, 2): case IP_VERSION(9, 2, 2):
case IP_VERSION(9, 3, 0): case IP_VERSION(9, 3, 0):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
case IP_VERSION(10, 3, 1): case IP_VERSION(10, 3, 1):
case IP_VERSION(10, 3, 3): case IP_VERSION(10, 3, 3):
adev->flags |= AMD_IS_APU; adev->flags |= AMD_IS_APU;
......
...@@ -137,7 +137,8 @@ static int psp_early_init(void *handle) ...@@ -137,7 +137,8 @@ static int psp_early_init(void *handle)
psp->autoload_supported = true; psp->autoload_supported = true;
break; break;
case IP_VERSION(11, 0, 8): case IP_VERSION(11, 0, 8):
if (adev->apu_flags & AMD_APU_IS_CYAN_SKILLFISH2) { if (adev->apu_flags & AMD_APU_IS_CYAN_SKILLFISH2 ||
adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 1, 4)) {
psp_v11_0_8_set_psp_funcs(psp); psp_v11_0_8_set_psp_funcs(psp);
psp->autoload_supported = false; psp->autoload_supported = false;
} }
......
...@@ -3641,6 +3641,7 @@ static void gfx_v10_0_init_golden_registers(struct amdgpu_device *adev) ...@@ -3641,6 +3641,7 @@ static void gfx_v10_0_init_golden_registers(struct amdgpu_device *adev)
(const u32)ARRAY_SIZE(golden_settings_gc_10_3_5)); (const u32)ARRAY_SIZE(golden_settings_gc_10_3_5));
break; break;
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
soc15_program_register_sequence(adev, soc15_program_register_sequence(adev,
golden_settings_gc_10_0_cyan_skillfish, golden_settings_gc_10_0_cyan_skillfish,
(const u32)ARRAY_SIZE(golden_settings_gc_10_0_cyan_skillfish)); (const u32)ARRAY_SIZE(golden_settings_gc_10_0_cyan_skillfish));
...@@ -3819,6 +3820,7 @@ static void gfx_v10_0_check_fw_write_wait(struct amdgpu_device *adev) ...@@ -3819,6 +3820,7 @@ static void gfx_v10_0_check_fw_write_wait(struct amdgpu_device *adev)
case IP_VERSION(10, 1, 2): case IP_VERSION(10, 1, 2):
case IP_VERSION(10, 1, 1): case IP_VERSION(10, 1, 1):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
if ((adev->gfx.me_fw_version >= 0x00000046) && if ((adev->gfx.me_fw_version >= 0x00000046) &&
(adev->gfx.me_feature_version >= 27) && (adev->gfx.me_feature_version >= 27) &&
(adev->gfx.pfp_fw_version >= 0x00000068) && (adev->gfx.pfp_fw_version >= 0x00000068) &&
...@@ -3959,6 +3961,9 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev) ...@@ -3959,6 +3961,9 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)
else else
chip_name = "cyan_skillfish"; chip_name = "cyan_skillfish";
break; break;
case IP_VERSION(10, 1, 4):
chip_name = "cyan_skillfish2";
break;
default: default:
BUG(); BUG();
} }
...@@ -4565,6 +4570,7 @@ static void gfx_v10_0_gpu_early_init(struct amdgpu_device *adev) ...@@ -4565,6 +4570,7 @@ static void gfx_v10_0_gpu_early_init(struct amdgpu_device *adev)
1 << REG_GET_FIELD(gb_addr_config, GB_ADDR_CONFIG, NUM_PKRS); 1 << REG_GET_FIELD(gb_addr_config, GB_ADDR_CONFIG, NUM_PKRS);
break; break;
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
adev->gfx.config.max_hw_contexts = 8; adev->gfx.config.max_hw_contexts = 8;
adev->gfx.config.sc_prim_fifo_size_frontend = 0x20; adev->gfx.config.sc_prim_fifo_size_frontend = 0x20;
adev->gfx.config.sc_prim_fifo_size_backend = 0x100; adev->gfx.config.sc_prim_fifo_size_backend = 0x100;
...@@ -4677,6 +4683,7 @@ static int gfx_v10_0_sw_init(void *handle) ...@@ -4677,6 +4683,7 @@ static int gfx_v10_0_sw_init(void *handle)
case IP_VERSION(10, 1, 1): case IP_VERSION(10, 1, 1):
case IP_VERSION(10, 1, 2): case IP_VERSION(10, 1, 2):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
adev->gfx.me.num_me = 1; adev->gfx.me.num_me = 1;
adev->gfx.me.num_pipe_per_me = 1; adev->gfx.me.num_pipe_per_me = 1;
adev->gfx.me.num_queue_per_pipe = 1; adev->gfx.me.num_queue_per_pipe = 1;
...@@ -7658,6 +7665,7 @@ static int gfx_v10_0_early_init(void *handle) ...@@ -7658,6 +7665,7 @@ static int gfx_v10_0_early_init(void *handle)
case IP_VERSION(10, 1, 1): case IP_VERSION(10, 1, 1):
case IP_VERSION(10, 1, 2): case IP_VERSION(10, 1, 2):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
adev->gfx.num_gfx_rings = GFX10_NUM_GFX_RINGS_NV1X; adev->gfx.num_gfx_rings = GFX10_NUM_GFX_RINGS_NV1X;
break; break;
case IP_VERSION(10, 3, 0): case IP_VERSION(10, 3, 0):
...@@ -9418,6 +9426,7 @@ static void gfx_v10_0_set_rlc_funcs(struct amdgpu_device *adev) ...@@ -9418,6 +9426,7 @@ static void gfx_v10_0_set_rlc_funcs(struct amdgpu_device *adev)
case IP_VERSION(10, 1, 10): case IP_VERSION(10, 1, 10):
case IP_VERSION(10, 1, 1): case IP_VERSION(10, 1, 1):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
case IP_VERSION(10, 3, 2): case IP_VERSION(10, 3, 2):
case IP_VERSION(10, 3, 1): case IP_VERSION(10, 3, 1):
case IP_VERSION(10, 3, 4): case IP_VERSION(10, 3, 4):
......
...@@ -881,6 +881,7 @@ static int gmc_v10_0_sw_init(void *handle) ...@@ -881,6 +881,7 @@ static int gmc_v10_0_sw_init(void *handle)
case IP_VERSION(10, 1, 1): case IP_VERSION(10, 1, 1):
case IP_VERSION(10, 1, 2): case IP_VERSION(10, 1, 2):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
case IP_VERSION(10, 3, 0): case IP_VERSION(10, 3, 0):
case IP_VERSION(10, 3, 2): case IP_VERSION(10, 3, 2):
case IP_VERSION(10, 3, 1): case IP_VERSION(10, 3, 1):
...@@ -1156,7 +1157,8 @@ static void gmc_v10_0_get_clockgating_state(void *handle, u32 *flags) ...@@ -1156,7 +1157,8 @@ static void gmc_v10_0_get_clockgating_state(void *handle, u32 *flags)
{ {
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
if (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 1, 3)) if (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 1, 3) ||
adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 1, 4))
return; return;
adev->mmhub.funcs->get_clockgating(adev, flags); adev->mmhub.funcs->get_clockgating(adev, flags);
......
...@@ -902,6 +902,7 @@ static int nv_common_early_init(void *handle) ...@@ -902,6 +902,7 @@ static int nv_common_early_init(void *handle)
adev->external_rev_id = adev->rev_id + 0x01; adev->external_rev_id = adev->rev_id + 0x01;
break; break;
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
adev->cg_flags = 0; adev->cg_flags = 0;
adev->pg_flags = 0; adev->pg_flags = 0;
adev->external_rev_id = adev->rev_id + 0x82; adev->external_rev_id = adev->rev_id + 0x82;
......
...@@ -264,7 +264,8 @@ static int sdma_v5_0_init_microcode(struct amdgpu_device *adev) ...@@ -264,7 +264,8 @@ static int sdma_v5_0_init_microcode(struct amdgpu_device *adev)
chip_name = "navi12"; chip_name = "navi12";
break; break;
case IP_VERSION(5, 0, 1): case IP_VERSION(5, 0, 1):
if (adev->apu_flags & AMD_APU_IS_CYAN_SKILLFISH2) if (adev->apu_flags & AMD_APU_IS_CYAN_SKILLFISH2 ||
adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 1, 4))
chip_name = "cyan_skillfish2"; chip_name = "cyan_skillfish2";
else else
chip_name = "cyan_skillfish"; chip_name = "cyan_skillfish";
......
...@@ -1411,6 +1411,7 @@ static int kfd_fill_gpu_cache_info(struct kfd_dev *kdev, ...@@ -1411,6 +1411,7 @@ static int kfd_fill_gpu_cache_info(struct kfd_dev *kdev,
case IP_VERSION(10, 1, 10): case IP_VERSION(10, 1, 10):
case IP_VERSION(10, 1, 2): case IP_VERSION(10, 1, 2):
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
pcache_info = navi10_cache_info; pcache_info = navi10_cache_info;
num_of_cache_types = ARRAY_SIZE(navi10_cache_info); num_of_cache_types = ARRAY_SIZE(navi10_cache_info);
break; break;
......
...@@ -110,6 +110,7 @@ static void kfd_device_info_set_event_interrupt_class(struct kfd_dev *kfd) ...@@ -110,6 +110,7 @@ static void kfd_device_info_set_event_interrupt_class(struct kfd_dev *kfd)
case IP_VERSION(10, 3, 1): /* VANGOGH */ case IP_VERSION(10, 3, 1): /* VANGOGH */
case IP_VERSION(10, 3, 3): /* YELLOW_CARP */ case IP_VERSION(10, 3, 3): /* YELLOW_CARP */
case IP_VERSION(10, 1, 3): /* CYAN_SKILLFISH */ case IP_VERSION(10, 1, 3): /* CYAN_SKILLFISH */
case IP_VERSION(10, 1, 4):
case IP_VERSION(10, 1, 10): /* NAVI10 */ case IP_VERSION(10, 1, 10): /* NAVI10 */
case IP_VERSION(10, 1, 2): /* NAVI12 */ case IP_VERSION(10, 1, 2): /* NAVI12 */
case IP_VERSION(10, 1, 1): /* NAVI14 */ case IP_VERSION(10, 1, 1): /* NAVI14 */
...@@ -307,6 +308,7 @@ struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf) ...@@ -307,6 +308,7 @@ struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
break; break;
/* Cyan Skillfish */ /* Cyan Skillfish */
case IP_VERSION(10, 1, 3): case IP_VERSION(10, 1, 3):
case IP_VERSION(10, 1, 4):
gfx_target_version = 100103; gfx_target_version = 100103;
if (!vf) if (!vf)
f2g = &gfx_v10_kfd2kgd; f2g = &gfx_v10_kfd2kgd;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment