CC: [email protected]
CC: [email protected]
BCC: [email protected]
CC: [email protected]
TO: Neil Armstrong <[email protected]>

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/[email protected]/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 <[email protected]>


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
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to