diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/2426-drm-amd-display-Read-soc_bounding_box-from-gpu_info-.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/2426-drm-amd-display-Read-soc_bounding_box-from-gpu_info-.patch | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/2426-drm-amd-display-Read-soc_bounding_box-from-gpu_info-.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/2426-drm-amd-display-Read-soc_bounding_box-from-gpu_info-.patch new file mode 100644 index 00000000..1ce0cbe7 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/2426-drm-amd-display-Read-soc_bounding_box-from-gpu_info-.patch @@ -0,0 +1,189 @@ +From fc46bb84db5cd2f7ce1b707d225eda813f219b08 Mon Sep 17 00:00:00 2001 +From: Harry Wentland <harry.wentland@amd.com> +Date: Tue, 7 May 2019 14:34:21 -0500 +Subject: [PATCH 2426/2940] drm/amd/display: Read soc_bounding_box from + gpu_info (v2) + +[WHY] +We don't want to expose sensitive ASIC information before ASIC release. + +[HOW] +Encode the soc_bounding_box in the gpu_info FW (for Linux) and read it +at driver load. + +v2: fix warning when CONFIG_DRM_AMD_DC_DCN2_0 is not set (Alex) + +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 10 ++- + drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 63 +++++++++++++++++++ + .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 + + .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 7 +++ + drivers/gpu/drm/amd/display/dc/dc.h | 9 +++ + 5 files changed, 91 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index 6e0a8ee492a5..98275e44ea80 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -1432,7 +1432,7 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) + adev->gfx.cu_info.max_scratch_slots_per_cu = + le32_to_cpu(gpu_info_fw->gc_max_scratch_slots_per_cu); + adev->gfx.cu_info.lds_size = le32_to_cpu(gpu_info_fw->gc_lds_size); +- if (hdr->version_minor == 1) { ++ if (hdr->version_minor >= 1) { + const struct gpu_info_firmware_v1_1 *gpu_info_fw = + (const struct gpu_info_firmware_v1_1 *)(adev->firmware.gpu_info_fw->data + + le32_to_cpu(hdr->header.ucode_array_offset_bytes)); +@@ -1441,6 +1441,14 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) + adev->gfx.config.num_packer_per_sc = + le32_to_cpu(gpu_info_fw->num_packer_per_sc); + } ++#ifdef CONFIG_DRM_AMD_DC_DCN2_0 ++ if (hdr->version_minor == 2) { ++ const struct gpu_info_firmware_v1_2 *gpu_info_fw = ++ (const struct gpu_info_firmware_v1_2 *)(adev->firmware.gpu_info_fw->data + ++ le32_to_cpu(hdr->header.ucode_array_offset_bytes)); ++ adev->dm.soc_bounding_box = &gpu_info_fw->soc_bounding_box; ++ } ++#endif + break; + } + default: +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h +index 07f035937650..52b024917075 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h +@@ -210,6 +210,69 @@ struct gpu_info_firmware_v1_1 { + uint32_t num_packer_per_sc; + }; + ++struct gpu_info_voltage_scaling_v1_0 { ++ int state; ++ uint32_t dscclk_mhz; ++ uint32_t dcfclk_mhz; ++ uint32_t socclk_mhz; ++ uint32_t dram_speed_mts; ++ uint32_t fabricclk_mhz; ++ uint32_t dispclk_mhz; ++ uint32_t phyclk_mhz; ++ uint32_t dppclk_mhz; ++}; ++ ++struct gpu_info_soc_bounding_box_v1_0 { ++ uint32_t sr_exit_time_us; ++ uint32_t sr_enter_plus_exit_time_us; ++ uint32_t urgent_latency_us; ++ uint32_t urgent_latency_pixel_data_only_us; ++ uint32_t urgent_latency_pixel_mixed_with_vm_data_us; ++ uint32_t urgent_latency_vm_data_only_us; ++ uint32_t writeback_latency_us; ++ uint32_t ideal_dram_bw_after_urgent_percent; ++ uint32_t pct_ideal_dram_sdp_bw_after_urgent_pixel_only; // PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelDataOnly ++ uint32_t pct_ideal_dram_sdp_bw_after_urgent_pixel_and_vm; ++ uint32_t pct_ideal_dram_sdp_bw_after_urgent_vm_only; ++ uint32_t max_avg_sdp_bw_use_normal_percent; ++ uint32_t max_avg_dram_bw_use_normal_percent; ++ unsigned int max_request_size_bytes; ++ uint32_t downspread_percent; ++ uint32_t dram_page_open_time_ns; ++ uint32_t dram_rw_turnaround_time_ns; ++ uint32_t dram_return_buffer_per_channel_bytes; ++ uint32_t dram_channel_width_bytes; ++ uint32_t fabric_datapath_to_dcn_data_return_bytes; ++ uint32_t dcn_downspread_percent; ++ uint32_t dispclk_dppclk_vco_speed_mhz; ++ uint32_t dfs_vco_period_ps; ++ unsigned int urgent_out_of_order_return_per_channel_pixel_only_bytes; ++ unsigned int urgent_out_of_order_return_per_channel_pixel_and_vm_bytes; ++ unsigned int urgent_out_of_order_return_per_channel_vm_only_bytes; ++ unsigned int round_trip_ping_latency_dcfclk_cycles; ++ unsigned int urgent_out_of_order_return_per_channel_bytes; ++ unsigned int channel_interleave_bytes; ++ unsigned int num_banks; ++ unsigned int num_chans; ++ unsigned int vmm_page_size_bytes; ++ uint32_t dram_clock_change_latency_us; ++ uint32_t writeback_dram_clock_change_latency_us; ++ unsigned int return_bus_width_bytes; ++ unsigned int voltage_override; ++ uint32_t xfc_bus_transport_time_us; ++ uint32_t xfc_xbuf_latency_tolerance_us; ++ int use_urgent_burst_bw; ++ unsigned int num_states; ++ struct gpu_info_voltage_scaling_v1_0 clock_limits[8]; ++}; ++ ++/* gpu info payload ++ * version_major=1, version_minor=1 */ ++struct gpu_info_firmware_v1_2 { ++ struct gpu_info_firmware_v1_1 v1_1; ++ struct gpu_info_soc_bounding_box_v1_0 soc_bounding_box; ++}; ++ + /* version_major=1, version_minor=0 */ + struct gpu_info_firmware_header_v1_0 { + struct common_firmware_header header; +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index d4935eb63584..b5ca4e99561e 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -557,6 +557,9 @@ static int amdgpu_dm_init(struct amdgpu_device *adev) + init_data.flags.fbc_support = true; + + init_data.flags.power_down_display_on_boot = true; ++#ifdef CONFIG_DRM_AMD_DC_DCN2_0 ++ init_data.soc_bounding_box = adev->dm.soc_bounding_box; ++#endif + + /* Display Core create. */ + adev->dm.dc = dc_create(&init_data); +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +index 715a2d66a0a7..7dbbf52d9df7 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +@@ -203,6 +203,13 @@ struct amdgpu_display_manager { + + const struct firmware *fw_dmcu; + uint32_t dmcu_fw_version; ++#ifdef CONFIG_DRM_AMD_DC_DCN2_0 ++ /** ++ * gpu_info FW provided soc bounding box struct or 0 if not ++ * available in FW ++ */ ++ const struct gpu_info_soc_bounding_box_v1_0 *soc_bounding_box; ++#endif + }; + + struct amdgpu_dm_connector { +diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h +index 2751b7541d5e..77313fc2ee6d 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc.h ++++ b/drivers/gpu/drm/amd/display/dc/dc.h +@@ -376,6 +376,7 @@ struct dc_bounding_box_overrides { + struct dc_state; + struct resource_pool; + struct dce_hwseq; ++struct gpu_info_soc_bounding_box_v1_0; + struct dc { + struct dc_versions versions; + struct dc_caps caps; +@@ -458,6 +459,14 @@ struct dc_init_data { + #endif + struct dc_config flags; + uint32_t log_mask; ++ ++#ifdef CONFIG_DRM_AMD_DC_DCN2_0 ++ /** ++ * gpu_info FW provided soc bounding box struct or 0 if not ++ * available in FW ++ */ ++ const struct gpu_info_soc_bounding_box_v1_0 *soc_bounding_box; ++#endif + }; + + struct dc_callback_init { +-- +2.17.1 + |