Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp3523yba; Thu, 11 Apr 2019 20:16:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqzR7sxSRIBVbb/UFr3tmaJrC9rxzCn5XBdw62E8PMSvbic+wghce4CmNmm4SdGNNXZciyVM X-Received: by 2002:a17:902:7841:: with SMTP id e1mr53692116pln.303.1555039004859; Thu, 11 Apr 2019 20:16:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555039004; cv=none; d=google.com; s=arc-20160816; b=Tkh43OseHUkOeygmqEpvaH11NhTrYSMRgVemlHsWc4qtBaUifvlV3rUy2gLzY0qfHc 0rIWNN7C8A67zDVISTVjMr6HoKeRwojLQRmAEivJzklpWRgIHEPfDT4WGZU2Eg7zv/Ku LfZsTSsiwsTLWOUt2xjUH27qIDxOQelHEwWJGIthEhIux/TI7zo6sVKGs9TZDOwSiKq5 gX/PGzsoYqeFEMSbrt+N8RymLP0UGP79zPTYpSv2YtKQDzASfyjLJgw/OpDyiSNS++3c /1kIqNH4VMZg136nNpBz8Uh9AZZUcn1nTb9xWbCgvpaN6GRchwkVlDdr0XYJIMA+JlGq sBew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=lcdd/bPKb2XUUzHHJ4Ig8E0QGdqRPLhszQ1yDGy5ZoU=; b=N6MEm7/2L2r2xTFRKbJ/c5R3+Vwp2qfP4JX1w1X50O+eUvaM0P63afr7JLciH09Rv1 cTlDyVc2nQIdSxs/OXSEcbKdA+CvWs/v5SkENE7k5ymlLccDnQWZ5lVL9Xcbb7PjTJX9 uXwzItsApT3FZ409VYCUI8p04nVyHOxDbr4D5390Sm3Ui8SPBGS1FRvbOqCPKUmAYEZo U3IcK3crtlA+z+E9LvSEK2FV5GcXYzyYMQxJ57nYtHIPGboWLsJbwWOJPY2mAvno6wN3 8Kl22aCh89KN037JO51JqEj+q/2Y1Xpq+Yc5GBQC8X6dWOGNd8C4/1RNfa/f1ts9BUD7 2dQg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=J9hWhQyS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e14si36369698pfn.203.2019.04.11.20.16.28; Thu, 11 Apr 2019 20:16:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=J9hWhQyS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726890AbfDLDOG (ORCPT + 99 others); Thu, 11 Apr 2019 23:14:06 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:40988 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726730AbfDLDOG (ORCPT ); Thu, 11 Apr 2019 23:14:06 -0400 Received: by mail-ed1-f66.google.com with SMTP id g6so3057854edc.8 for ; Thu, 11 Apr 2019 20:14:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=lcdd/bPKb2XUUzHHJ4Ig8E0QGdqRPLhszQ1yDGy5ZoU=; b=J9hWhQySSKQQY/XopWADH/wdNBV0kNkG//jg+fm5ydk4AhhSp4gHwr1RUmnOT9S+KM QHb3rpEr99GzSx6C8Dpp35JjOjX+qGTA4QuIfW0QOgTuNkCplW3PyO0jEGB6hpN++Erv VyD/WxxOIeNgUM1EpxGp+vagG6TfquBJVcLyc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=lcdd/bPKb2XUUzHHJ4Ig8E0QGdqRPLhszQ1yDGy5ZoU=; b=S5LuvX+Sma6gpCLkcnbZj6mP8e17O2hRdlWWKP+BT2cK6jAAkhCp4KgbMA6F0rWSLW AQlYuxf8s/z8crBTuokoRz5QBNLgNSyaWrEfPA8+IZFzDCs4suJpxdIGECtNmTKtIlw8 caAF6pymH75evETXFRw+7YvnE9M6/ViWRJy3O/UzNbKLRTrXh7GPQO4m2edEght+ddES IKn3wUdXcBiP28S2F4x8KzckOH+IWf1G/qDM06wpW2DcvyFrC1U2GgQFhHTCQwCAih1h jhub4CSFdMm+KSyU6g24BDBUfwAf5deeGIZ4bvFl3jUtlUkU/AnHzdkRuEAguOLYYvzq aQWw== X-Gm-Message-State: APjAAAVy3SqkNTTcNg6KIFu5DogZHUhXuO6uW1e/JKH71SUan+km2E9n U7/oBeA2cHAQvecKbCGE1TofkQ== X-Received: by 2002:a17:906:d72:: with SMTP id s18mr18238050ejh.111.1555038844689; Thu, 11 Apr 2019 20:14:04 -0700 (PDT) Received: from mannams-OptiPlex-7010.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id c7sm11533352edt.70.2019.04.11.20.13.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 11 Apr 2019 20:14:04 -0700 (PDT) From: Srinath Mannam To: Bjorn Helgaas , Robin Murphy , Joerg Roedel , Lorenzo Pieralisi , poza@codeaurora.org, Ray Jui Cc: bcm-kernel-feedback-list@broadcom.com, linux-pci@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, Srinath Mannam Subject: [PATCH v4 2/3] iommu/dma: Reserve IOVA for PCIe inaccessible DMA address Date: Fri, 12 Apr 2019 08:43:34 +0530 Message-Id: <1555038815-31916-3-git-send-email-srinath.mannam@broadcom.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1555038815-31916-1-git-send-email-srinath.mannam@broadcom.com> References: <1555038815-31916-1-git-send-email-srinath.mannam@broadcom.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org dma_ranges field of PCI host bridge structure has resource entries in sorted order of address range given through dma-ranges DT property. This list is the accessible DMA address range. So that this resource list will be processed and reserve IOVA address to the inaccessible address holes in the list. This method is similar to PCI IO resources address ranges reserving in IOMMU for each EP connected to host bridge. Signed-off-by: Srinath Mannam Based-on-patch-by: Oza Pawandeep Reviewed-by: Oza Pawandeep --- drivers/iommu/dma-iommu.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index d19f3d6..fb42d7c 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -212,6 +212,7 @@ static void iova_reserve_pci_windows(struct pci_dev *dev, struct pci_host_bridge *bridge = pci_find_host_bridge(dev->bus); struct resource_entry *window; unsigned long lo, hi; + phys_addr_t start = 0, end; resource_list_for_each_entry(window, &bridge->windows) { if (resource_type(window->res) != IORESOURCE_MEM) @@ -221,6 +222,24 @@ static void iova_reserve_pci_windows(struct pci_dev *dev, hi = iova_pfn(iovad, window->res->end - window->offset); reserve_iova(iovad, lo, hi); } + + /* Get reserved DMA windows from host bridge */ + resource_list_for_each_entry(window, &bridge->dma_ranges) { + end = window->res->start - window->offset; +resv_iova: + if (end - start) { + lo = iova_pfn(iovad, start); + hi = iova_pfn(iovad, end); + reserve_iova(iovad, lo, hi); + } + start = window->res->end - window->offset + 1; + /* If window is last entry */ + if (window->node.next == &bridge->dma_ranges && + end != DMA_BIT_MASK(sizeof(dma_addr_t) * BITS_PER_BYTE)) { + end = DMA_BIT_MASK(sizeof(dma_addr_t) * BITS_PER_BYTE); + goto resv_iova; + } + } } static int iova_reserve_iommu_regions(struct device *dev, -- 2.7.4