// SPDX-License-Identifier: GPL-2.0 /* * ip30-smp.c: SMP on IP30 architecture. * Based off of the original IP30 SMP code, with inspiration from ip27-smp.c * and smp-bmips.c. * * Copyright (C) 2005-2007 Stanislaw Skowronek <skylark@unaligned.org> * 2006-2007, 2014-2015 Joshua Kinard <linux@kumba.dev> * 2009 Johannes Dickgreber <tanzy@gmx.de>
*/
staticvoid __init ip30_smp_setup(void)
{ int i; int ncpu = 0; struct mpconf *mpc;
init_cpu_possible(cpumask_of(0));
/* Scan the MPCONF structure and enumerate available CPUs. */ for (i = 0; i < MP_NCPU; i++) {
mpc = (struct mpconf *)MPCONF(i); if (mpc->magic == MPCONF_MAGIC) {
set_cpu_possible(i, true);
__cpu_number_map[i] = ++ncpu;
__cpu_logical_map[ncpu] = i;
pr_info("IP30: Slot: %d, PrID: %.8x, PhyID: %d, VirtID: %d\n",
i, mpc->prid, mpc->physid, mpc->virtid);
}
}
pr_info("IP30: Detected %d CPU(s) present.\n", ncpu);
/* * Set the coherency algorithm to '5' (cacheable coherent * exclusive on write). This is needed on IP30 SMP, especially * for R14000 CPUs, otherwise, instruction bus errors will * occur upon reaching userland.
*/
change_c0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_COW);
}
staticvoid __init ip30_smp_prepare_cpus(unsignedint max_cpus)
{ /* nothing to do here */
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.