ARM: SoC fixes for 3.11
Two straggling fixes that I had missed as they were posted a couple of weeks ago, causing problems with interrupts (breaking them completely) on the CSR SiRF platforms. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJSH/KHAAoJEIwa5zzehBx3IEUQAIby2mOq5BGo0pss8Hv2yvBJ Q71zTfPB9ag1fgPI1Tmz8T0zWxt3Zl7ynXYGUo43tMaOgCVZUgK5UKOT255DiF8y 7N7+RJCf3obHDh/3RfBZL3fu75yC8mkQHu67/fRnVVun59MhqsAmxWJLZkoeC0O2 8AjIULFCN+OaLkqQx75Ti0PV5KgQIW559sx1JLnDaPq0siS7FMOIpMGxQFQvXuLc JFNWKazUSzHGZyAuXRMRs7+dzzuVbBaPuecLea2GlFqpRsUsEMUdsvWWhYwCZhRp UZ+dP88D9d7XZonjn/KIlEn03X1NglsSg0yf+7Ad11cOHqAHHeZh1xHSJTLFUySR XslNsLy5nifaxphhZIfkYgem+VMY4xYLQIY8ETBSfNhZnplLMLYxLLkTUEbvXPS5 y50eSgBFnnpBktk8qaCQ0R1/sPKNufHYBkdWbBXxUCn8pDAFJnrBAFjJAZpAqZJu 9TXOEApGcH+yQdQ+V5yKc6ln8mJUnXKLR6IHoa9z+LosZEqf9uQCcSrkE1Ml7or6 mwNfvph4ka4/hWNxlHvUyTNZbtzwLkNzd13YHmo4c5zRmigLiW/ldf/4fszdxCZN KcrUvqfDey90Gg5rKktqrfv4hXPKWGYE9cMKv4eszQT1j06I6w7NkfXg4GlIDs0B kSI5NUFNVFF30i56+SPM =dbsG -----END PGP SIGNATURE----- Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc Pull ARM SoC fixes from Olof Johansson: "Two straggling fixes that I had missed as they were posted a couple of weeks ago, causing problems with interrupts (breaking them completely) on the CSR SiRF platforms" * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: arm: prima2: drop nr_irqs in mach as we moved to linear irqdomain irqchip: sirf: move from legacy mode to linear irqdomain
This commit is contained in:
commit
d9eda0fae1
2 changed files with 10 additions and 10 deletions
|
@ -42,7 +42,6 @@ static const char *atlas6_dt_match[] __initdata = {
|
||||||
|
|
||||||
DT_MACHINE_START(ATLAS6_DT, "Generic ATLAS6 (Flattened Device Tree)")
|
DT_MACHINE_START(ATLAS6_DT, "Generic ATLAS6 (Flattened Device Tree)")
|
||||||
/* Maintainer: Barry Song <baohua.song@csr.com> */
|
/* Maintainer: Barry Song <baohua.song@csr.com> */
|
||||||
.nr_irqs = 128,
|
|
||||||
.map_io = sirfsoc_map_io,
|
.map_io = sirfsoc_map_io,
|
||||||
.init_time = sirfsoc_init_time,
|
.init_time = sirfsoc_init_time,
|
||||||
.init_late = sirfsoc_init_late,
|
.init_late = sirfsoc_init_late,
|
||||||
|
@ -59,7 +58,6 @@ static const char *prima2_dt_match[] __initdata = {
|
||||||
|
|
||||||
DT_MACHINE_START(PRIMA2_DT, "Generic PRIMA2 (Flattened Device Tree)")
|
DT_MACHINE_START(PRIMA2_DT, "Generic PRIMA2 (Flattened Device Tree)")
|
||||||
/* Maintainer: Barry Song <baohua.song@csr.com> */
|
/* Maintainer: Barry Song <baohua.song@csr.com> */
|
||||||
.nr_irqs = 128,
|
|
||||||
.map_io = sirfsoc_map_io,
|
.map_io = sirfsoc_map_io,
|
||||||
.init_time = sirfsoc_init_time,
|
.init_time = sirfsoc_init_time,
|
||||||
.dma_zone_size = SZ_256M,
|
.dma_zone_size = SZ_256M,
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#define SIRFSOC_INT_RISC_LEVEL1 0x0024
|
#define SIRFSOC_INT_RISC_LEVEL1 0x0024
|
||||||
#define SIRFSOC_INIT_IRQ_ID 0x0038
|
#define SIRFSOC_INIT_IRQ_ID 0x0038
|
||||||
|
|
||||||
#define SIRFSOC_NUM_IRQS 128
|
#define SIRFSOC_NUM_IRQS 64
|
||||||
|
|
||||||
static struct irq_domain *sirfsoc_irqdomain;
|
static struct irq_domain *sirfsoc_irqdomain;
|
||||||
|
|
||||||
|
@ -32,15 +32,18 @@ sirfsoc_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num)
|
||||||
{
|
{
|
||||||
struct irq_chip_generic *gc;
|
struct irq_chip_generic *gc;
|
||||||
struct irq_chip_type *ct;
|
struct irq_chip_type *ct;
|
||||||
|
int ret;
|
||||||
|
unsigned int clr = IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_NOAUTOEN;
|
||||||
|
|
||||||
gc = irq_alloc_generic_chip("SIRFINTC", 1, irq_start, base, handle_level_irq);
|
ret = irq_alloc_domain_generic_chips(sirfsoc_irqdomain, num, 1, "irq_sirfsoc",
|
||||||
|
handle_level_irq, clr, 0, IRQ_GC_INIT_MASK_CACHE);
|
||||||
|
|
||||||
|
gc = irq_get_domain_generic_chip(sirfsoc_irqdomain, irq_start);
|
||||||
|
gc->reg_base = base;
|
||||||
ct = gc->chip_types;
|
ct = gc->chip_types;
|
||||||
|
|
||||||
ct->chip.irq_mask = irq_gc_mask_clr_bit;
|
ct->chip.irq_mask = irq_gc_mask_clr_bit;
|
||||||
ct->chip.irq_unmask = irq_gc_mask_set_bit;
|
ct->chip.irq_unmask = irq_gc_mask_set_bit;
|
||||||
ct->regs.mask = SIRFSOC_INT_RISC_MASK0;
|
ct->regs.mask = SIRFSOC_INT_RISC_MASK0;
|
||||||
|
|
||||||
irq_setup_generic_chip(gc, IRQ_MSK(num), IRQ_GC_INIT_MASK_CACHE, IRQ_NOREQUEST, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static asmlinkage void __exception_irq_entry sirfsoc_handle_irq(struct pt_regs *regs)
|
static asmlinkage void __exception_irq_entry sirfsoc_handle_irq(struct pt_regs *regs)
|
||||||
|
@ -60,9 +63,8 @@ static int __init sirfsoc_irq_init(struct device_node *np, struct device_node *p
|
||||||
if (!base)
|
if (!base)
|
||||||
panic("unable to map intc cpu registers\n");
|
panic("unable to map intc cpu registers\n");
|
||||||
|
|
||||||
/* using legacy because irqchip_generic does not work with linear */
|
sirfsoc_irqdomain = irq_domain_add_linear(np, SIRFSOC_NUM_IRQS,
|
||||||
sirfsoc_irqdomain = irq_domain_add_legacy(np, SIRFSOC_NUM_IRQS, 0, 0,
|
&irq_generic_chip_ops, base);
|
||||||
&irq_domain_simple_ops, base);
|
|
||||||
|
|
||||||
sirfsoc_alloc_gc(base, 0, 32);
|
sirfsoc_alloc_gc(base, 0, 32);
|
||||||
sirfsoc_alloc_gc(base + 4, 32, SIRFSOC_NUM_IRQS - 32);
|
sirfsoc_alloc_gc(base + 4, 32, SIRFSOC_NUM_IRQS - 32);
|
||||||
|
|
Loading…
Reference in a new issue