aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4333-drm-amd-powerplay-update-process-pptables.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4333-drm-amd-powerplay-update-process-pptables.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4333-drm-amd-powerplay-update-process-pptables.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4333-drm-amd-powerplay-update-process-pptables.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4333-drm-amd-powerplay-update-process-pptables.patch
new file mode 100644
index 00000000..3d7f7647
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4333-drm-amd-powerplay-update-process-pptables.patch
@@ -0,0 +1,91 @@
+From 8b6a86ba907c75c31229df0f3ec4ce25b381376e Mon Sep 17 00:00:00 2001
+From: Eric Huang <JinHuiEric.Huang@amd.com>
+Date: Fri, 17 Nov 2017 11:31:09 -0500
+Subject: [PATCH 4333/5725] drm/amd/powerplay: update process pptables
+
+Add functionality to fetch gpio table from vbios.
+
+Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../amd/powerplay/hwmgr/process_pptables_v1_0.c | 37 ++++++++++++++++++++++
+ 1 file changed, 37 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c b/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c
+index 8516516..f0d48b1 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c
+@@ -728,6 +728,32 @@ static int get_mm_clock_voltage_table(
+ return 0;
+ }
+
++static int get_gpio_table(struct pp_hwmgr *hwmgr,
++ struct phm_ppt_v1_gpio_table **pp_tonga_gpio_table,
++ const ATOM_Tonga_GPIO_Table *atom_gpio_table)
++{
++ uint32_t table_size;
++ struct phm_ppt_v1_gpio_table *pp_gpio_table;
++ struct phm_ppt_v1_information *pp_table_information =
++ (struct phm_ppt_v1_information *)(hwmgr->pptable);
++
++ table_size = sizeof(struct phm_ppt_v1_gpio_table);
++ pp_gpio_table = kzalloc(table_size, GFP_KERNEL);
++ if (!pp_gpio_table)
++ return -ENOMEM;
++
++ if (pp_table_information->vdd_dep_on_sclk->count <
++ atom_gpio_table->ucVRHotTriggeredSclkDpmIndex)
++ PP_ASSERT_WITH_CODE(false,
++ "SCLK DPM index for VRHot cannot exceed the total sclk level count!",);
++ else
++ pp_gpio_table->vrhot_triggered_sclk_dpm_index =
++ atom_gpio_table->ucVRHotTriggeredSclkDpmIndex;
++
++ *pp_tonga_gpio_table = pp_gpio_table;
++
++ return 0;
++}
+ /**
+ * Private Function used during initialization.
+ * Initialize clock voltage dependency
+@@ -761,11 +787,15 @@ static int init_clock_voltage_dependency(
+ const PPTable_Generic_SubTable_Header *pcie_table =
+ (const PPTable_Generic_SubTable_Header *)(((unsigned long) powerplay_table) +
+ le16_to_cpu(powerplay_table->usPCIETableOffset));
++ const ATOM_Tonga_GPIO_Table *gpio_table =
++ (const ATOM_Tonga_GPIO_Table *)(((unsigned long) powerplay_table) +
++ le16_to_cpu(powerplay_table->usGPIOTableOffset));
+
+ pp_table_information->vdd_dep_on_sclk = NULL;
+ pp_table_information->vdd_dep_on_mclk = NULL;
+ pp_table_information->mm_dep_table = NULL;
+ pp_table_information->pcie_table = NULL;
++ pp_table_information->gpio_table = NULL;
+
+ if (powerplay_table->usMMDependencyTableOffset != 0)
+ result = get_mm_clock_voltage_table(hwmgr,
+@@ -810,6 +840,10 @@ static int init_clock_voltage_dependency(
+ result = get_valid_clk(hwmgr, &pp_table_information->valid_sclk_values,
+ pp_table_information->vdd_dep_on_sclk);
+
++ if (!result && gpio_table)
++ result = get_gpio_table(hwmgr, &pp_table_information->gpio_table,
++ gpio_table);
++
+ return result;
+ }
+
+@@ -1116,6 +1150,9 @@ static int pp_tables_v1_0_uninitialize(struct pp_hwmgr *hwmgr)
+ kfree(pp_table_information->pcie_table);
+ pp_table_information->pcie_table = NULL;
+
++ kfree(pp_table_information->gpio_table);
++ pp_table_information->gpio_table = NULL;
++
+ kfree(hwmgr->pptable);
+ hwmgr->pptable = NULL;
+
+--
+2.7.4
+