From patchwork Tue Jan 17 09:32:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "M.h. Lian" X-Patchwork-Id: 716093 Return-Path: X-Original-To: incoming-dt@patchwork.ozlabs.org Delivered-To: patchwork-incoming-dt@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3v2lPV5T9Gz9tk8 for ; Tue, 17 Jan 2017 20:37:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751130AbdAQJbG (ORCPT ); Tue, 17 Jan 2017 04:31:06 -0500 Received: from mail-by2nam01on0054.outbound.protection.outlook.com ([104.47.34.54]:4949 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751193AbdAQJa4 (ORCPT ); Tue, 17 Jan 2017 04:30:56 -0500 Received: from BY2PR03CA060.namprd03.prod.outlook.com (10.141.249.33) by BN1PR0301MB0738.namprd03.prod.outlook.com (10.160.78.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12; Tue, 17 Jan 2017 09:30:52 +0000 Received: from BN1AFFO11OLC001.protection.gbl (2a01:111:f400:7c10::105) by BY2PR03CA060.outlook.office365.com (2a01:111:e400:2c5d::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12 via Frontend Transport; Tue, 17 Jan 2017 09:30:53 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; nxp.com; dmarc=fail action=none header.from=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11OLC001.mail.protection.outlook.com (10.58.53.72) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8 via Frontend Transport; Tue, 17 Jan 2017 09:30:52 +0000 Received: from lmh.ap.freescale.net (lmh.ap.freescale.net [10.193.20.69]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v0H9UGHE018177; Tue, 17 Jan 2017 02:30:48 -0700 From: Minghuan Lian To: , , CC: Marc Zyngier , Rob Herring , "Jason Cooper" , Roy Zang , Mingkai Hu , Stuart Yoder , Yang-Leo Li , Scott Wood , Minghuan Lian Subject: [PATCH v3 8/9] irqchip/ls-scfg-msi: add LS1043a v1.1 MSI support Date: Tue, 17 Jan 2017 17:32:42 +0800 Message-ID: <1484645563-29877-9-git-send-email-Minghuan.Lian@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1484645563-29877-1-git-send-email-Minghuan.Lian@nxp.com> References: <1484645563-29877-1-git-send-email-Minghuan.Lian@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131291190524317583; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(7916002)(39840400002)(39400400002)(39850400002)(39410400002)(39380400002)(39450400003)(39860400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(50986999)(230783001)(76176999)(50226002)(5003940100001)(97736004)(5001770100001)(6666003)(8936002)(30001)(36756003)(77096006)(4326007)(47776003)(38730400001)(5660300001)(2906002)(2950100002)(626004)(189998001)(48376002)(50466002)(106466001)(8656002)(105606002)(104016004)(2201001)(92566002)(54906002)(81166006)(7416002)(305945005)(86362001)(68736007)(85426001)(8676002)(81156014)(356003)(2101003); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR0301MB0738; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11OLC001; 1:eWkpmk36zX6cjqxUI+whENdA1kI0c6GKDN+lMwuzK0kXXhmZ7GFkxLDOwN88U3WYtI06FF2ToQMqnnnZwDEpN0QSh9+cu42g6ONgU6stpuMhzfG/tyGbdzQgWf8L6Be0LvDDLCu4q9hQkZDeWyGkHRz16QGhMvnTNJjEPnac/bKQQo36RA5ZmYu1V8qZlsvUK/IhQdNaz6k1Uf2ToFzdinyBRLzSHxdjDJIOSprtvDvw+l5dFpaH6QKMFrgx8NP/G8bDsXeKbupVb6OCDmcN/dIBnFSYAhyX9PQ2ahhP563cf1i98CUmMLiqH5ffFm6nFQ6YB3LNYP/ZpgYWHN028CKeHkKkVs1iw7OvZM4NejcFlYTe/1G0P3i5aXEsUxOBFtC2g6PXQGkHf+RBciV75Sg3sB/nFFCUDNlqjFfT7zbiSMreQSfEg+6j4rvt2lXw0wycwbvvfO8dPuW2TJjtEawnutuntNTJEV+d2AbI8ZQoUB0r/8tZbMOviynLrmqwPJQ9UixROu6jww7rSESo64ByeUheH2R7I3AkXaByqPOyjQW1zouXwKR23xnYXFifmfFjq48p+Dfz8GhxM3lcMb2SaGepqQUFxKxT+zZz15+y+Hzmv6lAh5yaiaSzqWIMuJF/gQ3CkHcEUgNMjHIyZhbpBV/ZHDnFDaY0/ztRiuLV1bK/ihE1bFGPRPAyzx9AHkO4XkEg70s8EpIIEHh1f4IMXAAXKZCDtS/tNnaSewk= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: a3ddb204-adcf-4d47-ae32-08d43ebb87cb X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BN1PR0301MB0738; X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 3:4/DTtwHxUmI9QKhklChEQ6A5feT/X7/T90mBv/Nt8eOi8SkWky673t/klAr28v6aOX8N98OLKnqvlwsPmxIFXDpZJb7zUm+D/3fkKl4A7NU5pMSn8JKpGRsI4XhFTfSKA73w2Nqbl/qmTOnGrindWrwG6J3LavgoLsWJUdtOpSmij/f4BZZ+o/+1mSmMVWJyC9Hz/sKzS2zitBZyXO9NHxquaqSI0hKPLDGepspgWiwHlOzsm/+SnNi5+DJXmaVsABjx4S3jH/Bam4NxWIt8F2+jYgJCwd8i9zWCVAEiBPHd65GUghMKOS9NsHjpTxmUMH16cOj4KDrJ+M3Dw4o2DD9+IaMKlFzqrO3siAoT09dE9VhfNsAv/gbsurrO7css; 25:+WbvCwD7i/rbIFhXomiPgxlfA49eJecyIe/KfuI3bJuPh5RcCWmPeMQ0cl1oZJXjx5x0ceF1cV1D4Zc7fbCVBu41PAgfG8wZdcDAUTfD+XO1cYviOxbR16+p7rmWDxypUiHsblCxfFhhVcN0GapH+0nh+fH9Jtx0uiFJ1Ke7smajMjfX2ZtBtss1zb0rbt4IaCaiIf7/AMhToapa/q4FHWrLDx8U0uQ6NpKdBE1EPg4Z0Efnf28oyye4Y+TK3gluvvchlp96XWblDHaLMQuAHF1LQXWYGagghpui87KOUZs5jjTZMM8jQyRl3wAoJ9JoLFDUjx91v5zHAozIxzpafEacN8gfwWeqITYtbeq/S+LXYgxiKSnDyPiIBqa5ukhQhfzwvWoGOxFH4m+X8RAoFQ+xakicO+R5/0MM+zdur3QVaOZhGHodB8kZL4wLyI3c68k1kkyS9EJgo8dsXMzc5w== X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 31:Hp+N84j5vVhBxfqA8HVJanjUsggsw7BDFm+IeRAD+WxzLny4pTf1vfh3SgPmf+JrwPOk5NUGwFxCPo/BA6UW8xJd1/cvY97rTx57Uggk23hNTg3sVN2feAKjBeKnNLYiSjk4GQfjaBUXxCdCsxe+lL5zaISLM3hnBqMmVmlBUitF1oIxaxvac43FC6il6dAVyUm6Ajv+qGNRnUI+xYY2dUPAP/3IHRvemq7qEZkolFXiNDx6vDojFq7tkt1SrpUp10Xx0g0pwuHpp51ml+kMQmP8TRoerkCyKqosAFYpcU1u6THnHzQPsAdLyJpp3JQr X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(5005006)(8121501046)(13017025)(13023025)(13024025)(13015025)(13018025)(10201501046)(3002001)(6055026)(6096035)(20161123565025)(20161123563025)(20161123556025)(20161123561025)(20161123559025); SRVR:BN1PR0301MB0738; BCL:0; PCL:0; RULEID:(400006); SRVR:BN1PR0301MB0738; X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 4:gcQ6dUw13ueWT2GingQ6f+coyZobvNG+WSX22ysnLx5mIfn2C9F5z1HFc5HY5b5Wb0nGskPxMNjU+XeT0qbCdtwp6naiJrdkCstvrec70MHYa6V54JiLtyKId4JK2S6UpRWphd8A/STcHPEsuuGHuGkcabxO2vcUWzxfklEWj8vmStgZnVzyEiWtBLLDNbKKzfe8iYNPGD9BuFtgjEkcbNOP0CD2DN5+CXko7uLwpHT4Clf2x7Sfs0v0pNN5wTUzKlSshoyxhpywtonCjQTI0DCLcJ6XleNQE4ILrFh1T8oWTnKxf4ahyoUQ+5/nHQ3elUwfqDOS7LvAWD3XWuu0gpQMaOM24rVeaHWB5f3CaqrD37jOBC1HkxBF8QlA2d0Jgo/+7AoS0gMAoyWiI5BHkWsci4AEZLcaFeLb+4WIvbE00M+YPjudMSE9AQ5HhMz7ioPRtoCpKHr2eIKg0ecqHSluOEmoF21LprEOG4WMtEZX7uC7n/WUSxBqgVkasz/AkrrX1vOuCwPosDdeaPDU+Qym+hS+f1cM19ZoFjQhYkpjOUPmaNJgfwInPugaQhLw9LyyvSEd2+fXiWS7i9TCpld5cAPjXsnmBiWwJjKZBazmQ3IAyv12lGqlrtCVat6YXFYVLL0/UxaS1fnCUINvmBvp2657PxamSSQ/5MJ1UPtUc02pPEfmhhvNuEVS6kuRyCER15bu2YVpIuEcnaT0mvOj+3e/hmxycKTOaC7hou3foNz0hj2g2BlMy/EPedrf X-Forefront-PRVS: 01901B3451 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR0301MB0738; 23:wUmeKA+xH82TeqGjDeO0a7aFWSn844NE/x8f/T3?= =?us-ascii?Q?PGggr+OsYVnlaFoRWeme9cUJi6OzJ73xbbEtIZqEDDDSo+vER6APdRV5B9oT?= =?us-ascii?Q?FVf8ngxeu64QmO20LDIBldPa+3F2Hxzf3GWHM8mpBN8nsaLC85etEQQJnORb?= =?us-ascii?Q?UK0LbgXlnjX03qmWqujxrhqZdtgp2RX5hoQ/7nox455k08kw7LKRDtnDxVzy?= =?us-ascii?Q?k7flZK/W/4POUUzJ1R9d11qCnhAOfXky3SiCl3CRxhIsCe8bLTRiu/gl7+f+?= =?us-ascii?Q?nTCvek86kRLtOJH+coAP8DsZJP7EF0cPzKrbxUTql/QRjTsCAA1igGSTVuD2?= =?us-ascii?Q?4sngQI8HZdHh4LhAhSRBa9KZ0AF0/1I3F+5j0auW0Qdyqo8aDctDtAP1hZXi?= =?us-ascii?Q?8LgZOIri3oVlGMtrNChUcT4ZXYCpG9/WfP56IQ8r07YttOQOHIxWeYegIXno?= =?us-ascii?Q?rIWrpEW5Cd3ZlBLEh/I2xJMZ/jkRosop0w+CEz/0oq9we4pu3B5e+zMGymTm?= =?us-ascii?Q?Ltt4/6n4unYcQuJYfXJ0vjutZ1tEV/KyoxoeUXnJOH3xRHkTkNX83AngPBTF?= =?us-ascii?Q?I4PQoHLt8NYJpBbe573ThMPFj0lrvjE3dSNqx6SUF9scCLWvjRoB1D/wc6yj?= =?us-ascii?Q?6xywYsf58aBWL0YnhqjvtjewmqQr31ZbLyjwZNl/8cdxUdxcOaPkDckbQKKP?= =?us-ascii?Q?oo2jAienlAN4xZAvpQREv4rORE+NjKD0wZmDQvKItH3No3Qoz688b9Hv7Wm6?= =?us-ascii?Q?sNLb4ljhoRKd+jURO2fu+4HkK7vQeJIqn9oy+Iwye6iEodbY3DKakt53zXXD?= =?us-ascii?Q?oF+GTSieILqHdWlsdXNOhtKwdxs/MhzBkCuiDRotAlXWvZ12JZXFEQckq3Xx?= =?us-ascii?Q?n3fjvoqrUe0wJBvUMmv+uy/dQFlHHOGDyXArCTOXrzuAbdAIAiEUmAq6AzrF?= =?us-ascii?Q?6BjwsO0QOEUb0akqM78D2GBBH01UQX4FqGnXlf0AA14EO79T/Pb5sonVNS34?= =?us-ascii?Q?IxQuWJxZyppqg6gqTLUj6Y+Sy4Hm8DbAgIWIKjpbiUSSBGavL9CIkZwxl98y?= =?us-ascii?Q?RFcsTW3K398NMyrysUDgSQknATU8r8KG6I1hJFzHHkpOkor/jo2hOwEVNbdF?= =?us-ascii?Q?iN2bLwf8iZUeAiOG1Jbnn2MYOIEXb8ePUbOatQeyntwoTTp+kpx/eU4j6HAq?= =?us-ascii?Q?fQMPzSrsVqxFf73jBbCaweK2hA8tP47Bi9nad0pQgSKA5h4KAzXf/vyOZxwk?= =?us-ascii?Q?rwjJ1x9mI9XLLy4CVyND996XeMzqyst2Ma8v6GrZlQs/lo/6Gi8hHQW4qhQj?= =?us-ascii?Q?J9S7cc0IRmizK7cDSiCRTs9wQ0rgY2wHyeoJo7gG9Ztya?= X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 6:18xRoNwJ8kjY9OIsYvAQSqdo9NO1iXwi2rQqUezg4AAr0FhrCiInoeIZRiw4jRXVE4IVTo+e0+keENxXcYQMqk+SGEH6YyqocqeWI+ko4z/2s60LvyuzctVoo7gfHypm3kJddwlQGAU9wUDPUPnAkSq0NWzWc8xtn8A7fEEsoAAAPSEraZoDxKo5E7/vpIxDeT/OXJ6AllWP6fk5J9yrMfOLKCFU81j8huwFDPf8dteVD8kIND2e6e8IzNYxNDRlHxKFOjNzE6POIZ67P0NKQbdkE/n9uaYW9BBHgHoc+j0zctEW/XUu6UGLg5cmMFMQYHB3JkKElARq2FGrRXBiGWsV40e5HRqWNKTJTh1lP2GErS1/a24b4tjz89D4l78FtBmsttwWATltE/jUfvxZ/z/qgBbBeEWmzOOSe3fexWaV8cZ3IBPSMc4AaqH2A1Q/; 5:m1VxU/RdefQD4mw+fqP/ncq/68am2Xywifb0xIbjTU2vVscdx4gQS7aVbfo633XBol05bd8RTYgxXERDVks0UNbKlVyJW9a1/zfYGMq8WG2ulbRm/O6tiTKg0ZdZzo5cS1QVcsUYnlPoHCgYDb8Hx3AoT59Ah+B/BxdpnN0RV7Bzn0bxAM02wBrQhERk4951; 24:hV3/BpXcbdxYKlvaiTf5qu6vWiWfm5GanC2xGuCAZnm79999g5Jv2kLXUGRTtQtsWGvDXOJj1ALK7BpEHw6IzbXzqWO4kppQheTOPrVfI/c= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 7:heJWDusr0dZL5AGtQ2QAJikoEHN7jC44i7v12KyJ7RY34GMzYwpw/Wsdm6TqvBuRsdq/SlcI1J87pnQRpenufl250NEerd6XbqlwijbIVIjn+brDYOK1IvpUy0QKGNgMgyVkOuKBRxckrRXaUM7uJu77E0X+IRxmaJtUwotfYxwDkRhtIc+Xh4wxOOS4Wi0bqdYN9I+xhTZ3HJLV2zXRsDzA8BLJd8OEGaT67RLtyZgLLAYG3VPGF68j1Jy8aXXPEfwlq7gv4yF/RtSutlwvrkRqkLN5xxwxW7aL6x5fVdtoiaSNCDDA9V/m7LYlwIRnJoLYGnDRVEJSVdDAmwnUXQBkelHusS+NCAEWWA458lFCLD5vusLFmiS5gRIrXuxN/4kzrxlRJaHR+QJE8ktvcyUjIqRKZyo2o0oZzQifYiyigkM56lL29FsavwKhFdiZZimnbgLU5NortC3MZcfBdw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2017 09:30:52.1821 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR0301MB0738 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org A MSI controller of LS1043a v1.0 only includes one MSIR and is assigned one GIC interrupt. In order to support affinity, LS1043a v1.1 MSI is assigned 4 MSIRs and 4 GIC interrupts. But the MSIR has the different offset and only supports 8 MSIs. The bits between variable bit_start and bit_end in structure ls_scfg_msir are used to show 8 MSI interrupts. msir_irqs and msir_base are added to describe the difference of MSI between LS1043a v1.1 and other SoCs. Signed-off-by: Minghuan Lian Acked-by: Rob Herring --- v3-v1: - None .../interrupt-controller/fsl,ls-scfg-msi.txt | 1 + drivers/irqchip/irq-ls-scfg-msi.c | 45 +++++++++++++++++++--- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/Documentation/devicetree/bindings/interrupt-controller/fsl,ls-scfg-msi.txt b/Documentation/devicetree/bindings/interrupt-controller/fsl,ls-scfg-msi.txt index dde4552..49ccabb 100644 --- a/Documentation/devicetree/bindings/interrupt-controller/fsl,ls-scfg-msi.txt +++ b/Documentation/devicetree/bindings/interrupt-controller/fsl,ls-scfg-msi.txt @@ -7,6 +7,7 @@ Required properties: "fsl,ls1021a-msi" "fsl,ls1043a-msi" "fsl,ls1046a-msi" + "fsl,ls1043a-v1.1-msi" - msi-controller: indicates that this is a PCIe MSI controller node - reg: physical base address of the controller and length of memory mapped. - interrupts: an interrupt to the parent interrupt controller. diff --git a/drivers/irqchip/irq-ls-scfg-msi.c b/drivers/irqchip/irq-ls-scfg-msi.c index 0b1f34d..8d57a59 100644 --- a/drivers/irqchip/irq-ls-scfg-msi.c +++ b/drivers/irqchip/irq-ls-scfg-msi.c @@ -25,14 +25,21 @@ #define MSI_IRQS_PER_MSIR 32 #define MSI_MSIR_OFFSET 4 +#define MSI_LS1043V1_1_IRQS_PER_MSIR 8 +#define MSI_LS1043V1_1_MSIR_OFFSET 0x10 + struct ls_scfg_msi_cfg { u32 ibs_shift; /* Shift of interrupt bit select */ + u32 msir_irqs; /* The irq number per MSIR */ + u32 msir_base; /* The base address of MSIR */ }; struct ls_scfg_msir { struct ls_scfg_msi *msi_data; unsigned int index; unsigned int gic_irq; + unsigned int bit_start; + unsigned int bit_end; void __iomem *reg; }; @@ -140,13 +147,18 @@ static void ls_scfg_msi_irq_handler(struct irq_desc *desc) struct ls_scfg_msir *msir = irq_desc_get_handler_data(desc); struct ls_scfg_msi *msi_data = msir->msi_data; unsigned long val; - int pos, virq, hwirq; + int pos, size, virq, hwirq; chained_irq_enter(irq_desc_get_chip(desc), desc); val = ioread32be(msir->reg); - for_each_set_bit(pos, &val, MSI_IRQS_PER_MSIR) { - hwirq = ((31 - pos) << msi_data->cfg->ibs_shift) | msir->index; + + pos = msir->bit_start; + size = msir->bit_end + 1; + + for_each_set_bit_from(pos, &val, size) { + hwirq = ((msir->bit_end - pos) << msi_data->cfg->ibs_shift) | + msir->index; virq = irq_find_mapping(msi_data->parent, hwirq); if (virq) generic_handle_irq(virq); @@ -193,14 +205,24 @@ static int ls_scfg_msi_setup_hwirq(struct ls_scfg_msi *msi_data, int index) msir->index = index; msir->msi_data = msi_data; msir->gic_irq = virq; - msir->reg = msi_data->regs + MSI_MSIR_OFFSET + 4 * index; + msir->reg = msi_data->regs + msi_data->cfg->msir_base + 4 * index; + + if (msi_data->cfg->msir_irqs == MSI_LS1043V1_1_IRQS_PER_MSIR) { + msir->bit_start = 32 - ((msir->index + 1) * + MSI_LS1043V1_1_IRQS_PER_MSIR); + msir->bit_end = msir->bit_start + + MSI_LS1043V1_1_IRQS_PER_MSIR - 1; + } else { + msir->bit_start = 0; + msir->bit_end = msi_data->cfg->msir_irqs - 1; + } irq_set_chained_handler_and_data(msir->gic_irq, ls_scfg_msi_irq_handler, msir); /* Release the hwirqs corresponding to this MSIR */ - for (i = 0; i < MSI_IRQS_PER_MSIR; i++) { + for (i = 0; i < msi_data->cfg->msir_irqs; i++) { hwirq = i << msi_data->cfg->ibs_shift | msir->index; bitmap_clear(msi_data->used, hwirq, 1); } @@ -216,7 +238,7 @@ static int ls_scfg_msi_teardown_hwirq(struct ls_scfg_msir *msir) if (msir->gic_irq > 0) irq_set_chained_handler_and_data(msir->gic_irq, NULL, NULL); - for (i = 0; i < MSI_IRQS_PER_MSIR; i++) { + for (i = 0; i < msi_data->cfg->msir_irqs; i++) { hwirq = i << msi_data->cfg->ibs_shift | msir->index; bitmap_set(msi_data->used, hwirq, 1); } @@ -226,10 +248,20 @@ static int ls_scfg_msi_teardown_hwirq(struct ls_scfg_msir *msir) static struct ls_scfg_msi_cfg ls1021_msi_cfg = { .ibs_shift = 3, + .msir_irqs = MSI_IRQS_PER_MSIR, + .msir_base = MSI_MSIR_OFFSET, }; static struct ls_scfg_msi_cfg ls1046_msi_cfg = { .ibs_shift = 2, + .msir_irqs = MSI_IRQS_PER_MSIR, + .msir_base = MSI_MSIR_OFFSET, +}; + +static struct ls_scfg_msi_cfg ls1043_v1_1_msi_cfg = { + .ibs_shift = 2, + .msir_irqs = MSI_LS1043V1_1_IRQS_PER_MSIR, + .msir_base = MSI_LS1043V1_1_MSIR_OFFSET, }; static const struct of_device_id ls_scfg_msi_id[] = { @@ -239,6 +271,7 @@ static int ls_scfg_msi_teardown_hwirq(struct ls_scfg_msir *msir) { .compatible = "fsl,ls1021a-msi", .data = &ls1021_msi_cfg }, { .compatible = "fsl,ls1043a-msi", .data = &ls1021_msi_cfg }, + { .compatible = "fsl,ls1043a-v1.1-msi", .data = &ls1043_v1_1_msi_cfg }, { .compatible = "fsl,ls1046a-msi", .data = &ls1046_msi_cfg }, {}, };