Message ID | 20241106174041.860223-1-suraj.kandpal@intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | drm/i915/hdcp: Handle HDCP Line Rekeying for HDCP 1.4 | expand |
Hi Suraj, kernel test robot noticed the following build warnings: [auto build test WARNING on drm-intel/for-linux-next] [also build test WARNING on next-20241106] [cannot apply to linus/master drm-intel/for-linux-next-fixes drm-tip/drm-tip v6.12-rc6] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Suraj-Kandpal/drm-i915-hdcp-Handle-HDCP-Line-Rekeying-for-HDCP-1-4/20241107-015848 base: git://anongit.freedesktop.org/drm-intel for-linux-next patch link: https://lore.kernel.org/r/20241106174041.860223-1-suraj.kandpal%40intel.com patch subject: [PATCH] drm/i915/hdcp: Handle HDCP Line Rekeying for HDCP 1.4 config: i386-defconfig (https://download.01.org/0day-ci/archive/20241107/202411070920.hut0uhH0-lkp@intel.com/config) compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241107/202411070920.hut0uhH0-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202411070920.hut0uhH0-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from drivers/gpu/drm/i915/display/intel_hdcp.c:12: In file included from include/linux/i2c.h:19: In file included from include/linux/regulator/consumer.h:35: In file included from include/linux/suspend.h:5: In file included from include/linux/swap.h:9: In file included from include/linux/memcontrol.h:21: In file included from include/linux/mm.h:2213: include/linux/vmstat.h:518:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 518 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_" | ~~~~~~~~~~~ ^ ~~~ drivers/gpu/drm/i915/display/intel_hdcp.c:54:13: warning: variable 'rekey_bit' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] 54 | } else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) { | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_display_device.h:211:2: note: expanded from macro 'IS_DISPLAY_VERx100_STEP' 211 | (IS_DISPLAY_VERx100((__i915), (ipver), (ipver)) && \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 212 | IS_DISPLAY_STEP((__i915), (from), (until))) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_hdcp.c:59:35: note: uninitialized use occurs here 59 | intel_de_rmw(display, rekey_reg, rekey_bit, enable ? 0 : rekey_bit); | ^~~~~~~~~ drivers/gpu/drm/i915/display/intel_de.h:109:67: note: expanded from macro 'intel_de_rmw' 109 | #define intel_de_rmw(p,...) __intel_de_rmw(__to_intel_display(p), __VA_ARGS__) | ^~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_hdcp.c:54:9: note: remove the 'if' if its condition is always true 54 | } else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) { | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_hdcp.c:54:13: warning: variable 'rekey_bit' is used uninitialized whenever '&&' condition is false [-Wsometimes-uninitialized] 54 | } else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) { | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_display_device.h:211:3: note: expanded from macro 'IS_DISPLAY_VERx100_STEP' 211 | (IS_DISPLAY_VERx100((__i915), (ipver), (ipver)) && \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_display_device.h:190:49: note: expanded from macro 'IS_DISPLAY_VERx100' 190 | #define IS_DISPLAY_VERx100(__i915, from, until) ( \ | ^~~ 191 | BUILD_BUG_ON_ZERO((from) < 200) + \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 192 | (DISPLAY_VERx100(__i915) >= (from) && \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 193 | DISPLAY_VERx100(__i915) <= (until))) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_hdcp.c:59:35: note: uninitialized use occurs here 59 | intel_de_rmw(display, rekey_reg, rekey_bit, enable ? 0 : rekey_bit); | ^~~~~~~~~ drivers/gpu/drm/i915/display/intel_de.h:109:67: note: expanded from macro 'intel_de_rmw' 109 | #define intel_de_rmw(p,...) __intel_de_rmw(__to_intel_display(p), __VA_ARGS__) | ^~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_hdcp.c:54:13: note: remove the '&&' if its condition is always true 54 | } else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) { | ^ drivers/gpu/drm/i915/display/intel_display_device.h:211:3: note: expanded from macro 'IS_DISPLAY_VERx100_STEP' 211 | (IS_DISPLAY_VERx100((__i915), (ipver), (ipver)) && \ | ^ drivers/gpu/drm/i915/display/intel_display_device.h:190:49: note: expanded from macro 'IS_DISPLAY_VERx100' 190 | #define IS_DISPLAY_VERx100(__i915, from, until) ( \ | ^ drivers/gpu/drm/i915/display/intel_hdcp.c:41:15: note: initialize the variable 'rekey_bit' to silence this warning 41 | u32 rekey_bit; | ^ | = 0 >> drivers/gpu/drm/i915/display/intel_hdcp.c:54:13: warning: variable 'rekey_reg' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] 54 | } else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) { | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_display_device.h:211:2: note: expanded from macro 'IS_DISPLAY_VERx100_STEP' 211 | (IS_DISPLAY_VERx100((__i915), (ipver), (ipver)) && \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 212 | IS_DISPLAY_STEP((__i915), (from), (until))) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_hdcp.c:59:24: note: uninitialized use occurs here 59 | intel_de_rmw(display, rekey_reg, rekey_bit, enable ? 0 : rekey_bit); | ^~~~~~~~~ drivers/gpu/drm/i915/display/intel_de.h:109:67: note: expanded from macro 'intel_de_rmw' 109 | #define intel_de_rmw(p,...) __intel_de_rmw(__to_intel_display(p), __VA_ARGS__) | ^~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_hdcp.c:54:9: note: remove the 'if' if its condition is always true 54 | } else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) { | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> drivers/gpu/drm/i915/display/intel_hdcp.c:54:13: warning: variable 'rekey_reg' is used uninitialized whenever '&&' condition is false [-Wsometimes-uninitialized] 54 | } else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) { | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_display_device.h:211:3: note: expanded from macro 'IS_DISPLAY_VERx100_STEP' 211 | (IS_DISPLAY_VERx100((__i915), (ipver), (ipver)) && \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_display_device.h:190:49: note: expanded from macro 'IS_DISPLAY_VERx100' 190 | #define IS_DISPLAY_VERx100(__i915, from, until) ( \ | ^~~ 191 | BUILD_BUG_ON_ZERO((from) < 200) + \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 192 | (DISPLAY_VERx100(__i915) >= (from) && \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 193 | DISPLAY_VERx100(__i915) <= (until))) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_hdcp.c:59:24: note: uninitialized use occurs here 59 | intel_de_rmw(display, rekey_reg, rekey_bit, enable ? 0 : rekey_bit); | ^~~~~~~~~ drivers/gpu/drm/i915/display/intel_de.h:109:67: note: expanded from macro 'intel_de_rmw' 109 | #define intel_de_rmw(p,...) __intel_de_rmw(__to_intel_display(p), __VA_ARGS__) | ^~~~~~~~~~~ drivers/gpu/drm/i915/display/intel_hdcp.c:54:13: note: remove the '&&' if its condition is always true 54 | } else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) { | ^ drivers/gpu/drm/i915/display/intel_display_device.h:211:3: note: expanded from macro 'IS_DISPLAY_VERx100_STEP' 211 | (IS_DISPLAY_VERx100((__i915), (ipver), (ipver)) && \ | ^ drivers/gpu/drm/i915/display/intel_display_device.h:190:49: note: expanded from macro 'IS_DISPLAY_VERx100' 190 | #define IS_DISPLAY_VERx100(__i915, from, until) ( \ | ^ drivers/gpu/drm/i915/display/intel_hdcp.c:40:2: note: variable 'rekey_reg' is declared here 40 | i915_reg_t rekey_reg; | ^ 5 warnings generated. vim +54 drivers/gpu/drm/i915/display/intel_hdcp.c 33 34 static void 35 intel_hdcp_adjust_hdcp_line_rekeying(struct intel_encoder *encoder, 36 struct intel_hdcp *hdcp, 37 bool enable) 38 { 39 struct intel_display *display = to_intel_display(encoder); 40 i915_reg_t rekey_reg; 41 u32 rekey_bit; 42 43 /* Here we assume HDMI is in TMDS mode of operation */ 44 if (encoder->type != INTEL_OUTPUT_HDMI) 45 return; 46 47 if (DISPLAY_VER(display) >= 30) { 48 rekey_reg = TRANS_DDI_FUNC_CTL(display, hdcp->cpu_transcoder); 49 rekey_bit = XE3_TRANS_DDI_HDCP_LINE_REKEY_DISABLE; 50 } else if (IS_DISPLAY_VERx100_STEP(display, 1401, STEP_B0, STEP_FOREVER) || 51 IS_DISPLAY_VERx100_STEP(display, 2000, STEP_B0, STEP_FOREVER)) { 52 rekey_reg = TRANS_DDI_FUNC_CTL(display, hdcp->cpu_transcoder); 53 rekey_bit = TRANS_DDI_HDCP_LINE_REKEY_DISABLE; > 54 } else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) { 55 rekey_reg = MTL_CHICKEN_TRANS(hdcp->cpu_transcoder); 56 rekey_bit = HDCP_LINE_REKEY_DISABLE; 57 } 58 59 intel_de_rmw(display, rekey_reg, rekey_bit, enable ? 0 : rekey_bit); 60 } 61
diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c index 4e937fbba4d2..5ba30a8a4986 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c @@ -32,27 +32,31 @@ #define HDCP2_LC_RETRY_CNT 3 static void -intel_hdcp_disable_hdcp_line_rekeying(struct intel_encoder *encoder, - struct intel_hdcp *hdcp) +intel_hdcp_adjust_hdcp_line_rekeying(struct intel_encoder *encoder, + struct intel_hdcp *hdcp, + bool enable) { struct intel_display *display = to_intel_display(encoder); + i915_reg_t rekey_reg; + u32 rekey_bit; /* Here we assume HDMI is in TMDS mode of operation */ if (encoder->type != INTEL_OUTPUT_HDMI) return; - if (DISPLAY_VER(display) >= 30) - intel_de_rmw(display, - TRANS_DDI_FUNC_CTL(display, hdcp->cpu_transcoder), - 0, XE3_TRANS_DDI_HDCP_LINE_REKEY_DISABLE); - else if (IS_DISPLAY_VERx100_STEP(display, 1401, STEP_B0, STEP_FOREVER) || - IS_DISPLAY_VERx100_STEP(display, 2000, STEP_B0, STEP_FOREVER)) - intel_de_rmw(display, - TRANS_DDI_FUNC_CTL(display, hdcp->cpu_transcoder), - 0, TRANS_DDI_HDCP_LINE_REKEY_DISABLE); - else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) - intel_de_rmw(display, MTL_CHICKEN_TRANS(hdcp->cpu_transcoder), - 0, HDCP_LINE_REKEY_DISABLE); + if (DISPLAY_VER(display) >= 30) { + rekey_reg = TRANS_DDI_FUNC_CTL(display, hdcp->cpu_transcoder); + rekey_bit = XE3_TRANS_DDI_HDCP_LINE_REKEY_DISABLE; + } else if (IS_DISPLAY_VERx100_STEP(display, 1401, STEP_B0, STEP_FOREVER) || + IS_DISPLAY_VERx100_STEP(display, 2000, STEP_B0, STEP_FOREVER)) { + rekey_reg = TRANS_DDI_FUNC_CTL(display, hdcp->cpu_transcoder); + rekey_bit = TRANS_DDI_HDCP_LINE_REKEY_DISABLE; + } else if (IS_DISPLAY_VERx100_STEP(display, 1400, STEP_D0, STEP_FOREVER)) { + rekey_reg = MTL_CHICKEN_TRANS(hdcp->cpu_transcoder); + rekey_bit = HDCP_LINE_REKEY_DISABLE; + } + + intel_de_rmw(display, rekey_reg, rekey_bit, enable ? 0 : rekey_bit); } static int intel_conn_to_vcpi(struct intel_atomic_state *state, @@ -1049,6 +1053,8 @@ static int intel_hdcp1_enable(struct intel_connector *connector) return ret; } + intel_hdcp_adjust_hdcp_line_rekeying(connector->encoder, hdcp, true); + /* Incase of authentication failures, HDCP spec expects reauth. */ for (i = 0; i < tries; i++) { ret = intel_hdcp_auth(connector); @@ -2062,7 +2068,7 @@ static int _intel_hdcp2_enable(struct intel_atomic_state *state, connector->base.base.id, connector->base.name, hdcp->content_type); - intel_hdcp_disable_hdcp_line_rekeying(connector->encoder, hdcp); + intel_hdcp_adjust_hdcp_line_rekeying(connector->encoder, hdcp, false); ret = hdcp2_authenticate_and_encrypt(state, connector); if (ret) {
TRANS_DDI_FUNC_CTL asks us to disable hdcp line rekeying when not in hdcp 2.2 and we are not using an hdmi transcoder and it need to be enabled when we are using an HDMI transcoder to enable HDCP 1.4. We use intel_de_rmw cycles to update TRANS_DDI_FUNC_CTL register so we cannot depend on the value being 0 by default everytime which calls for seprate handling of HDCP 1.4 case. --v2 -Use the exising function and modify it based on a bool rather than have a different function [Matt] --v3 -No need for kzalloc [Jani] --v4 -i915_reg_t should not be pointer [Jani] Bspec: 69964, 50493, 50054 Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> --- drivers/gpu/drm/i915/display/intel_hdcp.c | 36 +++++++++++++---------- 1 file changed, 21 insertions(+), 15 deletions(-)