All of lore.kernel.org
 help / color / mirror / Atom feed
* drivers/gpu/drm/meson/meson_encoder_hdmi.c:165:3: warning: Value stored to 'venc_freq' is never read [clang-analyzer-deadcode.DeadStores]
@ 2022-05-08 14:13 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-05-08 14:13 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 31718 bytes --]

CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-kernel(a)vger.kernel.org
TO: Neil Armstrong <narmstrong@baylibre.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   30c8e80f79329617012f07b09b70114592092ea4
commit: e67f6037ae1be34b2b686bab72caa41d57714534 drm/meson: split out encoder from meson_dw_hdmi
date:   6 months ago
:::::: branch date: 20 hours ago
:::::: commit date: 6 months ago
config: arm-randconfig-c002-20220507 (https://download.01.org/0day-ci/archive/20220508/202205082226.jOJ9cPIn-lkp(a)intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project af4cf1c6b8ed0d8102fc5e69acdc2fcbbcdaa9a7)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e67f6037ae1be34b2b686bab72caa41d57714534
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout e67f6037ae1be34b2b686bab72caa41d57714534
        # save the config file
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
                   ^
   drivers/iio/pressure/icp10100.c:178:14: note: Assuming 'i' is < field 'response_word_nb'
           for (i = 0; i < cmd->response_word_nb; ++i) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/iio/pressure/icp10100.c:178:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < cmd->response_word_nb; ++i) {
           ^
   drivers/iio/pressure/icp10100.c:182:7: note: Assuming the condition is false
                   if (crc != ptr[ICP10100_CRC8_WORD_LENGTH]) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/iio/pressure/icp10100.c:182:3: note: Taking false branch
                   if (crc != ptr[ICP10100_CRC8_WORD_LENGTH]) {
                   ^
   drivers/iio/pressure/icp10100.c:178:14: note: Assuming 'i' is < field 'response_word_nb'
           for (i = 0; i < cmd->response_word_nb; ++i) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/iio/pressure/icp10100.c:178:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < cmd->response_word_nb; ++i) {
           ^
   drivers/iio/pressure/icp10100.c:182:7: note: Assuming the condition is false
                   if (crc != ptr[ICP10100_CRC8_WORD_LENGTH]) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/iio/pressure/icp10100.c:182:3: note: Taking false branch
                   if (crc != ptr[ICP10100_CRC8_WORD_LENGTH]) {
                   ^
   drivers/iio/pressure/icp10100.c:178:14: note: Assuming 'i' is >= field 'response_word_nb'
           for (i = 0; i < cmd->response_word_nb; ++i) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/iio/pressure/icp10100.c:178:2: note: Loop condition is false. Execution continues on line 191
           for (i = 0; i < cmd->response_word_nb; ++i) {
           ^
   drivers/iio/pressure/icp10100.c:191:2: note: Returning zero, which participates in a condition later
           return 0;
           ^~~~~~~~
   drivers/iio/pressure/icp10100.c:259:8: note: Returning from 'icp10100_send_cmd'
           ret = icp10100_send_cmd(st, cmd, measures, sizeof(measures));
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/iio/pressure/icp10100.c:261:6: note: 'ret' is 0
           if (ret)
               ^~~
   drivers/iio/pressure/icp10100.c:261:2: note: Taking false branch
           if (ret)
           ^
   drivers/iio/pressure/icp10100.c:266:17: note: 1st function call argument is an uninitialized value
           *temperature = be16_to_cpu(measures[2]);
                          ^
   include/linux/byteorder/generic.h:97:21: note: expanded from macro 'be16_to_cpu'
   #define be16_to_cpu __be16_to_cpu
                       ^
   include/uapi/linux/byteorder/little_endian.h:42:26: note: expanded from macro '__be16_to_cpu'
   #define __be16_to_cpu(x) __swab16((__force __u16)(__be16)(x))
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/uapi/linux/swab.h:102:28: note: expanded from macro '__swab16'
   #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
                              ^                 ~~~~~~~~~~
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   12 warnings generated.
>> drivers/gpu/drm/meson/meson_encoder_hdmi.c:165:3: warning: Value stored to 'venc_freq' is never read [clang-analyzer-deadcode.DeadStores]
                   venc_freq /= 2;
                   ^            ~
   drivers/gpu/drm/meson/meson_encoder_hdmi.c:165:3: note: Value stored to 'venc_freq' is never read
                   venc_freq /= 2;
                   ^            ~
>> drivers/gpu/drm/meson/meson_encoder_hdmi.c:289:20: warning: Value stored to 'priv' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct meson_drm *priv = encoder_hdmi->priv;
                             ^~~~   ~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/meson/meson_encoder_hdmi.c:289:20: note: Value stored to 'priv' during its initialization is never read
           struct meson_drm *priv = encoder_hdmi->priv;
                             ^~~~   ~~~~~~~~~~~~~~~~~~
   Suppressed 10 warnings (9 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   10 warnings generated.
   drivers/iio/adc/ltc2497.c:18:8: warning: Excessive padding in 'struct ltc2497_driverdata' (32 padding bytes, where 0 is optimal). 
   Optimal fields order: 
   buf, 
   client, 
   common_ddata, 
   consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding]
   struct ltc2497_driverdata {
   ~~~~~~~^~~~~~~~~~~~~~~~~~~~
   drivers/iio/adc/ltc2497.c:18:8: note: Excessive padding in 'struct ltc2497_driverdata' (32 padding bytes, where 0 is optimal). Optimal fields order: buf, client, common_ddata, consider reordering the fields or adding explicit padding members
   struct ltc2497_driverdata {
   ~~~~~~~^~~~~~~~~~~~~~~~~~~~
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   12 warnings generated.
   fs/xfs/libxfs/xfs_attr_leaf.c:2243:29: warning: Value stored to 'drop_leaf' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct xfs_attr_leafblock *drop_leaf = drop_blk->bp->b_addr;
                                      ^~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_attr_leaf.c:2243:29: note: Value stored to 'drop_leaf' during its initialization is never read
           struct xfs_attr_leafblock *drop_leaf = drop_blk->bp->b_addr;
                                      ^~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_attr_leaf.c:2244:29: warning: Value stored to 'save_leaf' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct xfs_attr_leafblock *save_leaf = save_blk->bp->b_addr;
                                      ^~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_attr_leaf.c:2244:29: note: Value stored to 'save_leaf' during its initialization is never read
           struct xfs_attr_leafblock *save_leaf = save_blk->bp->b_addr;
                                      ^~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~
   Suppressed 10 warnings (10 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   10 warnings generated.
   Suppressed 10 warnings (10 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   10 warnings generated.
   drivers/iio/accel/mma8452.c:252:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores]
           ret = i2c_smbus_read_i2c_block_data(data->client, MMA8452_OUT_X,
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/iio/accel/mma8452.c:252:2: note: Value stored to 'ret' is never read
           ret = i2c_smbus_read_i2c_block_data(data->client, MMA8452_OUT_X,
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   10 warnings generated.

vim +/venc_freq +165 drivers/gpu/drm/meson/meson_encoder_hdmi.c

e67f6037ae1be3 Neil Armstrong 2021-10-20  102  
e67f6037ae1be3 Neil Armstrong 2021-10-20  103  static enum drm_mode_status meson_encoder_hdmi_mode_valid(struct drm_bridge *bridge,
e67f6037ae1be3 Neil Armstrong 2021-10-20  104  					const struct drm_display_info *display_info,
e67f6037ae1be3 Neil Armstrong 2021-10-20  105  					const struct drm_display_mode *mode)
e67f6037ae1be3 Neil Armstrong 2021-10-20  106  {
e67f6037ae1be3 Neil Armstrong 2021-10-20  107  	struct meson_encoder_hdmi *encoder_hdmi = bridge_to_meson_encoder_hdmi(bridge);
e67f6037ae1be3 Neil Armstrong 2021-10-20  108  	struct meson_drm *priv = encoder_hdmi->priv;
e67f6037ae1be3 Neil Armstrong 2021-10-20  109  	bool is_hdmi2_sink = display_info->hdmi.scdc.supported;
e67f6037ae1be3 Neil Armstrong 2021-10-20  110  	unsigned int phy_freq;
e67f6037ae1be3 Neil Armstrong 2021-10-20  111  	unsigned int vclk_freq;
e67f6037ae1be3 Neil Armstrong 2021-10-20  112  	unsigned int venc_freq;
e67f6037ae1be3 Neil Armstrong 2021-10-20  113  	unsigned int hdmi_freq;
e67f6037ae1be3 Neil Armstrong 2021-10-20  114  	int vic = drm_match_cea_mode(mode);
e67f6037ae1be3 Neil Armstrong 2021-10-20  115  	enum drm_mode_status status;
e67f6037ae1be3 Neil Armstrong 2021-10-20  116  
e67f6037ae1be3 Neil Armstrong 2021-10-20  117  	dev_dbg(priv->dev, "Modeline " DRM_MODE_FMT "\n", DRM_MODE_ARG(mode));
e67f6037ae1be3 Neil Armstrong 2021-10-20  118  
e67f6037ae1be3 Neil Armstrong 2021-10-20  119  	/* If sink does not support 540MHz, reject the non-420 HDMI2 modes */
e67f6037ae1be3 Neil Armstrong 2021-10-20  120  	if (display_info->max_tmds_clock &&
e67f6037ae1be3 Neil Armstrong 2021-10-20  121  	    mode->clock > display_info->max_tmds_clock &&
e67f6037ae1be3 Neil Armstrong 2021-10-20  122  	    !drm_mode_is_420_only(display_info, mode) &&
e67f6037ae1be3 Neil Armstrong 2021-10-20  123  	    !drm_mode_is_420_also(display_info, mode))
e67f6037ae1be3 Neil Armstrong 2021-10-20  124  		return MODE_BAD;
e67f6037ae1be3 Neil Armstrong 2021-10-20  125  
e67f6037ae1be3 Neil Armstrong 2021-10-20  126  	/* Check against non-VIC supported modes */
e67f6037ae1be3 Neil Armstrong 2021-10-20  127  	if (!vic) {
e67f6037ae1be3 Neil Armstrong 2021-10-20  128  		status = meson_venc_hdmi_supported_mode(mode);
e67f6037ae1be3 Neil Armstrong 2021-10-20  129  		if (status != MODE_OK)
e67f6037ae1be3 Neil Armstrong 2021-10-20  130  			return status;
e67f6037ae1be3 Neil Armstrong 2021-10-20  131  
e67f6037ae1be3 Neil Armstrong 2021-10-20  132  		return meson_vclk_dmt_supported_freq(priv, mode->clock);
e67f6037ae1be3 Neil Armstrong 2021-10-20  133  	/* Check against supported VIC modes */
e67f6037ae1be3 Neil Armstrong 2021-10-20  134  	} else if (!meson_venc_hdmi_supported_vic(vic))
e67f6037ae1be3 Neil Armstrong 2021-10-20  135  		return MODE_BAD;
e67f6037ae1be3 Neil Armstrong 2021-10-20  136  
e67f6037ae1be3 Neil Armstrong 2021-10-20  137  	vclk_freq = mode->clock;
e67f6037ae1be3 Neil Armstrong 2021-10-20  138  
e67f6037ae1be3 Neil Armstrong 2021-10-20  139  	/* For 420, pixel clock is half unlike venc clock */
e67f6037ae1be3 Neil Armstrong 2021-10-20  140  	if (drm_mode_is_420_only(display_info, mode) ||
e67f6037ae1be3 Neil Armstrong 2021-10-20  141  	    (!is_hdmi2_sink &&
e67f6037ae1be3 Neil Armstrong 2021-10-20  142  	     drm_mode_is_420_also(display_info, mode)))
e67f6037ae1be3 Neil Armstrong 2021-10-20  143  		vclk_freq /= 2;
e67f6037ae1be3 Neil Armstrong 2021-10-20  144  
e67f6037ae1be3 Neil Armstrong 2021-10-20  145  	/* TMDS clock is pixel_clock * 10 */
e67f6037ae1be3 Neil Armstrong 2021-10-20  146  	phy_freq = vclk_freq * 10;
e67f6037ae1be3 Neil Armstrong 2021-10-20  147  
e67f6037ae1be3 Neil Armstrong 2021-10-20  148  	/* 480i/576i needs global pixel doubling */
e67f6037ae1be3 Neil Armstrong 2021-10-20  149  	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
e67f6037ae1be3 Neil Armstrong 2021-10-20  150  		vclk_freq *= 2;
e67f6037ae1be3 Neil Armstrong 2021-10-20  151  
e67f6037ae1be3 Neil Armstrong 2021-10-20  152  	venc_freq = vclk_freq;
e67f6037ae1be3 Neil Armstrong 2021-10-20  153  	hdmi_freq = vclk_freq;
e67f6037ae1be3 Neil Armstrong 2021-10-20  154  
e67f6037ae1be3 Neil Armstrong 2021-10-20  155  	/* VENC double pixels for 1080i, 720p and YUV420 modes */
e67f6037ae1be3 Neil Armstrong 2021-10-20  156  	if (meson_venc_hdmi_venc_repeat(vic) ||
e67f6037ae1be3 Neil Armstrong 2021-10-20  157  	    drm_mode_is_420_only(display_info, mode) ||
e67f6037ae1be3 Neil Armstrong 2021-10-20  158  	    (!is_hdmi2_sink &&
e67f6037ae1be3 Neil Armstrong 2021-10-20  159  	     drm_mode_is_420_also(display_info, mode)))
e67f6037ae1be3 Neil Armstrong 2021-10-20  160  		venc_freq *= 2;
e67f6037ae1be3 Neil Armstrong 2021-10-20  161  
e67f6037ae1be3 Neil Armstrong 2021-10-20  162  	vclk_freq = max(venc_freq, hdmi_freq);
e67f6037ae1be3 Neil Armstrong 2021-10-20  163  
e67f6037ae1be3 Neil Armstrong 2021-10-20  164  	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
e67f6037ae1be3 Neil Armstrong 2021-10-20 @165  		venc_freq /= 2;
e67f6037ae1be3 Neil Armstrong 2021-10-20  166  
e67f6037ae1be3 Neil Armstrong 2021-10-20  167  	dev_dbg(priv->dev, "%s: vclk:%d phy=%d venc=%d hdmi=%d\n",
e67f6037ae1be3 Neil Armstrong 2021-10-20  168  		__func__, phy_freq, vclk_freq, venc_freq, hdmi_freq);
e67f6037ae1be3 Neil Armstrong 2021-10-20  169  
e67f6037ae1be3 Neil Armstrong 2021-10-20  170  	return meson_vclk_vic_supported_freq(priv, phy_freq, vclk_freq);
e67f6037ae1be3 Neil Armstrong 2021-10-20  171  }
e67f6037ae1be3 Neil Armstrong 2021-10-20  172  
e67f6037ae1be3 Neil Armstrong 2021-10-20  173  static void meson_encoder_hdmi_atomic_enable(struct drm_bridge *bridge,
e67f6037ae1be3 Neil Armstrong 2021-10-20  174  					     struct drm_bridge_state *bridge_state)
e67f6037ae1be3 Neil Armstrong 2021-10-20  175  {
e67f6037ae1be3 Neil Armstrong 2021-10-20  176  	struct meson_encoder_hdmi *encoder_hdmi = bridge_to_meson_encoder_hdmi(bridge);
e67f6037ae1be3 Neil Armstrong 2021-10-20  177  	struct drm_atomic_state *state = bridge_state->base.state;
e67f6037ae1be3 Neil Armstrong 2021-10-20  178  	unsigned int ycrcb_map = VPU_HDMI_OUTPUT_CBYCR;
e67f6037ae1be3 Neil Armstrong 2021-10-20  179  	struct meson_drm *priv = encoder_hdmi->priv;
e67f6037ae1be3 Neil Armstrong 2021-10-20  180  	struct drm_connector_state *conn_state;
e67f6037ae1be3 Neil Armstrong 2021-10-20  181  	const struct drm_display_mode *mode;
e67f6037ae1be3 Neil Armstrong 2021-10-20  182  	struct drm_crtc_state *crtc_state;
e67f6037ae1be3 Neil Armstrong 2021-10-20  183  	struct drm_connector *connector;
e67f6037ae1be3 Neil Armstrong 2021-10-20  184  	bool yuv420_mode = false;
e67f6037ae1be3 Neil Armstrong 2021-10-20  185  	int vic;
e67f6037ae1be3 Neil Armstrong 2021-10-20  186  
e67f6037ae1be3 Neil Armstrong 2021-10-20  187  	connector = drm_atomic_get_new_connector_for_encoder(state, bridge->encoder);
e67f6037ae1be3 Neil Armstrong 2021-10-20  188  	if (WARN_ON(!connector))
e67f6037ae1be3 Neil Armstrong 2021-10-20  189  		return;
e67f6037ae1be3 Neil Armstrong 2021-10-20  190  
e67f6037ae1be3 Neil Armstrong 2021-10-20  191  	conn_state = drm_atomic_get_new_connector_state(state, connector);
e67f6037ae1be3 Neil Armstrong 2021-10-20  192  	if (WARN_ON(!conn_state))
e67f6037ae1be3 Neil Armstrong 2021-10-20  193  		return;
e67f6037ae1be3 Neil Armstrong 2021-10-20  194  
e67f6037ae1be3 Neil Armstrong 2021-10-20  195  	crtc_state = drm_atomic_get_new_crtc_state(state, conn_state->crtc);
e67f6037ae1be3 Neil Armstrong 2021-10-20  196  	if (WARN_ON(!crtc_state))
e67f6037ae1be3 Neil Armstrong 2021-10-20  197  		return;
e67f6037ae1be3 Neil Armstrong 2021-10-20  198  
e67f6037ae1be3 Neil Armstrong 2021-10-20  199  	mode = &crtc_state->adjusted_mode;
e67f6037ae1be3 Neil Armstrong 2021-10-20  200  
e67f6037ae1be3 Neil Armstrong 2021-10-20  201  	vic = drm_match_cea_mode(mode);
e67f6037ae1be3 Neil Armstrong 2021-10-20  202  
e67f6037ae1be3 Neil Armstrong 2021-10-20  203  	dev_dbg(priv->dev, "\"%s\" vic %d\n", mode->name, vic);
e67f6037ae1be3 Neil Armstrong 2021-10-20  204  
e67f6037ae1be3 Neil Armstrong 2021-10-20  205  	if (encoder_hdmi->output_bus_fmt == MEDIA_BUS_FMT_UYYVYY8_0_5X24) {
e67f6037ae1be3 Neil Armstrong 2021-10-20  206  		ycrcb_map = VPU_HDMI_OUTPUT_CRYCB;
e67f6037ae1be3 Neil Armstrong 2021-10-20  207  		yuv420_mode = true;
e67f6037ae1be3 Neil Armstrong 2021-10-20  208  	}
e67f6037ae1be3 Neil Armstrong 2021-10-20  209  
e67f6037ae1be3 Neil Armstrong 2021-10-20  210  	/* VENC + VENC-DVI Mode setup */
e67f6037ae1be3 Neil Armstrong 2021-10-20  211  	meson_venc_hdmi_mode_set(priv, vic, ycrcb_map, yuv420_mode, mode);
e67f6037ae1be3 Neil Armstrong 2021-10-20  212  
e67f6037ae1be3 Neil Armstrong 2021-10-20  213  	/* VCLK Set clock */
e67f6037ae1be3 Neil Armstrong 2021-10-20  214  	meson_encoder_hdmi_set_vclk(encoder_hdmi, mode);
e67f6037ae1be3 Neil Armstrong 2021-10-20  215  
e67f6037ae1be3 Neil Armstrong 2021-10-20  216  	if (encoder_hdmi->output_bus_fmt == MEDIA_BUS_FMT_UYYVYY8_0_5X24)
e67f6037ae1be3 Neil Armstrong 2021-10-20  217  		/* Setup YUV420 to HDMI-TX, no 10bit diphering */
e67f6037ae1be3 Neil Armstrong 2021-10-20  218  		writel_relaxed(2 | (2 << 2),
e67f6037ae1be3 Neil Armstrong 2021-10-20  219  			       priv->io_base + _REG(VPU_HDMI_FMT_CTRL));
e67f6037ae1be3 Neil Armstrong 2021-10-20  220  	else
e67f6037ae1be3 Neil Armstrong 2021-10-20  221  		/* Setup YUV444 to HDMI-TX, no 10bit diphering */
e67f6037ae1be3 Neil Armstrong 2021-10-20  222  		writel_relaxed(0, priv->io_base + _REG(VPU_HDMI_FMT_CTRL));
e67f6037ae1be3 Neil Armstrong 2021-10-20  223  
e67f6037ae1be3 Neil Armstrong 2021-10-20  224  	dev_dbg(priv->dev, "%s\n", priv->venc.hdmi_use_enci ? "VENCI" : "VENCP");
e67f6037ae1be3 Neil Armstrong 2021-10-20  225  
e67f6037ae1be3 Neil Armstrong 2021-10-20  226  	if (priv->venc.hdmi_use_enci)
e67f6037ae1be3 Neil Armstrong 2021-10-20  227  		writel_relaxed(1, priv->io_base + _REG(ENCI_VIDEO_EN));
e67f6037ae1be3 Neil Armstrong 2021-10-20  228  	else
e67f6037ae1be3 Neil Armstrong 2021-10-20  229  		writel_relaxed(1, priv->io_base + _REG(ENCP_VIDEO_EN));
e67f6037ae1be3 Neil Armstrong 2021-10-20  230  }
e67f6037ae1be3 Neil Armstrong 2021-10-20  231  
e67f6037ae1be3 Neil Armstrong 2021-10-20  232  static void meson_encoder_hdmi_atomic_disable(struct drm_bridge *bridge,
e67f6037ae1be3 Neil Armstrong 2021-10-20  233  					     struct drm_bridge_state *bridge_state)
e67f6037ae1be3 Neil Armstrong 2021-10-20  234  {
e67f6037ae1be3 Neil Armstrong 2021-10-20  235  	struct meson_encoder_hdmi *encoder_hdmi = bridge_to_meson_encoder_hdmi(bridge);
e67f6037ae1be3 Neil Armstrong 2021-10-20  236  	struct meson_drm *priv = encoder_hdmi->priv;
e67f6037ae1be3 Neil Armstrong 2021-10-20  237  
e67f6037ae1be3 Neil Armstrong 2021-10-20  238  	writel_bits_relaxed(0x3, 0,
e67f6037ae1be3 Neil Armstrong 2021-10-20  239  			    priv->io_base + _REG(VPU_HDMI_SETTING));
e67f6037ae1be3 Neil Armstrong 2021-10-20  240  
e67f6037ae1be3 Neil Armstrong 2021-10-20  241  	writel_relaxed(0, priv->io_base + _REG(ENCI_VIDEO_EN));
e67f6037ae1be3 Neil Armstrong 2021-10-20  242  	writel_relaxed(0, priv->io_base + _REG(ENCP_VIDEO_EN));
e67f6037ae1be3 Neil Armstrong 2021-10-20  243  }
e67f6037ae1be3 Neil Armstrong 2021-10-20  244  
e67f6037ae1be3 Neil Armstrong 2021-10-20  245  static const u32 meson_encoder_hdmi_out_bus_fmts[] = {
e67f6037ae1be3 Neil Armstrong 2021-10-20  246  	MEDIA_BUS_FMT_YUV8_1X24,
e67f6037ae1be3 Neil Armstrong 2021-10-20  247  	MEDIA_BUS_FMT_UYYVYY8_0_5X24,
e67f6037ae1be3 Neil Armstrong 2021-10-20  248  };
e67f6037ae1be3 Neil Armstrong 2021-10-20  249  
e67f6037ae1be3 Neil Armstrong 2021-10-20  250  static u32 *
e67f6037ae1be3 Neil Armstrong 2021-10-20  251  meson_encoder_hdmi_get_inp_bus_fmts(struct drm_bridge *bridge,
e67f6037ae1be3 Neil Armstrong 2021-10-20  252  					struct drm_bridge_state *bridge_state,
e67f6037ae1be3 Neil Armstrong 2021-10-20  253  					struct drm_crtc_state *crtc_state,
e67f6037ae1be3 Neil Armstrong 2021-10-20  254  					struct drm_connector_state *conn_state,
e67f6037ae1be3 Neil Armstrong 2021-10-20  255  					u32 output_fmt,
e67f6037ae1be3 Neil Armstrong 2021-10-20  256  					unsigned int *num_input_fmts)
e67f6037ae1be3 Neil Armstrong 2021-10-20  257  {
e67f6037ae1be3 Neil Armstrong 2021-10-20  258  	u32 *input_fmts = NULL;
e67f6037ae1be3 Neil Armstrong 2021-10-20  259  	int i;
e67f6037ae1be3 Neil Armstrong 2021-10-20  260  
e67f6037ae1be3 Neil Armstrong 2021-10-20  261  	*num_input_fmts = 0;
e67f6037ae1be3 Neil Armstrong 2021-10-20  262  
e67f6037ae1be3 Neil Armstrong 2021-10-20  263  	for (i = 0 ; i < ARRAY_SIZE(meson_encoder_hdmi_out_bus_fmts) ; ++i) {
e67f6037ae1be3 Neil Armstrong 2021-10-20  264  		if (output_fmt == meson_encoder_hdmi_out_bus_fmts[i]) {
e67f6037ae1be3 Neil Armstrong 2021-10-20  265  			*num_input_fmts = 1;
e67f6037ae1be3 Neil Armstrong 2021-10-20  266  			input_fmts = kcalloc(*num_input_fmts,
e67f6037ae1be3 Neil Armstrong 2021-10-20  267  					     sizeof(*input_fmts),
e67f6037ae1be3 Neil Armstrong 2021-10-20  268  					     GFP_KERNEL);
e67f6037ae1be3 Neil Armstrong 2021-10-20  269  			if (!input_fmts)
e67f6037ae1be3 Neil Armstrong 2021-10-20  270  				return NULL;
e67f6037ae1be3 Neil Armstrong 2021-10-20  271  
e67f6037ae1be3 Neil Armstrong 2021-10-20  272  			input_fmts[0] = output_fmt;
e67f6037ae1be3 Neil Armstrong 2021-10-20  273  
e67f6037ae1be3 Neil Armstrong 2021-10-20  274  			break;
e67f6037ae1be3 Neil Armstrong 2021-10-20  275  		}
e67f6037ae1be3 Neil Armstrong 2021-10-20  276  	}
e67f6037ae1be3 Neil Armstrong 2021-10-20  277  
e67f6037ae1be3 Neil Armstrong 2021-10-20  278  	return input_fmts;
e67f6037ae1be3 Neil Armstrong 2021-10-20  279  }
e67f6037ae1be3 Neil Armstrong 2021-10-20  280  
e67f6037ae1be3 Neil Armstrong 2021-10-20  281  static int meson_encoder_hdmi_atomic_check(struct drm_bridge *bridge,
e67f6037ae1be3 Neil Armstrong 2021-10-20  282  					struct drm_bridge_state *bridge_state,
e67f6037ae1be3 Neil Armstrong 2021-10-20  283  					struct drm_crtc_state *crtc_state,
e67f6037ae1be3 Neil Armstrong 2021-10-20  284  					struct drm_connector_state *conn_state)
e67f6037ae1be3 Neil Armstrong 2021-10-20  285  {
e67f6037ae1be3 Neil Armstrong 2021-10-20  286  	struct meson_encoder_hdmi *encoder_hdmi = bridge_to_meson_encoder_hdmi(bridge);
e67f6037ae1be3 Neil Armstrong 2021-10-20  287  	struct drm_connector_state *old_conn_state =
e67f6037ae1be3 Neil Armstrong 2021-10-20  288  		drm_atomic_get_old_connector_state(conn_state->state, conn_state->connector);
e67f6037ae1be3 Neil Armstrong 2021-10-20 @289  	struct meson_drm *priv = encoder_hdmi->priv;
e67f6037ae1be3 Neil Armstrong 2021-10-20  290  
e67f6037ae1be3 Neil Armstrong 2021-10-20  291  	encoder_hdmi->output_bus_fmt = bridge_state->output_bus_cfg.format;
e67f6037ae1be3 Neil Armstrong 2021-10-20  292  
e67f6037ae1be3 Neil Armstrong 2021-10-20  293  	dev_dbg(priv->dev, "output_bus_fmt %lx\n", encoder_hdmi->output_bus_fmt);
e67f6037ae1be3 Neil Armstrong 2021-10-20  294  
e67f6037ae1be3 Neil Armstrong 2021-10-20  295  	if (!drm_connector_atomic_hdr_metadata_equal(old_conn_state, conn_state))
e67f6037ae1be3 Neil Armstrong 2021-10-20  296  		crtc_state->mode_changed = true;
e67f6037ae1be3 Neil Armstrong 2021-10-20  297  
e67f6037ae1be3 Neil Armstrong 2021-10-20  298  	return 0;
e67f6037ae1be3 Neil Armstrong 2021-10-20  299  }
e67f6037ae1be3 Neil Armstrong 2021-10-20  300  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-08 14:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-08 14:13 drivers/gpu/drm/meson/meson_encoder_hdmi.c:165:3: warning: Value stored to 'venc_freq' is never read [clang-analyzer-deadcode.DeadStores] kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.