From patchwork Tue Dec 8 20:19:01 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suravee Suthikulpanit X-Patchwork-Id: 7802171 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 75947BEEE1 for ; Tue, 8 Dec 2015 20:21:14 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7BB7C20462 for ; Tue, 8 Dec 2015 20:21:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 731EF20398 for ; Tue, 8 Dec 2015 20:21:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752593AbbLHUVL (ORCPT ); Tue, 8 Dec 2015 15:21:11 -0500 Received: from mail-by2on0091.outbound.protection.outlook.com ([207.46.100.91]:37835 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752494AbbLHUTX (ORCPT ); Tue, 8 Dec 2015 15:19:23 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Suravee.Suthikulpanit@amd.com; Received: from ssuthiku-fedora-lt.amd.com (165.204.77.1) by CY1PR12MB0443.namprd12.prod.outlook.com (10.163.91.21) with Microsoft SMTP Server (TLS) id 15.1.337.19; Tue, 8 Dec 2015 20:19:19 +0000 From: Suravee Suthikulpanit To: , , , CC: Lorenzo Pieralisi , Will Deacon , Catalin Marinas , , , , , , , , Suravee Suthikulpanit Subject: [PATCH v4 1/5] acpi: pci: Setup MSI domain for ACPI based pci devices Date: Tue, 8 Dec 2015 12:19:01 -0800 Message-ID: <1449605945-10707-2-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1449605945-10707-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1449605945-10707-1-git-send-email-Suravee.Suthikulpanit@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: BLUPR01CA061.prod.exchangelabs.com (25.160.23.51) To CY1PR12MB0443.namprd12.prod.outlook.com (25.163.91.21) X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0443; 2:URwMJCRvuQI9xnV+ogpH3HBQel6nj9WH7COmQ8M+m2qPkZjS4tfaQPvbApHQ5BF83FKrB8s6Jk9lyCWLyK1jnSPbYQSbKKIdhgi1CesmebKJ9tFuvjv+T+u8Pf/OSGcFDLGoYCNH9QM4C3gu7r0ZgA==; 3:SD/2IzKuZXFNN36Rj5O500PMh9FfTn9r5BmzVCYHCROiLXgxOTM+JevA+fbIZd2LRT9m7t7wuGvgUPeLxEF5I4nGzvmtel3zcQ4kP8M8AnqFKSXaaTTGf7guYkEngndH; 25:Oe0BvYjC5O8la+W9Hj4flXeam/Y/MesKDlW12TCAaFKQlwNAFquxHOIHnaRP+Ux0innU7xfCKoIPGWiONE6wFpWHSULshYfj4oPe2mjNf55VeqwN0cqP8zcNwv+FCRt7aRci60w/q09PAZ2vo7xi071MsMPDbwM/O3IKs0iNE4n+YA1GpeaUjvDB9osthVBc7n653k/V8f+mGvV1kZdu2SIVgWbeF6S966DDBn89kLcJEkaka4xVZ8eVcVYiLF+HDYDuTwZ53Szalxi+CnLejg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0443; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0443; 20:AD4IQ+VGjnC2Wd7N7XEEGkQRRGZVijrPdqGSBhRxZqMKbviLYDBfgupYOeLePMR6yKj9RhC7Rqqr2lICeleDWwKmUmltGC+LDnWWQLSe/Mc6ALTtw941bgLe4uAbQjLVlG1AN6gwmw43BPKjD8wtYgSPFqenOxx+dcOlBboM/gcif1KsvpYwQzimTCCMvVoDCNuAWZeg3o0rwex5A4qQ/3+jaf+BvkOy6TV9feDfGZVLKsVEIeHGZpQR9f0nf9c9GQ8xb+mvOSXrfNIgKVr19rZb1RiqFT/DNJG+kYR+lLOyvL36tKy3PFN+i8qURvEu1EsNk1LmOSnil+KwCHbMc+hRe8Fq0Cisq0hVWTQx7kPTZGGq/XTnZlEQDdvuBU6L0eZuKE+z/ujjtOpZmyeHimdzUz6IvV3Ez3/d4VI+KwSb66eS4qtxgPQEo7JNIVI6q1AnFzRzXKdD9x/iswzh1jTaDRhYuq3wjbWNEjwH9Td3a3uMHuCdHlm9sKLLBXVM; 4:fk2BviiwReNy2Ba6uFvxNMdwAnu1Qn1G7yBcCoamzEoqz5Ip3joWnLTZsPkyZvnhbYFHj8V7KSSvGd/Ru1hDJgJn7FTZrht1xHpOkHLn1r+vNyx9mk5jNtPDjO6SR1bM9dGIkp5Q1bvE6MlHhs7syZKgs+s/6W58IIuOtS0OP2GIlVqBogCWuVUjWyvK6NTn32VCkLK+vepQUuGdnR1/v9sWTWo+nDJl/J4f4rBlIyrHw0TwCMTLbJSr1APrb1qa0cqkZ9FSIqbOg9gKZImOUAVWirBF3XWwOhINhDiUXO6GJJCqCGNzcbY2/60HKjuR0AwsYABWSl893YRT3vQeoRhUEkgydr7U8S/2vCl9ylnUuusmATTEehI0xqy4ILMdRytypp/TH6rifyc6DLF6I3oJspnmNKffi2gqnE xoZTU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(520078)(3002001)(10201501046); SRVR:CY1PR12MB0443; BCL:0; PCL:0; RULEID:; SRVR:CY1PR12MB0443; X-Forefront-PRVS: 0784C803FD X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(979002)(6009001)(189002)(199003)(76176999)(3846002)(6116002)(87976001)(5003940100001)(5008740100001)(48376002)(122386002)(189998001)(77096005)(2950100001)(586003)(5004730100002)(105586002)(229853001)(1096002)(5001770100001)(106356001)(19580405001)(53416004)(36756003)(42186005)(50986999)(50226001)(19580395003)(2201001)(97736004)(86362001)(47776003)(40100003)(50466002)(66066001)(101416001)(92566002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR12MB0443; H:ssuthiku-fedora-lt.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR12MB0443; 23:zrZ+7hOUbhAqOkj6C9I8X/dV8ShfGLx5Zjg7QApZU?= =?us-ascii?Q?6eAy2LT4KR3f3u8QBWGoI8ILDTo2HsnDikLcMbXeQSeMxVUQetrQ8vvS1P1w?= =?us-ascii?Q?87QyKbhvu7A543mzUDvq1heG/AuFeCXqL8hnfbG9o5AGg6obTreMRXa7qHW3?= =?us-ascii?Q?ec/xJR/pBCz6S9Hpd8CETGSFvc8Pm3B9YidMOxan4RUdCjScbehEqhrp+Kx9?= =?us-ascii?Q?CjhWfTWYhSWTIXfIZIR5lpkdregrV6hJnOx5mpVV+f1y9TGkDT+CNMECoz10?= =?us-ascii?Q?wTbMRpTMuSPAf9AohVHGlM35iVXkUZNB78TT6275Y/YcAUD7B0OUUrOqCwzt?= =?us-ascii?Q?ymhE0MiDnoobJS4WYncg7ASXsoy0iSBiDj39GygMxdRhowjiOZArrQN3s1hU?= =?us-ascii?Q?eFbYphbsfmqjnj0dQAAk2VOM+bkabmRkrKD5xh/TTpBR+W9NOW72+XGNtzir?= =?us-ascii?Q?eaLLKSmS+0qIF4Cp74NQI9WKlR8MeWz/BTQ8wmQHyzQ80+TOtZwJ1oTHI+3O?= =?us-ascii?Q?nGI89Sfp9Lmeo/t6Yl0xOr9idHsPjMtvkJ5CVBNLj7nfO1NlZOi7fvJ0NrXV?= =?us-ascii?Q?Zhl7UNceUiXV9sHajvYIIQ7HwuMBNkEIzZqz1VYO8Y1VMshCebvnsc4B8iA3?= =?us-ascii?Q?lBaFmKKy6IeCfiARraCXTVb4qWWNXxZRpSDyNzz3clAbA73LLiVgEY8MzU97?= =?us-ascii?Q?HgwhLRNoZPVbGwu323Q2z01BRr2xnlaSSpzSpHvzHaaggcZgVcVlJQzg66Nd?= =?us-ascii?Q?sKv0sloQ5euHn1xXoqZUQvMSBjYlYw72TbD0VHnmERdIfNeDh9uh9ii/Fzg9?= =?us-ascii?Q?+/A359Eazop0c9qxq2xpu9WGDipjbTg3WSCGOr4ngSTGTXQIewkPXsXVQ3cU?= =?us-ascii?Q?vE6nQnccfzQ9H1c1MONx3EvucbXwZNPVnpK+kFX6RTlsxl6b3b53w73XbhM5?= =?us-ascii?Q?CcosmM2vDRsoXFsweUAc4N/RYlDG3rX1smeLinJknVzs+AaMv9VP/7F5kMEG?= =?us-ascii?Q?2x22RApl2MZDdj3HrLcIPTAkJqDACMrmmAgGiOwmRJANlPXtHNvUhUqRXPlM?= =?us-ascii?Q?s9yLX70ds0sGb2ysYjdbJT5cToCY11sSJaRIMzpNK2oBtle/Q=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0443; 5:zQ+tAF5ckV8PdeHXGLsu1grgWQ/PUuNGZIYjr37X85WNHmDhodCjtvMhA0S3/uTKvK/fcSm3pIdie8zluqwoS5U4m5bUcetA+kx1J2PCVAOzglt48EQ90snwqbLzInB9AGPN4gA2LhpJAoo1FYYh0w==; 24:r/ybOQcFzcW6w1SL9d4+8sDj7Pk9uln/4NEA2pS4b3UOYza5rnxSVs9z/RYb6lQF1cUZt+mEs3VKjtZI07CDaSSZ6Hymt3N66tEwxoZGmn0=; 20:9tkeCVzadijEtzOENJXk0AGDky85lNJi8kJu/0M+qhwgE5vfUubiGtyLoclxVm9NdowlOcMZ+1znUoseFBC8lTYSF5QLKSef0vCIQqtRWs0jmRNIg+6XrvPY3Z7RZgVjAdTfawccr3x6YclmrK/tJ+9RskzwQDxWTLFl0rHvC4AwLTaXGbSP5w7fJQ+kHhCXhRmc8Vzw5mfEbg2IzEMEk1dylIYT1sGoxZ4XihZ8Ir3tbqgBxaecUrLjntojVPBq X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Dec 2015 20:19:19.4194 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0443 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch introduces an interface for irqchip to register a callback, to provide a way to determine appropriate MSI domain for a pci device. It also introduces pci_host_bridge_acpi_msi_domain(), which returns the MSI domain of the specified PCI host bridge with DOMAIN_BUS_PCI_MSI bus token. Then, it is assigned to pci device. Signed-off-by: Suravee Suthikulpanit --- drivers/pci/pci-acpi.c | 32 ++++++++++++++++++++++++++++++++ drivers/pci/probe.c | 2 ++ include/linux/pci.h | 10 ++++++++++ 3 files changed, 44 insertions(+) diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c index a32ba75..a555d7e 100644 --- a/drivers/pci/pci-acpi.c +++ b/drivers/pci/pci-acpi.c @@ -9,7 +9,9 @@ #include #include +#include #include +#include #include #include #include @@ -689,6 +691,36 @@ static struct acpi_bus_type acpi_pci_bus = { .cleanup = pci_acpi_cleanup, }; + +static struct fwnode_handle *(*pci_msi_get_fwnode_cb)(struct device *dev); + +/** + * pci_msi_register_fwnode_provider - Register callback to retrieve fwnode + * @fn: The interrupt domain to retrieve + * + * This should be called by irqchip driver, which is the parent of + * the MSI domain to provide callback interface to query fwnode. + */ +void +pci_msi_register_fwnode_provider(struct fwnode_handle *(*fn)(struct device *)) +{ + pci_msi_get_fwnode_cb = fn; +} + +struct irq_domain *pci_host_bridge_acpi_msi_domain(struct pci_bus *bus) +{ + struct irq_domain *dom = NULL; + struct fwnode_handle *fwnode = NULL; + + if (pci_msi_get_fwnode_cb) + fwnode = pci_msi_get_fwnode_cb(&bus->dev); + + if (fwnode) + dom = irq_find_matching_fwnode(fwnode, + DOMAIN_BUS_PCI_MSI); + return dom; +} + static int __init acpi_pci_init(void) { int ret; diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index edb1984..553a029 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -672,6 +672,8 @@ static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus) * should be called from here. */ d = pci_host_bridge_of_msi_domain(bus); + if (!d) + d = pci_host_bridge_acpi_msi_domain(bus); return d; } diff --git a/include/linux/pci.h b/include/linux/pci.h index 6ae25aa..d86378c 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1946,6 +1946,16 @@ static inline struct irq_domain * pci_host_bridge_of_msi_domain(struct pci_bus *bus) { return NULL; } #endif /* CONFIG_OF */ +#ifdef CONFIG_ACPI +struct irq_domain *pci_host_bridge_acpi_msi_domain(struct pci_bus *bus); + +void +pci_msi_register_fwnode_provider(struct fwnode_handle *(*fn)(struct device *)); +#else +static inline struct irq_domain * +pci_host_bridge_acpi_msi_domain(struct pci_bus *bus) { return NULL; } +#endif + #ifdef CONFIG_EEH static inline struct eeh_dev *pci_dev_to_eeh_dev(struct pci_dev *pdev) {