Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 313797
b: refs/heads/master
c: f84f1f4
h: refs/heads/master
i:
  313795: 7862696
v: v3
  • Loading branch information
Mark Salter committed Jul 19, 2012
1 parent de8ccf1 commit 2c8889e
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b3f89562100ad7d8deecc5a97ac74db7708c1bba
refs/heads/master: f84f1f462bfaf0e45511f97ef54068b8539a7af6
2 changes: 0 additions & 2 deletions trunk/arch/c6x/include/asm/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@
*/
#define NR_PRIORITY_IRQS 16

#define NR_IRQS_LEGACY NR_PRIORITY_IRQS

/* Total number of virq in the platform */
#define NR_IRQS 256

Expand Down
21 changes: 10 additions & 11 deletions trunk/arch/c6x/kernel/irq.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2011 Texas Instruments Incorporated
* Copyright (C) 2011-2012 Texas Instruments Incorporated
*
* This borrows heavily from powerpc version, which is:
*
Expand Down Expand Up @@ -35,9 +35,7 @@ static DEFINE_RAW_SPINLOCK(core_irq_lock);

static void mask_core_irq(struct irq_data *data)
{
unsigned int prio = data->irq;

BUG_ON(prio < 4 || prio >= NR_PRIORITY_IRQS);
unsigned int prio = data->hwirq;

raw_spin_lock(&core_irq_lock);
and_creg(IER, ~(1 << prio));
Expand All @@ -46,7 +44,7 @@ static void mask_core_irq(struct irq_data *data)

static void unmask_core_irq(struct irq_data *data)
{
unsigned int prio = data->irq;
unsigned int prio = data->hwirq;

raw_spin_lock(&core_irq_lock);
or_creg(IER, 1 << prio);
Expand All @@ -59,15 +57,15 @@ static struct irq_chip core_chip = {
.irq_unmask = unmask_core_irq,
};

static int prio_to_virq[NR_PRIORITY_IRQS];

asmlinkage void c6x_do_IRQ(unsigned int prio, struct pt_regs *regs)
{
struct pt_regs *old_regs = set_irq_regs(regs);

irq_enter();

BUG_ON(prio < 4 || prio >= NR_PRIORITY_IRQS);

generic_handle_irq(prio);
generic_handle_irq(prio_to_virq[prio]);

irq_exit();

Expand All @@ -82,6 +80,8 @@ static int core_domain_map(struct irq_domain *h, unsigned int virq,
if (hw < 4 || hw >= NR_PRIORITY_IRQS)
return -EINVAL;

prio_to_virq[hw] = virq;

irq_set_status_flags(virq, IRQ_LEVEL);
irq_set_chip_and_handler(virq, &core_chip, handle_level_irq);
return 0;
Expand All @@ -102,9 +102,8 @@ void __init init_IRQ(void)
np = of_find_compatible_node(NULL, NULL, "ti,c64x+core-pic");
if (np != NULL) {
/* create the core host */
core_domain = irq_domain_add_legacy(np, NR_PRIORITY_IRQS,
0, 0, &core_domain_ops,
NULL);
core_domain = irq_domain_add_linear(np, NR_PRIORITY_IRQS,
&core_domain_ops, NULL);
if (core_domain)
irq_set_default_host(core_domain);
of_node_put(np);
Expand Down

0 comments on commit 2c8889e

Please sign in to comment.