From patchwork Fri Aug 2 06:03:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baruch Siach X-Patchwork-Id: 13751136 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 0524DC52D71 for ; Fri, 2 Aug 2024 06:06:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=9I9PRJK1eA/oZpcuetiypzDvBEF1ZsnK+kG9vlKQTi0=; b=xz0NmhscQoZezCWIDXeyZTNjx0 3q+Pi+whbaF4eh3IIkB4+1f3mmG1s//VNurQ5h/uhZsU+Uutv/IHQsln5gZ2m/iRy69KL0ceJnlei 7fG/kwBYvuD3B1UcYUW0P5WOIwyU++AeO6yyVxOXNtuAjcxk6novkUr54lhzVUyMuQQ2GYtR31Qsz e3DKEWt48OYvMZiRWKYbQCSXp1F/J2o4leSsE61lv92fzALH3AL/ID1CCgOcox6qwu75nPCyyzGFm JqVVxdll3ETdUDYye/XwR5GkYLCZzT8pOqXw4r1bN2VlCawcKFRdEKeDcxrr0ULxfEZOjQpxz419P M+Plwlkw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sZlQR-00000007lHc-0Zsf; Fri, 02 Aug 2024 06:06:03 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sZlOm-00000007krk-1id7 for linux-arm-kernel@bombadil.infradead.org; Fri, 02 Aug 2024 06:04:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version :References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=9I9PRJK1eA/oZpcuetiypzDvBEF1ZsnK+kG9vlKQTi0=; b=hAxRr/LYA9gIgtqBP1sN2vJuFi WQqsG6KnbbN8ToG71Tp2JOflLRWxOxrN5Kva8cmwzHSgJySdCKwsHg3gHaQ4etZyYNS6I1O8NTbjZ oA9Fy6U6rH+/bixi6CU7qQ0ajhxYWrw1HcpfZGIn6mlXIvn4ct6XZZlY4wxivHCZ/2Uuc8KVHNABU /B8ScOA6+H3YsztxOIu5sUywWfdUsKlPPTDf96WrZdKP+mk7WZY/8TRdHIIszjQZZDm0nYO+BIKtQ xYICEI4oaauPK6u5hY1VoVoDSoQZu8FKSWjpkL2DxM0R3sY/xQqc4o78VG00m3eNnsH/nRWuAdMU0 nnKR3lVQ==; Received: from guitar.tkos.co.il ([84.110.109.230] helo=mail.tkos.co.il) by desiato.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sZlOh-00000005dz2-2dNp for linux-arm-kernel@lists.infradead.org; Fri, 02 Aug 2024 06:04:19 +0000 Received: from tarshish.tkos.co.il (unknown [10.0.8.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.tkos.co.il (Postfix) with ESMTPS id 67FEC440781; Fri, 2 Aug 2024 09:02:40 +0300 (IDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tkos.co.il; s=default; t=1722578560; bh=pqfXeuMc5R7Cx8Hid5iZqoJG0UKfN0CUSBnJMj912kU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jxw4ewpcZKyrwwVVby3ENvaRKD5+q43frok6KvtiVJjixZ70wQjpzYYQffkA9WxRP 0KWBItUAW6BoNL+vOZvvP+zUvkqDQlkajNoc3Xvq+u2gqzkKn2DOCZdHZ2+0Qlpiox BmVJb1aL26HgwatlIySl0FDvsZY5YXheAqrbpgWf88dnLv5MNUvgy0EsrbMxlpnjrr sIS2yh6n1Q0E4Ogw/3emRiGR3GTpm4dd5i7z0i3yQ938EWaF5stOqKZAJqqesJRgmj eSSGZoylk2Hcn6v7gdRxTCFzoEzwtI6/SYs1no4jBvTetS1fuKkks6oEyL8I/WtSe3 CS0OKA8M4LbXQ== From: Baruch Siach To: Christoph Hellwig , Marek Szyprowski , Catalin Marinas , Will Deacon Cc: Baruch Siach , Robin Murphy , iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, =?utf-8?b?UGV0ciBUZXNhxZnDrWs=?= , Ramon Fried , Elad Nachman Subject: [PATCH v5 3/3] arm64: support DMA zone above 4GB Date: Fri, 2 Aug 2024 09:03:48 +0300 Message-ID: <517ef5af643bbc258b53c95b443ffe9678a95af3.1722578375.git.baruch@tkos.co.il> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240802_070416_441648_0DDBF0D8 X-CRM114-Status: GOOD ( 12.30 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Catalin Marinas Commit 791ab8b2e3db ("arm64: Ignore any DMA offsets in the max_zone_phys() calculation") made arm64 DMA/DMA32 zones span the entire RAM when RAM starts above 32-bits. This breaks hardware with DMA area that start above 32-bits. But the commit log says that "we haven't noticed any such hardware". It turns out that such hardware does exist. One such platform has RAM starting at 32GB with an internal bus that has the following DMA limits: #address-cells = <2>; #size-cells = <2>; dma-ranges = <0x00 0xc0000000 0x08 0x00000000 0x00 0x40000000>; That is, devices under this bus see 1GB of DMA range between 3GB-4GB in their address space. This range is mapped to CPU memory at 32GB-33GB. With current code DMA allocations for devices under this bus are not limited to DMA area, leading to run-time allocation failure. This commit reinstates DMA zone at the bottom of RAM. The result is DMA zone that properly reflects the hardware constraints as follows: [ 0.000000] Zone ranges: [ 0.000000] DMA [mem 0x0000000800000000-0x000000083fffffff] [ 0.000000] DMA32 empty [ 0.000000] Normal [mem 0x0000000840000000-0x0000000bffffffff] Signed-off-by: Catalin Marinas [baruch: split off the original patch] Signed-off-by: Baruch Siach --- arch/arm64/mm/init.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index c45e2152ca9e..bfb10969cbf0 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -114,20 +114,8 @@ static void __init arch_reserve_crashkernel(void) low_size, high); } -/* - * Return the maximum physical address for a zone given its limit. - * If DRAM starts above 32-bit, expand the zone to the maximum - * available memory, otherwise cap it at 32-bit. - */ static phys_addr_t __init max_zone_phys(phys_addr_t zone_limit) { - phys_addr_t phys_start = memblock_start_of_DRAM(); - - if (phys_start > U32_MAX) - zone_limit = PHYS_ADDR_MAX; - else if (phys_start > zone_limit) - zone_limit = U32_MAX; - return min(zone_limit, memblock_end_of_DRAM() - 1) + 1; }