tree:
https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: 8e2b1510d279aecb1f89907553283c79c1b2b226
commit: 8e2b1510d279aecb1f89907553283c79c1b2b226 [5/5] drm/edid: Fix DispID tile parsing
for override EDID
config: x86_64-randconfig-a015-20210514 (attached as .config)
compiler: clang version 13.0.0 (
https://github.com/llvm/llvm-project
425781bce01f2f1d5f553d3b2bf9ebbd6e15068c)
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 x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
#
https://github.com/intel/linux-intel-lts/commit/8e2b1510d279aecb1f8990755...
git remote add intel-linux-intel-lts
https://github.com/intel/linux-intel-lts.git
git fetch --no-tags intel-linux-intel-lts 5.4/yocto
git checkout 8e2b1510d279aecb1f89907553283c79c1b2b226
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
Note: the intel-linux-intel-lts/5.4/yocto HEAD 2521f747baec6ccd170456c0fe697c48844a080d
builds fine.
It only hurts bisectibility.
All error/warnings (new ones prefixed by >>):
> drivers/gpu/drm/drm_edid.c:5539:47: error: passing 'u8
const[8]' to parameter of type 'char *' discards qualifiers
[-Werror,-Wincompatible-pointer-types-discards-qualifiers]
tg =
drm_mode_get_tile_group(connector->dev, tile->topology_id);
^~~~~~~~~~~~~~~~~
include/drm/drm_connector.h:1574:18: note: passing argument to parameter
'topology' here
char topology[8]);
^
drivers/gpu/drm/drm_edid.c:5541:51: error: passing 'u8 const[8]' to parameter
of type 'char *' discards qualifiers
[-Werror,-Wincompatible-pointer-types-discards-qualifiers]
tg = drm_mode_create_tile_group(connector->dev,
tile->topology_id);
^~~~~~~~~~~~~~~~~
include/drm/drm_connector.h:1572:14: note: passing argument to parameter
'topology' here
char topology[8]);
^
> drivers/gpu/drm/drm_edid.c:5597:56: warning: variable
'length' is uninitialized when used here [-Wuninitialized]
ret =
drm_displayid_parse_tiled(connector, displayid, length, idx);
^~~~~~
drivers/gpu/drm/drm_edid.c:5588:12: note: initialize the variable 'length' to
silence this warning
int length, idx;
^
= 0
> drivers/gpu/drm/drm_edid.c:5597:64: warning: variable
'idx' is uninitialized when used here [-Wuninitialized]
ret =
drm_displayid_parse_tiled(connector, displayid, length, idx);
^~~
drivers/gpu/drm/drm_edid.c:5588:17: note: initialize the variable 'idx' to
silence this warning
int length, idx;
^
= 0
2 warnings and 2 errors generated.
vim +5539 drivers/gpu/drm/drm_edid.c
40d9b043a89e23 Dave Airlie 2014-10-20 5504
5e546cd5b3bc76 Dave Airlie 2016-05-03 5505 static int drm_parse_tiled_block(struct
drm_connector *connector,
8e2b1510d279ae Ville Syrjälä 2020-03-13 5506 const struct displayid_block
*block)
40d9b043a89e23 Dave Airlie 2014-10-20 5507 {
8e2b1510d279ae Ville Syrjälä 2020-03-13 5508 const struct displayid_tiled_block
*tile = (struct displayid_tiled_block *)block;
40d9b043a89e23 Dave Airlie 2014-10-20 5509 u16 w, h;
40d9b043a89e23 Dave Airlie 2014-10-20 5510 u8 tile_v_loc, tile_h_loc;
40d9b043a89e23 Dave Airlie 2014-10-20 5511 u8 num_v_tile, num_h_tile;
40d9b043a89e23 Dave Airlie 2014-10-20 5512 struct drm_tile_group *tg;
40d9b043a89e23 Dave Airlie 2014-10-20 5513
40d9b043a89e23 Dave Airlie 2014-10-20 5514 w = tile->tile_size[0] |
tile->tile_size[1] << 8;
40d9b043a89e23 Dave Airlie 2014-10-20 5515 h = tile->tile_size[2] |
tile->tile_size[3] << 8;
40d9b043a89e23 Dave Airlie 2014-10-20 5516
40d9b043a89e23 Dave Airlie 2014-10-20 5517 num_v_tile = (tile->topo[0] &
0xf) | (tile->topo[2] & 0x30);
40d9b043a89e23 Dave Airlie 2014-10-20 5518 num_h_tile = (tile->topo[0] >>
4) | ((tile->topo[2] >> 2) & 0x30);
40d9b043a89e23 Dave Airlie 2014-10-20 5519 tile_v_loc = (tile->topo[1] &
0xf) | ((tile->topo[2] & 0x3) << 4);
40d9b043a89e23 Dave Airlie 2014-10-20 5520 tile_h_loc = (tile->topo[1] >>
4) | (((tile->topo[2] >> 2) & 0x3) << 4);
40d9b043a89e23 Dave Airlie 2014-10-20 5521
40d9b043a89e23 Dave Airlie 2014-10-20 5522 connector->has_tile = true;
40d9b043a89e23 Dave Airlie 2014-10-20 5523 if (tile->tile_cap & 0x80)
40d9b043a89e23 Dave Airlie 2014-10-20 5524 connector->tile_is_single_monitor =
true;
40d9b043a89e23 Dave Airlie 2014-10-20 5525
40d9b043a89e23 Dave Airlie 2014-10-20 5526 connector->num_h_tile = num_h_tile +
1;
40d9b043a89e23 Dave Airlie 2014-10-20 5527 connector->num_v_tile = num_v_tile +
1;
40d9b043a89e23 Dave Airlie 2014-10-20 5528 connector->tile_h_loc = tile_h_loc;
40d9b043a89e23 Dave Airlie 2014-10-20 5529 connector->tile_v_loc = tile_v_loc;
40d9b043a89e23 Dave Airlie 2014-10-20 5530 connector->tile_h_size = w + 1;
40d9b043a89e23 Dave Airlie 2014-10-20 5531 connector->tile_v_size = h + 1;
40d9b043a89e23 Dave Airlie 2014-10-20 5532
40d9b043a89e23 Dave Airlie 2014-10-20 5533 DRM_DEBUG_KMS("tile cap
0x%x\n", tile->tile_cap);
40d9b043a89e23 Dave Airlie 2014-10-20 5534 DRM_DEBUG_KMS("tile_size %d x
%d\n", w + 1, h + 1);
40d9b043a89e23 Dave Airlie 2014-10-20 5535 DRM_DEBUG_KMS("topo num tiles
%dx%d, location %dx%d\n",
40d9b043a89e23 Dave Airlie 2014-10-20 5536 num_h_tile + 1, num_v_tile + 1,
tile_h_loc, tile_v_loc);
40d9b043a89e23 Dave Airlie 2014-10-20 5537 DRM_DEBUG_KMS("vend
%c%c%c\n", tile->topology_id[0], tile->topology_id[1],
tile->topology_id[2]);
40d9b043a89e23 Dave Airlie 2014-10-20 5538
40d9b043a89e23 Dave Airlie 2014-10-20 @5539 tg =
drm_mode_get_tile_group(connector->dev, tile->topology_id);
40d9b043a89e23 Dave Airlie 2014-10-20 5540 if (!tg) {
40d9b043a89e23 Dave Airlie 2014-10-20 5541 tg =
drm_mode_create_tile_group(connector->dev, tile->topology_id);
40d9b043a89e23 Dave Airlie 2014-10-20 5542 }
40d9b043a89e23 Dave Airlie 2014-10-20 5543 if (!tg)
40d9b043a89e23 Dave Airlie 2014-10-20 5544 return -ENOMEM;
40d9b043a89e23 Dave Airlie 2014-10-20 5545
40d9b043a89e23 Dave Airlie 2014-10-20 5546 if (connector->tile_group != tg) {
40d9b043a89e23 Dave Airlie 2014-10-20 5547 /* if we haven't got a pointer,
40d9b043a89e23 Dave Airlie 2014-10-20 5548 take the reference, drop ref to old
tile group */
40d9b043a89e23 Dave Airlie 2014-10-20 5549 if (connector->tile_group) {
40d9b043a89e23 Dave Airlie 2014-10-20 5550
drm_mode_put_tile_group(connector->dev, connector->tile_group);
40d9b043a89e23 Dave Airlie 2014-10-20 5551 }
40d9b043a89e23 Dave Airlie 2014-10-20 5552 connector->tile_group = tg;
40d9b043a89e23 Dave Airlie 2014-10-20 5553 } else
40d9b043a89e23 Dave Airlie 2014-10-20 5554 /* if same tile group, then release
the ref we just took. */
40d9b043a89e23 Dave Airlie 2014-10-20 5555
drm_mode_put_tile_group(connector->dev, tg);
5e546cd5b3bc76 Dave Airlie 2016-05-03 5556 return 0;
5e546cd5b3bc76 Dave Airlie 2016-05-03 5557 }
5e546cd5b3bc76 Dave Airlie 2016-05-03 5558
8e2b1510d279ae Ville Syrjälä 2020-03-13 5559 static int
drm_displayid_parse_tiled(struct drm_connector *connector,
8e2b1510d279ae Ville Syrjälä 2020-03-13 5560 const u8 *displayid, int
length, int idx)
5e546cd5b3bc76 Dave Airlie 2016-05-03 5561 {
8e2b1510d279ae Ville Syrjälä 2020-03-13 5562 const struct displayid_block *block;
5e546cd5b3bc76 Dave Airlie 2016-05-03 5563 int ret;
5e546cd5b3bc76 Dave Airlie 2016-05-03 5564
3a4a2ea39f86c5 Tomas Bzatek 2016-05-01 5565 idx += sizeof(struct displayid_hdr);
80d42db02b3a5b Andres Rodriguez 2019-06-19 5566 for_each_displayid_db(displayid, block,
idx, length) {
3a4a2ea39f86c5 Tomas Bzatek 2016-05-01 5567 DRM_DEBUG_KMS("block id 0x%x, rev
%d, len %d\n",
5e546cd5b3bc76 Dave Airlie 2016-05-03 5568 block->tag, block->rev,
block->num_bytes);
5e546cd5b3bc76 Dave Airlie 2016-05-03 5569
5e546cd5b3bc76 Dave Airlie 2016-05-03 5570 switch (block->tag) {
5e546cd5b3bc76 Dave Airlie 2016-05-03 5571 case DATA_BLOCK_TILED_DISPLAY:
5e546cd5b3bc76 Dave Airlie 2016-05-03 5572 ret =
drm_parse_tiled_block(connector, block);
5e546cd5b3bc76 Dave Airlie 2016-05-03 5573 if (ret)
5e546cd5b3bc76 Dave Airlie 2016-05-03 5574 return ret;
40d9b043a89e23 Dave Airlie 2014-10-20 5575 break;
40d9b043a89e23 Dave Airlie 2014-10-20 5576 default:
3a4a2ea39f86c5 Tomas Bzatek 2016-05-01 5577 DRM_DEBUG_KMS("found DisplayID
tag 0x%x, unhandled\n", block->tag);
40d9b043a89e23 Dave Airlie 2014-10-20 5578 break;
40d9b043a89e23 Dave Airlie 2014-10-20 5579 }
3a4a2ea39f86c5 Tomas Bzatek 2016-05-01 5580 }
40d9b043a89e23 Dave Airlie 2014-10-20 5581 return 0;
40d9b043a89e23 Dave Airlie 2014-10-20 5582 }
40d9b043a89e23 Dave Airlie 2014-10-20 5583
8e2b1510d279ae Ville Syrjälä 2020-03-13 5584 void drm_update_tile_info(struct
drm_connector *connector,
8e2b1510d279ae Ville Syrjälä 2020-03-13 5585 const struct edid *edid)
40d9b043a89e23 Dave Airlie 2014-10-20 5586 {
8e2b1510d279ae Ville Syrjälä 2020-03-13 5587 const void *displayid = NULL;
8e2b1510d279ae Ville Syrjälä 2020-03-13 5588 int length, idx;
40d9b043a89e23 Dave Airlie 2014-10-20 5589 int ret;
40d9b043a89e23 Dave Airlie 2014-10-20 5590 connector->has_tile = false;
40d9b043a89e23 Dave Airlie 2014-10-20 5591 displayid =
drm_find_displayid_extension(edid);
40d9b043a89e23 Dave Airlie 2014-10-20 5592 if (!displayid) {
40d9b043a89e23 Dave Airlie 2014-10-20 5593 /* drop reference to any tile group we
had */
40d9b043a89e23 Dave Airlie 2014-10-20 5594 goto out_drop_ref;
40d9b043a89e23 Dave Airlie 2014-10-20 5595 }
40d9b043a89e23 Dave Airlie 2014-10-20 5596
8e2b1510d279ae Ville Syrjälä 2020-03-13 @5597 ret =
drm_displayid_parse_tiled(connector, displayid, length, idx);
:::::: The code at line 5539 was first introduced by commit
:::::: 40d9b043a89e2301e1f97ade055a73ecc28e9afe drm/connector: store tile information from
displayid (v3)
:::::: TO: Dave Airlie <airlied(a)redhat.com>
:::::: CC: Dave Airlie <airlied(a)redhat.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org