From patchwork Wed May 11 12:15:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajay Kumar X-Patchwork-Id: 12846972 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 79DF5C433EF for ; Thu, 12 May 2022 03:41:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=BQeBH/40N8wffKiqgl1KnfEf3P5ygl2UelhheJf8Nh0=; b=0cj6qjTcYe2/67 MeNAdax5YQVGKzSKIjIqGifl+atHuMd1BaVg2yfZye8Ve00fZRKDpFLiQqAOCs2yF+elEcavlBXTT Elh0HJUqWHpYOooozGes/ACjQt9uGUyKy/w1Kizvqk/8z6h+MnNBh5mUTQsSluXfSY9AIawYS0gIi FrA0hefAShpDQaPeqsIw7jvsg5P84X3HEjiZQntczVGb7/1dDPUDZ6zNM3pPdMkd4ZDXyJdZ7k1qq 0gw504kpCYnMb3bFP7Tb4IcFNCqXJdV4ZCTfSNJlOaMp3ZfXETakOzi4Ais3n3uPQbz7PFAMB3orq JlsBt67eqrcVL14abT9A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozfs-009hyZ-Tz; Thu, 12 May 2022 03:39:37 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozfg-009htk-GI for linux-arm-kernel@lists.infradead.org; Thu, 12 May 2022 03:39:26 +0000 Received: from epcas5p4.samsung.com (unknown [182.195.41.42]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20220512033917epoutp02b4ca275430b5c47648818a7e71ec246d~uPm6P33B30237702377epoutp02j for ; Thu, 12 May 2022 03:39:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20220512033917epoutp02b4ca275430b5c47648818a7e71ec246d~uPm6P33B30237702377epoutp02j DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1652326757; bh=+wT2r4n3TIMDY8os27KAPUHZaWrqx3jti6oNFiaafgc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=P8l7klNEkk6qJT2amCXZBM2AYdv9yBS5HJx51zsUA2xhVNM5jlFl1wNKp/xXOm+6b Gc0H0LjM6Jx3oAkMnnfe+ZkhQxPddOgjZg/SJsLMeNxfYh7q7OsYlQ2M0zmFEmZK5Z SYTiE5rnR60wXeQr0dw82ZBWKfwatZIwJ7Z4UFbY= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas5p2.samsung.com (KnoxPortal) with ESMTP id 20220512033917epcas5p29b0e82b814f01c966c2b7957c72b01bc~uPm5y7ZNG1580715807epcas5p2l; Thu, 12 May 2022 03:39:17 +0000 (GMT) Received: from epsmges5p2new.samsung.com (unknown [182.195.38.177]) by epsnrtp4.localdomain (Postfix) with ESMTP id 4KzHZT32dMz4x9Q1; Thu, 12 May 2022 03:39:13 +0000 (GMT) Received: from epcas5p1.samsung.com ( [182.195.41.39]) by epsmges5p2new.samsung.com (Symantec Messaging Gateway) with SMTP id BE.2E.09827.D518C726; Thu, 12 May 2022 12:39:10 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20220511121429epcas5p2d91f585a555e51b1c11e9e02c1b8dc15~uC-c0GfsI1315313153epcas5p2g; Wed, 11 May 2022 12:14:29 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20220511121429epsmtrp1d6e1d59945032e59c23b97e22581f223~uC-czKEd80052800528epsmtrp1E; Wed, 11 May 2022 12:14:29 +0000 (GMT) X-AuditID: b6c32a4a-b3bff70000002663-00-627c815d5f70 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 18.0F.11276.5A8AB726; Wed, 11 May 2022 21:14:29 +0900 (KST) Received: from Jaguar.sa.corp.samsungelectronics.net (unknown [107.108.73.139]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220511121428epsmtip27174326ce33b5a4649137f1123356a2e~uC-bTft4s0270302703epsmtip26; Wed, 11 May 2022 12:14:27 +0000 (GMT) From: Ajay Kumar To: linux-arm-kernel@lists.infradead.org, iommu@lists.linux-foundation.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: alim.akhtar@samsung.com, pankaj.dubey@samsung.com, ajaykumar.rs1989@gmail.com, Marek Szyprowski , Ajay Kumar Subject: [PATCH V2 1/6] dma-mapping: add DMA_ATTR_LOW_ADDRESS attribute Date: Wed, 11 May 2022 17:45:39 +0530 Message-Id: <20220511121544.5998-2-ajaykumar.rs@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrGKsWRmVeSWpSXmKPExsWy7bCmum5cY02Swe+ZjBZfT/xmszjw/iCL xYN529gsFuy3tuicvYHdYtPja6wWa4/cZbdYtPULu8XBD09YLVrumDpweTw5OI/JY828NYwe O2fdZffYtKqTzWPzknqPyTeWM3r0bVnFGMAelW2TkZqYklqkkJqXnJ+SmZduq+QdHO8cb2pm YKhraGlhrqSQl5ibaqvk4hOg65aZA3SdkkJZYk4pUCggsbhYSd/Opii/tCRVISO/uMRWKbUg JafApECvODG3uDQvXS8vtcTK0MDAyBSoMCE7o6Gli63gIVfFmYXLmBsYP3J0MXJwSAiYSJz8 nNjFyMUhJLCbUaK58TlbFyMnkPOJUeLTSj+IxDdGiVVvTrOCJEAaZv1dzgaR2Msoca51E5TT wiTx5P4adpAqNgFtiW3Tb7KA2CICLYwSc6fZgxQxC6xklFhyqwOsSFjAXWLDsx6wfSwCqhLT 2+aDreAVsJH4/34hG8Q6eYnVGw4wg9icArYSk3b8ZQQZJCHwll3i+KNdLBBFLhKTP/2Guk9Y 4tXxLewQtpTEy/42KLta4tyt/WwQzR2MEh0P10El7CUOXJnDAgoNZgFNifW79CHCshJTT61j ArGZBfgken8/YYKI80rsmAdigwJPTWLrCj+IsIzEmYNXoMIeErdvBEICZQKjRMvHO6wTGOVm ISxYwMi4ilEytaA4Nz212LTAKC+1HB5pyfm5mxjBCVDLawfjwwcf9A4xMnEwHmKU4GBWEuHd 31eRJMSbklhZlVqUH19UmpNafIjRFBh+E5mlRJPzgSk4ryTe0MTSwMTMzMzE0tjMUEmc93T6 hkQhgfTEktTs1NSC1CKYPiYOTqkGptSwx4drzT9EzGsXX3MvZ5lQcebcdxtfcC49/vyg9ZRO RvuGBd9ffZlyOHRieElvrlGlJ4eZoJKDJJO7yib5w3abbhw9yprMuKg8NuH23ioz8f9519dM 09ebpS/0hk3m8dOCrQ+ucr5bGtEyc9mRefdajr5lNkl9PHWnbtez78d8pqixBWyd/H+9hfPS Iyp3Ope9vxb1j2+HcNmEE49nBhh/35ym/enKc+XJElNi36uvPJAq9fVrreRRo/z2r8Iluie2 FbvwZizWfrHx+NKY62bTqwS5o67LbqpJ+honteiU72f29yty55lX29/eu2rLkZ2Zp9xTpBbv XWe/QSIxuVOC/5NvMOu6+xvNPaSYz9grsRRnJBpqMRcVJwIAttaZnQkEAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrALMWRmVeSWpSXmKPExsWy7bCSvO7SFdVJBp1XFSy+nvjNZnHg/UEW iwfztrFZLNhvbdE5ewO7xabH11gt1h65y26xaOsXdouDH56wWrTcMXXg8nhycB6Tx5p5axg9 ds66y+6xaVUnm8fmJfUek28sZ/To27KKMYA9issmJTUnsyy1SN8ugSujoaWLreAhV8WZhcuY Gxg/cnQxcnJICJhIzPq7nK2LkYtDSGA3o8TzdTcZIRIyEs93PGWBsIUlVv57zg5R1MQk8WHZ ErAiNgFtiW3Tb7KAJEQEuhglrl7dywriMAusZZR41QhRJSzgLrHhWQ8biM0ioCoxvW0+K4jN K2Aj8f/9QjaIFfISqzccYAaxOQVsJSbt+AvWKwRUM+fzUeYJjHwLGBlWMUqmFhTnpucWGxYY 5qWW6xUn5haX5qXrJefnbmIEB6qW5g7G7as+6B1iZOJgPMQowcGsJMK7v68iSYg3JbGyKrUo P76oNCe1+BCjNAeLkjjvha6T8UIC6YklqdmpqQWpRTBZJg5OqQamKL2y9fNPzvfvM6lvq/ZV DLz+gTvlqFoBS3bjlIAl8bWs5cvmW3IGTWg6VP57faLFSa8lRpWW8t/sRKbM+2t0f35w/STV Fd8OmKqu2vi5gFXw5c+gycwmPmY7lWzkF8VJ5WZfL7y7NfqasLGvTYrizEXB2WH9nN9W2zsq CYlaPWQSNQ2Jvzhb7PClL/vvatn988ttN2A6J/DD0bnrqrU816Vv0+w+2By9qvbFNqrwyeRt 0pcnuFzu5ay8Vf76ivUNrRN/v5hWTejwON8f1vj1u7rE36VTzlrnhO3x6GBz2lsRGVTXtsw2 Re7wxQjZ/im5Z37fKton+LQ05+wtf3v5l9Eh0lPmVW75+/LU2gQlluKMREMt5qLiRACMPfpe wwIAAA== X-CMS-MailID: 20220511121429epcas5p2d91f585a555e51b1c11e9e02c1b8dc15 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220511121429epcas5p2d91f585a555e51b1c11e9e02c1b8dc15 References: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220511_203924_963026_A00B2853 X-CRM114-Status: GOOD ( 16.53 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Marek Szyprowski Some devices require to allocate a special buffer (usually for the firmware) just at the beginning of the address space to ensure that all further allocations can be expressed as a positive offset from that special buffer. When IOMMU is used for managing the DMA address space, such requirement can be easily fulfilled, simply by enforcing the 'first-fit' IOVA allocation algorithm. This patch adds a DMA attribute for such case. Signed-off-by: Marek Szyprowski Signed-off-by: Ajay Kumar --- include/linux/dma-mapping.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index dca2b1355bb1..3cbdf857edd1 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -60,6 +60,12 @@ * at least read-only at lesser-privileged levels). */ #define DMA_ATTR_PRIVILEGED (1UL << 9) +/* + * DMA_ATTR_LOW_ADDRESS: used to indicate that the buffer should be allocated + * at the lowest possible DMA address, usually just at the beginning of the + * DMA/IOVA address space ('first-fit' allocation algorithm). + */ +#define DMA_ATTR_LOW_ADDRESS (1UL << 10) /* * A dma_addr_t can hold any valid DMA or bus address for the platform. It can From patchwork Wed May 11 12:15:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajay Kumar X-Patchwork-Id: 12846973 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 05C82C433F5 for ; Thu, 12 May 2022 03:41:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=XDA+gdR9KaII9Bh+F33dji02hDSUZmlP1Lzp9Ptkb7k=; b=zSdZTHrCoGhuZB W+KeYwjEPPGUhi7qoGdvCrMAp1nmFOhhFSt8k7mxImQKktmn5oMlxncEkKnIZ2cb65BtezmNt9a0o vAhk+Ar3Nbjj3YSTNPxVEmvtAALbkcOiUxB+B81iNZe8TmBOnKQzlnNgU7bxbhPKjLMMzVd0O9ak3 GB7xtkIUfnrjydLqzCWcDEecawe6V/Elt8q5ZBMwRgSp5Hqk1j86WPFsDb8rLfw+kYxjVVCRJODRS P03CR9c+C28tG/lgEtSFBg+Fm6GQlNkV5EM59+h2x5/JgI1FJyWsSk0/RgDIVWrxF49YUU/JjmOTg 7/Zb/nFxkp11goEPxc8A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozg2-009i2B-Fa; Thu, 12 May 2022 03:39:46 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozfk-009hvb-T8 for linux-arm-kernel@lists.infradead.org; Thu, 12 May 2022 03:39:30 +0000 Received: from epcas5p2.samsung.com (unknown [182.195.41.40]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20220512033926epoutp02d6617b0abc216fbad075c6719b65485c~uPnCRl6Sp3248032480epoutp02Z for ; Thu, 12 May 2022 03:39:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20220512033926epoutp02d6617b0abc216fbad075c6719b65485c~uPnCRl6Sp3248032480epoutp02Z DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1652326766; bh=eMIWhR8uQtGggYjCDN0lr+lgDTPrOMcUQeBzbQD6iV0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=srXitg/gW87AYp9QWqe0xXB+oHnR0+lbckvp9ei43FTkDdvDHsWNIfhk2bxlziEP0 qifZ7psl/Gj4CD9gFhVnKYJwvZsArk86YmU93zPHJ4U4GWBVK5aZffY3Hi/IrNNQ7+ Mu4e+IJdUr0X2CVjZEd3RXpEFhOfWOzi0F6y34/U= Received: from epsnrtp2.localdomain (unknown [182.195.42.163]) by epcas5p1.samsung.com (KnoxPortal) with ESMTP id 20220512033925epcas5p1a72d6da247e4e61a3d31320ce4f72dba~uPnBekPMX0859208592epcas5p1Y; Thu, 12 May 2022 03:39:25 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.183]) by epsnrtp2.localdomain (Postfix) with ESMTP id 4KzHZY181Fz4x9Px; Thu, 12 May 2022 03:39:17 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id 65.A6.09762.2618C726; Thu, 12 May 2022 12:39:14 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p3.samsung.com (KnoxPortal) with ESMTPA id 20220511121433epcas5p3de77375a85edf1aa78c0976a7107fdfa~uC-gp34bb2407524075epcas5p3B; Wed, 11 May 2022 12:14:33 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20220511121433epsmtrp1aeae35ca879f756d5a6c87c4a0991b9a~uC-gntGqD0052800528epsmtrp1F; Wed, 11 May 2022 12:14:33 +0000 (GMT) X-AuditID: b6c32a4b-1fdff70000002622-27-627c8162efb0 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id C8.0F.11276.9A8AB726; Wed, 11 May 2022 21:14:33 +0900 (KST) Received: from Jaguar.sa.corp.samsungelectronics.net (unknown [107.108.73.139]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220511121432epsmtip2a8f1106587c26da4260e75da3142b3f9~uC-fJ0j5G0270002700epsmtip2J; Wed, 11 May 2022 12:14:32 +0000 (GMT) From: Ajay Kumar To: linux-arm-kernel@lists.infradead.org, iommu@lists.linux-foundation.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: alim.akhtar@samsung.com, pankaj.dubey@samsung.com, ajaykumar.rs1989@gmail.com, Marek Szyprowski , Ajay Kumar Subject: [PATCH V2 2/6] iommu: iova: properly handle 0 as a valid IOVA address Date: Wed, 11 May 2022 17:45:40 +0530 Message-Id: <20220511121544.5998-3-ajaykumar.rs@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrOKsWRmVeSWpSXmKPExsWy7bCmpm5SY02SwaenMhZfT/xmszjw/iCL xYN529gsFuy3tuicvYHdYtPja6wWa4/cZbdYtPULu8XBD09YLVrumDpweTw5OI/JY828NYwe O2fdZffYtKqTzWPzknqPyTeWM3r0bVnFGMAelW2TkZqYklqkkJqXnJ+SmZduq+QdHO8cb2pm YKhraGlhrqSQl5ibaqvk4hOg65aZA3SdkkJZYk4pUCggsbhYSd/Opii/tCRVISO/uMRWKbUg JafApECvODG3uDQvXS8vtcTK0MDAyBSoMCE7Y9uybWwFVzUr3pw4w97A+EOxi5GDQ0LAROLk O7EuRi4OIYHdjBKd5z8yQTifGCX+HnzGAuF8Y5ToefsHyOEE63ix/QlU1V5GiUUfl7NCOC1M EgundDCDVLEJaEtsm34TrENEoIVRYu40e5AiZoGVjBJLbnWwgySEBQIkHu3czARiswioSixv +AzWwCtgI9E3fwo7xDp5idUbDoAN5RSwlZi04y8jyCAJgbfsEus7L7NDfOEi8fWDGES9sMSr 41ugeqUkXva3QdnVEudu7WeD6O1glOh4uA4qYS9x4MocFpA5zAKaEut36UOEZSWmnloHdhuz AJ9E7+8nTBBxXokd80BskLVqEltX+EGEZSTOHLwCVeIh8fgAxCohgQmMEj9W32ecwCg3C2HD AkbGVYySqQXFuempxaYFxnmp5fBYS87P3cQIToFa3jsYHz34oHeIkYmD8RCjBAezkgjv/r6K JCHelMTKqtSi/Pii0pzU4kOMpsDwm8gsJZqcD0zCeSXxhiaWBiZmZmYmlsZmhkrivKfSNyQK CaQnlqRmp6YWpBbB9DFxcEo1MClnmxZv2dXy91r8io0BgUa51y7V/zq8VF1G/lXQpDsR8jwa XEUzr0799uvYkzN3QrwMzO1l6rfe27Tl3+qqR5kP9z9dXtB873Jl0CT2K//CzqxpKbyYc+tL TbiJcIbQHaPpH17yXhe6zOv2//3um0ek15bHrbxwSyYrVFp2X1jhrQr2EFH2a6nuzue9HDlt 3myO+bFqf9PlTesL6hNnGuk4lB8z6tVVvt6z82dFY/7B1RZloh9Pz39/9prD8UebWTyXKoZF r+2dyS2wuPLVFRU3551ibaGGIgsf7GFXnvr9iFEoh8izCSFl000n7+yWst+/6lXb3xNzXoZ0 ut3ek3p0goHHnCNijawSnZ8V6ucosRRnJBpqMRcVJwIA7wpDdAoEAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrPLMWRmVeSWpSXmKPExsWy7bCSvO7KFdVJBpvuaFh8PfGbzeLA+4Ms Fg/mbWOzWLDf2qJz9gZ2i02Pr7FarD1yl91i0dYv7BYHPzxhtWi5Y+rA5fHk4DwmjzXz1jB6 7Jx1l91j06pONo/NS+o9Jt9YzujRt2UVYwB7FJdNSmpOZllqkb5dAlfGtmXb2Aquala8OXGG vYHxh2IXIyeHhICJxIvtT5hAbCGB3YwS3y4rQMRlJJ7veMoCYQtLrPz3nL2LkQuopolJ4uCD jcwgCTYBbYlt02+ygCREBLoYJa5e3csK4jALrGWUeNW4hBGkSljAT+L1ls9sIDaLgKrE8obP YGN5BWwk+uZPYYdYIS+xesMBsKmcArYSk3b8ZYQ4yUZizuejzBMY+RYwMqxilEwtKM5Nzy02 LDDMSy3XK07MLS7NS9dLzs/dxAgOUy3NHYzbV33QO8TIxMF4iFGCg1lJhHd/X0WSEG9KYmVV alF+fFFpTmrxIUZpDhYlcd4LXSfjhQTSE0tSs1NTC1KLYLJMHJxSDUxWSW9se8KyMwrlDk+4 ni12MsMs+ssfaTu3+IqrqY+CGQx8YgqWO+91sBXXWd7AZOJpw7ae50VQz/UI8cne5ebin3Uf Ts/tPfG19JOI+dQ4URfTR3IsHD/ZN1/bmT1linoo4w+X6G89VneWtLPLm5g9//3I+ONTGV0O hzWpx3r+/dUWqNztsfPhltPSVSF5m38wSvya93NmXNnnd7x3fdhNGzsqrDP/sv+YxN4pKXr9 699nbuIOv0r7LFTXr42r+Pn9gtodOZk1CuH6Gl8nS2g/XXA62eBPULjFJ+VNy15tejFvrcPb eS5J72Or2lcbHuGfxdzJzbfj54zdWwS2MinO8ysXqnowoUGqfhrjASWW4oxEQy3mouJEAALs 3RvCAgAA X-CMS-MailID: 20220511121433epcas5p3de77375a85edf1aa78c0976a7107fdfa X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220511121433epcas5p3de77375a85edf1aa78c0976a7107fdfa References: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220511_203929_372629_E748BB3E X-CRM114-Status: GOOD ( 23.70 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Marek Szyprowski Zero is a valid DMA and IOVA address on many architectures, so adjust the IOVA management code to properly handle it. A new value IOVA_BAD_ADDR (~0UL) is introduced as a generic value for the error case. Adjust all callers of the alloc_iova_fast() function for the new return value. Signed-off-by: Marek Szyprowski Signed-off-by: Ajay Kumar --- drivers/iommu/dma-iommu.c | 16 +++++++++------- drivers/iommu/iova.c | 13 +++++++++---- include/linux/iova.h | 1 + 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 1ca85d37eeab..16218d6a0703 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -605,7 +605,7 @@ static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain, { struct iommu_dma_cookie *cookie = domain->iova_cookie; struct iova_domain *iovad = &cookie->iovad; - unsigned long shift, iova_len, iova = 0; + unsigned long shift, iova_len, iova = IOVA_BAD_ADDR; if (cookie->type == IOMMU_DMA_MSI_COOKIE) { cookie->msi_iova += size; @@ -625,11 +625,13 @@ static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain, iova = alloc_iova_fast(iovad, iova_len, DMA_BIT_MASK(32) >> shift, false); - if (!iova) + if (iova == IOVA_BAD_ADDR) iova = alloc_iova_fast(iovad, iova_len, dma_limit >> shift, true); - return (dma_addr_t)iova << shift; + if (iova != IOVA_BAD_ADDR) + return (dma_addr_t)iova << shift; + return DMA_MAPPING_ERROR; } static void iommu_dma_free_iova(struct iommu_dma_cookie *cookie, @@ -688,7 +690,7 @@ static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys, size = iova_align(iovad, size + iova_off); iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev); - if (!iova) + if (iova == DMA_MAPPING_ERROR) return DMA_MAPPING_ERROR; if (iommu_map_atomic(domain, iova, phys - iova_off, size, prot)) { @@ -799,7 +801,7 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev, size = iova_align(iovad, size); iova = iommu_dma_alloc_iova(domain, size, dev->coherent_dma_mask, dev); - if (!iova) + if (iova == DMA_MAPPING_ERROR) goto out_free_pages; if (sg_alloc_table_from_pages(sgt, pages, count, 0, size, GFP_KERNEL)) @@ -1204,7 +1206,7 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, } iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev); - if (!iova) { + if (iova == DMA_MAPPING_ERROR) { ret = -ENOMEM; goto out_restore_sg; } @@ -1516,7 +1518,7 @@ static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev, return NULL; iova = iommu_dma_alloc_iova(domain, size, dma_get_mask(dev), dev); - if (!iova) + if (iova == DMA_MAPPING_ERROR) goto out_free_page; if (iommu_map(domain, iova, msi_addr, size, prot)) diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c index db77aa675145..ae0fe0a6714e 100644 --- a/drivers/iommu/iova.c +++ b/drivers/iommu/iova.c @@ -429,6 +429,8 @@ EXPORT_SYMBOL_GPL(free_iova); * This function tries to satisfy an iova allocation from the rcache, * and falls back to regular allocation on failure. If regular allocation * fails too and the flush_rcache flag is set then the rcache will be flushed. + * Returns a pfn the allocated iova starts at or IOVA_BAD_ADDR in the case + * of a failure. */ unsigned long alloc_iova_fast(struct iova_domain *iovad, unsigned long size, @@ -447,7 +449,7 @@ alloc_iova_fast(struct iova_domain *iovad, unsigned long size, size = roundup_pow_of_two(size); iova_pfn = iova_rcache_get(iovad, size, limit_pfn + 1); - if (iova_pfn) + if (iova_pfn != IOVA_BAD_ADDR) return iova_pfn; retry: @@ -456,7 +458,7 @@ alloc_iova_fast(struct iova_domain *iovad, unsigned long size, unsigned int cpu; if (!flush_rcache) - return 0; + return IOVA_BAD_ADDR; /* Try replenishing IOVAs by flushing rcache. */ flush_rcache = false; @@ -831,7 +833,7 @@ static unsigned long __iova_rcache_get(struct iova_rcache *rcache, unsigned long limit_pfn) { struct iova_cpu_rcache *cpu_rcache; - unsigned long iova_pfn = 0; + unsigned long iova_pfn = IOVA_BAD_ADDR; bool has_pfn = false; unsigned long flags; @@ -858,6 +860,9 @@ static unsigned long __iova_rcache_get(struct iova_rcache *rcache, spin_unlock_irqrestore(&cpu_rcache->lock, flags); + if (!iova_pfn) + return IOVA_BAD_ADDR; + return iova_pfn; } @@ -873,7 +878,7 @@ static unsigned long iova_rcache_get(struct iova_domain *iovad, unsigned int log_size = order_base_2(size); if (log_size >= IOVA_RANGE_CACHE_MAX_SIZE || !iovad->rcaches) - return 0; + return IOVA_BAD_ADDR; return __iova_rcache_get(&iovad->rcaches[log_size], limit_pfn - size); } diff --git a/include/linux/iova.h b/include/linux/iova.h index 320a70e40233..46b5b10c532b 100644 --- a/include/linux/iova.h +++ b/include/linux/iova.h @@ -21,6 +21,7 @@ struct iova { unsigned long pfn_lo; /* Lowest allocated pfn */ }; +#define IOVA_BAD_ADDR (~0UL) struct iova_rcache; From patchwork Wed May 11 12:15:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajay Kumar X-Patchwork-Id: 12846975 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E10A6C433EF for ; Thu, 12 May 2022 03:41:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=072M3BIey1JfHRoC2JeM2omtEwPVuMN+pQjCJaHT1nE=; b=z6jrrT5foQh+Wo y32hVlbViol38zi6TWbISaD8F0n08iP0DQK+VsD5ZFTvRAoLEHlrt5lTuOzadhTXFFO5gmhDfp6ww P7x/JLZIpi1cThss+lR4+o8LiRK5Oit57YcSzT5TTMJDvB7kCpxowOjnXOFAJU+rKyH55j8yRaZms s+CqO97qiMG1xDqf9FEV6VMdakGg6f62d7i+lGjYQZwI6ZjXq3+a+6NC83Rwb7MzIxW+mqWmRfJuQ D3IbsuRQU9mb1CbhTxiMC0AFgYqyyiK5GcjwynTXH0/gHGF8aVS/GB+W+rDJvUDCwS9j5cOhL7CEz fK1Hn7QRqk+Dg8fQr4xQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozgB-009i4b-UE; Thu, 12 May 2022 03:39:56 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozfl-009hvg-FS for linux-arm-kernel@lists.infradead.org; Thu, 12 May 2022 03:39:31 +0000 Received: from epcas5p1.samsung.com (unknown [182.195.41.39]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20220512033926epoutp024abcfdba2a475125cf8324b11e102482~uPnCYcwi33248032480epoutp02a for ; Thu, 12 May 2022 03:39:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20220512033926epoutp024abcfdba2a475125cf8324b11e102482~uPnCYcwi33248032480epoutp02a DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1652326766; bh=j7H+lYgLrxIwd/UWGDzvCeRAYA20sZX74We4b9F9RWw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Tc3u/bIH/OxEcctZtanwOGle1z0FER8kMaWyCtPCNbPCPAgI8U75uwQWZMOuICr41 qnQnCzJmtSnVrjudWcgxuds4oqwT1eEbFfk8X/tqrskVL+OYK9ASh+ho/OfTHt5pup ThpsAyDdmeFd47YZpvbbdsa99/0Ftt3sxWpEnKj0= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas5p1.samsung.com (KnoxPortal) with ESMTP id 20220512033926epcas5p1f24cee324a020438f0c120d6eb214304~uPnCD3MpP0057600576epcas5p1C; Thu, 12 May 2022 03:39:26 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.174]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4KzHZf42v4z4x9Pr; Thu, 12 May 2022 03:39:22 +0000 (GMT) Received: from epcas5p2.samsung.com ( [182.195.41.40]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id 6A.A6.09762.9618C726; Thu, 12 May 2022 12:39:21 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20220511121437epcas5p29d2210065b47346840c9c6ac14b0e585~uC-jtXoHL2858628586epcas5p2y; Wed, 11 May 2022 12:14:37 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20220511121437epsmtrp1b387b23b145dd996fa4816ef8f52b71a~uC-jshRt_0052800528epsmtrp1H; Wed, 11 May 2022 12:14:37 +0000 (GMT) X-AuditID: b6c32a4b-213ff70000002622-40-627c81690c8c Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 79.0F.11276.CA8AB726; Wed, 11 May 2022 21:14:36 +0900 (KST) Received: from Jaguar.sa.corp.samsungelectronics.net (unknown [107.108.73.139]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220511121435epsmtip2552daaded7e433543c05e9341576f16d~uC-iNLKKW0495704957epsmtip26; Wed, 11 May 2022 12:14:35 +0000 (GMT) From: Ajay Kumar To: linux-arm-kernel@lists.infradead.org, iommu@lists.linux-foundation.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: alim.akhtar@samsung.com, pankaj.dubey@samsung.com, ajaykumar.rs1989@gmail.com, Marek Szyprowski , Ajay Kumar Subject: [PATCH V2 3/6] iommu: iova: add support for 'first-fit' algorithm Date: Wed, 11 May 2022 17:45:41 +0530 Message-Id: <20220511121544.5998-4-ajaykumar.rs@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrJKsWRmVeSWpSXmKPExsWy7bCmhm5mY02SwcEODouvJ36zWRx4f5DF 4sG8bWwWC/ZbW3TO3sBusenxNVaLtUfuslss2vqF3eLghyesFi13TB24PJ4cnMfksWbeGkaP nbPusntsWtXJ5rF5Sb3H5BvLGT36tqxiDGCPyrbJSE1MSS1SSM1Lzk/JzEu3VfIOjneONzUz MNQ1tLQwV1LIS8xNtVVy8QnQdcvMAbpOSaEsMacUKBSQWFyspG9nU5RfWpKqkJFfXGKrlFqQ klNgUqBXnJhbXJqXrpeXWmJlaGBgZApUmJCdcX7pQ5aCD3IVJ5qXMjYwbpbsYuTkkBAwkXj+ 4gNzFyMXh5DAbkaJSYd/sUA4nxiBMr+hnG+MEkt2rmaFabnauBYqsZdRYtbr/ewQTguTRNPr K+wgVWwC2hLbpt9kAbFFBFoYJeZOswcpYhZYCTTqVgdYkbCAl0Tr8kdMIDaLgKrEmY7JYCt4 BWwk+q9/YIFYJy+xesMBZhCbU8BWYtKOv4wggyQE3rJLTJu1GarIRWL6mWnsELawxKvjW6Bs KYmX/W1QdrXEuVv72SCaOxglOh6ug0rYSxy4MgdoEAfQeZoS63fpQ4RlJaaeWgd2HLMAn0Tv 7ydMEHFeiR3zQGwOIFtNYusKP4iwjMSZg1egSjwk1q5uZ4KEygRGiV29R1gnMMrNQtiwgJFx FaNkakFxbnpqsWmBcV5qOTzekvNzNzGC06CW9w7GRw8+6B1iZOJgPMQowcGsJMK7v68iSYg3 JbGyKrUoP76oNCe1+BCjKTAAJzJLiSbnAxNxXkm8oYmlgYmZmZmJpbGZoZI476n0DYlCAumJ JanZqakFqUUwfUwcnFINTNGvfLvZGDOvqOXs6NmtdvIsmx+TwToPjysnQrQZX9xZJrnow8Nv Cn/Dmv7u+HClsK0zdkLBqTVNMTs+vZeQnGFyuOF1tmaZyPtrV6QeZ3j2OnO3p93PFGZe9MZs 9tqNF9NOf9lu82rfzW9uq2LuTVxeflnI6Ufmg0unF2e82S+a2Sue7xGZdcqyMt+m/2uag9/S Hc+f6E6cYFV+6Lx5x7ysxAmppev+rLL/qFC68PXXjF8d/HWrhV1S/m69bXm95N5JYEJeP6Um PuLpeVWTqNcnFau2XZ31dKJeZ9zdJ7PE5TvWzTiz4sETl6bQUK2ft55fWlhb8S7Z+sNCkYr3 4oYd8c6fXd8fjhBx2ug494wSS3FGoqEWc1FxIgB6OQQCDAQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrALMWRmVeSWpSXmKPExsWy7bCSvO6aFdVJBmearCy+nvjNZnHg/UEW iwfztrFZLNhvbdE5ewO7xabH11gt1h65y26xaOsXdouDH56wWrTcMXXg8nhycB6Tx5p5axg9 ds66y+6xaVUnm8fmJfUek28sZ/To27KKMYA9issmJTUnsyy1SN8ugSvj/NKHLAUf5CpONC9l bGDcLNnFyMkhIWAicbVxLUsXIxeHkMBuRomVFz6wQSRkJJ7veMoCYQtLrPz3nB2iqIlJYvnS E2AJNgFtiW3Tb4J1iwh0MUpcvbqXFcRhFljLKPGqcQkjSJWwgJdE6/JHTCA2i4CqxJmOyawg Nq+AjUT/9Q9QK+QlVm84wAxicwrYSkza8ResVwioZs7no8wTGPkWMDKsYpRMLSjOTc8tNiww zEst1ytOzC0uzUvXS87P3cQIDlQtzR2M21d90DvEyMTBeIhRgoNZSYR3f19FkhBvSmJlVWpR fnxRaU5q8SFGaQ4WJXHeC10n44UE0hNLUrNTUwtSi2CyTBycUg1M27SetzzTalC8a313HX/8 KcnPvY6ttV565QtqmNtZPx6fNvFLw8zLdzqUz8gfsFtz83iLEsMv6QSDH5YHjiy+NlXUTMFb 8rHjytb8BbF9J3ec+je3tWrH7lhHlRX+d7VYpklqbzANP863xDBcxe9P36QFr+4aOG1v6N3E PDvuZtdMIeaWwNJodRUmA3HLf3MkndTkjpwJmn9B9NJbrmMtC+tvTd/EH/WmuTfE03Vb+sfS aKHao+/m7M9W/SrTePGUy/57QRuvXK38Iff6VIeR8ny9snnPo+wiy68sEHyle6jluXJa7rOi c1c3GZ0Nnf/jf+N7UUummyqp+sw+svXX5wjVM/lMXbp16+7H35WOK7EUZyQaajEXFScCAAiJ x1bDAgAA X-CMS-MailID: 20220511121437epcas5p29d2210065b47346840c9c6ac14b0e585 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220511121437epcas5p29d2210065b47346840c9c6ac14b0e585 References: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220511_203929_941286_305C9238 X-CRM114-Status: GOOD ( 20.78 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Marek Szyprowski Add support for the 'first-fit' allocation algorithm. It will be used for the special case of implementing DMA_ATTR_LOW_ADDRESS, so this path doesn't use IOVA cache. Signed-off-by: Marek Szyprowski Signed-off-by: Ajay Kumar --- drivers/iommu/iova.c | 78 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/iova.h | 2 ++ 2 files changed, 80 insertions(+) diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c index ae0fe0a6714e..89f9338f83a3 100644 --- a/drivers/iommu/iova.c +++ b/drivers/iommu/iova.c @@ -231,6 +231,59 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad, return -ENOMEM; } +static unsigned long +__iova_get_aligned_start(unsigned long start, unsigned long size) +{ + unsigned long mask = __roundup_pow_of_two(size) - 1; + + return (start + mask) & ~mask; +} + +static int __alloc_and_insert_iova_range_forward(struct iova_domain *iovad, + unsigned long size, unsigned long limit_pfn, + struct iova *new) +{ + struct rb_node *curr; + unsigned long flags; + unsigned long start, limit; + + spin_lock_irqsave(&iovad->iova_rbtree_lock, flags); + + curr = rb_first(&iovad->rbroot); + limit = limit_pfn; + start = __iova_get_aligned_start(iovad->start_pfn, size); + + while (curr) { + struct iova *curr_iova = rb_entry(curr, struct iova, node); + struct rb_node *next = rb_next(curr); + + start = __iova_get_aligned_start(curr_iova->pfn_hi + 1, size); + if (next) { + struct iova *next_iova = rb_entry(next, struct iova, node); + limit = next_iova->pfn_lo - 1; + } else { + limit = limit_pfn; + } + + if ((start + size) <= limit) + break; /* found a free slot */ + curr = next; + } + + if (!curr && start + size > limit) { + spin_unlock_irqrestore(&iovad->iova_rbtree_lock, flags); + return -ENOMEM; + } + + new->pfn_lo = start; + new->pfn_hi = new->pfn_lo + size - 1; + iova_insert_rbtree(&iovad->rbroot, new, curr); + + spin_unlock_irqrestore(&iovad->iova_rbtree_lock, flags); + + return 0; +} + static struct kmem_cache *iova_cache; static unsigned int iova_cache_users; static DEFINE_MUTEX(iova_cache_mutex); @@ -420,6 +473,31 @@ free_iova(struct iova_domain *iovad, unsigned long pfn) } EXPORT_SYMBOL_GPL(free_iova); +/** + * alloc_iova_first_fit - allocates an iova from the beginning of address space + * @iovad: - iova domain in question + * @size: - size of page frames to allocate + * @limit_pfn: - max limit address + * Returns a pfn the allocated iova starts at or IOVA_BAD_ADDR in the case + * of a failure. + */ +unsigned long +alloc_iova_first_fit(struct iova_domain *iovad, unsigned long size, + unsigned long limit_pfn) +{ + struct iova *new_iova = alloc_iova_mem(); + + if (!new_iova) + return IOVA_BAD_ADDR; + + if (__alloc_and_insert_iova_range_forward(iovad, size, limit_pfn, new_iova)) { + free_iova_mem(new_iova); + return IOVA_BAD_ADDR; + } + return new_iova->pfn_lo; +} +EXPORT_SYMBOL_GPL(alloc_iova_first_fit); + /** * alloc_iova_fast - allocates an iova from rcache * @iovad: - iova domain in question diff --git a/include/linux/iova.h b/include/linux/iova.h index 46b5b10c532b..45ed6d41490a 100644 --- a/include/linux/iova.h +++ b/include/linux/iova.h @@ -89,6 +89,8 @@ void free_iova_fast(struct iova_domain *iovad, unsigned long pfn, unsigned long size); unsigned long alloc_iova_fast(struct iova_domain *iovad, unsigned long size, unsigned long limit_pfn, bool flush_rcache); +unsigned long alloc_iova_first_fit(struct iova_domain *iovad, unsigned long size, + unsigned long limit_pfn); struct iova *reserve_iova(struct iova_domain *iovad, unsigned long pfn_lo, unsigned long pfn_hi); void init_iova_domain(struct iova_domain *iovad, unsigned long granule, From patchwork Wed May 11 12:15:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajay Kumar X-Patchwork-Id: 12846976 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4AC74C433EF for ; Thu, 12 May 2022 03:41:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=GfgVD6doBQbgWtAl2v6IAlyuAQXQ7j8evEBA80uhLdI=; b=uQL6eoDTVFodDs /+PqJ1W1xn+7V6wJLanQMJEdONYFX3HwjdqyE4Q5TQFfqGBOIrUc2ytDpXnSjBKFWzxevn2CLieuQ M1ZqQ9/t9fl9q9H1CcOlhRUQCUm7j3JWFBuM9v0bSPuDaefre26mamlbBKnjSS8Wjsu4wOMH7a0H7 rStLTn1+7315QG+aJ3Vy3STo9LQmwW7Q90od4QXaP+Zdot6f4YjHFEQx+asrxywcs/+78mp6VcVqD jbtPOWDVU6aaAOHmFR9YcR44dpBugROl6da2cFK8smm5ZSQ/9ITPEypyqzg8zX9tNbkz2mcMEEky6 mOzRD3++FCogexLcGaXg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozgN-009i8x-QO; Thu, 12 May 2022 03:40:07 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozfq-009hxe-Nm for linux-arm-kernel@lists.infradead.org; Thu, 12 May 2022 03:39:36 +0000 Received: from epcas5p3.samsung.com (unknown [182.195.41.41]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20220512033932epoutp023e101c593bf50a5d0b3225c2dac832f4~uPnIFlJUY0066800668epoutp02L for ; Thu, 12 May 2022 03:39:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20220512033932epoutp023e101c593bf50a5d0b3225c2dac832f4~uPnIFlJUY0066800668epoutp02L DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1652326772; bh=h69GhjZ5aQZdvqmbJl+5HwMeprWIkkzTRr4CCQEkMTI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oKTRHIEluYU9doT34m43BIwStkKE1BaRVK3wBktBn/65iQbfubylcpH9UOsztVg79 /KsxNzYCiXs/BAjwRbh9qBFXQ9vFScL7JFSAOt8MPBDQVevV9V3AdlfZMo6b7a5TOO ice86Pbm4sZIpqHmpF656S2ZV39yzRkmqMcYcVVM= Received: from epsnrtp1.localdomain (unknown [182.195.42.162]) by epcas5p4.samsung.com (KnoxPortal) with ESMTP id 20220512033932epcas5p4ede7a161facac8a73dcee0ae0a2962bd~uPnHzgtbp1491014910epcas5p4i; Thu, 12 May 2022 03:39:32 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.175]) by epsnrtp1.localdomain (Postfix) with ESMTP id 4KzHZk2jWWz4x9Pv; Thu, 12 May 2022 03:39:26 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id FF.A6.09762.C618C726; Thu, 12 May 2022 12:39:25 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p4.samsung.com (KnoxPortal) with ESMTPA id 20220511121439epcas5p493bf4b94c89c8a63fdc0586c89cea8df~uC-malgwA0360503605epcas5p4H; Wed, 11 May 2022 12:14:39 +0000 (GMT) Received: from epsmgms1p2.samsung.com (unknown [182.195.42.42]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20220511121439epsmtrp232ded29eef6efdabdb915cd61665d55c~uC-mZvp9w1138811388epsmtrp2L; Wed, 11 May 2022 12:14:39 +0000 (GMT) X-AuditID: b6c32a4b-1fdff70000002622-4b-627c816cc608 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p2.samsung.com (Symantec Messaging Gateway) with SMTP id 7D.09.08924.FA8AB726; Wed, 11 May 2022 21:14:39 +0900 (KST) Received: from Jaguar.sa.corp.samsungelectronics.net (unknown [107.108.73.139]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220511121438epsmtip29e536aedf6377692454be9516421f599~uC-k4pH6S0609306093epsmtip2r; Wed, 11 May 2022 12:14:38 +0000 (GMT) From: Ajay Kumar To: linux-arm-kernel@lists.infradead.org, iommu@lists.linux-foundation.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: alim.akhtar@samsung.com, pankaj.dubey@samsung.com, ajaykumar.rs1989@gmail.com, Marek Szyprowski , Ajay Kumar Subject: [PATCH V2 4/6] iommu: dma-iommu: refactor iommu_dma_alloc_iova() Date: Wed, 11 May 2022 17:45:42 +0530 Message-Id: <20220511121544.5998-5-ajaykumar.rs@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrJKsWRmVeSWpSXmKPExsWy7bCmpm5uY02Swe1DTBZfT/xmszjw/iCL xYN529gsFuy3tuicvYHdYtPja6wWa4/cZbdYtPULu8XBD09YLVrumDpweTw5OI/JY828NYwe O2fdZffYtKqTzWPzknqPyTeWM3r0bVnFGMAelW2TkZqYklqkkJqXnJ+SmZduq+QdHO8cb2pm YKhraGlhrqSQl5ibaqvk4hOg65aZA3SdkkJZYk4pUCggsbhYSd/Opii/tCRVISO/uMRWKbUg JafApECvODG3uDQvXS8vtcTK0MDAyBSoMCE741XvJqaCM2oVvdM+sDYwdit0MXJySAiYSJzd s4Oli5GLQ0hgN6PE4ke/2CCcT4wSzxadZodwPjNKTN7fyAjTsql1CStEYhejxJQNW5ggnBYm iRsHrjOBVLEJaEtsm36TBcQWEWhhlJg7zR6kiFlgJaPEklsd7CAJYQFPiXsN38CKWARUJZp2 fWQDsXkFbCT2bXjHDrFOXmL1hgPMIDangK3EpB1/GUEGSQh8ZJdY2/qdBaLIRaJ/+z4oW1ji 1fEtUM1SEp/f7WWDsKslzt3azwbR3MEo0fFwHVSRvcSBK3OAmjmAztOUWL9LHyIsKzH11Dqw b5gF+CR6fz9hgojzSuyYB2JzANlqEltX+EGEZSTOHLwCVeIhcWnlPGioTGCUmNhzk3kCo9ws hA0LGBlXMUqmFhTnpqcWmxYY56WWw+MtOT93EyM4DWp572B89OCD3iFGJg7GQ4wSHMxKIrz7 +yqShHhTEiurUovy44tKc1KLDzGaAgNwIrOUaHI+MBHnlcQbmlgamJiZmZlYGpsZKonznkrf kCgkkJ5YkpqdmlqQWgTTx8TBKdXA1P8gNaa+705km4x9dr97wD21w5VxxltW6Hb1zHZsu9sr VXTYbodcU0zEop71e941PGH8vvj79DP/3BoLpATy5n9+5PP8wXHTWzUv1l3i2nxt/2kdkaav aR+37ZQt6tijWjJJ6v0MK411dfUhucVpE14ejFV+daJloXYWh8sinZCtZ1uiZPk+fEyduu1V qXDFuSNqhbY/uo2nzMhr/f394vOjZc5h12dfCo8zPu4st2XNsp9bHhn1Oq405p22NeXZUpMZ Bn+fuQgt6n90n+9TGONfy7Ja/YQ/v7afn8BhIcL2SlXttN/TBs0L/xiv79KU7PYyfvbCx+pP uSJfhLPISzdukWcz5/iufPFrzTGBmUosxRmJhlrMRcWJAFLlqqkMBAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrPLMWRmVeSWpSXmKPExsWy7bCSvO76FdVJBj/PGFt8PfGbzeLA+4Ms Fg/mbWOzWLDf2qJz9gZ2i02Pr7FarD1yl91i0dYv7BYHPzxhtWi5Y+rA5fHk4DwmjzXz1jB6 7Jx1l91j06pONo/NS+o9Jt9YzujRt2UVYwB7FJdNSmpOZllqkb5dAlfGq95NTAVn1Cp6p31g bWDsVuhi5OSQEDCR2NS6hBXEFhLYwSjRu0UMIi4j8XzHUxYIW1hi5b/n7F2MXEA1TUwSHU3/ GUESbALaEtum32QBSYgIdDFKXL26lxXEYRZYyyjxqnEJWJWwgKfEvYZvYKNYBFQlmnZ9ZAOx eQVsJPZteMcOsUJeYvWGA8wgNqeArcSkHX8ZIU6ykZjz+SjzBEa+BYwMqxglUwuKc9Nziw0L jPJSy/WKE3OLS/PS9ZLzczcxgsNUS2sH455VH/QOMTJxMB5ilOBgVhLh3d9XkSTEm5JYWZVa lB9fVJqTWnyIUZqDRUmc90LXyXghgfTEktTs1NSC1CKYLBMHp1QDU75Ema9ZR8HUPeJWt8z+ zSh/tnvyJQtX2S6HF9buPjw+8zuW//L186+OWzzhxuVXHt7GSX0p/9k0lvBOD06oudvZtGN1 s9s+1fm3YuLE2d9fX5WhvujWQhejPwUdx9rWtVRx2K2+9dHeuDE2zmtVskXrLRGfmTtL8uqe bA+ZOf9U+0xrOSeTe6vvbrz70uqW++cnjzbWrNlcM1Fhk8e2lw13iqaYfT1+xilJ1M+zfWHY hCVTPR/fvTY52HmVVeP3PeynI6Y/2CzXrTKnb2rpyoLzXYdbTjY/+f517STXlsKpjJlixlbz k39rxE35K6H98dF51zsPZu291vmT87rtUeuLvZLpKx/aF57pDC7rm6DEUpyRaKjFXFScCAA6 g3LUwgIAAA== X-CMS-MailID: 20220511121439epcas5p493bf4b94c89c8a63fdc0586c89cea8df X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220511121439epcas5p493bf4b94c89c8a63fdc0586c89cea8df References: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220511_203935_195205_3D558CF3 X-CRM114-Status: GOOD ( 20.48 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Marek Szyprowski Change the parameters passed to iommu_dma_alloc_iova(): the dma_limit can be easily extracted from the parameters of the passed struct device, so replace it with a flags parameter, which can later hold more information about the way the IOVA allocator should do it job. While touching the parameter list, move struct device to the second position to better match the convention of the DMA-mapping related functions. Signed-off-by: Marek Szyprowski Signed-off-by: Ajay Kumar --- drivers/iommu/dma-iommu.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 16218d6a0703..cb235b40303c 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -600,12 +600,16 @@ static int dma_info_to_prot(enum dma_data_direction dir, bool coherent, } } +#define DMA_ALLOC_IOVA_COHERENT BIT(0) + static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain, - size_t size, u64 dma_limit, struct device *dev) + struct device *dev, size_t size, unsigned int flags) { struct iommu_dma_cookie *cookie = domain->iova_cookie; struct iova_domain *iovad = &cookie->iovad; unsigned long shift, iova_len, iova = IOVA_BAD_ADDR; + u64 dma_limit = (flags & DMA_ALLOC_IOVA_COHERENT) ? + dev->coherent_dma_mask : dma_get_mask(dev); if (cookie->type == IOMMU_DMA_MSI_COOKIE) { cookie->msi_iova += size; @@ -675,7 +679,7 @@ static void __iommu_dma_unmap(struct device *dev, dma_addr_t dma_addr, } static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys, - size_t size, int prot, u64 dma_mask) + size_t size, int prot, unsigned int flags) { struct iommu_domain *domain = iommu_get_dma_domain(dev); struct iommu_dma_cookie *cookie = domain->iova_cookie; @@ -689,7 +693,7 @@ static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys, size = iova_align(iovad, size + iova_off); - iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev); + iova = iommu_dma_alloc_iova(domain, dev, size, flags); if (iova == DMA_MAPPING_ERROR) return DMA_MAPPING_ERROR; @@ -800,7 +804,7 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev, return NULL; size = iova_align(iovad, size); - iova = iommu_dma_alloc_iova(domain, size, dev->coherent_dma_mask, dev); + iova = iommu_dma_alloc_iova(domain, dev, size, DMA_ALLOC_IOVA_COHERENT); if (iova == DMA_MAPPING_ERROR) goto out_free_pages; @@ -963,7 +967,7 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, struct iommu_domain *domain = iommu_get_dma_domain(dev); struct iommu_dma_cookie *cookie = domain->iova_cookie; struct iova_domain *iovad = &cookie->iovad; - dma_addr_t iova, dma_mask = dma_get_mask(dev); + dma_addr_t iova; /* * If both the physical buffer start address and size are @@ -1001,7 +1005,7 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, if (!coherent && !(attrs & DMA_ATTR_SKIP_CPU_SYNC)) arch_sync_dma_for_device(phys, size, dir); - iova = __iommu_dma_map(dev, phys, size, prot, dma_mask); + iova = __iommu_dma_map(dev, phys, size, prot, 0); if (iova == DMA_MAPPING_ERROR && is_swiotlb_buffer(dev, phys)) swiotlb_tbl_unmap_single(dev, phys, size, dir, attrs); return iova; @@ -1205,7 +1209,7 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, prev = s; } - iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev); + iova = iommu_dma_alloc_iova(domain, dev, iova_len, 0); if (iova == DMA_MAPPING_ERROR) { ret = -ENOMEM; goto out_restore_sg; @@ -1264,8 +1268,7 @@ static dma_addr_t iommu_dma_map_resource(struct device *dev, phys_addr_t phys, size_t size, enum dma_data_direction dir, unsigned long attrs) { return __iommu_dma_map(dev, phys, size, - dma_info_to_prot(dir, false, attrs) | IOMMU_MMIO, - dma_get_mask(dev)); + dma_info_to_prot(dir, false, attrs) | IOMMU_MMIO, 0); } static void iommu_dma_unmap_resource(struct device *dev, dma_addr_t handle, @@ -1375,7 +1378,7 @@ static void *iommu_dma_alloc(struct device *dev, size_t size, return NULL; *handle = __iommu_dma_map(dev, page_to_phys(page), size, ioprot, - dev->coherent_dma_mask); + DMA_ALLOC_IOVA_COHERENT); if (*handle == DMA_MAPPING_ERROR) { __iommu_dma_free(dev, size, cpu_addr); return NULL; @@ -1517,7 +1520,7 @@ static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev, if (!msi_page) return NULL; - iova = iommu_dma_alloc_iova(domain, size, dma_get_mask(dev), dev); + iova = iommu_dma_alloc_iova(domain, dev, size, 0); if (iova == DMA_MAPPING_ERROR) goto out_free_page; From patchwork Wed May 11 12:15:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajay Kumar X-Patchwork-Id: 12846977 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6A981C433FE for ; Thu, 12 May 2022 03:41:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=SJ1u1mWqu/l50vNNAFmYJAx9CpjqSU4HuyBjDswgtRE=; b=1tcq4NjO1tbnw/ /VUoiVz4RAulTCH3QkXZuWrfAxGmBOx0FjaNN/JR29lmkO4lrqGZvHqlrkBHD6i1fAGRUaEEyUECw g/2j+BP8A0BFm3d/Lb/afXb/nVU5+3HkkPuEdVSyQzHTyuF/KLPs99Qu77lwluLknQYKiYvjsGaYq Bm/OdUuysIIpMeE7de9/PW7HHHRdMh8r33Hzj4QCQ2GiQ619/6u6ObWEa1ZPVKlohD3cBpNqtcQiG fHcBPmBH2xl/zJ8P3dcFAbFmuLiCS8qncJX+wseXMX3JFZ1xsX6DhKi7HtIxdoEZdM0rcymAOGma6 pYr0NF56wxOYXr/Th1kQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozgY-009iGl-5L; Thu, 12 May 2022 03:40:18 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozfv-009hzL-0J for linux-arm-kernel@lists.infradead.org; Thu, 12 May 2022 03:39:41 +0000 Received: from epcas5p3.samsung.com (unknown [182.195.41.41]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20220512033936epoutp028c9249f035ab9d6f0c0b4f6b48bcce88~uPnLzPY-T0066800668epoutp02P for ; Thu, 12 May 2022 03:39:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20220512033936epoutp028c9249f035ab9d6f0c0b4f6b48bcce88~uPnLzPY-T0066800668epoutp02P DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1652326776; bh=WjTsAdrWY0dkWNLPOOO99vSBJV7TfrewI9JGJplTWM4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MSB0hfbwdDDkJNT4NyP+Anc3OSZNztr65dmlwqM1njYmeUFUKDMR07MEZRCgamT/r rvwEwrQAEWutH98CBwwhyfgI2ZFlZEnYbw5cZfrSZ2/rxaVfJ/jhayrDZKCgEnq3l4 6xINGO25FPFaWnplJ96keo0G9yk190zfr5OZ9LbA= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas5p1.samsung.com (KnoxPortal) with ESMTP id 20220512033936epcas5p105cccb9f2038d669a9a6b500bc4d051a~uPnLU3npb0859208592epcas5p1n; Thu, 12 May 2022 03:39:36 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.181]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4KzHZr1mLvz4x9Pp; Thu, 12 May 2022 03:39:32 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id B3.B6.09762.2718C726; Thu, 12 May 2022 12:39:30 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20220511121442epcas5p26a997a19e8cc1de8eb23123500fb24fb~uC-pOfXzZ2113521135epcas5p2W; Wed, 11 May 2022 12:14:42 +0000 (GMT) Received: from epsmgms1p2.samsung.com (unknown [182.195.42.42]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20220511121442epsmtrp26c0f0b618540a4848d536252f9dfa2c0~uC-pMwltY1138811388epsmtrp2N; Wed, 11 May 2022 12:14:42 +0000 (GMT) X-AuditID: b6c32a4b-1fdff70000002622-59-627c81728975 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p2.samsung.com (Symantec Messaging Gateway) with SMTP id 5E.09.08924.2B8AB726; Wed, 11 May 2022 21:14:42 +0900 (KST) Received: from Jaguar.sa.corp.samsungelectronics.net (unknown [107.108.73.139]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220511121441epsmtip2107e93ffb66f1250543c55022b8874ac~uC-npuxsZ0495604956epsmtip2x; Wed, 11 May 2022 12:14:41 +0000 (GMT) From: Ajay Kumar To: linux-arm-kernel@lists.infradead.org, iommu@lists.linux-foundation.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: alim.akhtar@samsung.com, pankaj.dubey@samsung.com, ajaykumar.rs1989@gmail.com, Marek Szyprowski , Ajay Kumar Subject: [PATCH V2 5/6] iommu: dma-iommu: add support for DMA_ATTR_LOW_ADDRESS Date: Wed, 11 May 2022 17:45:43 +0530 Message-Id: <20220511121544.5998-6-ajaykumar.rs@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrOKsWRmVeSWpSXmKPExsWy7bCmpm5RY02SwddL/BZfT/xmszjw/iCL xYN529gsFuy3tuicvYHdYtPja6wWa4/cZbdYtPULu8XBD09YLVrumDpweTw5OI/JY828NYwe O2fdZffYtKqTzWPzknqPyTeWM3r0bVnFGMAelW2TkZqYklqkkJqXnJ+SmZduq+QdHO8cb2pm YKhraGlhrqSQl5ibaqvk4hOg65aZA3SdkkJZYk4pUCggsbhYSd/Opii/tCRVISO/uMRWKbUg JafApECvODG3uDQvXS8vtcTK0MDAyBSoMCE749a6eYwFa/Urep+/YWlgnKfexcjJISFgIrFw 1wXGLkYuDiGB3YwS0z/8ZoFwPjFKzJ92lxnC+QyUedvJAtOy78wTVhBbSGAXo8Sl1XoQRS1M Etfm32QCSbAJaEtsm34TrEFEoIVRYu40e5AiZoGVjBJLbnWwgySEBQIk7vQ8BrNZBFQl9n65 AjaVV8BG4v3Ty8wQ2+QlVm84AGZzCthKTNrxF+xYCYGP7BILp79m62LkAHJcJFomB0DUC0u8 Or6FHcKWkvj8bi8bhF0tce7WfjaI3g5GiY6H66CK7CUOXJnDAjKHWUBTYv0ufYiwrMTUU+vA nmEW4JPo/f2ECSLOK7FjHogNslZNYusKP4iwjMSZg1egSjwkVu45wQoJlAmMEts/TGGcwCg3 C2HDAkbGVYySqQXFuempxaYFxnmp5fBYS87P3cQIToFa3jsYHz34oHeIkYmD8RCjBAezkgjv /r6KJCHelMTKqtSi/Pii0pzU4kOMpsDwm8gsJZqcD0zCeSXxhiaWBiZmZmYmlsZmhkrivKfS NyQKCaQnlqRmp6YWpBbB9DFxcEo1MAn1qSQu3Jj85IaXdViC36JL09Jvz/ru8SHZ+Geb1rrn lVNU1nr/uHYuSXDpkUtNfhcqzwsUbFySd3Rdyizb6lOL5HdU9lkcqswW1fJQuFhSnbswOOVY g4k085OaFwu3F/OuY8jtTk3e9Pme8YaZrH1rOvU1/tWuaHq37NFFg4vnNeIzPsu3zjt35FoZ 37aDQje9LGbF9ynpnvjvzcLM8cAz8Yq8m22hVjuHfOvkzc01pqWB01ee0c6QaJldfS6978u5 B8/uO3LFfQixqk4JbJn7tc0xV8O65syJxqunPNor8hKm2z/bsP3Egz4Bdr24tpis4BkftE+v /rI+x5DhBN/dnmd39vCXls41qD73WYmlOCPRUIu5qDgRAFH+GiYKBAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrALMWRmVeSWpSXmKPExsWy7bCSvO6mFdVJBlc7DC2+nvjNZnHg/UEW iwfztrFZLNhvbdE5ewO7xabH11gt1h65y26xaOsXdouDH56wWrTcMXXg8nhycB6Tx5p5axg9 ds66y+6xaVUnm8fmJfUek28sZ/To27KKMYA9issmJTUnsyy1SN8ugSvj1rp5jAVr9St6n79h aWCcp97FyMkhIWAise/ME9YuRi4OIYEdjBKtL68wQSRkJJ7veMoCYQtLrPz3nB2iqIlJYnHv R3aQBJuAtsS26TdZQBIiAl2MElev7gUbxSywllHiVeMSRpAqYQE/icOn+8A6WARUJfZ+ucIK YvMK2Ei8f3qZGWKFvMTqDQfAbE4BW4lJO/6C9QoB1cz5fJR5AiPfAkaGVYySqQXFuem5xYYF Rnmp5XrFibnFpXnpesn5uZsYwYGqpbWDcc+qD3qHGJk4GA8xSnAwK4nw7u+rSBLiTUmsrEot yo8vKs1JLT7EKM3BoiTOe6HrZLyQQHpiSWp2ampBahFMlomDU6qBSSqavV9/am3J5V0y6sFc d6I8eOd5b9p47M/sF9+0FRyqbq6UteORk70nfX7p9z8eB2stYh7F3VDwN1x3Jqfer37FfOGr oRHR7BOucr7q5frP4/BlX8z+VY57Hj37G1emuHXO+90S/TcOBUx12R8TJXrnoNq/2anXN+/m ktpvueWz9ZIVRg9vlteYyWcJahUGmxXemyAhv6bdcsnE7v0/+k/P/pq9xvzLhZD+S0nXilKv n3M3uvLM+9qJT3+1Ml9fsOGzOJyhl//hteCGj+FPW+YFLF5wZavM2vBJG6Ye7z8n7Ft1+1f/ rtoethdmv0Q8SwpCiwOnPVCo+uTw0O+Wa9RX8craqAshee9+yCQvylViKc5INNRiLipOBACM ISiVwwIAAA== X-CMS-MailID: 20220511121442epcas5p26a997a19e8cc1de8eb23123500fb24fb X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220511121442epcas5p26a997a19e8cc1de8eb23123500fb24fb References: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220511_203939_500668_1F8FB52A X-CRM114-Status: GOOD ( 22.79 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Marek Szyprowski Implement support for the DMA_ATTR_LOW_ADDRESS DMA attribute. If it has been set, call alloc_iova_first_fit() instead of the alloc_iova_fast() to allocate the new IOVA from the beginning of the address space. Signed-off-by: Marek Szyprowski Signed-off-by: Ajay Kumar --- drivers/iommu/dma-iommu.c | 50 +++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index cb235b40303c..553c5b863e19 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -601,6 +601,18 @@ static int dma_info_to_prot(enum dma_data_direction dir, bool coherent, } #define DMA_ALLOC_IOVA_COHERENT BIT(0) +#define DMA_ALLOC_IOVA_FIRST_FIT BIT(1) + +static unsigned int dma_attrs_to_alloc_flags(unsigned long attrs, bool coherent) +{ + unsigned int flags = 0; + + if (coherent) + flags |= DMA_ALLOC_IOVA_COHERENT; + if (attrs & DMA_ATTR_LOW_ADDRESS) + flags |= DMA_ALLOC_IOVA_FIRST_FIT; + return flags; +} static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain, struct device *dev, size_t size, unsigned int flags) @@ -625,13 +637,23 @@ static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain, dma_limit = min(dma_limit, (u64)domain->geometry.aperture_end); /* Try to get PCI devices a SAC address */ - if (dma_limit > DMA_BIT_MASK(32) && !iommu_dma_forcedac && dev_is_pci(dev)) - iova = alloc_iova_fast(iovad, iova_len, - DMA_BIT_MASK(32) >> shift, false); + if (dma_limit > DMA_BIT_MASK(32) && !iommu_dma_forcedac && dev_is_pci(dev)) { + if (unlikely(flags & DMA_ALLOC_IOVA_FIRST_FIT)) + iova = alloc_iova_first_fit(iovad, iova_len, + DMA_BIT_MASK(32) >> shift); + else + iova = alloc_iova_fast(iovad, iova_len, + DMA_BIT_MASK(32) >> shift, false); + } - if (iova == IOVA_BAD_ADDR) - iova = alloc_iova_fast(iovad, iova_len, dma_limit >> shift, - true); + if (iova == IOVA_BAD_ADDR) { + if (unlikely(flags & DMA_ALLOC_IOVA_FIRST_FIT)) + iova = alloc_iova_first_fit(iovad, iova_len, + dma_limit >> shift); + else + iova = alloc_iova_fast(iovad, iova_len, + dma_limit >> shift, true); + } if (iova != IOVA_BAD_ADDR) return (dma_addr_t)iova << shift; @@ -779,6 +801,7 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev, struct iova_domain *iovad = &cookie->iovad; bool coherent = dev_is_dma_coherent(dev); int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs); + unsigned int flags = dma_attrs_to_alloc_flags(attrs, true); unsigned int count, min_size, alloc_sizes = domain->pgsize_bitmap; struct page **pages; dma_addr_t iova; @@ -804,7 +827,7 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev, return NULL; size = iova_align(iovad, size); - iova = iommu_dma_alloc_iova(domain, dev, size, DMA_ALLOC_IOVA_COHERENT); + iova = iommu_dma_alloc_iova(domain, dev, size, flags); if (iova == DMA_MAPPING_ERROR) goto out_free_pages; @@ -964,6 +987,7 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, phys_addr_t phys = page_to_phys(page) + offset; bool coherent = dev_is_dma_coherent(dev); int prot = dma_info_to_prot(dir, coherent, attrs); + unsigned int flags = dma_attrs_to_alloc_flags(attrs, false); struct iommu_domain *domain = iommu_get_dma_domain(dev); struct iommu_dma_cookie *cookie = domain->iova_cookie; struct iova_domain *iovad = &cookie->iovad; @@ -1005,7 +1029,7 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, if (!coherent && !(attrs & DMA_ATTR_SKIP_CPU_SYNC)) arch_sync_dma_for_device(phys, size, dir); - iova = __iommu_dma_map(dev, phys, size, prot, 0); + iova = __iommu_dma_map(dev, phys, size, prot, flags); if (iova == DMA_MAPPING_ERROR && is_swiotlb_buffer(dev, phys)) swiotlb_tbl_unmap_single(dev, phys, size, dir, attrs); return iova; @@ -1152,6 +1176,7 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, struct iova_domain *iovad = &cookie->iovad; struct scatterlist *s, *prev = NULL; int prot = dma_info_to_prot(dir, dev_is_dma_coherent(dev), attrs); + unsigned int flags = dma_attrs_to_alloc_flags(attrs, false); dma_addr_t iova; size_t iova_len = 0; unsigned long mask = dma_get_seg_boundary(dev); @@ -1209,7 +1234,7 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, prev = s; } - iova = iommu_dma_alloc_iova(domain, dev, iova_len, 0); + iova = iommu_dma_alloc_iova(domain, dev, iova_len, flags); if (iova == DMA_MAPPING_ERROR) { ret = -ENOMEM; goto out_restore_sg; @@ -1268,7 +1293,8 @@ static dma_addr_t iommu_dma_map_resource(struct device *dev, phys_addr_t phys, size_t size, enum dma_data_direction dir, unsigned long attrs) { return __iommu_dma_map(dev, phys, size, - dma_info_to_prot(dir, false, attrs) | IOMMU_MMIO, 0); + dma_info_to_prot(dir, false, attrs) | IOMMU_MMIO, + dma_attrs_to_alloc_flags(attrs, false)); } static void iommu_dma_unmap_resource(struct device *dev, dma_addr_t handle, @@ -1357,6 +1383,7 @@ static void *iommu_dma_alloc(struct device *dev, size_t size, { bool coherent = dev_is_dma_coherent(dev); int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs); + unsigned int flags = dma_attrs_to_alloc_flags(attrs, true); struct page *page = NULL; void *cpu_addr; @@ -1377,8 +1404,7 @@ static void *iommu_dma_alloc(struct device *dev, size_t size, if (!cpu_addr) return NULL; - *handle = __iommu_dma_map(dev, page_to_phys(page), size, ioprot, - DMA_ALLOC_IOVA_COHERENT); + *handle = __iommu_dma_map(dev, page_to_phys(page), size, ioprot, flags); if (*handle == DMA_MAPPING_ERROR) { __iommu_dma_free(dev, size, cpu_addr); return NULL; From patchwork Wed May 11 12:15:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajay Kumar X-Patchwork-Id: 12846978 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CA26CC433F5 for ; Thu, 12 May 2022 03:41:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=NTKGGQcj6W5qM/6Xj1W1hWvIiWPYLpRdu1XH4eEhY9M=; b=Q2A8yrek1ZvSPa m7QL24nguS5eJgqblzP6N+c6xDRoTp+JXeXPV4MDMg1Hzvm0u3NkSg++Fo03q+N0p+wV067VCOn7A D8CvZnP0CirQx0Vl+um59zYNnCucy9MeuWZKzqCwQLUvpR/lG0JDtBMm61kxxrcwcgAUOlCaeAfGz VYdVfS5nnhiMNBG8JNNE58ZquFTr7k1jN/G/STCA+zxHIXIGHHD7qZTKtVjARBSuU5bWJkvES7RLA m2B861uh1fVV5oLIi9VGhOOECyBEeN2o155JAjuKZEpo2UlATHf1mG6pozep6+RjTkTg/VmRSWTkt T6sWWo4/jOMNw1G7TSbQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozgx-009iTK-Om; Thu, 12 May 2022 03:40:44 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nozg1-009i1W-AP for linux-arm-kernel@lists.infradead.org; Thu, 12 May 2022 03:39:47 +0000 Received: from epcas5p2.samsung.com (unknown [182.195.41.40]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20220512033943epoutp02967316131fc1784fbae9cd5c61e8942d~uPnR0MPbQ3248032480epoutp02i for ; Thu, 12 May 2022 03:39:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20220512033943epoutp02967316131fc1784fbae9cd5c61e8942d~uPnR0MPbQ3248032480epoutp02i DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1652326783; bh=1yMoSleOG1G6F/u1i0Yl7I9fqLlbF/BiUVFK6eqgol4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ty5JNQf3OFz8NYI+92NMZMCUUpQNe3zFnarDvlMM8aJ+zDaJ9KL+pb8iAwFxsT4px A9m5O/r8QDR9d9+31ZUQAkFyj3oRxFvrPILqxdRCBRNOUgebcwJSMRaMDJMVQbhxy5 Q4f412KEPEml5QIVcN703/bIh/bEHUbccm94z7SQ= Received: from epsnrtp1.localdomain (unknown [182.195.42.162]) by epcas5p3.samsung.com (KnoxPortal) with ESMTP id 20220512033942epcas5p39e35d5f10a61b7e0a1541e4a983d5ca3~uPnRe6OFM2371723717epcas5p3S; Thu, 12 May 2022 03:39:42 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.183]) by epsnrtp1.localdomain (Postfix) with ESMTP id 4KzHZx2QWnz4x9Q3; Thu, 12 May 2022 03:39:37 +0000 (GMT) Received: from epcas5p1.samsung.com ( [182.195.41.39]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id E9.B6.09762.5718C726; Thu, 12 May 2022 12:39:33 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p3.samsung.com (KnoxPortal) with ESMTPA id 20220511121445epcas5p377ef245c4f5a0bf282245877d2b922c8~uC-r0UHa_2165521655epcas5p3R; Wed, 11 May 2022 12:14:45 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20220511121445epsmtrp2db83a2613791bdcbb633b8ee7a2844fd~uC-rzf3e51138811388epsmtrp2Q; Wed, 11 May 2022 12:14:45 +0000 (GMT) X-AuditID: b6c32a4b-1fdff70000002622-64-627c8175874b Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 7B.0F.11276.5B8AB726; Wed, 11 May 2022 21:14:45 +0900 (KST) Received: from Jaguar.sa.corp.samsungelectronics.net (unknown [107.108.73.139]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220511121444epsmtip2a7072acf22ec1a1971a8f32a89c86520~uC-qU4RTg0609306093epsmtip2s; Wed, 11 May 2022 12:14:44 +0000 (GMT) From: Ajay Kumar To: linux-arm-kernel@lists.infradead.org, iommu@lists.linux-foundation.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: alim.akhtar@samsung.com, pankaj.dubey@samsung.com, ajaykumar.rs1989@gmail.com, Marek Szyprowski , Ajay Kumar Subject: [PATCH V2 6/6] media: platform: s5p-mfc: use DMA_ATTR_LOW_ADDRESS Date: Wed, 11 May 2022 17:45:44 +0530 Message-Id: <20220511121544.5998-7-ajaykumar.rs@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrOKsWRmVeSWpSXmKPExsWy7bCmum5pY02SwadLlhZfT/xmszjw/iCL xYN529gsFuy3tuicvYHdYtPja6wWa4/cZbdYtPULu8XBD09YLVrumDpweTw5OI/JY828NYwe O2fdZffYtKqTzWPzknqPyTeWM3r0bVnFGMAelW2TkZqYklqkkJqXnJ+SmZduq+QdHO8cb2pm YKhraGlhrqSQl5ibaqvk4hOg65aZA3SdkkJZYk4pUCggsbhYSd/Opii/tCRVISO/uMRWKbUg JafApECvODG3uDQvXS8vtcTK0MDAyBSoMCE7Y9mO/4wFF3grJly4ytLAeJi7i5GTQ0LARGJ3 wze2LkYuDiGB3YwSHUfPM0M4nxglvly4yAhSJSTwjVHi4W1NmI4v1xZCFe1llNh5cwMThNPC JNFw5gULSBWbgLbEtuk3wWwRgRZGibnT7EGKmAVWMkosudXB3sXIwSEs4CXxeCIbSA2LgKrE 5Ql3WUFsXgEbiQsP/7FDbJOXWL3hADOIzSlgKzFpx19GkDkSAh/ZJVaePsMCUeQi0bymnxnC FpZ4dXwLVLOUxOd3e9kg7GqJc7f2s0E0dwA9+nAdVJG9xIErc1hADmIW0JRYv0sfIiwrMfXU OiYQm1mAT6L39xMmiDivxI55IDYHkK0msXWFH0RYRuLMwStQJR4SX48shAbKBEaJT7NXsExg lJuFsGEBI+MqRsnUguLc9NRi0wLjvNRyeKwl5+duYgSnQC3vHYyPHnzQO8TIxMF4iFGCg1lJ hHd/X0WSEG9KYmVValF+fFFpTmrxIUZTYABOZJYSTc4HJuG8knhDE0sDEzMzMxNLYzNDJXHe U+kbEoUE0hNLUrNTUwtSi2D6mDg4pRqYNus2GexLn/W31bb8sRN7wuFXiossGn2TlsSzC3+9 s5jJR/+/qexRQZu+d9t04h5M/z6l5l3cPOlfetaxnouWLVh1Vi5huv3+t3azy0zuSTvF/J6s Jb9n0auTrVZeRxMv95pXqdc4vkipfvvuhK7LihcKa960z3LN4Pp641jfvimz379cURG5Y9Oj OLfZ7HPzk9RdVBt/lNj0pJjbHTh4LGiiidCMz0x//nPVFuX1rJ4kYLstpksi03mxAHNy8NO1 +g9rYnbuvrVzregFm+1T3Wy4UwN+/fnq7Wm0fdWZjKCcQs6n855fyP0y/WG/4Y0FXLk7bt4T exxgNf3om8KAhdWFPd6nHxyzvSTN95KhXImlOCPRUIu5qDgRAA6ypxAKBAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrPLMWRmVeSWpSXmKPExsWy7bCSvO7WFdVJBj07NSy+nvjNZnHg/UEW iwfztrFZLNhvbdE5ewO7xabH11gt1h65y26xaOsXdouDH56wWrTcMXXg8nhycB6Tx5p5axg9 ds66y+6xaVUnm8fmJfUek28sZ/To27KKMYA9issmJTUnsyy1SN8ugStj2Y7/jAUXeCsmXLjK 0sB4mLuLkZNDQsBE4su1hcxdjFwcQgK7GSWeLpnOCJGQkXi+4ykLhC0ssfLfc3aIoiYmiSV3 voEVsQloS2ybfpMFJCEi0MUocfXqXlYQh1lgLaPEq8YlQFUcHMICXhKPJ7KBNLAIqEpcnnCX FcTmFbCRuPDwHzvEBnmJ1RsOMIPYnAK2EpN2/AVbIARUM+fzUeYJjHwLGBlWMUqmFhTnpucW GxYY5qWW6xUn5haX5qXrJefnbmIEh6mW5g7G7as+6B1iZOJgPMQowcGsJMK7v68iSYg3JbGy KrUoP76oNCe1+BCjNAeLkjjvha6T8UIC6YklqdmpqQWpRTBZJg5OqQYmhTvZ//k4nu5gX7hj 0UkWk4pNe/f7/Xjz6/2KiJyLAmVBJa+/FZ6b1zrh6y3fMy43GpjKMpd2ayv0zrgR0LCHqbr2 zGwtr8lXxFm0Dgj3WE7Y7X6t/HnjnELnzuBTR52cL3xn2nD7RcfKTsu3fxhjFZfoiLzZKjz1 jFRT8y59QQ03Mz2futBnN72aVEN2KJ5pcbk1wTD7ieYrj1sfv1hqFjJx/dyR9NXl+pO3U9kP yxzQUrq7cOsU0YeLzXaE5N1jmj0/Ka1/1tSoR4nL7t8/GMAim/jxUlKN8Ik/C/7mzw2XadFy Sy/wW5+8vWWJ6uciaWctXfHV9eKaIlfsToWtLdkctjYnYE/q9LDV/rqXlViKMxINtZiLihMB khuMksICAAA= X-CMS-MailID: 20220511121445epcas5p377ef245c4f5a0bf282245877d2b922c8 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220511121445epcas5p377ef245c4f5a0bf282245877d2b922c8 References: <20220511121544.5998-1-ajaykumar.rs@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220511_203945_784213_A2CCA120 X-CRM114-Status: GOOD ( 18.52 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Marek Szyprowski S5P-MFC driver relied on the way the ARM DMA-IOMMU glue code worked - mainly it relied on the fact that the allocator used first-fit algorithm and the first allocated buffer were at 0x0 DMA/IOVA address. This is not true for the generic IOMMU-DMA glue code that will be used for ARM architecture soon, so limit the dma_mask to size of the DMA window the hardware can use and add the needed DMA attribute to force proper IOVA allocation of the firmware buffer. Signed-off-by: Marek Szyprowski Signed-off-by: Ajay Kumar --- drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c index 761341934925..15c9c2273561 100644 --- a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c +++ b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c @@ -1196,8 +1196,12 @@ static int s5p_mfc_configure_common_memory(struct s5p_mfc_dev *mfc_dev) if (!mfc_dev->mem_bitmap) return -ENOMEM; - mfc_dev->mem_virt = dma_alloc_coherent(dev, mem_size, - &mfc_dev->mem_base, GFP_KERNEL); + /* MFC v5 can access memory only via the 256M window */ + if (exynos_is_iommu_available(dev) && !IS_MFCV6_PLUS(mfc_dev)) + dma_set_mask_and_coherent(dev, SZ_256M - 1); + + mfc_dev->mem_virt = dma_alloc_attrs(dev, mem_size, &mfc_dev->mem_base, + GFP_KERNEL, DMA_ATTR_LOW_ADDRESS); if (!mfc_dev->mem_virt) { bitmap_free(mfc_dev->mem_bitmap); dev_err(dev, "failed to preallocate %ld MiB for the firmware and context buffers\n",