From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: drivers/gpu/drm/meson/meson_encoder_hdmi.c:165:3: warning: Value stored to 'venc_freq' is never read [clang-analyzer-deadcode.DeadStores]
Date: Sun, 08 May 2022 22:13:35 +0800 [thread overview]
Message-ID: <202205082226.jOJ9cPIn-lkp@intel.com> (raw)
[-- 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
reply other threads:[~2022-05-08 14:13 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202205082226.jOJ9cPIn-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.