From nobody Thu Sep 24 17:02:53 2026 Received: from mx08-00376f01.pphosted.com (mx08-00376f01.pphosted.com [91.207.212.86]) (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 51FF33ED3CE; Tue, 22 Sep 2026 04:27:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.86 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790051254; cv=none; b=A9BmwReQ7++GoveqFBCCisLw3l2667b9gIi+zeETiA50FMZpkMxSnfdOOuZnJ59vW44h9DyiF/RbaljmnmWzP6thSqkbt+/FpBjwHMyyCH4oIJRUZl3/SmcrBhfQoVw8Uvb7S0kz0bN1hksylun9ZCevvWJB+ejYVd1TKFNIoWo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790051254; c=relaxed/simple; bh=mh2+Ic4vOdaE4tsK0UkmcaGEQBEKLwgn4GL+11JQxxM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=Hd1ubityIp9IHcWCNQ2mOm9B0znmkez2uvMUZl+55F3xU/3MSZcH96dzEphAXUjkqH5+lADtw440HWFzpHgOTWGaIZX4PnnZXFiE2RyHRzklNOEdezU6lqAWTJA6DdiLQbi1Wec50imRJBIEhZME/u8YL2JwERfLz04dJmxTWDg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imgtec.com; spf=pass smtp.mailfrom=imgtec.com; dkim=pass (2048-bit key) header.d=imgtec.com header.i=@imgtec.com header.b=tDur8uI+; arc=none smtp.client-ip=91.207.212.86 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imgtec.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=imgtec.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=imgtec.com header.i=@imgtec.com header.b="tDur8uI+" Received: from pps.filterd (m0168888.ppops.net [127.0.0.1]) by mx08-00376f01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68M4P2KU4175795; Tue, 22 Sep 2026 05:27:12 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imgtec.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=dk201812; bh=I VHTcxM1h7v4NQ73NetUC35wif/omYkk9856ftN9gKU=; b=tDur8uI+MxyilNtx+ nmCwJqe1NEynAa/X90KcNBU1ZA8by5AodCnQOhxM8UzgGdBiWU18YPsE+6O+IlAn iGqXwHIfQ31qu2EqXmmdS50y1z6sR5Tq2cmI6zyzoJtQzSQ1jRsX1bXJFGcoEPF8 kEFkO1ZzxsAkB9MH6U1xvq40ufxd9efFYPThziPis4eFd8PZBJCVt+QzazcR21kf c86A6D82Tzx366wBxEfRGpiEjHI5lEk286jJkk2aOAyeiajJt5gM3feoZBmwDLYW AFNZ7xsphOEjnpmqfCC6ngDcH3arxPOvBRJ90Z8yUVdtU7e7ZnaIsHJgEdRdPXfj pg0zQ== Received: from hhmail01.hh.imgtec.org (83-244-153-141.cust-83.exponential-e.net [83.244.153.141]) by mx08-00376f01.pphosted.com (PPS) with ESMTPS id 4gsgnq22jd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 22 Sep 2026 05:27:12 +0100 (BST) Received: from [127.0.1.1] (172.25.128.122) by HHMAIL01.hh.imgtec.org (10.100.10.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.46; Tue, 22 Sep 2026 05:27:08 +0100 From: Brajesh Gupta Date: Tue, 22 Sep 2026 09:56:55 +0530 Subject: [PATCH v4 1/2] drm/imagination: Propagate map failures correctly from pvr_mmu_map_sgl() 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 Message-ID: <20260922-mmu_fix-v4-1-12f1a871456a@imgtec.com> References: <20260922-mmu_fix-v4-0-12f1a871456a@imgtec.com> In-Reply-To: <20260922-mmu_fix-v4-0-12f1a871456a@imgtec.com> To: Alessio Belle , Luigi Santivetti , Frank Binns , Alexandru Dadu , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter CC: , , , , Brajesh Gupta X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4875; i=brajesh.gupta@imgtec.com; h=from:subject:message-id; bh=mh2+Ic4vOdaE4tsK0UkmcaGEQBEKLwgn4GL+11JQxxM=; b=owEBbQKS/ZANAwAKAdAmd1l+AvFwAcsmYgBqsgOYt1gK3NR7UaCOrxplKLh1vNLvctGIamkMb OobCUW0wR+JAjMEAAEKAB0WIQSQIkZAwD1cxcAsz3LQJndZfgLxcAUCarIDmAAKCRDQJndZfgLx cAx8D/425oTP5vrc1NhHuVflEXN1r8gLB4pfwiZjmppXM9d0CCJPiBVaTMCgc0H2tMtQnzSrDXz 9RWPtaqPN0fHeZ10YRUGaxFHEq8bCWj2TBMyvWp+WgTSm42OemwYf5t3NiOd2DUfVSskhVsfrps mL430wpOfcgIiiNHnn0kJt1aVgeF1SEgz64qzkYH0fFoYNJLpaGL3yi67w9k10UJetvI4UpvI8e orXb+SxSINYnHQrlF2+xmNIXJnJsnK+NQbTBrLwZ8gIHk/nstrPKBrD9RJoAykRT6hawe1J5E0y FhKbeq+lgSKJLMjct0aGvbgAfEgJxw335OK5Vn5U0khkkxfs3LIOoJIbr8XfAOyQBRIB0aJyBi2 3UqgCP5Kq9H2zaFeFtsJi7rjW1XaYQ8vEBaqDUlCNbL2MHtrWqLIPMmhb2Tf2iuOqxqptcbjsgx 2Fmr0LoC7bHcsFhAdVLRLqFVm5a9lIioKVkOMejG5byERR+ve2ifGEetsjlxO9P+hRoBRiMEuhd 1fzumUYyKjYyVij4DCH0LdbCBaQHz7O/0QhUPIcnSi/QZi6MfK/sdQ6s4OAjAhEht71FvkwtN+P 6BKGkz3z+DPTslpGDXSlpge6GNxkQjNnUtHmk3Sapp09FT/MG1lhvaVzsD07WC6MKKG+V1sIIMK yDSWpApMCa3y4gA== X-Developer-Key: i=brajesh.gupta@imgtec.com; a=openpgp; fpr=05BAA300FD5C580EFD3F8D2F073292BAD0D39671 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIyMDA2MCBTYWx0ZWRfX+ntsWDHkf78Z IgF1QgNSf4BAGv9T/kykND6p8Z0gX/Tg9YVVdizGqK4ltaDsMtLRiPG6UPlhVOyMLW/CuGC9o5i S4/paM3B3MqF+k3wlU/puTaVPsqJQs1+gk+o23RLoFuNyhExsCtWHWhIucgCriQFT2qEbdb/ESx Y+UvjI7OHiiV2uH3yvCjc1UYGxRy/pfd+3y+dcqC165rJ9lv2ZO672DZswRUoEs76pWRf4MkgGH M3XYloBmHea34jDlvvrbE7ZxB8BOVfumpHOiLlMe8jg/94KaL68PQoXyb2GDFztAhCnBbL/EG9e 95QYtyr+0cDtVnYp+3inNsHSkVfwUjGTzkg1FRvBuztV+6qaqtK5ofllrX4x2nGuWfNJ4fg93aN TLWZEzpCXHok64DmcSAbbG5ZfwQO7iD4k3m+5KTTFhY7mDZyBTzsm8jAELEm4L4/nZyQ53LjyrI 2loinPRZM6Ta+6+JUQw== X-Proofpoint-ORIG-GUID: 2XJlxT5IXdRlEKmDZIAmPytBjtUSGv9g X-Authority-Analysis: v=2.4 cv=fYs4WEQF c=1 sm=1 tr=0 ts=6ab203a0 cx=c_pps a=AKOq//PuzOIrVTIF9yBwbA==:117 a=AKOq//PuzOIrVTIF9yBwbA==:17 a=Ofw6MtmsdEsA:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=kQ-hrUj2-E3RCbRHssb7:22 a=qZQ2PDNLMSdLoqI-hfl9:22 a=r_1tXGB3AAAA:8 a=MA1SxRKIldkD5NN-sdEA:9 a=QEXdDO2ut3YA:10 a=t8nPyN_e6usw4ciXM-Pk:22 X-Proofpoint-GUID: 2XJlxT5IXdRlEKmDZIAmPytBjtUSGv9g X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIyMDA2MCBTYWx0ZWRfXw3LNgS+QHtdT TCTDmHb86A1J0UP8U6EsY2wDNuMSg30wxSSpMVUuouhCc4oWy6y0VqJszx7tXlSCVR6YiVg3+Ae 2P0kRKZJViAAdgP0CW82lrDKirOYCBA= Map failure from pvr_mmu_map_sgl() interface was not returned correctly to pvr_mmu_map() interface. This resulted in pvr_mmu_map() interface to continue instead of returning an error to caller. Fix it by returning a proper error code from pvr_mmu_map_sgl() interface. Call stack for crash: [ 1179.286237] Unable to handle kernel NULL pointer dereference at virtual = address 0000000000000008 [ 1179.295067] Mem abort info: [ 1179.297877] ESR =3D 0x0000000096000004 [ 1179.301656] EC =3D 0x25: DABT (current EL), IL =3D 32 bits [ 1179.306987] SET =3D 0, FnV =3D 0 [ 1179.310048] EA =3D 0, S1PTW =3D 0 [ 1179.313198] FSC =3D 0x04: level 0 translation fault [ 1179.318096] Data abort info: [ 1179.320993] ISV =3D 0, ISS =3D 0x00000004, ISS2 =3D 0x00000000 [ 1179.326483] CM =3D 0, WnR =3D 0, TnD =3D 0, TagAccess =3D 0 [ 1179.331546] GCS =3D 0, Overlay =3D 0, DirtyBit =3D 0, Xs =3D 0 [ 1179.336895] user pgtable: 4k pages, 48-bit VAs, pgdp=3D000000009822a000 [ 1179.343402] [0000000000000008] pgd=3D0000000000000000, p4d=3D00000000000= 00000 [ 1179.350243] Internal error: Oops: 0000000096000004 [#2] SMP [ 1179.355908] Modules linked in: powervr gpu_sched drm_shmem_helper drm_gp= uvm drm_exec xhci_plat_hcd xhci_hcd dwc3 usbcore usb_common snd_soc_simple_= card snd_soc_simple_card_utils dwc3_am62 at24 sa2ul sha512 libsha512 sha256= authenc sch_fq_codel fuse dm_mod ipv6 [ 1179.378992] CPU: 1 UID: 1000 PID: 680 Comm: deqp-vk Tainted: G D = 6.17.0 #1 PREEMPT [ 1179.388120] Tainted: [D]=3DDIE [ 1179.390994] Hardware name: Texas Instruments AM625 SK (DT) [ 1179.396467] pstate: 00000005 (nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE= =3D--) [ 1179.403415] pc : pvr_mmu_op_context_unmap_curr_page+0x6c/0x134 [powervr] [ 1179.410140] lr : pvr_mmu_op_context_unmap_curr_page+0x58/0x134 [powervr] [ 1179.416848] sp : ffff8000839ab8c0 [ 1179.420153] x29: ffff8000839ab8c0 x28: 0000000000000001 x27: 000000008f3= 86000 [ 1179.427283] x26: ffff000016d1df98 x25: 0000000000247000 x24: 00000000000= 001e6 [ 1179.434413] x23: 0000000000000002 x22: 000000000000ffff x21: 00000000000= 00247 [ 1179.441540] x20: 0000000000000245 x19: ffff000016d1df60 x18: 00000000000= 00002 [ 1179.448668] x17: 0000000000000000 x16: 0000000000000000 x15: 00000000000= 00001 [ 1179.455793] x14: 0000000000060810 x13: ffff80007fffffff x12: ffff0000041= 90480 [ 1179.462921] x11: ffff8000853f7000 x10: ffff8000811ae000 x9 : ffff0000041= 900b8 [ 1179.470051] x8 : 0000000000000000 x7 : 00000000990c4001 x6 : 00000000000= 00007 [ 1179.477177] x5 : ffff000016d1df60 x4 : 0000000000000000 x3 : ffff00000a7= d8000 [ 1179.484306] x2 : 00000000000001ff x1 : 0000000000000000 x0 : 00000000000= 00000 [ 1179.491433] Call trace: [ 1179.493872] pvr_mmu_op_context_unmap_curr_page+0x6c/0x134 [powervr] (P) [ 1179.500582] pvr_mmu_map+0x31c/0x388 [powervr] [ 1179.505027] pvr_vm_gpuva_map+0x40/0x88 [powervr] [ 1179.509732] __drm_gpuvm_sm_map+0x250/0x44c [drm_gpuvm] [ 1179.514952] drm_gpuvm_sm_map+0x48/0x5c [drm_gpuvm] [ 1179.519822] pvr_vm_bind_op_exec+0x64/0x70 [powervr] [ 1179.524785] pvr_vm_map+0x1f8/0x2a8 [powervr] [ 1179.529142] pvr_ioctl_vm_map+0x12c/0x188 [powervr] [ 1179.534018] drm_ioctl_kernel+0xb8/0x128 [ 1179.537941] drm_ioctl+0x21c/0x4ec [ 1179.541337] __arm64_sys_ioctl+0xac/0x108 [ 1179.545344] invoke_syscall+0x44/0x100 [ 1179.549091] el0_svc_common.constprop.0+0x40/0xe0 [ 1179.553790] do_el0_svc+0x1c/0x28 [ 1179.557106] el0_svc+0x34/0xf0 [ 1179.560159] el0t_64_sync_handler+0xd0/0xe4 [ 1179.564334] el0t_64_sync+0x198/0x19c [ 1179.567996] Code: 54000300 35000360 f9402261 79409a62 (f9400421) [ 1179.574081] ---[ end trace 0000000000000000 ]--- Fixes: ff5f643de0bf ("drm/imagination: Add GEM and VM related code") Reviewed-by: Alexandru Dadu Reviewed-by: Alessio Belle Signed-off-by: Brajesh Gupta --- drivers/gpu/drm/imagination/pvr_mmu.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/imagination/pvr_mmu.c b/drivers/gpu/drm/imagin= ation/pvr_mmu.c index 3cac482e1034..23261d9ad3fd 100644 --- a/drivers/gpu/drm/imagination/pvr_mmu.c +++ b/drivers/gpu/drm/imagination/pvr_mmu.c @@ -12,6 +12,7 @@ #include "pvr_rogue_mmu_defs.h" =20 #include +#include #include #include #include @@ -2553,7 +2554,9 @@ pvr_mmu_map_sgl(struct pvr_mmu_op_context *op_ctx, st= ruct scatterlist *sgl, =20 err_destroy_pages: memcpy(&op_ctx->curr_page, &ptr_copy, sizeof(op_ctx->curr_page)); - err =3D pvr_mmu_op_context_unmap_curr_page(op_ctx, page); + if (pvr_mmu_op_context_unmap_curr_page(op_ctx, page)) + drm_err(from_pvr_device(op_ctx->mmu_ctx->pvr_dev), + "%s : Failure in unmapping pages\n", __func__); =20 return err; } --=20 2.43.0 From nobody Thu Sep 24 17:02:53 2026 Received: from mx08-00376f01.pphosted.com (mx08-00376f01.pphosted.com [91.207.212.86]) (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 DB4BB3EE1EE; Tue, 22 Sep 2026 04:27:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.86 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790051256; cv=none; b=L4/jFi/fdpGjjFZ5Tca8lTOsBjO0nSDlDSBnRDKxT8Pune0L+1dlN5SayvayCTm1EWtSq1m9NtCd2AhjUzwjTuNyuxawLO+TgQ16kt6III7FUXMWKhEFviNhXeSY/jEeKpcpqW8rVmojeqeZ4P+DNQXsrN+kWq08Xq88GrnjVWY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790051256; c=relaxed/simple; bh=6vy6U5iPr6I/EMMjZ9ppuxiboba1NgugXVPdXYqGQzU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=CE0CUOa5P4jxqUrXbDcr6961x9IsJ5amuiYjtHqOgwDJgXhxTLvtpfRfX4/kEsJ9TeSGB9taYilMxsqQoQVXUoHwimrXiml5Tb/V0mX0LORqrNR9Htz1XtP7ayWxT626Ig0j5YzubyR86glDqHrXxEfuobxe+eoVqEAkxB2T3Nc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imgtec.com; spf=pass smtp.mailfrom=imgtec.com; dkim=pass (2048-bit key) header.d=imgtec.com header.i=@imgtec.com header.b=OSj6P2Bd; arc=none smtp.client-ip=91.207.212.86 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imgtec.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=imgtec.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=imgtec.com header.i=@imgtec.com header.b="OSj6P2Bd" Received: from pps.filterd (m0168888.ppops.net [127.0.0.1]) by mx08-00376f01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68M4P2tH4175838; Tue, 22 Sep 2026 05:27:15 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imgtec.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=dk201812; bh=H rGv+yXH49C3vUtMO0bXAyH0pthrtMmxMwBMqDo1n0c=; b=OSj6P2Bd4crDtZBZ4 N24ZR9V/2Oli4kjOLpfmxjx7qmvphGp200Xx9m8jGNRAEzQn4PRKXixR+p/Mo/S6 wQzYuBSSFPWOkbft1WM6x66gqgnU5fibFZqYKfPlSjOcP+Ywb6J3OYb6wNl/mPHc S8soFugJ5hySbu2zzIpg4gvnfXsxxaMiRS8wNmg3TCra3hNVK7hoR1XSNMhmV3C8 A8uGkyfruoKQiMK2FbrETSvBjwBOhOfJIH861oHOkKTTew3v8JfcYin0k+G1QtXR knAwDhm3FtirC6Oe07bjBAM6xtPYz6i+GrpWypnpRO9G1ygUdl899fm2vLpKy0cq Hu7zQ== Received: from hhmail01.hh.imgtec.org (83-244-153-141.cust-83.exponential-e.net [83.244.153.141]) by mx08-00376f01.pphosted.com (PPS) with ESMTPS id 4gsgnq22je-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 22 Sep 2026 05:27:15 +0100 (BST) Received: from [127.0.1.1] (172.25.128.122) by HHMAIL01.hh.imgtec.org (10.100.10.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.46; Tue, 22 Sep 2026 05:27:12 +0100 From: Brajesh Gupta Date: Tue, 22 Sep 2026 09:56:56 +0530 Subject: [PATCH v4 2/2] drm/imagination: Fix page count for page table for map() interface 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 Message-ID: <20260922-mmu_fix-v4-2-12f1a871456a@imgtec.com> References: <20260922-mmu_fix-v4-0-12f1a871456a@imgtec.com> In-Reply-To: <20260922-mmu_fix-v4-0-12f1a871456a@imgtec.com> To: Alessio Belle , Luigi Santivetti , Frank Binns , Alexandru Dadu , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter CC: , , , , Brajesh Gupta X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=5142; i=brajesh.gupta@imgtec.com; h=from:subject:message-id; bh=6vy6U5iPr6I/EMMjZ9ppuxiboba1NgugXVPdXYqGQzU=; b=owEBbQKS/ZANAwAKAdAmd1l+AvFwAcsmYgBqsgOYa3cnfplVxK7UK8YuKEuZoCjFwCOEjQM+C 3HcE09Kvj+JAjMEAAEKAB0WIQSQIkZAwD1cxcAsz3LQJndZfgLxcAUCarIDmAAKCRDQJndZfgLx cGWSD/9wnpyb+bn3GBfUS5X5q+SoLho8qNTpaIe7MqgL3ZzlGVGNyChFNaSI3/6ezFGLdkP20uB YrFSwS1v6yGaQGzXnpdV2jtVJznZaNz/mtOTqtGw+GfednWg1eaoilOVNY4M6/X/5FkR2SeZexY bahVDSxsi/IW0ZnobJ379Dt1Evr2ffzWJyzqpjiYh9p9qsXKMIWQmLYiORpbGqsh3YIvsT2s+67 u7i9ernD5gMxP1LHbm7wY/7Va5eECbjgkk2Jf9b6k+aPWzxb7Ya+l1Zxry5ADc0027AELocaF71 YUzpVoItXtgoP+K6xVhuzx8uSv7ACWj3/kC6btqIZCrzB2BHE7E3C3wGFHfWhtCbl9iGodLeT4G eq6vF94MtH/PODFOaEPQr9pJouMf0lOYCtOGbEPu3odR/fynO0xmAKWrSyMNQta/+fQEPQbUkHV I70T8CuDPfebRpCV1lWiDlej7VQj9mZB9aYVY/g8zw27uu/F1E2v6jWRe4VXIXIwD8ifascEDRS 7nVdtTHNq2Sx4krd+msoGslYEA5Ahm6hMbtOouQFe+yurF5zgBI3hpir+KqRcJdpk4RjAyqhte2 vtdwsmG7CqqlBaxvv31r/3Dc1GmJMDC6k+v4lFjz/q/zfo/uDzBPjffwtfViljvmFmao8DisALj d3wuXyXvNXEjWIA== X-Developer-Key: i=brajesh.gupta@imgtec.com; a=openpgp; fpr=05BAA300FD5C580EFD3F8D2F073292BAD0D39671 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIyMDA2MCBTYWx0ZWRfX+VfDChm5HRCG KTzvJrEmrxg2ce1kp4JJORsxPMIxNFxDVUDOiUyForQmaqIHrd9Bkgm+zHj5gWklew2xTmBGmfV EilPjgNrwsKpDbrfQijxs4c3XnPe3E1YdI4nigMHKhz9s8UcTaTO+ZRv2EyNYcjB8ciAsb03nng a+0YWTp0n9oc/vSmpk+w6RXBJgNo5INyju6pgKK2+BThBhdHnwHA12EbDOJ1bqj7q4spNdNo0C8 JuRxtLT98smVc+Jm8g/+dXQuvLRtdhng0aC8p46SNDPqahoQX2TgIrFP60zYpeUYT/jePud0Ymi wwDZaaAhDPFXKrLF7MjPgl6ngEWy617Wy/LakroGydzxYLVyEIzFsu7X+Aw4b5Tu0kzg24oH5Tf nSHu3Ws1GDBiEuMnauoLALASOhEqLgFvqYU5IIMeLmAgxUsN4ZG0MLUD/+V2rov687ZhLL0/1k8 V9Ubv2kmrEO/BT/s5lw== X-Proofpoint-ORIG-GUID: ZzLfsrXLNVYBSKlkM3s3_xudxGMpVjI4 X-Authority-Analysis: v=2.4 cv=fYs4WEQF c=1 sm=1 tr=0 ts=6ab203a3 cx=c_pps a=AKOq//PuzOIrVTIF9yBwbA==:117 a=AKOq//PuzOIrVTIF9yBwbA==:17 a=Ofw6MtmsdEsA:10 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=kQ-hrUj2-E3RCbRHssb7:22 a=qZQ2PDNLMSdLoqI-hfl9:22 a=r_1tXGB3AAAA:8 a=xl1JLUuWoStywUw0sDsA:9 a=QEXdDO2ut3YA:10 a=t8nPyN_e6usw4ciXM-Pk:22 X-Proofpoint-GUID: ZzLfsrXLNVYBSKlkM3s3_xudxGMpVjI4 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIyMDA2MCBTYWx0ZWRfX03jmSoSTP0jc h7J90BY+9538WGJBcwrBNXBcv94LPu+UuZCH9nXf51URMhdQTjoM/Z15VgRWbATimvmLe1awM0f Xvzj37dksQPXhb/Sapx8cAWqhcgg8V8= The GPU virtual start address wasn't included in the calculation for the amount of page tables required for mapping a BO object in map() interface. It resulted in map failure later due to not enough pages at L0/L1 level. Update pvr_mmu_op_context_create() interface to pass device address as well to allow correct calculation for page table memory. If L0 tables cover 2MB (0x200000), the range defined by device address 0x80001ff000 (general heap at 2MB - 4KB) and size 0x2000 (two 4KB pages) requires two L0 pages to be mapped, but without the base address a range of 0x2000 computes to a single L0 page which is not enough. Fixes: ff5f643de0bf ("drm/imagination: Add GEM and VM related code") Reviewed-by: Alexandru Dadu Reviewed-by: Alessio Belle Signed-off-by: Brajesh Gupta --- drivers/gpu/drm/imagination/pvr_mmu.c | 14 ++++++++------ drivers/gpu/drm/imagination/pvr_mmu.h | 2 +- drivers/gpu/drm/imagination/pvr_vm.c | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/imagination/pvr_mmu.c b/drivers/gpu/drm/imagin= ation/pvr_mmu.c index 23261d9ad3fd..62eae7fcd5a2 100644 --- a/drivers/gpu/drm/imagination/pvr_mmu.c +++ b/drivers/gpu/drm/imagination/pvr_mmu.c @@ -2336,6 +2336,7 @@ void pvr_mmu_op_context_destroy(struct pvr_mmu_op_con= text *op_ctx) * pvr_mmu_op_context_create() - Create an MMU op context. * @ctx: MMU context associated with owning VM context. * @sgt: Scatter gather table containing pages pinned for use by this cont= ext. + * @device_addr: Virtual device address at the start of the requested mapp= ing. * @sgt_offset: Start offset of the requested device-virtual memory mappin= g. * @size: Size in bytes of the requested device-virtual memory mapping. Fo= r an * unmapping, this should be zero so that no page tables are allocated. @@ -2347,8 +2348,9 @@ void pvr_mmu_op_context_destroy(struct pvr_mmu_op_con= text *op_ctx) */ struct pvr_mmu_op_context * pvr_mmu_op_context_create(struct pvr_mmu_context *ctx, struct sg_table *sg= t, - u64 sgt_offset, u64 size) + u64 device_addr, u64 sgt_offset, u64 size) { + u64 start_addr =3D device_addr + sgt_offset; int err; =20 struct pvr_mmu_op_context *op_ctx =3D kzalloc_obj(*op_ctx); @@ -2364,16 +2366,16 @@ pvr_mmu_op_context_create(struct pvr_mmu_context *c= tx, struct sg_table *sgt, if (size) { /* * The number of page table objects we need to prealloc is - * indicated by the mapping size, start offset and the sizes + * indicated by the mapping size, start address and the sizes * of the areas mapped per PT or PD. The range calculation is * identical to that for the index into a table for a device * address, so we reuse those functions here. */ - const u32 l1_start_idx =3D pvr_page_table_l2_idx(sgt_offset); - const u32 l1_end_idx =3D pvr_page_table_l2_idx(sgt_offset + size); + const u32 l1_start_idx =3D pvr_page_table_l2_idx(start_addr); + const u32 l1_end_idx =3D pvr_page_table_l2_idx(start_addr + size); const u32 l1_count =3D l1_end_idx - l1_start_idx + 1; - const u32 l0_start_idx =3D pvr_page_table_l1_idx(sgt_offset); - const u32 l0_end_idx =3D pvr_page_table_l1_idx(sgt_offset + size); + const u32 l0_start_idx =3D pvr_page_table_l1_idx(start_addr); + const u32 l0_end_idx =3D pvr_page_table_l1_idx(start_addr + size); const u32 l0_count =3D l0_end_idx - l0_start_idx + 1; =20 /* diff --git a/drivers/gpu/drm/imagination/pvr_mmu.h b/drivers/gpu/drm/imagin= ation/pvr_mmu.h index a8ecd460168d..2c02d61ba0a2 100644 --- a/drivers/gpu/drm/imagination/pvr_mmu.h +++ b/drivers/gpu/drm/imagination/pvr_mmu.h @@ -99,7 +99,7 @@ dma_addr_t pvr_mmu_get_root_table_dma_addr(struct pvr_mmu= _context *ctx); void pvr_mmu_op_context_destroy(struct pvr_mmu_op_context *op_ctx); struct pvr_mmu_op_context * pvr_mmu_op_context_create(struct pvr_mmu_context *ctx, - struct sg_table *sgt, u64 sgt_offset, u64 size); + struct sg_table *sgt, u64 device_addr, u64 sgt_offset, u64 size); =20 int pvr_mmu_map(struct pvr_mmu_op_context *op_ctx, u64 size, u64 flags, u64 device_addr); diff --git a/drivers/gpu/drm/imagination/pvr_vm.c b/drivers/gpu/drm/imagina= tion/pvr_vm.c index 396d349fb6ce..867a4a44958a 100644 --- a/drivers/gpu/drm/imagination/pvr_vm.c +++ b/drivers/gpu/drm/imagination/pvr_vm.c @@ -276,7 +276,7 @@ pvr_vm_bind_op_map_init(struct pvr_vm_bind_op *bind_op, goto err_bind_op_fini; =20 bind_op->mmu_op_ctx =3D - pvr_mmu_op_context_create(vm_ctx->mmu_ctx, sgt, offset, size); + pvr_mmu_op_context_create(vm_ctx->mmu_ctx, sgt, device_addr, offset, siz= e); err =3D PTR_ERR_OR_ZERO(bind_op->mmu_op_ctx); if (err) { bind_op->mmu_op_ctx =3D NULL; @@ -318,7 +318,7 @@ pvr_vm_bind_op_unmap_init(struct pvr_vm_bind_op *bind_o= p, } =20 bind_op->mmu_op_ctx =3D - pvr_mmu_op_context_create(vm_ctx->mmu_ctx, NULL, 0, 0); + pvr_mmu_op_context_create(vm_ctx->mmu_ctx, NULL, device_addr, 0, 0); err =3D PTR_ERR_OR_ZERO(bind_op->mmu_op_ctx); if (err) { bind_op->mmu_op_ctx =3D NULL; --=20 2.43.0