Received: by 2002:a05:7412:2a91:b0:fc:a2b0:25d7 with SMTP id u17csp62844rdh; Tue, 13 Feb 2024 09:24:04 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWI/ddVJb7H+Biy24eXQIQi+6B+qMC3mR7CwCAjVzrZXrp8PdKu8ie9kWPUIaXu4avNpH7CI9qBP3hgpEy1ZDPNtQJ9VG99fLs9+qhocw== X-Google-Smtp-Source: AGHT+IEEFJnm9TYghlKl7Z3hbgHlAfl4I/6YNmQNoSNdXHAIoaOQWZOtME1k3ZnnvXgwFCqVtimU X-Received: by 2002:a05:6a00:b87:b0:6de:1d4a:c22c with SMTP id g7-20020a056a000b8700b006de1d4ac22cmr5588388pfj.0.1707845044134; Tue, 13 Feb 2024 09:24:04 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707845044; cv=pass; d=google.com; s=arc-20160816; b=dbeZ7Qny8MaiEyS1z/P8QLqUsrcaDogkKJedGU4WmtK2wHMhH+pSyAIWvlo6b/11XZ FeB0mgYcafTNFEFCMKpj4Fv+55HSIUWgMR9Bg6qB7u8JhD7kcFbGpHbbReGs2StGtwI7 I+Z3W1UD6EUaQvNiwA5Cx5tTpDviUXoZJc/ME857ohv4ab2eatE1d7Zhad7G8sbGBFod bCoCmfjallztul4vjuydx5lRSlHrFeJC6lAz1IpfNaycnXBdbZfVhhJ71/SLTNFjOa+t hfI/KEOchhWg6qOAzehfH6ssrNff+uArtw2ZYo3K8xMUMXIQsKPWRK1z/YmH+tNt+V/b ZDNA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=FLsvLF6QUYIuVDvvapHTNMgjuAm/e6T5t1iBfk2PvVA=; fh=yiuAvk2cieuoTc96tNwxtV64mg6a+gJFn/FJfmDXJdw=; b=0jNuPr/1dyeQCYVtqvbVsssIOrmDEcHCxdVes8PlzitKXIHNczcqHsbhUd2yIhexN8 LlqAo/X0CtaiHQvT84sdqToCpys29CByj7XaTC8MPj5c1AhqJ59bEtPX2y93eR2cKzH2 +ewE/BcY0255Tj8ZaieZQg6HvMYY44C2dr6g+1psc7l3dRjSdoqXHI0gSbaDSZc6Ohmk 9TowEnoDKKE/s4FGGUrAgoL9V0/jAnZ0KK0ooC9NT1VrKSBBevJN3Mb4yd0lds16SEBw lNfKui1CQECwdGVqeC1Dgt74nRTcby1UB9ke5tYviFfnuyCD6bTS8PnwOEmnueucwHCg 9Ksg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=dK4klttw; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-63977-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-63977-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com X-Forwarded-Encrypted: i=2; AJvYcCXEaG1vWEZIdGgvBqqCzqe5BXCP7xVge2daHghGA2AjMl46F208aOjeTl+MBjlPp/UVkBK0NJVNUVnrq0BRX+vXYV5r3y0wKiKp/HHeLg== Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id y18-20020a637d12000000b005be3683ec6asi2242816pgc.184.2024.02.13.09.24.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Feb 2024 09:24:04 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-63977-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=dK4klttw; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-63977-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-63977-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id BDB6D286783 for ; Tue, 13 Feb 2024 17:24:03 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C6B215FF00; Tue, 13 Feb 2024 17:23:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dK4klttw" Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 711BF5FBB5; Tue, 13 Feb 2024 17:23:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707845037; cv=none; b=LAepyukHRI1EK9eFu8yvvdIis/WTnOrAwjknEInK1VNt6qef/SzK0tEcVy4LFSwrMeGXHFqGkb+71W687vMwnjuBjbcy5FV+Im+nxiXa8NQR40qZaFCVnWcHBAmB6+Bi8mL9Zv7fFSbPpXLnYAqH0vfig4CL1boJ5IjCEfzWBsA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707845037; c=relaxed/simple; bh=dDpCLvWQKOk3BjtpUjlDBZpyD2zOJJDETC/CzEEyr0k=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=fOdYBMxmUs04PEpabJlysQq3/YaN5v9cDqkvyrIgRIJpPOvs3y9vHBCq7PvbhrO0N+e3Av4ruM3Pc5r636NhT3dnpxuyxXkUc7SxkOKgQ3Kmt2JfwHpdLg58CtQoLsDCLXyXU2g8bSZRhZOtItKhP0Hno85gI7BK/jsAUOMSBZM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dK4klttw; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-1d746856d85so34470335ad.0; Tue, 13 Feb 2024 09:23:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707845036; x=1708449836; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=FLsvLF6QUYIuVDvvapHTNMgjuAm/e6T5t1iBfk2PvVA=; b=dK4klttwb+EYPPLDqBEsqX9jvSq+9mt/xie3lNOB9ZcudJPCSNiN/L5QVA5pooqINf szP6+o1qo6LNK4e6B4/LUFEwJHIS5tBeaDvbIYHxaccsXgX0z72pdSgQYQd0hgL8zRCh Oga5t0cZVSD9V/F7dL8j3n/WSBvZffqZd1taKZ6UOv4oOHaVOa7/eAY7BkV3WJA72k0A FuSfS/sa5E8XE4M58TO64nHfnCUDN6PwASs9Hk02IJ2miYDwR7Zd1/ROWEM0sBKvfIzX F0SpR6ZWtP9X5swHiCkCgD/ls9l4i0E2/gQVC/s9baJDYN7L2HFjOjBlhMIfPsaFympl b/nA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707845036; x=1708449836; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=FLsvLF6QUYIuVDvvapHTNMgjuAm/e6T5t1iBfk2PvVA=; b=xKTheJG5/bEjryS8e3rtb+9X8dnnqZ85AZhmL7zi1Ytf9+JJ6iU98eJTf9dtE45JYM NhOvG+BCzvY4xMKD7a+MiiOXPzeHgYsNH4E1oR8ddPoLRu70/3dCA4/RJ2aYQcmigqXf KGbvImMjYoD7wz0zjbuRxAHOVXgZd8124cfPBgxV8q8+VewJ1RMio6h2BoZYREnbzpnB JS/WTCji07a3IpO8hK85gi3k23DFL8NjlQoZjxRrT0OkgxRj3FS1Tvr+nKsipEOs0l2X 12UIFAg+nQrFVbJwkm57VUObL/ndFyVhqnLDvEEwvVjeBq0Ry2qMk9kxIkHj2/Tx/rAO znzA== X-Forwarded-Encrypted: i=1; AJvYcCUWzz5V5TCdp3P0R+HZxXglzcN51sO2TseB3rOSMMLSvKaSKZc+06uVtQE0uN5rH0UDRhxJpVnXdXlksZjq13QdBFmioySlpAH1GN0RbB15XSjCGuKxtBKYaYL4TPCpDLL9TyvwSrPT68+kDw== X-Gm-Message-State: AOJu0YzMWjTWTrdM1WKyUJ7hLgPs0JYULyI7lHPlddUogI7UjOBieJj3 pF7YUgoH6BmUnAOnb6xVXbBZxQ/PFjAb/jk9blsSbIEaBiBzVPBL X-Received: by 2002:a17:902:a513:b0:1d9:95c5:2975 with SMTP id s19-20020a170902a51300b001d995c52975mr125039plq.26.1707845035585; Tue, 13 Feb 2024 09:23:55 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUAFLBoxwayfeJdOdJaLCxj9/95+M2cVx1lDK2IAY9ThXhNwuF4KeCLrS4JDMp0iqN6EfuCmO7l9e8PHQAgmy3E0INegBYNWJgFxtaMPbuNpnhagHlEdJ6w8MAWCkocA6iKwrLBZ/wa4OVpGCszewOZbb4FxAaqYzYPZ3V3r9UTPEA2r14cjRHEWiHjD1tJnIU0AET3h7j8BUGrmfH6ob9zZdonbDEw6/SvphIu1Q3gf3efi0ZbAa/6w3sTHtJOBigYsnFgwURz0IFUQ/oJ0Wul/6JAduUtId73OTDJzZO6P4Uz2X/ax7dQ16lTv6Warszu7FYFcFBH7NX0fO2BL4cDh2jcFpFGTj+PRNM8l6n8GeO7lHnyd/kFm5wgX95qfYF8FkrsTLG9KLVz7V0KgSpteOgN/js64aATrk/3gZgiCOEPtlWY+TfgePm25yXld+liWX9G/TeIIfpiWyK1doIj/kptuDHMSI9srQ== Received: from localhost ([2a00:79e1:2e00:1301:e1c5:6354:b45d:8ffc]) by smtp.gmail.com with ESMTPSA id q2-20020a170902bd8200b001d9fc826522sm2321775pls.239.2024.02.13.09.23.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Feb 2024 09:23:55 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, Rob Clark , Robin Murphy , Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Daniel Vetter , Bjorn Andersson , Jordan Crouse , linux-kernel@vger.kernel.org (open list) Subject: [PATCH] drm/msm: Wire up tlb ops Date: Tue, 13 Feb 2024 09:23:40 -0800 Message-ID: <20240213172340.228314-1-robdclark@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Rob Clark The brute force iommu_flush_iotlb_all() was good enough for unmap, but in some cases a map operation could require removing a table pte entry to replace with a block entry. This also requires tlb invalidation. Missing this was resulting an obscure iova fault on what should be a valid buffer address. Thanks to Robin Murphy for helping me understand the cause of the fault. Cc: Robin Murphy Fixes: b145c6e65eb0 ("drm/msm: Add support to create a local pagetable") Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_iommu.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_iommu.c b/drivers/gpu/drm/msm/msm_iommu.c index 5cc8d358cc97..d5512037c38b 100644 --- a/drivers/gpu/drm/msm/msm_iommu.c +++ b/drivers/gpu/drm/msm/msm_iommu.c @@ -21,6 +21,8 @@ struct msm_iommu_pagetable { struct msm_mmu base; struct msm_mmu *parent; struct io_pgtable_ops *pgtbl_ops; + const struct iommu_flush_ops *tlb; + struct device *iommu_dev; unsigned long pgsize_bitmap; /* Bitmap of page sizes in use */ phys_addr_t ttbr; u32 asid; @@ -201,11 +203,33 @@ static const struct msm_mmu_funcs pagetable_funcs = { static void msm_iommu_tlb_flush_all(void *cookie) { + struct msm_iommu_pagetable *pagetable = cookie; + struct adreno_smmu_priv *adreno_smmu; + + if (!pm_runtime_get_if_in_use(pagetable->iommu_dev)) + return; + + adreno_smmu = dev_get_drvdata(pagetable->parent->dev); + + pagetable->tlb->tlb_flush_all((void *)adreno_smmu->cookie); + + pm_runtime_put_autosuspend(pagetable->iommu_dev); } static void msm_iommu_tlb_flush_walk(unsigned long iova, size_t size, size_t granule, void *cookie) { + struct msm_iommu_pagetable *pagetable = cookie; + struct adreno_smmu_priv *adreno_smmu; + + if (!pm_runtime_get_if_in_use(pagetable->iommu_dev)) + return; + + adreno_smmu = dev_get_drvdata(pagetable->parent->dev); + + pagetable->tlb->tlb_flush_walk(iova, size, granule, (void *)adreno_smmu->cookie); + + pm_runtime_put_autosuspend(pagetable->iommu_dev); } static void msm_iommu_tlb_add_page(struct iommu_iotlb_gather *gather, @@ -213,7 +237,7 @@ static void msm_iommu_tlb_add_page(struct iommu_iotlb_gather *gather, { } -static const struct iommu_flush_ops null_tlb_ops = { +static const struct iommu_flush_ops tlb_ops = { .tlb_flush_all = msm_iommu_tlb_flush_all, .tlb_flush_walk = msm_iommu_tlb_flush_walk, .tlb_add_page = msm_iommu_tlb_add_page, @@ -254,10 +278,10 @@ struct msm_mmu *msm_iommu_pagetable_create(struct msm_mmu *parent) /* The incoming cfg will have the TTBR1 quirk enabled */ ttbr0_cfg.quirks &= ~IO_PGTABLE_QUIRK_ARM_TTBR1; - ttbr0_cfg.tlb = &null_tlb_ops; + ttbr0_cfg.tlb = &tlb_ops; pagetable->pgtbl_ops = alloc_io_pgtable_ops(ARM_64_LPAE_S1, - &ttbr0_cfg, iommu->domain); + &ttbr0_cfg, pagetable); if (!pagetable->pgtbl_ops) { kfree(pagetable); @@ -279,6 +303,8 @@ struct msm_mmu *msm_iommu_pagetable_create(struct msm_mmu *parent) /* Needed later for TLB flush */ pagetable->parent = parent; + pagetable->tlb = ttbr1_cfg->tlb; + pagetable->iommu_dev = ttbr1_cfg->iommu_dev; pagetable->pgsize_bitmap = ttbr0_cfg.pgsize_bitmap; pagetable->ttbr = ttbr0_cfg.arm_lpae_s1_cfg.ttbr; -- 2.43.0