aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0134-drm-amd-display-Support-64-bit-Polaris11-5k-VSR.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0134-drm-amd-display-Support-64-bit-Polaris11-5k-VSR.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0134-drm-amd-display-Support-64-bit-Polaris11-5k-VSR.patch166
1 files changed, 166 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0134-drm-amd-display-Support-64-bit-Polaris11-5k-VSR.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0134-drm-amd-display-Support-64-bit-Polaris11-5k-VSR.patch
new file mode 100644
index 00000000..81db281b
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0134-drm-amd-display-Support-64-bit-Polaris11-5k-VSR.patch
@@ -0,0 +1,166 @@
+From c17cfb464ad13a099ce2abb022fdf8857ab7ce61 Mon Sep 17 00:00:00 2001
+From: Joshua Aberback <Joshua.Aberback@amd.com>
+Date: Mon, 9 Jan 2017 16:26:58 -0500
+Subject: [PATCH 0134/4131] drm/amd/display: Support 64-bit Polaris11 5k VSR
+
+- pass full asic_id info into bw_calc_init instead of only version enum
+- 64-bit Polaris11 needs an extra microsecond of dmif_urgent_latency
+- add helper to convert from asic_id.family to bw_calc version enum
+
+Signed-off-by: Joshua Aberback <Joshua.Aberback@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../gpu/drm/amd/display/dc/calcs/bandwidth_calcs.c | 40 ++++++++++++++++++----
+ .../drm/amd/display/dc/dce110/dce110_resource.c | 5 +--
+ .../drm/amd/display/dc/dce112/dce112_resource.c | 2 +-
+ .../gpu/drm/amd/display/dc/inc/bandwidth_calcs.h | 2 +-
+ 4 files changed, 37 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/calcs/bandwidth_calcs.c b/drivers/gpu/drm/amd/display/dc/calcs/bandwidth_calcs.c
+index 3b0710e..aa18773 100644
+--- a/drivers/gpu/drm/amd/display/dc/calcs/bandwidth_calcs.c
++++ b/drivers/gpu/drm/amd/display/dc/calcs/bandwidth_calcs.c
+@@ -27,11 +27,34 @@
+ #include "bandwidth_calcs.h"
+ #include "dc.h"
+ #include "core_types.h"
++#include "dal_asic_id.h"
+
+ /*******************************************************************************
+ * Private Functions
+ ******************************************************************************/
+
++static enum bw_calcs_version bw_calcs_version_from_asic_id(struct hw_asic_id asic_id)
++{
++ switch (asic_id.chip_family) {
++
++ case FAMILY_CZ:
++ if (ASIC_REV_IS_STONEY(asic_id.hw_internal_rev))
++ return BW_CALCS_VERSION_STONEY;
++ return BW_CALCS_VERSION_CARRIZO;
++
++ case FAMILY_VI:
++ if (ASIC_REV_IS_POLARIS10_P(asic_id.hw_internal_rev))
++ // || ASIC_REV_IS_POLARIS12_V(asic_id.hw_internal_rev)
++ return BW_CALCS_VERSION_POLARIS10;
++ if (ASIC_REV_IS_POLARIS11_M(asic_id.hw_internal_rev))
++ return BW_CALCS_VERSION_POLARIS11;
++ return BW_CALCS_VERSION_INVALID;
++
++ default:
++ return BW_CALCS_VERSION_INVALID;
++ }
++}
++
+ static void calculate_bandwidth(
+ const struct bw_calcs_dceip *dceip,
+ const struct bw_calcs_vbios *vbios,
+@@ -1954,18 +1977,20 @@ static void calculate_bandwidth(
+ ******************************************************************************/
+ void bw_calcs_init(struct bw_calcs_dceip *bw_dceip,
+ struct bw_calcs_vbios *bw_vbios,
+- enum bw_calcs_version version)
++ struct hw_asic_id asic_id)
+ {
+ struct bw_calcs_dceip dceip = { 0 };
+ struct bw_calcs_vbios vbios = { 0 };
+
++ enum bw_calcs_version version = bw_calcs_version_from_asic_id(asic_id);
++
+ dceip.version = version;
+
+ switch (version) {
+ case BW_CALCS_VERSION_CARRIZO:
+ vbios.memory_type = bw_def_gddr5;
+ vbios.dram_channel_width_in_bits = 64;
+- vbios.number_of_dram_channels = 2;
++ vbios.number_of_dram_channels = asic_id.vram_width / vbios.dram_channel_width_in_bits;
+ vbios.number_of_dram_banks = 8;
+ vbios.high_yclk = bw_int_to_fixed(1600);
+ vbios.mid_yclk = bw_int_to_fixed(1600);
+@@ -2075,7 +2100,7 @@ void bw_calcs_init(struct bw_calcs_dceip *bw_dceip,
+ case BW_CALCS_VERSION_POLARIS10:
+ vbios.memory_type = bw_def_gddr5;
+ vbios.dram_channel_width_in_bits = 32;
+- vbios.number_of_dram_channels = 8;
++ vbios.number_of_dram_channels = asic_id.vram_width / vbios.dram_channel_width_in_bits;
+ vbios.number_of_dram_banks = 8;
+ vbios.high_yclk = bw_int_to_fixed(6000);
+ vbios.mid_yclk = bw_int_to_fixed(3200);
+@@ -2185,7 +2210,7 @@ void bw_calcs_init(struct bw_calcs_dceip *bw_dceip,
+ case BW_CALCS_VERSION_POLARIS11:
+ vbios.memory_type = bw_def_gddr5;
+ vbios.dram_channel_width_in_bits = 32;
+- vbios.number_of_dram_channels = 4;
++ vbios.number_of_dram_channels = asic_id.vram_width / vbios.dram_channel_width_in_bits;
+ vbios.number_of_dram_banks = 8;
+ vbios.high_yclk = bw_int_to_fixed(6000);
+ vbios.mid_yclk = bw_int_to_fixed(3200);
+@@ -2206,7 +2231,10 @@ void bw_calcs_init(struct bw_calcs_dceip *bw_dceip,
+ vbios.high_voltage_max_phyclk = bw_int_to_fixed(810);
+ vbios.data_return_bus_width = bw_int_to_fixed(32);
+ vbios.trc = bw_int_to_fixed(48);
+- vbios.dmifmc_urgent_latency = bw_int_to_fixed(3);
++ if (vbios.number_of_dram_channels == 2) // 64-bit
++ vbios.dmifmc_urgent_latency = bw_int_to_fixed(4);
++ else
++ vbios.dmifmc_urgent_latency = bw_int_to_fixed(3);
+ vbios.stutter_self_refresh_exit_latency = bw_int_to_fixed(5);
+ vbios.stutter_self_refresh_entry_latency = bw_int_to_fixed(0);
+ vbios.nbp_state_change_latency = bw_int_to_fixed(45);
+@@ -2295,7 +2323,7 @@ void bw_calcs_init(struct bw_calcs_dceip *bw_dceip,
+ case BW_CALCS_VERSION_STONEY:
+ vbios.memory_type = bw_def_gddr5;
+ vbios.dram_channel_width_in_bits = 64;
+- vbios.number_of_dram_channels = 1;
++ vbios.number_of_dram_channels = asic_id.vram_width / vbios.dram_channel_width_in_bits;
+ vbios.number_of_dram_banks = 8;
+ vbios.high_yclk = bw_int_to_fixed(1866);
+ vbios.mid_yclk = bw_int_to_fixed(1866);
+diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
+index ae90da8..968ee99 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
+@@ -1349,10 +1349,7 @@ static bool construct(
+ if (!dce110_hw_sequencer_construct(dc))
+ goto res_create_fail;
+
+- if (ASIC_REV_IS_STONEY(ctx->asic_id.hw_internal_rev))
+- bw_calcs_init(&dc->bw_dceip, &dc->bw_vbios, BW_CALCS_VERSION_STONEY);
+- else
+- bw_calcs_init(&dc->bw_dceip, &dc->bw_vbios, BW_CALCS_VERSION_CARRIZO);
++ bw_calcs_init(&dc->bw_dceip, &dc->bw_vbios, dc->ctx->asic_id);
+
+ bw_calcs_data_update_from_pplib(dc);
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c
+index c63030e..7fca2eb1 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c
+@@ -1394,7 +1394,7 @@ static bool construct(
+ if (!dce112_hw_sequencer_construct(dc))
+ goto res_create_fail;
+
+- bw_calcs_init(&dc->bw_dceip, &dc->bw_vbios, BW_CALCS_VERSION_POLARIS11);
++ bw_calcs_init(&dc->bw_dceip, &dc->bw_vbios, dc->ctx->asic_id);
+
+ bw_calcs_data_update_from_pplib(dc);
+
+diff --git a/drivers/gpu/drm/amd/display/dc/inc/bandwidth_calcs.h b/drivers/gpu/drm/amd/display/dc/inc/bandwidth_calcs.h
+index f9b871b..16f06fa 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/bandwidth_calcs.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/bandwidth_calcs.h
+@@ -483,7 +483,7 @@ struct bw_calcs_output {
+ void bw_calcs_init(
+ struct bw_calcs_dceip *bw_dceip,
+ struct bw_calcs_vbios *bw_vbios,
+- enum bw_calcs_version version);
++ struct hw_asic_id asic_id);
+
+ /**
+ * Return:
+--
+2.7.4
+