static void shx3_update_boot_vector(unsigned int cpu) { __raw_writel(STBCR_MSTP, STBCR_REG(cpu)); while (!(__raw_readl(STBCR_REG(cpu)) & STBCR_MSTP)) cpu_relax(); __raw_writel(STBCR_RESET, STBCR_REG(cpu)); }
static void shx3_smp_setup(void) { unsigned int cpu = 0; int i, num; init_cpu_possible(cpumask_of(cpu)); /* Enable light sleep for the boot CPU */ __raw_writel(__raw_readl(STBCR_REG(cpu)) | STBCR_LTSLP, STBCR_REG(cpu)); __cpu_number_map[0] = 0; __cpu_logical_map[0] = 0; /* * Do this stupidly for now.. we don't have an easy way to probe * for the total number of cores. */ for (i = 1, num = 0; i < NR_CPUS; i++) { set_cpu_possible(i, true); __cpu_number_map[i] = ++num; __cpu_logical_map[num] = i; } printk(KERN_INFO "Detected %i available secondary CPU(s)\n", num); }
static void shx3_smp_setup(void) { unsigned int cpu = 0; int i, num; init_cpu_possible(cpumask_of(cpu)); /* */ __raw_writel(__raw_readl(STBCR_REG(cpu)) | STBCR_LTSLP, STBCR_REG(cpu)); __cpu_number_map[0] = 0; __cpu_logical_map[0] = 0; /* */ for (i = 1, num = 0; i < NR_CPUS; i++) { set_cpu_possible(i, true); __cpu_number_map[i] = ++num; __cpu_logical_map[num] = i; } printk(KERN_INFO "Detected %i available secondary CPU(s)\n", num); }
static void shx3_start_cpu(unsigned int cpu, unsigned long entry_point) { if (__in_29bit_mode()) __raw_writel(entry_point, RESET_REG(cpu)); else __raw_writel(virt_to_phys(entry_point), RESET_REG(cpu)); if (!(__raw_readl(STBCR_REG(cpu)) & STBCR_MSTP)) __raw_writel(STBCR_MSTP, STBCR_REG(cpu)); while (!(__raw_readl(STBCR_REG(cpu)) & STBCR_MSTP)) cpu_relax(); /* Start up secondary processor by sending a reset */ __raw_writel(STBCR_RESET | STBCR_LTSLP, STBCR_REG(cpu)); }