Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp4755916rdh; Wed, 29 Nov 2023 09:43:36 -0800 (PST) X-Google-Smtp-Source: AGHT+IHJ72AA2ezAUlvQO8neBsLCby8kFiSOex0zEdx3iSCei9LLEo5Vy5KQzXVNolCAJCjP5j53 X-Received: by 2002:a17:90b:1b01:b0:285:9d5f:b7c9 with SMTP id nu1-20020a17090b1b0100b002859d5fb7c9mr15690850pjb.23.1701279816480; Wed, 29 Nov 2023 09:43:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701279816; cv=none; d=google.com; s=arc-20160816; b=s5RGSACm5qyj6gbsHC0v0FxRQNHvjIYXz37HzOXJqm8TJeq9RD+jGo/s77ducNasde h/Xcf5sFYxy+R/5lRAN0VUa5CZevYsLowOOYQLjfH6xnPkWes8ZvVcbZRP/DvsOuudFy 4fJmhDxW1NNFuCb8rYbO+NAoyF+c5zj0gmFmUzr7yUJ8TCIN3VfXrC2gKZ7eBD2lOMV4 NDKQzsS5LPFzTquLLvITuI4VV9cBSxkqWNDROPSte80Y0+RZXQclm11fc5sV0oIwxBaD +3e3ifX/NCuLOnLCuLE5l0VxEFMGL8qGGWAttF+Uza+c7p/s847a6t+9sycy6SE9LKQQ Zhyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=EfE1LjH1X2An9yqC/SSPdV65hfajk6klqvm6Yf+qOyU=; fh=GNBXEYaBv/m3jVEMpTGTRjnFoUB0WOii+EMJk4vaWPQ=; b=KnZc/J+Qgw9kr5SMyZGMvtIMaOgzOhvKnZSReuDk2hEdsUFPFu40cIzxy/g6v9pp2f 8dLellXGS89UKhGjDcmtt6lgKdUODUHHor7UG2ORvnWulQpCSHSK96CiARB4FgFv6alg 0QPEmAGwTphQKkrLSlLyZKPcFQYwtuQh+A6ZTxwaiHNEavtOPpiAmMNkjRGFN9biRfd+ pzOxq2k7eEYG4o5Ol+01FIFP7jRQShH2KFGWbjFC/6PgO+m5n4cfmpHvytIV9AqTRVKp WfbWiYG973Zi5YsOcCMx69yQFOk1fRAw4H1JS6ZyYdCudLkSDpy4IHb1SqX0uVN1uufP PGXw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id v19-20020a17090a899300b00283a148d836si1741776pjn.27.2023.11.29.09.43.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 09:43:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 6023B802F1AD; Wed, 29 Nov 2023 09:43:35 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231273AbjK2RnX (ORCPT + 99 others); Wed, 29 Nov 2023 12:43:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231240AbjK2RnS (ORCPT ); Wed, 29 Nov 2023 12:43:18 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 2278D95; Wed, 29 Nov 2023 09:43:25 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E4C121474; Wed, 29 Nov 2023 09:44:11 -0800 (PST) Received: from e121345-lin.cambridge.arm.com (e121345-lin.cambridge.arm.com [10.1.196.40]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id DE0923F73F; Wed, 29 Nov 2023 09:43:20 -0800 (PST) From: Robin Murphy To: Joerg Roedel , Christoph Hellwig Cc: Vineet Gupta , Russell King , Catalin Marinas , Will Deacon , Huacai Chen , WANG Xuerui , Thomas Bogendoerfer , Paul Walmsley , Palmer Dabbelt , Albert Ou , Lorenzo Pieralisi , Hanjun Guo , Sudeep Holla , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Suravee Suthikulpanit , David Woodhouse , Lu Baolu , Niklas Schnelle , Matthew Rosato , Gerald Schaefer , Jean-Philippe Brucker , Rob Herring , Frank Rowand , Marek Szyprowski , Jason Gunthorpe , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-acpi@vger.kernel.org, iommu@lists.linux.dev, devicetree@vger.kernel.org Subject: [PATCH 2/7] OF: Simplify DMA range calculations Date: Wed, 29 Nov 2023 17:42:59 +0000 Message-Id: <73becf4a75f15662b2dda5fba7cfeacdf3d866f8.1701268753.git.robin.murphy@arm.com> X-Mailer: git-send-email 2.39.2.101.g768bb238c484.dirty In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 29 Nov 2023 09:43:35 -0800 (PST) Juggling start, end, and size values for a range is somewhat redundant and a little hard to follow. Consolidate down to just using inclusive start and end, which saves us worrying about size overflows for full 64-bit ranges (note that passing a potentially-overflowed value through to arch_setup_dma_ops() is benign for all current implementations, and this is working towards removing that anyway). Signed-off-by: Robin Murphy --- drivers/of/device.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/drivers/of/device.c b/drivers/of/device.c index 526a42cdf66e..51062a831970 100644 --- a/drivers/of/device.c +++ b/drivers/of/device.c @@ -97,7 +97,7 @@ int of_dma_configure_id(struct device *dev, struct device_node *np, const struct bus_dma_region *map = NULL; struct device_node *bus_np; u64 dma_start = 0; - u64 mask, end, size = 0; + u64 mask, end = 0; bool coherent; int ret; @@ -118,17 +118,15 @@ int of_dma_configure_id(struct device *dev, struct device_node *np, return ret == -ENODEV ? 0 : ret; } else { const struct bus_dma_region *r = map; - u64 dma_end = 0; /* Determine the overall bounds of all DMA regions */ for (dma_start = ~0; r->size; r++) { /* Take lower and upper limits */ if (r->dma_start < dma_start) dma_start = r->dma_start; - if (r->dma_start + r->size > dma_end) - dma_end = r->dma_start + r->size; + if (r->dma_start + r->size > end) + end = r->dma_start + r->size; } - size = dma_end - dma_start; } /* @@ -142,16 +140,15 @@ int of_dma_configure_id(struct device *dev, struct device_node *np, dev->dma_mask = &dev->coherent_dma_mask; } - if (!size && dev->coherent_dma_mask) - size = max(dev->coherent_dma_mask, dev->coherent_dma_mask + 1); - else if (!size) - size = 1ULL << 32; + if (!end && dev->coherent_dma_mask) + end = dev->coherent_dma_mask; + else if (!end) + end = (1ULL << 32) - 1; /* * Limit coherent and dma mask based on size and default mask * set by the driver. */ - end = dma_start + size - 1; mask = DMA_BIT_MASK(ilog2(end) + 1); dev->coherent_dma_mask &= mask; *dev->dma_mask &= mask; @@ -177,7 +174,7 @@ int of_dma_configure_id(struct device *dev, struct device_node *np, dev_dbg(dev, "device is%sbehind an iommu\n", iommu ? " " : " not "); - arch_setup_dma_ops(dev, dma_start, size, iommu, coherent); + arch_setup_dma_ops(dev, dma_start, end - dma_start + 1, iommu, coherent); if (!iommu) of_dma_set_restricted_buffer(dev, np); -- 2.39.2.101.g768bb238c484.dirty