Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 2 Mar 2014 19:46:04 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r262695 - in head/sys/arm: conf freescale/imx
Message-ID:  <201403021946.s22Jk43s035997@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Sun Mar  2 19:46:03 2014
New Revision: 262695
URL: http://svnweb.freebsd.org/changeset/base/262695

Log:
  Add a tunable to set the number of active cores, and enable SMP by default.

Modified:
  head/sys/arm/conf/IMX6
  head/sys/arm/freescale/imx/imx6_mp.c

Modified: head/sys/arm/conf/IMX6
==============================================================================
--- head/sys/arm/conf/IMX6	Sun Mar  2 17:19:19 2014	(r262694)
+++ head/sys/arm/conf/IMX6	Sun Mar  2 19:46:03 2014	(r262695)
@@ -143,7 +143,7 @@ options  	ROOTDEVNAME=\"ufs:mmcsd0s2a\"
 
 # ARM and SoC-specific options
 options  	FDT			# Configure using FDT/DTB data.
-#options  	SMP			# Enable multiple cores
+options  	SMP			# Enable multiple cores
 options  	VFP			# Enable floating point hardware support
 options  	FREEBSD_BOOT_LOADER	# Process metadata passed from loader(8)
 

Modified: head/sys/arm/freescale/imx/imx6_mp.c
==============================================================================
--- head/sys/arm/freescale/imx/imx6_mp.c	Sun Mar  2 17:19:19 2014	(r262694)
+++ head/sys/arm/freescale/imx/imx6_mp.c	Sun Mar  2 19:46:03 2014	(r262695)
@@ -29,6 +29,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/bus.h>
+#include <sys/kernel.h>
 #include <sys/lock.h>
 #include <sys/mutex.h>
 #include <sys/smp.h>
@@ -72,6 +73,7 @@ void
 platform_mp_setmaxid(void)
 {
 	bus_space_handle_t scu;
+	int hwcpu, ncpu;
 	uint32_t val;
 
 	/* If we've already set the global vars don't bother to do it again. */
@@ -81,10 +83,16 @@ platform_mp_setmaxid(void)
 	if (bus_space_map(fdtbus_bs_tag, SCU_PHYSBASE, SCU_SIZE, 0, &scu) != 0)
 		panic("Couldn't map the SCU\n");
 	val = bus_space_read_4(fdtbus_bs_tag, scu, SCU_CONFIG_REG);
+	hwcpu = (val & SCU_CONFIG_REG_NCPU_MASK) + 1;
 	bus_space_unmap(fdtbus_bs_tag, scu, SCU_SIZE);
 
-	mp_maxid = (val & SCU_CONFIG_REG_NCPU_MASK);
-	mp_ncpus = mp_maxid + 1;
+	ncpu = hwcpu;
+	TUNABLE_INT_FETCH("hw.ncpu", &ncpu);
+	if (ncpu < 1 || ncpu > hwcpu)
+		ncpu = hwcpu;
+
+	mp_ncpus = ncpu;
+	mp_maxid = ncpu - 1;
 }
 
 int



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201403021946.s22Jk43s035997>