Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp875056pxb; Wed, 1 Sep 2021 11:51:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzAra0WVhkAYUPn4Z0tiJDVPRS8CAb4HvUSEu/TDJdIcXwzNW2keM1sR+ndUUEWXYyTxVk1 X-Received: by 2002:a6b:8f94:: with SMTP id r142mr806443iod.183.1630522290947; Wed, 01 Sep 2021 11:51:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630522290; cv=none; d=google.com; s=arc-20160816; b=fClp9SYGTVcHkDZF1M8FULGrxtPTIi2x0K7Pfxk8RRrQ3N+oOf6kj/nrl4qryfnVZj i0bUXamZc1kUx7XxRMoJkSoNxwciPTrQvhhKRqPYI1TtSvezaIP2qB9HVmzd5FHWhFNI JuuooKwzS2zIgyzfNMZ3NDKtQkXvZ3xCJk06pcCR3qfRLwt19LbbjxbpMHuFL2OR32aV 6ZtD0DgPRkveaEA2JdhK4COBQQ8861aOYfzgYPTzKfIGP00/UEIM6etwfnAeEl1a/zq7 Lwkfkitt1O1yyM9+NDEQBW4n3UVf5lS+Pverx6vT+y1ZA4GwWoIpS+rQLTSwqj1V/ZkW ocsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=N0kJgB39TF92AM8sH+jUXr6LZhm6f8gE/DeZBCQVCMc=; b=gA0T1lxpIzHm9sH/7faboORDde3QjwbwId6uA0whq6fjzWiRU8TAPphhdqR1sxlcAX 8yNICNf2xg+axkxbTP3z2BgKQlASutU0dAslcUGmgk9Wh4vm660Nr1LobjJVm2I6pKox 0QWsi0/j6504vwTEXmSnjYdVGVzdnm9KNapkoOA86ltr8ggh8k17e36pxQbjbFJPBP1W 5JdmJuHtRWkgLgmk8sZcXSAi8HaiVKY5GwvK8Bgw4IwvqOVy5JLwpDGJDb/g9StbszW9 truih1qb9irnhTrrNeuxzQlMsgvpXZIislFdO8Xie0a7HGoQ1RKy1SqiE/7YitSSdJWD Y//g== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ay15si234716iob.92.2021.09.01.11.51.18; Wed, 01 Sep 2021 11:51:30 -0700 (PDT) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231616AbhIAJ7d (ORCPT + 99 others); Wed, 1 Sep 2021 05:59:33 -0400 Received: from foss.arm.com ([217.140.110.172]:35330 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229662AbhIAJ7c (ORCPT ); Wed, 1 Sep 2021 05:59:32 -0400 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 176E61042; Wed, 1 Sep 2021 02:58:36 -0700 (PDT) Received: from [10.57.15.112] (unknown [10.57.15.112]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2A5AC3F766; Wed, 1 Sep 2021 02:58:34 -0700 (PDT) Subject: Re: [PATCH v4] iommu/of: Fix pci_request_acs() before enumerating PCI devices To: Marek Szyprowski , Wang Xingang , robh@kernel.org, will@kernel.org, joro@8bytes.org, helgaas@kernel.org Cc: robh+dt@kernel.org, gregkh@linuxfoundation.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, xieyingtai@huawei.com, "linux-arm-kernel@lists.infradead.org" References: <1621566204-37456-1-git-send-email-wangxingang5@huawei.com> <01314d70-41e6-70f9-e496-84091948701a@samsung.com> From: Robin Murphy Message-ID: Date: Wed, 1 Sep 2021 10:58:26 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: <01314d70-41e6-70f9-e496-84091948701a@samsung.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2021-09-01 09:59, Marek Szyprowski wrote: > On 21.05.2021 05:03, Wang Xingang wrote: >> From: Xingang Wang >> >> When booting with devicetree, the pci_request_acs() is called after the >> enumeration and initialization of PCI devices, thus the ACS is not >> enabled. And ACS should be enabled when IOMMU is detected for the >> PCI host bridge, so add check for IOMMU before probe of PCI host and call >> pci_request_acs() to make sure ACS will be enabled when enumerating PCI >> devices. >> >> Fixes: 6bf6c24720d33 ("iommu/of: Request ACS from the PCI core when >> configuring IOMMU linkage") >> Signed-off-by: Xingang Wang > > This patch landed in linux-next as commit 57a4ab1584e6 ("iommu/of: Fix > pci_request_acs() before enumerating PCI devices"). Sadly it breaks PCI > operation on ARM Juno R1 board (arch/arm64/boot/dts/arm/juno-r1.dts). It > looks that the IOMMU controller is not probed for some reasons: > > # cat /sys/kernel/debug/devices_deferred > 2b600000.iommu That IOMMU belongs to the CoreSight debug subsystem and often gets stuck waiting for a power domain (especially if you have a mismatch of SCPI/SCMI expectations between the DT and SCP firmware). Unless you're trying to use CoreSight trace that shouldn't matter. The PCIe on Juno doesn't support ACS anyway, so I'm puzzled why this should make any difference :/ Robin. > Reverting this patch on top of current linux-next fixes this issue. If > you need more information to debug this issue, just let me know. > >> --- >> drivers/iommu/of_iommu.c | 1 - >> drivers/pci/of.c | 8 +++++++- >> 2 files changed, 7 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c >> index a9d2df001149..54a14da242cc 100644 >> --- a/drivers/iommu/of_iommu.c >> +++ b/drivers/iommu/of_iommu.c >> @@ -205,7 +205,6 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, >> .np = master_np, >> }; >> >> - pci_request_acs(); >> err = pci_for_each_dma_alias(to_pci_dev(dev), >> of_pci_iommu_init, &info); >> } else { >> diff --git a/drivers/pci/of.c b/drivers/pci/of.c >> index da5b414d585a..2313c3f848b0 100644 >> --- a/drivers/pci/of.c >> +++ b/drivers/pci/of.c >> @@ -581,9 +581,15 @@ static int pci_parse_request_of_pci_ranges(struct device *dev, >> >> int devm_of_pci_bridge_init(struct device *dev, struct pci_host_bridge *bridge) >> { >> - if (!dev->of_node) >> + struct device_node *node = dev->of_node; >> + >> + if (!node) >> return 0; >> >> + /* Detect IOMMU and make sure ACS will be enabled */ >> + if (of_property_read_bool(node, "iommu-map")) >> + pci_request_acs(); >> + >> bridge->swizzle_irq = pci_common_swizzle; >> bridge->map_irq = of_irq_parse_and_map_pci; >> > > Best regards >