From patchwork Wed Feb 19 17:15:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 11392053 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CDF65930 for ; Wed, 19 Feb 2020 17:16:36 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A655F24673 for ; Wed, 19 Feb 2020 17:16:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="O0SUJnZJ"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="XQhOkinA"; dkim=pass (1024-bit key) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="Lqg2EsIe" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A655F24673 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Type:References:In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=79Dsq+z7HYS/XN0lXe1CXf9tfCTICqzEfh1QY4BSOJY=; b=O0SUJnZJRTBgQS8HPVpRM8UXn o4oM2NBR0ffQleO3CtD57+5iOMSxjWGoyC5q9KoZ4G4+D+oeHitYOUrMfr+lzfWQ11sbTL8U6iWpm UKWJnocrJwZ9FNLGHmDSIwxCovgxqkhe5/jifWuBXhKF962njcgzXqafNBT507UWaLNEg9b6iNWmp 42Pr7M6p6Tkov8u34836QuAoJ9GHwBFA/sbQXLp5MeyS5/MDsS8HbJsOqlvx0Rh/Pw35/AymRz487 4zJETIkPh9/fSfl7M8CLXfH8y63e2tufov2qV2YmfYxW9hdkZP6ZB2+mM0FN2PjG0DllQE0+xgozc 14j54jjpg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j4Sxb-0004eK-NB; Wed, 19 Feb 2020 17:16:31 +0000 Received: from esa2.hgst.iphmx.com ([68.232.143.124]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j4SxZ-0004dY-DT for linux-riscv@lists.infradead.org; Wed, 19 Feb 2020 17:16:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1582132595; x=1613668595; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=2ZA7J1AhYAWmUeycIBFhbBQs9kp6HPfdAVLbSEmSnxc=; b=XQhOkinAYy/FNLp8r8JwuELA5GUYRRBuDI9G9pOWC59cQjJoo539z7BI 5UZVoXc5NKmBftBYEH8WR+bg1fR2pCgXm11pz5oqTCBD6GiUSW6rxzH/o vtg0Z8Ig0sMrdgNIXfapya2LLzndLEq3lZ83qt/AEsnp2pp+v/sASYpZW bneCYkWnFIDdgeRHU356EwWjJ1cY0yTiJRgjqSN7RcF7Yq3FhwM//jeEj uoXU6jv1ZSog7cuYs8wGbuyexGpQL1hcu4jKAcGXIlrQrEAqL3u9lCslM intpqZ1QgqnGVyXCTB9LROX76JHcBsiCgLNUI1b9e2QziTeoSy4Cmil0y w==; IronPort-SDR: 1XPC/k6Y4/Fy5hNTVFVkErKaBd/vEu3+bqG2p9iwHzk8g0Vt/8MfcNfK37x+0Y7P/FcVJgqSn+ X+MzQjYjvnU8+rA5jpAvhzZ824wknSxtFSKcOA41xvLUWf5SeAf3KIZFMi0PplPM91ke8p5hqq hg564EKL+9s4nhJBjJapMD3Ko+yWoYGH/HokorJMmxBAo5VUlCxpKE0iDs9ROnbYG6hac6I4IS 6ZFgPEZKpEa2fU47QXM1CPnlePI7T/Kv46GImn24tpQ0dfDdKNY3uQFMq4a9KygDwiO62cid0p 1fM= X-IronPort-AV: E=Sophos;i="5.70,461,1574092800"; d="scan'208";a="232073621" Received: from mail-cys01nam02lp2052.outbound.protection.outlook.com (HELO NAM02-CY1-obe.outbound.protection.outlook.com) ([104.47.37.52]) by ob1.hgst.iphmx.com with ESMTP; 20 Feb 2020 01:16:36 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TOKe+ROqyNnnTTupgYX7ziqwEr7grOoPG/cyTWel1roZJrcc9pxGphUGQ69yKfeq6uBgnYnAMNtWgWF5w/GBuuYKYPRYmdxhOCXe6TieKNH76Xz8HHjGWp3xv/EZfE1C0EB4JPWE9cYOmf2w3mSN9NtPm90i2mJlyJVySOJcLjfz1k82o7h+h/96rvOoXNzW9RRa/apaOOgmelX4pPUpfKf9IYtua7ZZBPLRi8tnTYmwapoyElAbSa48gg8I2t0+v/8KLnj0CShzso4EGDukCgKpSDq6Jgkp4oDMBinG5sgtEzKdHv3Ld81yRz5yk+9v3cRO6ZS8EFwlo6twedNTEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=79Dsq+z7HYS/XN0lXe1CXf9tfCTICqzEfh1QY4BSOJY=; b=QG8WG39lrMIvRW5jvhV6dmuyrpWpDmJm34W75oBTNTXkUqjsgx5HIRs8eekGPu8x1VofAEbSCaJtEWZj13eX9tqvEADYp9M/9kRgZpSQ8fL8Y1XvuEnga22FBtF5XK4yZrUbzsHJSX3Dq6C5ENSgJJ6Lb3tSwVJHJN4V/RqAztbzfuSigu/CuiAnKbXy4CFubiihhrHXCqboqkkeStxlCvEJ+kiFcRu668AWsSCebhSNifRSzSCXmFWsucdsYRKQcEboZFJ9nqxhlcXFMVGO0pJcLRdZakElICmdIkeRoX5OaOKs8CLNaTmipmLhQJW2IhaJnJudgZ1nckmGLUArbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=79Dsq+z7HYS/XN0lXe1CXf9tfCTICqzEfh1QY4BSOJY=; b=Lqg2EsIeKdCm7nMlbTNenXIA4K8dHQRhkWpqNkXT934thYUQEjIEHyIJ5lkXOoCT75JR2T5cYQjiTiym4MVujNQ5RWTlnEYd6Aw3Ayh44VnhheMJKa/NW9jI6zyUwI741jSnW0BWPgXpzJCn3vv5WwtkKzy+806+qE7G1GIpAPE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Anup.Patel@wdc.com; Received: from MN2PR04MB6061.namprd04.prod.outlook.com (20.178.246.15) by MN2PR04MB6688.namprd04.prod.outlook.com (10.186.147.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2750.17; Wed, 19 Feb 2020 17:16:11 +0000 Received: from MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::a9a0:3ffa:371f:ad89]) by MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::a9a0:3ffa:371f:ad89%7]) with mapi id 15.20.2729.033; Wed, 19 Feb 2020 17:16:11 +0000 From: Anup Patel To: Palmer Dabbelt , Paul Walmsley , Albert Ou , Daniel Lezcano , Thomas Gleixner , Jason Cooper , Marc Zyngier Subject: [PATCH v3 1/4] RISC-V: self-contained IPI handling routine Date: Wed, 19 Feb 2020 22:45:17 +0530 Message-Id: <20200219171520.20590-2-anup.patel@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200219171520.20590-1-anup.patel@wdc.com> References: <20200219171520.20590-1-anup.patel@wdc.com> X-ClientProxiedBy: MA1PR01CA0121.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:35::15) To MN2PR04MB6061.namprd04.prod.outlook.com (2603:10b6:208:d8::15) MIME-Version: 1.0 Received: from wdc.com (106.51.29.34) by MA1PR01CA0121.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:35::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2750.18 via Frontend Transport; Wed, 19 Feb 2020 17:15:51 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [106.51.29.34] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 507b075b-26f1-472f-feb3-08d7b55f6ad1 X-MS-TrafficTypeDiagnostic: MN2PR04MB6688: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:6790; X-Forefront-PRVS: 0318501FAE X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(396003)(366004)(39860400002)(376002)(136003)(346002)(199004)(189003)(4326008)(7416002)(1076003)(55016002)(5660300002)(86362001)(2906002)(66946007)(8676002)(66476007)(478600001)(36756003)(66556008)(81156014)(44832011)(2616005)(956004)(316002)(8886007)(55236004)(110136005)(16526019)(52116002)(81166006)(26005)(54906003)(8936002)(7696005)(186003)(6666004)(1006002)(32040200004); DIR:OUT; SFP:1102; SCL:1; SRVR:MN2PR04MB6688; H:MN2PR04MB6061.namprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: q7jVK12ypJZSGMt6Yfr/ZFM7ZAaL+PW+QXBpY6kQd5h+ZrUsS/e0rJR9W4o1+u6ZuVhaI3WDpgED06vJZVLJ/lYSlImqd5SUA1OKbs/iJotLQJsUsAsEuCM0CpS9XkvxarvrzWOju3k4KnlJRoAxAzuRQswwuoLRpYxoqTwzOuUunhtElXfsps9+d9s1P6vGR67oAU/8rINC77ib12Uv/t1CRDPWQKhharVQmaqeY7DkUDyDtec/PX5gzTQ5beR2fJ5baSUq8KN3Y7/M94SkaF7XHCaaTZo9TCfl6HZPIDWG7ZKGnL9r222yNgslGDIk+bni2VtVm8B+SlffvrH5dnL1AV9vbC4g579zZcAvApmyoxRVdXuH6BeEv5PzuILPrFH+MTnLHD8+XdQp59xnmLQZY2oRpUC0jMBufqQlwepcClC0lYkqpOWvTyZrfEt0MrAE96lvSLfq7Zdzu9IqLhdJ5V+KnQTskUkIhvwxPe45prlSUzHAoU9VctZixAz4 X-MS-Exchange-AntiSpam-MessageData: eqOz2jBI0IxsfGxQqY139O8L1Xio1vDmvVsf4g3Jynvz+8o4UEW1vo/RdC03nDDoNpfagmWBGQt41NSrcVqxCOfe5zG0AQF3RIuyhDTcNWM48+BFKhVJjnu6kibPZyAWHFBsOao/guvPzYIIHN/U3A== X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 507b075b-26f1-472f-feb3-08d7b55f6ad1 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2020 17:16:11.6571 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UqmRYf75e4+ejFM4w9FAv4kZRO3zTyzz0gsc6nhrlK1cfUIWTMCyM/3cJm7nEaGQn/a94IxB8iwQTCiqOe2F4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB6688 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200219_091629_548237_C1696B2E X-CRM114-Status: GOOD ( 16.42 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [68.232.143.124 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anup Patel , Anup Patel , linux-kernel@vger.kernel.org, Atish Patra , Alistair Francis , linux-riscv@lists.infradead.org, Christoph Hellwig Sender: "linux-riscv" Errors-To: linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org Currently, the IPI handling routine riscv_software_interrupt() does not take any argument and also does not perform irq_enter()/irq_exit(). This patch makes IPI handling routine more self-contained by: 1. Passing "pt_regs *" argument 2. Explicitly doing irq_enter()/irq_exit() 3. Explicitly save/restore "pt_regs *" using set_irq_regs() With above changes, IPI handling routine does not depend on caller function to perform irq_enter()/irq_exit() and save/restore of "pt_regs *" hence its more self-contained. This also enables us to call IPI handling routine from IRQCHIP drivers. Signed-off-by: Anup Patel --- arch/riscv/include/asm/irq.h | 1 - arch/riscv/include/asm/smp.h | 3 +++ arch/riscv/kernel/irq.c | 16 ++++++++++------ arch/riscv/kernel/smp.c | 11 +++++++++-- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/arch/riscv/include/asm/irq.h b/arch/riscv/include/asm/irq.h index 6e1b0e0325eb..0183e15ace66 100644 --- a/arch/riscv/include/asm/irq.h +++ b/arch/riscv/include/asm/irq.h @@ -13,7 +13,6 @@ #define NR_IRQS 0 void riscv_timer_interrupt(void); -void riscv_software_interrupt(void); #include diff --git a/arch/riscv/include/asm/smp.h b/arch/riscv/include/asm/smp.h index a83451d73a4e..b57c038c0b38 100644 --- a/arch/riscv/include/asm/smp.h +++ b/arch/riscv/include/asm/smp.h @@ -28,6 +28,9 @@ void show_ipi_stats(struct seq_file *p, int prec); /* SMP initialization hook for setup_arch */ void __init setup_smp(void); +/* Called from C code, this handles an IPI. */ +void handle_IPI(struct pt_regs *regs); + /* Hook for the generic smp_call_function_many() routine. */ void arch_send_call_function_ipi_mask(struct cpumask *mask); diff --git a/arch/riscv/kernel/irq.c b/arch/riscv/kernel/irq.c index 345c4f2eba13..bb0bfcd537e7 100644 --- a/arch/riscv/kernel/irq.c +++ b/arch/riscv/kernel/irq.c @@ -19,12 +19,15 @@ int arch_show_interrupts(struct seq_file *p, int prec) asmlinkage __visible void __irq_entry do_IRQ(struct pt_regs *regs) { - struct pt_regs *old_regs = set_irq_regs(regs); + struct pt_regs *old_regs; - irq_enter(); switch (regs->cause & ~CAUSE_IRQ_FLAG) { case RV_IRQ_TIMER: + old_regs = set_irq_regs(regs); + irq_enter(); riscv_timer_interrupt(); + irq_exit(); + set_irq_regs(old_regs); break; #ifdef CONFIG_SMP case RV_IRQ_SOFT: @@ -32,19 +35,20 @@ asmlinkage __visible void __irq_entry do_IRQ(struct pt_regs *regs) * We only use software interrupts to pass IPIs, so if a non-SMP * system gets one, then we don't know what to do. */ - riscv_software_interrupt(); + handle_IPI(regs); break; #endif case RV_IRQ_EXT: + old_regs = set_irq_regs(regs); + irq_enter(); handle_arch_irq(regs); + irq_exit(); + set_irq_regs(old_regs); break; default: pr_alert("unexpected interrupt cause 0x%lx", regs->cause); BUG(); } - irq_exit(); - - set_irq_regs(old_regs); } void __init init_IRQ(void) diff --git a/arch/riscv/kernel/smp.c b/arch/riscv/kernel/smp.c index eb878abcaaf8..1e8f44a47e14 100644 --- a/arch/riscv/kernel/smp.c +++ b/arch/riscv/kernel/smp.c @@ -121,11 +121,14 @@ static inline void clear_ipi(void) clint_clear_ipi(cpuid_to_hartid_map(smp_processor_id())); } -void riscv_software_interrupt(void) +void handle_IPI(struct pt_regs *regs) { + struct pt_regs *old_regs = set_irq_regs(regs); unsigned long *pending_ipis = &ipi_data[smp_processor_id()].bits; unsigned long *stats = ipi_data[smp_processor_id()].stats; + irq_enter(); + clear_ipi(); while (true) { @@ -136,7 +139,7 @@ void riscv_software_interrupt(void) ops = xchg(pending_ipis, 0); if (ops == 0) - return; + goto done; if (ops & (1 << IPI_RESCHEDULE)) { stats[IPI_RESCHEDULE]++; @@ -158,6 +161,10 @@ void riscv_software_interrupt(void) /* Order data access and bit testing. */ mb(); } + +done: + irq_exit(); + set_irq_regs(old_regs); } static const char * const ipi_names[] = { From patchwork Wed Feb 19 17:15:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 11392055 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A5B5814E3 for ; Wed, 19 Feb 2020 17:16:37 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 80DB224673 for ; Wed, 19 Feb 2020 17:16:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="S2D5LOoD"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="TILCyZNa"; dkim=pass (1024-bit key) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="kuPD7jXl" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 80DB224673 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Type:References:In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Upt+Sfyx6mRbUqXpVjckF9QIZ6E3N5YbOml/vcSTkH0=; b=S2D5LOoD7rwMh3ADKiRLmXCnh 6ObeUAzlUDzq0freUQ6va/O2/SLv6SR82oCY6QhCc5pmliudp7JjSDlH3YMZgnWWh2zjB5pWTlhMt ABWJ/qCNSotUj2lQcHEzml437zFJWZ6XqgL9oPN/wo2C+Gs7xt+qyODSMVfcRWI4TdxIASLZoZDgp 5IqOEvekVdymN3TbcUVlkbv8R3AbrFdmmhNuWnccjGQEQKAEoDcoluJkCmcJzt/4aTt21zmo3TN+a roAbyXAQCvrasWdfhlvV+mVQD1fCwocAv+jeYUlYUAUB+W5yFYJKna888Mjdw6zh48643wPEL1JXX 3U9PElvQw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j4Sxe-0004hE-RZ; Wed, 19 Feb 2020 17:16:34 +0000 Received: from esa2.hgst.iphmx.com ([68.232.143.124]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j4Sxb-0004dY-6e for linux-riscv@lists.infradead.org; Wed, 19 Feb 2020 17:16:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1582132598; x=1613668598; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=6oXSRiAmqLcwFehpf/cZ9klTDQZU0BiI39NfTifgOWI=; b=TILCyZNavc6fI/KSfTZBSoNX/+RzHn7otmUSeMF+i3pCsz3GEbyYopXD 1jZGJwkrYLVEbT1L7ERpiqEolZdKnY/8SJ8aRHEEpACsgMggGdZQ2USlP E9XTMoT/Z/Aw1q7QFW1aPyCqeI78XYEzpyVoXgBhrdPYpQIuXT8bnbYX+ QXNta6kZXFPLCkNXnBywPkxt/fSPs5dxfx0wqBvXQS3OmfuMkXCI+5Lmu jrqwgdzirQzjgvuQvKov1oKh2CoKi+tuWxC+i9ofs9n2F+AW+EaWjGf6p vHr12JVeXV1HnoWHbLyXDJqtnrtF4FjFghcrInJa+JJ6pKLsjD/8ex4fC A==; IronPort-SDR: M6PNZQCfyK+kRA4CdLDiZ0r9HLkiHuk1JfIXvE/mZrLYV6zxUoTM9raJRqgB0KgAvoGqucWTMq eb6o7+WMwjD6TGENq3Qa2h2XhXHZUsVDHbNFKWDMGoPpIIsJ0SgvzMUZW+UV9nIuTuLBWIINlW 74C+lJfpPhSczwl0mbr1lqZWq1GaZo6jJuq2bE7d6rOLDTpUk3TSiO5oqf974xIbhl5IiPvWTW d989ce9vJYXvnZrGhKPXZZ260q8izkWeDpZRPjjvbq4LNlnaQUUOeZ0s+gIh/jGzSb3F80ngyW sds= X-URL-LookUp-ScanningError: 1 X-IronPort-AV: E=Sophos;i="5.70,461,1574092800"; d="scan'208";a="232073646" Received: from mail-cys01nam02lp2059.outbound.protection.outlook.com (HELO NAM02-CY1-obe.outbound.protection.outlook.com) ([104.47.37.59]) by ob1.hgst.iphmx.com with ESMTP; 20 Feb 2020 01:16:19 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=erEw8YY62ScmY2+GC54LQfKtsW3wySIO8Hfud7JrpJHBqFDhSXxtXQDBAOmCXKkNpWiGyhuJDZ1/jAp5L/clQo3a1Neox/4GBlUK51bb3lnjSFdG5xFr9Q5qhrHY+3UE9oF7a0ecm37nct9UwA4raksCho/OnkV+D+Aif2N93pB3vteW+LpGXOBaofdC/FWsg0sfkdP7UUQd6+x1nJhmgJ5KSmeO5l2yFSIVsiSZn/hfGxzC9StuPCNfH+kVp/RO3KRKyk2ZVo0DYEoCofZT2utaleN3sbP8EZoQsAFviZpVKDihuZ6SkuGSHymLp3chJUebpr2/wHkhSz4rvGqDdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Upt+Sfyx6mRbUqXpVjckF9QIZ6E3N5YbOml/vcSTkH0=; b=fFe7PU/PMNSlgc5Vmf4VLSJwqdhkxW5/UKpghkvwr6gnsc4ErKjkOEbIyEUg2BAwIckAn8+QvXX4vIAWER+J5pMyZpeymgm6BuTwnFzbzeYbIGo0LCf1ffxnfzOoAf496D06Z8BrardzpGOMTVFsmcgxQPyGUq1+9RlVamjK3ZjGTWgkiR5eeX1h3ng5Xon49FQOAKnvK6wjwL0wU07IuQk6pvlZRXG9cJgwKj2DQb6zvLDTYsTlEMR0yumtfgEvWjNsZyyIcFR63h6/91xBMRq69opUYemWA6wIHjFgDPLHPTCmt/uesnK7lPt442m5H/Qo1VT2CeqMOF3Wup3Ayw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Upt+Sfyx6mRbUqXpVjckF9QIZ6E3N5YbOml/vcSTkH0=; b=kuPD7jXlrbZp8DHvsQTvvIL0ooaCODFE0DRVETeHKg8IOksqibDOMYFWHbHgJ9iPW4MiYnkvW7Hy2nGLYTR948mnjbvtGq6iHZV8E81aDNPzl9a1SKD5PWSN/8vHxv8Xbwh/t1n9vDZhIj0fctH0uyfTazsW88T2Pcp/kCopzEY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Anup.Patel@wdc.com; Received: from MN2PR04MB6061.namprd04.prod.outlook.com (20.178.246.15) by MN2PR04MB6688.namprd04.prod.outlook.com (10.186.147.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2750.17; Wed, 19 Feb 2020 17:16:17 +0000 Received: from MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::a9a0:3ffa:371f:ad89]) by MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::a9a0:3ffa:371f:ad89%7]) with mapi id 15.20.2729.033; Wed, 19 Feb 2020 17:16:17 +0000 From: Anup Patel To: Palmer Dabbelt , Paul Walmsley , Albert Ou , Daniel Lezcano , Thomas Gleixner , Jason Cooper , Marc Zyngier Subject: [PATCH v3 2/4] irqchip: RISC-V Per-HART Local Interrupt Controller Driver Date: Wed, 19 Feb 2020 22:45:18 +0530 Message-Id: <20200219171520.20590-3-anup.patel@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200219171520.20590-1-anup.patel@wdc.com> References: <20200219171520.20590-1-anup.patel@wdc.com> X-ClientProxiedBy: MA1PR01CA0121.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:35::15) To MN2PR04MB6061.namprd04.prod.outlook.com (2603:10b6:208:d8::15) MIME-Version: 1.0 Received: from wdc.com (106.51.29.34) by MA1PR01CA0121.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:35::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2750.18 via Frontend Transport; Wed, 19 Feb 2020 17:16:13 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [106.51.29.34] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 1f3cbd22-ce1f-4752-6eeb-08d7b55f6e7b X-MS-TrafficTypeDiagnostic: MN2PR04MB6688: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-Forefront-PRVS: 0318501FAE X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(396003)(366004)(39860400002)(376002)(136003)(346002)(199004)(189003)(966005)(4326008)(7416002)(1076003)(55016002)(5660300002)(86362001)(2906002)(66946007)(8676002)(66476007)(478600001)(36756003)(66556008)(81156014)(44832011)(2616005)(956004)(30864003)(316002)(8886007)(55236004)(110136005)(16526019)(52116002)(81166006)(26005)(54906003)(8936002)(7696005)(186003)(1006002)(32040200004); DIR:OUT; SFP:1102; SCL:1; SRVR:MN2PR04MB6688; H:MN2PR04MB6061.namprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: C3fkVmNWdZBC/qX8W6z5Z/paDL6uWon2ur0LmKTbsxTabGr/lMmu6iUoDIw18bDusRxNN68fnmapJJZmnGyILzzH1ZSNzCrXjII5K7XFjUOOctSjLtT2SUBFC5i/G/w9jGsqT9uuk0aPcoKHMMQCjJ+mBmZgpMFds7QJpHotIO1wL9/KOxYBpFhG+we3DMYNaT6lUJdDQlQIh1Jq9r3E1mB91EK9HadCmDrV0axM0QR9xXcon52Yo8JahpJkPhgz59lW82tYTxkBrYskSQDImjgoJuk1okMDrGEnD7PF258hnO/Lipi0cmS2ZZ0jW5COaQKeVcfqM5FfUfmR79LzYkyAfPZ4r6Scm5mKKEDFxU+4NyJ/fmJ2lYkGXEDhm+xlz6Rjp6083quRRPxVhfN/ZDXQ6h5woCLl4GXBIQUkrBOiMsy3/y62CKmVqHNJCkvkvBet45oaG0ww4BkA2yHDMuk7iqMDQeZP47lN5lU/tnmaE0TVhCpK/WU5H3BzGLX6tnhJbzcHxuhS+w8W2xu+r3XDQjZTGazSV0YzOfpjDerCFPUo1KYp87WKtwO98nmrv6+oyOvnfLBYXrW9vxu8Ng== X-MS-Exchange-AntiSpam-MessageData: 7CYe80EMyHOhNpCNxDKcSdChmS/wYX/gja2gPNqg22422QIYh5NPxhIDO6Fi7nU0AfuzgGYfnrIJ6JooqO30PPUc7c5H2BYmtro6zvFFZLg5nYPae6/f/hkz2/N6EaqyJl+Rz2IwrF/Zg1+OfoBH9w== X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1f3cbd22-ce1f-4752-6eeb-08d7b55f6e7b X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2020 17:16:17.7917 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dyGEIeRVyADvoiC/3Lx5EtY/YWeGzsnz1VPYMJzD7HQ9U5+edK5Bvcux+K8mBZTtArHE2QomALCEilAMBCGFNg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB6688 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200219_091631_301849_CC92047C X-CRM114-Status: GOOD ( 24.86 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [68.232.143.124 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anup Patel , Anup Patel , linux-kernel@vger.kernel.org, Atish Patra , Alistair Francis , linux-riscv@lists.infradead.org, Christoph Hellwig Sender: "linux-riscv" Errors-To: linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org The RISC-V per-HART local interrupt controller manages software interrupts, timer interrupts, external interrupts (which are routed via the platform level interrupt controller) and per-HART local interrupts. This patch add a driver for RISC-V local interrupt controller. It is a major re-write over perviously submitted version. (Refer, https://www.spinics.net/lists/devicetree/msg241230.html) Few advantages of this new driver over previous one are: 1. It registers all local interrupts as per-CPU interrupts 2. We can develop drivers for devices with per-CPU local interrupts without changing arch code or this driver 3. It will be useful to direct interrupt injection in KVM RISC-V as well The RISC-V INTC driver is compliant with RISC-V Hart-Level Interrupt Controller DT bindings located at: Documentation/devicetree/bindings/interrupt-controller/riscv,cpu-intc.txt Signed-off-by: Palmer Dabbelt Signed-off-by: Anup Patel --- arch/riscv/Kconfig | 1 + arch/riscv/include/asm/irq.h | 2 - arch/riscv/kernel/irq.c | 33 +------ arch/riscv/kernel/traps.c | 2 - drivers/irqchip/Kconfig | 13 +++ drivers/irqchip/Makefile | 1 + drivers/irqchip/irq-riscv-intc.c | 139 ++++++++++++++++++++++++++++++ drivers/irqchip/irq-sifive-plic.c | 39 ++++++++- include/linux/cpuhotplug.h | 2 + 9 files changed, 194 insertions(+), 38 deletions(-) create mode 100644 drivers/irqchip/irq-riscv-intc.c diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 73f029eae0cc..fe05f99357c7 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -39,6 +39,7 @@ config RISCV select HAVE_PERF_REGS select HAVE_PERF_USER_STACK_DUMP select HAVE_SYSCALL_TRACEPOINTS + select HANDLE_DOMAIN_IRQ select IRQ_DOMAIN select SPARSE_IRQ select SYSCTL_EXCEPTION_TRACE diff --git a/arch/riscv/include/asm/irq.h b/arch/riscv/include/asm/irq.h index 0183e15ace66..a9e5f07a7e9c 100644 --- a/arch/riscv/include/asm/irq.h +++ b/arch/riscv/include/asm/irq.h @@ -10,8 +10,6 @@ #include #include -#define NR_IRQS 0 - void riscv_timer_interrupt(void); #include diff --git a/arch/riscv/kernel/irq.c b/arch/riscv/kernel/irq.c index bb0bfcd537e7..eb8777642ce6 100644 --- a/arch/riscv/kernel/irq.c +++ b/arch/riscv/kernel/irq.c @@ -7,7 +7,6 @@ #include #include -#include #include #include @@ -19,39 +18,13 @@ int arch_show_interrupts(struct seq_file *p, int prec) asmlinkage __visible void __irq_entry do_IRQ(struct pt_regs *regs) { - struct pt_regs *old_regs; - - switch (regs->cause & ~CAUSE_IRQ_FLAG) { - case RV_IRQ_TIMER: - old_regs = set_irq_regs(regs); - irq_enter(); - riscv_timer_interrupt(); - irq_exit(); - set_irq_regs(old_regs); - break; -#ifdef CONFIG_SMP - case RV_IRQ_SOFT: - /* - * We only use software interrupts to pass IPIs, so if a non-SMP - * system gets one, then we don't know what to do. - */ - handle_IPI(regs); - break; -#endif - case RV_IRQ_EXT: - old_regs = set_irq_regs(regs); - irq_enter(); + if (handle_arch_irq) handle_arch_irq(regs); - irq_exit(); - set_irq_regs(old_regs); - break; - default: - pr_alert("unexpected interrupt cause 0x%lx", regs->cause); - BUG(); - } } void __init init_IRQ(void) { irqchip_init(); + if (!handle_arch_irq) + panic("No interrupt controller found."); } diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c index f4cad5163bf2..a62fcf4b7eed 100644 --- a/arch/riscv/kernel/traps.c +++ b/arch/riscv/kernel/traps.c @@ -156,6 +156,4 @@ void __init trap_init(void) csr_write(CSR_SCRATCH, 0); /* Set the exception vector address */ csr_write(CSR_TVEC, &handle_exception); - /* Enable all interrupts */ - csr_write(CSR_IE, -1); } diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig index 6d397732138d..cf7a4ce2f121 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -493,6 +493,19 @@ config TI_SCI_INTA_IRQCHIP If you wish to use interrupt aggregator irq resources managed by the TI System Controller, say Y here. Otherwise, say N. +config RISCV_INTC + bool "RISC-V Local Interrupt Controller" + depends on RISCV + default y + help + This enables support for the per-HART local interrupt controller + found in standard RISC-V systems. The per-HART local interrupt + controller handles timer interrupts, software interrupts, and + hardware interrupts. Without a per-HART local interrupt controller, + a RISC-V system will be unable to handle any interrupts. + + If you don't know what to do here, say Y. + config SIFIVE_PLIC bool "SiFive Platform-Level Interrupt Controller" depends on RISCV diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile index eae0d78cbf22..31ba55d2b6fb 100644 --- a/drivers/irqchip/Makefile +++ b/drivers/irqchip/Makefile @@ -98,6 +98,7 @@ obj-$(CONFIG_NDS32) += irq-ativic32.o obj-$(CONFIG_QCOM_PDC) += qcom-pdc.o obj-$(CONFIG_CSKY_MPINTC) += irq-csky-mpintc.o obj-$(CONFIG_CSKY_APB_INTC) += irq-csky-apb-intc.o +obj-$(CONFIG_RISCV_INTC) += irq-riscv-intc.o obj-$(CONFIG_SIFIVE_PLIC) += irq-sifive-plic.o obj-$(CONFIG_IMX_IRQSTEER) += irq-imx-irqsteer.o obj-$(CONFIG_IMX_INTMUX) += irq-imx-intmux.o diff --git a/drivers/irqchip/irq-riscv-intc.c b/drivers/irqchip/irq-riscv-intc.c new file mode 100644 index 000000000000..a2523fc663b1 --- /dev/null +++ b/drivers/irqchip/irq-riscv-intc.c @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2012 Regents of the University of California + * Copyright (C) 2017-2018 SiFive + * Copyright (C) 2020 Western Digital Corporation or its affiliates. + */ + +#define pr_fmt(fmt) "riscv-intc: " fmt +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static struct irq_domain *intc_domain; +static atomic_t intc_init = ATOMIC_INIT(0); + +static asmlinkage void riscv_intc_irq(struct pt_regs *regs) +{ + struct pt_regs *old_regs; + unsigned long cause = regs->cause & ~CAUSE_IRQ_FLAG; + + if (unlikely(cause >= BITS_PER_LONG)) + panic("unexpected interrupt cause"); + + switch (cause) { + case RV_IRQ_TIMER: + old_regs = set_irq_regs(regs); + irq_enter(); + riscv_timer_interrupt(); + irq_exit(); + set_irq_regs(old_regs); + break; +#ifdef CONFIG_SMP + case RV_IRQ_SOFT: + /* + * We only use software interrupts to pass IPIs, so if a + * non-SMP system gets one, then we don't know what to do. + */ + handle_IPI(regs); + break; +#endif + default: + handle_domain_irq(intc_domain, cause, regs); + break; + } +} + +/* + * On RISC-V systems local interrupts are masked or unmasked by writing + * the SIE (Supervisor Interrupt Enable) CSR. As CSRs can only be written + * on the local hart, these functions can only be called on the hart that + * corresponds to the IRQ chip. + */ + +static void riscv_intc_irq_mask(struct irq_data *d) +{ + csr_clear(sie, 1 << (long)d->hwirq); +} + +static void riscv_intc_irq_unmask(struct irq_data *d) +{ + csr_set(sie, 1 << (long)d->hwirq); +} + +static int riscv_intc_cpu_starting(unsigned int cpu) +{ + csr_write(sie, 1UL << RV_IRQ_SOFT); + csr_write(sip, 0); + return 0; +} + +static int riscv_intc_cpu_dying(unsigned int cpu) +{ + csr_clear(sie, 1UL << RV_IRQ_SOFT); + return 0; +} + +static struct irq_chip riscv_intc_chip = { + .name = "RISC-V INTC", + .irq_mask = riscv_intc_irq_mask, + .irq_unmask = riscv_intc_irq_unmask, +}; + +static int riscv_intc_domain_map(struct irq_domain *d, unsigned int irq, + irq_hw_number_t hwirq) +{ + irq_set_percpu_devid(irq); + irq_domain_set_info(d, irq, hwirq, &riscv_intc_chip, d->host_data, + handle_percpu_devid_irq, NULL, NULL); + irq_set_status_flags(irq, IRQ_NOAUTOEN); + + return 0; +} + +static const struct irq_domain_ops riscv_intc_domain_ops = { + .map = riscv_intc_domain_map, + .xlate = irq_domain_xlate_onecell, +}; + +static int __init riscv_intc_init(struct device_node *node, + struct device_node *parent) +{ + /* + * RISC-V device trees can have one INTC DT node under + * each CPU DT node so INTC init function will be called + * once for each INTC DT node. We only need to do INTC + * init once for boot CPU so we use atomic counter to + * achieve this. + */ + if (atomic_inc_return(&intc_init) > 1) + return 0; + + intc_domain = irq_domain_add_linear(node, BITS_PER_LONG, + &riscv_intc_domain_ops, NULL); + if (!intc_domain) + goto error_add_linear; + + set_handle_irq(&riscv_intc_irq); + + cpuhp_setup_state(CPUHP_AP_IRQ_RISCV_STARTING, + "irqchip/riscv/intc:starting", + riscv_intc_cpu_starting, + riscv_intc_cpu_dying); + + pr_info("%lu local interrupts mapped\n", (long)BITS_PER_LONG); + + return 0; + +error_add_linear: + pr_warn("unable to add IRQ domain\n"); + return -ENXIO; +} + +IRQCHIP_DECLARE(riscv, "riscv,cpu-intc", riscv_intc_init); diff --git a/drivers/irqchip/irq-sifive-plic.c b/drivers/irqchip/irq-sifive-plic.c index aa4af886e43a..a4f247a00a3c 100644 --- a/drivers/irqchip/irq-sifive-plic.c +++ b/drivers/irqchip/irq-sifive-plic.c @@ -4,10 +4,12 @@ * Copyright (C) 2018 Christoph Hellwig */ #define pr_fmt(fmt) "plic: " fmt +#include #include #include #include #include +#include #include #include #include @@ -187,6 +189,7 @@ static const struct irq_domain_ops plic_irqdomain_ops = { .free = irq_domain_free_irqs_top, }; +static int plic_parent_irq; static struct irq_domain *plic_irqdomain; /* @@ -195,15 +198,17 @@ static struct irq_domain *plic_irqdomain; * that source ID back to the same claim register. This automatically enables * and disables the interrupt, so there's nothing else to do. */ -static void plic_handle_irq(struct pt_regs *regs) +static void plic_handle_irq(struct irq_desc *desc) { struct plic_handler *handler = this_cpu_ptr(&plic_handlers); + struct irq_chip *chip = irq_desc_get_chip(desc); void __iomem *claim = handler->hart_base + CONTEXT_CLAIM; irq_hw_number_t hwirq; WARN_ON_ONCE(!handler->present); - csr_clear(CSR_IE, IE_EIE); + chained_irq_enter(chip, desc); + while ((hwirq = readl(claim))) { int irq = irq_find_mapping(plic_irqdomain, hwirq); @@ -213,7 +218,23 @@ static void plic_handle_irq(struct pt_regs *regs) else generic_handle_irq(irq); } - csr_set(CSR_IE, IE_EIE); + + chained_irq_exit(chip, desc); +} + +static int plic_cpu_starting(unsigned int cpu) +{ + if (plic_parent_irq) + enable_percpu_irq(plic_parent_irq, + irq_get_trigger_type(plic_parent_irq)); + return 0; +} + +static int plic_cpu_dying(unsigned int cpu) +{ + if (plic_parent_irq) + disable_percpu_irq(plic_parent_irq); + return 0; } /* @@ -281,6 +302,13 @@ static int __init plic_init(struct device_node *node, if (parent.args[0] != RV_IRQ_EXT) continue; + if (irq_find_host(parent.np)) { + plic_parent_irq = irq_of_parse_and_map(node, i); + if (plic_parent_irq) + irq_set_chained_handler(plic_parent_irq, + plic_handle_irq); + } + hartid = plic_find_hart_id(parent.np); if (hartid < 0) { pr_warn("failed to parse hart ID for context %d.\n", i); @@ -320,9 +348,12 @@ static int __init plic_init(struct device_node *node, nr_handlers++; } + cpuhp_setup_state(CPUHP_AP_IRQ_PLIC_STARTING, + "irqchip/sifive/plic:starting", + plic_cpu_starting, plic_cpu_dying); + pr_info("mapped %d interrupts with %d handlers for %d contexts.\n", nr_irqs, nr_handlers, nr_contexts); - set_handle_irq(plic_handle_irq); return 0; out_iounmap: diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h index d37c17e68268..133baff276d0 100644 --- a/include/linux/cpuhotplug.h +++ b/include/linux/cpuhotplug.h @@ -102,6 +102,8 @@ enum cpuhp_state { CPUHP_AP_IRQ_ARMADA_XP_STARTING, CPUHP_AP_IRQ_BCM2836_STARTING, CPUHP_AP_IRQ_MIPS_GIC_STARTING, + CPUHP_AP_IRQ_RISCV_STARTING, + CPUHP_AP_IRQ_PLIC_STARTING, CPUHP_AP_ARM_MVEBU_COHERENCY, CPUHP_AP_MICROCODE_LOADER, CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING, From patchwork Wed Feb 19 17:15:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 11392057 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 87B8114E3 for ; Wed, 19 Feb 2020 17:16:42 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6174F24673 for ; Wed, 19 Feb 2020 17:16:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="tLtwzWMR"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="I3BRcTKw"; dkim=pass (1024-bit key) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="xJcskZSQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6174F24673 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Type:References:In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=UduoVuJzGJvSq4pkFdNW/jDRAWirWOpYT9Q23ua07lk=; b=tLtwzWMRI8u8V9z3RI9K2Sx/I kZa1qq6bw28DNkJRi3dx03uFyeava741R8M4CPa1s1cPxsB9yrIboos13iTr9XTQjYnkfqmMC8WXk o9dX6L2dBEoU9ls8by1VV92m6KU5W8h7Pa50Sv1FMGuUe7Q5mRRnEcftNiclpLHyPLBKB9baAieX0 mXUQ99MWR0M+CEqkTfQAvgiphda6KsfvFNMQZZ1tbGpT4D2/FOnE7gPvtlNGz+tV96ofd0zGqtGZE 4xwaifPFRXHIh6IwMofhvdrbqXhkM6Ai79E9AJjDMmmu60CEqYU/UDTwYzCkAKpNHzShKS5XWxEwB r0QVb31Hg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j4Sxj-0004ls-8X; Wed, 19 Feb 2020 17:16:39 +0000 Received: from esa4.hgst.iphmx.com ([216.71.154.42]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j4Sxg-0004h8-5D for linux-riscv@lists.infradead.org; Wed, 19 Feb 2020 17:16:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1582132596; x=1613668596; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=j1GFhyYpVrNQClzVYe4UuaHi/GQFQxafh23jill3qIQ=; b=I3BRcTKw4MOf6euFIjEoU/TkdU0MLItH981WgX8qF12a8b8PrXP2vNNu GzmjAhQFD5/nG52H9DuTPFMijBN3jQRTSvTc7hpYMwB+wRatRWjTklC6S ZnzrysZQ5+OsjYuTkI8LVpD0Tfua801gaeaDG58YGb//7gSth9OdSiZY8 f9cXGjlnOQZiJib8eW1zpLW8oss4w5RatSuJk09IoNnCYzynRwrm+nNfD JbUi7gB3IPhGFpOwsO0pWtOsKOPiv8XJUmWjSMM7sALjK1EloQVYdZ7o0 zwgs/00gbHHHTcpuIOtmdCevD5+BvIY1p5OgeiPUJq23NiBm633YkvpW4 w==; IronPort-SDR: GJ/VEhAYsb++SW9r857W6I5gK4QHGUJlzO90nP5LUQ1F65FuPtu2kjk7aDvYzwIxfV5RPf4sQY tOeAMFxCFrQBK8ui4hsaZsudr4PU3yhdqJArGzgcEcxP5OFkInfSEYZTTJ3qUVonAssiV44gBM opUSxjX5iCy6F2w8JeksVxdEfWA1iEu/vfZKfMfvxfS/kcf4xQJbfjqNSrc1YNu1inTC8CU2aG 6PktWVGEHD6aVvzgM/mMCt4cGG0raEvQ99ZtnvKW2EFbkD2QIl2O3Ra1k1eaz2ji7K6Rsdv8KY tig= X-IronPort-AV: E=Sophos;i="5.70,461,1574092800"; d="scan'208";a="130192876" Received: from mail-cys01nam02lp2057.outbound.protection.outlook.com (HELO NAM02-CY1-obe.outbound.protection.outlook.com) ([104.47.37.57]) by ob1.hgst.iphmx.com with ESMTP; 20 Feb 2020 01:16:33 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TvZAX1UhyYydpSboL24PkgI1wKgxW8X13PVjRzAPiKYUSYEk+ZWuvKYDgegesbAP7tATrAssN5hwXSiRWMac0VwaswUMaqwDI5/7AKjOq0LHploQrVbfmpUcnarmsEws7tWa6AiuSv7SgXt9vNCXpqVT06iv7mNLkOV25/+6iHg6gFwJqjGRLepQmHJG1bikS2TdOW8UApMBm2dmepcBu/eQEhOBJkagL/8zL5vPCnvc2RIm1pCFzmZrL2EFAdtzX6gd+8Gx/SKjE1jQXObmKonRtpn0uVeQV/nXtA0b/GVKyZuKBVUKbhZjQikz/r90eNBUHogYYALKZamor0s4/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UduoVuJzGJvSq4pkFdNW/jDRAWirWOpYT9Q23ua07lk=; b=AggemixMUV0U0MYJ6skO7atustrtmidE/gadUyRGgqMOtO6FXMqpXl6Coh4Nj9+yH41TiCk3ompBFZTeSGo7Xih8VM/L0XgxSnamgppqKw3bhcadYsBobr1sUJfGmbXiNh7b9ehPll0vh5OwJq5G5jci0s5ooDqb2zczOv/6pOE4V6jf8wagGptRSFuiHb9F1KmjlOPIc1kNc15zxT6ESx6OObRxaWKvUoXVDfiRKxicYv++OtWeo73O/Z0pSzRNy5RLOLVqas7UW2Vz3ShotYeRXwmzXAYnV0zgJRLd+9oqyyhUCZB5ktnHdL4HSdT7qPS1BwMFkaJ7givck/eMjQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UduoVuJzGJvSq4pkFdNW/jDRAWirWOpYT9Q23ua07lk=; b=xJcskZSQNsaOsB0C2lXl2qK+11H1NN5HC2F/DxYHKCkoQ4azb8VBXMj78XfcqICrPpp7BE/wLsl3UPFyRcv555MHaJe62aQt3/Ie9EFsMgC8mGBbGdezoe/yJG/aoQCsSmcUs5qAYVuffEvhgHAPTNwIfSm4SgJmcGtWWqcUlj4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Anup.Patel@wdc.com; Received: from MN2PR04MB6061.namprd04.prod.outlook.com (20.178.246.15) by MN2PR04MB6688.namprd04.prod.outlook.com (10.186.147.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2750.17; Wed, 19 Feb 2020 17:16:32 +0000 Received: from MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::a9a0:3ffa:371f:ad89]) by MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::a9a0:3ffa:371f:ad89%7]) with mapi id 15.20.2729.033; Wed, 19 Feb 2020 17:16:32 +0000 From: Anup Patel To: Palmer Dabbelt , Paul Walmsley , Albert Ou , Daniel Lezcano , Thomas Gleixner , Jason Cooper , Marc Zyngier Subject: [PATCH v3 3/4] clocksource: timer-riscv: Make timer interrupt as a per-CPU interrupt Date: Wed, 19 Feb 2020 22:45:19 +0530 Message-Id: <20200219171520.20590-4-anup.patel@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200219171520.20590-1-anup.patel@wdc.com> References: <20200219171520.20590-1-anup.patel@wdc.com> X-ClientProxiedBy: MA1PR01CA0121.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:35::15) To MN2PR04MB6061.namprd04.prod.outlook.com (2603:10b6:208:d8::15) MIME-Version: 1.0 Received: from wdc.com (106.51.29.34) by MA1PR01CA0121.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:35::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2750.18 via Frontend Transport; Wed, 19 Feb 2020 17:16:24 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [106.51.29.34] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 77a5cc95-014b-4968-147b-08d7b55f76f7 X-MS-TrafficTypeDiagnostic: MN2PR04MB6688: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-Forefront-PRVS: 0318501FAE X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(396003)(366004)(39860400002)(376002)(136003)(346002)(199004)(189003)(4326008)(7416002)(1076003)(55016002)(5660300002)(86362001)(2906002)(66946007)(8676002)(66476007)(478600001)(36756003)(66556008)(81156014)(44832011)(2616005)(956004)(316002)(8886007)(55236004)(110136005)(16526019)(52116002)(81166006)(26005)(54906003)(8936002)(7696005)(186003)(6666004)(1006002)(32040200004); DIR:OUT; SFP:1102; SCL:1; SRVR:MN2PR04MB6688; H:MN2PR04MB6061.namprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: S2wuJtzcpnzFrpJ8XHe4uo/dbW4ist9xQv95lGkSJJ3WJMRba1Ph8vbcFa3wwTAgNdn4HwcZMLGcL5bYn4XRV/ypX1t9LmvxmsYMNzm7256l3vKi5y6zFERICP1B6boCVkS4nStZDv8vwbNf3W1UnVdZpgmW0Wjw08fOfw6iD8Siy7XyUJzCtGm6fZ1Bgtozcyq8NpgB7iZTlKs7TdN4tKikHp84c6mKyGqf/WhflEMZud7IOzsNKQVKu85UEceQ/XkxqNGA9DYzgJT6q6pob0CptnPyyw5dL/rKkqFD/Jm8w7irKziQjDSkwxGVNYb2NT1F7HNHs1nE9IY+nSslVgJLPLNo3ajSLm9ZlCxdNoAxMYtuMWs5gsCWzrXM1DA/g6MdKyiJN85U4I3Hm2QfL8tFUe9ls+zTwVILbfE7SZ9DDhxMkHsFHxD1eW4TH0txKR0137e16xoxsAuPi5RGkuqSbKzddzBwzKkHXyxWTar8aT6RSvY29Jv4rhsRW9hj X-MS-Exchange-AntiSpam-MessageData: c2oShOCk6U6y6Kt0c/9HjqpPGCxgtDtUv1P8SxCtqV9IoDujT/tY15x0dTO5xHA/JM3mGiPrfv0I6Ty86fGsZp7vIaNJt3IRvOa6ItgrjB4Qz4d/Uq2O54ZJ+OM4Wpb/qUf0zUqaftQDcWO9+Go76w== X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 77a5cc95-014b-4968-147b-08d7b55f76f7 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2020 17:16:32.2377 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Dlrji9E9xvFVeflat+4DoDJLkIs/Cc2bSwlUY69tNneGjT6umzQkESSLsQDYSEocLT9iNFywHXskK6+OYZ+Cug== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB6688 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200219_091636_311614_757F6906 X-CRM114-Status: GOOD ( 18.16 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [216.71.154.42 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anup Patel , Anup Patel , linux-kernel@vger.kernel.org, Atish Patra , Alistair Francis , linux-riscv@lists.infradead.org, Christoph Hellwig Sender: "linux-riscv" Errors-To: linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org Instead of directly calling RISC-V timer interrupt handler from RISC-V local interrupt conntroller driver, this patch implements RISC-V timer interrupt as a per-CPU interrupt using per-CPU APIs of Linux IRQ subsystem. Signed-off-by: Anup Patel --- arch/riscv/include/asm/irq.h | 2 - drivers/clocksource/timer-riscv.c | 79 ++++++++++++++++++++----------- drivers/irqchip/irq-riscv-intc.c | 8 ---- 3 files changed, 52 insertions(+), 37 deletions(-) diff --git a/arch/riscv/include/asm/irq.h b/arch/riscv/include/asm/irq.h index a9e5f07a7e9c..9807ad164015 100644 --- a/arch/riscv/include/asm/irq.h +++ b/arch/riscv/include/asm/irq.h @@ -10,8 +10,6 @@ #include #include -void riscv_timer_interrupt(void); - #include #endif /* _ASM_RISCV_IRQ_H */ diff --git a/drivers/clocksource/timer-riscv.c b/drivers/clocksource/timer-riscv.c index c4f15c4068c0..6b82f2e41f8e 100644 --- a/drivers/clocksource/timer-riscv.c +++ b/drivers/clocksource/timer-riscv.c @@ -14,7 +14,10 @@ #include #include #include -#include +#include +#include +#include +#include #include u64 __iomem *riscv_time_cmp; @@ -39,6 +42,7 @@ static int riscv_clock_next_event(unsigned long delta, return 0; } +static unsigned int riscv_clock_event_irq; static DEFINE_PER_CPU(struct clock_event_device, riscv_clock_event) = { .name = "riscv_timer_clockevent", .features = CLOCK_EVT_FEAT_ONESHOT, @@ -74,65 +78,86 @@ static int riscv_timer_starting_cpu(unsigned int cpu) struct clock_event_device *ce = per_cpu_ptr(&riscv_clock_event, cpu); ce->cpumask = cpumask_of(cpu); + ce->irq = riscv_clock_event_irq; clockevents_config_and_register(ce, riscv_timebase, 100, 0x7fffffff); - csr_set(CSR_IE, IE_TIE); + enable_percpu_irq(riscv_clock_event_irq, + irq_get_trigger_type(riscv_clock_event_irq)); return 0; } static int riscv_timer_dying_cpu(unsigned int cpu) { - csr_clear(CSR_IE, IE_TIE); + disable_percpu_irq(riscv_clock_event_irq); return 0; } /* called directly from the low-level interrupt handler */ -void riscv_timer_interrupt(void) +static irqreturn_t riscv_timer_interrupt(int irq, void *dev_id) { struct clock_event_device *evdev = this_cpu_ptr(&riscv_clock_event); csr_clear(CSR_IE, IE_TIE); evdev->event_handler(evdev); + + return IRQ_HANDLED; } static int __init riscv_timer_init_dt(struct device_node *n) { - int cpuid, hartid, error; - - hartid = riscv_of_processor_hartid(n); - if (hartid < 0) { - pr_warn("Not valid hartid for node [%pOF] error = [%d]\n", - n, hartid); - return hartid; - } - - cpuid = riscv_hartid_to_cpuid(hartid); - if (cpuid < 0) { - pr_warn("Invalid cpuid for hartid [%d]\n", hartid); - return cpuid; - } - - if (cpuid != smp_processor_id()) + int error; + struct of_phandle_args oirq; + + /* + * Either we have one INTC DT node under each CPU DT node + * or a single system wide INTC DT node. Irrespective to + * number of INTC DT nodes, we only proceed if we are able + * to find irq_domain of INTC. + * + * Once we have INTC irq_domain, we create mapping for timer + * interrupt HWIRQ and request_percpu_irq() on it. + */ + + if (!irq_find_host(n) || riscv_clock_event_irq) return 0; - pr_info("%s: Registering clocksource cpuid [%d] hartid [%d]\n", - __func__, cpuid, hartid); + oirq.np = n; + oirq.args_count = 1; + oirq.args[0] = RV_IRQ_TIMER; + riscv_clock_event_irq = irq_create_of_mapping(&oirq); + if (!riscv_clock_event_irq) + return -ENODEV; + error = clocksource_register_hz(&riscv_clocksource, riscv_timebase); if (error) { - pr_err("RISCV timer register failed [%d] for cpu = [%d]\n", - error, cpuid); + pr_err("registering clocksource failed [%d]\n", error); return error; } sched_clock_register(riscv_sched_clock, 64, riscv_timebase); + error = request_percpu_irq(riscv_clock_event_irq, + riscv_timer_interrupt, + "riscv-timer", &riscv_clock_event); + if (error) { + pr_err("registering percpu irq failed [%d]\n", error); + return error; + } + error = cpuhp_setup_state(CPUHP_AP_RISCV_TIMER_STARTING, "clockevents/riscv/timer:starting", riscv_timer_starting_cpu, riscv_timer_dying_cpu); - if (error) + if (error) { pr_err("cpu hp setup state failed for RISCV timer [%d]\n", error); - return error; + return error; + } + + pr_info("running at %lu.%02luMHz frequency\n", + (unsigned long)riscv_timebase / 1000000, + (unsigned long)(riscv_timebase / 10000) % 100); + + return 0; } -TIMER_OF_DECLARE(riscv_timer, "riscv", riscv_timer_init_dt); +TIMER_OF_DECLARE(riscv_timer, "riscv,cpu-intc", riscv_timer_init_dt); diff --git a/drivers/irqchip/irq-riscv-intc.c b/drivers/irqchip/irq-riscv-intc.c index a2523fc663b1..bbc950510840 100644 --- a/drivers/irqchip/irq-riscv-intc.c +++ b/drivers/irqchip/irq-riscv-intc.c @@ -21,20 +21,12 @@ static atomic_t intc_init = ATOMIC_INIT(0); static asmlinkage void riscv_intc_irq(struct pt_regs *regs) { - struct pt_regs *old_regs; unsigned long cause = regs->cause & ~CAUSE_IRQ_FLAG; if (unlikely(cause >= BITS_PER_LONG)) panic("unexpected interrupt cause"); switch (cause) { - case RV_IRQ_TIMER: - old_regs = set_irq_regs(regs); - irq_enter(); - riscv_timer_interrupt(); - irq_exit(); - set_irq_regs(old_regs); - break; #ifdef CONFIG_SMP case RV_IRQ_SOFT: /* From patchwork Wed Feb 19 17:15:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 11392059 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8EBF1930 for ; Wed, 19 Feb 2020 17:16:48 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6C62624673 for ; Wed, 19 Feb 2020 17:16:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="klFbGsk0"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="FVTurXqD"; dkim=pass (1024-bit key) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="fHhIIiEq" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6C62624673 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Type:References:In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=V9LPZ06etqjtPQi6fp7NsI0p+FU8j5/XRsK3+2oNxfg=; b=klFbGsk0KpNIsoHA+NE+Wecg1 fuAtBtTNNKaAHlYkaVVcl3rQsZ0pqzTES9yuylwPqb8X7TpNMZZ/hDLBENdrRvz75aE6sZBisKzbb IYbsg4zw+M/Jgk/EXej/r/dYD1W01p39i/VN2YsB7T3j/ZIvgGXPsgfCBg7r3VY7PrqjvGq/XBNdf IcNxuVc08SjrxTqdeV1HBSGwHNLWlSV3kLBGy5gu6j1gr+hikYN7FY8uYX6a2mHbQr66qu6W0vO7W jfAshyT7uxJEvSb/E0WKttMII1CnmtLIq7NfZYtA1h+Hx4W9qKU+HxMlsgdXB60+Kfjg74GMyeyWN 9gO9SEzvw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j4Sxp-0004qh-EV; Wed, 19 Feb 2020 17:16:45 +0000 Received: from esa6.hgst.iphmx.com ([216.71.154.45]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j4Sxm-0004oN-2x for linux-riscv@lists.infradead.org; Wed, 19 Feb 2020 17:16:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1582132602; x=1613668602; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=vF8HMDqdB2uBYzUrBaJ6ZSkgHqVxWgmMSTRqgPCK9zo=; b=FVTurXqDfEkZ3vowp9F+BFFyjDPR4ej2gt/BbaoVuFYzc0uKR2MWruLF uVYqim+QhO9/8hGRWLKPGHJOpBE5RbbwD5sHKHmNSARoQezMZhn/JpFzB PHrV0PUjNHwxKTxQuavaQrCZIDPW0zrdt8sMASNeBk7LcRceTVq/LQUWA Gh4RxkAsSt0boD1k7NAmobkQeQoyW61bbhpZaUYfcRYm4C6On5EtGVfXb IHf97o5+3aW1jUx3cdFNlY6xzV0aO1XZPRit0Ka4yLtDaXMIk/S4oHEkR gLkl4PcSZU7DEGP1UkDLoFejjaOcccyZ+E7gqzOT5DJUjk3KMN59pC1K9 Q==; IronPort-SDR: ffLSawpMGvaXvY6BUB4j5YNo/0emPW79crxKcSrPplFh6yhh4cYq4v8JnMMWOWlojkEj5y9GAg qz3vjpFLpfB4jwYs8MRLfuzokPZYX4wv4hTuH+eK8JhMADwZGFnTDVvEWxk3wXzG0eoyelwZwk 79ge3KzJuMMcX2eRzj5Y74GZuT6YXtTBsWgYpRt5dgsxpm904ZRQivuSnKyzu/RF4hOoUrV7Nq PjB0FegEP1l3YefkgDXvo34wHAw8NvcwxxGJO+OAKaviJp35pv5aZjJAyjwJoWPFZwZ6UwshJ5 2Zg= X-IronPort-AV: E=Sophos;i="5.70,461,1574092800"; d="scan'208";a="131643383" Received: from mail-cys01nam02lp2058.outbound.protection.outlook.com (HELO NAM02-CY1-obe.outbound.protection.outlook.com) ([104.47.37.58]) by ob1.hgst.iphmx.com with ESMTP; 20 Feb 2020 01:16:40 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iRDnpMGmRZ7cmWb3f2LROBoLZ9HoetmvveUgSZWIF3M1N7E0grCFM6HRSAmCSU8VpzuDj3Ms7OYlaPbbJAeiHGjrEs2JwGFFUwoY+jXPKhGOC8sWTTbaDbgb7JYeqbBgV97BKnhgDHEyHwmzE4ULtbuvShUzqTzwjzIRia/DR8LIlPccOxrqMVQF6j6y/ENsrEHrBdJ3ZxZRwiWTw3XAe3VcM6e2gCMwD1dBBeRSzEq2nP6dp65gLR8eaKrbIsdjsdjRGAgBY+CdL/hlGmAK7Qaq91BP4Ae6qZ06qoiN3iUjV6xsDAyvXA9bLbfxSQhgvcL46DaIeJ3Xo69e5vXecw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V9LPZ06etqjtPQi6fp7NsI0p+FU8j5/XRsK3+2oNxfg=; b=irXJkU/8IdeGvgPbQsiCjp75+s01CBMBYDg4KZ5oXk1krtdBue2KCnpUTa5a2xB2rYHqRY0RTNOi6zqyWp6lkHqxATb9U0gFv4sGFGWsISDW4djxgiqt+YPz57lpVpEzvHx9UNjfNE0iA2KpdiDoYlQ0snEPtBXmw5eP+x0lU28agFV5b/7ZPON6FnxasVmojM9xkKMuGwXUgee1/LD/9H2FTIsnc+WBBoVBjZqWe8FDTgo5R1dm+P+rJxXuu3M2+ilqaPMNJUUCeXHP0BKMmZ+r4C6dY4fkVG8NHGVDJF7hwexmaIBzlGGboMB7VaQAKmeYwjX2cFZvvUxQmLJfkA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V9LPZ06etqjtPQi6fp7NsI0p+FU8j5/XRsK3+2oNxfg=; b=fHhIIiEqrmKeVkTHwmEWk9EjJMg1/SJqlMhyworSBR6CgqHO3A6Yv8rh8S9Ez5JznKFJj9HNnI9s+Q9vuY1ioUAZgnwHZutv0GaelyKjepZ/lYv5clciKLAjhv6/4Y5RKRaEU9ebExCToETe8lylcugRdQJxbj8WqDKHkicWc9Q= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Anup.Patel@wdc.com; Received: from MN2PR04MB6061.namprd04.prod.outlook.com (20.178.246.15) by MN2PR04MB6688.namprd04.prod.outlook.com (10.186.147.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2750.17; Wed, 19 Feb 2020 17:16:38 +0000 Received: from MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::a9a0:3ffa:371f:ad89]) by MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::a9a0:3ffa:371f:ad89%7]) with mapi id 15.20.2729.033; Wed, 19 Feb 2020 17:16:38 +0000 From: Anup Patel To: Palmer Dabbelt , Paul Walmsley , Albert Ou , Daniel Lezcano , Thomas Gleixner , Jason Cooper , Marc Zyngier Subject: [PATCH v3 4/4] RISC-V: Remove do_IRQ() function Date: Wed, 19 Feb 2020 22:45:20 +0530 Message-Id: <20200219171520.20590-5-anup.patel@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200219171520.20590-1-anup.patel@wdc.com> References: <20200219171520.20590-1-anup.patel@wdc.com> X-ClientProxiedBy: MA1PR01CA0121.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:35::15) To MN2PR04MB6061.namprd04.prod.outlook.com (2603:10b6:208:d8::15) MIME-Version: 1.0 Received: from wdc.com (106.51.29.34) by MA1PR01CA0121.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:35::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2750.18 via Frontend Transport; Wed, 19 Feb 2020 17:16:33 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [106.51.29.34] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 6c0b385c-5937-431f-c7bb-08d7b55f7abf X-MS-TrafficTypeDiagnostic: MN2PR04MB6688: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:1186; X-Forefront-PRVS: 0318501FAE X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4636009)(396003)(366004)(39860400002)(376002)(136003)(346002)(199004)(189003)(4326008)(7416002)(1076003)(55016002)(5660300002)(86362001)(2906002)(66946007)(8676002)(66476007)(478600001)(36756003)(66556008)(81156014)(44832011)(2616005)(956004)(316002)(8886007)(55236004)(110136005)(16526019)(52116002)(81166006)(26005)(54906003)(8936002)(7696005)(186003)(6666004)(1006002)(32040200004); DIR:OUT; SFP:1102; SCL:1; SRVR:MN2PR04MB6688; H:MN2PR04MB6061.namprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QAT01JBiAcA9J7WWHwFzZ+cKk+3VMRKZ9A0OWZo2ENUOA8V8Qg8SK+A7JIzQ7uBFE6twO/LkAhSDAIbBnGyxH2K4md1LlB6wI0ZsiYm8woK1+VoZj8MKDFEw5VnAQFaUm7BJHkfV3KhXDP7Yl1srA/HFy8lAVEyYsbGX5jajZTnsYrD0NenhiNlzqfVP676gWewpymI+RwyqfV+QGxrkkjeVyBw7UBnTj+FsNd5K1/DZoXbdfVMc3dX5Fc8LE59QRl0VO5weFzyMz/AbY75XSLesAgoCV265iK0FKz1Be1UgL0vPcRZGbxaGQFtEW2ZNpYi+RXS+e4XtcReLcMo64nF4/Jm3n6THvdlDMcEzGaNsMlwN8awmMGm1vyj+97VXKfeHt7badLgQ17pSxBayVUVhSrKtMK6MAqqYPJuDE0PfgBqiA/vhbXgEynL5QGj8QfPrbNnNXXVuM9qlFa+Jbn2Pz4s7+UPsvWbvp5DVZw0RSiDty3iZXOUM6JGBr88l X-MS-Exchange-AntiSpam-MessageData: grjrNo8KIJerdfnQQMRqAo8PnUW7vgCx2/ECYyMkJh7r9+ANYgkiikkoSKDFI/1a/jQ7IpOtMUXizrntk/oIQh/HaoLLR41HI3akZTkt5JoOpqsGRsjxpxLzGEOc0CTt71rfVFmiv0MbKvFniTU/0A== X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c0b385c-5937-431f-c7bb-08d7b55f7abf X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2020 17:16:38.6961 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /4nZUDYDQrIX+0+DnoQXAD/fkL40L9Nch55wJNfocrDTXZkJyR8NzMqu1xZHDq4Q6UL0K1XwuxAZ9ZwpJKaFBw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB6688 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200219_091642_219752_D7243E65 X-CRM114-Status: GOOD ( 13.76 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [216.71.154.45 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anup Patel , Anup Patel , linux-kernel@vger.kernel.org, Atish Patra , Alistair Francis , linux-riscv@lists.infradead.org, Christoph Hellwig Sender: "linux-riscv" Errors-To: linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org The only thing do_IRQ() does is call handle_arch_irq function pointer. We can very well call handle_arch_irq function pointer directly from assembly and remove do_IRQ() function hence this patch. Signed-off-by: Anup Patel --- arch/riscv/kernel/entry.S | 4 +++- arch/riscv/kernel/irq.c | 6 ------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/arch/riscv/kernel/entry.S b/arch/riscv/kernel/entry.S index bad4d85b5e91..f5d346588c22 100644 --- a/arch/riscv/kernel/entry.S +++ b/arch/riscv/kernel/entry.S @@ -183,7 +183,9 @@ ENTRY(handle_exception) /* Handle interrupts */ move a0, sp /* pt_regs */ - tail do_IRQ + la a1, handle_arch_irq + REG_L a1, (a1) + jr a1 1: /* * Exceptions run with interrupts enabled or disabled depending on the diff --git a/arch/riscv/kernel/irq.c b/arch/riscv/kernel/irq.c index eb8777642ce6..7207fa08d78f 100644 --- a/arch/riscv/kernel/irq.c +++ b/arch/riscv/kernel/irq.c @@ -16,12 +16,6 @@ int arch_show_interrupts(struct seq_file *p, int prec) return 0; } -asmlinkage __visible void __irq_entry do_IRQ(struct pt_regs *regs) -{ - if (handle_arch_irq) - handle_arch_irq(regs); -} - void __init init_IRQ(void) { irqchip_init();