Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp725621pxb; Tue, 2 Feb 2021 16:48:55 -0800 (PST) X-Google-Smtp-Source: ABdhPJzllaHnBSqv/a7N0eyQH9OA0REFk1+GlY7c4ElHdPW4rjy5z0bNt7oskFgwX3ff8PdZcCFA X-Received: by 2002:a17:906:5002:: with SMTP id s2mr629338ejj.16.1612313335409; Tue, 02 Feb 2021 16:48:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612313335; cv=none; d=google.com; s=arc-20160816; b=NpzOA+8rVuJRrxlKw8GGXyOYvAU/4iPH0NVY/qeFk+Xw5QHMs53jFfePfRnlYBbYgD 9Er1Dl4MnmSxp5wwYxaU3TauaB0+8Xqj5R4dPH76hoOOY/3KOWVhRvU0VAFjH3mx8CHi D3mcuDaNFj9NFgZuC84f3E93mnL3uzJZ2gRFSuzuywsrG8z4ZKk/V7L8WbFl/VUDQh27 Z0L6d2oysp6bdsQ8uuG1S9jd2QLsUwflsceu4UUQMiPm2W51Xn3ER2XXTPL6U799Aouy jkUn9M6eyO+1bvLFVbfTiI9G+fbzHbIMn1FOX4w5CgpsBJLO6gJ+DIUZi3TzC69X/ZHn K72A== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=xzZ38x3E75M0QC1jFLlAO7pwxNkDw6k35YxwN123IsU=; b=hEFCvSXchiqtKu1e/qLa7ZjlF+ouOmCw/HcydhyiUwPic499vGj19tdDxY/SYweUD+ p+sYrKaNP3EbbKm00PiWiEsMPGCSmb6/0L9qEdZ46tZ7t7zswj2Y50pc//8yrnL6b24k BTqHpAU7nOwqH91ymdfQ7Vd5YW/ltyXC8tzt+KzSf2qrZPl3/pZwDhQbbd9rqyDe1XCh b8IS7d5mrEO1PCSTxHxZy+fiGgAtF2cZjNnDo1ymC9kcpyJN2pZKJYPpultDHUCQ8ywW mtz9803BtYax/1/EauyJe31gwUcGGlu59NLW+o9bugVYEzEx7CtGLtE4dGvm/NZGtx05 Wh9A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Ss0HJKx6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id hb21si262091ejb.278.2021.02.02.16.48.31; Tue, 02 Feb 2021 16:48:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Ss0HJKx6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239869AbhBBTio (ORCPT + 99 others); Tue, 2 Feb 2021 14:38:44 -0500 Received: from mail.kernel.org ([198.145.29.99]:43136 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233345AbhBBNzM (ORCPT ); Tue, 2 Feb 2021 08:55:12 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6669B64FD9; Tue, 2 Feb 2021 13:44:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1612273488; bh=go4SPvgeIuHW/8Lu/BFVhDHVezjnaaH4IC5azLhxwIc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ss0HJKx6Kqr9oHCSYsNDm8f3fGSGctEQTFv44g9w6HQv0gFYl709Va6IzvGd5xv85 VxmFyAgMOpe50jMEOmA0l9nxBtp0DcQR7SbK+/CFjIVXd/bUhhAclxevZ+9Je4O/kn KjM8Ql4tqahuMBAnOPzgCy7BnB3c4BQJ/l9Id1cQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Moritz Fischer , Robin Murphy , Lorenzo Pieralisi , Catalin Marinas , Sasha Levin Subject: [PATCH 5.10 126/142] ACPI/IORT: Do not blindly trust DMA masks from firmware Date: Tue, 2 Feb 2021 14:38:09 +0100 Message-Id: <20210202133002.896592479@linuxfoundation.org> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210202132957.692094111@linuxfoundation.org> References: <20210202132957.692094111@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Moritz Fischer [ Upstream commit a1df829ead5877d4a1061e976a50e2e665a16f24 ] Address issue observed on real world system with suboptimal IORT table where DMA masks of PCI devices would get set to 0 as result. iort_dma_setup() would query the root complex'/named component IORT entry for a DMA mask, and use that over the one the device has been configured with earlier. Ideally we want to use the minimum mask of what the IORT contains for the root complex and what the device was configured with. Fixes: 5ac65e8c8941 ("ACPI/IORT: Support address size limit for root complexes") Signed-off-by: Moritz Fischer Reviewed-by: Robin Murphy Acked-by: Lorenzo Pieralisi Link: https://lore.kernel.org/r/20210122012419.95010-1-mdf@kernel.org Signed-off-by: Catalin Marinas Signed-off-by: Sasha Levin --- drivers/acpi/arm64/iort.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c index 770d84071a328..94f34109695c9 100644 --- a/drivers/acpi/arm64/iort.c +++ b/drivers/acpi/arm64/iort.c @@ -1107,6 +1107,11 @@ static int nc_dma_get_range(struct device *dev, u64 *size) ncomp = (struct acpi_iort_named_component *)node->node_data; + if (!ncomp->memory_address_limit) { + pr_warn(FW_BUG "Named component missing memory address limit\n"); + return -EINVAL; + } + *size = ncomp->memory_address_limit >= 64 ? U64_MAX : 1ULL<memory_address_limit; @@ -1126,6 +1131,11 @@ static int rc_dma_get_range(struct device *dev, u64 *size) rc = (struct acpi_iort_root_complex *)node->node_data; + if (!rc->memory_address_limit) { + pr_warn(FW_BUG "Root complex missing memory address limit\n"); + return -EINVAL; + } + *size = rc->memory_address_limit >= 64 ? U64_MAX : 1ULL<memory_address_limit; @@ -1173,8 +1183,8 @@ void iort_dma_setup(struct device *dev, u64 *dma_addr, u64 *dma_size) end = dmaaddr + size - 1; mask = DMA_BIT_MASK(ilog2(end) + 1); dev->bus_dma_limit = end; - dev->coherent_dma_mask = mask; - *dev->dma_mask = mask; + dev->coherent_dma_mask = min(dev->coherent_dma_mask, mask); + *dev->dma_mask = min(*dev->dma_mask, mask); } *dma_addr = dmaaddr; -- 2.27.0