Difference between revisions of "PPC services"

From Nintendo Switch Brew
Jump to navigation Jump to search
(No longer needed)
 
(21 intermediate revisions by 4 users not shown)
Line 1: Line 1:
APM is utilized for setting system performance profiles including clocks for CPU, GPU, and memory.
+
PPC is used for setting system performance profiles including clocks for CPU, GPU, and memory.
 +
 
 +
[9.0.0+] The PPC system module is now stubbed and all its services were moved into [[PTM_services|PTM]].
  
 
= apm =
 
= apm =
 
This is "nn::apm::IManager".
 
This is "nn::apm::IManager".
 +
 +
This was moved to [[Applet_Manager_services|AM]] with [8.0.0+] and is now a shim for [[#apm:am|apm:am]].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name || Notes
+
! Cmd || Name
 
|-
 
|-
| 0 || OpenSession || Returns an [[#ISession]].
+
| 0 || [[#OpenSession]]
 
|-
 
|-
| 1 || GetPerformanceMode ||  
+
| 1 || GetPerformanceMode
 +
|-
 +
| 6 || [7.0.0+] [[#IsCpuOverclockEnabled]]
 
|}
 
|}
 +
 +
== OpenSession ==
 +
Returns an [[#ISession]].
 +
 +
== IsCpuOverclockEnabled ==
 +
No input, returns an output u8 bool.
  
 
= apm:p =
 
= apm:p =
 
This is "nn::apm::IManagerPrivileged".
 
This is "nn::apm::IManagerPrivileged".
 +
 +
This service no longer exists in [8.0.0+].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name || Notes
+
! Cmd || Name
 
|-
 
|-
| 0 || OpenSession || Returns an [[#ISession]].
+
| 0 || OpenSession
 
|}
 
|}
 +
 +
== OpenSession ==
 +
Returns an [[#ISession]].
 +
 +
= apm:am =
 +
This is "nn::apm::IManager".
 +
 +
This was added with [8.0.0+] and is the same as the old [[#apm|apm]] service.
  
 
= apm:sys =
 
= apm:sys =
Line 28: Line 50:
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name || Notes
+
! Cmd || Name
 +
|-
 +
| 0 || RequestPerformanceMode
 +
|-
 +
| 1 || GetPerformanceEvent
 
|-
 
|-
| 0 || RequestPerformanceMode ||
+
| 2 || GetThrottlingState
 
|-
 
|-
| 1 || GetPerformanceEvent || Returns an [[#ISession]].
+
| 3 || GetLastThrottlingState
 
|-
 
|-
| 2 || GetThrottlingState ||  
+
| 4 || ClearLastThrottlingState
 
|-
 
|-
| 3 || GetLastThrottlingState ||  
+
| 5 || [5.0.0+] LoadAndApplySettings
 
|-
 
|-
| 4 || ClearLastThrottlingState ||  
+
| 6 || [7.0.0+] [[#SetCpuBoostMode]]
 
|-
 
|-
| 5 || [5.0.0+] LoadAndApplySettings ||
+
| 7 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]]
 
|}
 
|}
 +
 +
== GetPerformanceEvent ==
 +
Returns an [[#ISession]].
 +
 +
== SetCpuBoostMode ==
 +
Takes an u32 [[#CpuBoostMode]].
 +
 +
== GetCurrentPerformanceConfiguration ==
 +
Returns the currently active [[#PerformanceConfiguration]] (default value is 0x00020003).
  
 
= ISession =
 
= ISession =
Line 48: Line 83:
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name || Notes
+
! Cmd || Name
 
|-
 
|-
| 0 || SetPerformanceConfiguration || Takes u32 PerformanceMode and u32 PerformanceConfiguration.
+
| 0 || SetPerformanceConfiguration
 
|-
 
|-
| 1 || GetPerformanceConfiguration || Takes u32 PerformanceMode, returns output u32 PerformanceConfiguration.
+
| 1 || GetPerformanceConfiguration
|}
 
 
 
== PerformanceMode ==
 
{| class="wikitable" border="1"
 
 
|-
 
|-
! Value || Name
+
| 2 || [8.0.0+] [[#SetCpuOverclockEnabled]]
|-
 
| 0 || Handheld
 
|-
 
| 1 || Docked
 
 
|}
 
|}
  
== PerformanceConfiguration ==
+
== SetPerformanceConfiguration ==
{| class="wikitable" border="1"
+
Takes an u32 [[#PerformanceMode]] and an u32 [[#PerformanceConfiguration]].
|-
 
! Value || CPU clock || GPU clock || Memory clock
 
|-
 
| 0x00010000 || 1020 || 384 || 1600
 
|-
 
| 0x00010001 || 1020 || 768 || 1600
 
|-
 
| 0x00010002 || 1224 || 691.2 || 1600
 
|-
 
| 0x00020000 || 1020 || 230.4 || 1600
 
|-
 
| 0x00020001 || 1020 || 307.2 || 1600
 
|-
 
| 0x00020002 || 1224|| 230.4 || 1600
 
|-
 
| 0x00020003 || 1020 || 307 || 1331.2
 
|-
 
| 0x00020004 || 1020 || 384 || 1331.2
 
|-
 
| 0x00020005 || 1020 || 307.2 || 1065.6
 
|-
 
| 0x00020006 || 1020 || 384 || 1065.6
 
|-
 
| 0x92220007 || 1020  || 460.8 || 1600
 
|-
 
| 0x92220008 || 1020 || 460.8 || 1331.2
 
|}
 
Clocks are all in MHz.
 
  
Configurations 0x10001 and 0x20000 are only available while docked. Configurations 0x10002 and 0x20002 do not seem to be available at all (dependent on apm settings?).
+
== GetPerformanceConfiguration ==
 +
Takes an u32 [[#PerformanceMode]] and returns an output u32 [[#PerformanceConfiguration]].
  
Some of these require apm:p.
+
== SetCpuOverclockEnabled ==
 +
Takes an input u8 bool, no output.
  
 
= fgm, fgm:0, fgm:9 =
 
= fgm, fgm:0, fgm:9 =
Line 140: Line 141:
 
|}
 
|}
  
= Settings =
+
= CpuBoostMode =
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Key || Size || Notes
+
! Value || Description
 
|-
 
|-
| battery_draining_enabled || 1 || ?
+
| 0 || Disabled.
 
|-
 
|-
| performance_mode_policy || strlen || "auto": use boost mode when docked. "normal": never use boost mode. "boost": always use boost mode (devkit only).
+
| 1 || Boost CPU. Additionally, throttle GPU to minimum.
 +
Use [[#PerformanceConfiguration|performance configurations]] 0x92220009 and 0x9222000A, or 0x9222000B and 0x9222000C.
 
|-
 
|-
| sdev_cpu_overclock_enabled || 1 || Not used as of 3.0. May have been used to allow access to 1224MHz CPU mode?
+
| 2 || Conserve power. Only throttle GPU to minimum.
 +
Use [[#PerformanceConfiguration|performance configurations]] 0x9222000B and 0x9222000C.
 +
|}
 +
 
 +
= PerformanceMode =
 +
{| class="wikitable" border="1"
 
|-
 
|-
| sdev_throttling_additional_delay_us || 4 || ?
+
! Value || Description
 
|-
 
|-
| sdev_throttling_additional_delay_enabled || 1 || ?
+
| -1 || Invalid
 
|-
 
|-
| throttling_for_smpd_enabled || 1 || Not used as of 3.0.
+
| 0 || Normal
 
|-
 
|-
| throttling_for_undock_enabled || 1 || Not used as of 3.0.
+
| 1 || Boost
 
|}
 
|}
 +
 +
= PerformanceConfiguration =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Description || CPU clock (MHz) || GPU clock (MHz) || Memory clock (MHz)
 +
|-
 +
| 0x00000000 || Invalid || 0 || 0 || 0
 +
|-
 +
| 0x00010000 || Cpu1020MhzGpu384Mhz || 1020.0 || 384.0 || 1600.0
 +
|-
 +
| 0x00010001 || Cpu1020MhzGpu768Mhz || 1020.0 || 768.0 || 1600.0
 +
|-
 +
| 0x00010002 || Cpu1224MhzGpu691Mhz || 1224.0 || 691.2 || 1600.0
 +
|-
 +
| 0x00020000 || Cpu1020MhzGpu230Mhz|| 1020.0 || 230.4 || 1600.0
 +
|-
 +
| 0x00020001 || Cpu1020MhzGpu307Mhz || 1020.0 || 307.2 || 1600.0
 +
|-
 +
| 0x00020002 || Cpu1224MhzGpu230Mhz || 1224.0 || 230.4 || 1600.0
 +
|-
 +
| 0x00020003 || Cpu1020MhzGpu307MhzEmc1331Mhz || 1020.0 || 307.2 || 1331.2
 +
|-
 +
| 0x00020004 || Cpu1020MhzGpu384MhzEmc1331Mhz || 1020.0 || 384.0 || 1331.2
 +
|-
 +
| 0x00020005 || Cpu1020MhzGpu307MhzEmc1065Mhz || 1020.0 || 307.2 || 1065.6
 +
|-
 +
| 0x00020006 || Cpu1020MhzGpu384MhzEmc1065Mhz || 1020.0 || 384.0 || 1065.6
 +
|-
 +
| 0x92220007 || Cpu1020MhzGpu460MhzEmc1600Mhz || 1020.0 || 460.8 || 1600.0
 +
|-
 +
| 0x92220008 || Cpu1020MhzGpu460MhzEmc1331Mhz || 1020.0 || 460.8 || 1331.2
 +
|-
 +
| [7.0.0+] 0x92220009 || Cpu1785MhzGpu76MhzEmc1600Mhz || 1785.0 || 76.8 || 1600.0
 +
|-
 +
| [7.0.0+] 0x9222000A || Cpu1785MhzGpu76MhzEmc1331Mhz || 1785.0 || 76.8 || 1331.2
 +
|-
 +
| [7.0.0+] 0x9222000B || Cpu1020MhzGpu76MhzEmc1600Mhz || 1020.0 || 76.8 || 1600.0
 +
|-
 +
| [7.0.0+] 0x9222000C || Cpu1020MhzGpu76MhzEmc1331Mhz || 1020.0 || 76.8 || 1331.2
 +
|}
 +
 +
Configurations 0x10001 and 0x20000 are only available while docked. Configurations 0x10002 and 0x20002 are only available for SDEV units.
 +
 +
Some of these require apm:p.
  
 
[[Category:Services]]
 
[[Category:Services]]

Latest revision as of 19:30, 7 August 2023

PPC is used for setting system performance profiles including clocks for CPU, GPU, and memory.

[9.0.0+] The PPC system module is now stubbed and all its services were moved into PTM.

apm

This is "nn::apm::IManager".

This was moved to AM with [8.0.0+] and is now a shim for apm:am.

Cmd Name
0 #OpenSession
1 GetPerformanceMode
6 [7.0.0+] #IsCpuOverclockEnabled

OpenSession

Returns an #ISession.

IsCpuOverclockEnabled

No input, returns an output u8 bool.

apm:p

This is "nn::apm::IManagerPrivileged".

This service no longer exists in [8.0.0+].

Cmd Name
0 OpenSession

OpenSession

Returns an #ISession.

apm:am

This is "nn::apm::IManager".

This was added with [8.0.0+] and is the same as the old apm service.

apm:sys

This is "nn::apm::ISystemManager".

Cmd Name
0 RequestPerformanceMode
1 GetPerformanceEvent
2 GetThrottlingState
3 GetLastThrottlingState
4 ClearLastThrottlingState
5 [5.0.0+] LoadAndApplySettings
6 [7.0.0+] #SetCpuBoostMode
7 [7.0.0+] #GetCurrentPerformanceConfiguration

GetPerformanceEvent

Returns an #ISession.

SetCpuBoostMode

Takes an u32 #CpuBoostMode.

GetCurrentPerformanceConfiguration

Returns the currently active #PerformanceConfiguration (default value is 0x00020003).

ISession

This is "nn::apm::ISession".

Cmd Name
0 SetPerformanceConfiguration
1 GetPerformanceConfiguration
2 [8.0.0+] #SetCpuOverclockEnabled

SetPerformanceConfiguration

Takes an u32 #PerformanceMode and an u32 #PerformanceConfiguration.

GetPerformanceConfiguration

Takes an u32 #PerformanceMode and returns an output u32 #PerformanceConfiguration.

SetCpuOverclockEnabled

Takes an input u8 bool, no output.

fgm, fgm:0, fgm:9

This is "nn::fgm::sf::ISession".

Cmd Name
0 Initialize

IRequest

This is "nn::fgm::sf::IRequest".

Cmd Name
0 Initialize
1 Set
2 Get
3 Cancel

fgm:dbg

This is "nn::fgm::sf::IDebugger".

Cmd Name
0 Initialize
1 Read
2 Cancel

CpuBoostMode

Value Description
0 Disabled.
1 Boost CPU. Additionally, throttle GPU to minimum.

Use performance configurations 0x92220009 and 0x9222000A, or 0x9222000B and 0x9222000C.

2 Conserve power. Only throttle GPU to minimum.

Use performance configurations 0x9222000B and 0x9222000C.

PerformanceMode

Value Description
-1 Invalid
0 Normal
1 Boost

PerformanceConfiguration

Value Description CPU clock (MHz) GPU clock (MHz) Memory clock (MHz)
0x00000000 Invalid 0 0 0
0x00010000 Cpu1020MhzGpu384Mhz 1020.0 384.0 1600.0
0x00010001 Cpu1020MhzGpu768Mhz 1020.0 768.0 1600.0
0x00010002 Cpu1224MhzGpu691Mhz 1224.0 691.2 1600.0
0x00020000 Cpu1020MhzGpu230Mhz 1020.0 230.4 1600.0
0x00020001 Cpu1020MhzGpu307Mhz 1020.0 307.2 1600.0
0x00020002 Cpu1224MhzGpu230Mhz 1224.0 230.4 1600.0
0x00020003 Cpu1020MhzGpu307MhzEmc1331Mhz 1020.0 307.2 1331.2
0x00020004 Cpu1020MhzGpu384MhzEmc1331Mhz 1020.0 384.0 1331.2
0x00020005 Cpu1020MhzGpu307MhzEmc1065Mhz 1020.0 307.2 1065.6
0x00020006 Cpu1020MhzGpu384MhzEmc1065Mhz 1020.0 384.0 1065.6
0x92220007 Cpu1020MhzGpu460MhzEmc1600Mhz 1020.0 460.8 1600.0
0x92220008 Cpu1020MhzGpu460MhzEmc1331Mhz 1020.0 460.8 1331.2
[7.0.0+] 0x92220009 Cpu1785MhzGpu76MhzEmc1600Mhz 1785.0 76.8 1600.0
[7.0.0+] 0x9222000A Cpu1785MhzGpu76MhzEmc1331Mhz 1785.0 76.8 1331.2
[7.0.0+] 0x9222000B Cpu1020MhzGpu76MhzEmc1600Mhz 1020.0 76.8 1600.0
[7.0.0+] 0x9222000C Cpu1020MhzGpu76MhzEmc1331Mhz 1020.0 76.8 1331.2

Configurations 0x10001 and 0x20000 are only available while docked. Configurations 0x10002 and 0x20002 are only available for SDEV units.

Some of these require apm:p.