From nobody Fri Dec 19 10:42:45 2025 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.2]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3A86923FC4B; Tue, 18 Feb 2025 11:30:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.2 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739878237; cv=none; b=J/dO6UaD4GCMvHzJ3NNhHEZ9t4SVQcUR/nsNjoILFdsNbQrr7hOkBWuQrFjAxuIyn4qg6CjJiKb9zHr3dVWrol1lURnvo6L/+Yle1/PiGqDx9N2EC5u5eUA/rhzGQneVjBxTzDDnpPRVfHzcNQnqMOn85J93BBJXGqh1WNyC1yU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739878237; c=relaxed/simple; bh=LQe5GuawzBnnz3/E+Z3RzWysXp2pvbKU1RqSY6Le0pc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QREBqlO07RuVW/RrJYJTY1UBTbremXcVWvgmve0JVABewuHCZ2uOTf+6N8t2zO4UAmXoX6H2sjzwz4IBWI+31i1LHe76K8zMjvLOWJxlWFUe7o8ObaBJeusMkb+pZETFP+NRRHDOD/YpnEg2PH+waSDUPSJAkZWWj7POC5X8fcc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=cZJUjtrU; arc=none smtp.client-ip=117.135.210.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="cZJUjtrU" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-ID:MIME-Version; bh=d0dLU mQ/SZsMZv+9oBNfUWjAlyGRPbs7a7RCXjujakY=; b=cZJUjtrUdU8zpp9SJL6Cm hPbkCC1QbdsFrCxaBJluBzaS+78+vJlR/JiMlSZUxSE+ht8voCbD16D8TSquOifo CCRwCmsck1DV7Mie0QolDuyi5/OqdN9xW73JBOAh39nxjCl2GYXXo3JhOUgzfJbu n4jenrGUrustUC5FoJ1LXc= Received: from ProDesk.. (unknown []) by gzga-smtp-mtada-g1-4 (Coremail) with SMTP id _____wD333uybrRnLIPUMQ--.34107S3; Tue, 18 Feb 2025 19:27:51 +0800 (CST) From: Andy Yan To: heiko@sntech.de Cc: hjc@rock-chips.com, krzk+dt@kernel.org, devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, derek.foreman@collabora.com, detlev.casanova@collabora.com, daniel@fooishbar.org, robh@kernel.org, sebastian.reichel@collabora.com, Andy Yan Subject: [PATCH v15 01/13] drm/rockchip: vop2: use devm_regmap_field_alloc for cluster-regs Date: Tue, 18 Feb 2025 19:27:28 +0800 Message-ID: <20250218112744.34433-2-andyshrk@163.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250218112744.34433-1-andyshrk@163.com> References: <20250218112744.34433-1-andyshrk@163.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: _____wD333uybrRnLIPUMQ--.34107S3 X-Coremail-Antispam: 1Uf129KBjvJXoWxGFW7GFWUWrykJr4fGF17Wrg_yoWrCw4fpF 4rGwnxuF45Grn29rWkArn8AF1Fk39rta1rCFn7uwnI9r1qgr97C3Wqk3Wjyrs0kryv9FZr tFsxt3y3ua4Ygr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07UXYFZUUUUU= X-CM-SenderInfo: 5dqg52xkunqiywtou0bp/xtbBkBT3Xme0bEsvuAABsP Content-Type: text/plain; charset="utf-8" From: Heiko Stuebner Right now vop2_cluster_init() copies the base vop2_cluster_regs and adapts the reg value with the current window's offset before adding the fields to the regmap. This conflicts with the notion of reg_fields being const, see https://lore.kernel.org/all/20240706-regmap-const-structs-v1-1-d08c776da787= @weissschuh.net/ for reference, which now causes checkpatch to actually warn about that. So instead of creating one big copy and changing it afterwards, add the reg_fields individually using devm_regmap_field_alloc(). Functional it is the same, just that the reg_field we're handling can stay const. Signed-off-by: Heiko Stuebner Signed-off-by: Andy Yan --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 66 +++++++++----------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm= /rockchip/rockchip_drm_vop2.c index afc946ead870..ebc9cb93073c 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -3400,7 +3400,7 @@ static int vop2_find_rgb_encoder(struct vop2 *vop2) return -ENOENT; } =20 -static struct reg_field vop2_cluster_regs[VOP2_WIN_MAX_REG] =3D { +static const struct reg_field vop2_cluster_regs[VOP2_WIN_MAX_REG] =3D { [VOP2_WIN_ENABLE] =3D REG_FIELD(RK3568_CLUSTER_WIN_CTRL0, 0, 0), [VOP2_WIN_FORMAT] =3D REG_FIELD(RK3568_CLUSTER_WIN_CTRL0, 1, 5), [VOP2_WIN_RB_SWAP] =3D REG_FIELD(RK3568_CLUSTER_WIN_CTRL0, 14, 14), @@ -3471,28 +3471,26 @@ static struct reg_field vop2_cluster_regs[VOP2_WIN_= MAX_REG] =3D { static int vop2_cluster_init(struct vop2_win *win) { struct vop2 *vop2 =3D win->vop2; - struct reg_field *cluster_regs; - int ret, i; - - cluster_regs =3D kmemdup(vop2_cluster_regs, sizeof(vop2_cluster_regs), - GFP_KERNEL); - if (!cluster_regs) - return -ENOMEM; - - for (i =3D 0; i < ARRAY_SIZE(vop2_cluster_regs); i++) - if (cluster_regs[i].reg !=3D 0xffffffff) - cluster_regs[i].reg +=3D win->offset; + int i; =20 - ret =3D devm_regmap_field_bulk_alloc(vop2->dev, vop2->map, win->reg, - cluster_regs, - ARRAY_SIZE(vop2_cluster_regs)); + for (i =3D 0; i < ARRAY_SIZE(vop2_cluster_regs); i++) { + const struct reg_field field =3D { + .reg =3D (vop2_cluster_regs[i].reg !=3D 0xffffffff) ? + vop2_cluster_regs[i].reg + win->offset : + vop2_cluster_regs[i].reg, + .lsb =3D vop2_cluster_regs[i].lsb, + .msb =3D vop2_cluster_regs[i].msb + }; =20 - kfree(cluster_regs); + win->reg[i] =3D devm_regmap_field_alloc(vop2->dev, vop2->map, field); + if (IS_ERR(win->reg[i])) + return PTR_ERR(win->reg[i]); + } =20 - return ret; + return 0; }; =20 -static struct reg_field vop2_esmart_regs[VOP2_WIN_MAX_REG] =3D { +static const struct reg_field vop2_esmart_regs[VOP2_WIN_MAX_REG] =3D { [VOP2_WIN_ENABLE] =3D REG_FIELD(RK3568_SMART_REGION0_CTRL, 0, 0), [VOP2_WIN_FORMAT] =3D REG_FIELD(RK3568_SMART_REGION0_CTRL, 1, 5), [VOP2_WIN_DITHER_UP] =3D REG_FIELD(RK3568_SMART_REGION0_CTRL, 12, 12), @@ -3559,26 +3557,24 @@ static struct reg_field vop2_esmart_regs[VOP2_WIN_M= AX_REG] =3D { static int vop2_esmart_init(struct vop2_win *win) { struct vop2 *vop2 =3D win->vop2; - struct reg_field *esmart_regs; - int ret, i; - - esmart_regs =3D kmemdup(vop2_esmart_regs, sizeof(vop2_esmart_regs), - GFP_KERNEL); - if (!esmart_regs) - return -ENOMEM; - - for (i =3D 0; i < ARRAY_SIZE(vop2_esmart_regs); i++) - if (esmart_regs[i].reg !=3D 0xffffffff) - esmart_regs[i].reg +=3D win->offset; + int i; =20 - ret =3D devm_regmap_field_bulk_alloc(vop2->dev, vop2->map, win->reg, - esmart_regs, - ARRAY_SIZE(vop2_esmart_regs)); + for (i =3D 0; i < ARRAY_SIZE(vop2_esmart_regs); i++) { + const struct reg_field field =3D { + .reg =3D (vop2_esmart_regs[i].reg !=3D 0xffffffff) ? + vop2_esmart_regs[i].reg + win->offset : + vop2_esmart_regs[i].reg, + .lsb =3D vop2_esmart_regs[i].lsb, + .msb =3D vop2_esmart_regs[i].msb + }; =20 - kfree(esmart_regs); + win->reg[i] =3D devm_regmap_field_alloc(vop2->dev, vop2->map, field); + if (IS_ERR(win->reg[i])) + return PTR_ERR(win->reg[i]); + } =20 - return ret; -}; + return 0; +} =20 static int vop2_win_init(struct vop2 *vop2) { --=20 2.34.1