Lines Matching refs:adev

38 uint32_t cz_get_argument(struct amdgpu_device *adev)  in cz_get_argument()  argument
43 static struct cz_smu_private_data *cz_smu_get_priv(struct amdgpu_device *adev) in cz_smu_get_priv() argument
46 (struct cz_smu_private_data *)(adev->smu.priv); in cz_smu_get_priv()
51 int cz_send_msg_to_smc_async(struct amdgpu_device *adev, u16 msg) in cz_send_msg_to_smc_async() argument
56 for (i = 0; i < adev->usec_timeout; i++) { in cz_send_msg_to_smc_async()
65 if (i == adev->usec_timeout) in cz_send_msg_to_smc_async()
74 int cz_send_msg_to_smc(struct amdgpu_device *adev, u16 msg) in cz_send_msg_to_smc() argument
79 if (cz_send_msg_to_smc_async(adev, msg)) in cz_send_msg_to_smc()
82 for (i = 0; i < adev->usec_timeout; i++) { in cz_send_msg_to_smc()
91 if (i == adev->usec_timeout) in cz_send_msg_to_smc()
95 dev_err(adev->dev, "SMC Failed to send Message.\n"); in cz_send_msg_to_smc()
102 int cz_send_msg_to_smc_with_parameter_async(struct amdgpu_device *adev, in cz_send_msg_to_smc_with_parameter_async() argument
106 return cz_send_msg_to_smc_async(adev, msg); in cz_send_msg_to_smc_with_parameter_async()
109 int cz_send_msg_to_smc_with_parameter(struct amdgpu_device *adev, in cz_send_msg_to_smc_with_parameter() argument
113 return cz_send_msg_to_smc(adev, msg); in cz_send_msg_to_smc_with_parameter()
116 static int cz_set_smc_sram_address(struct amdgpu_device *adev, in cz_set_smc_sram_address() argument
129 int cz_read_smc_sram_dword(struct amdgpu_device *adev, u32 smc_address, in cz_read_smc_sram_dword() argument
134 ret = cz_set_smc_sram_address(adev, smc_address, limit); in cz_read_smc_sram_dword()
143 int cz_write_smc_sram_dword(struct amdgpu_device *adev, u32 smc_address, in cz_write_smc_sram_dword() argument
148 ret = cz_set_smc_sram_address(adev, smc_address, limit); in cz_write_smc_sram_dword()
157 static int cz_smu_request_load_fw(struct amdgpu_device *adev) in cz_smu_request_load_fw() argument
159 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_request_load_fw()
164 cz_write_smc_sram_dword(adev, smc_addr, 0, smc_addr + 4); in cz_smu_request_load_fw()
167 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_request_load_fw()
170 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_request_load_fw()
173 cz_send_msg_to_smc(adev, PPSMC_MSG_InitJobs); in cz_smu_request_load_fw()
176 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_request_load_fw()
180 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_request_load_fw()
184 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_request_load_fw()
195 static int cz_smu_check_fw_load_finish(struct amdgpu_device *adev, in cz_smu_check_fw_load_finish() argument
205 for (i = 0; i < adev->usec_timeout; i++) { in cz_smu_check_fw_load_finish()
211 if (i >= adev->usec_timeout) { in cz_smu_check_fw_load_finish()
212 dev_err(adev->dev, in cz_smu_check_fw_load_finish()
225 static int cz_smu_check_finished(struct amdgpu_device *adev, in cz_smu_check_finished() argument
230 if (adev->smu.fw_flags & AMDGPU_SDMA0_UCODE_LOADED) in cz_smu_check_finished()
234 if (adev->smu.fw_flags & AMDGPU_SDMA1_UCODE_LOADED) in cz_smu_check_finished()
238 if (adev->smu.fw_flags & AMDGPU_CPCE_UCODE_LOADED) in cz_smu_check_finished()
242 if (adev->smu.fw_flags & AMDGPU_CPPFP_UCODE_LOADED) in cz_smu_check_finished()
245 if (adev->smu.fw_flags & AMDGPU_CPME_UCODE_LOADED) in cz_smu_check_finished()
249 if (adev->smu.fw_flags & AMDGPU_CPMEC1_UCODE_LOADED) in cz_smu_check_finished()
253 if (adev->smu.fw_flags & AMDGPU_CPMEC2_UCODE_LOADED) in cz_smu_check_finished()
257 if (adev->smu.fw_flags & AMDGPU_CPRLC_UCODE_LOADED) in cz_smu_check_finished()
268 static int cz_load_mec_firmware(struct amdgpu_device *adev) in cz_load_mec_firmware() argument
271 &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC1]; in cz_load_mec_firmware()
302 int cz_smu_start(struct amdgpu_device *adev) in cz_smu_start() argument
315 if (adev->asic_type == CHIP_STONEY) in cz_smu_start()
318 cz_smu_request_load_fw(adev); in cz_smu_start()
319 ret = cz_smu_check_fw_load_finish(adev, fw_to_check); in cz_smu_start()
324 if (adev->asic_type == CHIP_CARRIZO || adev->asic_type == CHIP_STONEY) { in cz_smu_start()
325 ret = cz_load_mec_firmware(adev); in cz_smu_start()
327 dev_err(adev->dev, "(%d) Mec Firmware load failed\n", ret); in cz_smu_start()
333 adev->smu.fw_flags = AMDGPU_SDMA0_UCODE_LOADED | in cz_smu_start()
342 if (adev->asic_type == CHIP_STONEY) in cz_smu_start()
343 adev->smu.fw_flags &= ~(AMDGPU_SDMA1_UCODE_LOADED | AMDGPU_CPMEC2_UCODE_LOADED); in cz_smu_start()
449 static int cz_smu_populate_single_firmware_entry(struct amdgpu_device *adev, in cz_smu_populate_single_firmware_entry() argument
457 struct amdgpu_firmware_info *ucode = &adev->firmware.ucode[id]; in cz_smu_populate_single_firmware_entry()
481 static int cz_smu_populate_single_scratch_entry(struct amdgpu_device *adev, in cz_smu_populate_single_scratch_entry() argument
486 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_populate_single_scratch_entry()
501 static int cz_smu_populate_single_ucode_load_task(struct amdgpu_device *adev, in cz_smu_populate_single_ucode_load_task() argument
506 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_populate_single_ucode_load_task()
519 dev_err(adev->dev, "Invalid Firmware Type\n"); in cz_smu_populate_single_ucode_load_task()
530 static int cz_smu_populate_single_scratch_task(struct amdgpu_device *adev, in cz_smu_populate_single_scratch_task() argument
535 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_populate_single_scratch_task()
548 dev_err(adev->dev, "Invalid Firmware Type\n"); in cz_smu_populate_single_scratch_task()
566 static int cz_smu_construct_toc_for_rlc_aram_save(struct amdgpu_device *adev) in cz_smu_construct_toc_for_rlc_aram_save() argument
568 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_construct_toc_for_rlc_aram_save()
570 cz_smu_populate_single_scratch_task(adev, in cz_smu_construct_toc_for_rlc_aram_save()
577 static int cz_smu_construct_toc_for_vddgfx_enter(struct amdgpu_device *adev) in cz_smu_construct_toc_for_vddgfx_enter() argument
579 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_construct_toc_for_vddgfx_enter()
583 cz_smu_populate_single_scratch_task(adev, in cz_smu_construct_toc_for_vddgfx_enter()
586 cz_smu_populate_single_scratch_task(adev, in cz_smu_construct_toc_for_vddgfx_enter()
593 static int cz_smu_construct_toc_for_vddgfx_exit(struct amdgpu_device *adev) in cz_smu_construct_toc_for_vddgfx_exit() argument
595 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_construct_toc_for_vddgfx_exit()
601 if (adev->firmware.smu_load) { in cz_smu_construct_toc_for_vddgfx_exit()
602 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_vddgfx_exit()
604 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_vddgfx_exit()
606 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_vddgfx_exit()
608 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_vddgfx_exit()
610 if (adev->asic_type == CHIP_STONEY) { in cz_smu_construct_toc_for_vddgfx_exit()
611 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_vddgfx_exit()
614 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_vddgfx_exit()
617 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_vddgfx_exit()
622 cz_smu_populate_single_scratch_task(adev, in cz_smu_construct_toc_for_vddgfx_exit()
625 cz_smu_populate_single_scratch_task(adev, in cz_smu_construct_toc_for_vddgfx_exit()
628 cz_smu_populate_single_scratch_task(adev, in cz_smu_construct_toc_for_vddgfx_exit()
635 static int cz_smu_construct_toc_for_power_profiling(struct amdgpu_device *adev) in cz_smu_construct_toc_for_power_profiling() argument
637 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_construct_toc_for_power_profiling()
641 cz_smu_populate_single_scratch_task(adev, in cz_smu_construct_toc_for_power_profiling()
647 static int cz_smu_construct_toc_for_bootup(struct amdgpu_device *adev) in cz_smu_construct_toc_for_bootup() argument
649 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_construct_toc_for_bootup()
653 if (adev->firmware.smu_load) { in cz_smu_construct_toc_for_bootup()
654 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_bootup()
656 if (adev->asic_type == CHIP_STONEY) { in cz_smu_construct_toc_for_bootup()
657 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_bootup()
660 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_bootup()
663 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_bootup()
665 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_bootup()
667 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_bootup()
669 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_bootup()
671 if (adev->asic_type == CHIP_STONEY) { in cz_smu_construct_toc_for_bootup()
672 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_bootup()
675 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_bootup()
678 cz_smu_populate_single_ucode_load_task(adev, in cz_smu_construct_toc_for_bootup()
685 static int cz_smu_construct_toc_for_clock_table(struct amdgpu_device *adev) in cz_smu_construct_toc_for_clock_table() argument
687 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_construct_toc_for_clock_table()
691 cz_smu_populate_single_scratch_task(adev, in cz_smu_construct_toc_for_clock_table()
698 static int cz_smu_initialize_toc_empty_job_list(struct amdgpu_device *adev) in cz_smu_initialize_toc_empty_job_list() argument
701 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_initialize_toc_empty_job_list()
713 int cz_smu_fini(struct amdgpu_device *adev) in cz_smu_fini() argument
715 amdgpu_bo_unref(&adev->smu.toc_buf); in cz_smu_fini()
716 amdgpu_bo_unref(&adev->smu.smu_buf); in cz_smu_fini()
717 kfree(adev->smu.priv); in cz_smu_fini()
718 adev->smu.priv = NULL; in cz_smu_fini()
719 if (adev->firmware.smu_load) in cz_smu_fini()
720 amdgpu_ucode_fini_bo(adev); in cz_smu_fini()
725 int cz_smu_download_pptable(struct amdgpu_device *adev, void **table) in cz_smu_download_pptable() argument
728 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_download_pptable()
736 dev_err(adev->dev, "Invalid Scratch Type\n"); in cz_smu_download_pptable()
743 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_download_pptable()
746 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_download_pptable()
749 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_download_pptable()
754 cz_send_msg_to_smc(adev, PPSMC_MSG_ClkTableXferToDram); in cz_smu_download_pptable()
759 int cz_smu_upload_pptable(struct amdgpu_device *adev) in cz_smu_upload_pptable() argument
762 struct cz_smu_private_data *priv = cz_smu_get_priv(adev); in cz_smu_upload_pptable()
770 dev_err(adev->dev, "Invalid Scratch Type\n"); in cz_smu_upload_pptable()
775 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_upload_pptable()
778 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_upload_pptable()
781 cz_send_msg_to_smc_with_parameter(adev, in cz_smu_upload_pptable()
786 cz_send_msg_to_smc(adev, PPSMC_MSG_ClkTableXferToSmu); in cz_smu_upload_pptable()
803 int cz_smu_init(struct amdgpu_device *adev) in cz_smu_init() argument
807 struct amdgpu_bo **toc_buf = &adev->smu.toc_buf; in cz_smu_init()
808 struct amdgpu_bo **smu_buf = &adev->smu.smu_buf; in cz_smu_init()
818 if (adev->firmware.smu_load) in cz_smu_init()
819 amdgpu_ucode_init_bo(adev); in cz_smu_init()
821 adev->smu.priv = priv; in cz_smu_init()
822 adev->smu.fw_flags = 0; in cz_smu_init()
837 ret = amdgpu_bo_create(adev, priv->toc_buffer.data_size, PAGE_SIZE, in cz_smu_init()
842 dev_err(adev->dev, "(%d) SMC TOC buffer allocation failed\n", ret); in cz_smu_init()
846 ret = amdgpu_bo_create(adev, priv->smu_buffer.data_size, PAGE_SIZE, in cz_smu_init()
851 dev_err(adev->dev, "(%d) SMC Internal buffer allocation failed\n", ret); in cz_smu_init()
856 ret = amdgpu_bo_reserve(adev->smu.toc_buf, false); in cz_smu_init()
858 amdgpu_bo_unref(&adev->smu.toc_buf); in cz_smu_init()
859 dev_err(adev->dev, "(%d) SMC TOC buffer reserve failed\n", ret); in cz_smu_init()
863 ret = amdgpu_bo_pin(adev->smu.toc_buf, AMDGPU_GEM_DOMAIN_GTT, &mc_addr); in cz_smu_init()
865 amdgpu_bo_unreserve(adev->smu.toc_buf); in cz_smu_init()
866 amdgpu_bo_unref(&adev->smu.toc_buf); in cz_smu_init()
867 dev_err(adev->dev, "(%d) SMC TOC buffer pin failed\n", ret); in cz_smu_init()
875 amdgpu_bo_unreserve(adev->smu.toc_buf); in cz_smu_init()
882 ret = amdgpu_bo_reserve(adev->smu.smu_buf, false); in cz_smu_init()
884 amdgpu_bo_unref(&adev->smu.smu_buf); in cz_smu_init()
885 dev_err(adev->dev, "(%d) SMC Internal buffer reserve failed\n", ret); in cz_smu_init()
889 ret = amdgpu_bo_pin(adev->smu.smu_buf, AMDGPU_GEM_DOMAIN_GTT, &mc_addr); in cz_smu_init()
891 amdgpu_bo_unreserve(adev->smu.smu_buf); in cz_smu_init()
892 amdgpu_bo_unref(&adev->smu.smu_buf); in cz_smu_init()
893 dev_err(adev->dev, "(%d) SMC Internal buffer pin failed\n", ret); in cz_smu_init()
901 amdgpu_bo_unreserve(adev->smu.smu_buf); in cz_smu_init()
907 if (adev->firmware.smu_load) { in cz_smu_init()
908 if (cz_smu_populate_single_firmware_entry(adev, in cz_smu_init()
913 if (adev->asic_type == CHIP_STONEY) { in cz_smu_init()
914 if (cz_smu_populate_single_firmware_entry(adev, in cz_smu_init()
919 if (cz_smu_populate_single_firmware_entry(adev, in cz_smu_init()
924 if (cz_smu_populate_single_firmware_entry(adev, in cz_smu_init()
928 if (cz_smu_populate_single_firmware_entry(adev, in cz_smu_init()
932 if (cz_smu_populate_single_firmware_entry(adev, in cz_smu_init()
936 if (cz_smu_populate_single_firmware_entry(adev, in cz_smu_init()
940 if (adev->asic_type == CHIP_STONEY) { in cz_smu_init()
941 if (cz_smu_populate_single_firmware_entry(adev, in cz_smu_init()
946 if (cz_smu_populate_single_firmware_entry(adev, in cz_smu_init()
951 if (cz_smu_populate_single_firmware_entry(adev, in cz_smu_init()
957 if (cz_smu_populate_single_scratch_entry(adev, in cz_smu_init()
962 if (cz_smu_populate_single_scratch_entry(adev, in cz_smu_init()
967 if (cz_smu_populate_single_scratch_entry(adev, in cz_smu_init()
972 if (cz_smu_populate_single_scratch_entry(adev, in cz_smu_init()
977 if (cz_smu_populate_single_scratch_entry(adev, in cz_smu_init()
983 cz_smu_initialize_toc_empty_job_list(adev); in cz_smu_init()
984 cz_smu_construct_toc_for_rlc_aram_save(adev); in cz_smu_init()
985 cz_smu_construct_toc_for_vddgfx_enter(adev); in cz_smu_init()
986 cz_smu_construct_toc_for_vddgfx_exit(adev); in cz_smu_init()
987 cz_smu_construct_toc_for_power_profiling(adev); in cz_smu_init()
988 cz_smu_construct_toc_for_bootup(adev); in cz_smu_init()
989 cz_smu_construct_toc_for_clock_table(adev); in cz_smu_init()
991 adev->smu.smumgr_funcs = &cz_smumgr_funcs; in cz_smu_init()