All of lore.kernel.org
 help / color / mirror / Atom feed
From: guoren@kernel.org
To: arnd@arndb.de, robh+dt@kernel.org, marc.zyngier@arm.com
Cc: linux-kernel@vger.kernel.org, guoren@kernel.org,
	linux-arch@vger.kernel.org, Guo Ren <ren_guo@c-sky.com>
Subject: [PATCH 10/10] irqchip/csky: Add support-vector-irq for apb-intc
Date: Tue, 29 Jan 2019 20:24:29 +0800	[thread overview]
Message-ID: <1548764669-16656-10-git-send-email-guoren@kernel.org> (raw)
In-Reply-To: <1548764669-16656-1-git-send-email-guoren@kernel.org>

From: Guo Ren <ren_guo@c-sky.com>

Some socs don't provide pending registers, so we must make the interrupt
controller working at vector mode. Add csky,support-vector-irq to
support this mode in dts.

Signed-off-by: Guo Ren <ren_guo@c-sky.com>
---
 drivers/irqchip/irq-csky-apb-intc.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/irqchip/irq-csky-apb-intc.c b/drivers/irqchip/irq-csky-apb-intc.c
index ae4c59b..14ef206 100644
--- a/drivers/irqchip/irq-csky-apb-intc.c
+++ b/drivers/irqchip/irq-csky-apb-intc.c
@@ -302,10 +302,17 @@ static void ck_irq_handler(struct pt_regs *regs)
 		pr_err("%s: none irq pending!\n", __func__);
 }
 
+static void ck_vec_irq_handler(struct pt_regs *regs)
+{
+	unsigned long vector = (mfcr("psr") >> 16) & 0xff;
+
+	handle_domain_irq(root_domain, vector - 32, regs);
+}
+
 static int __init
 ck_intc_init(struct device_node *node, struct device_node *parent)
 {
-	int ret;
+	int ret, i;
 
 	ret = ck_intc_init_comm(node, parent);
 	if (ret)
@@ -323,7 +330,16 @@ ck_intc_init(struct device_node *node, struct device_node *parent)
 
 	setup_irq_channel(0x00010203, reg_base + CK_INTC_SOURCE);
 
-	set_handle_irq(ck_irq_handler);
+	if (of_find_property(node, "csky,support-vector-irq", NULL)) {
+		set_handle_irq(ck_vec_irq_handler);
+
+		for (i = 32; i < 128; i++)
+			VEC_INIT(i, csky_irq);
+
+		writel(0, reg_base + CK_INTC_ICR);
+	} else {
+		set_handle_irq(ck_irq_handler);
+	}
 
 	return 0;
 }
-- 
2.7.4

  parent reply	other threads:[~2019-01-29 12:24 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-29 12:24 [PATCH 01/10] irqchip/csky: Support csky,dh7k SOC intc driver guoren
2019-01-29 12:24 ` [PATCH 02/10] dt-bindings: csky,apb-intc: Add dh7k SOC support guoren
2019-01-29 12:24 ` [PATCH 03/10] csky: Fixup _PAGE_GLOBAL bit for 610 tlb entry guoren
2019-01-29 12:24 ` [PATCH 04/10] irqchip/csky: Optimize remove unnecessary loop irq handle guoren
2019-01-29 12:24 ` [PATCH 05/10] irqchip/irq-csky-mpintc: Add triger type and priority guoren
2019-01-29 12:24 ` [PATCH 06/10] dt-bindings: interrupt-controller: Update csky mpintc guoren
2019-01-29 12:24 ` [PATCH 07/10] csky: Fixup wrong pt_regs size guoren
2019-01-29 12:24 ` [PATCH 08/10] csky: coding convention: Use task_stack_page guoren
2019-01-29 12:24 ` [PATCH 09/10] dt-bindings: csky,apb-intc: Add vector irq mode guoren
2019-01-29 12:24 ` guoren [this message]
2019-02-14 14:03 ` [PATCH 01/10] irqchip/csky: Support csky,dh7k SOC intc driver Marc Zyngier
2019-02-15  1:21   ` Guo Ren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1548764669-16656-10-git-send-email-guoren@kernel.org \
    --to=guoren@kernel.org \
    --cc=arnd@arndb.de \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=ren_guo@c-sky.com \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.