All of lore.kernel.org
 help / color / mirror / Atom feed
* drivers/gpu/drm/rockchip/rockchip_vop2_reg.c:1521 rk3568_vop2_setup_layer_mixer() error: uninitialized symbol 'old_win'.
@ 2025-12-22 13:07 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2025-12-22 13:07 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Andy Yan <andy.yan@rock-chips.com>
CC: Heiko Stuebner <heiko@sntech.de>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   9448598b22c50c8a5bb77a9103e2d49f134c9578
commit: 328e6885996ca2c6eb8b07d3c9bb1439fdcb088f drm/rockchip: vop2: Add platform specific callback
date:   10 months ago
:::::: branch date: 13 hours ago
:::::: commit date: 10 months ago
config: arm64-randconfig-r071-20251214 (https://download.01.org/0day-ci/archive/20251222/202512222103.wWWYWTbM-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 1335a05ab8bc8339ce24be3a9da89d8c3f4e0571)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202512222103.wWWYWTbM-lkp@intel.com/

smatch warnings:
drivers/gpu/drm/rockchip/rockchip_vop2_reg.c:1521 rk3568_vop2_setup_layer_mixer() error: uninitialized symbol 'old_win'.

vim +/old_win +1521 drivers/gpu/drm/rockchip/rockchip_vop2_reg.c

328e6885996ca2 Andy Yan 2025-02-18  1393  
328e6885996ca2 Andy Yan 2025-02-18  1394  static void rk3568_vop2_setup_layer_mixer(struct vop2_video_port *vp)
328e6885996ca2 Andy Yan 2025-02-18  1395  {
328e6885996ca2 Andy Yan 2025-02-18  1396  	struct vop2 *vop2 = vp->vop2;
328e6885996ca2 Andy Yan 2025-02-18  1397  	struct drm_plane *plane;
328e6885996ca2 Andy Yan 2025-02-18  1398  	u32 layer_sel = 0;
328e6885996ca2 Andy Yan 2025-02-18  1399  	u32 port_sel;
328e6885996ca2 Andy Yan 2025-02-18  1400  	u8 layer_id;
328e6885996ca2 Andy Yan 2025-02-18  1401  	u8 old_layer_id;
328e6885996ca2 Andy Yan 2025-02-18  1402  	u8 layer_sel_id;
328e6885996ca2 Andy Yan 2025-02-18  1403  	unsigned int ofs;
328e6885996ca2 Andy Yan 2025-02-18  1404  	u32 ovl_ctrl;
328e6885996ca2 Andy Yan 2025-02-18  1405  	int i;
328e6885996ca2 Andy Yan 2025-02-18  1406  	struct vop2_video_port *vp0 = &vop2->vps[0];
328e6885996ca2 Andy Yan 2025-02-18  1407  	struct vop2_video_port *vp1 = &vop2->vps[1];
328e6885996ca2 Andy Yan 2025-02-18  1408  	struct vop2_video_port *vp2 = &vop2->vps[2];
328e6885996ca2 Andy Yan 2025-02-18  1409  	struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(vp->crtc.state);
328e6885996ca2 Andy Yan 2025-02-18  1410  
328e6885996ca2 Andy Yan 2025-02-18  1411  	ovl_ctrl = vop2_readl(vop2, RK3568_OVL_CTRL);
328e6885996ca2 Andy Yan 2025-02-18  1412  	ovl_ctrl |= RK3568_OVL_CTRL__LAYERSEL_REGDONE_IMD;
328e6885996ca2 Andy Yan 2025-02-18  1413  	if (vcstate->yuv_overlay)
328e6885996ca2 Andy Yan 2025-02-18  1414  		ovl_ctrl |= RK3568_OVL_CTRL__YUV_MODE(vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1415  	else
328e6885996ca2 Andy Yan 2025-02-18  1416  		ovl_ctrl &= ~RK3568_OVL_CTRL__YUV_MODE(vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1417  
328e6885996ca2 Andy Yan 2025-02-18  1418  	vop2_writel(vop2, RK3568_OVL_CTRL, ovl_ctrl);
328e6885996ca2 Andy Yan 2025-02-18  1419  
328e6885996ca2 Andy Yan 2025-02-18  1420  	port_sel = vop2_readl(vop2, RK3568_OVL_PORT_SEL);
328e6885996ca2 Andy Yan 2025-02-18  1421  	port_sel &= RK3568_OVL_PORT_SEL__SEL_PORT;
328e6885996ca2 Andy Yan 2025-02-18  1422  
328e6885996ca2 Andy Yan 2025-02-18  1423  	if (vp0->nlayers)
328e6885996ca2 Andy Yan 2025-02-18  1424  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT0_MUX,
328e6885996ca2 Andy Yan 2025-02-18  1425  				     vp0->nlayers - 1);
328e6885996ca2 Andy Yan 2025-02-18  1426  	else
328e6885996ca2 Andy Yan 2025-02-18  1427  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT0_MUX, 8);
328e6885996ca2 Andy Yan 2025-02-18  1428  
328e6885996ca2 Andy Yan 2025-02-18  1429  	if (vp1->nlayers)
328e6885996ca2 Andy Yan 2025-02-18  1430  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT1_MUX,
328e6885996ca2 Andy Yan 2025-02-18  1431  				     (vp0->nlayers + vp1->nlayers - 1));
328e6885996ca2 Andy Yan 2025-02-18  1432  	else
328e6885996ca2 Andy Yan 2025-02-18  1433  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT1_MUX, 8);
328e6885996ca2 Andy Yan 2025-02-18  1434  
328e6885996ca2 Andy Yan 2025-02-18  1435  	if (vp2->nlayers)
328e6885996ca2 Andy Yan 2025-02-18  1436  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT2_MUX,
328e6885996ca2 Andy Yan 2025-02-18  1437  			(vp2->nlayers + vp1->nlayers + vp0->nlayers - 1));
328e6885996ca2 Andy Yan 2025-02-18  1438  	else
328e6885996ca2 Andy Yan 2025-02-18  1439  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT2_MUX, 8);
328e6885996ca2 Andy Yan 2025-02-18  1440  
328e6885996ca2 Andy Yan 2025-02-18  1441  	layer_sel = vop2_readl(vop2, RK3568_OVL_LAYER_SEL);
328e6885996ca2 Andy Yan 2025-02-18  1442  
328e6885996ca2 Andy Yan 2025-02-18  1443  	ofs = 0;
328e6885996ca2 Andy Yan 2025-02-18  1444  	for (i = 0; i < vp->id; i++)
328e6885996ca2 Andy Yan 2025-02-18  1445  		ofs += vop2->vps[i].nlayers;
328e6885996ca2 Andy Yan 2025-02-18  1446  
328e6885996ca2 Andy Yan 2025-02-18  1447  	drm_atomic_crtc_for_each_plane(plane, &vp->crtc) {
328e6885996ca2 Andy Yan 2025-02-18  1448  		struct vop2_win *win = to_vop2_win(plane);
328e6885996ca2 Andy Yan 2025-02-18  1449  		struct vop2_win *old_win;
328e6885996ca2 Andy Yan 2025-02-18  1450  
328e6885996ca2 Andy Yan 2025-02-18  1451  		layer_id = (u8)(plane->state->normalized_zpos + ofs);
328e6885996ca2 Andy Yan 2025-02-18  1452  		/*
328e6885996ca2 Andy Yan 2025-02-18  1453  		 * Find the layer this win bind in old state.
328e6885996ca2 Andy Yan 2025-02-18  1454  		 */
328e6885996ca2 Andy Yan 2025-02-18  1455  		for (old_layer_id = 0; old_layer_id < vop2->data->win_size; old_layer_id++) {
328e6885996ca2 Andy Yan 2025-02-18  1456  			layer_sel_id = (layer_sel >> (4 * old_layer_id)) & 0xf;
328e6885996ca2 Andy Yan 2025-02-18  1457  			if (layer_sel_id == win->data->layer_sel_id)
328e6885996ca2 Andy Yan 2025-02-18  1458  				break;
328e6885996ca2 Andy Yan 2025-02-18  1459  		}
328e6885996ca2 Andy Yan 2025-02-18  1460  
328e6885996ca2 Andy Yan 2025-02-18  1461  		/*
328e6885996ca2 Andy Yan 2025-02-18  1462  		 * Find the win bind to this layer in old state
328e6885996ca2 Andy Yan 2025-02-18  1463  		 */
328e6885996ca2 Andy Yan 2025-02-18  1464  		for (i = 0; i < vop2->data->win_size; i++) {
328e6885996ca2 Andy Yan 2025-02-18  1465  			old_win = &vop2->win[i];
328e6885996ca2 Andy Yan 2025-02-18  1466  			layer_sel_id = (layer_sel >> (4 * layer_id)) & 0xf;
328e6885996ca2 Andy Yan 2025-02-18  1467  			if (layer_sel_id == old_win->data->layer_sel_id)
328e6885996ca2 Andy Yan 2025-02-18  1468  				break;
328e6885996ca2 Andy Yan 2025-02-18  1469  		}
328e6885996ca2 Andy Yan 2025-02-18  1470  
328e6885996ca2 Andy Yan 2025-02-18  1471  		switch (win->data->phys_id) {
328e6885996ca2 Andy Yan 2025-02-18  1472  		case ROCKCHIP_VOP2_CLUSTER0:
328e6885996ca2 Andy Yan 2025-02-18  1473  			port_sel &= ~RK3568_OVL_PORT_SEL__CLUSTER0;
328e6885996ca2 Andy Yan 2025-02-18  1474  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__CLUSTER0, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1475  			break;
328e6885996ca2 Andy Yan 2025-02-18  1476  		case ROCKCHIP_VOP2_CLUSTER1:
328e6885996ca2 Andy Yan 2025-02-18  1477  			port_sel &= ~RK3568_OVL_PORT_SEL__CLUSTER1;
328e6885996ca2 Andy Yan 2025-02-18  1478  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__CLUSTER1, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1479  			break;
328e6885996ca2 Andy Yan 2025-02-18  1480  		case ROCKCHIP_VOP2_CLUSTER2:
328e6885996ca2 Andy Yan 2025-02-18  1481  			port_sel &= ~RK3588_OVL_PORT_SEL__CLUSTER2;
328e6885996ca2 Andy Yan 2025-02-18  1482  			port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__CLUSTER2, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1483  			break;
328e6885996ca2 Andy Yan 2025-02-18  1484  		case ROCKCHIP_VOP2_CLUSTER3:
328e6885996ca2 Andy Yan 2025-02-18  1485  			port_sel &= ~RK3588_OVL_PORT_SEL__CLUSTER3;
328e6885996ca2 Andy Yan 2025-02-18  1486  			port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__CLUSTER3, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1487  			break;
328e6885996ca2 Andy Yan 2025-02-18  1488  		case ROCKCHIP_VOP2_ESMART0:
328e6885996ca2 Andy Yan 2025-02-18  1489  			port_sel &= ~RK3568_OVL_PORT_SEL__ESMART0;
328e6885996ca2 Andy Yan 2025-02-18  1490  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__ESMART0, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1491  			break;
328e6885996ca2 Andy Yan 2025-02-18  1492  		case ROCKCHIP_VOP2_ESMART1:
328e6885996ca2 Andy Yan 2025-02-18  1493  			port_sel &= ~RK3568_OVL_PORT_SEL__ESMART1;
328e6885996ca2 Andy Yan 2025-02-18  1494  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__ESMART1, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1495  			break;
328e6885996ca2 Andy Yan 2025-02-18  1496  		case ROCKCHIP_VOP2_ESMART2:
328e6885996ca2 Andy Yan 2025-02-18  1497  			port_sel &= ~RK3588_OVL_PORT_SEL__ESMART2;
328e6885996ca2 Andy Yan 2025-02-18  1498  			port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__ESMART2, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1499  			break;
328e6885996ca2 Andy Yan 2025-02-18  1500  		case ROCKCHIP_VOP2_ESMART3:
328e6885996ca2 Andy Yan 2025-02-18  1501  			port_sel &= ~RK3588_OVL_PORT_SEL__ESMART3;
328e6885996ca2 Andy Yan 2025-02-18  1502  			port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__ESMART3, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1503  			break;
328e6885996ca2 Andy Yan 2025-02-18  1504  		case ROCKCHIP_VOP2_SMART0:
328e6885996ca2 Andy Yan 2025-02-18  1505  			port_sel &= ~RK3568_OVL_PORT_SEL__SMART0;
328e6885996ca2 Andy Yan 2025-02-18  1506  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__SMART0, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1507  			break;
328e6885996ca2 Andy Yan 2025-02-18  1508  		case ROCKCHIP_VOP2_SMART1:
328e6885996ca2 Andy Yan 2025-02-18  1509  			port_sel &= ~RK3568_OVL_PORT_SEL__SMART1;
328e6885996ca2 Andy Yan 2025-02-18  1510  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__SMART1, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1511  			break;
328e6885996ca2 Andy Yan 2025-02-18  1512  		}
328e6885996ca2 Andy Yan 2025-02-18  1513  
328e6885996ca2 Andy Yan 2025-02-18  1514  		layer_sel &= ~RK3568_OVL_LAYER_SEL__LAYER(layer_id, 0x7);
328e6885996ca2 Andy Yan 2025-02-18  1515  		layer_sel |= RK3568_OVL_LAYER_SEL__LAYER(layer_id, win->data->layer_sel_id);
328e6885996ca2 Andy Yan 2025-02-18  1516  		/*
328e6885996ca2 Andy Yan 2025-02-18  1517  		 * When we bind a window from layerM to layerN, we also need to move the old
328e6885996ca2 Andy Yan 2025-02-18  1518  		 * window on layerN to layerM to avoid one window selected by two or more layers.
328e6885996ca2 Andy Yan 2025-02-18  1519  		 */
328e6885996ca2 Andy Yan 2025-02-18  1520  		layer_sel &= ~RK3568_OVL_LAYER_SEL__LAYER(old_layer_id, 0x7);
328e6885996ca2 Andy Yan 2025-02-18 @1521  		layer_sel |= RK3568_OVL_LAYER_SEL__LAYER(old_layer_id, old_win->data->layer_sel_id);
328e6885996ca2 Andy Yan 2025-02-18  1522  	}
328e6885996ca2 Andy Yan 2025-02-18  1523  
328e6885996ca2 Andy Yan 2025-02-18  1524  	vop2_writel(vop2, RK3568_OVL_LAYER_SEL, layer_sel);
328e6885996ca2 Andy Yan 2025-02-18  1525  	vop2_writel(vop2, RK3568_OVL_PORT_SEL, port_sel);
328e6885996ca2 Andy Yan 2025-02-18  1526  }
328e6885996ca2 Andy Yan 2025-02-18  1527  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 2+ messages in thread
* drivers/gpu/drm/rockchip/rockchip_vop2_reg.c:1521 rk3568_vop2_setup_layer_mixer() error: uninitialized symbol 'old_win'.
@ 2025-12-15 19:24 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2025-12-15 19:24 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Andy Yan <andy.yan@rock-chips.com>
CC: Heiko Stuebner <heiko@sntech.de>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   8f0b4cce4481fb22653697cced8d0d04027cb1e8
commit: 328e6885996ca2c6eb8b07d3c9bb1439fdcb088f drm/rockchip: vop2: Add platform specific callback
date:   10 months ago
:::::: branch date: 2 days ago
:::::: commit date: 10 months ago
config: arm64-randconfig-r071-20251214 (https://download.01.org/0day-ci/archive/20251216/202512160328.WKIDuasI-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 1335a05ab8bc8339ce24be3a9da89d8c3f4e0571)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202512160328.WKIDuasI-lkp@intel.com/

smatch warnings:
drivers/gpu/drm/rockchip/rockchip_vop2_reg.c:1521 rk3568_vop2_setup_layer_mixer() error: uninitialized symbol 'old_win'.

vim +/old_win +1521 drivers/gpu/drm/rockchip/rockchip_vop2_reg.c

328e6885996ca2 Andy Yan 2025-02-18  1393  
328e6885996ca2 Andy Yan 2025-02-18  1394  static void rk3568_vop2_setup_layer_mixer(struct vop2_video_port *vp)
328e6885996ca2 Andy Yan 2025-02-18  1395  {
328e6885996ca2 Andy Yan 2025-02-18  1396  	struct vop2 *vop2 = vp->vop2;
328e6885996ca2 Andy Yan 2025-02-18  1397  	struct drm_plane *plane;
328e6885996ca2 Andy Yan 2025-02-18  1398  	u32 layer_sel = 0;
328e6885996ca2 Andy Yan 2025-02-18  1399  	u32 port_sel;
328e6885996ca2 Andy Yan 2025-02-18  1400  	u8 layer_id;
328e6885996ca2 Andy Yan 2025-02-18  1401  	u8 old_layer_id;
328e6885996ca2 Andy Yan 2025-02-18  1402  	u8 layer_sel_id;
328e6885996ca2 Andy Yan 2025-02-18  1403  	unsigned int ofs;
328e6885996ca2 Andy Yan 2025-02-18  1404  	u32 ovl_ctrl;
328e6885996ca2 Andy Yan 2025-02-18  1405  	int i;
328e6885996ca2 Andy Yan 2025-02-18  1406  	struct vop2_video_port *vp0 = &vop2->vps[0];
328e6885996ca2 Andy Yan 2025-02-18  1407  	struct vop2_video_port *vp1 = &vop2->vps[1];
328e6885996ca2 Andy Yan 2025-02-18  1408  	struct vop2_video_port *vp2 = &vop2->vps[2];
328e6885996ca2 Andy Yan 2025-02-18  1409  	struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(vp->crtc.state);
328e6885996ca2 Andy Yan 2025-02-18  1410  
328e6885996ca2 Andy Yan 2025-02-18  1411  	ovl_ctrl = vop2_readl(vop2, RK3568_OVL_CTRL);
328e6885996ca2 Andy Yan 2025-02-18  1412  	ovl_ctrl |= RK3568_OVL_CTRL__LAYERSEL_REGDONE_IMD;
328e6885996ca2 Andy Yan 2025-02-18  1413  	if (vcstate->yuv_overlay)
328e6885996ca2 Andy Yan 2025-02-18  1414  		ovl_ctrl |= RK3568_OVL_CTRL__YUV_MODE(vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1415  	else
328e6885996ca2 Andy Yan 2025-02-18  1416  		ovl_ctrl &= ~RK3568_OVL_CTRL__YUV_MODE(vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1417  
328e6885996ca2 Andy Yan 2025-02-18  1418  	vop2_writel(vop2, RK3568_OVL_CTRL, ovl_ctrl);
328e6885996ca2 Andy Yan 2025-02-18  1419  
328e6885996ca2 Andy Yan 2025-02-18  1420  	port_sel = vop2_readl(vop2, RK3568_OVL_PORT_SEL);
328e6885996ca2 Andy Yan 2025-02-18  1421  	port_sel &= RK3568_OVL_PORT_SEL__SEL_PORT;
328e6885996ca2 Andy Yan 2025-02-18  1422  
328e6885996ca2 Andy Yan 2025-02-18  1423  	if (vp0->nlayers)
328e6885996ca2 Andy Yan 2025-02-18  1424  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT0_MUX,
328e6885996ca2 Andy Yan 2025-02-18  1425  				     vp0->nlayers - 1);
328e6885996ca2 Andy Yan 2025-02-18  1426  	else
328e6885996ca2 Andy Yan 2025-02-18  1427  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT0_MUX, 8);
328e6885996ca2 Andy Yan 2025-02-18  1428  
328e6885996ca2 Andy Yan 2025-02-18  1429  	if (vp1->nlayers)
328e6885996ca2 Andy Yan 2025-02-18  1430  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT1_MUX,
328e6885996ca2 Andy Yan 2025-02-18  1431  				     (vp0->nlayers + vp1->nlayers - 1));
328e6885996ca2 Andy Yan 2025-02-18  1432  	else
328e6885996ca2 Andy Yan 2025-02-18  1433  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT1_MUX, 8);
328e6885996ca2 Andy Yan 2025-02-18  1434  
328e6885996ca2 Andy Yan 2025-02-18  1435  	if (vp2->nlayers)
328e6885996ca2 Andy Yan 2025-02-18  1436  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT2_MUX,
328e6885996ca2 Andy Yan 2025-02-18  1437  			(vp2->nlayers + vp1->nlayers + vp0->nlayers - 1));
328e6885996ca2 Andy Yan 2025-02-18  1438  	else
328e6885996ca2 Andy Yan 2025-02-18  1439  		port_sel |= FIELD_PREP(RK3568_OVL_PORT_SET__PORT2_MUX, 8);
328e6885996ca2 Andy Yan 2025-02-18  1440  
328e6885996ca2 Andy Yan 2025-02-18  1441  	layer_sel = vop2_readl(vop2, RK3568_OVL_LAYER_SEL);
328e6885996ca2 Andy Yan 2025-02-18  1442  
328e6885996ca2 Andy Yan 2025-02-18  1443  	ofs = 0;
328e6885996ca2 Andy Yan 2025-02-18  1444  	for (i = 0; i < vp->id; i++)
328e6885996ca2 Andy Yan 2025-02-18  1445  		ofs += vop2->vps[i].nlayers;
328e6885996ca2 Andy Yan 2025-02-18  1446  
328e6885996ca2 Andy Yan 2025-02-18  1447  	drm_atomic_crtc_for_each_plane(plane, &vp->crtc) {
328e6885996ca2 Andy Yan 2025-02-18  1448  		struct vop2_win *win = to_vop2_win(plane);
328e6885996ca2 Andy Yan 2025-02-18  1449  		struct vop2_win *old_win;
328e6885996ca2 Andy Yan 2025-02-18  1450  
328e6885996ca2 Andy Yan 2025-02-18  1451  		layer_id = (u8)(plane->state->normalized_zpos + ofs);
328e6885996ca2 Andy Yan 2025-02-18  1452  		/*
328e6885996ca2 Andy Yan 2025-02-18  1453  		 * Find the layer this win bind in old state.
328e6885996ca2 Andy Yan 2025-02-18  1454  		 */
328e6885996ca2 Andy Yan 2025-02-18  1455  		for (old_layer_id = 0; old_layer_id < vop2->data->win_size; old_layer_id++) {
328e6885996ca2 Andy Yan 2025-02-18  1456  			layer_sel_id = (layer_sel >> (4 * old_layer_id)) & 0xf;
328e6885996ca2 Andy Yan 2025-02-18  1457  			if (layer_sel_id == win->data->layer_sel_id)
328e6885996ca2 Andy Yan 2025-02-18  1458  				break;
328e6885996ca2 Andy Yan 2025-02-18  1459  		}
328e6885996ca2 Andy Yan 2025-02-18  1460  
328e6885996ca2 Andy Yan 2025-02-18  1461  		/*
328e6885996ca2 Andy Yan 2025-02-18  1462  		 * Find the win bind to this layer in old state
328e6885996ca2 Andy Yan 2025-02-18  1463  		 */
328e6885996ca2 Andy Yan 2025-02-18  1464  		for (i = 0; i < vop2->data->win_size; i++) {
328e6885996ca2 Andy Yan 2025-02-18  1465  			old_win = &vop2->win[i];
328e6885996ca2 Andy Yan 2025-02-18  1466  			layer_sel_id = (layer_sel >> (4 * layer_id)) & 0xf;
328e6885996ca2 Andy Yan 2025-02-18  1467  			if (layer_sel_id == old_win->data->layer_sel_id)
328e6885996ca2 Andy Yan 2025-02-18  1468  				break;
328e6885996ca2 Andy Yan 2025-02-18  1469  		}
328e6885996ca2 Andy Yan 2025-02-18  1470  
328e6885996ca2 Andy Yan 2025-02-18  1471  		switch (win->data->phys_id) {
328e6885996ca2 Andy Yan 2025-02-18  1472  		case ROCKCHIP_VOP2_CLUSTER0:
328e6885996ca2 Andy Yan 2025-02-18  1473  			port_sel &= ~RK3568_OVL_PORT_SEL__CLUSTER0;
328e6885996ca2 Andy Yan 2025-02-18  1474  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__CLUSTER0, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1475  			break;
328e6885996ca2 Andy Yan 2025-02-18  1476  		case ROCKCHIP_VOP2_CLUSTER1:
328e6885996ca2 Andy Yan 2025-02-18  1477  			port_sel &= ~RK3568_OVL_PORT_SEL__CLUSTER1;
328e6885996ca2 Andy Yan 2025-02-18  1478  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__CLUSTER1, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1479  			break;
328e6885996ca2 Andy Yan 2025-02-18  1480  		case ROCKCHIP_VOP2_CLUSTER2:
328e6885996ca2 Andy Yan 2025-02-18  1481  			port_sel &= ~RK3588_OVL_PORT_SEL__CLUSTER2;
328e6885996ca2 Andy Yan 2025-02-18  1482  			port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__CLUSTER2, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1483  			break;
328e6885996ca2 Andy Yan 2025-02-18  1484  		case ROCKCHIP_VOP2_CLUSTER3:
328e6885996ca2 Andy Yan 2025-02-18  1485  			port_sel &= ~RK3588_OVL_PORT_SEL__CLUSTER3;
328e6885996ca2 Andy Yan 2025-02-18  1486  			port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__CLUSTER3, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1487  			break;
328e6885996ca2 Andy Yan 2025-02-18  1488  		case ROCKCHIP_VOP2_ESMART0:
328e6885996ca2 Andy Yan 2025-02-18  1489  			port_sel &= ~RK3568_OVL_PORT_SEL__ESMART0;
328e6885996ca2 Andy Yan 2025-02-18  1490  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__ESMART0, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1491  			break;
328e6885996ca2 Andy Yan 2025-02-18  1492  		case ROCKCHIP_VOP2_ESMART1:
328e6885996ca2 Andy Yan 2025-02-18  1493  			port_sel &= ~RK3568_OVL_PORT_SEL__ESMART1;
328e6885996ca2 Andy Yan 2025-02-18  1494  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__ESMART1, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1495  			break;
328e6885996ca2 Andy Yan 2025-02-18  1496  		case ROCKCHIP_VOP2_ESMART2:
328e6885996ca2 Andy Yan 2025-02-18  1497  			port_sel &= ~RK3588_OVL_PORT_SEL__ESMART2;
328e6885996ca2 Andy Yan 2025-02-18  1498  			port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__ESMART2, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1499  			break;
328e6885996ca2 Andy Yan 2025-02-18  1500  		case ROCKCHIP_VOP2_ESMART3:
328e6885996ca2 Andy Yan 2025-02-18  1501  			port_sel &= ~RK3588_OVL_PORT_SEL__ESMART3;
328e6885996ca2 Andy Yan 2025-02-18  1502  			port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__ESMART3, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1503  			break;
328e6885996ca2 Andy Yan 2025-02-18  1504  		case ROCKCHIP_VOP2_SMART0:
328e6885996ca2 Andy Yan 2025-02-18  1505  			port_sel &= ~RK3568_OVL_PORT_SEL__SMART0;
328e6885996ca2 Andy Yan 2025-02-18  1506  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__SMART0, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1507  			break;
328e6885996ca2 Andy Yan 2025-02-18  1508  		case ROCKCHIP_VOP2_SMART1:
328e6885996ca2 Andy Yan 2025-02-18  1509  			port_sel &= ~RK3568_OVL_PORT_SEL__SMART1;
328e6885996ca2 Andy Yan 2025-02-18  1510  			port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__SMART1, vp->id);
328e6885996ca2 Andy Yan 2025-02-18  1511  			break;
328e6885996ca2 Andy Yan 2025-02-18  1512  		}
328e6885996ca2 Andy Yan 2025-02-18  1513  
328e6885996ca2 Andy Yan 2025-02-18  1514  		layer_sel &= ~RK3568_OVL_LAYER_SEL__LAYER(layer_id, 0x7);
328e6885996ca2 Andy Yan 2025-02-18  1515  		layer_sel |= RK3568_OVL_LAYER_SEL__LAYER(layer_id, win->data->layer_sel_id);
328e6885996ca2 Andy Yan 2025-02-18  1516  		/*
328e6885996ca2 Andy Yan 2025-02-18  1517  		 * When we bind a window from layerM to layerN, we also need to move the old
328e6885996ca2 Andy Yan 2025-02-18  1518  		 * window on layerN to layerM to avoid one window selected by two or more layers.
328e6885996ca2 Andy Yan 2025-02-18  1519  		 */
328e6885996ca2 Andy Yan 2025-02-18  1520  		layer_sel &= ~RK3568_OVL_LAYER_SEL__LAYER(old_layer_id, 0x7);
328e6885996ca2 Andy Yan 2025-02-18 @1521  		layer_sel |= RK3568_OVL_LAYER_SEL__LAYER(old_layer_id, old_win->data->layer_sel_id);
328e6885996ca2 Andy Yan 2025-02-18  1522  	}
328e6885996ca2 Andy Yan 2025-02-18  1523  
328e6885996ca2 Andy Yan 2025-02-18  1524  	vop2_writel(vop2, RK3568_OVL_LAYER_SEL, layer_sel);
328e6885996ca2 Andy Yan 2025-02-18  1525  	vop2_writel(vop2, RK3568_OVL_PORT_SEL, port_sel);
328e6885996ca2 Andy Yan 2025-02-18  1526  }
328e6885996ca2 Andy Yan 2025-02-18  1527  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-12-22 13:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-22 13:07 drivers/gpu/drm/rockchip/rockchip_vop2_reg.c:1521 rk3568_vop2_setup_layer_mixer() error: uninitialized symbol 'old_win' kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2025-12-15 19:24 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.