Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Feb 2018 01:46:56 +0000 (UTC)
From:      Justin Hibbits <jhibbits@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r329891 - in head/sys/powerpc: include mpc85xx powerpc
Message-ID:  <201802240146.w1O1kuLT012099@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhibbits
Date: Sat Feb 24 01:46:56 2018
New Revision: 329891
URL: https://svnweb.freebsd.org/changeset/base/329891

Log:
  Remove platform_cpu_idle() and platform_cpu_idle_wakeup() interfaces
  
  These interfaces were put in place to let QorIQ SoCs dictate CPU idling
  semantics, in order to support capabilities such as NAP mode and deep sleep.
  However, this never stabilized, and the idling support reverted back to
  CPU-level rather than SoC level.  Move this code back to cpu.c instead.  If
  at a later date the lower power modes do come to fruition, it should be done
  by overriding the cpu_idle_hook instead of this platform hook.

Modified:
  head/sys/powerpc/include/platform.h
  head/sys/powerpc/mpc85xx/platform_mpc85xx.c
  head/sys/powerpc/powerpc/cpu.c
  head/sys/powerpc/powerpc/platform.c
  head/sys/powerpc/powerpc/platform_if.m

Modified: head/sys/powerpc/include/platform.h
==============================================================================
--- head/sys/powerpc/include/platform.h	Sat Feb 24 01:33:17 2018	(r329890)
+++ head/sys/powerpc/include/platform.h	Sat Feb 24 01:46:56 2018	(r329891)
@@ -62,8 +62,6 @@ void	platform_smp_ap_init(void);
 const char *installed_platform(void);
 void platform_probe_and_attach(void);
 
-void	platform_cpu_idle(int);
-
 void platform_sleep(void);
   
 #endif	/* _MACHINE_PLATFORM_H_ */

Modified: head/sys/powerpc/mpc85xx/platform_mpc85xx.c
==============================================================================
--- head/sys/powerpc/mpc85xx/platform_mpc85xx.c	Sat Feb 24 01:33:17 2018	(r329890)
+++ head/sys/powerpc/mpc85xx/platform_mpc85xx.c	Sat Feb 24 01:46:56 2018	(r329891)
@@ -95,8 +95,6 @@ static int mpc85xx_smp_next_cpu(platform_t, struct cpu
 static int mpc85xx_smp_get_bsp(platform_t, struct cpuref *cpuref);
 static int mpc85xx_smp_start_cpu(platform_t, struct pcpu *cpu);
 static void mpc85xx_smp_timebase_sync(platform_t, u_long tb, int ap);
-static void mpc85xx_idle(platform_t, int cpu);
-static int mpc85xx_idle_wakeup(platform_t plat, int cpu);
 
 static void mpc85xx_reset(platform_t);
 
@@ -113,8 +111,6 @@ static platform_method_t mpc85xx_methods[] = {
 	PLATFORMMETHOD(platform_smp_timebase_sync, mpc85xx_smp_timebase_sync),
 
 	PLATFORMMETHOD(platform_reset,		mpc85xx_reset),
-	PLATFORMMETHOD(platform_idle,		mpc85xx_idle),
-	PLATFORMMETHOD(platform_idle_wakeup,	mpc85xx_idle_wakeup),
 
 	PLATFORMMETHOD_END
 };
@@ -539,28 +535,3 @@ mpc85xx_smp_timebase_sync(platform_t plat, u_long tb, 
 	mttb(tb);
 }
 
-static void
-mpc85xx_idle(platform_t plat, int cpu)
-{
-	uint32_t reg;
-
-	if (mpc85xx_is_qoriq()) {
-		/*
-		 * Base binutils doesn't know what the 'wait' instruction is, so
-		 * use the opcode encoding here.
-		 */
-		__asm __volatile("wrteei 1; .long 0x7c00007c");
-	} else {
-		reg = mfmsr();
-		/* Freescale E500 core RM section 6.4.1. */
-		__asm __volatile("msync; mtmsr %0; isync" ::
-		    "r" (reg | PSL_WE));
-	}
-}
-
-static int
-mpc85xx_idle_wakeup(platform_t plat, int cpu)
-{
-
-	return (0);
-}

Modified: head/sys/powerpc/powerpc/cpu.c
==============================================================================
--- head/sys/powerpc/powerpc/cpu.c	Sat Feb 24 01:33:17 2018	(r329890)
+++ head/sys/powerpc/powerpc/cpu.c	Sat Feb 24 01:46:56 2018	(r329891)
@@ -719,9 +719,29 @@ cpu_idle_60x(sbintime_t sbt)
 static void
 cpu_idle_booke(sbintime_t sbt)
 {
+	register_t msr;
+	uint16_t vers;
 
-#ifdef BOOKE_E500
-	platform_cpu_idle(PCPU_GET(cpuid));
+	msr = mfmsr();
+	vers = mfpvr() >> 16;
+
+#ifdef BOOKE
+	switch (vers) {
+	case FSL_E500mc:
+	case FSL_E5500:
+	case FSL_E6500:
+		/*
+		 * Base binutils doesn't know what the 'wait' instruction is, so
+		 * use the opcode encoding here.
+		 */
+		__asm __volatile(".long 0x7c00007c");
+		break;
+	default:
+		powerpc_sync();
+		mtmsr(msr | PSL_WE);
+		isync();
+		break;
+	}
 #endif
 }
 

Modified: head/sys/powerpc/powerpc/platform.c
==============================================================================
--- head/sys/powerpc/powerpc/platform.c	Sat Feb 24 01:33:17 2018	(r329890)
+++ head/sys/powerpc/powerpc/platform.c	Sat Feb 24 01:46:56 2018	(r329891)
@@ -255,19 +255,6 @@ cpu_reset()
         PLATFORM_RESET(plat_obj);
 }
 
-int
-cpu_idle_wakeup(int cpu)
-{
-	return (PLATFORM_IDLE_WAKEUP(plat_obj, cpu));
-}
-
-void
-platform_cpu_idle(int cpu)
-{
-
-	PLATFORM_IDLE(plat_obj, cpu);
-}
-
 void platform_smp_timebase_sync(u_long tb, int ap)
 {
 

Modified: head/sys/powerpc/powerpc/platform_if.m
==============================================================================
--- head/sys/powerpc/powerpc/platform_if.m	Sat Feb 24 01:33:17 2018	(r329890)
+++ head/sys/powerpc/powerpc/platform_if.m	Sat Feb 24 01:46:56 2018	(r329891)
@@ -84,14 +84,6 @@ CODE {
 	{
 		return;
 	}
-	static void platform_null_idle(platform_t plat, int cpu)
-	{
-		return;
-	}
-	static int platform_null_idle_wakeup(platform_t plat, int cpu)
-	{
-		return (0);
-	}
 };
 
 /**
@@ -217,22 +209,6 @@ METHOD cpu_group_t smp_topo {
 METHOD void reset {
 	platform_t	_plat;
 };
-
-/**
- * @brief Idle a CPU
- */
-METHOD void idle {
-	platform_t	_plat;
-	int		_cpu;
-} DEFAULT platform_null_idle;
-
-/**
- * @brief Wake up an idle CPU
- */
-METHOD int idle_wakeup {
-	platform_t	_plat;
-	int		_cpu;
-} DEFAULT platform_null_idle_wakeup;
 
 /**
  * @brief Suspend the CPU



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