Lines Matching refs:adev
37 static int iceland_set_smc_sram_address(struct amdgpu_device *adev, in iceland_set_smc_sram_address() argument
57 static int iceland_copy_bytes_to_smc(struct amdgpu_device *adev, in iceland_copy_bytes_to_smc() argument
76 spin_lock_irqsave(&adev->smc_idx_lock, flags); in iceland_copy_bytes_to_smc()
81 result = iceland_set_smc_sram_address(adev, addr, limit); in iceland_copy_bytes_to_smc()
97 result = iceland_set_smc_sram_address(adev, addr, limit); in iceland_copy_bytes_to_smc()
112 result = iceland_set_smc_sram_address(adev, addr, limit); in iceland_copy_bytes_to_smc()
120 spin_unlock_irqrestore(&adev->smc_idx_lock, flags); in iceland_copy_bytes_to_smc()
124 void iceland_start_smc(struct amdgpu_device *adev) in iceland_start_smc() argument
132 void iceland_reset_smc(struct amdgpu_device *adev) in iceland_reset_smc() argument
140 static int iceland_program_jump_on_start(struct amdgpu_device *adev) in iceland_program_jump_on_start() argument
143 iceland_copy_bytes_to_smc(adev, 0x0, data, 4, sizeof(data)+1); in iceland_program_jump_on_start()
148 void iceland_stop_smc_clock(struct amdgpu_device *adev) in iceland_stop_smc_clock() argument
156 void iceland_start_smc_clock(struct amdgpu_device *adev) in iceland_start_smc_clock() argument
164 static bool iceland_is_smc_ram_running(struct amdgpu_device *adev) in iceland_is_smc_ram_running() argument
172 static int wait_smu_response(struct amdgpu_device *adev) in wait_smu_response() argument
177 for (i = 0; i < adev->usec_timeout; i++) { in wait_smu_response()
184 if (i == adev->usec_timeout) in wait_smu_response()
190 static int iceland_send_msg_to_smc(struct amdgpu_device *adev, PPSMC_Msg msg) in iceland_send_msg_to_smc() argument
192 if (!iceland_is_smc_ram_running(adev)) in iceland_send_msg_to_smc()
195 if (wait_smu_response(adev)) { in iceland_send_msg_to_smc()
202 if (wait_smu_response(adev)) { in iceland_send_msg_to_smc()
210 static int iceland_send_msg_to_smc_without_waiting(struct amdgpu_device *adev, in iceland_send_msg_to_smc_without_waiting() argument
213 if (!iceland_is_smc_ram_running(adev)) in iceland_send_msg_to_smc_without_waiting()
216 if (wait_smu_response(adev)) { in iceland_send_msg_to_smc_without_waiting()
226 static int iceland_send_msg_to_smc_with_parameter(struct amdgpu_device *adev, in iceland_send_msg_to_smc_with_parameter() argument
232 return iceland_send_msg_to_smc(adev, msg); in iceland_send_msg_to_smc_with_parameter()
236 struct amdgpu_device *adev, in iceland_send_msg_to_smc_with_parameter_without_waiting() argument
241 return iceland_send_msg_to_smc_without_waiting(adev, msg); in iceland_send_msg_to_smc_with_parameter_without_waiting()
245 static int iceland_wait_for_smc_inactive(struct amdgpu_device *adev)
250 if (!iceland_is_smc_ram_running(adev))
253 for (i = 0; i < adev->usec_timeout; i++) {
260 if (i == adev->usec_timeout)
267 static int iceland_smu_upload_firmware_image(struct amdgpu_device *adev) in iceland_smu_upload_firmware_image() argument
279 if (!adev->pm.fw) in iceland_smu_upload_firmware_image()
282 hdr = (const struct smc_firmware_header_v1_0 *)adev->pm.fw->data; in iceland_smu_upload_firmware_image()
285 adev->pm.fw_version = le32_to_cpu(hdr->header.ucode_version); in iceland_smu_upload_firmware_image()
289 (adev->pm.fw->data + le32_to_cpu(hdr->header.ucode_array_offset_bytes)); in iceland_smu_upload_firmware_image()
301 for (i = 0; i < adev->usec_timeout; i++) { in iceland_smu_upload_firmware_image()
310 iceland_stop_smc_clock(adev); in iceland_smu_upload_firmware_image()
311 iceland_reset_smc(adev); in iceland_smu_upload_firmware_image()
313 spin_lock_irqsave(&adev->smc_idx_lock, flags); in iceland_smu_upload_firmware_image()
330 spin_unlock_irqrestore(&adev->smc_idx_lock, flags); in iceland_smu_upload_firmware_image()
336 static int iceland_read_smc_sram_dword(struct amdgpu_device *adev,
344 spin_lock_irqsave(&adev->smc_idx_lock, flags);
345 result = iceland_set_smc_sram_address(adev, smc_address, limit);
348 spin_unlock_irqrestore(&adev->smc_idx_lock, flags);
352 static int iceland_write_smc_sram_dword(struct amdgpu_device *adev,
360 spin_lock_irqsave(&adev->smc_idx_lock, flags);
361 result = iceland_set_smc_sram_address(adev, smc_address, limit);
364 spin_unlock_irqrestore(&adev->smc_idx_lock, flags);
368 static int iceland_smu_stop_smc(struct amdgpu_device *adev)
370 iceland_reset_smc(adev);
371 iceland_stop_smc_clock(adev);
377 static int iceland_smu_start_smc(struct amdgpu_device *adev) in iceland_smu_start_smc() argument
382 iceland_program_jump_on_start(adev); in iceland_smu_start_smc()
383 iceland_start_smc_clock(adev); in iceland_smu_start_smc()
384 iceland_start_smc(adev); in iceland_smu_start_smc()
386 for (i = 0; i < adev->usec_timeout; i++) { in iceland_smu_start_smc()
446 static int iceland_smu_populate_single_firmware_entry(struct amdgpu_device *adev, in iceland_smu_populate_single_firmware_entry() argument
451 struct amdgpu_firmware_info *ucode = &adev->firmware.ucode[id]; in iceland_smu_populate_single_firmware_entry()
476 static int iceland_smu_request_load_fw(struct amdgpu_device *adev) in iceland_smu_request_load_fw() argument
478 struct iceland_smu_private_data *private = (struct iceland_smu_private_data *)adev->smu.priv; in iceland_smu_request_load_fw()
486 if (!adev->firmware.smu_load) in iceland_smu_request_load_fw()
489 if (iceland_smu_populate_single_firmware_entry(adev, UCODE_ID_RLC_G, in iceland_smu_request_load_fw()
495 if (iceland_smu_populate_single_firmware_entry(adev, UCODE_ID_CP_CE, in iceland_smu_request_load_fw()
501 if (iceland_smu_populate_single_firmware_entry(adev, UCODE_ID_CP_PFP, in iceland_smu_request_load_fw()
507 if (iceland_smu_populate_single_firmware_entry(adev, UCODE_ID_CP_ME, in iceland_smu_request_load_fw()
513 if (iceland_smu_populate_single_firmware_entry(adev, UCODE_ID_CP_MEC, in iceland_smu_request_load_fw()
519 if (iceland_smu_populate_single_firmware_entry(adev, UCODE_ID_CP_MEC_JT1, in iceland_smu_request_load_fw()
525 if (iceland_smu_populate_single_firmware_entry(adev, UCODE_ID_SDMA0, in iceland_smu_request_load_fw()
531 if (iceland_smu_populate_single_firmware_entry(adev, UCODE_ID_SDMA1, in iceland_smu_request_load_fw()
537 …iceland_send_msg_to_smc_with_parameter(adev, PPSMC_MSG_DRV_DRAM_ADDR_HI, private->header_addr_high… in iceland_smu_request_load_fw()
538 iceland_send_msg_to_smc_with_parameter(adev, PPSMC_MSG_DRV_DRAM_ADDR_LO, private->header_addr_low); in iceland_smu_request_load_fw()
550 …if (iceland_send_msg_to_smc_with_parameter_without_waiting(adev, PPSMC_MSG_LoadUcodes, fw_to_load)… in iceland_smu_request_load_fw()
558 static int iceland_smu_check_fw_load_finish(struct amdgpu_device *adev, in iceland_smu_check_fw_load_finish() argument
564 for (i = 0; i < adev->usec_timeout; i++) { in iceland_smu_check_fw_load_finish()
570 if (i == adev->usec_timeout) { in iceland_smu_check_fw_load_finish()
578 int iceland_smu_start(struct amdgpu_device *adev) in iceland_smu_start() argument
582 result = iceland_smu_upload_firmware_image(adev); in iceland_smu_start()
585 result = iceland_smu_start_smc(adev); in iceland_smu_start()
589 return iceland_smu_request_load_fw(adev); in iceland_smu_start()
598 int iceland_smu_init(struct amdgpu_device *adev) in iceland_smu_init() argument
602 struct amdgpu_bo **toc_buf = &adev->smu.toc_buf; in iceland_smu_init()
612 if (adev->firmware.smu_load) in iceland_smu_init()
613 amdgpu_ucode_init_bo(adev); in iceland_smu_init()
615 adev->smu.priv = private; in iceland_smu_init()
616 adev->smu.fw_flags = 0; in iceland_smu_init()
619 ret = amdgpu_bo_create(adev, image_size, PAGE_SIZE, in iceland_smu_init()
629 ret = amdgpu_bo_reserve(adev->smu.toc_buf, false); in iceland_smu_init()
631 amdgpu_bo_unref(&adev->smu.toc_buf); in iceland_smu_init()
636 ret = amdgpu_bo_pin(adev->smu.toc_buf, AMDGPU_GEM_DOMAIN_VRAM, &mc_addr); in iceland_smu_init()
638 amdgpu_bo_unreserve(adev->smu.toc_buf); in iceland_smu_init()
639 amdgpu_bo_unref(&adev->smu.toc_buf); in iceland_smu_init()
646 amdgpu_bo_unreserve(adev->smu.toc_buf); in iceland_smu_init()
647 amdgpu_bo_unref(&adev->smu.toc_buf); in iceland_smu_init()
652 amdgpu_bo_unreserve(adev->smu.toc_buf); in iceland_smu_init()
657 adev->smu.smumgr_funcs = &iceland_smumgr_funcs; in iceland_smu_init()
662 int iceland_smu_fini(struct amdgpu_device *adev) in iceland_smu_fini() argument
664 amdgpu_bo_unref(&adev->smu.toc_buf); in iceland_smu_fini()
665 kfree(adev->smu.priv); in iceland_smu_fini()
666 adev->smu.priv = NULL; in iceland_smu_fini()
667 if (adev->firmware.fw_buf) in iceland_smu_fini()
668 amdgpu_ucode_fini_bo(adev); in iceland_smu_fini()