Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 360182
b: refs/heads/master
c: b830cde
h: refs/heads/master
v: v3
  • Loading branch information
Vineet Gupta committed Feb 15, 2013
1 parent d41e910 commit 454d397
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 19 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: 10b1271875abb9d590c14fa6c8b24b0d6f768ca2
refs/heads/master: b830cde5a486d1157105fe928dfa0ddcb9f1b840
1 change: 1 addition & 0 deletions trunk/arch/arc/plat-arcfpga/include/plat/smp.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ extern void idu_irq_set_tgtcpu(uint8_t irq, uint32_t mask);
extern void idu_irq_set_mode(uint8_t irq, uint8_t dest_mode, uint8_t trig_mode);

extern void iss_model_init_smp(unsigned int cpu);
extern void iss_model_init_early_smp(void);

#endif /* CONFIG_SMP */

Expand Down
4 changes: 4 additions & 0 deletions trunk/arch/arc/plat-arcfpga/platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,10 @@ static void __init plat_fpga_early_init(void)
setup_bvci_lat_unit();

arc_fpga_serial_init();

#ifdef CONFIG_SMP
iss_model_init_early_smp();
#endif
}

static struct of_dev_auxdata plat_auxdata_lookup[] __initdata = {
Expand Down
41 changes: 23 additions & 18 deletions trunk/arch/arc/plat-arcfpga/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,25 +24,10 @@ static char smp_cpuinfo_buf[128];
*-------------------------------------------------------------------
*/

const char *arc_platform_smp_cpuinfo(void)
{
#define IS_AVAIL1(var, str) ((var) ? str : "")

struct bcr_mp mp;

READ_BCR(ARC_REG_MP_BCR, mp);

sprintf(smp_cpuinfo_buf, "Extn [700-SMP]: v%d, arch(%d) %s %s %s\n",
mp.ver, mp.mp_arch, IS_AVAIL1(mp.scu, "SCU"),
IS_AVAIL1(mp.idu, "IDU"), IS_AVAIL1(mp.sdu, "SDU"));

return smp_cpuinfo_buf;
}

/*
* Master kick starting another CPU
*/
void arc_platform_smp_wakeup_cpu(int cpu, unsigned long pc)
static void iss_model_smp_wakeup_cpu(int cpu, unsigned long pc)
{
/* setup the start PC */
write_aux_reg(ARC_AUX_XTL_REG_PARAM, pc);
Expand Down Expand Up @@ -103,19 +88,39 @@ void iss_model_init_smp(unsigned int cpu)
smp_ipi_irq_setup(cpu, IDU_INTERRUPT_0 + cpu);
}

void arc_platform_ipi_send(const struct cpumask *callmap)
static void iss_model_ipi_send(void *arg)
{
struct cpumask *callmap = arg;
unsigned int cpu;

for_each_cpu(cpu, callmap)
idu_irq_assert(cpu);
}

void arc_platform_ipi_clear(int cpu, int irq)
static void iss_model_ipi_clear(int cpu, int irq)
{
idu_irq_clear(IDU_INTERRUPT_0 + cpu);
}

void iss_model_init_early_smp(void)
{
#define IS_AVAIL1(var, str) ((var) ? str : "")

struct bcr_mp mp;

READ_BCR(ARC_REG_MP_BCR, mp);

sprintf(smp_cpuinfo_buf, "Extn [ISS-SMP]: v%d, arch(%d) %s %s %s\n",
mp.ver, mp.mp_arch, IS_AVAIL1(mp.scu, "SCU"),
IS_AVAIL1(mp.idu, "IDU"), IS_AVAIL1(mp.sdu, "SDU"));

plat_smp_ops.info = smp_cpuinfo_buf;

plat_smp_ops.cpu_kick = iss_model_smp_wakeup_cpu;
plat_smp_ops.ipi_send = iss_model_ipi_send;
plat_smp_ops.ipi_clear = iss_model_ipi_clear;
}

/*
*-------------------------------------------------------------------
* Low level Platform IPI Providers
Expand Down

0 comments on commit 454d397

Please sign in to comment.