diff options
| author | Dave Airlie <airlied@redhat.com> | 2018-07-15 19:45:56 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2018-07-15 19:46:21 -0400 |
| commit | e280057762cd553a6863b7e3a73f5040ed879a15 (patch) | |
| tree | 83f236166cf775321afab3a9dcbbe3432c72d825 /drivers/gpu | |
| parent | f88147e4e1c2268a38aea326573f533652ee2314 (diff) | |
| parent | 02ce6ce2e1d07e31e8314c761a2caa087ea094ce (diff) | |
Merge branch 'drm-fixes-4.18' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
A few display and GPUVM fixes for 4.18.
A few more fixes for 4.18. Two display fixes and a fix to avoid a segfault if
the GPU does not power up properly on resume. These are on top of my pull
from earlier this week.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180712043820.2877-1-alexander.deucher@amd.com
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 20 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c | 10 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c | 27 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c | 19 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c | 23 |
9 files changed, 76 insertions, 41 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 82312a7bc6ad..9c85a90be293 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |||
| @@ -927,6 +927,10 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev, | |||
| 927 | r = amdgpu_bo_vm_update_pte(p); | 927 | r = amdgpu_bo_vm_update_pte(p); |
| 928 | if (r) | 928 | if (r) |
| 929 | return r; | 929 | return r; |
| 930 | |||
| 931 | r = reservation_object_reserve_shared(vm->root.base.bo->tbo.resv); | ||
| 932 | if (r) | ||
| 933 | return r; | ||
| 930 | } | 934 | } |
| 931 | 935 | ||
| 932 | return amdgpu_cs_sync_rings(p); | 936 | return amdgpu_cs_sync_rings(p); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index edf16b2b957a..fdcb498f6d19 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |||
| @@ -107,6 +107,9 @@ static void amdgpu_vm_bo_base_init(struct amdgpu_vm_bo_base *base, | |||
| 107 | return; | 107 | return; |
| 108 | list_add_tail(&base->bo_list, &bo->va); | 108 | list_add_tail(&base->bo_list, &bo->va); |
| 109 | 109 | ||
| 110 | if (bo->tbo.type == ttm_bo_type_kernel) | ||
| 111 | list_move(&base->vm_status, &vm->relocated); | ||
| 112 | |||
| 110 | if (bo->tbo.resv != vm->root.base.bo->tbo.resv) | 113 | if (bo->tbo.resv != vm->root.base.bo->tbo.resv) |
| 111 | return; | 114 | return; |
| 112 | 115 | ||
| @@ -468,7 +471,6 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device *adev, | |||
| 468 | pt->parent = amdgpu_bo_ref(parent->base.bo); | 471 | pt->parent = amdgpu_bo_ref(parent->base.bo); |
| 469 | 472 | ||
| 470 | amdgpu_vm_bo_base_init(&entry->base, vm, pt); | 473 | amdgpu_vm_bo_base_init(&entry->base, vm, pt); |
| 471 | list_move(&entry->base.vm_status, &vm->relocated); | ||
| 472 | } | 474 | } |
| 473 | 475 | ||
| 474 | if (level < AMDGPU_VM_PTB) { | 476 | if (level < AMDGPU_VM_PTB) { |
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c index 4304d9e408b8..ace9ad578ca0 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | |||
| @@ -83,22 +83,21 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, | |||
| 83 | enum i2c_mot_mode mot = (msg->request & DP_AUX_I2C_MOT) ? | 83 | enum i2c_mot_mode mot = (msg->request & DP_AUX_I2C_MOT) ? |
| 84 | I2C_MOT_TRUE : I2C_MOT_FALSE; | 84 | I2C_MOT_TRUE : I2C_MOT_FALSE; |
| 85 | enum ddc_result res; | 85 | enum ddc_result res; |
| 86 | uint32_t read_bytes = msg->size; | 86 | ssize_t read_bytes; |
| 87 | 87 | ||
| 88 | if (WARN_ON(msg->size > 16)) | 88 | if (WARN_ON(msg->size > 16)) |
| 89 | return -E2BIG; | 89 | return -E2BIG; |
| 90 | 90 | ||
| 91 | switch (msg->request & ~DP_AUX_I2C_MOT) { | 91 | switch (msg->request & ~DP_AUX_I2C_MOT) { |
| 92 | case DP_AUX_NATIVE_READ: | 92 | case DP_AUX_NATIVE_READ: |
| 93 | res = dal_ddc_service_read_dpcd_data( | 93 | read_bytes = dal_ddc_service_read_dpcd_data( |
| 94 | TO_DM_AUX(aux)->ddc_service, | 94 | TO_DM_AUX(aux)->ddc_service, |
| 95 | false, | 95 | false, |
| 96 | I2C_MOT_UNDEF, | 96 | I2C_MOT_UNDEF, |
| 97 | msg->address, | 97 | msg->address, |
| 98 | msg->buffer, | 98 | msg->buffer, |
| 99 | msg->size, | 99 | msg->size); |
| 100 | &read_bytes); | 100 | return read_bytes; |
| 101 | break; | ||
| 102 | case DP_AUX_NATIVE_WRITE: | 101 | case DP_AUX_NATIVE_WRITE: |
| 103 | res = dal_ddc_service_write_dpcd_data( | 102 | res = dal_ddc_service_write_dpcd_data( |
| 104 | TO_DM_AUX(aux)->ddc_service, | 103 | TO_DM_AUX(aux)->ddc_service, |
| @@ -109,15 +108,14 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, | |||
| 109 | msg->size); | 108 | msg->size); |
| 110 | break; | 109 | break; |
| 111 | case DP_AUX_I2C_READ: | 110 | case DP_AUX_I2C_READ: |
| 112 | res = dal_ddc_service_read_dpcd_data( | 111 | read_bytes = dal_ddc_service_read_dpcd_data( |
| 113 | TO_DM_AUX(aux)->ddc_service, | 112 | TO_DM_AUX(aux)->ddc_service, |
| 114 | true, | 113 | true, |
| 115 | mot, | 114 | mot, |
| 116 | msg->address, | 115 | msg->address, |
| 117 | msg->buffer, | 116 | msg->buffer, |
| 118 | msg->size, | 117 | msg->size); |
| 119 | &read_bytes); | 118 | return read_bytes; |
| 120 | break; | ||
| 121 | case DP_AUX_I2C_WRITE: | 119 | case DP_AUX_I2C_WRITE: |
| 122 | res = dal_ddc_service_write_dpcd_data( | 120 | res = dal_ddc_service_write_dpcd_data( |
| 123 | TO_DM_AUX(aux)->ddc_service, | 121 | TO_DM_AUX(aux)->ddc_service, |
| @@ -139,9 +137,7 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, | |||
| 139 | r == DDC_RESULT_SUCESSFULL); | 137 | r == DDC_RESULT_SUCESSFULL); |
| 140 | #endif | 138 | #endif |
| 141 | 139 | ||
| 142 | if (res != DDC_RESULT_SUCESSFULL) | 140 | return msg->size; |
| 143 | return -EIO; | ||
| 144 | return read_bytes; | ||
| 145 | } | 141 | } |
| 146 | 142 | ||
| 147 | static enum drm_connector_status | 143 | static enum drm_connector_status |
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c index 5a3346124a01..5a2e952c5bea 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c | |||
| @@ -255,8 +255,9 @@ static void pp_to_dc_clock_levels_with_latency( | |||
| 255 | DC_DECODE_PP_CLOCK_TYPE(dc_clk_type)); | 255 | DC_DECODE_PP_CLOCK_TYPE(dc_clk_type)); |
| 256 | 256 | ||
| 257 | for (i = 0; i < clk_level_info->num_levels; i++) { | 257 | for (i = 0; i < clk_level_info->num_levels; i++) { |
| 258 | DRM_DEBUG("DM_PPLIB:\t %d\n", pp_clks->data[i].clocks_in_khz); | 258 | DRM_DEBUG("DM_PPLIB:\t %d in 10kHz\n", pp_clks->data[i].clocks_in_khz); |
| 259 | clk_level_info->data[i].clocks_in_khz = pp_clks->data[i].clocks_in_khz; | 259 | /* translate 10kHz to kHz */ |
| 260 | clk_level_info->data[i].clocks_in_khz = pp_clks->data[i].clocks_in_khz * 10; | ||
| 260 | clk_level_info->data[i].latency_in_us = pp_clks->data[i].latency_in_us; | 261 | clk_level_info->data[i].latency_in_us = pp_clks->data[i].latency_in_us; |
| 261 | } | 262 | } |
| 262 | } | 263 | } |
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c index ae48d603ebd6..49c2face1e7a 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c | |||
| @@ -629,14 +629,13 @@ bool dal_ddc_service_query_ddc_data( | |||
| 629 | return ret; | 629 | return ret; |
| 630 | } | 630 | } |
| 631 | 631 | ||
| 632 | enum ddc_result dal_ddc_service_read_dpcd_data( | 632 | ssize_t dal_ddc_service_read_dpcd_data( |
| 633 | struct ddc_service *ddc, | 633 | struct ddc_service *ddc, |
| 634 | bool i2c, | 634 | bool i2c, |
| 635 | enum i2c_mot_mode mot, | 635 | enum i2c_mot_mode mot, |
| 636 | uint32_t address, | 636 | uint32_t address, |
| 637 | uint8_t *data, | 637 | uint8_t *data, |
| 638 | uint32_t len, | 638 | uint32_t len) |
| 639 | uint32_t *read) | ||
| 640 | { | 639 | { |
| 641 | struct aux_payload read_payload = { | 640 | struct aux_payload read_payload = { |
| 642 | .i2c_over_aux = i2c, | 641 | .i2c_over_aux = i2c, |
| @@ -653,8 +652,6 @@ enum ddc_result dal_ddc_service_read_dpcd_data( | |||
| 653 | .mot = mot | 652 | .mot = mot |
| 654 | }; | 653 | }; |
| 655 | 654 | ||
| 656 | *read = 0; | ||
| 657 | |||
| 658 | if (len > DEFAULT_AUX_MAX_DATA_SIZE) { | 655 | if (len > DEFAULT_AUX_MAX_DATA_SIZE) { |
| 659 | BREAK_TO_DEBUGGER(); | 656 | BREAK_TO_DEBUGGER(); |
| 660 | return DDC_RESULT_FAILED_INVALID_OPERATION; | 657 | return DDC_RESULT_FAILED_INVALID_OPERATION; |
| @@ -664,8 +661,7 @@ enum ddc_result dal_ddc_service_read_dpcd_data( | |||
| 664 | ddc->ctx->i2caux, | 661 | ddc->ctx->i2caux, |
| 665 | ddc->ddc_pin, | 662 | ddc->ddc_pin, |
| 666 | &command)) { | 663 | &command)) { |
| 667 | *read = command.payloads->length; | 664 | return (ssize_t)command.payloads->length; |
| 668 | return DDC_RESULT_SUCESSFULL; | ||
| 669 | } | 665 | } |
| 670 | 666 | ||
| 671 | return DDC_RESULT_FAILED_OPERATION; | 667 | return DDC_RESULT_FAILED_OPERATION; |
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c b/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c index b235a75355b8..bae752332a9f 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c | |||
| @@ -741,6 +741,29 @@ static struct mem_input_funcs dce_mi_funcs = { | |||
| 741 | .mem_input_is_flip_pending = dce_mi_is_flip_pending | 741 | .mem_input_is_flip_pending = dce_mi_is_flip_pending |
| 742 | }; | 742 | }; |
| 743 | 743 | ||
| 744 | static struct mem_input_funcs dce112_mi_funcs = { | ||
| 745 | .mem_input_program_display_marks = dce112_mi_program_display_marks, | ||
| 746 | .allocate_mem_input = dce_mi_allocate_dmif, | ||
| 747 | .free_mem_input = dce_mi_free_dmif, | ||
| 748 | .mem_input_program_surface_flip_and_addr = | ||
| 749 | dce_mi_program_surface_flip_and_addr, | ||
| 750 | .mem_input_program_pte_vm = dce_mi_program_pte_vm, | ||
| 751 | .mem_input_program_surface_config = | ||
| 752 | dce_mi_program_surface_config, | ||
| 753 | .mem_input_is_flip_pending = dce_mi_is_flip_pending | ||
| 754 | }; | ||
| 755 | |||
| 756 | static struct mem_input_funcs dce120_mi_funcs = { | ||
| 757 | .mem_input_program_display_marks = dce120_mi_program_display_marks, | ||
| 758 | .allocate_mem_input = dce_mi_allocate_dmif, | ||
| 759 | .free_mem_input = dce_mi_free_dmif, | ||
| 760 | .mem_input_program_surface_flip_and_addr = | ||
| 761 | dce_mi_program_surface_flip_and_addr, | ||
| 762 | .mem_input_program_pte_vm = dce_mi_program_pte_vm, | ||
| 763 | .mem_input_program_surface_config = | ||
| 764 | dce_mi_program_surface_config, | ||
| 765 | .mem_input_is_flip_pending = dce_mi_is_flip_pending | ||
| 766 | }; | ||
| 744 | 767 | ||
| 745 | void dce_mem_input_construct( | 768 | void dce_mem_input_construct( |
| 746 | struct dce_mem_input *dce_mi, | 769 | struct dce_mem_input *dce_mi, |
| @@ -769,7 +792,7 @@ void dce112_mem_input_construct( | |||
| 769 | const struct dce_mem_input_mask *mi_mask) | 792 | const struct dce_mem_input_mask *mi_mask) |
| 770 | { | 793 | { |
| 771 | dce_mem_input_construct(dce_mi, ctx, inst, regs, mi_shift, mi_mask); | 794 | dce_mem_input_construct(dce_mi, ctx, inst, regs, mi_shift, mi_mask); |
| 772 | dce_mi->base.funcs->mem_input_program_display_marks = dce112_mi_program_display_marks; | 795 | dce_mi->base.funcs = &dce112_mi_funcs; |
| 773 | } | 796 | } |
| 774 | 797 | ||
| 775 | void dce120_mem_input_construct( | 798 | void dce120_mem_input_construct( |
| @@ -781,5 +804,5 @@ void dce120_mem_input_construct( | |||
| 781 | const struct dce_mem_input_mask *mi_mask) | 804 | const struct dce_mem_input_mask *mi_mask) |
| 782 | { | 805 | { |
| 783 | dce_mem_input_construct(dce_mi, ctx, inst, regs, mi_shift, mi_mask); | 806 | dce_mem_input_construct(dce_mi, ctx, inst, regs, mi_shift, mi_mask); |
| 784 | dce_mi->base.funcs->mem_input_program_display_marks = dce120_mi_program_display_marks; | 807 | dce_mi->base.funcs = &dce120_mi_funcs; |
| 785 | } | 808 | } |
diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c index 38ec0d609297..344dd2e69e7c 100644 --- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c | |||
| @@ -678,9 +678,22 @@ bool dce100_validate_bandwidth( | |||
| 678 | struct dc *dc, | 678 | struct dc *dc, |
| 679 | struct dc_state *context) | 679 | struct dc_state *context) |
| 680 | { | 680 | { |
| 681 | /* TODO implement when needed but for now hardcode max value*/ | 681 | int i; |
| 682 | context->bw.dce.dispclk_khz = 681000; | 682 | bool at_least_one_pipe = false; |
| 683 | context->bw.dce.yclk_khz = 250000 * MEMORY_TYPE_MULTIPLIER; | 683 | |
| 684 | for (i = 0; i < dc->res_pool->pipe_count; i++) { | ||
| 685 | if (context->res_ctx.pipe_ctx[i].stream) | ||
| 686 | at_least_one_pipe = true; | ||
| 687 | } | ||
| 688 | |||
| 689 | if (at_least_one_pipe) { | ||
| 690 | /* TODO implement when needed but for now hardcode max value*/ | ||
| 691 | context->bw.dce.dispclk_khz = 681000; | ||
| 692 | context->bw.dce.yclk_khz = 250000 * MEMORY_TYPE_MULTIPLIER; | ||
| 693 | } else { | ||
| 694 | context->bw.dce.dispclk_khz = 0; | ||
| 695 | context->bw.dce.yclk_khz = 0; | ||
| 696 | } | ||
| 684 | 697 | ||
| 685 | return true; | 698 | return true; |
| 686 | } | 699 | } |
diff --git a/drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h b/drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h index 30b3a08b91be..090b7a8dd67b 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h +++ b/drivers/gpu/drm/amd/display/dc/inc/dc_link_ddc.h | |||
| @@ -102,14 +102,13 @@ bool dal_ddc_service_query_ddc_data( | |||
| 102 | uint8_t *read_buf, | 102 | uint8_t *read_buf, |
| 103 | uint32_t read_size); | 103 | uint32_t read_size); |
| 104 | 104 | ||
| 105 | enum ddc_result dal_ddc_service_read_dpcd_data( | 105 | ssize_t dal_ddc_service_read_dpcd_data( |
| 106 | struct ddc_service *ddc, | 106 | struct ddc_service *ddc, |
| 107 | bool i2c, | 107 | bool i2c, |
| 108 | enum i2c_mot_mode mot, | 108 | enum i2c_mot_mode mot, |
| 109 | uint32_t address, | 109 | uint32_t address, |
| 110 | uint8_t *data, | 110 | uint8_t *data, |
| 111 | uint32_t len, | 111 | uint32_t len); |
| 112 | uint32_t *read); | ||
| 113 | 112 | ||
| 114 | enum ddc_result dal_ddc_service_write_dpcd_data( | 113 | enum ddc_result dal_ddc_service_write_dpcd_data( |
| 115 | struct ddc_service *ddc, | 114 | struct ddc_service *ddc, |
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c index d644a9bb9078..9f407c48d4f0 100644 --- a/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c +++ b/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c | |||
| @@ -381,6 +381,7 @@ int smu7_request_smu_load_fw(struct pp_hwmgr *hwmgr) | |||
| 381 | uint32_t fw_to_load; | 381 | uint32_t fw_to_load; |
| 382 | int result = 0; | 382 | int result = 0; |
| 383 | struct SMU_DRAMData_TOC *toc; | 383 | struct SMU_DRAMData_TOC *toc; |
| 384 | uint32_t num_entries = 0; | ||
| 384 | 385 | ||
| 385 | if (!hwmgr->reload_fw) { | 386 | if (!hwmgr->reload_fw) { |
| 386 | pr_info("skip reloading...\n"); | 387 | pr_info("skip reloading...\n"); |
| @@ -422,41 +423,41 @@ int smu7_request_smu_load_fw(struct pp_hwmgr *hwmgr) | |||
| 422 | } | 423 | } |
| 423 | 424 | ||
| 424 | toc = (struct SMU_DRAMData_TOC *)smu_data->header; | 425 | toc = (struct SMU_DRAMData_TOC *)smu_data->header; |
| 425 | toc->num_entries = 0; | ||
| 426 | toc->structure_version = 1; | 426 | toc->structure_version = 1; |
| 427 | 427 | ||
| 428 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, | 428 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, |
| 429 | UCODE_ID_RLC_G, &toc->entry[toc->num_entries++]), | 429 | UCODE_ID_RLC_G, &toc->entry[num_entries++]), |
| 430 | "Failed to Get Firmware Entry.", return -EINVAL); | 430 | "Failed to Get Firmware Entry.", return -EINVAL); |
| 431 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, | 431 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, |
| 432 | UCODE_ID_CP_CE, &toc->entry[toc->num_entries++]), | 432 | UCODE_ID_CP_CE, &toc->entry[num_entries++]), |
| 433 | "Failed to Get Firmware Entry.", return -EINVAL); | 433 | "Failed to Get Firmware Entry.", return -EINVAL); |
| 434 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, | 434 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, |
| 435 | UCODE_ID_CP_PFP, &toc->entry[toc->num_entries++]), | 435 | UCODE_ID_CP_PFP, &toc->entry[num_entries++]), |
| 436 | "Failed to Get Firmware Entry.", return -EINVAL); | 436 | "Failed to Get Firmware Entry.", return -EINVAL); |
| 437 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, | 437 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, |
| 438 | UCODE_ID_CP_ME, &toc->entry[toc->num_entries++]), | 438 | UCODE_ID_CP_ME, &toc->entry[num_entries++]), |
| 439 | "Failed to Get Firmware Entry.", return -EINVAL); | 439 | "Failed to Get Firmware Entry.", return -EINVAL); |
| 440 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, | 440 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, |
| 441 | UCODE_ID_CP_MEC, &toc->entry[toc->num_entries++]), | 441 | UCODE_ID_CP_MEC, &toc->entry[num_entries++]), |
| 442 | "Failed to Get Firmware Entry.", return -EINVAL); | 442 | "Failed to Get Firmware Entry.", return -EINVAL); |
| 443 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, | 443 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, |
| 444 | UCODE_ID_CP_MEC_JT1, &toc->entry[toc->num_entries++]), | 444 | UCODE_ID_CP_MEC_JT1, &toc->entry[num_entries++]), |
| 445 | "Failed to Get Firmware Entry.", return -EINVAL); | 445 | "Failed to Get Firmware Entry.", return -EINVAL); |
| 446 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, | 446 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, |
| 447 | UCODE_ID_CP_MEC_JT2, &toc->entry[toc->num_entries++]), | 447 | UCODE_ID_CP_MEC_JT2, &toc->entry[num_entries++]), |
| 448 | "Failed to Get Firmware Entry.", return -EINVAL); | 448 | "Failed to Get Firmware Entry.", return -EINVAL); |
| 449 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, | 449 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, |
| 450 | UCODE_ID_SDMA0, &toc->entry[toc->num_entries++]), | 450 | UCODE_ID_SDMA0, &toc->entry[num_entries++]), |
| 451 | "Failed to Get Firmware Entry.", return -EINVAL); | 451 | "Failed to Get Firmware Entry.", return -EINVAL); |
| 452 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, | 452 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, |
| 453 | UCODE_ID_SDMA1, &toc->entry[toc->num_entries++]), | 453 | UCODE_ID_SDMA1, &toc->entry[num_entries++]), |
| 454 | "Failed to Get Firmware Entry.", return -EINVAL); | 454 | "Failed to Get Firmware Entry.", return -EINVAL); |
| 455 | if (!hwmgr->not_vf) | 455 | if (!hwmgr->not_vf) |
| 456 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, | 456 | PP_ASSERT_WITH_CODE(0 == smu7_populate_single_firmware_entry(hwmgr, |
| 457 | UCODE_ID_MEC_STORAGE, &toc->entry[toc->num_entries++]), | 457 | UCODE_ID_MEC_STORAGE, &toc->entry[num_entries++]), |
| 458 | "Failed to Get Firmware Entry.", return -EINVAL); | 458 | "Failed to Get Firmware Entry.", return -EINVAL); |
| 459 | 459 | ||
| 460 | toc->num_entries = num_entries; | ||
| 460 | smu7_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_DRV_DRAM_ADDR_HI, upper_32_bits(smu_data->header_buffer.mc_addr)); | 461 | smu7_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_DRV_DRAM_ADDR_HI, upper_32_bits(smu_data->header_buffer.mc_addr)); |
| 461 | smu7_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_DRV_DRAM_ADDR_LO, lower_32_bits(smu_data->header_buffer.mc_addr)); | 462 | smu7_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_DRV_DRAM_ADDR_LO, lower_32_bits(smu_data->header_buffer.mc_addr)); |
| 462 | 463 | ||
