Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1570636 > unrolled thread
| Started by | Yuriy Kolerov <yuriy.kolerov@synopsys.com> |
|---|---|
| First post | 2017-01-31 12:50 +0100 |
| Last post | 2017-02-02 01:00 +0100 |
| Articles | 8 — 3 participants |
Back to article view | Back to linux.kernel
[PATCH v2 0/4] Use build registers for getting numbers of interrupts Yuriy Kolerov <yuriy.kolerov@synopsys.com> - 2017-01-31 12:50 +0100
[PATCH v2 2/4] ARCv2: IRQ: Remove option for setting number of interrupts Yuriy Kolerov <yuriy.kolerov@synopsys.com> - 2017-01-31 12:50 +0100
Re: [PATCH v2 2/4] ARCv2: IRQ: Remove option for setting number of interrupts Vineet Gupta <Vineet.Gupta1@synopsys.com> - 2017-01-31 19:20 +0100
[PATCH v2 1/4] ARCv2: IRQ: Move structure for build register of core intc to the header Yuriy Kolerov <yuriy.kolerov@synopsys.com> - 2017-01-31 12:50 +0100
Re: [PATCH v2 1/4] ARCv2: IRQ: Move structure for build register of core intc to the header Vineet Gupta <Vineet.Gupta1@synopsys.com> - 2017-01-31 18:50 +0100
Re: [PATCH v2 1/4] ARCv2: IRQ: Move structure for build register of core intc to the header Vineet Gupta <Vineet.Gupta1@synopsys.com> - 2017-01-31 19:20 +0100
Re: [PATCH v2 0/4] Use build registers for getting numbers of interrupts Vineet Gupta <Vineet.Gupta1@synopsys.com> - 2017-02-01 22:00 +0100
RE: [PATCH v2 0/4] Use build registers for getting numbers of interrupts Yuriy Kolerov <Yuriy.Kolerov@synopsys.com> - 2017-02-02 01:00 +0100
| From | Yuriy Kolerov <yuriy.kolerov@synopsys.com> |
|---|---|
| Date | 2017-01-31 12:50 +0100 |
| Subject | [PATCH v2 0/4] Use build registers for getting numbers of interrupts |
| Message-ID | <t5F6F-bX-3@gated-at.bofh.it> |
A summary:
* Use build registers for getting numbers of interrupts both for
core interrupt controller and for IDU interrupt controller.
* Set a default priority for all core interrupt to prevent
unexpected switching of banks of registers.
* Remove option for setting number of interrupts since it does
not affect a number of interrupts in IRQ domains and breaks
portability since it is impossible to change size of table of
interrupts after linkage.
Change in v2:
* Squash some commits.
* Do not move a structure for control register of core intc to
the header since it is used only once.
Yuriy Kolerov (4):
ARCv2: IRQ: Move structure for build register of core intc to the
header
ARCv2: IRQ: Remove option for setting number of interrupts
ARCv2: IRQ: Use build registers for getting numbers of interrupts
ARCv2: IRQ: Set a default priority for all core interrupts
arch/arc/Kconfig | 11 -----------
arch/arc/include/asm/arcregs.h | 11 +++++++++++
arch/arc/include/asm/irq.h | 32 +++++++++++++++++++++++++++++---
arch/arc/kernel/entry-arcv2.S | 3 ++-
arch/arc/kernel/intc-arcv2.c | 31 ++++++++++++++++++++-----------
arch/arc/kernel/mcip.c | 31 +++++++++++++++++++------------
include/soc/arc/mcip.h | 17 +++++++++++++++++
7 files changed, 98 insertions(+), 38 deletions(-)
--
2.7.4
[toc] | [next] | [standalone]
| From | Yuriy Kolerov <yuriy.kolerov@synopsys.com> |
|---|---|
| Date | 2017-01-31 12:50 +0100 |
| Subject | [PATCH v2 2/4] ARCv2: IRQ: Remove option for setting number of interrupts |
| Message-ID | <t5F6F-bX-11@gated-at.bofh.it> |
| In reply to | #1570636 |
When you set a value of ARC_NUMBER_OF_INTERRUPTS option
it affects only a size of the interrupts table but macros
for number of virtual interrupts (NR_IRQS) and for number
of hardware interrupts (NR_CPU_IRQS) remain unchanged.
Moreover usage of ARC_NUMBER_OF_INTERRUPTS is bad for
portability since it is not possible to change size
of the interrupts table after linkage.
This patch makes these changes in IRQ subsystem:
* NR_CPU_IRQS defines a maximum number of hardware interrupts.
* Remove ARC_NUMBER_OF_INTERRUPTS option and create interrupts
table for all possible hardware interrupts.
* Increase a maximum number of virtual IRQs to 512. ARCv2 can
support 240 interrupts in the core interrupts controllers
and 128 interrupts in IDU. Thus 512 virtual IRQs must be
enough for most configurations of boards.
Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com>
---
arch/arc/Kconfig | 11 -----------
arch/arc/include/asm/irq.h | 28 +++++++++++++++++++++++++---
arch/arc/kernel/entry-arcv2.S | 3 ++-
3 files changed, 27 insertions(+), 15 deletions(-)
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index 283099c..ba15cb8 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -412,17 +412,6 @@ config ARC_HAS_DIV_REM
bool "Insn: div, divu, rem, remu"
default y
-config ARC_NUMBER_OF_INTERRUPTS
- int "Number of interrupts"
- range 8 240
- default 32
- help
- This defines the number of interrupts on the ARCv2HS core.
- It affects the size of vector table.
- The initial 8 IRQs are fixed (Timer, ICI etc) and although configurable
- in hardware, it keep things simple for Linux to assume they are always
- present.
-
endif # ISA_ARCV2
endmenu # "ARC CPU Configuration"
diff --git a/arch/arc/include/asm/irq.h b/arch/arc/include/asm/irq.h
index c0fa0d2..d28499a 100644
--- a/arch/arc/include/asm/irq.h
+++ b/arch/arc/include/asm/irq.h
@@ -9,18 +9,40 @@
#ifndef __ASM_ARC_IRQ_H
#define __ASM_ARC_IRQ_H
-#define NR_CPU_IRQS 32 /* number of interrupt lines of ARC770 CPU */
-#define NR_IRQS 128 /* allow some CPU external IRQ handling */
+#ifdef CONFIG_ISA_ARCV2
+
+/*
+ * A maximum number of supported interrupts in the core interrupt controller.
+ * This number is not equal to the maximum interrupt number (256) because
+ * first 16 lines are reserved for exceptions and are not configurable.
+ */
+#define NR_CPU_IRQS 240
+
+/*
+ * ARCv2 can support 240 interrupts in the core interrupts controllers and
+ * 128 interrupts in IDU. Thus 512 virtual IRQs must be enough for most
+ * configurations of boards.
+ */
+#define NR_IRQS 512
/* Platform Independent IRQs */
-#ifdef CONFIG_ISA_ARCV2
#define IPI_IRQ 19
#define SOFTIRQ_IRQ 21
+
+#else
+
+#define NR_CPU_IRQS 32 /* number of interrupt lines of ARC770 CPU */
+#define NR_IRQS 128 /* allow some CPU external IRQ handling */
+
#endif
+#ifndef __ASSEMBLY__
+
#include <linux/interrupt.h>
#include <asm-generic/irq.h>
extern void arc_init_IRQ(void);
#endif
+
+#endif
diff --git a/arch/arc/kernel/entry-arcv2.S b/arch/arc/kernel/entry-arcv2.S
index 0b6388a..f22101e 100644
--- a/arch/arc/kernel/entry-arcv2.S
+++ b/arch/arc/kernel/entry-arcv2.S
@@ -13,6 +13,7 @@
#include <asm/errno.h>
#include <asm/arcregs.h>
#include <asm/irqflags.h>
+#include <asm/irq.h>
.cpu HS
@@ -52,7 +53,7 @@ VECTOR handle_interrupt ; unused
VECTOR handle_interrupt ; (23) unused
# End of fixed IRQs
-.rept CONFIG_ARC_NUMBER_OF_INTERRUPTS - 8
+.rept NR_CPU_IRQS - 8
VECTOR handle_interrupt
.endr
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Vineet Gupta <Vineet.Gupta1@synopsys.com> |
|---|---|
| Date | 2017-01-31 19:20 +0100 |
| Subject | Re: [PATCH v2 2/4] ARCv2: IRQ: Remove option for setting number of interrupts |
| Message-ID | <t5Lc6-3XV-19@gated-at.bofh.it> |
| In reply to | #1570641 |
On 01/31/2017 03:45 AM, Yuriy Kolerov wrote: > When you set a value of ARC_NUMBER_OF_INTERRUPTS option > it affects only a size of the interrupts table but macros > for number of virtual interrupts (NR_IRQS) and for number > of hardware interrupts (NR_CPU_IRQS) remain unchanged. > Moreover usage of ARC_NUMBER_OF_INTERRUPTS is bad for > portability since it is not possible to change size > of the interrupts table after linkage. > > This patch makes these changes in IRQ subsystem: > > * NR_CPU_IRQS defines a maximum number of hardware interrupts. > * Remove ARC_NUMBER_OF_INTERRUPTS option and create interrupts > table for all possible hardware interrupts. > * Increase a maximum number of virtual IRQs to 512. ARCv2 can > support 240 interrupts in the core interrupts controllers > and 128 interrupts in IDU. Thus 512 virtual IRQs must be > enough for most configurations of boards. > > Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com> Applied to for-next. Thx, -Vineet
[toc] | [prev] | [next] | [standalone]
| From | Yuriy Kolerov <yuriy.kolerov@synopsys.com> |
|---|---|
| Date | 2017-01-31 12:50 +0100 |
| Subject | [PATCH v2 1/4] ARCv2: IRQ: Move structure for build register of core intc to the header |
| Message-ID | <t5F6G-bX-27@gated-at.bofh.it> |
| In reply to | #1570636 |
Also add new macro ARC_REG_STATUS32 for the address of STATUS32
auxiliary register. It is better to use it instead of magic numbers.
Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com>
---
arch/arc/include/asm/arcregs.h | 11 +++++++++++
arch/arc/kernel/intc-arcv2.c | 10 ++--------
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/arch/arc/include/asm/arcregs.h b/arch/arc/include/asm/arcregs.h
index f659942..2328244 100644
--- a/arch/arc/include/asm/arcregs.h
+++ b/arch/arc/include/asm/arcregs.h
@@ -38,6 +38,9 @@
#define ARC_REG_CLUSTER_BCR 0xcf
#define ARC_REG_AUX_ICCM 0x208 /* ICCM Base Addr (ARCv2) */
+/* Common for ARCompact and ARCv2 status register */
+#define ARC_REG_STATUS32 0x0A
+
/* status32 Bits Positions */
#define STATUS_AE_BIT 5 /* Exception active */
#define STATUS_DE_BIT 6 /* PC is in delay slot */
@@ -233,6 +236,14 @@ struct bcr_generic {
#endif
};
+struct bcr_irq_arcv2 {
+#ifdef CONFIG_CPU_BIG_ENDIAN
+ unsigned int pad:3, firq:1, prio:4, exts:8, irqs:8, ver:8;
+#else
+ unsigned int ver:8, irqs:8, exts:8, prio:4, firq:1, pad:3;
+#endif
+};
+
/*
*******************************************************************
* Generic structures to hold build configuration used at runtime
diff --git a/arch/arc/kernel/intc-arcv2.c b/arch/arc/kernel/intc-arcv2.c
index ecef0fb..9de0665 100644
--- a/arch/arc/kernel/intc-arcv2.c
+++ b/arch/arc/kernel/intc-arcv2.c
@@ -24,13 +24,7 @@ void arc_init_IRQ(void)
{
unsigned int tmp, irq_prio;
- struct irq_build {
-#ifdef CONFIG_CPU_BIG_ENDIAN
- unsigned int pad:3, firq:1, prio:4, exts:8, irqs:8, ver:8;
-#else
- unsigned int ver:8, irqs:8, exts:8, prio:4, firq:1, pad:3;
-#endif
- } irq_bcr;
+ struct bcr_irq_arcv2 irq_bcr;
struct aux_irq_ctrl {
#ifdef CONFIG_CPU_BIG_ENDIAN
@@ -69,7 +63,7 @@ void arc_init_IRQ(void)
irq_bcr.firq ? " FIRQ (not used)":"");
/* setup status32, don't enable intr yet as kernel doesn't want */
- tmp = read_aux_reg(0xa);
+ tmp = read_aux_reg(ARC_REG_STATUS32);
tmp |= STATUS_AD_MASK | (ARCV2_IRQ_DEF_PRIO << 1);
tmp &= ~STATUS_IE_MASK;
asm volatile("kflag %0 \n"::"r"(tmp));
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Vineet Gupta <Vineet.Gupta1@synopsys.com> |
|---|---|
| Date | 2017-01-31 18:50 +0100 |
| Subject | Re: [PATCH v2 1/4] ARCv2: IRQ: Move structure for build register of core intc to the header |
| Message-ID | <t5KJ4-3yR-37@gated-at.bofh.it> |
| In reply to | #1570645 |
On 01/31/2017 03:45 AM, Yuriy Kolerov wrote: > Also add new macro ARC_REG_STATUS32 for the address of STATUS32 > auxiliary register. It is better to use it instead of magic numbers. > > Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com> Applied to for-next. Thx, -Vineet
[toc] | [prev] | [next] | [standalone]
| From | Vineet Gupta <Vineet.Gupta1@synopsys.com> |
|---|---|
| Date | 2017-01-31 19:20 +0100 |
| Subject | Re: [PATCH v2 1/4] ARCv2: IRQ: Move structure for build register of core intc to the header |
| Message-ID | <t5Lc6-3XV-7@gated-at.bofh.it> |
| In reply to | #1570645 |
On 01/31/2017 03:45 AM, Yuriy Kolerov wrote:
> Also add new macro ARC_REG_STATUS32 for the address of STATUS32
> auxiliary register. It is better to use it instead of magic numbers.
>
> Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com>
> ---
> arch/arc/include/asm/arcregs.h | 11 +++++++++++
> arch/arc/kernel/intc-arcv2.c | 10 ++--------
> 2 files changed, 13 insertions(+), 8 deletions(-)
>
> diff --git a/arch/arc/include/asm/arcregs.h b/arch/arc/include/asm/arcregs.h
> index f659942..2328244 100644
> --- a/arch/arc/include/asm/arcregs.h
> +++ b/arch/arc/include/asm/arcregs.h
> @@ -38,6 +38,9 @@
> #define ARC_REG_CLUSTER_BCR 0xcf
> #define ARC_REG_AUX_ICCM 0x208 /* ICCM Base Addr (ARCv2) */
>
> +/* Common for ARCompact and ARCv2 status register */
> +#define ARC_REG_STATUS32 0x0A
> +
> /* status32 Bits Positions */
> #define STATUS_AE_BIT 5 /* Exception active */
> #define STATUS_DE_BIT 6 /* PC is in delay slot */
> @@ -233,6 +236,14 @@ struct bcr_generic {
> #endif
> };
>
> +struct bcr_irq_arcv2 {
> +#ifdef CONFIG_CPU_BIG_ENDIAN
> + unsigned int pad:3, firq:1, prio:4, exts:8, irqs:8, ver:8;
> +#else
> + unsigned int ver:8, irqs:8, exts:8, prio:4, firq:1, pad:3;
> +#endif
> +};
Looks like I was too eager to apply.
This doesn't need to be exported to outside intc code. I will fix it up locally !
> +
> /*
> *******************************************************************
> * Generic structures to hold build configuration used at runtime
> diff --git a/arch/arc/kernel/intc-arcv2.c b/arch/arc/kernel/intc-arcv2.c
> index ecef0fb..9de0665 100644
> --- a/arch/arc/kernel/intc-arcv2.c
> +++ b/arch/arc/kernel/intc-arcv2.c
> @@ -24,13 +24,7 @@ void arc_init_IRQ(void)
> {
> unsigned int tmp, irq_prio;
>
> - struct irq_build {
> -#ifdef CONFIG_CPU_BIG_ENDIAN
> - unsigned int pad:3, firq:1, prio:4, exts:8, irqs:8, ver:8;
> -#else
> - unsigned int ver:8, irqs:8, exts:8, prio:4, firq:1, pad:3;
> -#endif
> - } irq_bcr;
> + struct bcr_irq_arcv2 irq_bcr;
>
> struct aux_irq_ctrl {
> #ifdef CONFIG_CPU_BIG_ENDIAN
> @@ -69,7 +63,7 @@ void arc_init_IRQ(void)
> irq_bcr.firq ? " FIRQ (not used)":"");
>
> /* setup status32, don't enable intr yet as kernel doesn't want */
> - tmp = read_aux_reg(0xa);
> + tmp = read_aux_reg(ARC_REG_STATUS32);
> tmp |= STATUS_AD_MASK | (ARCV2_IRQ_DEF_PRIO << 1);
> tmp &= ~STATUS_IE_MASK;
> asm volatile("kflag %0 \n"::"r"(tmp));
>
[toc] | [prev] | [next] | [standalone]
| From | Vineet Gupta <Vineet.Gupta1@synopsys.com> |
|---|---|
| Date | 2017-02-01 22:00 +0100 |
| Subject | Re: [PATCH v2 0/4] Use build registers for getting numbers of interrupts |
| Message-ID | <t6aau-2uM-19@gated-at.bofh.it> |
| In reply to | #1570636 |
On 01/31/2017 03:45 AM, Yuriy Kolerov wrote: > A summary: > > * Use build registers for getting numbers of interrupts both for > core interrupt controller and for IDU interrupt controller. > * Set a default priority for all core interrupt to prevent > unexpected switching of banks of registers. > * Remove option for setting number of interrupts since it does > not affect a number of interrupts in IRQ domains and breaks > portability since it is impossible to change size of table of > interrupts after linkage. > > Change in v2: > > * Squash some commits. > * Do not move a structure for control register of core intc to > the header since it is used only once. > > Yuriy Kolerov (4): > ARCv2: IRQ: Move structure for build register of core intc to the > header > ARCv2: IRQ: Remove option for setting number of interrupts > ARCv2: IRQ: Use build registers for getting numbers of interrupts > ARCv2: IRQ: Set a default priority for all core interrupts > > arch/arc/Kconfig | 11 ----------- > arch/arc/include/asm/arcregs.h | 11 +++++++++++ > arch/arc/include/asm/irq.h | 32 +++++++++++++++++++++++++++++--- > arch/arc/kernel/entry-arcv2.S | 3 ++- > arch/arc/kernel/intc-arcv2.c | 31 ++++++++++++++++++++----------- > arch/arc/kernel/mcip.c | 31 +++++++++++++++++++------------ > include/soc/arc/mcip.h | 17 +++++++++++++++++ > 7 files changed, 98 insertions(+), 38 deletions(-) > Hi Yuriy, I've reworked your series a bit and pushed to my for-next. Care to take a look please. Thx, -Vineet
[toc] | [prev] | [next] | [standalone]
| From | Yuriy Kolerov <Yuriy.Kolerov@synopsys.com> |
|---|---|
| Date | 2017-02-02 01:00 +0100 |
| Subject | RE: [PATCH v2 0/4] Use build registers for getting numbers of interrupts |
| Message-ID | <t6cYF-4rB-7@gated-at.bofh.it> |
| In reply to | #1571973 |
Hi Vineet, I have checked reworked patches. I think it is fine. > -----Original Message----- > From: Vineet Gupta [mailto:vgupta@synopsys.com] > Sent: Wednesday, February 01, 2017 11:58 PM > To: Yuriy Kolerov <yuriy.kolerov@synopsys.com>; linux-snps- > arc@lists.infradead.org > Cc: Alexey.Brodkin@synopsys.com; linux-kernel@vger.kernel.org > Subject: Re: [PATCH v2 0/4] Use build registers for getting numbers of > interrupts > > On 01/31/2017 03:45 AM, Yuriy Kolerov wrote: > > A summary: > > > > * Use build registers for getting numbers of interrupts both for > > core interrupt controller and for IDU interrupt controller. > > * Set a default priority for all core interrupt to prevent > > unexpected switching of banks of registers. > > * Remove option for setting number of interrupts since it does > > not affect a number of interrupts in IRQ domains and breaks > > portability since it is impossible to change size of table of > > interrupts after linkage. > > > > Change in v2: > > > > * Squash some commits. > > * Do not move a structure for control register of core intc to > > the header since it is used only once. > > > > Yuriy Kolerov (4): > > ARCv2: IRQ: Move structure for build register of core intc to the > > header > > ARCv2: IRQ: Remove option for setting number of interrupts > > ARCv2: IRQ: Use build registers for getting numbers of interrupts > > ARCv2: IRQ: Set a default priority for all core interrupts > > > > arch/arc/Kconfig | 11 ----------- > > arch/arc/include/asm/arcregs.h | 11 +++++++++++ > > arch/arc/include/asm/irq.h | 32 +++++++++++++++++++++++++++++--- > > arch/arc/kernel/entry-arcv2.S | 3 ++- > > arch/arc/kernel/intc-arcv2.c | 31 ++++++++++++++++++++----------- > > arch/arc/kernel/mcip.c | 31 +++++++++++++++++++------------ > > include/soc/arc/mcip.h | 17 +++++++++++++++++ > > 7 files changed, 98 insertions(+), 38 deletions(-) > > > > Hi Yuriy, > > I've reworked your series a bit and pushed to my for-next. > > Care to take a look please. > > Thx, > -Vineet
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web