[drm-misc:drm-misc-next 8/15] drivers/gpu/drm/rockchip/rockchip_drm_vop2.c:2316:8: warning: variable 'possible_crtcs' is used uninitialized whenever 'if' condition is false
kernel test robot
lkp at intel.com
Sun Feb 5 21:43:55 UTC 2023
tree: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
head: 8ee3b0e85f6ccd9e6c527bc50eaba774c3bb18d0
commit: 368419a2d429e2438bef333959732c640310bdc7 [8/15] drm/rockchip: vop2: initialize possible_crtcs properly
config: s390-buildonly-randconfig-r002-20230205 (https://download.01.org/0day-ci/archive/20230206/202302060541.TvQvZvYv-lkp@intel.com/config)
compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 4196ca3278f78c6e19246e54ab0ecb364e37d66a)
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 s390 cross compiling tool for clang build
# apt-get install binutils-s390x-linux-gnu
git remote add drm-misc git://anongit.freedesktop.org/drm/drm-misc
git fetch --no-tags drm-misc drm-misc-next
git checkout 368419a2d429e2438bef333959732c640310bdc7
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=s390 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=s390 SHELL=/bin/bash drivers/gpu/drm/rockchip/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>
All warnings (new ones prefixed by >>):
In file included from drivers/gpu/drm/rockchip/rockchip_drm_vop2.c:10:
In file included from include/linux/iopoll.h:14:
In file included from include/linux/io.h:13:
In file included from arch/s390/include/asm/io.h:75:
include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
val = __raw_readb(PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from macro '__le16_to_cpu'
#define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
^
include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
#define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
^
In file included from drivers/gpu/drm/rockchip/rockchip_drm_vop2.c:10:
In file included from include/linux/iopoll.h:14:
In file included from include/linux/io.h:13:
In file included from arch/s390/include/asm/io.h:75:
include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from macro '__le32_to_cpu'
#define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
^
include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
#define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
^
In file included from drivers/gpu/drm/rockchip/rockchip_drm_vop2.c:10:
In file included from include/linux/iopoll.h:14:
In file included from include/linux/io.h:13:
In file included from arch/s390/include/asm/io.h:75:
include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
__raw_writeb(value, PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
__raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
__raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
readsb(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
readsw(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
readsl(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
writesb(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
writesw(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
writesl(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
>> drivers/gpu/drm/rockchip/rockchip_drm_vop2.c:2316:8: warning: variable 'possible_crtcs' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
if (vp) {
^~
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c:2330:36: note: uninitialized use occurs here
ret = vop2_plane_init(vop2, win, possible_crtcs);
^~~~~~~~~~~~~~
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c:2316:4: note: remove the 'if' if its condition is always true
if (vp) {
^~~~~~~~
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c:2298:21: note: initialize the variable 'possible_crtcs' to silence this warning
u32 possible_crtcs;
^
= 0
13 warnings generated.
vim +2316 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
604be85547ce4d Andy Yan 2022-04-22 2247
604be85547ce4d Andy Yan 2022-04-22 2248 static int vop2_create_crtc(struct vop2 *vop2)
604be85547ce4d Andy Yan 2022-04-22 2249 {
604be85547ce4d Andy Yan 2022-04-22 2250 const struct vop2_data *vop2_data = vop2->data;
604be85547ce4d Andy Yan 2022-04-22 2251 struct drm_device *drm = vop2->drm;
604be85547ce4d Andy Yan 2022-04-22 2252 struct device *dev = vop2->dev;
604be85547ce4d Andy Yan 2022-04-22 2253 struct drm_plane *plane;
604be85547ce4d Andy Yan 2022-04-22 2254 struct device_node *port;
604be85547ce4d Andy Yan 2022-04-22 2255 struct vop2_video_port *vp;
604be85547ce4d Andy Yan 2022-04-22 2256 int i, nvp, nvps = 0;
604be85547ce4d Andy Yan 2022-04-22 2257 int ret;
604be85547ce4d Andy Yan 2022-04-22 2258
604be85547ce4d Andy Yan 2022-04-22 2259 for (i = 0; i < vop2_data->nr_vps; i++) {
604be85547ce4d Andy Yan 2022-04-22 2260 const struct vop2_video_port_data *vp_data;
604be85547ce4d Andy Yan 2022-04-22 2261 struct device_node *np;
604be85547ce4d Andy Yan 2022-04-22 2262 char dclk_name[9];
604be85547ce4d Andy Yan 2022-04-22 2263
604be85547ce4d Andy Yan 2022-04-22 2264 vp_data = &vop2_data->vp[i];
604be85547ce4d Andy Yan 2022-04-22 2265 vp = &vop2->vps[i];
604be85547ce4d Andy Yan 2022-04-22 2266 vp->vop2 = vop2;
604be85547ce4d Andy Yan 2022-04-22 2267 vp->id = vp_data->id;
604be85547ce4d Andy Yan 2022-04-22 2268 vp->regs = vp_data->regs;
604be85547ce4d Andy Yan 2022-04-22 2269 vp->data = vp_data;
604be85547ce4d Andy Yan 2022-04-22 2270
604be85547ce4d Andy Yan 2022-04-22 2271 snprintf(dclk_name, sizeof(dclk_name), "dclk_vp%d", vp->id);
604be85547ce4d Andy Yan 2022-04-22 2272 vp->dclk = devm_clk_get(vop2->dev, dclk_name);
604be85547ce4d Andy Yan 2022-04-22 2273 if (IS_ERR(vp->dclk)) {
604be85547ce4d Andy Yan 2022-04-22 2274 drm_err(vop2->drm, "failed to get %s\n", dclk_name);
604be85547ce4d Andy Yan 2022-04-22 2275 return PTR_ERR(vp->dclk);
604be85547ce4d Andy Yan 2022-04-22 2276 }
604be85547ce4d Andy Yan 2022-04-22 2277
604be85547ce4d Andy Yan 2022-04-22 2278 np = of_graph_get_remote_node(dev->of_node, i, -1);
604be85547ce4d Andy Yan 2022-04-22 2279 if (!np) {
604be85547ce4d Andy Yan 2022-04-22 2280 drm_dbg(vop2->drm, "%s: No remote for vp%d\n", __func__, i);
604be85547ce4d Andy Yan 2022-04-22 2281 continue;
604be85547ce4d Andy Yan 2022-04-22 2282 }
604be85547ce4d Andy Yan 2022-04-22 2283 of_node_put(np);
604be85547ce4d Andy Yan 2022-04-22 2284
604be85547ce4d Andy Yan 2022-04-22 2285 port = of_graph_get_port_by_id(dev->of_node, i);
604be85547ce4d Andy Yan 2022-04-22 2286 if (!port) {
604be85547ce4d Andy Yan 2022-04-22 2287 drm_err(vop2->drm, "no port node found for video_port%d\n", i);
604be85547ce4d Andy Yan 2022-04-22 2288 return -ENOENT;
604be85547ce4d Andy Yan 2022-04-22 2289 }
604be85547ce4d Andy Yan 2022-04-22 2290
604be85547ce4d Andy Yan 2022-04-22 2291 vp->crtc.port = port;
604be85547ce4d Andy Yan 2022-04-22 2292 nvps++;
604be85547ce4d Andy Yan 2022-04-22 2293 }
604be85547ce4d Andy Yan 2022-04-22 2294
604be85547ce4d Andy Yan 2022-04-22 2295 nvp = 0;
604be85547ce4d Andy Yan 2022-04-22 2296 for (i = 0; i < vop2->registered_num_wins; i++) {
604be85547ce4d Andy Yan 2022-04-22 2297 struct vop2_win *win = &vop2->win[i];
604be85547ce4d Andy Yan 2022-04-22 2298 u32 possible_crtcs;
604be85547ce4d Andy Yan 2022-04-22 2299
604be85547ce4d Andy Yan 2022-04-22 2300 if (vop2->data->soc_id == 3566) {
604be85547ce4d Andy Yan 2022-04-22 2301 /*
604be85547ce4d Andy Yan 2022-04-22 2302 * On RK3566 these windows don't have an independent
604be85547ce4d Andy Yan 2022-04-22 2303 * framebuffer. They share the framebuffer with smart0,
604be85547ce4d Andy Yan 2022-04-22 2304 * esmart0 and cluster0 respectively.
604be85547ce4d Andy Yan 2022-04-22 2305 */
604be85547ce4d Andy Yan 2022-04-22 2306 switch (win->data->phys_id) {
604be85547ce4d Andy Yan 2022-04-22 2307 case ROCKCHIP_VOP2_SMART1:
604be85547ce4d Andy Yan 2022-04-22 2308 case ROCKCHIP_VOP2_ESMART1:
604be85547ce4d Andy Yan 2022-04-22 2309 case ROCKCHIP_VOP2_CLUSTER1:
604be85547ce4d Andy Yan 2022-04-22 2310 continue;
604be85547ce4d Andy Yan 2022-04-22 2311 }
604be85547ce4d Andy Yan 2022-04-22 2312 }
604be85547ce4d Andy Yan 2022-04-22 2313
604be85547ce4d Andy Yan 2022-04-22 2314 if (win->type == DRM_PLANE_TYPE_PRIMARY) {
604be85547ce4d Andy Yan 2022-04-22 2315 vp = find_vp_without_primary(vop2);
604be85547ce4d Andy Yan 2022-04-22 @2316 if (vp) {
604be85547ce4d Andy Yan 2022-04-22 2317 possible_crtcs = BIT(nvp);
604be85547ce4d Andy Yan 2022-04-22 2318 vp->primary_plane = win;
604be85547ce4d Andy Yan 2022-04-22 2319 nvp++;
604be85547ce4d Andy Yan 2022-04-22 2320 } else {
604be85547ce4d Andy Yan 2022-04-22 2321 /* change the unused primary window to overlay window */
604be85547ce4d Andy Yan 2022-04-22 2322 win->type = DRM_PLANE_TYPE_OVERLAY;
604be85547ce4d Andy Yan 2022-04-22 2323 }
368419a2d429e2 Michael Riesch 2023-01-24 2324 } else if (win->type == DRM_PLANE_TYPE_OVERLAY) {
604be85547ce4d Andy Yan 2022-04-22 2325 possible_crtcs = (1 << nvps) - 1;
368419a2d429e2 Michael Riesch 2023-01-24 2326 } else {
368419a2d429e2 Michael Riesch 2023-01-24 2327 possible_crtcs = 0;
368419a2d429e2 Michael Riesch 2023-01-24 2328 }
604be85547ce4d Andy Yan 2022-04-22 2329
604be85547ce4d Andy Yan 2022-04-22 2330 ret = vop2_plane_init(vop2, win, possible_crtcs);
604be85547ce4d Andy Yan 2022-04-22 2331 if (ret) {
604be85547ce4d Andy Yan 2022-04-22 2332 drm_err(vop2->drm, "failed to init plane %s: %d\n",
604be85547ce4d Andy Yan 2022-04-22 2333 win->data->name, ret);
604be85547ce4d Andy Yan 2022-04-22 2334 return ret;
604be85547ce4d Andy Yan 2022-04-22 2335 }
604be85547ce4d Andy Yan 2022-04-22 2336 }
604be85547ce4d Andy Yan 2022-04-22 2337
604be85547ce4d Andy Yan 2022-04-22 2338 for (i = 0; i < vop2_data->nr_vps; i++) {
604be85547ce4d Andy Yan 2022-04-22 2339 vp = &vop2->vps[i];
604be85547ce4d Andy Yan 2022-04-22 2340
604be85547ce4d Andy Yan 2022-04-22 2341 if (!vp->crtc.port)
604be85547ce4d Andy Yan 2022-04-22 2342 continue;
604be85547ce4d Andy Yan 2022-04-22 2343
604be85547ce4d Andy Yan 2022-04-22 2344 plane = &vp->primary_plane->base;
604be85547ce4d Andy Yan 2022-04-22 2345
604be85547ce4d Andy Yan 2022-04-22 2346 ret = drm_crtc_init_with_planes(drm, &vp->crtc, plane, NULL,
604be85547ce4d Andy Yan 2022-04-22 2347 &vop2_crtc_funcs,
604be85547ce4d Andy Yan 2022-04-22 2348 "video_port%d", vp->id);
604be85547ce4d Andy Yan 2022-04-22 2349 if (ret) {
604be85547ce4d Andy Yan 2022-04-22 2350 drm_err(vop2->drm, "crtc init for video_port%d failed\n", i);
604be85547ce4d Andy Yan 2022-04-22 2351 return ret;
604be85547ce4d Andy Yan 2022-04-22 2352 }
604be85547ce4d Andy Yan 2022-04-22 2353
604be85547ce4d Andy Yan 2022-04-22 2354 drm_crtc_helper_add(&vp->crtc, &vop2_crtc_helper_funcs);
604be85547ce4d Andy Yan 2022-04-22 2355
604be85547ce4d Andy Yan 2022-04-22 2356 init_completion(&vp->dsp_hold_completion);
604be85547ce4d Andy Yan 2022-04-22 2357 }
604be85547ce4d Andy Yan 2022-04-22 2358
604be85547ce4d Andy Yan 2022-04-22 2359 /*
604be85547ce4d Andy Yan 2022-04-22 2360 * On the VOP2 it's very hard to change the number of layers on a VP
604be85547ce4d Andy Yan 2022-04-22 2361 * during runtime, so we distribute the layers equally over the used
604be85547ce4d Andy Yan 2022-04-22 2362 * VPs
604be85547ce4d Andy Yan 2022-04-22 2363 */
604be85547ce4d Andy Yan 2022-04-22 2364 for (i = 0; i < vop2->data->nr_vps; i++) {
604be85547ce4d Andy Yan 2022-04-22 2365 struct vop2_video_port *vp = &vop2->vps[i];
604be85547ce4d Andy Yan 2022-04-22 2366
604be85547ce4d Andy Yan 2022-04-22 2367 if (vp->crtc.port)
604be85547ce4d Andy Yan 2022-04-22 2368 vp->nlayers = NR_LAYERS / nvps;
604be85547ce4d Andy Yan 2022-04-22 2369 }
604be85547ce4d Andy Yan 2022-04-22 2370
604be85547ce4d Andy Yan 2022-04-22 2371 return 0;
604be85547ce4d Andy Yan 2022-04-22 2372 }
604be85547ce4d Andy Yan 2022-04-22 2373
:::::: The code at line 2316 was first introduced by commit
:::::: 604be85547ce4d61b89292d2f9a78c721b778c16 drm/rockchip: Add VOP2 driver
:::::: TO: Andy Yan <andy.yan at rock-chips.com>
:::::: CC: Heiko Stuebner <heiko at sntech.de>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
More information about the dri-devel
mailing list