Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 228441
b: refs/heads/master
c: 73a4006
h: refs/heads/master
i:
  228439: ff1dc31
v: v3
  • Loading branch information
Yi Li authored and Mike Frysinger committed Jan 10, 2011
1 parent 34eacb2 commit b55359f
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 134 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: 2c1657c29f810d0ba32cde54cba1e916815493e5
refs/heads/master: 73a400646b8e26615f3ef1a0a4bc0cd0d5bd284c
8 changes: 4 additions & 4 deletions trunk/arch/blackfin/mach-bf561/include/mach/smp.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ int platform_boot_secondary(unsigned int cpu, struct task_struct *idle);

void platform_secondary_init(unsigned int cpu);

void platform_request_ipi(/*irq_handler_t*/ void *handler);
void platform_request_ipi(int irq, /*irq_handler_t*/ void *handler);

void platform_send_ipi(cpumask_t callmap);
void platform_send_ipi(cpumask_t callmap, int irq);

void platform_send_ipi_cpu(unsigned int cpu);
void platform_send_ipi_cpu(unsigned int cpu, int irq);

void platform_clear_ipi(unsigned int cpu);
void platform_clear_ipi(unsigned int cpu, int irq);

void bfin_local_timer_setup(void);

Expand Down
25 changes: 15 additions & 10 deletions trunk/arch/blackfin/mach-bf561/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,41 +111,46 @@ int __cpuinit platform_boot_secondary(unsigned int cpu, struct task_struct *idle
panic("CPU%u: processor failed to boot\n", cpu);
}

void __init platform_request_ipi(void *handler)
static const char supple0[] = "IRQ_SUPPLE_0";
static const char supple1[] = "IRQ_SUPPLE_1";
void __init platform_request_ipi(int irq, void *handler)
{
int ret;
const char *name = (irq == IRQ_SUPPLE_0) ? supple0 : supple1;

ret = request_irq(IRQ_SUPPLE_0, handler, IRQF_DISABLED,
"Supplemental Interrupt0", handler);
ret = request_irq(irq, handler, IRQF_DISABLED | IRQF_PERCPU, name, handler);
if (ret)
panic("Cannot request supplemental interrupt 0 for IPI service");
panic("Cannot request %s for IPI service", name);
}

void platform_send_ipi(cpumask_t callmap)
void platform_send_ipi(cpumask_t callmap, int irq)
{
unsigned int cpu;
int offset = (irq == IRQ_SUPPLE_0) ? 6 : 8;

for_each_cpu_mask(cpu, callmap) {
BUG_ON(cpu >= 2);
SSYNC();
bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | (1 << (6 + cpu)));
bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | (1 << (offset + cpu)));
SSYNC();
}
}

void platform_send_ipi_cpu(unsigned int cpu)
void platform_send_ipi_cpu(unsigned int cpu, int irq)
{
int offset = (irq == IRQ_SUPPLE_0) ? 6 : 8;
BUG_ON(cpu >= 2);
SSYNC();
bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | (1 << (6 + cpu)));
bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | (1 << (offset + cpu)));
SSYNC();
}

void platform_clear_ipi(unsigned int cpu)
void platform_clear_ipi(unsigned int cpu, int irq)
{
int offset = (irq == IRQ_SUPPLE_0) ? 10 : 12;
BUG_ON(cpu >= 2);
SSYNC();
bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | (1 << (10 + cpu)));
bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | (1 << (offset + cpu)));
SSYNC();
}

Expand Down
Loading

0 comments on commit b55359f

Please sign in to comment.