From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751675AbdKFFzv (ORCPT ); Mon, 6 Nov 2017 00:55:51 -0500 Received: from mail-co1nam03on0073.outbound.protection.outlook.com ([104.47.40.73]:16448 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751516AbdKFFzp (ORCPT ); Mon, 6 Nov 2017 00:55:45 -0500 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; From: Zhao Qiang To: , , CC: , Zhao Qiang Subject: [Patch v12 4/4] irqchip/qeic: remove PPCisms for QEIC Date: Mon, 6 Nov 2017 13:36:53 +0800 Message-ID: <20171106053653.23961-5-qiang.zhao@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171106053653.23961-1-qiang.zhao@nxp.com> References: <20171106053653.23961-1-qiang.zhao@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131544213434285274;(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)(39860400002)(376002)(39380400002)(346002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(50944005)(50226002)(316002)(106466001)(81156014)(8656006)(97736004)(47776003)(81166006)(53936002)(1076002)(8676002)(6666003)(105606002)(2906002)(189998001)(54906003)(110136005)(4326008)(50466002)(16586007)(5003940100001)(48376002)(2201001)(86362001)(575784001)(104016004)(2950100002)(356003)(85426001)(77096006)(5660300001)(305945005)(68736007)(36756003)(8936002)(33646002)(76176999)(498600001)(50986999)(2004002);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR03MB2699;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD045;1:z7rVBc/kcpc45Gh6DZYe0lfAnZ9AtlsHK1pxlQSHcopauKJGGKLArOzOspSdFoVuu7nRtwPk7hdM3+hrEH4vScBdG0y0p3hR1t6IfQE85C/TUIzHTM3ucGqBcOVkzZPD MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: e3e330cb-cbd1-44ea-3cda-08d524db0479 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4628075)(201703131517081)(2017052603249);SRVR:DM5PR03MB2699; X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB2699;3:sU+plJp3+ue+JS131CAZ+LKBfq1PHdC2YXzHZZjHgrZw72fSSTFd5CsVro69MB9IRiBaygNd0+cmkTPGLNg0as2hs7++na0LObBJNXhJY5+eE2BeIsrMZPNRwAsvqbFQzD93+VB/3uLuElzZcz/tVfkvEFReYoCYFuQ6iv3PsNDRsZGejiwQ/bmD3drersJm0mPJ7pVCvDfq2XrMpN5lBp/pplNIP8x0zjn3UEeHXrif+hSotYHannqVOuGBOKcIFdJk3zocK2WMu4nKuwy+79IsDxy9dZksF8PrLTjxQuJjaUcPxb6j1D4HfkmnrW+tqsrph4rvCTVot+Cd9dH0n6h9pWU+TKvzetTbduCcTHA=;25:BRqqvlGvlMnpqfX5+832VQTdT01F6xh+YTGgS1eTm7EEzhqD3YOOu0vHyFUA6S5o3u+dMfOnruKiYu9KasxojS6AkrlYQ+KyRVibentumN7A+iuO9W0DrxJ04lR2ZawVH2E5+xiO0bB/Iv4Bs2H0MHAZXtqT51s2U5zdSzCnG1/Y5bDP0RHj5A2Hs+PuKBdDdzw6XlKlpGvZ/hk9eHBHk9ZXZVEgv+TDQ1OSwct/DS/qrCShLWnmGng2LOJftqgEDzes+mWLdIk6auB15xIcWepO9+FBAyzH9OyxiBiS3avohfKknnwcpoNXhkrL9EeoZKlfRtePptx+gvNhZ19RLQ== X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM5PR03MB2699: X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB2699;31:JytSdHKPbb2gMVcqA8DuNDEYlTLknChAG1UKSvdv/lFY4jEkWV8H6qjxRzG9JMLnd7/S4cNZrwiJgdcbiBk3WitQnRPrrta40KYeJ75TOQwgAepS8ZN3h+ZoLVYqU3vHhBV0Eg7gQdoBX8nCVCnzS9UFdM65ZolkW503/Wlun56DtZLZWPBqWzDTciVqgw1vT11iBrco/32BIWLETlPwKd04B/IJK0aHLoWfExSjLms=;4:WqWCFVJqtUve4q9BN0+NKKbckXggdI6Z3U+k0Vzet7fiG5Vwub1CgSZpsB7fBu0e+3BJXQvsp5xYeFxyfCGNGjEcPHF172VSoPFT4W7j06Qcs3Zkx8dOKzo29j/3QIFH2hU42r0jnKTY1rmetfw8zZG7CGjjRWclIQ3FU00v+O+m7papbrIzjlWeWkmyVYf8F+aTGP2ATXbYRfcRkfU8JMhE2BoFpBD+AsRZH5IvnU+n+3Hvyc+hdTNNvn0lQgI783EhQaZDB97P7kRgXTbnUgGwl7dpZEi5yjMoeCHnkKx4bqFNA1fFmzoL8ISkJi3zVJcaaI9GqBrjKctppje4CuFhWTG5/wyvL4pX5DwEpAU= X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(101931422205132); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(2401047)(8121501046)(5005006)(3231021)(100000703101)(100105400095)(3002001)(93006095)(93001095)(10201501046)(6055026)(6096035)(20161123565025)(20161123556025)(20161123563025)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123559100)(20161123561025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DM5PR03MB2699;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DM5PR03MB2699; X-Forefront-PRVS: 048396AFA0 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM5PR03MB2699;23:vbGNJFve2kd/ZQf8hcKMxe0RzfM10DjTBFtRdcvYp?= =?us-ascii?Q?3qV3h1LB4KoKb+AQ1hEITEp3xO7xE5DQqMmAjWDwNPObsmboM+i+4UsLAXNB?= =?us-ascii?Q?nCsoJZGnYrlk+zExd6losya5brcIbYifg90AS4OGhq6i8+Rv+GeA4Klk59ap?= =?us-ascii?Q?LFq+e+AbPuUAiJRl28j2JWkJIP2y+Vs6Xuo4t3dv8XC1GgVBGkri7WsZKhLc?= =?us-ascii?Q?4lhk/rcnaG43joNMpkCvTWe4Ya6Ur2ehaHUTpAXLVzVGMsRK4YpnHvkGDZHa?= =?us-ascii?Q?X6e7WsQCxxB925y7t5oMYHVPLnTXZjUxnenqyvwoaC2LqaW1FNBQuLji0IDk?= =?us-ascii?Q?JlCfiBYejMNLtY3T3VBiHqjPoaspqfd6kydjtm6Fa5tuqGs4dlzoZNsKHqXP?= =?us-ascii?Q?f929MhMpcFkCVh0STSNywmnlpWzRMSijjQ4J4Y34yOI8+GhPrGpbwo0rd+dK?= =?us-ascii?Q?ipJJznUv44TSksuVULHaH8BH/Feo7a4yyU66zdKOdKCLFjvmNOGEskSm3Yjw?= =?us-ascii?Q?cL3haZ8MD7NE4cY4h1New8YhAF+VrVfvDQFMKCAof3mOQ57yn3shL7S4nrhu?= =?us-ascii?Q?atbGiAMWTZfhecbq699FW5f+t4v9apES0Uq1lTq2RN4wVrQfbeB/BqnBOdYH?= =?us-ascii?Q?uhiNd7cBjpuBE/P9ZT9h5CIeUvtIOrsS+9qC1JTyH/ZjYN6ukU5CP7yGal4k?= =?us-ascii?Q?Uwn1aU57gETG2ZCwoDD+6o+6axmQGV6fii+E0drnHcll9hY349vHUywXPfgJ?= =?us-ascii?Q?JHx/kh0QtzCIHaiySYZL/oW4OpGNLrXC08piwJR749lrIFrBvm8CEWWzfLis?= =?us-ascii?Q?AWntBt3sqlkSlcbo6hk/k9litg6+XO1fSVoqv8N6b27qzlB2dVV2JCG110D2?= =?us-ascii?Q?hqKqYc1eDLw+1VIwFp+9xf/PTrAWVSPg10Sg1N/WvI6lDqdnPFW7PgFC33Dw?= =?us-ascii?Q?7kC63Nij/6DRUEkrDwuE5kiAt1J08IGjtRhcgpj9DJfBJxvPQklFKZLuJZHv?= =?us-ascii?Q?CvSLLwJZdHJJ4CBQRXHYFFfK6W3CGBCtis5MADqjTlf2PAuaeqqJbft9GCVb?= =?us-ascii?Q?V6p8JhromQWSpw4pz0wAQW2kqbRrA7gb/xAaXCY7lTxQnjKfH+y7ZJrzU/dn?= =?us-ascii?Q?waAii54S5PI+JWscvggARR0L2famvnYOVf5myu1eNexbdnwgC8z/VhXCo7nA?= =?us-ascii?Q?deCMuWCLLmQ7lEyhxIY1CatK14DB1p72jT+tHnED00kUDikQmUuSzEvCq7Jf?= =?us-ascii?Q?Iu5K9MILcIY27/bsqk=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB2699;6:ObaPdESR9L2dvWWJN8LHs/Bu6cCPtFtomGV5rR1Vx9HXGTeClZhESl/Hp8IH/KbDNocfrR+eAZAoq/fSfcK+hMIen9fMyGNRUsrZ45+oorA4JuN63k4FXnWqLZbQn79I+XCpqXB0npyDEOm6eFVIqAlmhijMVJOHCFU5Yneu51qai3xzbrIiMurjCj6KGnnHbH1W79KxK9s0+Az+eHnYTSDyybuym/plfjCTIYsqzPUFAPOErB+Xzimna2xoV96NJxXVX1/UOBvcDY/Oqmq01F7WGxQu1EvHGBWt3ETFLOXyGAxjtJfBbeWV84TyBKJO/dB+ZIk3rk5RuyoWpl5uYTnN0dwMa7fTdR61G/oFFp8=;5:PxRSnrlyqWT3T37VW9O3VqIKkdlo5j0k4c0PgpOKaUfaXk0awZuWnSeW/szcEb3o/0lSQwJdViw73B3oTHihu0xv6hh/f0Bm1y0Yq9oQB0zsFVqxI0nlyIk4bYQcLQdgW4eV6Zxp+WFyBlYj9LlJrAyThstKwS0Gv0rbWVIFeFc=;24:tVR9Uh5zdaiqll3KKqig2mZqlRxghNQueVVqJ4dGLA4v4giiaeYiBBV8xOUgwmkenqsWBls8deHNf5ovDp+c0dZXak9Xw4in8PZJlMKIFXo=;7:Nr0R+Af5CJaLVaQvXOpXlICq7EOps6XCbVwJaPecxjjiLcflYn475Wlba5kNCnPKDEl/U/7zcZYtkNw6QTU9064kxDct6jfFfY2mFq6xM2tbh27xOMqq5j4tzanSAGrlyw3hkt7mXQecDNDSrUWuCNwaVV0yNqwB4xVfUMdVAk4AZ75s2w66+zbXusC3I2iDH03fmABS1GHC6QCgS9N7Z1L3E4EAna6hcHFDEWOzRJt6meCu8nb+ZjyLtlhBdIos SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2017 05:55:43.2413 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e3e330cb-cbd1-44ea-3cda-08d524db0479 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: DM5PR03MB2699 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org QEIC was supported on PowerPC, and dependent on PPC, Now it is supported on other platforms, so remove PPCisms. Signed-off-by: Zhao Qiang --- arch/powerpc/platforms/83xx/km83xx.c | 1 - arch/powerpc/platforms/83xx/misc.c | 1 - arch/powerpc/platforms/83xx/mpc832x_mds.c | 1 - arch/powerpc/platforms/83xx/mpc832x_rdb.c | 1 - arch/powerpc/platforms/83xx/mpc836x_mds.c | 1 - arch/powerpc/platforms/83xx/mpc836x_rdk.c | 1 - arch/powerpc/platforms/85xx/corenet_generic.c | 1 - arch/powerpc/platforms/85xx/mpc85xx_mds.c | 1 - arch/powerpc/platforms/85xx/mpc85xx_rdb.c | 1 - arch/powerpc/platforms/85xx/twr_p102x.c | 1 - drivers/irqchip/irq-qeic.c | 188 +++++++++++--------------- include/soc/fsl/qe/qe_ic.h | 132 ------------------ 12 files changed, 80 insertions(+), 250 deletions(-) delete mode 100644 include/soc/fsl/qe/qe_ic.h diff --git a/arch/powerpc/platforms/83xx/km83xx.c b/arch/powerpc/platforms/83xx/km83xx.c index d8642a4afc74..b1cef0ac5507 100644 --- a/arch/powerpc/platforms/83xx/km83xx.c +++ b/arch/powerpc/platforms/83xx/km83xx.c @@ -38,7 +38,6 @@ #include #include #include -#include #include "mpc83xx.h" diff --git a/arch/powerpc/platforms/83xx/misc.c b/arch/powerpc/platforms/83xx/misc.c index c09a13532c89..07a0e6128ad2 100644 --- a/arch/powerpc/platforms/83xx/misc.c +++ b/arch/powerpc/platforms/83xx/misc.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c index bb7b25acf26f..a1cadf4a695b 100644 --- a/arch/powerpc/platforms/83xx/mpc832x_mds.c +++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c @@ -37,7 +37,6 @@ #include #include #include -#include #include "mpc83xx.h" diff --git a/arch/powerpc/platforms/83xx/mpc832x_rdb.c b/arch/powerpc/platforms/83xx/mpc832x_rdb.c index a4539c5accb0..2fb1464a02a7 100644 --- a/arch/powerpc/platforms/83xx/mpc832x_rdb.c +++ b/arch/powerpc/platforms/83xx/mpc832x_rdb.c @@ -26,7 +26,6 @@ #include #include #include -#include #include #include diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c b/arch/powerpc/platforms/83xx/mpc836x_mds.c index 4fc3051c2b2e..9234d635f5ca 100644 --- a/arch/powerpc/platforms/83xx/mpc836x_mds.c +++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c @@ -45,7 +45,6 @@ #include #include #include -#include #include "mpc83xx.h" diff --git a/arch/powerpc/platforms/83xx/mpc836x_rdk.c b/arch/powerpc/platforms/83xx/mpc836x_rdk.c index 93f024fd9b45..82fa344a9125 100644 --- a/arch/powerpc/platforms/83xx/mpc836x_rdk.c +++ b/arch/powerpc/platforms/83xx/mpc836x_rdk.c @@ -21,7 +21,6 @@ #include #include #include -#include #include #include diff --git a/arch/powerpc/platforms/85xx/corenet_generic.c b/arch/powerpc/platforms/85xx/corenet_generic.c index 1b385acbf4dd..9ca27b1403ce 100644 --- a/arch/powerpc/platforms/85xx/corenet_generic.c +++ b/arch/powerpc/platforms/85xx/corenet_generic.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c index 06f34a99152e..8102e5f7cb98 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c @@ -49,7 +49,6 @@ #include #include #include -#include #include #include #include "smp.h" diff --git a/arch/powerpc/platforms/85xx/mpc85xx_rdb.c b/arch/powerpc/platforms/85xx/mpc85xx_rdb.c index 000d385933af..f806b6bbf3a3 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_rdb.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_rdb.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include diff --git a/arch/powerpc/platforms/85xx/twr_p102x.c b/arch/powerpc/platforms/85xx/twr_p102x.c index 6be9b337035a..4f620f2f9f64 100644 --- a/arch/powerpc/platforms/85xx/twr_p102x.c +++ b/arch/powerpc/platforms/85xx/twr_p102x.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include diff --git a/drivers/irqchip/irq-qeic.c b/drivers/irqchip/irq-qeic.c index 465009911ce7..9fe961c535bd 100644 --- a/drivers/irqchip/irq-qeic.c +++ b/drivers/irqchip/irq-qeic.c @@ -18,8 +18,11 @@ #include #include #include +#include #include #include +#include +#include #include #include #include @@ -27,9 +30,8 @@ #include #include #include -#include +#include #include -#include #define NR_QE_IC_INTS 64 @@ -87,6 +89,43 @@ #define SIGNAL_HIGH 2 #define SIGNAL_LOW 0 +#define NUM_OF_QE_IC_GROUPS 6 + +/* Flags when we init the QE IC */ +#define QE_IC_SPREADMODE_GRP_W 0x00000001 +#define QE_IC_SPREADMODE_GRP_X 0x00000002 +#define QE_IC_SPREADMODE_GRP_Y 0x00000004 +#define QE_IC_SPREADMODE_GRP_Z 0x00000008 +#define QE_IC_SPREADMODE_GRP_RISCA 0x00000010 +#define QE_IC_SPREADMODE_GRP_RISCB 0x00000020 + +#define QE_IC_LOW_SIGNAL 0x00000100 +#define QE_IC_HIGH_SIGNAL 0x00000200 + +#define QE_IC_GRP_W_PRI0_DEST_SIGNAL_HIGH 0x00001000 +#define QE_IC_GRP_W_PRI1_DEST_SIGNAL_HIGH 0x00002000 +#define QE_IC_GRP_X_PRI0_DEST_SIGNAL_HIGH 0x00004000 +#define QE_IC_GRP_X_PRI1_DEST_SIGNAL_HIGH 0x00008000 +#define QE_IC_GRP_Y_PRI0_DEST_SIGNAL_HIGH 0x00010000 +#define QE_IC_GRP_Y_PRI1_DEST_SIGNAL_HIGH 0x00020000 +#define QE_IC_GRP_Z_PRI0_DEST_SIGNAL_HIGH 0x00040000 +#define QE_IC_GRP_Z_PRI1_DEST_SIGNAL_HIGH 0x00080000 +#define QE_IC_GRP_RISCA_PRI0_DEST_SIGNAL_HIGH 0x00100000 +#define QE_IC_GRP_RISCA_PRI1_DEST_SIGNAL_HIGH 0x00200000 +#define QE_IC_GRP_RISCB_PRI0_DEST_SIGNAL_HIGH 0x00400000 +#define QE_IC_GRP_RISCB_PRI1_DEST_SIGNAL_HIGH 0x00800000 +#define QE_IC_GRP_W_DEST_SIGNAL_SHIFT (12) + +/* QE interrupt sources groups */ +enum qe_ic_grp_id { + QE_IC_GRP_W = 0, /* QE interrupt controller group W */ + QE_IC_GRP_X, /* QE interrupt controller group X */ + QE_IC_GRP_Y, /* QE interrupt controller group Y */ + QE_IC_GRP_Z, /* QE interrupt controller group Z */ + QE_IC_GRP_RISCA, /* QE interrupt controller RISC group A */ + QE_IC_GRP_RISCB /* QE interrupt controller RISC group B */ +}; + struct qe_ic { /* Control registers offset */ u32 __iomem *regs; @@ -265,15 +304,15 @@ static struct qe_ic_info qe_ic_info[] = { }, }; -static inline u32 qe_ic_read(volatile __be32 __iomem * base, unsigned int reg) +static u32 qe_ic_read(__be32 __iomem *base, unsigned int reg) { - return in_be32(base + (reg >> 2)); + return ioread32be(base + (reg >> 2)); } -static inline void qe_ic_write(volatile __be32 __iomem * base, unsigned int reg, +static void qe_ic_write(__be32 __iomem *base, unsigned int reg, u32 value) { - out_be32(base + (reg >> 2), value); + iowrite32be(value, base + (reg >> 2)); } static inline struct qe_ic *qe_ic_from_irq(unsigned int virq) @@ -375,8 +414,8 @@ static const struct irq_domain_ops qe_ic_host_ops = { .xlate = irq_domain_xlate_onetwocell, }; -/* Return an interrupt vector or NO_IRQ if no interrupt is pending. */ -unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic) +/* Return an interrupt vector or 0 if no interrupt is pending. */ +static unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic) { int irq; @@ -386,13 +425,13 @@ unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic) irq = qe_ic_read(qe_ic->regs, QEIC_CIVEC) >> 26; if (irq == 0) - return NO_IRQ; + return 0; return irq_linear_revmap(qe_ic->irqhost, irq); } -/* Return an interrupt vector or NO_IRQ if no interrupt is pending. */ -unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic) +/* Return an interrupt vector or 0 if no interrupt is pending. */ +static unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic) { int irq; @@ -402,11 +441,38 @@ unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic) irq = qe_ic_read(qe_ic->regs, QEIC_CHIVEC) >> 26; if (irq == 0) - return NO_IRQ; + return 0; return irq_linear_revmap(qe_ic->irqhost, irq); } +static void qe_ic_cascade_mpic(struct irq_desc *desc, int is_high) +{ + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); + struct irq_chip *chip = irq_desc_get_chip(desc); + unsigned int cascade_irq; + + if (is_high) + cascade_irq = qe_ic_get_high_irq(qe_ic); + else + cascade_irq = qe_ic_get_low_irq(qe_ic); + + if (cascade_irq != 0) + generic_handle_irq(cascade_irq); + + chip->irq_eoi(&desc->irq_data); +} + +static void qe_ic_cascade_low_mpic(struct irq_desc *desc) +{ + qe_ic_cascade_mpic(desc, 0); +} + +static void qe_ic_cascade_high_mpic(struct irq_desc *desc) +{ + qe_ic_cascade_mpic(desc, 1); +} + static int __init qe_ic_init(struct device_node *node, struct device_node *parent) { struct qe_ic *qe_ic; @@ -439,7 +505,7 @@ static int __init qe_ic_init(struct device_node *node, struct device_node *paren qe_ic->virq_high = irq_of_parse_and_map(node, 0); qe_ic->virq_low = irq_of_parse_and_map(node, 1); - if (qe_ic->virq_low == NO_IRQ) { + if (qe_ic->virq_low == 0) { pr_err("Failed to map QE_IC low IRQ\n"); ret = -ENOMEM; goto err_domain_remove; @@ -448,7 +514,7 @@ static int __init qe_ic_init(struct device_node *node, struct device_node *paren irq_set_handler_data(qe_ic->virq_low, qe_ic); irq_set_chained_handler(qe_ic->virq_low, qe_ic_cascade_low_mpic); - if (qe_ic->virq_high != NO_IRQ && + if (qe_ic->virq_high != 0 && qe_ic->virq_high != qe_ic->virq_low) { irq_set_handler_data(qe_ic->virq_high, qe_ic); irq_set_chained_handler(qe_ic->virq_high, @@ -466,98 +532,4 @@ static int __init qe_ic_init(struct device_node *node, struct device_node *paren return ret; } -void qe_ic_set_highest_priority(unsigned int virq, int high) -{ - struct qe_ic *qe_ic = qe_ic_from_irq(virq); - unsigned int src = virq_to_hw(virq); - u32 temp = 0; - - temp = qe_ic_read(qe_ic->regs, QEIC_CICR); - - temp &= ~CICR_HP_MASK; - temp |= src << CICR_HP_SHIFT; - - temp &= ~CICR_HPIT_MASK; - temp |= (high ? SIGNAL_HIGH : SIGNAL_LOW) << CICR_HPIT_SHIFT; - - qe_ic_write(qe_ic->regs, QEIC_CICR, temp); -} - -/* Set Priority level within its group, from 1 to 8 */ -int qe_ic_set_priority(unsigned int virq, unsigned int priority) -{ - struct qe_ic *qe_ic = qe_ic_from_irq(virq); - unsigned int src = virq_to_hw(virq); - u32 temp; - - if (priority > 8 || priority == 0) - return -EINVAL; - if (WARN_ONCE(src >= ARRAY_SIZE(qe_ic_info), - "%s: Invalid hw irq number for QEIC\n", __func__)) - return -EINVAL; - if (qe_ic_info[src].pri_reg == 0) - return -EINVAL; - - temp = qe_ic_read(qe_ic->regs, qe_ic_info[src].pri_reg); - - if (priority < 4) { - temp &= ~(0x7 << (32 - priority * 3)); - temp |= qe_ic_info[src].pri_code << (32 - priority * 3); - } else { - temp &= ~(0x7 << (24 - priority * 3)); - temp |= qe_ic_info[src].pri_code << (24 - priority * 3); - } - - qe_ic_write(qe_ic->regs, qe_ic_info[src].pri_reg, temp); - - return 0; -} - -/* Set a QE priority to use high irq, only priority 1~2 can use high irq */ -int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high) -{ - struct qe_ic *qe_ic = qe_ic_from_irq(virq); - unsigned int src = virq_to_hw(virq); - u32 temp, control_reg = QEIC_CICNR, shift = 0; - - if (priority > 2 || priority == 0) - return -EINVAL; - if (WARN_ONCE(src >= ARRAY_SIZE(qe_ic_info), - "%s: Invalid hw irq number for QEIC\n", __func__)) - return -EINVAL; - - switch (qe_ic_info[src].pri_reg) { - case QEIC_CIPZCC: - shift = CICNR_ZCC1T_SHIFT; - break; - case QEIC_CIPWCC: - shift = CICNR_WCC1T_SHIFT; - break; - case QEIC_CIPYCC: - shift = CICNR_YCC1T_SHIFT; - break; - case QEIC_CIPXCC: - shift = CICNR_XCC1T_SHIFT; - break; - case QEIC_CIPRTA: - shift = CRICR_RTA1T_SHIFT; - control_reg = QEIC_CRICR; - break; - case QEIC_CIPRTB: - shift = CRICR_RTB1T_SHIFT; - control_reg = QEIC_CRICR; - break; - default: - return -EINVAL; - } - - shift += (2 - priority) * 2; - temp = qe_ic_read(qe_ic->regs, control_reg); - temp &= ~(SIGNAL_MASK << shift); - temp |= (high ? SIGNAL_HIGH : SIGNAL_LOW) << shift; - qe_ic_write(qe_ic->regs, control_reg, temp); - - return 0; -} - IRQCHIP_DECLARE(qeic, "fsl,qe-ic", qe_ic_init); diff --git a/include/soc/fsl/qe/qe_ic.h b/include/soc/fsl/qe/qe_ic.h deleted file mode 100644 index 611369904f6e..000000000000 --- a/include/soc/fsl/qe/qe_ic.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2006 Freescale Semiconductor, Inc. All rights reserved. - * - * Authors: Shlomi Gridish - * Li Yang - * - * Description: - * QE IC external definitions and structure. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - */ -#ifndef _ASM_POWERPC_QE_IC_H -#define _ASM_POWERPC_QE_IC_H - -#include - -struct device_node; -struct qe_ic; - -#define NUM_OF_QE_IC_GROUPS 6 - -/* Flags when we init the QE IC */ -#define QE_IC_SPREADMODE_GRP_W 0x00000001 -#define QE_IC_SPREADMODE_GRP_X 0x00000002 -#define QE_IC_SPREADMODE_GRP_Y 0x00000004 -#define QE_IC_SPREADMODE_GRP_Z 0x00000008 -#define QE_IC_SPREADMODE_GRP_RISCA 0x00000010 -#define QE_IC_SPREADMODE_GRP_RISCB 0x00000020 - -#define QE_IC_LOW_SIGNAL 0x00000100 -#define QE_IC_HIGH_SIGNAL 0x00000200 - -#define QE_IC_GRP_W_PRI0_DEST_SIGNAL_HIGH 0x00001000 -#define QE_IC_GRP_W_PRI1_DEST_SIGNAL_HIGH 0x00002000 -#define QE_IC_GRP_X_PRI0_DEST_SIGNAL_HIGH 0x00004000 -#define QE_IC_GRP_X_PRI1_DEST_SIGNAL_HIGH 0x00008000 -#define QE_IC_GRP_Y_PRI0_DEST_SIGNAL_HIGH 0x00010000 -#define QE_IC_GRP_Y_PRI1_DEST_SIGNAL_HIGH 0x00020000 -#define QE_IC_GRP_Z_PRI0_DEST_SIGNAL_HIGH 0x00040000 -#define QE_IC_GRP_Z_PRI1_DEST_SIGNAL_HIGH 0x00080000 -#define QE_IC_GRP_RISCA_PRI0_DEST_SIGNAL_HIGH 0x00100000 -#define QE_IC_GRP_RISCA_PRI1_DEST_SIGNAL_HIGH 0x00200000 -#define QE_IC_GRP_RISCB_PRI0_DEST_SIGNAL_HIGH 0x00400000 -#define QE_IC_GRP_RISCB_PRI1_DEST_SIGNAL_HIGH 0x00800000 -#define QE_IC_GRP_W_DEST_SIGNAL_SHIFT (12) - -/* QE interrupt sources groups */ -enum qe_ic_grp_id { - QE_IC_GRP_W = 0, /* QE interrupt controller group W */ - QE_IC_GRP_X, /* QE interrupt controller group X */ - QE_IC_GRP_Y, /* QE interrupt controller group Y */ - QE_IC_GRP_Z, /* QE interrupt controller group Z */ - QE_IC_GRP_RISCA, /* QE interrupt controller RISC group A */ - QE_IC_GRP_RISCB /* QE interrupt controller RISC group B */ -}; - -#ifdef CONFIG_QUICC_ENGINE -unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic); -unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic); -#else -static inline unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic) -{ return 0; } -static inline unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic) -{ return 0; } -#endif /* CONFIG_QUICC_ENGINE */ - -void qe_ic_set_highest_priority(unsigned int virq, int high); -int qe_ic_set_priority(unsigned int virq, unsigned int priority); -int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high); - -static inline void qe_ic_cascade_low_ipic(struct irq_desc *desc) -{ - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); - unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); - - if (cascade_irq != NO_IRQ) - generic_handle_irq(cascade_irq); -} - -static inline void qe_ic_cascade_high_ipic(struct irq_desc *desc) -{ - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); - unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); - - if (cascade_irq != NO_IRQ) - generic_handle_irq(cascade_irq); -} - -static inline void qe_ic_cascade_low_mpic(struct irq_desc *desc) -{ - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); - unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); - struct irq_chip *chip = irq_desc_get_chip(desc); - - if (cascade_irq != NO_IRQ) - generic_handle_irq(cascade_irq); - - chip->irq_eoi(&desc->irq_data); -} - -static inline void qe_ic_cascade_high_mpic(struct irq_desc *desc) -{ - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); - unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); - struct irq_chip *chip = irq_desc_get_chip(desc); - - if (cascade_irq != NO_IRQ) - generic_handle_irq(cascade_irq); - - chip->irq_eoi(&desc->irq_data); -} - -static inline void qe_ic_cascade_muxed_mpic(struct irq_desc *desc) -{ - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); - unsigned int cascade_irq; - struct irq_chip *chip = irq_desc_get_chip(desc); - - cascade_irq = qe_ic_get_high_irq(qe_ic); - if (cascade_irq == NO_IRQ) - cascade_irq = qe_ic_get_low_irq(qe_ic); - - if (cascade_irq != NO_IRQ) - generic_handle_irq(cascade_irq); - - chip->irq_eoi(&desc->irq_data); -} - -#endif /* _ASM_POWERPC_QE_IC_H */ -- 2.14.1