aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1586-drm-amd-display-Add-PSR-SMU-Interrupt-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1586-drm-amd-display-Add-PSR-SMU-Interrupt-support.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1586-drm-amd-display-Add-PSR-SMU-Interrupt-support.patch130
1 files changed, 130 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1586-drm-amd-display-Add-PSR-SMU-Interrupt-support.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1586-drm-amd-display-Add-PSR-SMU-Interrupt-support.patch
new file mode 100644
index 00000000..dfeff3e0
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1586-drm-amd-display-Add-PSR-SMU-Interrupt-support.patch
@@ -0,0 +1,130 @@
+From 0d7d54b6f28ce3c4af3239c0119f6c64f3ea106c Mon Sep 17 00:00:00 2001
+From: SivapiriyanKumarasamy <sivapiriyan.kumarasamy@amd.com>
+Date: Mon, 10 Sep 2018 18:59:42 -0400
+Subject: [PATCH 1586/2940] drm/amd/display: Add PSR SMU Interrupt support
+
+[WHY]
+We have new bios capabilities enabling s0i2 entry on SMU interrupt. We want
+this interrupt to be fired on PSR transitions such that we enter s0i2
+when entering PSR active.
+
+[HOW]
+Add code to send the SMU interrupt with the appropriate
+staticscreen flag when entering and exting PSR. Protect this
+code with a config flag since it currently impacts BL PWM.
+
+Signed-off-by: SivapiriyanKumarasamy <sivapiriyan.kumarasamy@amd.com>
+Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+Acked-by: Tony Cheng <Tony.Cheng@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dc_types.h | 3 ++-
+ drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c | 7 +++---
+ drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.h | 22 +++++++++----------
+ 3 files changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h b/drivers/gpu/drm/amd/display/dc/dc_types.h
+index 7d271a6f5b7b..2ed3687ab853 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc_types.h
++++ b/drivers/gpu/drm/amd/display/dc/dc_types.h
+@@ -559,9 +559,9 @@ struct psr_config {
+ unsigned char psr_version;
+ unsigned int psr_rfb_setup_time;
+ bool psr_exit_link_training_required;
+-
+ bool psr_frame_capture_indication_req;
+ unsigned int psr_sdp_transmit_line_num_deadline;
++ bool allow_smu_optimizations;
+ };
+
+ union dmcu_psr_level {
+@@ -663,6 +663,7 @@ struct psr_context {
+ * continuing powerd own
+ */
+ unsigned int frame_delay;
++ bool allow_smu_optimizations;
+ };
+
+ struct colorspace_transform {
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
+index 41e2e7897b4f..916628a5c895 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
+@@ -213,9 +213,6 @@ static bool dce_dmcu_setup_psr(struct dmcu *dmcu,
+ link->link_enc->funcs->psr_program_secondary_packet(link->link_enc,
+ psr_context->sdpTransmitLineNumDeadline);
+
+- if (psr_context->psr_level.bits.SKIP_SMU_NOTIFICATION)
+- REG_UPDATE(SMU_INTERRUPT_CONTROL, DC_SMU_INT_ENABLE, 1);
+-
+ /* waitDMCUReadyForCmd */
+ REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 0,
+ dmcu_wait_reg_ready_interval,
+@@ -594,7 +591,7 @@ static bool dcn10_dmcu_setup_psr(struct dmcu *dmcu,
+ link->link_enc->funcs->psr_program_secondary_packet(link->link_enc,
+ psr_context->sdpTransmitLineNumDeadline);
+
+- if (psr_context->psr_level.bits.SKIP_SMU_NOTIFICATION)
++ if (psr_context->allow_smu_optimizations)
+ REG_UPDATE(SMU_INTERRUPT_CONTROL, DC_SMU_INT_ENABLE, 1);
+
+ /* waitDMCUReadyForCmd */
+@@ -615,6 +612,7 @@ static bool dcn10_dmcu_setup_psr(struct dmcu *dmcu,
+ psr_context->psrFrameCaptureIndicationReq;
+ masterCmdData1.bits.aux_chan = psr_context->channel;
+ masterCmdData1.bits.aux_repeat = psr_context->aux_repeats;
++ masterCmdData1.bits.allow_smu_optimizations = psr_context->allow_smu_optimizations;
+ dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG1),
+ masterCmdData1.u32All);
+
+@@ -635,6 +633,7 @@ static bool dcn10_dmcu_setup_psr(struct dmcu *dmcu,
+ dm_write_reg(dmcu->ctx, REG(MASTER_COMM_DATA_REG3),
+ masterCmdData3.u32All);
+
++
+ /* setDMCUParam_Cmd */
+ REG_UPDATE(MASTER_COMM_CMD_REG,
+ MASTER_COMM_CMD_REG_BYTE0, PSR_SET);
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.h b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.h
+index c24c0e5ea44e..60ce56f60ae3 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.h
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.h
+@@ -199,16 +199,16 @@ struct dce_dmcu {
+ ******************************************************************/
+ union dce_dmcu_psr_config_data_reg1 {
+ struct {
+- unsigned int timehyst_frames:8; /*[7:0]*/
+- unsigned int hyst_lines:7; /*[14:8]*/
+- unsigned int rfb_update_auto_en:1; /*[15:15]*/
+- unsigned int dp_port_num:3; /*[18:16]*/
+- unsigned int dcp_sel:3; /*[21:19]*/
+- unsigned int phy_type:1; /*[22:22]*/
+- unsigned int frame_cap_ind:1; /*[23:23]*/
+- unsigned int aux_chan:3; /*[26:24]*/
+- unsigned int aux_repeat:4; /*[30:27]*/
+- unsigned int reserved:1; /*[31:31]*/
++ unsigned int timehyst_frames:8; /*[7:0]*/
++ unsigned int hyst_lines:7; /*[14:8]*/
++ unsigned int rfb_update_auto_en:1; /*[15:15]*/
++ unsigned int dp_port_num:3; /*[18:16]*/
++ unsigned int dcp_sel:3; /*[21:19]*/
++ unsigned int phy_type:1; /*[22:22]*/
++ unsigned int frame_cap_ind:1; /*[23:23]*/
++ unsigned int aux_chan:3; /*[26:24]*/
++ unsigned int aux_repeat:4; /*[30:27]*/
++ unsigned int allow_smu_optimizations:1; /*[31:31]*/
+ } bits;
+ unsigned int u32All;
+ };
+@@ -236,7 +236,7 @@ union dce_dmcu_psr_config_data_reg3 {
+ struct {
+ unsigned int psr_level:16; /*[15:0]*/
+ unsigned int link_rate:4; /*[19:16]*/
+- unsigned int reserved:12; /*[31:20]*/
++ unsigned int reserved:12; /*[31:20]*/
+ } bits;
+ unsigned int u32All;
+ };
+--
+2.17.1
+