From nobody Tue Apr 7 12:53:40 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2DD83B8BA8 for ; Fri, 13 Mar 2026 15:11:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414701; cv=pass; b=GdTBLLh8GCBCh+gtQ+8FfdY44X1Vrs3Cla5jBfCM5ZqG1rDTpycrxgrxS4O06ZL2TM0EhG9ZHfi2Qfi3OzvsYP9wYTQg00RHqjqr9Gti8KNn0mnGHBsB8R663yYsklOPkNMTrI5Hq/M9sMhzbHelM/9A3Yp9zvF4pt78TOGVfa4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773414701; c=relaxed/simple; bh=tKXBvRo7j4V1+n7ysE6L5FJAAOj86Lak913jwMwVZW8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=K1qUcdOxiayOe8KaEyv2AOCqe5RSK6ps9nuFDaytHk3bu3zMW9XeKb4qc8Vo5JbtfpJQqrQf7Qf8EHhDEfsdbJNcIsa8pwhODav/LOQ9+YoOFIri6pBQXQ+lpw/ZAkmf3sv5UlFFex3ig/e2TXDxqzbpRkkkDEHbxILXmN2J5pE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=Z4KUCYpi; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="Z4KUCYpi" ARC-Seal: i=1; a=rsa-sha256; t=1773414684; cv=none; d=zohomail.com; s=zohoarc; b=izjpo6W6RF0UMwnOVS96ZTBAu3nCxWPmEyB5CriytlChhQvrMpiQchIa2BiYfcKrVWxgQzwvWCpAN8MKXkMwSrfBCwWMLqupaa8sqbttL5meJQsnHLvu2q9H/ey2kpJSzRIXoDdbHtV/T9UywntpGqfCM37jYwgkm5v/yItEXgM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773414684; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=qnDjhJwB7YQsAc4SJP4zeR66d3AGj+viwzL0mvH3ZSw=; b=ibMDVZDyo0qt7YHB/Kloox15PgpgZYyB94m+HtxHwSCkQ24EBrTjOsPeYSf3wwxeIk4Zz1pyObjpqBL9rT8IIBXrG3TKdq7duYwQzSG2CMcdE9f7JNtDDUBteo0gzS5iGX1YCFB5VhvRonOEOkhjwm2J2LQUxR2eP03pRSUvlqM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773414684; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=qnDjhJwB7YQsAc4SJP4zeR66d3AGj+viwzL0mvH3ZSw=; b=Z4KUCYpi0BK3Q6ed/qDpnkSqp6XWSbvpKVXWO7PlhrUiad2ckrbgU9e2X9joXTVl RPg6giPrqq3hGsi0cRf7RSq2QxmV4xKvBovJEPlloWYEx5jwQZ17NArWKwjxwU3dJMm FbuSn+tMMSYQ5AHnYb0CHrXtgwpFim8CRHOGToqs= Received: by mx.zohomail.com with SMTPS id 1773414681811353.32437567271097; Fri, 13 Mar 2026 08:11:21 -0700 (PDT) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Steven Price , Boris Brezillon , Janne Grunau , kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Subject: [PATCH v5 10/11] drm/panthor: Pass vm_bind_op to vm_prepare_map_op_ctx Date: Fri, 13 Mar 2026 15:09:47 +0000 Message-ID: <20260313150956.1618635-11-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260313150956.1618635-1-adrian.larumbe@collabora.com> References: <20260313150956.1618635-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Instead of passing its constituent elements, pass the whole struct to simplify the function prototype. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panthor/panthor_mmu.c | 57 ++++++++++++++------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index ba322e2029b9..a62ac715265b 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -1216,10 +1216,7 @@ panthor_vm_op_ctx_prealloc_vmas(struct panthor_vm_op= _ctx *op_ctx) static int panthor_vm_prepare_map_op_ctx(struct panthor_vm_op_ctx *op_ctx, struct panthor_vm *vm, struct panthor_gem_object *bo, - u64 offset, - u64 repeat_range, - u64 size, u64 va, - u32 flags) + const struct drm_panthor_vm_bind_op *op) { struct drm_gpuvm_bo *preallocated_vm_bo; struct sg_table *sgt =3D NULL; @@ -1229,30 +1226,32 @@ static int panthor_vm_prepare_map_op_ctx(struct pan= thor_vm_op_ctx *op_ctx, if (!bo) return -EINVAL; =20 - if ((flags & ~PANTHOR_VM_BIND_OP_MAP_FLAGS) || - (flags & DRM_PANTHOR_VM_BIND_OP_TYPE_MASK) !=3D DRM_PANTHOR_VM_BIND_O= P_TYPE_MAP) + if ((op->flags & ~PANTHOR_VM_BIND_OP_MAP_FLAGS) || + (op->flags & DRM_PANTHOR_VM_BIND_OP_TYPE_MASK) !=3D DRM_PANTHOR_VM_BI= ND_OP_TYPE_MAP) return -EINVAL; =20 - if (!(flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT)) { + if (!(op->flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPEAT)) { /* Make sure the VA and size are in-bounds. */ - if (size > bo->base.base.size || offset > bo->base.base.size - size) + if (op->size > bo->base.base.size || op->bo_offset > bo->base.base.size = - op->size) return -EINVAL; } else { /* Current drm api uses 32-bit for repeat range, */ - if (repeat_range > U32_MAX) + if (op->bo_repeat_range > U32_MAX) return -EINVAL; =20 /* Make sure the repeat_range is in-bounds. */ - if (repeat_range > bo->base.base.size || offset > bo->base.base.size - r= epeat_range) + if (op->bo_repeat_range > bo->base.base.size || + op->bo_offset > bo->base.base.size - op->bo_repeat_range) return -EINVAL; =20 /* Repeat range must a multiple of the minimum GPU page size */ - if (repeat_range & ((1u << (ffs(vm->ptdev->mmu_info.page_size_bitmap) - = 1)) - 1)) + if (op->bo_repeat_range & + ((1u << (ffs(vm->ptdev->mmu_info.page_size_bitmap) - 1)) - 1)) return -EINVAL; =20 - u64 repeat_count =3D size; + u64 repeat_count =3D op->size; =20 - if (do_div(repeat_count, repeat_range)) + if (do_div(repeat_count, op->bo_repeat_range)) return -EINVAL; } =20 @@ -1262,9 +1261,9 @@ static int panthor_vm_prepare_map_op_ctx(struct panth= or_vm_op_ctx *op_ctx, return -EINVAL; =20 memset(op_ctx, 0, sizeof(*op_ctx)); - op_ctx->flags =3D flags; - op_ctx->va.range =3D size; - op_ctx->va.addr =3D va; + op_ctx->flags =3D op->flags; + op_ctx->va.range =3D op->size; + op_ctx->va.addr =3D op->va; =20 ret =3D panthor_vm_op_ctx_prealloc_vmas(op_ctx); if (ret) @@ -1303,17 +1302,17 @@ static int panthor_vm_prepare_map_op_ctx(struct pan= thor_vm_op_ctx *op_ctx, =20 op_ctx->map.vm_bo =3D drm_gpuvm_bo_obtain_prealloc(preallocated_vm_bo); =20 - op_ctx->map.bo_offset =3D offset; - op_ctx->map.bo_repeat_range =3D repeat_range; + op_ctx->map.bo_offset =3D op->bo_offset; + op_ctx->map.bo_repeat_range =3D op->bo_repeat_range; =20 /* L1, L2 and L3 page tables. * We could optimize L3 allocation by iterating over the sgt and merging * 2M contiguous blocks, but it's simpler to over-provision and return * the pages if they're not used. */ - pt_count =3D ((ALIGN(va + size, 1ull << 39) - ALIGN_DOWN(va, 1ull << 39))= >> 39) + - ((ALIGN(va + size, 1ull << 30) - ALIGN_DOWN(va, 1ull << 30)) >> 30) + - ((ALIGN(va + size, 1ull << 21) - ALIGN_DOWN(va, 1ull << 21)) >> 21); + pt_count =3D ((ALIGN(op->va + op->size, 1ull << 39) - ALIGN_DOWN(op->va, = 1ull << 39)) >> 39) + + ((ALIGN(op->va + op->size, 1ull << 30) - ALIGN_DOWN(op->va, 1ull << 3= 0)) >> 30) + + ((ALIGN(op->va + op->size, 1ull << 21) - ALIGN_DOWN(op->va, 1ull << 2= 1)) >> 21); =20 op_ctx->rsvd_page_tables.pages =3D kcalloc(pt_count, sizeof(*op_ctx->rsvd_page_tables.pages), @@ -2645,11 +2644,7 @@ panthor_vm_bind_prepare_op_ctx(struct drm_file *file, gem =3D drm_gem_object_lookup(file, op->bo_handle); ret =3D panthor_vm_prepare_map_op_ctx(op_ctx, vm, gem ? to_panthor_bo(gem) : NULL, - op->bo_offset, - op->bo_repeat_range, - op->size, - op->va, - op->flags); + op); drm_gem_object_put(gem); return ret; =20 @@ -2845,13 +2840,21 @@ int panthor_vm_bind_exec_sync_op(struct drm_file *f= ile, int panthor_vm_map_bo_range(struct panthor_vm *vm, struct panthor_gem_obje= ct *bo, u64 offset, u64 size, u64 va, u32 flags) { + struct drm_panthor_vm_bind_op op =3D {0}; struct panthor_vm_op_ctx op_ctx; int ret; =20 if (drm_WARN_ON(&vm->ptdev->base, flags & DRM_PANTHOR_VM_BIND_OP_MAP_REPE= AT)) return -EINVAL; =20 - ret =3D panthor_vm_prepare_map_op_ctx(&op_ctx, vm, bo, offset, 0, size, v= a, flags); + op =3D (struct drm_panthor_vm_bind_op){ + .bo_offset =3D offset, + .size =3D size, + .va =3D va, + .flags =3D flags, + }; + + ret =3D panthor_vm_prepare_map_op_ctx(&op_ctx, vm, bo, &op); if (ret) return ret; =20 --=20 2.53.0