From patchwork Mon Jun 20 11:02:16 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomasz Nowicki X-Patchwork-Id: 637942 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3rY7Mv2tsXz9t18 for ; Mon, 20 Jun 2016 21:06:35 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=semihalf-com.20150623.gappssmtp.com header.i=@semihalf-com.20150623.gappssmtp.com header.b=B9WraVA2; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752243AbcFTLFi (ORCPT ); Mon, 20 Jun 2016 07:05:38 -0400 Received: from mail-lf0-f45.google.com ([209.85.215.45]:36423 "EHLO mail-lf0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932431AbcFTLD4 (ORCPT ); Mon, 20 Jun 2016 07:03:56 -0400 Received: by mail-lf0-f45.google.com with SMTP id q132so35165916lfe.3 for ; Mon, 20 Jun 2016 04:03:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=iW0fEMs+vV8piusbfmKkf0+ZmiTjGjqBn1SyvdUsTkg=; b=B9WraVA2hH8LkbQJYvV0f23/EmdRLHnQiMvAiUi/vPsGcANQ19Wp/yszPz/wy04jbW JzJIxJPn5/dFl0D3QBkfdMM24wBfR09kCGO0qEwDcW3aK+OwL6GrPHCcLCkgbEZsENPS s5Hb/J86cT+/LfF7AjDQ+IoOpMcK2E8JLWBGxJ3vGGck3TJIQG742GBSyukqLkpaUdGc dksv9fuKDXUt3/Lj0F3PVEckHQUbdRtA0UVq0KEqD5SlmLmojOj5Z9mVla4uwzHJXKLe NcM8uqUk+uMr8Wa5r6qST7s3T1BHc8Ly/e6UyugHUEhKMngjsZO6P0rM4Jd35MJYKACK lfGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=iW0fEMs+vV8piusbfmKkf0+ZmiTjGjqBn1SyvdUsTkg=; b=NyAzYvo+Da9Y1tLGNE/TZHbVgQpS/nqE3ig+UFkFtg7EZFrg2BpowWrk+as5CS5Acp Dwzmh2LxcL9Ax05S7B8l8JTjmOj+GBxn8tyLCoMY2x8a1vCtZBjoo/3bl9TderuEfRLz sQk7W3ew4mZsBS97e0P6mSO0f4csxegJYP9+GA+SvBVbaeUPy2bLa+J200By2MYAt0T6 0PWDNR1koZPOL1rAft29lyzFe7DmVQ3jjD5Q92XPVD0UMxSJ/VkMJ2RNXFwTarpzT8Jq 1vcCTVd6fhE3Jwn8FjBgppN3DI79TYeyts2rpcxt/fi0gS7gjMse8PUHRyX/Z2fvxRl9 qWWA== X-Gm-Message-State: ALyK8tKjApQi+/nxfbvxzsFgxTsukdJNN6L2oaPUg+MTek40hT+hnYK4SN5iUm5sbWCfHA== X-Received: by 10.46.33.133 with SMTP id h5mr3552476lji.39.1466420629384; Mon, 20 Jun 2016 04:03:49 -0700 (PDT) Received: from tn-HP-4.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id e10sm44291lbr.36.2016.06.20.04.03.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 20 Jun 2016 04:03:48 -0700 (PDT) From: Tomasz Nowicki To: marc.zyngier@arm.com, tglx@linutronix.de, jason@lakedaemon.net, rjw@rjwysocki.net, bhelgaas@google.com, lorenzo.pieralisi@arm.com, robert.richter@caviumnetworks.com, shijie.huang@arm.com, Suravee.Suthikulpanit@amd.com, hanjun.guo@linaro.org Cc: al.stone@linaro.org, mw@semihalf.com, graeme.gregory@linaro.org, Catalin.Marinas@arm.com, will.deacon@arm.com, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ddaney.cavm@gmail.com, okaya@codeaurora.org, andrea.gallo@linaro.org, linux-pci@vger.kernel.org, Tomasz Nowicki Subject: [PATCH V7 3/8] PCI/MSI: Setup MSI domain on a per-device basis using IORT ACPI table Date: Mon, 20 Jun 2016 13:02:16 +0200 Message-Id: <1466420541-20101-4-git-send-email-tn@semihalf.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1466420541-20101-1-git-send-email-tn@semihalf.com> References: <1466420541-20101-1-git-send-email-tn@semihalf.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org It is possible to provide information about which MSI controller to use on a per-device basis for DT. This patch supply this with ACPI support. Currently, IORT is the only one ACPI table which can provide such mapping. In order to plug IORT into MSI infrastructure we are adding ACPI equivalents for finding PCI device domain and its RID translation (pci_msi_domain_get_msi_rid and pci_msi_domain_get_msi_rid calls). Signed-off-by: Tomasz Nowicki Acked-by: Marc Zyngier Reviewed-by: Hanjun Guo Acked-by: Bjorn Helgaas --- drivers/pci/msi.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index a080f44..1d45e81 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -1364,8 +1365,8 @@ u32 pci_msi_domain_get_msi_rid(struct irq_domain *domain, struct pci_dev *pdev) pci_for_each_dma_alias(pdev, get_msi_id_cb, &rid); of_node = irq_domain_get_of_node(domain); - if (of_node) - rid = of_msi_map_rid(&pdev->dev, of_node, rid); + rid = of_node ? of_msi_map_rid(&pdev->dev, of_node, rid) : + iort_msi_map_rid(&pdev->dev, rid); return rid; } @@ -1381,9 +1382,13 @@ u32 pci_msi_domain_get_msi_rid(struct irq_domain *domain, struct pci_dev *pdev) */ struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev) { + struct irq_domain *dom; u32 rid = 0; pci_for_each_dma_alias(pdev, get_msi_id_cb, &rid); - return of_msi_map_get_device_domain(&pdev->dev, rid); + dom = of_msi_map_get_device_domain(&pdev->dev, rid); + if (!dom) + dom = iort_get_device_domain(&pdev->dev, rid); + return dom; } #endif /* CONFIG_PCI_MSI_IRQ_DOMAIN */