/* * Master kick starting another CPU */ static void __init eznps_smp_wakeup_cpu(int cpu, unsigned long pc) { struct nps_host_reg_mtm_cpu_cfg cpu_cfg; if (mtm_enable_thread(cpu) == 0) return; /* set PC, dmsid, and start CPU */ cpu_cfg.value = (u32)res_service; cpu_cfg.dmsid = NPS_DEFAULT_MSID; cpu_cfg.cs = 1; iowrite32be(cpu_cfg.value, nps_mtm_reg_addr(cpu, NPS_MTM_CPU_CFG)); }
/* * Master kick starting another CPU */ static void eznps_smp_wakeup_cpu(int cpu, unsigned long pc) { struct nps_host_reg_mtm_cpu_cfg cpu_cfg; if (mtm_enable_thread(cpu) == 0) return; /* check pc alignment */ if (!IS_ALIGNED(pc, ARC_PLAT_START_PC_ALIGN)) panic("pc is not properly aligned:%lx", pc); /* set PC, dmsid, and start CPU */ cpu_cfg.value = pc; cpu_cfg.dmsid = NPS_DEFAULT_MSID; cpu_cfg.cs = 1; iowrite32be(cpu_cfg.value, nps_mtm_reg_addr(cpu, NPS_MTM_CPU_CFG)); }