Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1229733 > unrolled thread
| Started by | Robert Richter <rric@kernel.org> |
|---|---|
| First post | 2015-09-21 23:00 +0200 |
| Last post | 2015-09-24 19:00 +0200 |
| Articles | 14 — 5 participants |
Back to article view | Back to linux.kernel
[PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds Robert Richter <rric@kernel.org> - 2015-09-21 23:00 +0200
[PATCH v5 4/6] irqchip, gicv3-its: Add HW revision detection and configuration Robert Richter <rric@kernel.org> - 2015-09-21 23:10 +0200
Re: [PATCH v5 4/6] irqchip, gicv3-its: Add HW revision detection and configuration Marc Zyngier <marc.zyngier@arm.com> - 2015-09-22 19:00 +0200
[tip:irq/core] irqchip/gicv3-its: Add HW revision detection and configuration tip-bot for Robert Richter <tipbot@zytor.com> - 2015-09-29 10:20 +0200
[PATCH v5 1/6] irqchip, gicv3-its: Add range check for number of allocated pages Robert Richter <rric@kernel.org> - 2015-09-21 23:10 +0200
[tip:irq/core] irqchip/gicv3-its: Add range check for number of allocated pages tip-bot for Robert Richter <tipbot@zytor.com> - 2015-09-29 10:20 +0200
[PATCH v5 2/6] irqchip, gicv3: Workaround for Cavium ThunderX erratum 23154 Robert Richter <rric@kernel.org> - 2015-09-21 23:10 +0200
Re: [PATCH v5 2/6] irqchip, gicv3: Workaround for Cavium ThunderX erratum 23154 Marc Zyngier <marc.zyngier@arm.com> - 2015-09-22 19:00 +0200
[tip:irq/core] irqchip/gicv3: Workaround for Cavium ThunderX erratum 23154 tip-bot for Robert Richter <tipbot@zytor.com> - 2015-09-29 10:20 +0200
Re: [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds Marc Zyngier <marc.zyngier@arm.com> - 2015-09-22 19:00 +0200
Re: [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds Marc Zyngier <marc.zyngier@arm.com> - 2015-09-22 20:10 +0200
Re: [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds Will Deacon <will.deacon@arm.com> - 2015-09-22 20:30 +0200
Re: [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds Marc Zyngier <marc.zyngier@arm.com> - 2015-09-22 21:50 +0200
Re: [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds Catalin Marinas <catalin.marinas@arm.com> - 2015-09-24 19:00 +0200
| From | Robert Richter <rric@kernel.org> |
|---|---|
| Date | 2015-09-21 23:00 +0200 |
| Subject | [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds |
| Message-ID | <qbglQ-Z6-17@gated-at.bofh.it> |
From: Robert Richter <rrichter@cavium.com> This patch series adds gicv3 updates and workarounds for HW errata in Cavium's ThunderX GICV3. The patches has been rebased onto 4.3-rc1. Note that there are two important fixes. See below for all changes. The first one is an unchanged resubmission of a patch from a gicv3 series I sent a while ago. The next patches implement the workarounds for ThunderX's gicv3. Patch #2 implements the cpu workaround for gicv3 on ThunderX. Patch #3 is a prerequisit for patch #5. Patch #4 adds generic code to parse the hw revision provided by an IIDR. This patch is used for the implementa- tion of the actual gicv3-its workaround in #5. Patch #6 updates to the new jump label API. All current review comments addressed so far with v5 v5: * fixed calling gic_read_iar_cavium_thunderx() if jump label is enabled * fix table size wrongly allocating only 4MB * made is_cavium_thunderx static * removed ARCH_THUNDER dependency for Cavium errata options to make it available for generic kernels * renamed caps names to quirk * introduced CAVIUM_ERRATUM_22375 config option * introduced ITS_FLAGS_WORKAROUND_CAVIUM_22375 * added config descriptions * update to new jump label API v4: * simplify code to only use cpus_have_cap() in gicv3_enable_quirks() * only enable hw detection for its in its_enable_quirks() * removed gicv3_check_capabilities() * drop special cpu capability for zero v3: * use arm64 errata framework for midr check * fix mixup of errata to be dependend from midr/iidr v2: * Workaround for 23154: * implement code in a single asm() to keep instruction sequence * added comment to the code that explains the erratum * apply workaround also if running as guest, thus check MIDR * adding MIDR check Robert Richter (6): irqchip, gicv3-its: Add range check for number of allocated pages irqchip, gicv3: Workaround for Cavium ThunderX erratum 23154 irqchip, gicv3-its: Read typer register outside the loop irqchip, gicv3-its: Add HW revision detection and configuration irqchip, gicv3-its: Workaround for Cavium ThunderX errata 22375, 24313 irqchip, gicv3-its: Use new jump label API arch/arm64/Kconfig | 27 +++++++++++++++ arch/arm64/include/asm/cpufeature.h | 3 +- arch/arm64/include/asm/cputype.h | 17 ++++++---- arch/arm64/kernel/cpu_errata.c | 9 +++++ drivers/irqchip/irq-gic-common.c | 11 +++++++ drivers/irqchip/irq-gic-common.h | 9 +++++ drivers/irqchip/irq-gic-v3-its.c | 65 +++++++++++++++++++++++++++++++++---- drivers/irqchip/irq-gic-v3.c | 42 +++++++++++++++++++++++- include/linux/irqchip/arm-gic-v3.h | 1 + 9 files changed, 169 insertions(+), 15 deletions(-) -- 2.1.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Robert Richter <rric@kernel.org> |
|---|---|
| Date | 2015-09-21 23:10 +0200 |
| Subject | [PATCH v5 4/6] irqchip, gicv3-its: Add HW revision detection and configuration |
| Message-ID | <qbgvv-1pI-1@gated-at.bofh.it> |
| In reply to | #1229733 |
From: Robert Richter <rrichter@cavium.com>
Some GIC revisions require an individual configuration to esp. add
workarounds for HW bugs. This patch implements generic code to parse
the hw revision provided by an IIDR register value and runs specific
code if hw matches. A function is added that reads the IIDR registers
for ITS (GITS_IIDR) and then goes through a list of init functions to
be called for specific versions. Same could be done for GICV3
(GICD_IIDR), but there are no users yet for it.
The patch is needed to implement workarounds for HW errata in Cavium's
ThunderX GICV3 ITS.
v5:
* renamed caps names to quirk
v4:
* only enable hw detection for its in its_enable_quirks()
* removed gicv3_check_capabilities()
v3:
* use arm64 errata framework for midr check
v2:
* adding MIDR check
Signed-off-by: Robert Richter <rrichter@cavium.com>
---
drivers/irqchip/irq-gic-common.c | 11 +++++++++++
drivers/irqchip/irq-gic-common.h | 9 +++++++++
drivers/irqchip/irq-gic-v3-its.c | 16 ++++++++++++++++
3 files changed, 36 insertions(+)
diff --git a/drivers/irqchip/irq-gic-common.c b/drivers/irqchip/irq-gic-common.c
index 9448e391cb71..44a077f3a4a2 100644
--- a/drivers/irqchip/irq-gic-common.c
+++ b/drivers/irqchip/irq-gic-common.c
@@ -21,6 +21,17 @@
#include "irq-gic-common.h"
+void gic_enable_quirks(u32 iidr, const struct gic_quirk *quirks,
+ void *data)
+{
+ for (; quirks->desc; quirks++) {
+ if (quirks->iidr != (quirks->mask & iidr))
+ continue;
+ quirks->init(data);
+ pr_info("GIC: enabling workaround for %s\n", quirks->desc);
+ }
+}
+
int gic_configure_irq(unsigned int irq, unsigned int type,
void __iomem *base, void (*sync_access)(void))
{
diff --git a/drivers/irqchip/irq-gic-common.h b/drivers/irqchip/irq-gic-common.h
index 35a9884778bd..fff697db8e22 100644
--- a/drivers/irqchip/irq-gic-common.h
+++ b/drivers/irqchip/irq-gic-common.h
@@ -20,10 +20,19 @@
#include <linux/of.h>
#include <linux/irqdomain.h>
+struct gic_quirk {
+ const char *desc;
+ void (*init)(void *data);
+ u32 iidr;
+ u32 mask;
+};
+
int gic_configure_irq(unsigned int irq, unsigned int type,
void __iomem *base, void (*sync_access)(void));
void gic_dist_config(void __iomem *base, int gic_irqs,
void (*sync_access)(void));
void gic_cpu_config(void __iomem *base, void (*sync_access)(void));
+void gic_enable_quirks(u32 iidr, const struct gic_quirk *quirks,
+ void *data);
#endif /* _IRQ_GIC_COMMON_H */
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index b073f28ea00d..5c6023e80f6d 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -37,6 +37,8 @@
#include <asm/cputype.h>
#include <asm/exception.h>
+#include "irq-gic-common.h"
+
#define ITS_FLAGS_CMDQ_NEEDS_FLUSHING (1 << 0)
#define RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING (1 << 0)
@@ -1371,6 +1373,18 @@ static int its_force_quiescent(void __iomem *base)
}
}
+static const struct gic_quirk its_quirks[] = {
+ {
+ }
+};
+
+static void its_enable_quirks(struct its_node *its)
+{
+ u32 iidr = readl_relaxed(its->base + GITS_IIDR);
+
+ gic_enable_quirks(iidr, its_quirks, its);
+}
+
static int its_probe(struct device_node *node, struct irq_domain *parent)
{
struct resource res;
@@ -1429,6 +1443,8 @@ static int its_probe(struct device_node *node, struct irq_domain *parent)
}
its->cmd_write = its->cmd_base;
+ its_enable_quirks(its);
+
err = its_alloc_tables(node->full_name, its);
if (err)
goto out_free_cmd;
--
2.1.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Marc Zyngier <marc.zyngier@arm.com> |
|---|---|
| Date | 2015-09-22 19:00 +0200 |
| Subject | Re: [PATCH v5 4/6] irqchip, gicv3-its: Add HW revision detection and configuration |
| Message-ID | <qbz58-2KT-25@gated-at.bofh.it> |
| In reply to | #1229737 |
On Mon, 21 Sep 2015 22:58:37 +0200 Robert Richter <rric@kernel.org> wrote: > From: Robert Richter <rrichter@cavium.com> > > Some GIC revisions require an individual configuration to esp. add > workarounds for HW bugs. This patch implements generic code to parse > the hw revision provided by an IIDR register value and runs specific > code if hw matches. A function is added that reads the IIDR registers > for ITS (GITS_IIDR) and then goes through a list of init functions to > be called for specific versions. Same could be done for GICV3 > (GICD_IIDR), but there are no users yet for it. > > The patch is needed to implement workarounds for HW errata in Cavium's > ThunderX GICV3 ITS. > > v5: > * renamed caps names to quirk > > v4: > * only enable hw detection for its in its_enable_quirks() > * removed gicv3_check_capabilities() > > v3: > * use arm64 errata framework for midr check > > v2: > * adding MIDR check > > Signed-off-by: Robert Richter <rrichter@cavium.com> Reviewed-by: Marc Zyngier <marc.zyngier@arm.com> M. -- Jazz is not dead. It just smells funny. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Robert Richter <tipbot@zytor.com> |
|---|---|
| Date | 2015-09-29 10:20 +0200 |
| Subject | [tip:irq/core] irqchip/gicv3-its: Add HW revision detection and configuration |
| Message-ID | <qdYiJ-Pt-7@gated-at.bofh.it> |
| In reply to | #1229737 |
Commit-ID: 67510ccafb9d69e79079b5cd6c9959025bc02061
Gitweb: http://git.kernel.org/tip/67510ccafb9d69e79079b5cd6c9959025bc02061
Author: Robert Richter <rrichter@cavium.com>
AuthorDate: Mon, 21 Sep 2015 22:58:37 +0200
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Tue, 29 Sep 2015 10:10:53 +0200
irqchip/gicv3-its: Add HW revision detection and configuration
Some GIC revisions require an individual configuration to esp. add
workarounds for HW bugs. This patch implements generic code to parse
the hw revision provided by an IIDR register value and runs specific
code if hw matches. A function is added that reads the IIDR registers
for ITS (GITS_IIDR) and then goes through a list of init functions to
be called for specific versions. Same could be done for GICV3
(GICD_IIDR), but there are no users yet for it.
The patch is needed to implement workarounds for HW errata in Cavium's
ThunderX GICV3 ITS.
Signed-off-by: Robert Richter <rrichter@cavium.com>
Reviewed-by: Marc Zygnier <marc.zyngier@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Tirumalesh Chalamarla <tchalamarla@cavium.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: Jason Cooper <jason@lakedaemon.net>
Link: http://lkml.kernel.org/r/1442869119-1814-5-git-send-email-rric@kernel.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
drivers/irqchip/irq-gic-common.c | 11 +++++++++++
drivers/irqchip/irq-gic-common.h | 9 +++++++++
drivers/irqchip/irq-gic-v3-its.c | 16 ++++++++++++++++
3 files changed, 36 insertions(+)
diff --git a/drivers/irqchip/irq-gic-common.c b/drivers/irqchip/irq-gic-common.c
index 9448e39..44a077f 100644
--- a/drivers/irqchip/irq-gic-common.c
+++ b/drivers/irqchip/irq-gic-common.c
@@ -21,6 +21,17 @@
#include "irq-gic-common.h"
+void gic_enable_quirks(u32 iidr, const struct gic_quirk *quirks,
+ void *data)
+{
+ for (; quirks->desc; quirks++) {
+ if (quirks->iidr != (quirks->mask & iidr))
+ continue;
+ quirks->init(data);
+ pr_info("GIC: enabling workaround for %s\n", quirks->desc);
+ }
+}
+
int gic_configure_irq(unsigned int irq, unsigned int type,
void __iomem *base, void (*sync_access)(void))
{
diff --git a/drivers/irqchip/irq-gic-common.h b/drivers/irqchip/irq-gic-common.h
index 35a9884..fff697d 100644
--- a/drivers/irqchip/irq-gic-common.h
+++ b/drivers/irqchip/irq-gic-common.h
@@ -20,10 +20,19 @@
#include <linux/of.h>
#include <linux/irqdomain.h>
+struct gic_quirk {
+ const char *desc;
+ void (*init)(void *data);
+ u32 iidr;
+ u32 mask;
+};
+
int gic_configure_irq(unsigned int irq, unsigned int type,
void __iomem *base, void (*sync_access)(void));
void gic_dist_config(void __iomem *base, int gic_irqs,
void (*sync_access)(void));
void gic_cpu_config(void __iomem *base, void (*sync_access)(void));
+void gic_enable_quirks(u32 iidr, const struct gic_quirk *quirks,
+ void *data);
#endif /* _IRQ_GIC_COMMON_H */
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 549e716..82622af 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -37,6 +37,8 @@
#include <asm/cputype.h>
#include <asm/exception.h>
+#include "irq-gic-common.h"
+
#define ITS_FLAGS_CMDQ_NEEDS_FLUSHING (1 << 0)
#define RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING (1 << 0)
@@ -1375,6 +1377,18 @@ static int its_force_quiescent(void __iomem *base)
}
}
+static const struct gic_quirk its_quirks[] = {
+ {
+ }
+};
+
+static void its_enable_quirks(struct its_node *its)
+{
+ u32 iidr = readl_relaxed(its->base + GITS_IIDR);
+
+ gic_enable_quirks(iidr, its_quirks, its);
+}
+
static int its_probe(struct device_node *node, struct irq_domain *parent)
{
struct resource res;
@@ -1433,6 +1447,8 @@ static int its_probe(struct device_node *node, struct irq_domain *parent)
}
its->cmd_write = its->cmd_base;
+ its_enable_quirks(its);
+
err = its_alloc_tables(node->full_name, its);
if (err)
goto out_free_cmd;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Robert Richter <rric@kernel.org> |
|---|---|
| Date | 2015-09-21 23:10 +0200 |
| Subject | [PATCH v5 1/6] irqchip, gicv3-its: Add range check for number of allocated pages |
| Message-ID | <qbgvw-1pI-15@gated-at.bofh.it> |
| In reply to | #1229733 |
From: Robert Richter <rrichter@cavium.com>
The number of pages for the its table may exceed the maximum of 256.
Adding a range check and limitting the number to its maximum.
Based on a patch from Tirumalesh Chalamarla <tchalamarla@cavium.com>.
Signed-off-by: Tirumalesh Chalamarla <tchalamarla@cavium.com>
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Robert Richter <rrichter@cavium.com>
---
drivers/irqchip/irq-gic-v3-its.c | 11 ++++++++++-
include/linux/irqchip/arm-gic-v3.h | 1 +
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 26b55c53755f..0636cb33aeea 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -822,6 +822,7 @@ static int its_alloc_tables(const char *node_name, struct its_node *its)
u64 entry_size = GITS_BASER_ENTRY_SIZE(val);
int order = get_order(psz);
int alloc_size;
+ int alloc_pages;
u64 tmp;
void *base;
@@ -856,6 +857,14 @@ static int its_alloc_tables(const char *node_name, struct its_node *its)
}
alloc_size = (1 << order) * PAGE_SIZE;
+ alloc_pages = (alloc_size / psz);
+ if (alloc_pages > GITS_BASER_PAGES_MAX) {
+ alloc_pages = GITS_BASER_PAGES_MAX;
+ order = get_order(GITS_BASER_PAGES_MAX * psz);
+ pr_warn("%s: Device Table too large, reduce its page order to %u (%u pages)\n",
+ node_name, order, alloc_pages);
+ }
+
base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
if (!base) {
err = -ENOMEM;
@@ -884,7 +893,7 @@ static int its_alloc_tables(const char *node_name, struct its_node *its)
break;
}
- val |= (alloc_size / psz) - 1;
+ val |= alloc_pages - 1;
writeq_relaxed(val, its->base + GITS_BASER + i * 8);
tmp = readq_relaxed(its->base + GITS_BASER + i * 8);
diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h
index 9eeeb9589acf..c0c8a2ef9d90 100644
--- a/include/linux/irqchip/arm-gic-v3.h
+++ b/include/linux/irqchip/arm-gic-v3.h
@@ -231,6 +231,7 @@
#define GITS_BASER_PAGE_SIZE_16K (1UL << GITS_BASER_PAGE_SIZE_SHIFT)
#define GITS_BASER_PAGE_SIZE_64K (2UL << GITS_BASER_PAGE_SIZE_SHIFT)
#define GITS_BASER_PAGE_SIZE_MASK (3UL << GITS_BASER_PAGE_SIZE_SHIFT)
+#define GITS_BASER_PAGES_MAX 256
#define GITS_BASER_TYPE_NONE 0
#define GITS_BASER_TYPE_DEVICE 1
--
2.1.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Robert Richter <tipbot@zytor.com> |
|---|---|
| Date | 2015-09-29 10:20 +0200 |
| Subject | [tip:irq/core] irqchip/gicv3-its: Add range check for number of allocated pages |
| Message-ID | <qdYiK-Pt-13@gated-at.bofh.it> |
| In reply to | #1229740 |
Commit-ID: 30f2136346cab91e1ffd9ee6370d76809f20487a
Gitweb: http://git.kernel.org/tip/30f2136346cab91e1ffd9ee6370d76809f20487a
Author: Robert Richter <rrichter@cavium.com>
AuthorDate: Mon, 21 Sep 2015 22:58:34 +0200
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Tue, 29 Sep 2015 10:10:53 +0200
irqchip/gicv3-its: Add range check for number of allocated pages
The number of pages for the its table may exceed the maximum of 256.
Adding a range check and limitting the number to its maximum.
Based on a patch from Tirumalesh Chalamarla <tchalamarla@cavium.com>.
Signed-off-by: Tirumalesh Chalamarla <tchalamarla@cavium.com>
Signed-off-by: Robert Richter <rrichter@cavium.com>
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: Jason Cooper <jason@lakedaemon.net>
Link: http://lkml.kernel.org/r/1442869119-1814-2-git-send-email-rric@kernel.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
drivers/irqchip/irq-gic-v3-its.c | 11 ++++++++++-
include/linux/irqchip/arm-gic-v3.h | 1 +
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index ac7ae2b..d9052fd 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -822,6 +822,7 @@ static int its_alloc_tables(const char *node_name, struct its_node *its)
u64 entry_size = GITS_BASER_ENTRY_SIZE(val);
int order = get_order(psz);
int alloc_size;
+ int alloc_pages;
u64 tmp;
void *base;
@@ -856,6 +857,14 @@ static int its_alloc_tables(const char *node_name, struct its_node *its)
}
alloc_size = (1 << order) * PAGE_SIZE;
+ alloc_pages = (alloc_size / psz);
+ if (alloc_pages > GITS_BASER_PAGES_MAX) {
+ alloc_pages = GITS_BASER_PAGES_MAX;
+ order = get_order(GITS_BASER_PAGES_MAX * psz);
+ pr_warn("%s: Device Table too large, reduce its page order to %u (%u pages)\n",
+ node_name, order, alloc_pages);
+ }
+
base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
if (!base) {
err = -ENOMEM;
@@ -884,7 +893,7 @@ retry_baser:
break;
}
- val |= (alloc_size / psz) - 1;
+ val |= alloc_pages - 1;
writeq_relaxed(val, its->base + GITS_BASER + i * 8);
tmp = readq_relaxed(its->base + GITS_BASER + i * 8);
diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h
index 9eeeb95..c0c8a2e 100644
--- a/include/linux/irqchip/arm-gic-v3.h
+++ b/include/linux/irqchip/arm-gic-v3.h
@@ -231,6 +231,7 @@
#define GITS_BASER_PAGE_SIZE_16K (1UL << GITS_BASER_PAGE_SIZE_SHIFT)
#define GITS_BASER_PAGE_SIZE_64K (2UL << GITS_BASER_PAGE_SIZE_SHIFT)
#define GITS_BASER_PAGE_SIZE_MASK (3UL << GITS_BASER_PAGE_SIZE_SHIFT)
+#define GITS_BASER_PAGES_MAX 256
#define GITS_BASER_TYPE_NONE 0
#define GITS_BASER_TYPE_DEVICE 1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Robert Richter <rric@kernel.org> |
|---|---|
| Date | 2015-09-21 23:10 +0200 |
| Subject | [PATCH v5 2/6] irqchip, gicv3: Workaround for Cavium ThunderX erratum 23154 |
| Message-ID | <qbgvw-1pI-23@gated-at.bofh.it> |
| In reply to | #1229733 |
From: Robert Richter <rrichter@cavium.com>
This patch implements Cavium ThunderX erratum 23154.
The gicv3 of ThunderX requires a modified version for reading the IAR
status to ensure data synchronization. Since this is in the fast-path
and called with each interrupt, runtime patching is used using jump
label patching for smallest overhead (no-op). This is the same
technique as used for tracepoints.
v5:
* fixed calling gic_read_iar_cavium_thunderx() if jump label is
enabled
* made is_cavium_thunderx static
* removed ARCH_THUNDER dependency for Cavium errata options to
make it available for generic kernels
v4:
* simplify code to only use cpus_have_cap() in gicv3_enable_quirks()
v3:
* fix erratum to be dependend from midr
* use arm64 errata framework
v2:
* implement code in a single asm() to keep instruction sequence
* added comment to the code that explains the erratum
* apply workaround also if running as guest, thus check MIDR
Signed-off-by: Robert Richter <rrichter@cavium.com>
---
arch/arm64/Kconfig | 10 +++++++++
arch/arm64/include/asm/cpufeature.h | 3 ++-
arch/arm64/include/asm/cputype.h | 17 ++++++++-------
arch/arm64/kernel/cpu_errata.c | 9 ++++++++
drivers/irqchip/irq-gic-v3.c | 42 ++++++++++++++++++++++++++++++++++++-
5 files changed, 72 insertions(+), 9 deletions(-)
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 7d95663c0160..2e65757ae7be 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -331,6 +331,16 @@ config ARM64_ERRATUM_845719
If unsure, say Y.
+config CAVIUM_ERRATUM_23154
+ bool "Cavium erratum 23154: Access to ICC_IAR1_EL1 is not sync'ed"
+ default y
+ help
+ The gicv3 of ThunderX requires a modified version for
+ reading the IAR status to ensure data synchronization
+ (access to icc_iar1_el1 is not sync'ed before and after).
+
+ If unsure, say Y.
+
endmenu
diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
index 171570702bb8..dbc78d2b8cc6 100644
--- a/arch/arm64/include/asm/cpufeature.h
+++ b/arch/arm64/include/asm/cpufeature.h
@@ -27,8 +27,9 @@
#define ARM64_HAS_SYSREG_GIC_CPUIF 3
#define ARM64_HAS_PAN 4
#define ARM64_HAS_LSE_ATOMICS 5
+#define ARM64_WORKAROUND_CAVIUM_23154 6
-#define ARM64_NCAPS 6
+#define ARM64_NCAPS 7
#ifndef __ASSEMBLY__
diff --git a/arch/arm64/include/asm/cputype.h b/arch/arm64/include/asm/cputype.h
index ee6403df9fe4..100a3d1b17c8 100644
--- a/arch/arm64/include/asm/cputype.h
+++ b/arch/arm64/include/asm/cputype.h
@@ -62,15 +62,18 @@
(0xf << MIDR_ARCHITECTURE_SHIFT) | \
((partnum) << MIDR_PARTNUM_SHIFT))
-#define ARM_CPU_IMP_ARM 0x41
-#define ARM_CPU_IMP_APM 0x50
+#define ARM_CPU_IMP_ARM 0x41
+#define ARM_CPU_IMP_APM 0x50
+#define ARM_CPU_IMP_CAVIUM 0x43
-#define ARM_CPU_PART_AEM_V8 0xD0F
-#define ARM_CPU_PART_FOUNDATION 0xD00
-#define ARM_CPU_PART_CORTEX_A57 0xD07
-#define ARM_CPU_PART_CORTEX_A53 0xD03
+#define ARM_CPU_PART_AEM_V8 0xD0F
+#define ARM_CPU_PART_FOUNDATION 0xD00
+#define ARM_CPU_PART_CORTEX_A57 0xD07
+#define ARM_CPU_PART_CORTEX_A53 0xD03
-#define APM_CPU_PART_POTENZA 0x000
+#define APM_CPU_PART_POTENZA 0x000
+
+#define CAVIUM_CPU_PART_THUNDERX 0x0A1
#define ID_AA64MMFR0_BIGENDEL0_SHIFT 16
#define ID_AA64MMFR0_BIGENDEL0_MASK (0xf << ID_AA64MMFR0_BIGENDEL0_SHIFT)
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
index 6ffd91438560..574450c257a4 100644
--- a/arch/arm64/kernel/cpu_errata.c
+++ b/arch/arm64/kernel/cpu_errata.c
@@ -23,6 +23,7 @@
#define MIDR_CORTEX_A53 MIDR_CPU_PART(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53)
#define MIDR_CORTEX_A57 MIDR_CPU_PART(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57)
+#define MIDR_THUNDERX MIDR_CPU_PART(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX)
#define CPU_MODEL_MASK (MIDR_IMPLEMENTOR_MASK | MIDR_PARTNUM_MASK | \
MIDR_ARCHITECTURE_MASK)
@@ -82,6 +83,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
MIDR_RANGE(MIDR_CORTEX_A53, 0x00, 0x04),
},
#endif
+#ifdef CONFIG_CAVIUM_ERRATUM_23154
+ {
+ /* Cavium ThunderX, pass 1.x */
+ .desc = "Cavium erratum 23154",
+ .capability = ARM64_WORKAROUND_CAVIUM_23154,
+ MIDR_RANGE(MIDR_THUNDERX, 0x00, 0x01),
+ },
+#endif
{
}
};
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index 7deed6ef54c2..5899e471df4c 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -114,7 +114,7 @@ static void gic_redist_wait_for_rwp(void)
}
/* Low level accessors */
-static u64 __maybe_unused gic_read_iar(void)
+static u64 gic_read_iar_common(void)
{
u64 irqstat;
@@ -122,6 +122,38 @@ static u64 __maybe_unused gic_read_iar(void)
return irqstat;
}
+/*
+ * Cavium ThunderX erratum 23154
+ *
+ * The gicv3 of ThunderX requires a modified version for reading the
+ * IAR status to ensure data synchronization (access to icc_iar1_el1
+ * is not sync'ed before and after).
+ */
+static u64 gic_read_iar_cavium_thunderx(void)
+{
+ u64 irqstat;
+
+ asm volatile(
+ "nop;nop;nop;nop\n\t"
+ "nop;nop;nop;nop\n\t"
+ "mrs_s %0, " __stringify(ICC_IAR1_EL1) "\n\t"
+ "nop;nop;nop;nop"
+ : "=r" (irqstat));
+ mb();
+
+ return irqstat;
+}
+
+static struct static_key is_cavium_thunderx = STATIC_KEY_INIT_FALSE;
+
+static u64 __maybe_unused gic_read_iar(void)
+{
+ if (static_key_false(&is_cavium_thunderx))
+ return gic_read_iar_cavium_thunderx();
+ else
+ return gic_read_iar_common();
+}
+
static void __maybe_unused gic_write_pmr(u64 val)
{
asm volatile("msr_s " __stringify(ICC_PMR_EL1) ", %0" : : "r" (val));
@@ -839,6 +871,12 @@ static const struct irq_domain_ops gic_irq_domain_ops = {
.free = gic_irq_domain_free,
};
+static void gicv3_enable_quirks(void)
+{
+ if (cpus_have_cap(ARM64_WORKAROUND_CAVIUM_23154))
+ static_key_slow_inc(&is_cavium_thunderx);
+}
+
static int __init gic_of_init(struct device_node *node, struct device_node *parent)
{
void __iomem *dist_base;
@@ -904,6 +942,8 @@ static int __init gic_of_init(struct device_node *node, struct device_node *pare
gic_data.nr_redist_regions = nr_redist_regions;
gic_data.redist_stride = redist_stride;
+ gicv3_enable_quirks();
+
/*
* Find out how many interrupts are supported.
* The GIC only supports up to 1020 interrupt sources (SGI+PPI+SPI)
--
2.1.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Marc Zyngier <marc.zyngier@arm.com> |
|---|---|
| Date | 2015-09-22 19:00 +0200 |
| Subject | Re: [PATCH v5 2/6] irqchip, gicv3: Workaround for Cavium ThunderX erratum 23154 |
| Message-ID | <qbz5b-2KT-65@gated-at.bofh.it> |
| In reply to | #1229742 |
On Mon, 21 Sep 2015 22:58:35 +0200 Robert Richter <rric@kernel.org> wrote: > From: Robert Richter <rrichter@cavium.com> > > This patch implements Cavium ThunderX erratum 23154. > > The gicv3 of ThunderX requires a modified version for reading the IAR > status to ensure data synchronization. Since this is in the fast-path > and called with each interrupt, runtime patching is used using jump > label patching for smallest overhead (no-op). This is the same > technique as used for tracepoints. > > v5: > * fixed calling gic_read_iar_cavium_thunderx() if jump label is > enabled > * made is_cavium_thunderx static > * removed ARCH_THUNDER dependency for Cavium errata options to > make it available for generic kernels > > v4: > * simplify code to only use cpus_have_cap() in gicv3_enable_quirks() > > v3: > * fix erratum to be dependend from midr > * use arm64 errata framework > > v2: > * implement code in a single asm() to keep instruction sequence > * added comment to the code that explains the erratum > * apply workaround also if running as guest, thus check MIDR > > Signed-off-by: Robert Richter <rrichter@cavium.com> Reviewed-by: Marc Zyngier <marc.zyngier@arm.com> M. -- Jazz is not dead. It just smells funny. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Robert Richter <tipbot@zytor.com> |
|---|---|
| Date | 2015-09-29 10:20 +0200 |
| Subject | [tip:irq/core] irqchip/gicv3: Workaround for Cavium ThunderX erratum 23154 |
| Message-ID | <qdYiK-Pt-11@gated-at.bofh.it> |
| In reply to | #1229742 |
Commit-ID: 6d4e11c5e2e8cd54a035ba395bf8ccfa7e22cfd8
Gitweb: http://git.kernel.org/tip/6d4e11c5e2e8cd54a035ba395bf8ccfa7e22cfd8
Author: Robert Richter <rrichter@cavium.com>
AuthorDate: Mon, 21 Sep 2015 22:58:35 +0200
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Tue, 29 Sep 2015 10:10:53 +0200
irqchip/gicv3: Workaround for Cavium ThunderX erratum 23154
This patch implements Cavium ThunderX erratum 23154.
The gicv3 of ThunderX requires a modified version for reading the IAR
status to ensure data synchronization. Since this is in the fast-path
and called with each interrupt, runtime patching is used using jump
label patching for smallest overhead (no-op). This is the same
technique as used for tracepoints.
Signed-off-by: Robert Richter <rrichter@cavium.com>
Reviewed-by: Marc Zygnier <marc.zyngier@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Tirumalesh Chalamarla <tchalamarla@cavium.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Will Deacon <will.deacon@arm.com>
Link: http://lkml.kernel.org/r/1442869119-1814-3-git-send-email-rric@kernel.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/arm64/Kconfig | 10 +++++++++
arch/arm64/include/asm/cpufeature.h | 3 ++-
arch/arm64/include/asm/cputype.h | 17 ++++++++-------
arch/arm64/kernel/cpu_errata.c | 9 ++++++++
drivers/irqchip/irq-gic-v3.c | 42 ++++++++++++++++++++++++++++++++++++-
5 files changed, 72 insertions(+), 9 deletions(-)
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 07d1811..490df44 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -348,6 +348,16 @@ config ARM64_ERRATUM_843419
If unsure, say Y.
+config CAVIUM_ERRATUM_23154
+ bool "Cavium erratum 23154: Access to ICC_IAR1_EL1 is not sync'ed"
+ default y
+ help
+ The gicv3 of ThunderX requires a modified version for
+ reading the IAR status to ensure data synchronization
+ (access to icc_iar1_el1 is not sync'ed before and after).
+
+ If unsure, say Y.
+
endmenu
diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
index 1715707..dbc78d2 100644
--- a/arch/arm64/include/asm/cpufeature.h
+++ b/arch/arm64/include/asm/cpufeature.h
@@ -27,8 +27,9 @@
#define ARM64_HAS_SYSREG_GIC_CPUIF 3
#define ARM64_HAS_PAN 4
#define ARM64_HAS_LSE_ATOMICS 5
+#define ARM64_WORKAROUND_CAVIUM_23154 6
-#define ARM64_NCAPS 6
+#define ARM64_NCAPS 7
#ifndef __ASSEMBLY__
diff --git a/arch/arm64/include/asm/cputype.h b/arch/arm64/include/asm/cputype.h
index ee6403d..100a3d1 100644
--- a/arch/arm64/include/asm/cputype.h
+++ b/arch/arm64/include/asm/cputype.h
@@ -62,15 +62,18 @@
(0xf << MIDR_ARCHITECTURE_SHIFT) | \
((partnum) << MIDR_PARTNUM_SHIFT))
-#define ARM_CPU_IMP_ARM 0x41
-#define ARM_CPU_IMP_APM 0x50
+#define ARM_CPU_IMP_ARM 0x41
+#define ARM_CPU_IMP_APM 0x50
+#define ARM_CPU_IMP_CAVIUM 0x43
-#define ARM_CPU_PART_AEM_V8 0xD0F
-#define ARM_CPU_PART_FOUNDATION 0xD00
-#define ARM_CPU_PART_CORTEX_A57 0xD07
-#define ARM_CPU_PART_CORTEX_A53 0xD03
+#define ARM_CPU_PART_AEM_V8 0xD0F
+#define ARM_CPU_PART_FOUNDATION 0xD00
+#define ARM_CPU_PART_CORTEX_A57 0xD07
+#define ARM_CPU_PART_CORTEX_A53 0xD03
-#define APM_CPU_PART_POTENZA 0x000
+#define APM_CPU_PART_POTENZA 0x000
+
+#define CAVIUM_CPU_PART_THUNDERX 0x0A1
#define ID_AA64MMFR0_BIGENDEL0_SHIFT 16
#define ID_AA64MMFR0_BIGENDEL0_MASK (0xf << ID_AA64MMFR0_BIGENDEL0_SHIFT)
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
index 6ffd914..574450c 100644
--- a/arch/arm64/kernel/cpu_errata.c
+++ b/arch/arm64/kernel/cpu_errata.c
@@ -23,6 +23,7 @@
#define MIDR_CORTEX_A53 MIDR_CPU_PART(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53)
#define MIDR_CORTEX_A57 MIDR_CPU_PART(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57)
+#define MIDR_THUNDERX MIDR_CPU_PART(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX)
#define CPU_MODEL_MASK (MIDR_IMPLEMENTOR_MASK | MIDR_PARTNUM_MASK | \
MIDR_ARCHITECTURE_MASK)
@@ -82,6 +83,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
MIDR_RANGE(MIDR_CORTEX_A53, 0x00, 0x04),
},
#endif
+#ifdef CONFIG_CAVIUM_ERRATUM_23154
+ {
+ /* Cavium ThunderX, pass 1.x */
+ .desc = "Cavium erratum 23154",
+ .capability = ARM64_WORKAROUND_CAVIUM_23154,
+ MIDR_RANGE(MIDR_THUNDERX, 0x00, 0x01),
+ },
+#endif
{
}
};
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index 36ecfc8..eecec71 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -109,7 +109,7 @@ static void gic_redist_wait_for_rwp(void)
}
/* Low level accessors */
-static u64 __maybe_unused gic_read_iar(void)
+static u64 gic_read_iar_common(void)
{
u64 irqstat;
@@ -117,6 +117,38 @@ static u64 __maybe_unused gic_read_iar(void)
return irqstat;
}
+/*
+ * Cavium ThunderX erratum 23154
+ *
+ * The gicv3 of ThunderX requires a modified version for reading the
+ * IAR status to ensure data synchronization (access to icc_iar1_el1
+ * is not sync'ed before and after).
+ */
+static u64 gic_read_iar_cavium_thunderx(void)
+{
+ u64 irqstat;
+
+ asm volatile(
+ "nop;nop;nop;nop\n\t"
+ "nop;nop;nop;nop\n\t"
+ "mrs_s %0, " __stringify(ICC_IAR1_EL1) "\n\t"
+ "nop;nop;nop;nop"
+ : "=r" (irqstat));
+ mb();
+
+ return irqstat;
+}
+
+static struct static_key is_cavium_thunderx = STATIC_KEY_INIT_FALSE;
+
+static u64 __maybe_unused gic_read_iar(void)
+{
+ if (static_key_false(&is_cavium_thunderx))
+ return gic_read_iar_cavium_thunderx();
+ else
+ return gic_read_iar_common();
+}
+
static void __maybe_unused gic_write_pmr(u64 val)
{
asm volatile("msr_s " __stringify(ICC_PMR_EL1) ", %0" : : "r" (val));
@@ -836,6 +868,12 @@ static const struct irq_domain_ops gic_irq_domain_ops = {
.free = gic_irq_domain_free,
};
+static void gicv3_enable_quirks(void)
+{
+ if (cpus_have_cap(ARM64_WORKAROUND_CAVIUM_23154))
+ static_key_slow_inc(&is_cavium_thunderx);
+}
+
static int __init gic_of_init(struct device_node *node, struct device_node *parent)
{
void __iomem *dist_base;
@@ -901,6 +939,8 @@ static int __init gic_of_init(struct device_node *node, struct device_node *pare
gic_data.nr_redist_regions = nr_redist_regions;
gic_data.redist_stride = redist_stride;
+ gicv3_enable_quirks();
+
/*
* Find out how many interrupts are supported.
* The GIC only supports up to 1020 interrupt sources (SGI+PPI+SPI)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Marc Zyngier <marc.zyngier@arm.com> |
|---|---|
| Date | 2015-09-22 19:00 +0200 |
| Subject | Re: [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds |
| Message-ID | <qbz5c-2KT-99@gated-at.bofh.it> |
| In reply to | #1229733 |
On Mon, 21 Sep 2015 22:58:33 +0200 Robert Richter <rric@kernel.org> wrote: > From: Robert Richter <rrichter@cavium.com> > > This patch series adds gicv3 updates and workarounds for HW errata in > Cavium's ThunderX GICV3. > > The patches has been rebased onto 4.3-rc1. Note that there are two > important fixes. See below for all changes. > > The first one is an unchanged resubmission of a patch from a gicv3 > series I sent a while ago. > > The next patches implement the workarounds for ThunderX's gicv3. Patch > #2 implements the cpu workaround for gicv3 on ThunderX. Patch #3 is a > prerequisit for patch #5. Patch #4 adds generic code to parse the hw > revision provided by an IIDR. This patch is used for the implementa- > tion of the actual gicv3-its workaround in #5. Patch #6 updates to the > new jump label API. > > All current review comments addressed so far with v5 Catalin, Will: assuming you don't have any objection to this series, how do you want to deal with patch 2? Thanks, M. -- Jazz is not dead. It just smells funny. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Marc Zyngier <marc.zyngier@arm.com> |
|---|---|
| Date | 2015-09-22 20:10 +0200 |
| Subject | Re: [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds |
| Message-ID | <qbAaU-4xo-95@gated-at.bofh.it> |
| In reply to | #1230495 |
On Tue, 22 Sep 2015 17:57:01 +0100 Marc Zyngier <marc.zyngier@arm.com> wrote: [Duh. Now with Will and Catalin on CC] > On Mon, 21 Sep 2015 22:58:33 +0200 > Robert Richter <rric@kernel.org> wrote: > > > From: Robert Richter <rrichter@cavium.com> > > > > This patch series adds gicv3 updates and workarounds for HW errata in > > Cavium's ThunderX GICV3. > > > > The patches has been rebased onto 4.3-rc1. Note that there are two > > important fixes. See below for all changes. > > > > The first one is an unchanged resubmission of a patch from a gicv3 > > series I sent a while ago. > > > > The next patches implement the workarounds for ThunderX's gicv3. Patch > > #2 implements the cpu workaround for gicv3 on ThunderX. Patch #3 is a > > prerequisit for patch #5. Patch #4 adds generic code to parse the hw > > revision provided by an IIDR. This patch is used for the implementa- > > tion of the actual gicv3-its workaround in #5. Patch #6 updates to the > > new jump label API. > > > > All current review comments addressed so far with v5 > > Catalin, Will: assuming you don't have any objection to this series, > how do you want to deal with patch 2? > > Thanks, > > M. -- Jazz is not dead. It just smells funny. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Will Deacon <will.deacon@arm.com> |
|---|---|
| Date | 2015-09-22 20:30 +0200 |
| Subject | Re: [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds |
| Message-ID | <qbAue-4UA-13@gated-at.bofh.it> |
| In reply to | #1230622 |
On Tue, Sep 22, 2015 at 07:09:32PM +0100, Marc Zyngier wrote: > On Tue, 22 Sep 2015 17:57:01 +0100 > Marc Zyngier <marc.zyngier@arm.com> wrote: > > [Duh. Now with Will and Catalin on CC] > > > On Mon, 21 Sep 2015 22:58:33 +0200 > > Robert Richter <rric@kernel.org> wrote: > > > > > From: Robert Richter <rrichter@cavium.com> > > > > > > This patch series adds gicv3 updates and workarounds for HW errata in > > > Cavium's ThunderX GICV3. > > > > > > The patches has been rebased onto 4.3-rc1. Note that there are two > > > important fixes. See below for all changes. > > > > > > The first one is an unchanged resubmission of a patch from a gicv3 > > > series I sent a while ago. > > > > > > The next patches implement the workarounds for ThunderX's gicv3. Patch > > > #2 implements the cpu workaround for gicv3 on ThunderX. Patch #3 is a > > > prerequisit for patch #5. Patch #4 adds generic code to parse the hw > > > revision provided by an IIDR. This patch is used for the implementa- > > > tion of the actual gicv3-its workaround in #5. Patch #6 updates to the > > > new jump label API. > > > > > > All current review comments addressed so far with v5 > > > > Catalin, Will: assuming you don't have any objection to this series, > > how do you want to deal with patch 2? What are the actual dependencies here? AFAICT, the series is addressing multiple errata, so would it be possible to make the arm64 bits somewhat independent from the gic parts? Also, I assume this is targetting 4.4? Will -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Marc Zyngier <marc.zyngier@arm.com> |
|---|---|
| Date | 2015-09-22 21:50 +0200 |
| Subject | Re: [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds |
| Message-ID | <qbBJE-6EK-9@gated-at.bofh.it> |
| In reply to | #1230668 |
On Tue, 22 Sep 2015 19:27:26 +0100 Will Deacon <will.deacon@arm.com> wrote: > On Tue, Sep 22, 2015 at 07:09:32PM +0100, Marc Zyngier wrote: > > On Tue, 22 Sep 2015 17:57:01 +0100 > > Marc Zyngier <marc.zyngier@arm.com> wrote: > > > > [Duh. Now with Will and Catalin on CC] > > > > > On Mon, 21 Sep 2015 22:58:33 +0200 > > > Robert Richter <rric@kernel.org> wrote: > > > > > > > From: Robert Richter <rrichter@cavium.com> > > > > > > > > This patch series adds gicv3 updates and workarounds for HW errata in > > > > Cavium's ThunderX GICV3. > > > > > > > > The patches has been rebased onto 4.3-rc1. Note that there are two > > > > important fixes. See below for all changes. > > > > > > > > The first one is an unchanged resubmission of a patch from a gicv3 > > > > series I sent a while ago. > > > > > > > > The next patches implement the workarounds for ThunderX's gicv3. Patch > > > > #2 implements the cpu workaround for gicv3 on ThunderX. Patch #3 is a > > > > prerequisit for patch #5. Patch #4 adds generic code to parse the hw > > > > revision provided by an IIDR. This patch is used for the implementa- > > > > tion of the actual gicv3-its workaround in #5. Patch #6 updates to the > > > > new jump label API. > > > > > > > > All current review comments addressed so far with v5 > > > > > > Catalin, Will: assuming you don't have any objection to this series, > > > how do you want to deal with patch 2? > > What are the actual dependencies here? AFAICT, the series is addressing > multiple errata, so would it be possible to make the arm64 bits somewhat > independent from the gic parts? Patch 2 could be split into an arm64-specific part and a gic part, with a bit of #ifdef-ery in gicv3_enable_quirks(). > Also, I assume this is targetting 4.4? Up to you, really. It is not a regression, but it would still be nice to have 4.3 working reliably on this HW. Thanks, M. -- Jazz is not dead. It just smells funny. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Catalin Marinas <catalin.marinas@arm.com> |
|---|---|
| Date | 2015-09-24 19:00 +0200 |
| Subject | Re: [PATCH v5 0/6] irqchip, gicv3: Updates and Cavium ThunderX errata workarounds |
| Message-ID | <qci2e-rV-17@gated-at.bofh.it> |
| In reply to | #1230867 |
On Tue, Sep 22, 2015 at 08:41:34PM +0100, Marc Zyngier wrote: > On Tue, 22 Sep 2015 19:27:26 +0100 > Will Deacon <will.deacon@arm.com> wrote: > > On Tue, Sep 22, 2015 at 07:09:32PM +0100, Marc Zyngier wrote: > > > > Catalin, Will: assuming you don't have any objection to this series, > > > > how do you want to deal with patch 2? > > > > What are the actual dependencies here? AFAICT, the series is addressing > > multiple errata, so would it be possible to make the arm64 bits somewhat > > independent from the gic parts? > > Patch 2 could be split into an arm64-specific part and a gic part, with > a bit of #ifdef-ery in gicv3_enable_quirks(). The arm64 part without CONFIG_CAVIUM_ERRATUM_* wouldn't cause any problem. Anyway, I'm not too bothered about separate patches, I think the whole series could go in via a single tree (irqchip). > > Also, I assume this is targetting 4.4? > > Up to you, really. It is not a regression, but it would still be nice > to have 4.3 working reliably on this HW. I don't have any objection to this patchset but it looks like quite a lot of code for 4.3 and it is not a regression. Anyway, for the arch/arm64 bits: Acked-by: Catalin Marinas <catalin.marinas@arm.com> -- Catalin -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web